use openai_interface::chat::create::request::{Message, RequestBody};
use openai_interface::rest::post::PostNoStream;
use openai_interface::rest::{RequestOptions, default_client};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
#[cfg(feature = "ferritls")]
openai_interface::rest::install_crypto_provider().ok();
let which = std::env::args().nth(1).unwrap_or_default();
let (base_url, options) = match which.as_str() {
"azure" => {
let base_url = require_env("AZURE_BASE_URL")?;
let key = require_env("AZURE_API_KEY")?;
let options = RequestOptions::new().with_header("api-key", &key)?;
(base_url, options)
}
"anthropic" => {
let key = require_env("ANTHROPIC_API_KEY")?;
let options = RequestOptions::new()
.with_header("x-api-key", &key)?
.with_header("anthropic-version", "2023-06-01")?;
("https://api.anthropic.com/v1".to_string(), options)
}
_ => {
let key = require_env("OPENAI_API_KEY")?;
let options = RequestOptions::bearer(key);
("https://api.openai.com/v1".to_string(), options)
}
};
let request = RequestBody {
messages: vec![Message::user("Say hello in one short sentence.")],
model: std::env::var("MODEL").unwrap_or_else(|_| "gpt-4.1-mini".to_string()),
stream: Some(false),
..Default::default()
};
let completion: openai_interface::chat::ChatCompletion = request
.get_response(&default_client(), &base_url, &options)
.await?;
println!(
"{}",
completion.choices[0]
.message
.content
.as_deref()
.unwrap_or("(no content)")
);
Ok(())
}
fn require_env(name: &str) -> Result<String, Box<dyn std::error::Error>> {
std::env::var(name).map_err(|_| format!("{name} is not set").into())
}