use cloudllm::client_wrapper::{ClientWrapper, Message, Role};
use cloudllm::clients::openai::{Model, OpenAIClient};
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
env_logger::Builder::from_default_env()
.filter_level(log::LevelFilter::Info)
.init();
println!("\n{}", "=".repeat(70));
println!(" Bitcoin Price Fetcher - Using OpenAI Web Search");
println!("{}\n", "=".repeat(70));
let openai_key =
std::env::var("OPEN_AI_SECRET").expect("OPEN_AI_SECRET environment variable must be set");
let client = Arc::new(OpenAIClient::new_with_model_enum(&openai_key, Model::GPT5));
println!("✓ OpenAI client initialized");
println!("✓ Model: {}\n", client.model_name());
let messages = vec![
Message {
role: Role::System,
content: Arc::from(
"You are a financial analyst. When asked about cryptocurrency prices, \
search for the current market data and provide accurate, up-to-date prices. \
Include the source of your information and any relevant market context.",
),
tool_calls: vec![],
},
Message {
role: Role::User,
content: Arc::from(
"What is the current price of Bitcoin in USD? \
Please search for the latest price and provide context about recent price movements.",
),
tool_calls: vec![],
},
];
println!("📊 Fetching current Bitcoin price...\n");
let response = client.send_message(&messages, None).await?;
println!("{}", "=".repeat(70));
println!("Bitcoin Price Information:\n");
println!("{}", response.content);
println!("\n{}", "=".repeat(70));
if let Some(usage) = client.get_last_usage().await {
println!(
"\n📈 Token Usage - Input: {}, Output: {}, Total: {}",
usage.input_tokens, usage.output_tokens, usage.total_tokens
);
}
println!("\n✓ Bitcoin price fetch completed successfully!\n");
Ok(())
}