vision_example/
vision_example.rs

1use model_gateway_rs::{
2    clients::vision::VisionClient, model::vision::VisionInput, sdk::doubao_vision::DoubaoVisionSdk,
3    traits::ModelClient,
4};
5
6#[tokio::main]
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8    // Initialize the SDK with your API key and base URL
9    let api_key = "284423aa-0a73-4d7c-add5-31998942a3fd";
10    let base_url = "https://ark.cn-beijing.volces.com/api/v3";
11
12    // Create the DoubaoVision SDK
13    let sdk = DoubaoVisionSdk::new_with_default_model(&api_key, &base_url)?;
14
15    // Create the Vision Client
16    let client = VisionClient::new(sdk);
17
18    // Example 1: Simple image analysis
19    let image_url = "https://minio.cyydm.shop/testbucket/upload/zy/cbc7.jpg";
20    let prompt = "What's in this image?";
21
22    let input = VisionInput::single_image(prompt, image_url);
23    let output = client.infer(input).await?;
24
25    println!("Analysis result: {}", output.content);
26    if let Some(reasoning) = output.reasoning_content {
27        println!("Reasoning: {}", reasoning);
28    }
29
30    // // Example 2: Multi-turn conversation with system prompt
31    // let messages = vec![
32    //     DoubaoVisionMessage::system("You are a helpful image analysis assistant."),
33    //     DoubaoVisionMessage::with_image(
34    //         "Please describe this image in detail.",
35    //         "https://minio.cyydm.shop/testbucket/upload/zy/cbc7.jpg",
36    //     ),
37    // ];
38
39    // let input = VisionInput::new(messages);
40    // let output = client.infer(input).await?;
41
42    // println!("\nDetailed description: {}", output.content);
43
44    // // Example 3: Multiple images comparison
45    // let messages = vec![DoubaoVisionMessage::with_images(
46    //     "Compare these two images and highlight the differences.",
47    //     vec![
48    //         "https://minio.cyydm.shop/testbucket/upload/zy/cbc7.jpg".to_string(),
49    //         "https://minio.cyydm.shop/testbucket/upload/zy/cbc8.jpg".to_string(),
50    //     ],
51    // )];
52
53    // let input = VisionInput::new(messages);
54    // let output = client.infer(input).await?;
55
56    // println!("\nComparison result: {}", output.content);
57
58    // Print usage statistics if available
59    if let Some(usage) = output.usage {
60        println!("\nToken usage:");
61        println!("  Prompt tokens: {}", usage.prompt_tokens);
62        println!("  Completion tokens: {}", usage.completion_tokens);
63        println!("  Total tokens: {}", usage.total_tokens);
64        if let Some(reasoning_tokens) = usage.reasoning_tokens {
65            println!("  Reasoning tokens: {}", reasoning_tokens);
66        }
67    }
68
69    Ok(())
70}