{"record":{"id":"67f8c433bbd15c43","repo":"SubtitleEdit/subtitleedit","slug":"translate-engine-options-translateengine-is-no","errorCode":null,"errorMessage":"Translate engine '{options.TranslateEngine}' is not supported. Use one of: {string.Join(\", \", SupportedEngines)}.","messagePattern":"Translate engine '(.+?)' is not supported\\. Use one of: (.+?)\\.","errorType":"exception","errorClass":"InvalidOperationException","httpStatus":null,"severity":"error","filePath":"src/seconv/Core/AutoTranslateRunner.cs","lineNumber":113,"sourceCode":"                    tools.AutoTranslateLibreUrl = url;\n                }\n                break;\n            case \"nllb-serve\":\n                translator = new NoLanguageLeftBehindServe();\n                if (!string.IsNullOrEmpty(url))\n                {\n                    tools.AutoTranslateNllbServeUrl = url;\n                }\n                break;\n            case \"nllb-api\":\n                translator = new NoLanguageLeftBehindApi();\n                if (!string.IsNullOrEmpty(url))\n                {\n                    tools.AutoTranslateNllbApiUrl = url;\n                }\n                break;\n            default:\n                throw new InvalidOperationException(\n                    $\"Translate engine '{options.TranslateEngine}' is not supported. Use one of: {string.Join(\", \", SupportedEngines)}.\");\n        }\n\n        return new AutoTranslateRunner(options, translator, llamaCppModel);\n    }\n\n    /// <summary>\n    /// Translates all paragraphs in place. Reuses the already-running llama-server across\n    /// files in the same run (the server manager is a no-op when the model matches).\n    /// </summary>\n    public async Task TranslateAsync(Subtitle subtitle, CancellationToken cancellationToken)\n    {\n        if (_llamaCppModel != null && !LlamaCppServerManager.IsServerRunning)\n        {\n            if (!_options.Quiet)\n            {\n                Console.WriteLine($\"  Starting llama-server with model {Path.GetFileName(_llamaCppModel.FileName)} (stops at exit)...\");\n            }","sourceCodeStart":95,"sourceCodeEnd":131,"githubUrl":"https://github.com/SubtitleEdit/subtitleedit/blob/17a9f0748781032255db3526b7215d2fb891e3af/src/seconv/Core/AutoTranslateRunner.cs#L95-L131","documentation":"InvalidOperationException from the engine-name switch in AutoTranslateRunner: the value of options.TranslateEngine did not match any case (the supported set like 'libretranslate', 'nllb-serve', 'nllb-api', 'llamacpp', etc.). The message lists SupportedEngines so the user sees the accepted values.","triggerScenarios":"Invoking the runner with a TranslateEngine string not present in SupportedEngines — typo, wrong casing, deprecated name, or a custom value the switch does not know.","commonSituations":"CLI flag --translate-engine misspelled ('llama' instead of 'llamacpp'); pipeline upgraded and an old engine name was removed; case sensitivity ('NLLB' vs 'nllb-api').","solutions":["Print SupportedEngines (it is in the error message) and use one of those exact strings.","If you need a deprecated engine, check the runner's SupportedEngines constant for the canonical name.","Normalize input: trim and lowercase the engine name before the switch."],"exampleFix":"// before\ndefault:\n    throw new InvalidOperationException($\"Translate engine '{options.TranslateEngine}' is not supported. Use one of: {string.Join(\", \", SupportedEngines)}.\");\n\n// after — case-insensitive dispatch so 'LLAMACPP' matches\nvar key = (options.TranslateEngine ?? string.Empty).Trim().ToLowerInvariant();\nswitch (key) { /* ... */ default: throw new InvalidOperationException(...); }","handlingStrategy":"validation","validationCode":"if (!SupportedEngines.Contains((options.TranslateEngine ?? \"\").Trim(), StringComparer.OrdinalIgnoreCase))\n    throw new InvalidOperationException($\"Unsupported engine. Valid: {string.Join(\", \", SupportedEngines)}\");","typeGuard":"static bool IsSupportedEngine(string? name) => name != null && SupportedEngines.Contains(name.Trim(), StringComparer.OrdinalIgnoreCase);","tryCatchPattern":"null","preventionTips":["Validate the engine name against SupportedEngines before constructing the runner.","Normalize (trim + lowercase) the CLI input at parse time.","Document supported engine strings in --help."],"tags":["translate","configuration","validation","cli"],"backgroundTag":null,"analyzedSha":"17a9f0748781032255db3526b7215d2fb891e3af","analyzedAt":"2026-08-13T18:11:43.374Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}