SubtitleEdit/subtitleedit · error · InvalidOperationException
Translate engine '{options.TranslateEngine}' is not supporte
Error message
Translate engine '{options.TranslateEngine}' is not supported. Use one of: {string.Join(", ", SupportedEngines)}. What it means
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.
Source
Thrown at src/seconv/Core/AutoTranslateRunner.cs:113
tools.AutoTranslateLibreUrl = url;
}
break;
case "nllb-serve":
translator = new NoLanguageLeftBehindServe();
if (!string.IsNullOrEmpty(url))
{
tools.AutoTranslateNllbServeUrl = url;
}
break;
case "nllb-api":
translator = new NoLanguageLeftBehindApi();
if (!string.IsNullOrEmpty(url))
{
tools.AutoTranslateNllbApiUrl = url;
}
break;
default:
throw new InvalidOperationException(
$"Translate engine '{options.TranslateEngine}' is not supported. Use one of: {string.Join(", ", SupportedEngines)}.");
}
return new AutoTranslateRunner(options, translator, llamaCppModel);
}
/// <summary>
/// Translates all paragraphs in place. Reuses the already-running llama-server across
/// files in the same run (the server manager is a no-op when the model matches).
/// </summary>
public async Task TranslateAsync(Subtitle subtitle, CancellationToken cancellationToken)
{
if (_llamaCppModel != null && !LlamaCppServerManager.IsServerRunning)
{
if (!_options.Quiet)
{
Console.WriteLine($" Starting llama-server with model {Path.GetFileName(_llamaCppModel.FileName)} (stops at exit)...");
}View on GitHub (pinned to 17a9f07487)
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.
Example fix
// before
default:
throw new InvalidOperationException($"Translate engine '{options.TranslateEngine}' is not supported. Use one of: {string.Join(", ", SupportedEngines)}.");
// after — case-insensitive dispatch so 'LLAMACPP' matches
var key = (options.TranslateEngine ?? string.Empty).Trim().ToLowerInvariant();
switch (key) { /* ... */ default: throw new InvalidOperationException(...); } Defensive patterns
Strategy: validation
Validate before calling
if (!SupportedEngines.Contains((options.TranslateEngine ?? "").Trim(), StringComparer.OrdinalIgnoreCase))
throw new InvalidOperationException($"Unsupported engine. Valid: {string.Join(", ", SupportedEngines)}"); Type guard
static bool IsSupportedEngine(string? name) => name != null && SupportedEngines.Contains(name.Trim(), StringComparer.OrdinalIgnoreCase);
Try / catch
null
Prevention
- 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.
When it happens
Trigger: 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.
Common situations: CLI flag --translate-engine misspelled ('llama' instead of 'llamacpp'); pipeline upgraded and an old engine name was removed; case sensitivity ('NLLB' vs 'nllb-api').
Related errors
- Unknown {kind} language '{requested}' for this translate eng
- Translate model '{name}' not found in {LlamaCppServerManager
- Translate model file not found: {name}
- No llama.cpp translate model found in {LlamaCppServerManager
- BinaryOCR database not found: {dbPath}. Use --ocr-db to poin
AI-assisted analysis of SubtitleEdit/subtitleedit@17a9f07487 (2026-08-13).
Data as JSON: /api/errors/67f8c433bbd15c43.
Report an issue: GitHub.