use agy_bridge::{AgyBridge, config::AgentConfig, prelude::*, tools::ToolRegistry};
use serde::Serialize;
#[derive(Serialize)]
struct Match {
path: String,
}
#[derive(Serialize)]
struct SearchResult {
matches: Vec<Match>,
query: String,
}
#[llm_tool(
prompt_file = "examples/getting_started/tools/search_files.tmpl.md",
response_file = "examples/getting_started/tools/search_results.tmpl.md"
)]
fn search_files(
pattern: &str,
directory: &str,
) -> Result<SearchResult, String> {
let fake_matches = vec![
Match {
path: format!("{directory}/README.md"),
},
Match {
path: format!("{directory}/src/main.rs"),
},
Match {
path: format!("{directory}/docs/{pattern}.md"),
},
];
Ok(SearchResult {
matches: fake_matches,
query: pattern.to_string(),
})
}
#[tokio::main]
async fn main() -> Result<(), agy_bridge::error::Error> {
agy_bridge::load_dotenv();
let bridge = AgyBridge::builder().build()?;
let mut registry = ToolRegistry::new();
registry.register(SearchFiles);
let config = AgentConfig::builder().build();
let agent = bridge.agent(config).tools(registry).await?;
let prompt = "Find all markdown files in /project";
println!(" User: {prompt}");
let response_text = agent.chat(prompt).await?.text().await?;
println!(" Agent: {response_text}");
agent.shutdown().await?;
Ok(())
}