{"record":{"id":"a0b2a43db622690d","repo":"nexu-io/open-design","slug":"unsupported-reasoning-provider-provider-name","errorCode":null,"errorMessage":"Unsupported reasoning provider: {provider_name}","messagePattern":"Unsupported reasoning provider: (.+?)","errorType":"validation","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"design-templates/last30days/scripts/lib/providers.py","lineNumber":247,"sourceCode":"        default_rerank = GEMINI_PRO\n\n    planner_model = config.get(\"LAST30DAYS_PLANNER_MODEL\") or default_planner\n    rerank_model = config.get(\"LAST30DAYS_RERANK_MODEL\") or default_rerank\n\n    if provider_name == \"gemini\":\n        _require_gemini_31_preview(planner_model, role=\"planner\")\n        _require_gemini_31_preview(rerank_model, role=\"rerank\")\n\n    return planner_model, rerank_model\n\n\ndef mock_runtime(config: dict[str, Any], depth: str) -> schema.ProviderRuntime:\n    \"\"\"Resolve model pins for mock mode without requiring live credentials.\"\"\"\n    provider_name = (config.get(\"LAST30DAYS_REASONING_PROVIDER\") or \"gemini\").lower()\n    if provider_name == \"auto\":\n        provider_name = \"gemini\"\n    if provider_name not in _MODEL_DEFAULTS:\n        raise RuntimeError(f\"Unsupported reasoning provider: {provider_name}\")\n\n    planner_model, rerank_model = _resolve_model_pins(config, depth, provider_name)\n    return schema.ProviderRuntime(\n        reasoning_provider=provider_name,\n        planner_model=planner_model,\n        rerank_model=rerank_model,\n\n        x_search_backend=_resolve_x_backend(config),\n    )\n\n\ndef resolve_runtime(config: dict[str, Any], depth: str) -> tuple[schema.ProviderRuntime, ReasoningClient | None]:\n    \"\"\"Resolve the reasoning provider and pinned models.\"\"\"\n    provider_name = (config.get(\"LAST30DAYS_REASONING_PROVIDER\") or \"auto\").lower()\n    google_key = config.get(\"GOOGLE_API_KEY\") or config.get(\"GEMINI_API_KEY\") or config.get(\"GOOGLE_GENAI_API_KEY\")\n    openai_token = config.get(\"OPENAI_API_KEY\")\n    xai_key = config.get(\"XAI_API_KEY\")\n","sourceCodeStart":229,"sourceCodeEnd":265,"githubUrl":"https://github.com/nexu-io/open-design/blob/5be4028344c2eb4c667c5a97bda8f750c5597ef7/design-templates/last30days/scripts/lib/providers.py#L229-L265","documentation":"Raised in mock_runtime after normalizing 'auto' to 'gemini'. The provider name is checked against _MODEL_DEFAULTS, whose keys are exactly gemini, openai, xai, openrouter. Any other value (including typos or partially-supported providers) aborts mock mode before model pins are resolved.","triggerScenarios":"Setting LAST30DAYS_REASONING_PROVIDER to a string outside {gemini, openai, xai, openrouter, auto} and running in mock mode (no live credentials).","commonSituations":"Trying to mock with a provider like 'anthropic' or 'mistral' that the runtime does not pin models for. A trailing space or uppercase variant ('OpenAI') after .lower() that still is not in the map (lower handles case, not unknown names).","solutions":["Set LAST30DAYS_REASONING_PROVIDER to one of gemini, openai, xai, openrouter, or auto.","Leave it unset to default to 'gemini' in mock mode.","If you need a new provider in mock mode, add its (planner, rerank) defaults to _MODEL_DEFAULTS in providers.py."],"exampleFix":"# before\nLAST30DAYS_REASONING_PROVIDER=anthropic\n\n# after\nLAST30DAYS_REASONING_PROVIDER=gemini","handlingStrategy":"validation","validationCode":"SUPPORTED_PROVIDERS = {\"gemini\", \"openai\", \"xai\", \"openrouter\", \"auto\"}\n\ndef validate_mock_provider(config):\n    p = (config.get(\"LAST30DAYS_REASONING_PROVIDER\") or \"gemini\").lower()\n    if p not in SUPPORTED_PROVIDERS:\n        raise ValueError(f\"Unsupported provider for mock mode: {p!r}\")\n    return p","typeGuard":"null","tryCatchPattern":"null","preventionTips":["Treat the _MODEL_DEFAULTS keys as the canonical provider allow-list and validate against it in one place.","Default LAST30DAYS_REASONING_PROVIDER to 'auto' or 'gemini' rather than leaving a chance of an unknown pin.","Surface a friendly config error at load time instead of letting mock_runtime raise mid-run."],"tags":["config","provider","mock-mode","allow-list"],"backgroundTag":null,"analyzedSha":"5be4028344c2eb4c667c5a97bda8f750c5597ef7","analyzedAt":"2026-08-12T12:03:58.812Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}