1use anyhow::Result;
6use qmd::{
7 EmbeddingEngine, GenerationEngine, RerankEngine,
8 config::get_model_cache_dir,
9 llm::{DEFAULT_EMBED_MODEL, DEFAULT_EMBED_MODEL_URI, list_cached_models, model_exists},
10 pull_model, resolve_model,
11};
12
13fn main() -> Result<()> {
14 println!("Cache: {}\n", get_model_cache_dir().display());
16
17 println!("Cached models:");
19 let models = list_cached_models();
20 if models.is_empty() {
21 println!(" (none - will download)");
22 } else {
23 for m in &models {
24 println!(" {}", m);
25 }
26 }
27
28 println!("\nAvailability:");
30 let check = |name: &str, ok: bool| println!(" {}: {}", name, if ok { "yes" } else { "no" });
31 check("embed model", model_exists(DEFAULT_EMBED_MODEL));
32 check("EmbeddingEngine", EmbeddingEngine::load_default().is_ok());
33 check("GenerationEngine", GenerationEngine::is_available());
34 check("RerankEngine", RerankEngine::is_available());
35
36 println!("\nDownloading embedding model...");
38 let result = pull_model(DEFAULT_EMBED_MODEL_URI, false)?;
39 println!(" Path: {}", result.path.display());
40 println!(" Size: {} bytes", result.size_bytes);
41 println!(" Refreshed: {}", result.refreshed);
42
43 println!("\nURI resolution:");
45 let uri = "hf:ggml-org/embeddinggemma-300M-GGUF/embeddinggemma-300M-Q8_0.gguf";
46 if let Ok(path) = resolve_model(uri) {
47 println!(" {} ->\n {}", uri, path.display());
48 }
49
50 let mut engine = EmbeddingEngine::new(&result.path)?;
52 let emb = engine.embed("test embedding")?;
53 println!("\nModel info:");
54 println!(" Name: {}", emb.model);
55 println!(" Dimensions: {}", emb.embedding.len());
56
57 Ok(())
58}