use zai_rs::model::text_embedded::{
EmbeddingDimensions, EmbeddingInput, EmbeddingModel, EmbeddingRequest,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let _ = env_logger::try_init();
let key = std::env::var("ZHIPU_API_KEY").expect("Set ZHIPU_API_KEY in your environment");
let model = EmbeddingModel::Embedding3;
let input = EmbeddingInput::Single("你好,今天天气怎么样.".to_string());
let req = EmbeddingRequest::new(key, model, input).with_dimensions(EmbeddingDimensions::D256);
if let Err(e) = req.validate() {
eprintln!("Validation warning: {:?}", e);
}
let resp = req.send().await?;
println!("model: {}", resp.model);
println!("object: {:?}", resp.object);
println!("items: {}", resp.data.len());
for item in &resp.data {
println!(
"- index={} object={:?} dims={}",
item.index,
item.object,
item.embedding.len()
);
let preview: Vec<String> = item
.embedding
.iter()
.take(8)
.map(|x| format!("{:.6}", x))
.collect();
println!(
" preview: [{}]{}",
preview.join(", "),
if item.embedding.len() > 8 { " ..." } else { "" }
);
}
println!(
"usage: prompt_tokens={} completion_tokens={} total_tokens={}",
resp.usage.prompt_tokens, resp.usage.completion_tokens, resp.usage.total_tokens
);
Ok(())
}