pub struct AgentBuilder { /* private fields */ }Implementations§
Source§impl AgentBuilder
impl AgentBuilder
pub fn new(name: impl Into<String>) -> Self
Sourcepub fn config(self, config: Config) -> Self
pub fn config(self, config: Config) -> Self
Examples found in repository?
examples/basic_chat.rs (line 16)
10async fn main() -> helios_engine::Result<()> {
11 // Load configuration from `config.toml`.
12 let config = Config::from_file("config.toml")?;
13
14 // Create a simple agent named "BasicAgent".
15 let mut agent = Agent::builder("BasicAgent")
16 .config(config)
17 .system_prompt("You are a helpful assistant.")
18 .build()
19 .await?;
20
21 // --- Send a message to the agent ---
22 let response = agent.chat("Hello! How are you?").await?;
23 println!("Agent: {}", response);
24
25 // --- Continue the conversation ---
26 let response = agent.chat("What can you help me with?").await?;
27 println!("Agent: {}", response);
28
29 Ok(())
30}More examples
examples/custom_tool.rs (line 80)
74async fn main() -> helios_engine::Result<()> {
75 // Load configuration from `config.toml`.
76 let config = Config::from_file("config.toml")?;
77
78 // Create an agent named "WeatherAgent" and equip it with the `WeatherTool`.
79 let mut agent = Agent::builder("WeatherAgent")
80 .config(config)
81 .system_prompt("You are a helpful weather assistant. Use the weather tool to answer questions about weather.")
82 .tool(Box::new(WeatherTool))
83 .build()
84 .await?;
85
86 // --- Ask the agent about the weather ---
87 let response = agent.chat("What's the weather like in New York?").await?;
88 println!("Agent: {}\n", response);
89
90 // --- Ask again, but with a different unit ---
91 let response = agent.chat("How about in London, but in celsius?").await?;
92 println!("Agent: {}\n", response);
93
94 Ok(())
95}examples/agent_with_tools.rs (line 15)
9async fn main() -> helios_engine::Result<()> {
10 // Load configuration from `config.toml`.
11 let config = Config::from_file("config.toml")?;
12
13 // Create an agent named "ToolAgent" and equip it with the `CalculatorTool` and `EchoTool`.
14 let mut agent = Agent::builder("ToolAgent")
15 .config(config)
16 .system_prompt("You are a helpful assistant with access to tools. Use them when needed.")
17 .tool(Box::new(CalculatorTool))
18 .tool(Box::new(EchoTool))
19 .max_iterations(5)
20 .build()
21 .await?;
22
23 println!(
24 "Available tools: {:?}\n",
25 agent.tool_registry().list_tools()
26 );
27
28 // --- Test the calculator tool ---
29 let response = agent.chat("What is 25 * 4 + 10?").await?;
30 println!("Agent: {}\n", response);
31
32 // --- Test the echo tool ---
33 let response = agent
34 .chat("Can you echo this message: 'Hello from Helios!'")
35 .await?;
36 println!("Agent: {}\n", response);
37
38 Ok(())
39}examples/multiple_agents.rs (line 18)
10async fn main() -> helios_engine::Result<()> {
11 // Load configuration from `config.toml`.
12 let config = Config::from_file("config.toml")?;
13
14 // --- Create multiple agents with different personalities and tools ---
15
16 // An agent specialized in math, equipped with a calculator tool.
17 let mut math_agent = Agent::builder("MathAgent")
18 .config(config.clone())
19 .system_prompt("You are a math expert. You love numbers and equations.")
20 .tool(Box::new(CalculatorTool))
21 .build()
22 .await?;
23
24 // A creative agent for writing and storytelling.
25 let mut creative_agent = Agent::builder("CreativeAgent")
26 .config(config)
27 .system_prompt("You are a creative writer who loves storytelling and poetry.")
28 .build()
29 .await?;
30
31 // --- Interact with the Math Agent ---
32 println!("=== Math Agent ===");
33 let response = math_agent.chat("What is the square root of 144?").await?;
34 println!("Math Agent: {}\n", response);
35
36 // --- Interact with the Creative Agent ---
37 println!("=== Creative Agent ===");
38 let response = creative_agent
39 .chat("Write a haiku about programming.")
40 .await?;
41 println!("Creative Agent: {}\n", response);
42
43 Ok(())
44}examples/agent_with_file_tools.rs (line 22)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with File Tools Example");
12 println!("=================================================\n");
13
14 // Load configuration
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "FileAssistant" and equip it with file tools.
21 let mut agent = Agent::builder("FileAssistant")
22 .config(config)
23 .system_prompt(
24 "You are a helpful file management assistant. You can search for files, \
25 read file contents, and edit files. Always confirm with the user before \
26 making changes to files. Keep track of important session information.",
27 )
28 .tool(Box::new(FileSearchTool))
29 .tool(Box::new(FileReadTool))
30 .tool(Box::new(FileEditTool))
31 .tool(Box::new(FileWriteTool))
32 .max_iterations(10)
33 .build()
34 .await?;
35
36 println!("✓ Agent created with file tools");
37 println!("✓ Available tools: file_search, file_read, file_edit, file_write\n");
38
39 // Set initial session memory for the agent.
40 agent.set_memory("session_start", chrono::Utc::now().to_rfc3339());
41 agent.set_memory(
42 "working_directory",
43 std::env::current_dir()?.display().to_string(),
44 );
45 agent.set_memory("tasks_completed", "0");
46
47 // --- Example 1: Search for Rust files ---
48 println!("Example 1: Searching for Rust files");
49 println!("====================================\n");
50
51 let response = agent
52 .chat("Find all Rust source files in the src directory")
53 .await?;
54 println!("Agent: {}\n", response);
55
56 // Update session memory after the task.
57 agent.increment_tasks_completed();
58 agent.set_memory("last_task", "file_search");
59
60 // --- Example 2: Read a specific file ---
61 println!("\nExample 2: Reading file contents");
62 println!("==================================\n");
63
64 let response = agent
65 .chat("Read the contents of src/lib.rs and give me a summary")
66 .await?;
67 println!("Agent: {}\n", response);
68
69 // Update session memory after the task.
70 agent.increment_tasks_completed();
71 agent.set_memory("last_task", "file_read");
72
73 // --- Example 3: Show session summary ---
74 println!("\nExample 3: Session Summary");
75 println!("==========================\n");
76
77 println!("{}", agent.get_session_summary());
78
79 // --- Example 4: Check session memory ---
80 println!("\nExample 4: Checking Session Memory");
81 println!("===================================\n");
82
83 println!(
84 "Working directory: {}",
85 agent
86 .get_memory("working_directory")
87 .unwrap_or(&"unknown".to_string())
88 );
89 println!(
90 "Tasks completed: {}",
91 agent
92 .get_memory("tasks_completed")
93 .unwrap_or(&"0".to_string())
94 );
95 println!(
96 "Last task: {}",
97 agent.get_memory("last_task").unwrap_or(&"none".to_string())
98 );
99
100 println!("\n✅ Example completed successfully!");
101 println!("\n💡 Key Features Demonstrated:");
102 println!(" • File search with pattern matching and content search");
103 println!(" • File reading with line range support");
104 println!(" • File editing with find/replace functionality");
105 println!(" • Session memory for tracking agent state");
106 println!(" • Streaming responses (works with both local and remote models)");
107
108 Ok(())
109}examples/agent_with_memory_db.rs (line 22)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with Memory DB Example");
12 println!("================================================\n");
13
14 // Load configuration from `config.toml` or use default.
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "DataAgent" and equip it with the MemoryDBTool.
21 let mut agent = Agent::builder("DataAgent")
22 .config(config)
23 .system_prompt(
24 "You are a helpful assistant with access to an in-memory database. \
25 You can store and retrieve information using the memory_db tool. \
26 Operations available: set, get, delete, list, clear, exists. \
27 Use this to remember important information across our conversation.",
28 )
29 .tool(Box::new(MemoryDBTool::new()))
30 .max_iterations(10)
31 .build()
32 .await?;
33
34 println!("✓ Agent created with memory database tool\n");
35
36 // --- Example 1: Store user preferences ---
37 println!("Example 1: Storing User Preferences");
38 println!("====================================\n");
39
40 let response = agent
41 .chat("Store my name as 'Alice' and my favorite color as 'blue' in the database")
42 .await?;
43 println!("Agent: {}\n", response);
44
45 // --- Example 2: Retrieve stored data ---
46 println!("\nExample 2: Retrieving Stored Data");
47 println!("==================================\n");
48
49 let response = agent.chat("What's my name and favorite color?").await?;
50 println!("Agent: {}\n", response);
51
52 // --- Example 3: Store calculations ---
53 println!("\nExample 3: Caching Calculations");
54 println!("================================\n");
55
56 let response = agent
57 .chat("Calculate 123 * 456 and store the result in the database with key 'calculation_result'")
58 .await?;
59 println!("Agent: {}\n", response);
60
61 // --- Example 4: List all stored data ---
62 println!("\nExample 4: Listing All Data");
63 println!("===========================\n");
64
65 let response = agent
66 .chat("Show me everything stored in the database")
67 .await?;
68 println!("Agent: {}\n", response);
69
70 // --- Example 5: Check if key exists ---
71 println!("\nExample 5: Checking Key Existence");
72 println!("==================================\n");
73
74 let response = agent
75 .chat("Check if 'name' and 'age' exist in the database")
76 .await?;
77 println!("Agent: {}\n", response);
78
79 // --- Example 6: Delete specific data ---
80 println!("\nExample 6: Deleting Data");
81 println!("========================\n");
82
83 let response = agent
84 .chat("Delete the 'calculation_result' from the database")
85 .await?;
86 println!("Agent: {}\n", response);
87
88 // --- Example 7: Final state ---
89 println!("\nExample 7: Final Database State");
90 println!("================================\n");
91
92 let response = agent
93 .chat("List all remaining items in the database")
94 .await?;
95 println!("Agent: {}\n", response);
96
97 println!("\n✅ Example completed successfully!");
98 println!("\n💡 Key Features Demonstrated:");
99 println!(" • Setting key-value pairs in memory database");
100 println!(" • Retrieving stored values");
101 println!(" • Listing all database contents");
102 println!(" • Checking key existence");
103 println!(" • Deleting specific entries");
104 println!(" • Persistent data across multiple agent interactions");
105 println!("\n📝 Use Cases:");
106 println!(" • Caching expensive computations");
107 println!(" • Storing user preferences during conversation");
108 println!(" • Maintaining context across multiple queries");
109 println!(" • Temporary data storage for complex workflows");
110
111 Ok(())
112}Additional examples can be found in:
Sourcepub fn system_prompt(self, prompt: impl Into<String>) -> Self
pub fn system_prompt(self, prompt: impl Into<String>) -> Self
Examples found in repository?
examples/basic_chat.rs (line 17)
10async fn main() -> helios_engine::Result<()> {
11 // Load configuration from `config.toml`.
12 let config = Config::from_file("config.toml")?;
13
14 // Create a simple agent named "BasicAgent".
15 let mut agent = Agent::builder("BasicAgent")
16 .config(config)
17 .system_prompt("You are a helpful assistant.")
18 .build()
19 .await?;
20
21 // --- Send a message to the agent ---
22 let response = agent.chat("Hello! How are you?").await?;
23 println!("Agent: {}", response);
24
25 // --- Continue the conversation ---
26 let response = agent.chat("What can you help me with?").await?;
27 println!("Agent: {}", response);
28
29 Ok(())
30}More examples
examples/custom_tool.rs (line 81)
74async fn main() -> helios_engine::Result<()> {
75 // Load configuration from `config.toml`.
76 let config = Config::from_file("config.toml")?;
77
78 // Create an agent named "WeatherAgent" and equip it with the `WeatherTool`.
79 let mut agent = Agent::builder("WeatherAgent")
80 .config(config)
81 .system_prompt("You are a helpful weather assistant. Use the weather tool to answer questions about weather.")
82 .tool(Box::new(WeatherTool))
83 .build()
84 .await?;
85
86 // --- Ask the agent about the weather ---
87 let response = agent.chat("What's the weather like in New York?").await?;
88 println!("Agent: {}\n", response);
89
90 // --- Ask again, but with a different unit ---
91 let response = agent.chat("How about in London, but in celsius?").await?;
92 println!("Agent: {}\n", response);
93
94 Ok(())
95}examples/agent_with_tools.rs (line 16)
9async fn main() -> helios_engine::Result<()> {
10 // Load configuration from `config.toml`.
11 let config = Config::from_file("config.toml")?;
12
13 // Create an agent named "ToolAgent" and equip it with the `CalculatorTool` and `EchoTool`.
14 let mut agent = Agent::builder("ToolAgent")
15 .config(config)
16 .system_prompt("You are a helpful assistant with access to tools. Use them when needed.")
17 .tool(Box::new(CalculatorTool))
18 .tool(Box::new(EchoTool))
19 .max_iterations(5)
20 .build()
21 .await?;
22
23 println!(
24 "Available tools: {:?}\n",
25 agent.tool_registry().list_tools()
26 );
27
28 // --- Test the calculator tool ---
29 let response = agent.chat("What is 25 * 4 + 10?").await?;
30 println!("Agent: {}\n", response);
31
32 // --- Test the echo tool ---
33 let response = agent
34 .chat("Can you echo this message: 'Hello from Helios!'")
35 .await?;
36 println!("Agent: {}\n", response);
37
38 Ok(())
39}examples/multiple_agents.rs (line 19)
10async fn main() -> helios_engine::Result<()> {
11 // Load configuration from `config.toml`.
12 let config = Config::from_file("config.toml")?;
13
14 // --- Create multiple agents with different personalities and tools ---
15
16 // An agent specialized in math, equipped with a calculator tool.
17 let mut math_agent = Agent::builder("MathAgent")
18 .config(config.clone())
19 .system_prompt("You are a math expert. You love numbers and equations.")
20 .tool(Box::new(CalculatorTool))
21 .build()
22 .await?;
23
24 // A creative agent for writing and storytelling.
25 let mut creative_agent = Agent::builder("CreativeAgent")
26 .config(config)
27 .system_prompt("You are a creative writer who loves storytelling and poetry.")
28 .build()
29 .await?;
30
31 // --- Interact with the Math Agent ---
32 println!("=== Math Agent ===");
33 let response = math_agent.chat("What is the square root of 144?").await?;
34 println!("Math Agent: {}\n", response);
35
36 // --- Interact with the Creative Agent ---
37 println!("=== Creative Agent ===");
38 let response = creative_agent
39 .chat("Write a haiku about programming.")
40 .await?;
41 println!("Creative Agent: {}\n", response);
42
43 Ok(())
44}examples/agent_with_file_tools.rs (lines 23-27)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with File Tools Example");
12 println!("=================================================\n");
13
14 // Load configuration
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "FileAssistant" and equip it with file tools.
21 let mut agent = Agent::builder("FileAssistant")
22 .config(config)
23 .system_prompt(
24 "You are a helpful file management assistant. You can search for files, \
25 read file contents, and edit files. Always confirm with the user before \
26 making changes to files. Keep track of important session information.",
27 )
28 .tool(Box::new(FileSearchTool))
29 .tool(Box::new(FileReadTool))
30 .tool(Box::new(FileEditTool))
31 .tool(Box::new(FileWriteTool))
32 .max_iterations(10)
33 .build()
34 .await?;
35
36 println!("✓ Agent created with file tools");
37 println!("✓ Available tools: file_search, file_read, file_edit, file_write\n");
38
39 // Set initial session memory for the agent.
40 agent.set_memory("session_start", chrono::Utc::now().to_rfc3339());
41 agent.set_memory(
42 "working_directory",
43 std::env::current_dir()?.display().to_string(),
44 );
45 agent.set_memory("tasks_completed", "0");
46
47 // --- Example 1: Search for Rust files ---
48 println!("Example 1: Searching for Rust files");
49 println!("====================================\n");
50
51 let response = agent
52 .chat("Find all Rust source files in the src directory")
53 .await?;
54 println!("Agent: {}\n", response);
55
56 // Update session memory after the task.
57 agent.increment_tasks_completed();
58 agent.set_memory("last_task", "file_search");
59
60 // --- Example 2: Read a specific file ---
61 println!("\nExample 2: Reading file contents");
62 println!("==================================\n");
63
64 let response = agent
65 .chat("Read the contents of src/lib.rs and give me a summary")
66 .await?;
67 println!("Agent: {}\n", response);
68
69 // Update session memory after the task.
70 agent.increment_tasks_completed();
71 agent.set_memory("last_task", "file_read");
72
73 // --- Example 3: Show session summary ---
74 println!("\nExample 3: Session Summary");
75 println!("==========================\n");
76
77 println!("{}", agent.get_session_summary());
78
79 // --- Example 4: Check session memory ---
80 println!("\nExample 4: Checking Session Memory");
81 println!("===================================\n");
82
83 println!(
84 "Working directory: {}",
85 agent
86 .get_memory("working_directory")
87 .unwrap_or(&"unknown".to_string())
88 );
89 println!(
90 "Tasks completed: {}",
91 agent
92 .get_memory("tasks_completed")
93 .unwrap_or(&"0".to_string())
94 );
95 println!(
96 "Last task: {}",
97 agent.get_memory("last_task").unwrap_or(&"none".to_string())
98 );
99
100 println!("\n✅ Example completed successfully!");
101 println!("\n💡 Key Features Demonstrated:");
102 println!(" • File search with pattern matching and content search");
103 println!(" • File reading with line range support");
104 println!(" • File editing with find/replace functionality");
105 println!(" • Session memory for tracking agent state");
106 println!(" • Streaming responses (works with both local and remote models)");
107
108 Ok(())
109}examples/agent_with_memory_db.rs (lines 23-28)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with Memory DB Example");
12 println!("================================================\n");
13
14 // Load configuration from `config.toml` or use default.
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "DataAgent" and equip it with the MemoryDBTool.
21 let mut agent = Agent::builder("DataAgent")
22 .config(config)
23 .system_prompt(
24 "You are a helpful assistant with access to an in-memory database. \
25 You can store and retrieve information using the memory_db tool. \
26 Operations available: set, get, delete, list, clear, exists. \
27 Use this to remember important information across our conversation.",
28 )
29 .tool(Box::new(MemoryDBTool::new()))
30 .max_iterations(10)
31 .build()
32 .await?;
33
34 println!("✓ Agent created with memory database tool\n");
35
36 // --- Example 1: Store user preferences ---
37 println!("Example 1: Storing User Preferences");
38 println!("====================================\n");
39
40 let response = agent
41 .chat("Store my name as 'Alice' and my favorite color as 'blue' in the database")
42 .await?;
43 println!("Agent: {}\n", response);
44
45 // --- Example 2: Retrieve stored data ---
46 println!("\nExample 2: Retrieving Stored Data");
47 println!("==================================\n");
48
49 let response = agent.chat("What's my name and favorite color?").await?;
50 println!("Agent: {}\n", response);
51
52 // --- Example 3: Store calculations ---
53 println!("\nExample 3: Caching Calculations");
54 println!("================================\n");
55
56 let response = agent
57 .chat("Calculate 123 * 456 and store the result in the database with key 'calculation_result'")
58 .await?;
59 println!("Agent: {}\n", response);
60
61 // --- Example 4: List all stored data ---
62 println!("\nExample 4: Listing All Data");
63 println!("===========================\n");
64
65 let response = agent
66 .chat("Show me everything stored in the database")
67 .await?;
68 println!("Agent: {}\n", response);
69
70 // --- Example 5: Check if key exists ---
71 println!("\nExample 5: Checking Key Existence");
72 println!("==================================\n");
73
74 let response = agent
75 .chat("Check if 'name' and 'age' exist in the database")
76 .await?;
77 println!("Agent: {}\n", response);
78
79 // --- Example 6: Delete specific data ---
80 println!("\nExample 6: Deleting Data");
81 println!("========================\n");
82
83 let response = agent
84 .chat("Delete the 'calculation_result' from the database")
85 .await?;
86 println!("Agent: {}\n", response);
87
88 // --- Example 7: Final state ---
89 println!("\nExample 7: Final Database State");
90 println!("================================\n");
91
92 let response = agent
93 .chat("List all remaining items in the database")
94 .await?;
95 println!("Agent: {}\n", response);
96
97 println!("\n✅ Example completed successfully!");
98 println!("\n💡 Key Features Demonstrated:");
99 println!(" • Setting key-value pairs in memory database");
100 println!(" • Retrieving stored values");
101 println!(" • Listing all database contents");
102 println!(" • Checking key existence");
103 println!(" • Deleting specific entries");
104 println!(" • Persistent data across multiple agent interactions");
105 println!("\n📝 Use Cases:");
106 println!(" • Caching expensive computations");
107 println!(" • Storing user preferences during conversation");
108 println!(" • Maintaining context across multiple queries");
109 println!(" • Temporary data storage for complex workflows");
110
111 Ok(())
112}Additional examples can be found in:
Sourcepub fn tool(self, tool: Box<dyn Tool>) -> Self
pub fn tool(self, tool: Box<dyn Tool>) -> Self
Examples found in repository?
examples/custom_tool.rs (line 82)
74async fn main() -> helios_engine::Result<()> {
75 // Load configuration from `config.toml`.
76 let config = Config::from_file("config.toml")?;
77
78 // Create an agent named "WeatherAgent" and equip it with the `WeatherTool`.
79 let mut agent = Agent::builder("WeatherAgent")
80 .config(config)
81 .system_prompt("You are a helpful weather assistant. Use the weather tool to answer questions about weather.")
82 .tool(Box::new(WeatherTool))
83 .build()
84 .await?;
85
86 // --- Ask the agent about the weather ---
87 let response = agent.chat("What's the weather like in New York?").await?;
88 println!("Agent: {}\n", response);
89
90 // --- Ask again, but with a different unit ---
91 let response = agent.chat("How about in London, but in celsius?").await?;
92 println!("Agent: {}\n", response);
93
94 Ok(())
95}More examples
examples/agent_with_tools.rs (line 17)
9async fn main() -> helios_engine::Result<()> {
10 // Load configuration from `config.toml`.
11 let config = Config::from_file("config.toml")?;
12
13 // Create an agent named "ToolAgent" and equip it with the `CalculatorTool` and `EchoTool`.
14 let mut agent = Agent::builder("ToolAgent")
15 .config(config)
16 .system_prompt("You are a helpful assistant with access to tools. Use them when needed.")
17 .tool(Box::new(CalculatorTool))
18 .tool(Box::new(EchoTool))
19 .max_iterations(5)
20 .build()
21 .await?;
22
23 println!(
24 "Available tools: {:?}\n",
25 agent.tool_registry().list_tools()
26 );
27
28 // --- Test the calculator tool ---
29 let response = agent.chat("What is 25 * 4 + 10?").await?;
30 println!("Agent: {}\n", response);
31
32 // --- Test the echo tool ---
33 let response = agent
34 .chat("Can you echo this message: 'Hello from Helios!'")
35 .await?;
36 println!("Agent: {}\n", response);
37
38 Ok(())
39}examples/multiple_agents.rs (line 20)
10async fn main() -> helios_engine::Result<()> {
11 // Load configuration from `config.toml`.
12 let config = Config::from_file("config.toml")?;
13
14 // --- Create multiple agents with different personalities and tools ---
15
16 // An agent specialized in math, equipped with a calculator tool.
17 let mut math_agent = Agent::builder("MathAgent")
18 .config(config.clone())
19 .system_prompt("You are a math expert. You love numbers and equations.")
20 .tool(Box::new(CalculatorTool))
21 .build()
22 .await?;
23
24 // A creative agent for writing and storytelling.
25 let mut creative_agent = Agent::builder("CreativeAgent")
26 .config(config)
27 .system_prompt("You are a creative writer who loves storytelling and poetry.")
28 .build()
29 .await?;
30
31 // --- Interact with the Math Agent ---
32 println!("=== Math Agent ===");
33 let response = math_agent.chat("What is the square root of 144?").await?;
34 println!("Math Agent: {}\n", response);
35
36 // --- Interact with the Creative Agent ---
37 println!("=== Creative Agent ===");
38 let response = creative_agent
39 .chat("Write a haiku about programming.")
40 .await?;
41 println!("Creative Agent: {}\n", response);
42
43 Ok(())
44}examples/agent_with_file_tools.rs (line 28)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with File Tools Example");
12 println!("=================================================\n");
13
14 // Load configuration
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "FileAssistant" and equip it with file tools.
21 let mut agent = Agent::builder("FileAssistant")
22 .config(config)
23 .system_prompt(
24 "You are a helpful file management assistant. You can search for files, \
25 read file contents, and edit files. Always confirm with the user before \
26 making changes to files. Keep track of important session information.",
27 )
28 .tool(Box::new(FileSearchTool))
29 .tool(Box::new(FileReadTool))
30 .tool(Box::new(FileEditTool))
31 .tool(Box::new(FileWriteTool))
32 .max_iterations(10)
33 .build()
34 .await?;
35
36 println!("✓ Agent created with file tools");
37 println!("✓ Available tools: file_search, file_read, file_edit, file_write\n");
38
39 // Set initial session memory for the agent.
40 agent.set_memory("session_start", chrono::Utc::now().to_rfc3339());
41 agent.set_memory(
42 "working_directory",
43 std::env::current_dir()?.display().to_string(),
44 );
45 agent.set_memory("tasks_completed", "0");
46
47 // --- Example 1: Search for Rust files ---
48 println!("Example 1: Searching for Rust files");
49 println!("====================================\n");
50
51 let response = agent
52 .chat("Find all Rust source files in the src directory")
53 .await?;
54 println!("Agent: {}\n", response);
55
56 // Update session memory after the task.
57 agent.increment_tasks_completed();
58 agent.set_memory("last_task", "file_search");
59
60 // --- Example 2: Read a specific file ---
61 println!("\nExample 2: Reading file contents");
62 println!("==================================\n");
63
64 let response = agent
65 .chat("Read the contents of src/lib.rs and give me a summary")
66 .await?;
67 println!("Agent: {}\n", response);
68
69 // Update session memory after the task.
70 agent.increment_tasks_completed();
71 agent.set_memory("last_task", "file_read");
72
73 // --- Example 3: Show session summary ---
74 println!("\nExample 3: Session Summary");
75 println!("==========================\n");
76
77 println!("{}", agent.get_session_summary());
78
79 // --- Example 4: Check session memory ---
80 println!("\nExample 4: Checking Session Memory");
81 println!("===================================\n");
82
83 println!(
84 "Working directory: {}",
85 agent
86 .get_memory("working_directory")
87 .unwrap_or(&"unknown".to_string())
88 );
89 println!(
90 "Tasks completed: {}",
91 agent
92 .get_memory("tasks_completed")
93 .unwrap_or(&"0".to_string())
94 );
95 println!(
96 "Last task: {}",
97 agent.get_memory("last_task").unwrap_or(&"none".to_string())
98 );
99
100 println!("\n✅ Example completed successfully!");
101 println!("\n💡 Key Features Demonstrated:");
102 println!(" • File search with pattern matching and content search");
103 println!(" • File reading with line range support");
104 println!(" • File editing with find/replace functionality");
105 println!(" • Session memory for tracking agent state");
106 println!(" • Streaming responses (works with both local and remote models)");
107
108 Ok(())
109}examples/agent_with_memory_db.rs (line 29)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with Memory DB Example");
12 println!("================================================\n");
13
14 // Load configuration from `config.toml` or use default.
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "DataAgent" and equip it with the MemoryDBTool.
21 let mut agent = Agent::builder("DataAgent")
22 .config(config)
23 .system_prompt(
24 "You are a helpful assistant with access to an in-memory database. \
25 You can store and retrieve information using the memory_db tool. \
26 Operations available: set, get, delete, list, clear, exists. \
27 Use this to remember important information across our conversation.",
28 )
29 .tool(Box::new(MemoryDBTool::new()))
30 .max_iterations(10)
31 .build()
32 .await?;
33
34 println!("✓ Agent created with memory database tool\n");
35
36 // --- Example 1: Store user preferences ---
37 println!("Example 1: Storing User Preferences");
38 println!("====================================\n");
39
40 let response = agent
41 .chat("Store my name as 'Alice' and my favorite color as 'blue' in the database")
42 .await?;
43 println!("Agent: {}\n", response);
44
45 // --- Example 2: Retrieve stored data ---
46 println!("\nExample 2: Retrieving Stored Data");
47 println!("==================================\n");
48
49 let response = agent.chat("What's my name and favorite color?").await?;
50 println!("Agent: {}\n", response);
51
52 // --- Example 3: Store calculations ---
53 println!("\nExample 3: Caching Calculations");
54 println!("================================\n");
55
56 let response = agent
57 .chat("Calculate 123 * 456 and store the result in the database with key 'calculation_result'")
58 .await?;
59 println!("Agent: {}\n", response);
60
61 // --- Example 4: List all stored data ---
62 println!("\nExample 4: Listing All Data");
63 println!("===========================\n");
64
65 let response = agent
66 .chat("Show me everything stored in the database")
67 .await?;
68 println!("Agent: {}\n", response);
69
70 // --- Example 5: Check if key exists ---
71 println!("\nExample 5: Checking Key Existence");
72 println!("==================================\n");
73
74 let response = agent
75 .chat("Check if 'name' and 'age' exist in the database")
76 .await?;
77 println!("Agent: {}\n", response);
78
79 // --- Example 6: Delete specific data ---
80 println!("\nExample 6: Deleting Data");
81 println!("========================\n");
82
83 let response = agent
84 .chat("Delete the 'calculation_result' from the database")
85 .await?;
86 println!("Agent: {}\n", response);
87
88 // --- Example 7: Final state ---
89 println!("\nExample 7: Final Database State");
90 println!("================================\n");
91
92 let response = agent
93 .chat("List all remaining items in the database")
94 .await?;
95 println!("Agent: {}\n", response);
96
97 println!("\n✅ Example completed successfully!");
98 println!("\n💡 Key Features Demonstrated:");
99 println!(" • Setting key-value pairs in memory database");
100 println!(" • Retrieving stored values");
101 println!(" • Listing all database contents");
102 println!(" • Checking key existence");
103 println!(" • Deleting specific entries");
104 println!(" • Persistent data across multiple agent interactions");
105 println!("\n📝 Use Cases:");
106 println!(" • Caching expensive computations");
107 println!(" • Storing user preferences during conversation");
108 println!(" • Maintaining context across multiple queries");
109 println!(" • Temporary data storage for complex workflows");
110
111 Ok(())
112}examples/agent_with_rag.rs (line 55)
23async fn main() -> helios_engine::Result<()> {
24 println!("🚀 Helios Engine - Agent with RAG Example");
25 println!("==========================================\n");
26
27 // Check for the required OpenAI API key.
28 let embedding_api_key = std::env::var("OPENAI_API_KEY").unwrap_or_else(|_| {
29 println!("⚠ Warning: OPENAI_API_KEY not set. Using placeholder.");
30 "your-api-key-here".to_string()
31 });
32
33 // Load configuration from `config.toml` or use default.
34 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
35 println!("⚠ No config.toml found, using default configuration");
36 Config::new_default()
37 });
38
39 // Create a new `QdrantRAGTool`.
40 let rag_tool = QdrantRAGTool::new(
41 "http://localhost:6333", // Qdrant URL
42 "helios_knowledge", // Collection name
43 "https://api.openai.com/v1/embeddings", // Embedding API
44 embedding_api_key, // API key
45 );
46
47 // Create an agent named "KnowledgeAgent" and equip it with the RAG tool.
48 let mut agent = Agent::builder("KnowledgeAgent")
49 .config(config)
50 .system_prompt(
51 "You are a helpful assistant with access to a RAG (Retrieval-Augmented Generation) system. \
52 You can store documents and retrieve relevant information to answer questions. \
53 When answering questions, first search for relevant documents, then provide informed answers based on the retrieved context."
54 )
55 .tool(Box::new(rag_tool))
56 .max_iterations(10)
57 .build()
58 .await?;
59
60 println!("✓ Agent created with RAG capabilities\n");
61
62 // --- Example 1: Add knowledge to the database ---
63 println!("Example 1: Adding Documents to Knowledge Base");
64 println!("==============================================\n");
65
66 let response = agent
67 .chat(
68 "Store this information: Rust is a systems programming language that runs blazingly fast, \
69 prevents segfaults, and guarantees thread safety. It was created by Mozilla Research."
70 )
71 .await?;
72 println!("Agent: {}\n", response);
73
74 let response = agent
75 .chat(
76 "Store this: Python is a high-level, interpreted programming language known for its \
77 clear syntax and readability. It was created by Guido van Rossum in 1991.",
78 )
79 .await?;
80 println!("Agent: {}\n", response);
81
82 let response = agent
83 .chat(
84 "Store this: JavaScript is a programming language commonly used for web development. \
85 It allows developers to create interactive web pages and runs in web browsers.",
86 )
87 .await?;
88 println!("Agent: {}\n", response);
89
90 // --- Example 2: Semantic search - ask questions ---
91 println!("\nExample 2: Semantic Search and Q&A");
92 println!("===================================\n");
93
94 let response = agent
95 .chat("What programming language is known for preventing segfaults?")
96 .await?;
97 println!("Agent: {}\n", response);
98
99 let response = agent
100 .chat("Tell me about the programming language created in 1991")
101 .await?;
102 println!("Agent: {}\n", response);
103
104 // --- Example 3: Multi-document retrieval ---
105 println!("\nExample 3: Multi-Document Retrieval");
106 println!("====================================\n");
107
108 let response = agent
109 .chat("Search for information about programming languages and summarize what you find")
110 .await?;
111 println!("Agent: {}\n", response);
112
113 // --- Example 4: Adding documents with metadata ---
114 println!("\nExample 4: Documents with Metadata");
115 println!("===================================\n");
116
117 let response = agent
118 .chat(
119 "Store this with metadata: \
120 The Helios Engine is a Rust framework for building LLM agents. \
121 Metadata: category=framework, language=rust, year=2024",
122 )
123 .await?;
124 println!("Agent: {}\n", response);
125
126 println!("\n✅ Example completed successfully!");
127 println!("\n💡 Key Features Demonstrated:");
128 println!(" • Document embedding with OpenAI embeddings");
129 println!(" • Vector storage in Qdrant database");
130 println!(" • Semantic search with cosine similarity");
131 println!(" • RAG workflow for context-aware answers");
132 println!(" • Metadata support for document organization");
133
134 println!("\n📝 RAG Use Cases:");
135 println!(" • Question answering over custom knowledge bases");
136 println!(" • Document search and retrieval");
137 println!(" • Building chatbots with domain-specific knowledge");
138 println!(" • Information extraction from large document sets");
139
140 println!("\n🔧 Setup Instructions:");
141 println!(" 1. Start Qdrant: docker run -p 6333:6333 qdrant/qdrant");
142 println!(" 2. Set API key: export OPENAI_API_KEY=your-key");
143 println!(" 3. Run example: cargo run --example agent_with_rag");
144
145 Ok(())
146}Additional examples can be found in:
Sourcepub fn max_iterations(self, max: usize) -> Self
pub fn max_iterations(self, max: usize) -> Self
Examples found in repository?
examples/agent_with_tools.rs (line 19)
9async fn main() -> helios_engine::Result<()> {
10 // Load configuration from `config.toml`.
11 let config = Config::from_file("config.toml")?;
12
13 // Create an agent named "ToolAgent" and equip it with the `CalculatorTool` and `EchoTool`.
14 let mut agent = Agent::builder("ToolAgent")
15 .config(config)
16 .system_prompt("You are a helpful assistant with access to tools. Use them when needed.")
17 .tool(Box::new(CalculatorTool))
18 .tool(Box::new(EchoTool))
19 .max_iterations(5)
20 .build()
21 .await?;
22
23 println!(
24 "Available tools: {:?}\n",
25 agent.tool_registry().list_tools()
26 );
27
28 // --- Test the calculator tool ---
29 let response = agent.chat("What is 25 * 4 + 10?").await?;
30 println!("Agent: {}\n", response);
31
32 // --- Test the echo tool ---
33 let response = agent
34 .chat("Can you echo this message: 'Hello from Helios!'")
35 .await?;
36 println!("Agent: {}\n", response);
37
38 Ok(())
39}More examples
examples/agent_with_file_tools.rs (line 32)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with File Tools Example");
12 println!("=================================================\n");
13
14 // Load configuration
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "FileAssistant" and equip it with file tools.
21 let mut agent = Agent::builder("FileAssistant")
22 .config(config)
23 .system_prompt(
24 "You are a helpful file management assistant. You can search for files, \
25 read file contents, and edit files. Always confirm with the user before \
26 making changes to files. Keep track of important session information.",
27 )
28 .tool(Box::new(FileSearchTool))
29 .tool(Box::new(FileReadTool))
30 .tool(Box::new(FileEditTool))
31 .tool(Box::new(FileWriteTool))
32 .max_iterations(10)
33 .build()
34 .await?;
35
36 println!("✓ Agent created with file tools");
37 println!("✓ Available tools: file_search, file_read, file_edit, file_write\n");
38
39 // Set initial session memory for the agent.
40 agent.set_memory("session_start", chrono::Utc::now().to_rfc3339());
41 agent.set_memory(
42 "working_directory",
43 std::env::current_dir()?.display().to_string(),
44 );
45 agent.set_memory("tasks_completed", "0");
46
47 // --- Example 1: Search for Rust files ---
48 println!("Example 1: Searching for Rust files");
49 println!("====================================\n");
50
51 let response = agent
52 .chat("Find all Rust source files in the src directory")
53 .await?;
54 println!("Agent: {}\n", response);
55
56 // Update session memory after the task.
57 agent.increment_tasks_completed();
58 agent.set_memory("last_task", "file_search");
59
60 // --- Example 2: Read a specific file ---
61 println!("\nExample 2: Reading file contents");
62 println!("==================================\n");
63
64 let response = agent
65 .chat("Read the contents of src/lib.rs and give me a summary")
66 .await?;
67 println!("Agent: {}\n", response);
68
69 // Update session memory after the task.
70 agent.increment_tasks_completed();
71 agent.set_memory("last_task", "file_read");
72
73 // --- Example 3: Show session summary ---
74 println!("\nExample 3: Session Summary");
75 println!("==========================\n");
76
77 println!("{}", agent.get_session_summary());
78
79 // --- Example 4: Check session memory ---
80 println!("\nExample 4: Checking Session Memory");
81 println!("===================================\n");
82
83 println!(
84 "Working directory: {}",
85 agent
86 .get_memory("working_directory")
87 .unwrap_or(&"unknown".to_string())
88 );
89 println!(
90 "Tasks completed: {}",
91 agent
92 .get_memory("tasks_completed")
93 .unwrap_or(&"0".to_string())
94 );
95 println!(
96 "Last task: {}",
97 agent.get_memory("last_task").unwrap_or(&"none".to_string())
98 );
99
100 println!("\n✅ Example completed successfully!");
101 println!("\n💡 Key Features Demonstrated:");
102 println!(" • File search with pattern matching and content search");
103 println!(" • File reading with line range support");
104 println!(" • File editing with find/replace functionality");
105 println!(" • Session memory for tracking agent state");
106 println!(" • Streaming responses (works with both local and remote models)");
107
108 Ok(())
109}examples/agent_with_memory_db.rs (line 30)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with Memory DB Example");
12 println!("================================================\n");
13
14 // Load configuration from `config.toml` or use default.
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "DataAgent" and equip it with the MemoryDBTool.
21 let mut agent = Agent::builder("DataAgent")
22 .config(config)
23 .system_prompt(
24 "You are a helpful assistant with access to an in-memory database. \
25 You can store and retrieve information using the memory_db tool. \
26 Operations available: set, get, delete, list, clear, exists. \
27 Use this to remember important information across our conversation.",
28 )
29 .tool(Box::new(MemoryDBTool::new()))
30 .max_iterations(10)
31 .build()
32 .await?;
33
34 println!("✓ Agent created with memory database tool\n");
35
36 // --- Example 1: Store user preferences ---
37 println!("Example 1: Storing User Preferences");
38 println!("====================================\n");
39
40 let response = agent
41 .chat("Store my name as 'Alice' and my favorite color as 'blue' in the database")
42 .await?;
43 println!("Agent: {}\n", response);
44
45 // --- Example 2: Retrieve stored data ---
46 println!("\nExample 2: Retrieving Stored Data");
47 println!("==================================\n");
48
49 let response = agent.chat("What's my name and favorite color?").await?;
50 println!("Agent: {}\n", response);
51
52 // --- Example 3: Store calculations ---
53 println!("\nExample 3: Caching Calculations");
54 println!("================================\n");
55
56 let response = agent
57 .chat("Calculate 123 * 456 and store the result in the database with key 'calculation_result'")
58 .await?;
59 println!("Agent: {}\n", response);
60
61 // --- Example 4: List all stored data ---
62 println!("\nExample 4: Listing All Data");
63 println!("===========================\n");
64
65 let response = agent
66 .chat("Show me everything stored in the database")
67 .await?;
68 println!("Agent: {}\n", response);
69
70 // --- Example 5: Check if key exists ---
71 println!("\nExample 5: Checking Key Existence");
72 println!("==================================\n");
73
74 let response = agent
75 .chat("Check if 'name' and 'age' exist in the database")
76 .await?;
77 println!("Agent: {}\n", response);
78
79 // --- Example 6: Delete specific data ---
80 println!("\nExample 6: Deleting Data");
81 println!("========================\n");
82
83 let response = agent
84 .chat("Delete the 'calculation_result' from the database")
85 .await?;
86 println!("Agent: {}\n", response);
87
88 // --- Example 7: Final state ---
89 println!("\nExample 7: Final Database State");
90 println!("================================\n");
91
92 let response = agent
93 .chat("List all remaining items in the database")
94 .await?;
95 println!("Agent: {}\n", response);
96
97 println!("\n✅ Example completed successfully!");
98 println!("\n💡 Key Features Demonstrated:");
99 println!(" • Setting key-value pairs in memory database");
100 println!(" • Retrieving stored values");
101 println!(" • Listing all database contents");
102 println!(" • Checking key existence");
103 println!(" • Deleting specific entries");
104 println!(" • Persistent data across multiple agent interactions");
105 println!("\n📝 Use Cases:");
106 println!(" • Caching expensive computations");
107 println!(" • Storing user preferences during conversation");
108 println!(" • Maintaining context across multiple queries");
109 println!(" • Temporary data storage for complex workflows");
110
111 Ok(())
112}examples/agent_with_rag.rs (line 56)
23async fn main() -> helios_engine::Result<()> {
24 println!("🚀 Helios Engine - Agent with RAG Example");
25 println!("==========================================\n");
26
27 // Check for the required OpenAI API key.
28 let embedding_api_key = std::env::var("OPENAI_API_KEY").unwrap_or_else(|_| {
29 println!("⚠ Warning: OPENAI_API_KEY not set. Using placeholder.");
30 "your-api-key-here".to_string()
31 });
32
33 // Load configuration from `config.toml` or use default.
34 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
35 println!("⚠ No config.toml found, using default configuration");
36 Config::new_default()
37 });
38
39 // Create a new `QdrantRAGTool`.
40 let rag_tool = QdrantRAGTool::new(
41 "http://localhost:6333", // Qdrant URL
42 "helios_knowledge", // Collection name
43 "https://api.openai.com/v1/embeddings", // Embedding API
44 embedding_api_key, // API key
45 );
46
47 // Create an agent named "KnowledgeAgent" and equip it with the RAG tool.
48 let mut agent = Agent::builder("KnowledgeAgent")
49 .config(config)
50 .system_prompt(
51 "You are a helpful assistant with access to a RAG (Retrieval-Augmented Generation) system. \
52 You can store documents and retrieve relevant information to answer questions. \
53 When answering questions, first search for relevant documents, then provide informed answers based on the retrieved context."
54 )
55 .tool(Box::new(rag_tool))
56 .max_iterations(10)
57 .build()
58 .await?;
59
60 println!("✓ Agent created with RAG capabilities\n");
61
62 // --- Example 1: Add knowledge to the database ---
63 println!("Example 1: Adding Documents to Knowledge Base");
64 println!("==============================================\n");
65
66 let response = agent
67 .chat(
68 "Store this information: Rust is a systems programming language that runs blazingly fast, \
69 prevents segfaults, and guarantees thread safety. It was created by Mozilla Research."
70 )
71 .await?;
72 println!("Agent: {}\n", response);
73
74 let response = agent
75 .chat(
76 "Store this: Python is a high-level, interpreted programming language known for its \
77 clear syntax and readability. It was created by Guido van Rossum in 1991.",
78 )
79 .await?;
80 println!("Agent: {}\n", response);
81
82 let response = agent
83 .chat(
84 "Store this: JavaScript is a programming language commonly used for web development. \
85 It allows developers to create interactive web pages and runs in web browsers.",
86 )
87 .await?;
88 println!("Agent: {}\n", response);
89
90 // --- Example 2: Semantic search - ask questions ---
91 println!("\nExample 2: Semantic Search and Q&A");
92 println!("===================================\n");
93
94 let response = agent
95 .chat("What programming language is known for preventing segfaults?")
96 .await?;
97 println!("Agent: {}\n", response);
98
99 let response = agent
100 .chat("Tell me about the programming language created in 1991")
101 .await?;
102 println!("Agent: {}\n", response);
103
104 // --- Example 3: Multi-document retrieval ---
105 println!("\nExample 3: Multi-Document Retrieval");
106 println!("====================================\n");
107
108 let response = agent
109 .chat("Search for information about programming languages and summarize what you find")
110 .await?;
111 println!("Agent: {}\n", response);
112
113 // --- Example 4: Adding documents with metadata ---
114 println!("\nExample 4: Documents with Metadata");
115 println!("===================================\n");
116
117 let response = agent
118 .chat(
119 "Store this with metadata: \
120 The Helios Engine is a Rust framework for building LLM agents. \
121 Metadata: category=framework, language=rust, year=2024",
122 )
123 .await?;
124 println!("Agent: {}\n", response);
125
126 println!("\n✅ Example completed successfully!");
127 println!("\n💡 Key Features Demonstrated:");
128 println!(" • Document embedding with OpenAI embeddings");
129 println!(" • Vector storage in Qdrant database");
130 println!(" • Semantic search with cosine similarity");
131 println!(" • RAG workflow for context-aware answers");
132 println!(" • Metadata support for document organization");
133
134 println!("\n📝 RAG Use Cases:");
135 println!(" • Question answering over custom knowledge bases");
136 println!(" • Document search and retrieval");
137 println!(" • Building chatbots with domain-specific knowledge");
138 println!(" • Information extraction from large document sets");
139
140 println!("\n🔧 Setup Instructions:");
141 println!(" 1. Start Qdrant: docker run -p 6333:6333 qdrant/qdrant");
142 println!(" 2. Set API key: export OPENAI_API_KEY=your-key");
143 println!(" 3. Run example: cargo run --example agent_with_rag");
144
145 Ok(())
146}examples/complete_demo.rs (line 35)
12async fn main() -> helios_engine::Result<()> {
13 println!("🚀 Helios Engine - Complete Feature Demo");
14 println!("=========================================\n");
15
16 // Load configuration from `config.toml` or use default.
17 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
18 println!("⚠ No config.toml found, using default configuration");
19 Config::new_default()
20 });
21
22 // Create an agent named "SmartAssistant" and equip it with all file tools.
23 println!("📦 Creating agent with file tools...");
24 let mut agent = Agent::builder("SmartAssistant")
25 .config(config)
26 .system_prompt(
27 "You are an intelligent assistant with file management capabilities. \
28 You can search files, read them, and make edits. Always explain what \
29 you're doing and track important information in session memory.",
30 )
31 .tool(Box::new(FileSearchTool))
32 .tool(Box::new(FileReadTool))
33 .tool(Box::new(FileEditTool))
34 .tool(Box::new(FileWriteTool))
35 .max_iterations(10)
36 .build()
37 .await?;
38
39 println!("✓ Agent created successfully!\n");
40
41 // Initialize session memory with some starting values.
42 println!("🧠 Initializing session memory...");
43 agent.set_memory("session_start", chrono::Utc::now().to_rfc3339());
44 agent.set_memory(
45 "working_directory",
46 std::env::current_dir()?.display().to_string(),
47 );
48 agent.set_memory("files_accessed", "0");
49 agent.set_memory("edits_made", "0");
50 println!("✓ Session memory initialized\n");
51
52 // --- Demo 1: Search for files with streaming response ---
53 println!("Demo 1: File Search with Streaming");
54 println!("===================================");
55 println!("User: Find all Rust example files\n");
56
57 print!("Agent: ");
58 io::stdout().flush()?;
59
60 let response1 = agent
61 .chat("Find all Rust example files in the examples directory")
62 .await?;
63 println!("{}\n", response1);
64
65 // Update session memory after the task.
66 agent.increment_counter("files_accessed");
67 agent.set_memory("last_action", "file_search");
68
69 // --- Demo 2: Read a file ---
70 println!("\nDemo 2: Reading File Contents");
71 println!("==============================");
72 println!("User: Read the NEW_FEATURES.md file and summarize the key points\n");
73
74 print!("Agent: ");
75 io::stdout().flush()?;
76
77 let response2 = agent
78 .chat("Read the NEW_FEATURES.md file and give me a brief summary of what's new")
79 .await?;
80 println!("{}\n", response2);
81
82 // Update session memory after the task.
83 agent.increment_counter("files_accessed");
84 agent.set_memory("last_action", "file_read");
85
86 // --- Demo 3: Show session summary ---
87 println!("\nDemo 3: Session Summary");
88 println!("=======================\n");
89 println!("{}", agent.get_session_summary());
90
91 // --- Demo 4: Interactive mode ---
92 println!("\n\nDemo 4: Interactive Mode");
93 println!("========================");
94 println!("You can now interact with the agent. Type 'exit' to quit.\n");
95
96 loop {
97 print!("\nYou: ");
98 io::stdout().flush()?;
99
100 let mut input = String::new();
101 io::stdin().read_line(&mut input)?;
102 let input = input.trim();
103
104 if input.is_empty() {
105 continue;
106 }
107
108 match input.to_lowercase().as_str() {
109 "exit" | "quit" => {
110 println!("\n👋 Goodbye!");
111 break;
112 }
113 "summary" => {
114 println!("\n📊 Session Summary:");
115 println!("{}", agent.get_session_summary());
116 continue;
117 }
118 "memory" => {
119 println!("\n🧠 Session Memory:");
120 if let Some(start) = agent.get_memory("session_start") {
121 println!(" Session started: {}", start);
122 }
123 if let Some(dir) = agent.get_memory("working_directory") {
124 println!(" Working directory: {}", dir);
125 }
126 if let Some(files) = agent.get_memory("files_accessed") {
127 println!(" Files accessed: {}", files);
128 }
129 if let Some(edits) = agent.get_memory("edits_made") {
130 println!(" Edits made: {}", edits);
131 }
132 if let Some(action) = agent.get_memory("last_action") {
133 println!(" Last action: {}", action);
134 }
135 continue;
136 }
137 "help" => {
138 println!("\n📖 Available Commands:");
139 println!(" exit, quit - Exit the demo");
140 println!(" summary - Show session summary");
141 println!(" memory - Show session memory");
142 println!(" help - Show this help");
143 println!("\n💡 Try asking the agent to:");
144 println!(" • Search for specific files");
145 println!(" • Read file contents");
146 println!(" • Summarize what it has done");
147 continue;
148 }
149 _ => {}
150 }
151
152 // Send message to agent with streaming.
153 print!("\nAgent: ");
154 io::stdout().flush()?;
155
156 match agent.chat(input).await {
157 Ok(response) => {
158 println!("{}", response);
159
160 // Update memory after each interaction.
161 agent.increment_counter("files_accessed");
162 }
163 Err(e) => {
164 eprintln!("\n❌ Error: {}", e);
165 }
166 }
167 }
168
169 // --- Final summary ---
170 println!("\n📊 Final Session Summary:");
171 println!("{}", agent.get_session_summary());
172
173 println!("\n✅ Demo completed successfully!");
174 println!("\n💡 Features Demonstrated:");
175 println!(" ✓ Streaming responses (local/remote models)");
176 println!(" ✓ File search with pattern matching");
177 println!(" ✓ File reading with summaries");
178 println!(" ✓ Session memory tracking");
179 println!(" ✓ Interactive conversation");
180 println!(" ✓ Real-time progress updates");
181
182 Ok(())
183}Sourcepub async fn build(self) -> Result<Agent>
pub async fn build(self) -> Result<Agent>
Examples found in repository?
examples/basic_chat.rs (line 18)
10async fn main() -> helios_engine::Result<()> {
11 // Load configuration from `config.toml`.
12 let config = Config::from_file("config.toml")?;
13
14 // Create a simple agent named "BasicAgent".
15 let mut agent = Agent::builder("BasicAgent")
16 .config(config)
17 .system_prompt("You are a helpful assistant.")
18 .build()
19 .await?;
20
21 // --- Send a message to the agent ---
22 let response = agent.chat("Hello! How are you?").await?;
23 println!("Agent: {}", response);
24
25 // --- Continue the conversation ---
26 let response = agent.chat("What can you help me with?").await?;
27 println!("Agent: {}", response);
28
29 Ok(())
30}More examples
examples/custom_tool.rs (line 83)
74async fn main() -> helios_engine::Result<()> {
75 // Load configuration from `config.toml`.
76 let config = Config::from_file("config.toml")?;
77
78 // Create an agent named "WeatherAgent" and equip it with the `WeatherTool`.
79 let mut agent = Agent::builder("WeatherAgent")
80 .config(config)
81 .system_prompt("You are a helpful weather assistant. Use the weather tool to answer questions about weather.")
82 .tool(Box::new(WeatherTool))
83 .build()
84 .await?;
85
86 // --- Ask the agent about the weather ---
87 let response = agent.chat("What's the weather like in New York?").await?;
88 println!("Agent: {}\n", response);
89
90 // --- Ask again, but with a different unit ---
91 let response = agent.chat("How about in London, but in celsius?").await?;
92 println!("Agent: {}\n", response);
93
94 Ok(())
95}examples/agent_with_tools.rs (line 20)
9async fn main() -> helios_engine::Result<()> {
10 // Load configuration from `config.toml`.
11 let config = Config::from_file("config.toml")?;
12
13 // Create an agent named "ToolAgent" and equip it with the `CalculatorTool` and `EchoTool`.
14 let mut agent = Agent::builder("ToolAgent")
15 .config(config)
16 .system_prompt("You are a helpful assistant with access to tools. Use them when needed.")
17 .tool(Box::new(CalculatorTool))
18 .tool(Box::new(EchoTool))
19 .max_iterations(5)
20 .build()
21 .await?;
22
23 println!(
24 "Available tools: {:?}\n",
25 agent.tool_registry().list_tools()
26 );
27
28 // --- Test the calculator tool ---
29 let response = agent.chat("What is 25 * 4 + 10?").await?;
30 println!("Agent: {}\n", response);
31
32 // --- Test the echo tool ---
33 let response = agent
34 .chat("Can you echo this message: 'Hello from Helios!'")
35 .await?;
36 println!("Agent: {}\n", response);
37
38 Ok(())
39}examples/multiple_agents.rs (line 21)
10async fn main() -> helios_engine::Result<()> {
11 // Load configuration from `config.toml`.
12 let config = Config::from_file("config.toml")?;
13
14 // --- Create multiple agents with different personalities and tools ---
15
16 // An agent specialized in math, equipped with a calculator tool.
17 let mut math_agent = Agent::builder("MathAgent")
18 .config(config.clone())
19 .system_prompt("You are a math expert. You love numbers and equations.")
20 .tool(Box::new(CalculatorTool))
21 .build()
22 .await?;
23
24 // A creative agent for writing and storytelling.
25 let mut creative_agent = Agent::builder("CreativeAgent")
26 .config(config)
27 .system_prompt("You are a creative writer who loves storytelling and poetry.")
28 .build()
29 .await?;
30
31 // --- Interact with the Math Agent ---
32 println!("=== Math Agent ===");
33 let response = math_agent.chat("What is the square root of 144?").await?;
34 println!("Math Agent: {}\n", response);
35
36 // --- Interact with the Creative Agent ---
37 println!("=== Creative Agent ===");
38 let response = creative_agent
39 .chat("Write a haiku about programming.")
40 .await?;
41 println!("Creative Agent: {}\n", response);
42
43 Ok(())
44}examples/agent_with_file_tools.rs (line 33)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with File Tools Example");
12 println!("=================================================\n");
13
14 // Load configuration
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "FileAssistant" and equip it with file tools.
21 let mut agent = Agent::builder("FileAssistant")
22 .config(config)
23 .system_prompt(
24 "You are a helpful file management assistant. You can search for files, \
25 read file contents, and edit files. Always confirm with the user before \
26 making changes to files. Keep track of important session information.",
27 )
28 .tool(Box::new(FileSearchTool))
29 .tool(Box::new(FileReadTool))
30 .tool(Box::new(FileEditTool))
31 .tool(Box::new(FileWriteTool))
32 .max_iterations(10)
33 .build()
34 .await?;
35
36 println!("✓ Agent created with file tools");
37 println!("✓ Available tools: file_search, file_read, file_edit, file_write\n");
38
39 // Set initial session memory for the agent.
40 agent.set_memory("session_start", chrono::Utc::now().to_rfc3339());
41 agent.set_memory(
42 "working_directory",
43 std::env::current_dir()?.display().to_string(),
44 );
45 agent.set_memory("tasks_completed", "0");
46
47 // --- Example 1: Search for Rust files ---
48 println!("Example 1: Searching for Rust files");
49 println!("====================================\n");
50
51 let response = agent
52 .chat("Find all Rust source files in the src directory")
53 .await?;
54 println!("Agent: {}\n", response);
55
56 // Update session memory after the task.
57 agent.increment_tasks_completed();
58 agent.set_memory("last_task", "file_search");
59
60 // --- Example 2: Read a specific file ---
61 println!("\nExample 2: Reading file contents");
62 println!("==================================\n");
63
64 let response = agent
65 .chat("Read the contents of src/lib.rs and give me a summary")
66 .await?;
67 println!("Agent: {}\n", response);
68
69 // Update session memory after the task.
70 agent.increment_tasks_completed();
71 agent.set_memory("last_task", "file_read");
72
73 // --- Example 3: Show session summary ---
74 println!("\nExample 3: Session Summary");
75 println!("==========================\n");
76
77 println!("{}", agent.get_session_summary());
78
79 // --- Example 4: Check session memory ---
80 println!("\nExample 4: Checking Session Memory");
81 println!("===================================\n");
82
83 println!(
84 "Working directory: {}",
85 agent
86 .get_memory("working_directory")
87 .unwrap_or(&"unknown".to_string())
88 );
89 println!(
90 "Tasks completed: {}",
91 agent
92 .get_memory("tasks_completed")
93 .unwrap_or(&"0".to_string())
94 );
95 println!(
96 "Last task: {}",
97 agent.get_memory("last_task").unwrap_or(&"none".to_string())
98 );
99
100 println!("\n✅ Example completed successfully!");
101 println!("\n💡 Key Features Demonstrated:");
102 println!(" • File search with pattern matching and content search");
103 println!(" • File reading with line range support");
104 println!(" • File editing with find/replace functionality");
105 println!(" • Session memory for tracking agent state");
106 println!(" • Streaming responses (works with both local and remote models)");
107
108 Ok(())
109}examples/agent_with_memory_db.rs (line 31)
10async fn main() -> helios_engine::Result<()> {
11 println!("🚀 Helios Engine - Agent with Memory DB Example");
12 println!("================================================\n");
13
14 // Load configuration from `config.toml` or use default.
15 let config = Config::from_file("config.toml").unwrap_or_else(|_| {
16 println!("⚠ No config.toml found, using default configuration");
17 Config::new_default()
18 });
19
20 // Create an agent named "DataAgent" and equip it with the MemoryDBTool.
21 let mut agent = Agent::builder("DataAgent")
22 .config(config)
23 .system_prompt(
24 "You are a helpful assistant with access to an in-memory database. \
25 You can store and retrieve information using the memory_db tool. \
26 Operations available: set, get, delete, list, clear, exists. \
27 Use this to remember important information across our conversation.",
28 )
29 .tool(Box::new(MemoryDBTool::new()))
30 .max_iterations(10)
31 .build()
32 .await?;
33
34 println!("✓ Agent created with memory database tool\n");
35
36 // --- Example 1: Store user preferences ---
37 println!("Example 1: Storing User Preferences");
38 println!("====================================\n");
39
40 let response = agent
41 .chat("Store my name as 'Alice' and my favorite color as 'blue' in the database")
42 .await?;
43 println!("Agent: {}\n", response);
44
45 // --- Example 2: Retrieve stored data ---
46 println!("\nExample 2: Retrieving Stored Data");
47 println!("==================================\n");
48
49 let response = agent.chat("What's my name and favorite color?").await?;
50 println!("Agent: {}\n", response);
51
52 // --- Example 3: Store calculations ---
53 println!("\nExample 3: Caching Calculations");
54 println!("================================\n");
55
56 let response = agent
57 .chat("Calculate 123 * 456 and store the result in the database with key 'calculation_result'")
58 .await?;
59 println!("Agent: {}\n", response);
60
61 // --- Example 4: List all stored data ---
62 println!("\nExample 4: Listing All Data");
63 println!("===========================\n");
64
65 let response = agent
66 .chat("Show me everything stored in the database")
67 .await?;
68 println!("Agent: {}\n", response);
69
70 // --- Example 5: Check if key exists ---
71 println!("\nExample 5: Checking Key Existence");
72 println!("==================================\n");
73
74 let response = agent
75 .chat("Check if 'name' and 'age' exist in the database")
76 .await?;
77 println!("Agent: {}\n", response);
78
79 // --- Example 6: Delete specific data ---
80 println!("\nExample 6: Deleting Data");
81 println!("========================\n");
82
83 let response = agent
84 .chat("Delete the 'calculation_result' from the database")
85 .await?;
86 println!("Agent: {}\n", response);
87
88 // --- Example 7: Final state ---
89 println!("\nExample 7: Final Database State");
90 println!("================================\n");
91
92 let response = agent
93 .chat("List all remaining items in the database")
94 .await?;
95 println!("Agent: {}\n", response);
96
97 println!("\n✅ Example completed successfully!");
98 println!("\n💡 Key Features Demonstrated:");
99 println!(" • Setting key-value pairs in memory database");
100 println!(" • Retrieving stored values");
101 println!(" • Listing all database contents");
102 println!(" • Checking key existence");
103 println!(" • Deleting specific entries");
104 println!(" • Persistent data across multiple agent interactions");
105 println!("\n📝 Use Cases:");
106 println!(" • Caching expensive computations");
107 println!(" • Storing user preferences during conversation");
108 println!(" • Maintaining context across multiple queries");
109 println!(" • Temporary data storage for complex workflows");
110
111 Ok(())
112}Additional examples can be found in:
Auto Trait Implementations§
impl Freeze for AgentBuilder
impl !RefUnwindSafe for AgentBuilder
impl Send for AgentBuilder
impl Sync for AgentBuilder
impl Unpin for AgentBuilder
impl !UnwindSafe for AgentBuilder
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more