use std::sync::{Arc, Mutex};
use phi_agent::{PhiAgent, PhiAgentConfig, ReasoningEffort, SafetyConfig, base_agent_builder, build_system_prompt};
#[path = "../common/mod.rs"]
mod common;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
dotenvy::dotenv().ok();
let llm_client = common::client();
let builder = base_agent_builder(llm_client.clone()).system_prompt(build_system_prompt());
let agent = PhiAgent::build(
builder,
PhiAgentConfig {
model: common::resolve_llm_env().model,
enable_thinking: true,
thinking_budget: None,
thinking_effort: ReasoningEffort::Medium,
safety: SafetyConfig::default(),
max_turns: Some(20),
},
)?;
let tools = agent.list_tools().await;
println!("Registered {} tools:", tools.len());
for tool in &tools {
println!(" - {}", tool.name);
}
let session = agent.create_session().await;
let renderer = Arc::new(Mutex::new(phi_agent::create_stdout_renderer(&phi_agent::OutputFormat::Terminal {
show_thinking: true,
show_tool_args: true,
color: true,
})));
let renderer_clone = renderer.clone();
println!("\n=== Agent ready with file tools ===\n");
agent
.run_turn(
session,
"List the files in the current directory and tell me what kind of project this is.",
move |event| renderer_clone.lock().unwrap().render(event),
)
.await?;
Ok(())
}