use qai_sdk::core::types::{GenerateOptions, Prompt, ToolDefinition};
use qai_sdk::core::LanguageModel;
use qai_sdk::anthropic::create_anthropic;
use serde_json::json;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let api_key = std::env::var("ANTHROPIC_API_KEY").expect("ANTHROPIC_API_KEY must be set");
let provider = create_anthropic(qai_sdk::core::types::ProviderSettings {
api_key: Some(api_key),
..Default::default()
});
let model = provider.chat("claude-3-5-sonnet-20241022");
let prompt = Prompt {
messages: vec![qai_sdk::core::types::Message {
role: qai_sdk::core::types::Role::User,
content: vec![qai_sdk::core::types::Content::Text {
text: "Please look at my screen and tell me what you see, then run 'ls' in bash.".to_string(),
}],
}],
};
let computer_tool = ToolDefinition {
name: "computer_20241022".to_string(),
description: "Use the computer".to_string(),
parameters: json!({
"display_width_px": 1920,
"display_height_px": 1080,
"display_number": 1
}),
};
let bash_tool = ToolDefinition {
name: "bash_20241022".to_string(),
description: "Run bash commands".to_string(),
parameters: json!({}),
};
println!("Sending request to Claude with Computer Use tools...");
let result = model
.generate(
prompt,
GenerateOptions {
tools: Some(vec![computer_tool, bash_tool]),
..Default::default()
},
)
.await?;
println!("\nResponse:");
println!("{}", result.text);
if !result.tool_calls.is_empty() {
println!("\nTool Calls Requested:");
for call in result.tool_calls {
println!("- {}: {}", call.name, call.arguments);
}
}
Ok(())
}