1use serde::{Deserialize, Serialize};
4use crate::{Result, AIError};
5
6#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct ClaudeConfig {
9 pub api_key: String,
11
12 pub model: String,
14
15 pub endpoint: String,
17
18 pub timeout: u64,
20}
21
22impl Default for ClaudeConfig {
23 fn default() -> Self {
24 Self {
25 api_key: std::env::var("ANTHROPIC_API_KEY").unwrap_or_default(),
26 model: "claude-3-opus-20240229".to_string(),
27 endpoint: "https://api.anthropic.com".to_string(),
28 timeout: 60,
29 }
30 }
31}
32
33pub struct ClaudeClient {
35 config: ClaudeConfig,
36 client: reqwest::Client,
37}
38
39impl ClaudeClient {
40 pub async fn new(config: ClaudeConfig) -> Result<Self> {
42 let client = reqwest::Client::builder()
43 .timeout(std::time::Duration::from_secs(config.timeout))
44 .build()?;
45
46 Ok(Self { config, client })
47 }
48
49 pub async fn execute_task(
51 &self,
52 agent: &crate::agents::Agent,
53 task: &crate::tasks::Task,
54 ) -> Result<crate::tasks::TaskResult> {
55 Ok(crate::tasks::TaskResult {
58 task_id: task.id.clone(),
59 status: crate::tasks::TaskStatus::Completed,
60 result: serde_json::json!({"message": "Task completed via Claude"}),
61 execution_time_ms: 1000,
62 tokens_used: 500,
63 })
64 }
65}