use std::sync::Arc;
use ares_server::{AgentRequest, Context, Execute, EventsService, Tool, Tools};
#[tokio::main(flavor = "multi_thread", worker_threads = 2)]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let ctx = Context::new_root();
ctx.provide(EventsService::new());
ctx.provide(Tools::from_static([Arc::new(ares_server::Calculator) as Arc<dyn Tool>]));
let tools = ctx.get::<Tools>().expect("tools on context");
let out = tools
.execute(
&ctx,
"calculator",
serde_json::json!({"operation": "add", "a": 2, "b": 3}),
)
.await?;
println!("calculator -> {}", out["result"]);
let execute = Execute::new();
let req = AgentRequest {
agent_name: "echo".to_string(),
message: "hello".to_string(),
..Default::default()
};
let result = execute.run(&req, &ctx).await?;
println!("agent -> {}", result.response.content);
Ok(())
}