use funera_orchestrate::{Agent, AgentRuntime, DeepSeekProvider};
fn make_runtime(model: &str) -> Result<AgentRuntime<DeepSeekProvider>, Box<dyn std::error::Error>> {
Ok(AgentRuntime::<DeepSeekProvider>::builder()
.api_key(std::env::var("OPENAI_API_KEY")?)
.base_url(std::env::var("OPENAI_BASE_URL").ok())
.model(model)
.build()?)
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let agent = Agent::builder()
.system_prompt("You are a helpful assistant.")
.build();
let gpt4 = make_runtime("deepseek-v4-pro")?;
let gpt35 = make_runtime("deepseek-v4-flash")?;
let (gpt4, _) = agent
.send("I need a detailed explanation of monads.", gpt4)
.await?
.await?;
let (gpt4, _) = agent
.send("Can you give me a code example?", gpt4)
.await?
.await?;
println!("(gpt-4o session has 2 messages)");
let (_gpt35, _) = agent
.send("Write a haiku about Rust.", gpt35)
.await?
.await?;
println!("(gpt-4o-mini session has 1 message)");
let (_, resp) = agent.send("Now explain functors too.", gpt4).await?.await?;
println!("\n=== gpt-4o response ===");
println!("{}", resp.content);
println!("\n(gpt-4o session has 3 messages, gpt-4o-mini has 1)");
println!("Runtimes are fully isolated.");
Ok(())
}