Zackriya-Solutions/meetily · error

Unknown model: {}

Error message

Unknown model: {}

What it means

get_model_path maps a model name to app_data_dir/models/summary/<gguf_file> via get_model_by_name. An unknown name - anything not in the static catalog - fails here before any filesystem access happens.

Source

Thrown at frontend/src-tauri/src/summary/summary_engine/models.rs:237

}

/// Get a specific model by name
pub fn get_model_by_name(name: &str) -> Option<ModelDef> {
    get_available_models().into_iter().find(|m| m.name == name)
}

/// Get the default model (first in list)
pub fn get_default_model() -> ModelDef {
    get_available_models()
        .into_iter()
        .next()
        .expect("At least one model must be defined")
}

/// Resolve model name to full file path in the models directory
pub fn get_model_path(app_data_dir: &PathBuf, model_name: &str) -> Result<PathBuf> {
    let model = get_model_by_name(model_name)
        .ok_or_else(|| anyhow!("Unknown model: {}", model_name))?;

    let models_dir = get_models_directory(app_data_dir);
    let model_path = models_dir.join(&model.gguf_file);

    Ok(model_path)
}

/// Get the models directory path for built-in AI
pub fn get_models_directory(app_data_dir: &PathBuf) -> PathBuf {
    app_data_dir.join("models").join("summary")
}

// ============================================================================
// Prompt Templates (Model-Specific Formatting)
// ============================================================================

/// Gemma 3 chat template format
pub const GEMMA3_TEMPLATE: &str = "\

View on GitHub (pinned to 0281737d87)

Solutions

  1. Use a name returned by get_available_models() for the summary engine
  2. Verify the exact string - matching is verbatim and case-sensitive
  3. Reset the stored model preference so the code falls back to get_default_model()
Defensive patterns

Strategy: validation

Validate before calling

let model = get_model_by_name(model_name)
    .ok_or_else(|| anyhow!("unknown model {:?}; valid: {:?}",
        model_name,
        get_available_models().iter().map(|m| m.name.clone()).collect::<Vec<_>>()))?;
let path = get_model_path(app_data_dir, &model.name)?;

Type guard

fn is_known_model(name: &str) -> bool {
    get_model_by_name(name).is_some()
}

Prevention

When it happens

Trigger: Passing a name that is not a ModelDef.name to get_model_path: typo, casing error, a stale persisted model preference, or accidentally passing a whisper model name where a summary (LLM) model name is required.

Common situations: Settings stored by an older build referencing a removed/renamed model; confusion between the whisper model list and the summary-engine model list; frontend sending the display label instead of the internal name.

Related errors


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