Quick Start¶
This quickstart shows:
- building a runtime,
- registering providers,
- loading a catalog,
- calling embedding and generation APIs.
use uni_xervo::api::catalog_from_file;
use uni_xervo::runtime::ModelRuntime;
use uni_xervo::traits::GenerationOptions;
#[tokio::main]
async fn main() -> anyhow::Result<()> {
// Parse catalog JSON (array of ModelAliasSpec).
let catalog = catalog_from_file("./catalog.json")?;
// Build runtime and register compiled providers.
let mut builder = ModelRuntime::builder().catalog(catalog);
#[cfg(feature = "provider-candle")]
{
builder = builder.register_provider(uni_xervo::provider::candle::LocalCandleProvider::new());
}
#[cfg(feature = "provider-openai")]
{
builder = builder.register_provider(uni_xervo::provider::openai::RemoteOpenAIProvider::new());
}
let runtime = builder.build().await?;
// Embedding by alias.
let embedder = runtime.embedding("embed/default").await?;
let vectors = embedder.embed(vec!["hello", "world"]).await?;
println!("embedded {} vectors with dim {}", vectors.len(), embedder.dimensions());
// Generation by alias.
let generator = runtime.generator("generate/default").await?;
let out = generator
.generate(
&["You are a concise assistant.".into(), "Summarize Rust ownership in one sentence.".into()],
GenerationOptions {
max_tokens: Some(120),
temperature: Some(0.2),
top_p: Some(0.95),
},
)
.await?;
println!("{}", out.text);
Ok(())
}
Example catalog¶
[
{
"alias": "embed/default",
"task": "embed",
"provider_id": "local/candle",
"model_id": "sentence-transformers/all-MiniLM-L6-v2",
"warmup": "eager",
"timeout": 10,
"load_timeout": 300,
"options": {
"cache_dir": ".uni_cache/candle"
}
},
{
"alias": "generate/default",
"task": "generate",
"provider_id": "remote/openai",
"model_id": "gpt-4o-mini",
"timeout": 30,
"retry": {
"max_attempts": 3,
"initial_backoff_ms": 200
},
"options": {
"api_key_env": "OPENAI_API_KEY"
}
}
]
Common pitfalls¶
CapabilityMismatch: alias task does not match resolved model interface.ProviderNotFound: provider feature disabled or provider not registered.Config: invalid alias format (task/name) or invalid provider options.