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}