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