anthropic_tools/
anthropic-tools.rs1use anylm::{Chunk, Completions, Schema, Tool, prelude::*};
2
3#[tokio::main]
4async fn main() -> Result<()> {
5 let api_key = std::env::var("ANTHROPIC_API_KEY")?;
6
7 #[allow(dead_code)]
9 #[derive(Debug, serde::Deserialize)]
10 struct LocationData {
11 location: String,
12 }
13
14 let mut response = Completions::anthropic(api_key, "claude-opus-4-6")
16 .proxy(Proxy::all("socks5://127.0.0.1:1080")?)
17 .user_message(vec!["What's the weather like in London?".into()])
18 .tool(Tool::new(
19 "weather",
20 "Search weather by location",
21 Schema::object("Location data")
22 .required_property("location", Schema::string("The location")),
23 ))
24 .send()
25 .await?;
26
27 let mut tool_calls = vec![];
29 while let Some(chunk) = response.next().await {
30 match chunk? {
31 Chunk::Text(text) => {
32 eprint!("{text}");
33 }
34 Chunk::Tool(name, json_str) => {
35 tool_calls.push((name, json_str));
36 }
37 }
38 }
39 println!();
40
41 for (name, json_str) in tool_calls {
43 match name.as_ref() {
44 "weather" => {
45 let location: LocationData = serde_json::from_str(&json_str)?;
46 println!("{location:#?}");
47 }
48 _ => {}
49 }
50 }
51
52 Ok(())
53}