{"record":{"id":"9005367c8813149a","repo":"invoke-ai/InvokeAI","slug":"invalid-generation-devices-value-v-use-auto","errorCode":null,"errorMessage":"Invalid generation_devices value '{v}'. Use 'auto' or a list of devices, e.g. ['cuda:0', 'cuda:1'].","messagePattern":"Invalid generation_devices value '(.+?)'\\. Use 'auto' or a list of devices, e\\.g\\. \\['cuda:0', 'cuda:1'\\]\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"invokeai/app/services/config/config_default.py","lineNumber":290,"sourceCode":"        default=None, description=\"API key for Seedream image generation.\"\n    )\n    external_seedream_base_url: Optional[str] = Field(\n        default=None, description=\"Base URL override for Seedream image generation.\"\n    )\n\n    # fmt: on\n\n    model_config = SettingsConfigDict(env_prefix=\"INVOKEAI_\", env_ignore_empty=True)\n\n    @field_validator(\"generation_devices\")\n    @classmethod\n    def validate_generation_devices(cls, v: Union[str, list[str]]) -> Union[str, list[str]]:\n        if v == \"auto\":\n            return v\n        # A non-\"auto\" string would otherwise be iterated character-by-character below (rejecting\n        # 'c' from \"cuda:0\"), producing a confusing error. Require an explicit list instead.\n        if isinstance(v, str):\n            raise ValueError(\n                f\"Invalid generation_devices value '{v}'. Use 'auto' or a list of devices, e.g. ['cuda:0', 'cuda:1'].\"\n            )\n        if len(v) == 0:\n            raise ValueError(\"generation_devices cannot be an empty list. Use 'auto' or a list of devices.\")\n        pattern = re.compile(r\"^(cpu|mps|xpu(:\\d+)?|cuda(:\\d+)?)$\")\n        for device in v:\n            if not pattern.match(device):\n                raise ValueError(\n                    f\"Invalid generation device '{device}'. Valid values are 'auto', 'cpu', 'mps', 'cuda', 'cuda:N', \"\n                    \"'xpu', or 'xpu:N'.\"\n                )\n        return v\n\n    @field_validator(\"base_url\")\n    @classmethod\n    def validate_base_url(cls, v: Optional[str]) -> Optional[str]:\n        \"\"\"Normalize the reverse-proxy base path: ensure a single leading slash, no trailing slash.\n","sourceCodeStart":272,"sourceCodeEnd":308,"githubUrl":"https://github.com/invoke-ai/InvokeAI/blob/0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06/invokeai/app/services/config/config_default.py#L272-L308","documentation":"validate_generation_devices accepts either the literal string 'auto' or an explicit list of device strings. Supplying a non-'auto' string is rejected outright because iterating it would match character-by-character ('c','u','d'...) and produce a confusing per-character error. Empty lists and malformed device names have their own messages (errors 586/587).","triggerScenarios":"Configuring generation_devices as a plain string like 'cuda:0' or 'cuda' instead of a list, e.g. in invokeai.yaml or via the corresponding env var; quoting a list so YAML/env parsing yields a single string.","commonSituations":"Users following older docs that allowed a single device string; setting env GENERATION_DEVICES='cuda:0' without list syntax; YAML unquoted values interpreted as string rather than sequence.","solutions":["Change the value to 'auto' to let InvokeAI pick devices automatically","Use an explicit YAML list: generation_devices: ['cuda:0', 'cuda:1']","For env vars, use JSON list syntax, e.g. GENERATION_DEVICES='[\"cuda:0\",\"cuda:1\"]'"],"exampleFix":"// before (invokeai.yaml)\ngeneration_devices: cuda:0\n// after\ngeneration_devices:\n  - cuda:0\n  - cuda:1","handlingStrategy":"validation","validationCode":"v = cfg.generation_devices\nassert v == 'auto' or isinstance(v, list), \"generation_devices must be 'auto' or a list like ['cuda:0']\"","typeGuard":null,"tryCatchPattern":"try:\n    cfg = InvokeAIAppConfig(**overrides)\nexcept ValueError as e:\n    if 'generation_devices' in str(e):\n        overrides['generation_devices'] = 'auto'\n        cfg = InvokeAIAppConfig(**overrides)","preventionTips":["Use 'auto' unless multi-device scheduling is needed","In YAML write lists with '- ' entries, not a single string","Use JSON list syntax for env vars"],"tags":["config","validation","pydantic","devices"],"backgroundTag":"schema-validation-failed","analyzedSha":"0b6a024f2ff6a86bfb953dcdb9cc504ef7397a06","analyzedAt":"2026-08-29T04:46:49.967Z","schemaVersion":2},"datasetVersion":"2026-08-29T07:17:48.351Z"}