agent 0.0.1

A flexible AI Agent SDK for building intelligent agents
Documentation
use agent::{Message, ModelConfig, ModelProvider};
use agent::provider::{openai::OpenAIProvider, anthropic::AnthropicProvider, google::GoogleProvider};
use std::env;

#[tokio::main]
async fn main() -> agent::Result<()> {
    println!("=== AI Provider 示例 ===\n");

    let messages = vec![
        Message::system("你是一个有用的助手"),
        Message::user("你好,请介绍一下你自己"),
    ];

    let config = ModelConfig {
        model: "gpt-4".to_string(),
        temperature: 0.7,
        max_tokens: Some(1000),
        ..Default::default()
    };

    // OpenAI 示例
    if let Ok(api_key) = env::var("OPENAI_API_KEY") {
        println!("测试 OpenAI Provider:");
        let provider = OpenAIProvider::new(api_key);
        match provider.complete(messages.clone(), &config).await {
            Ok(response) => {
                println!("响应: {}", response.content);
                if let Some(usage) = response.usage {
                    println!("Token 使用: {}/{}", usage.prompt_tokens, usage.completion_tokens);
                }
            }
            Err(e) => println!("错误: {}", e),
        }
        println!();
    }

    // Anthropic 示例
    if let Ok(api_key) = env::var("ANTHROPIC_API_KEY") {
        println!("测试 Anthropic Provider:");
        let provider = AnthropicProvider::new(api_key);
        let config = ModelConfig {
            model: "claude-3-sonnet-20240229".to_string(),
            ..config.clone()
        };
        match provider.complete(messages.clone(), &config).await {
            Ok(response) => {
                println!("响应: {}", response.content);
                if let Some(usage) = response.usage {
                    println!("Token 使用: {}/{}", usage.prompt_tokens, usage.completion_tokens);
                }
            }
            Err(e) => println!("错误: {}", e),
        }
        println!();
    }

    // Google 示例
    if let Ok(api_key) = env::var("GOOGLE_API_KEY") {
        println!("测试 Google Provider:");
        let provider = GoogleProvider::new(api_key);
        let config = ModelConfig {
            model: "gemini-pro".to_string(),
            ..config
        };
        match provider.complete(messages.clone(), &config).await {
            Ok(response) => {
                println!("响应: {}", response.content);
                if let Some(usage) = response.usage {
                    println!("Token 使用: {}/{}", usage.prompt_tokens, usage.completion_tokens);
                }
            }
            Err(e) => println!("错误: {}", e),
        }
    }

    Ok(())
}