{"record":{"id":"b3d72c2774e3afdd","repo":"SubtitleEdit/subtitleedit","slug":"translate-model-name-not-found-in-llamacppser","errorCode":null,"errorMessage":"Translate model '{name}' not found in {LlamaCppServerManager.GetAndCreateModelsFolder()}. Download one in Subtitle Edit (Auto-translate > llama.cpp), drop a .gguf into that folder, or pass a full path via --translate-model.","messagePattern":"Translate model '(.+?)' not found in (.+?)\\. Download one in Subtitle Edit \\(Auto-translate > llama\\.cpp\\), drop a \\.gguf into that folder, or pass a full path via --translate-model\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/seconv/Core/AutoTranslateRunner.cs","lineNumber":235,"sourceCode":"                if (!File.Exists(name))\n                {\n                    throw new InvalidOperationException($\"Translate model file not found: {name}\");\n                }\n\n                var fileName = Path.GetFileName(name);\n                var (chatTemplate, noJinja) = LlamaCppServerManager.InferChatTemplate(fileName);\n                return new LlamaCppModel(fileName, Path.GetFullPath(name), string.Empty, Url: string.Empty,\n                    ChatTemplate: chatTemplate, NoJinja: noJinja);\n            }\n\n            // Name: match curated + custom models in the models folder (with or without .gguf).\n            var all = LlamaCppServerManager.GetAllTranslateModels();\n            var model = all.FirstOrDefault(m => m.FileName.Equals(name, StringComparison.OrdinalIgnoreCase))\n                        ?? all.FirstOrDefault(m => m.FileName.Equals(name + \".gguf\", StringComparison.OrdinalIgnoreCase))\n                        ?? all.FirstOrDefault(m => m.DisplayName.Equals(name, StringComparison.OrdinalIgnoreCase));\n            if (model == null || !LlamaCppServerManager.IsModelInstalled(model))\n            {\n                throw new InvalidOperationException(\n                    $\"Translate model '{name}' not found in {LlamaCppServerManager.GetAndCreateModelsFolder()}. \" +\n                    \"Download one in Subtitle Edit (Auto-translate > llama.cpp), drop a .gguf into that folder, \" +\n                    \"or pass a full path via --translate-model.\");\n            }\n\n            return model;\n        }\n\n        // No model given: pick the first installed translate model (curated order, then custom).\n        var installed = LlamaCppServerManager.GetAllTranslateModels().FirstOrDefault(LlamaCppServerManager.IsModelInstalled);\n        if (installed == null)\n        {\n            throw new InvalidOperationException(\n                $\"No llama.cpp translate model found in {LlamaCppServerManager.GetAndCreateModelsFolder()}. \" +\n                \"Download one in Subtitle Edit (Auto-translate > llama.cpp), drop a .gguf into that folder, \" +\n                \"or pass --translate-model:<path.gguf>.\");\n        }\n","sourceCodeStart":217,"sourceCodeEnd":253,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/seconv/Core/AutoTranslateRunner.cs#L217-L253","documentation":"InvalidOperationException from ResolveLlamaCppModel when the user passed a bare model NAME (no path separator) and it matches neither a curated nor custom installed model in GetAndCreateModelsFolder(). The message points to that folder and gives three remediation paths: GUI download, manual .gguf drop, or --translate-model:<path>.","triggerScenarios":"Calling --translate-model:gemma-9b when no gemma-9b.gguf (curated or custom) is present in the models folder, or IsModelInstalled returns false for the matched entry.","commonSituations":"User expects a curated model that was never downloaded; filename casing mismatch on case-sensitive filesystems; model file exists but IsModelInstalled considers it incomplete.","solutions":["Open SE GUI > Auto-translate > llama.cpp and click Download for the model you named.","Drop the matching .gguf into the folder printed in the message (GetAndCreateModelsFolder()).","Verify the exact filename (including case on Linux) — the match is against FileName/DisplayName.","If you have the file elsewhere, pass its full path with --translate-model:<path.gguf> to bypass the folder lookup."],"exampleFix":"// before\nthrow new InvalidOperationException(\n    $\"Translate model '{name}' not found in {LlamaCppServerManager.GetAndCreateModelsFolder()}.\");\n\n// after — list what IS installed so the user can copy/paste\nvar installed = all.Where(LlamaCppServerManager.IsModelInstalled).Select(m => m.FileName);\nthrow new InvalidOperationException($\"Translate model '{name}' not found. Installed: {string.Join(\", \", installed)}.\");","handlingStrategy":"validation","validationCode":"var all = LlamaCppServerManager.GetAllTranslateModels();\nvar match = all.FirstOrDefault(m => m.FileName.Equals(name, StringComparison.OrdinalIgnoreCase)) ?? all.FirstOrDefault(m => m.FileName.Equals(name + \".gguf\", StringComparison.OrdinalIgnoreCase));\nif (match == null || !LlamaCppServerManager.IsModelInstalled(match))\n    throw new InvalidOperationException($\"Model '{name}' not installed. Installed: {string.Join(\", \", all.Where(LlamaCppServerManager.IsModelInstalled).Select(m => m.FileName))}.\");","typeGuard":"static bool IsModelInstalledByName(string name) =>\n    LlamaCppServerManager.GetAllTranslateModels()\n        .Any(m => m.FileName.Equals(name, StringComparison.OrdinalIgnoreCase) && LlamaCppServerManager.IsModelInstalled(m));","tryCatchPattern":"null","preventionTips":["On case-sensitive filesystems, match the exact filename casing.","Keep a list of installed models in your CLI help text.","Let users pass --translate-model with a full path to bypass the folder-name match."],"tags":["translate","llama-cpp","model-loading","cli","configuration"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}