{"record":{"id":"66cc5b88be270d61","repo":"oraios/serena","slug":"unknown-language-backend-backend-str-valid-va","errorCode":null,"errorMessage":"Unknown language backend '{backend_str}': valid values are {[b.value for b in LanguageBackend]}","messagePattern":"Unknown language backend '(.+?)': valid values are (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"src/serena/config/serena_config.py","lineNumber":215,"sourceCode":"\nclass LanguageBackend(Enum):\n    LSP = \"LSP\"\n    \"\"\"\n    Use the language server protocol (LSP), spawning freely available language servers\n    via the SolidLSP library that is part of Serena\n    \"\"\"\n    JETBRAINS = \"JetBrains\"\n    \"\"\"\n    Use the Serena plugin in your JetBrains IDE.\n    (requires the plugin to be installed and the project being worked on to be open in your IDE)\n    \"\"\"\n\n    @staticmethod\n    def from_str(backend_str: str) -> \"LanguageBackend\":\n        for backend in LanguageBackend:\n            if backend.value.lower() == backend_str.lower():\n                return backend\n        raise ValueError(f\"Unknown language backend '{backend_str}': valid values are {[b.value for b in LanguageBackend]}\")\n\n    def is_lsp(self) -> bool:\n        return self == LanguageBackend.LSP\n\n    def is_jetbrains(self) -> bool:\n        return self == LanguageBackend.JETBRAINS\n\n    def get_lsp_tool_class_replacements(self) -> \"dict[type[Tool], type[Tool]]\":\n        \"\"\"\n        :return: mapping from LSP tool classes to replacement tool classes (functional replacements)\n        \"\"\"\n        match self:\n            case LanguageBackend.LSP:\n                return {}\n            case LanguageBackend.JETBRAINS:\n                from ..tools import jetbrains_tools, symbol_tools\n\n                return {","sourceCodeStart":197,"sourceCodeEnd":233,"githubUrl":"https://github.com/oraios/serena/blob/7fcbca7e62555ec2287ddb2f083caee805848ea6/src/serena/config/serena_config.py#L197-L233","documentation":"SerenaConfig parses the language_server.language_backend setting into the LanguageBackend enum via from_str(). This ValueError is raised when the configured string does not case-insensitively match any enum member's value (e.g. only 'lsp' or 'jetbrains' are valid).","triggerScenarios":"Setting language_backend: <invalid> in serena_config.yml (or wherever from_config_file/_from_dict parse it), passing an arbitrary string to LanguageBackend.from_str() directly, or using an outdated value from a renamed enum member.","commonSituations":"Typo like 'LSP ' with trailing whitespace, 'language-server', 'pyright', or copying config from an older Serena version where other backend values existed; editing YAML by hand without IDE validation.","solutions":["Set language_backend to exactly 'lsp' or 'jetbrains' (case-insensitive) in the config file.","Check for typos, trailing whitespace, or quoting issues in the YAML value.","If migrating from an older Serena version, update deprecated backend names to the current enum values.","Inspect the enum in src/serena/config/serena_config.py to see the authoritative list of valid values."],"exampleFix":"# before (serena_config.yml)\nlanguage_server:\n  language_backend: language-server\n# after\nlanguage_server:\n  language_backend: lsp","handlingStrategy":"validation","validationCode":"from serena.config.serena_config import LanguageBackend\n\nVALID_BACKENDS = [b.value for b in LanguageBackend]\n\ndef validate_backend(backend_str: str) -> None:\n    if backend_str.strip().lower() not in [v.lower() for v in VALID_BACKENDS]:\n        raise ValueError(f\"language_backend must be one of {VALID_BACKENDS}, got {backend_str!r}\")","typeGuard":"def is_valid_backend(backend_str: str) -> bool:\n    return backend_str.lower() in [b.value.lower() for b in LanguageBackend]","tryCatchPattern":"try:\n    backend = LanguageBackend.from_str(cfg[\"language_backend\"])\nexcept ValueError as e:\n    log.warning(\"%s; falling back to LSP\", e)\n    backend = LanguageBackend.LSP","preventionTips":["Only use 'lsp' or 'jetbrains' for language_backend in YAML.","Derive valid values from the enum rather than hardcoding strings.","Add schema validation (e.g. yamale/jsonschema) for serena_config.yml.","Strip whitespace from config values before parsing."],"tags":["python","configuration","enum","validation"],"backgroundTag":"invalid-enum-value","analyzedSha":"7fcbca7e62555ec2287ddb2f083caee805848ea6","analyzedAt":"2026-08-29T00:04:09.619Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}