Skip to main content

chat/
chat.rs

1//! Example: basic chat request with the Quantum AI SDK.
2//!
3//! Usage:
4//!
5//!   export QAI_API_KEY=your-api-key
6//!   cargo run --example chat
7
8use futures_util::StreamExt;
9use quantum_sdk::{ChatMessage, ChatRequest, Client};
10
11#[tokio::main]
12async fn main() {
13    let api_key = std::env::var("QAI_API_KEY").expect("QAI_API_KEY environment variable is required");
14
15    let client = Client::new(api_key);
16
17    // --- Non-streaming example ---
18    println!("=== Non-streaming Chat ===");
19
20    let resp = client
21        .chat(&ChatRequest {
22            model: "claude-sonnet-4-6".into(),
23            messages: vec![ChatMessage::user(
24                "What is quantum computing in one sentence?",
25            )],
26            ..Default::default()
27        })
28        .await
29        .expect("Chat failed");
30
31    println!("Model: {}", resp.model);
32    println!("Response: {}", resp.text());
33    if let Some(usage) = &resp.usage {
34        println!(
35            "Tokens: {} in / {} out (cost: {} ticks)",
36            usage.input_tokens, usage.output_tokens, usage.cost_ticks
37        );
38    }
39    println!("Request ID: {}\n", resp.request_id);
40
41    // --- Streaming example ---
42    println!("=== Streaming Chat ===");
43
44    let mut stream = client
45        .chat_stream(&ChatRequest {
46            model: "claude-sonnet-4-6".into(),
47            messages: vec![ChatMessage::user(
48                "Count from 1 to 5, one number per line.",
49            )],
50            ..Default::default()
51        })
52        .await
53        .expect("ChatStream failed");
54
55    while let Some(ev) = stream.next().await {
56        match ev.event_type.as_str() {
57            "content_delta" => {
58                if let Some(delta) = &ev.delta {
59                    print!("{}", delta.text);
60                }
61            }
62            "usage" => {
63                if let Some(usage) = &ev.usage {
64                    println!("\n[Cost: {} ticks]", usage.cost_ticks);
65                }
66            }
67            "error" => {
68                eprintln!("Stream error: {}", ev.error.as_deref().unwrap_or("unknown"));
69                std::process::exit(1);
70            }
71            "done" => {
72                println!("\n[Stream complete]");
73            }
74            _ => {}
75        }
76    }
77}