{"record":{"id":"5f6a5e53fa14e07e","repo":"cjpais/Handy","slug":"failed-to-create-session-for-whisper-model","errorCode":null,"errorMessage":"Failed to create session for whisper model {}: {}","messagePattern":"Failed to create session for whisper model (.+?): (.+?)","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src-tauri/src/managers/transcription.rs","lineNumber":606,"sourceCode":"                    .as_ref()\n                    .map(transcribe_device_label)\n                    .unwrap_or_else(|| \"automatic\".to_string());\n                let model_options = ModelOptions { backend, device };\n                let model = Model::load_with(&model_path, &model_options).map_err(|e| {\n                    let error_msg = format!(\"Failed to load whisper model {}: {}\", model_id, e);\n                    emit_loading_failed(&error_msg);\n                    anyhow::anyhow!(error_msg)\n                })?;\n                // The bound backend may differ from the request (e.g. CPU\n                // fallback under Auto); log what actually loaded.\n                let bound_backend = model.backend();\n                let session = model.session().map_err(|e| {\n                    let error_msg = format!(\n                        \"Failed to create session for whisper model {}: {}\",\n                        model_id, e\n                    );\n                    emit_loading_failed(&error_msg);\n                    anyhow::anyhow!(error_msg)\n                })?;\n                // Reconcile the registry's advertised capabilities with the\n                // loaded model's real ones (GGUF metadata) so badges/gating\n                // reflect runtime truth, not the pre-download probe. The\n                // load-completed event below triggers the frontend refresh.\n                let caps = session.model().capabilities();\n                self.model_manager.set_runtime_capabilities(\n                    model_id,\n                    caps.supports_streaming,\n                    caps.supports_translate,\n                    caps.supports_language_detect,\n                    caps.languages.clone(),\n                );\n                let bound_device = model\n                    .device()\n                    .map(|device| transcribe_device_label(&device))\n                    .unwrap_or_else(|_| \"unknown\".to_string());\n                info!(","sourceCodeStart":588,"sourceCodeEnd":624,"githubUrl":"https://github.com/cjpais/Handy/blob/ba10ce1943ef34e93c09494027fc0b9ced2e8a44/src-tauri/src/managers/transcription.rs#L588-L624","documentation":"Raised when the GGUF loaded successfully but creating an inference session (model.session()) fails. The model bytes are fine; the session layer — which allocates compute buffers, binds the backend context, and reads GGUF metadata — could not start. Common native causes are memory allocation failures (large models), backend context creation errors (GPU), or metadata the session builder cannot reconcile. A 'loading_failed' event is emitted before returning.","triggerScenarios":"Calling load_model for a large GGUF with insufficient free RAM/VRAM for compute buffers; GPU context creation failing after load (driver reset, device lost); backend-specific session init quirks under Auto/CPU-fallback paths.","commonSituations":"Large-v3 models on 8 GB machines with other apps eating memory; GPU driver crash/reset between load and session creation; hybrid laptops switching GPUs mid-load; running alongside other local-LLM processes holding VRAM.","solutions":["Free memory/VRAM (close other model-using apps) and retry the load.","Switch the accelerator to CPU (or a different GPU device) in settings and retry.","Use a smaller model size/quantization for the same family.","Update GPU drivers (or on Linux, check the Vulkan ICD) if session creation fails only on GPU backends.","Retry once after a brief wait — transient device-lost states can clear."],"exampleFix":null,"handlingStrategy":"fallback","validationCode":"// Rough headroom check before loading big GGUFs\nlet need = std::fs::metadata(&model_path)?.len() * 2; // weights + compute buffers\nlet avail = available_memory_bytes()?;\nif avail < need {\n    anyhow::bail!(\"need ~{} bytes for session, only {} free\", need, avail);\n}","typeGuard":null,"tryCatchPattern":"match model.session() {\n    Ok(s) => Ok(s),\n    Err(e) if gpu_requested => {\n        warn!(\"session on GPU failed ({e}); retrying on CPU\");\n        reload_on_cpu(&model_path)?.session()\n    }\n    Err(e) => Err(anyhow::anyhow!(\"Failed to create session: {e}\")),\n}","preventionTips":["Close other GPU/memory-heavy apps before loading large models.","Prefer smaller quants on low-RAM machines.","Treat session failure after successful load as a backend problem — retry CPU before declaring the model bad.","Keep drivers current; device-lost between load and session creation is a known driver-reset window."],"tags":["whisper","session","transcribe-cpp","memory","gpu"],"backgroundTag":"model-session-creation-failed","analyzedSha":"ba10ce1943ef34e93c09494027fc0b9ced2e8a44","analyzedAt":"2026-08-17T10:29:55.597Z","contentChangedAt":"2026-08-17T10:29:55.597Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}