use midstream::{
LeanAgenticSystem, LeanAgenticConfig, AgentContext,
Midstream, HyprSettings, HyprServiceImpl, StreamProcessor, LLMClient,
};
use bytes::Bytes;
use futures::stream::{BoxStream, iter};
use tokio;
struct SimulatedLLMClient {
messages: Vec<Bytes>,
}
impl SimulatedLLMClient {
fn new() -> Self {
Self {
messages: vec![
Bytes::from_static(b"Hello! I can help you with weather information."),
Bytes::from_static(b"Let me learn your preferences."),
Bytes::from_static(b"What would you like to know?"),
Bytes::from_static(b"I'm getting better at understanding you!"),
],
}
}
}
impl LLMClient for SimulatedLLMClient {
fn stream(&self) -> BoxStream<'static, Bytes> {
Box::pin(iter(self.messages.clone()))
}
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("🚀 Lean Agentic Stream Learning System\n");
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
println!("📚 Initializing Lean Agentic System...");
let config = LeanAgenticConfig {
enable_formal_verification: true,
learning_rate: 0.01,
max_planning_depth: 5,
action_threshold: 0.7,
enable_multi_agent: true,
kg_update_freq: 100,
};
let lean_system = LeanAgenticSystem::new(config);
println!("✓ System initialized with formal verification enabled\n");
println!("🌊 Setting up MidStream...");
let settings = HyprSettings::new()?;
let hypr_service = HyprServiceImpl::new(&settings).await?;
let llm_client = SimulatedLLMClient::new();
let midstream = Midstream::new(
Box::new(llm_client),
Box::new(hypr_service),
);
println!("✓ MidStream ready\n");
println!("🔄 Processing stream with agentic learning...\n");
let messages = midstream.process_stream().await?;
let mut context = AgentContext::new("session_001".to_string());
for (i, msg) in messages.iter().enumerate() {
let chunk = msg.content_str();
println!(" Message #{}: {}", i + 1, chunk);
let result = lean_system.process_stream_chunk(
&chunk,
context.clone(),
).await?;
println!(" → Action: {}", result.action.description);
println!(" → Reward: {:.2}", result.reward);
println!(" → Verified: {}", if result.verified { "✓" } else { "✗" });
context.add_message(chunk.into_owned());
println!();
}
println!("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\n");
println!("📊 System Statistics:\n");
let stats = lean_system.get_stats().await;
println!(" Knowledge Graph:");
println!(" - Entities: {}", stats.total_entities);
println!(" - Theorems: {}", stats.total_theorems);
println!("\n Learning:");
println!(" - Iterations: {}", stats.learning_iterations);
println!(" - Actions: {}", stats.total_actions);
println!(" - Avg Reward: {:.3}", stats.average_reward);
println!("\n━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━");
println!("\n🎯 Advanced Features Demonstration:\n");
println!(" 1. Formal Reasoning:");
let reasoner = lean_system.reasoner.read().await;
println!(" - Axioms loaded: {}", reasoner.theorem_count());
drop(reasoner);
println!("\n 2. Knowledge Graph:");
let kg = lean_system.knowledge.read().await;
println!(" - Entities tracked: {}", kg.entity_count());
println!(" - Relations: {}", kg.relation_count());
drop(kg);
println!("\n 3. Online Learning:");
let learner = lean_system.learner.read().await;
let learning_stats = learner.get_stats();
println!(" - Model parameters: {}", learning_stats.model_parameters);
println!(" - Experience buffer: {}", learning_stats.buffer_size);
drop(learner);
println!("\n✨ Lean Agentic Stream Learning Complete!");
Ok(())
}