Zackriya-Solutions/meetily · error
Unknown model: {}
Error message
Unknown model: {} What it means
get_model_by_name returned None when download_model_detailed tried to resolve the model definition, so the download aborts before any network activity. Registry names are exact-match ids ('qwen3.5:2b', 'qwen3.5:4b', 'gemma3:4b', 'gemma3:1b'); display names are not accepted.
Source
Thrown at frontend/src-tauri/src/summary/summary_engine/model_manager.rs:369
pub async fn download_model_detailed(
&self,
model_name: &str,
progress_callback: Option<Box<dyn Fn(DownloadProgress) + Send>>,
) -> Result<()> {
log::info!("Starting download for model: {}", model_name);
// Check if already downloading
{
let active = self.active_downloads.read().await;
if active.contains(model_name) {
log::warn!("Download already in progress for model: {}", model_name);
return Err(anyhow!("Download already in progress"));
}
}
// Get model definition
let model_def = get_model_by_name(model_name)
.ok_or_else(|| anyhow!("Unknown model: {}", model_name))?;
// Add to active downloads
{
let mut active = self.active_downloads.write().await;
active.insert(model_name.to_string());
}
// Clear cancellation flag
{
let mut cancel_flag = self.cancel_download_flag.write().await;
*cancel_flag = None;
}
// Update status to downloading
{
let mut models = self.available_models.write().await;
if let Some(model_info) = models.get_mut(model_name) {
model_info.status = ModelStatus::Downloading { progress: 0 };View on GitHub (pinned to 0281737d87)
Solutions
- Pass an exact registry id including the size suffix, e.g. 'qwen3.5:4b'
- Build the download UI from get_available_models() so ids are always in sync
- Validate persisted model ids at startup and reset to the default model when unknown
- Trim and validate the id before invoking the download command
Defensive patterns
Strategy: validation
Validate before calling
let id = requested.trim();
if crate::summary::summary_engine::models::get_model_by_name(id).is_none() {
return Err(anyhow!("Unknown model '{}' — pick from get_available_models()", id));
}
manager.download_model_detailed(id, cb).await Type guard
fn is_registry_model(id: &str) -> bool {
models::get_model_by_name(id.trim()).is_some()
} Prevention
- Bind download UI values to ModelDef.name, never display_name
- Validate ids at the Tauri command boundary before touching the manager
- Reset stale persisted ids to get_default_model().name at startup
When it happens
Trigger: Passing a display name like 'Qwen 3.5 2B (Balanced)' instead of the id; passing a bare name without the ':size' tag; a persisted model id from an older registry version; passing another engine's model id (e.g. a parakeet model) to the summary model manager.
Common situations: Settings migration keeps an old model key after the registry changes; dropdown bound to display_name instead of name; hand-written model strings in tests.
Related errors
- Unknown model: {}
- Failed to create file {}: {}
- Download cancelled by user
- Download timeout - No data received for 30 seconds
- {}: {}
AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16).
Data as JSON: /api/errors/0e98f10706483ace.
Report an issue: GitHub.