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

  1. Pass an exact registry id including the size suffix, e.g. 'qwen3.5:4b'
  2. Build the download UI from get_available_models() so ids are always in sync
  3. Validate persisted model ids at startup and reset to the default model when unknown
  4. 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

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


AI-assisted analysis of Zackriya-Solutions/meetily@0281737d87 (2026-08-16). Data as JSON: /api/errors/0e98f10706483ace. Report an issue: GitHub.