use std::env;
use vectorizer_sdk::{BatchTextRequest, ClientConfig, SimilarityMetric, VectorizerClient};
#[tokio::main(flavor = "current_thread")]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let base_url =
env::var("VECTORIZER_URL").unwrap_or_else(|_| "http://localhost:15001".to_string());
let anon = VectorizerClient::new_with_url(&base_url)?;
let user = env::var("VZ_ADMIN_USER").unwrap_or_else(|_| "admin".to_string());
let pass = env::var("VZ_ADMIN_PASS").unwrap_or_else(|_| "admin".to_string());
let jwt = match anon.login(&user, &pass).await {
Ok(tok) => {
println!(
"login OK — jwt len={} prefix={:?}",
tok.access_token.len(),
&tok.access_token.chars().take(16).collect::<String>()
);
Some(tok.access_token)
}
Err(e) => {
println!("login skipped ({e}); continuing anonymously");
None
}
};
let config = ClientConfig {
base_url: Some(base_url.clone()),
api_key: jwt.clone(),
..ClientConfig::default()
};
let client = VectorizerClient::new(config)?;
let health = client.health_check().await?;
println!("health={} version={}", health.status, health.version);
assert!(
health.version.starts_with("3."),
"expected v3.x server, got {}",
health.version
);
let name = format!(
"drift_smoke_{}",
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)?
.as_secs()
);
let _ = client.delete_collection(&name).await;
client
.create_collection(&name, 512, Some(SimilarityMetric::Cosine))
.await?;
println!("collection={name} dim=512 metric=cosine");
let texts = vec![
BatchTextRequest {
id: "doc_0".to_string(),
text: "rust is a systems programming language focused on safety".to_string(),
metadata: None,
},
BatchTextRequest {
id: "doc_1".to_string(),
text: "vector databases index high-dimensional embeddings for search".to_string(),
metadata: None,
},
];
let inserted = client.insert_texts(&name, texts).await?;
println!(
"insert_texts total={} succeeded={} failed={}",
inserted.total_operations, inserted.successful_operations, inserted.failed_operations
);
let search = client
.search_vectors(&name, "rust programming", Some(5), None)
.await?;
println!("search results={}", search.results.len());
client.delete_collection(&name).await?;
println!("cleanup OK");
Ok(())
}