{"record":{"id":"85f220905955f3e0","repo":"assafelovic/gpt-researcher","slug":"set-smart-llm-or-fast-llm-llm-provider-llm-m","errorCode":null,"errorMessage":"Set SMART_LLM or FAST_LLM = '<llm_provider>:<llm_model>' Eg 'openai:gpt-4o-mini'","messagePattern":"Set SMART_LLM or FAST_LLM = '<llm_provider>:<llm_model>' Eg 'openai:gpt-4o-mini'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"gpt_researcher/config/config.py","lineNumber":219,"sourceCode":"            )\n        return retrievers\n\n    @staticmethod\n    def parse_llm(llm_str: str | None) -> tuple[str | None, str | None]:\n        \"\"\"Parse llm string into (llm_provider, llm_model).\"\"\"\n        from gpt_researcher.llm_provider.generic.base import _SUPPORTED_PROVIDERS\n\n        if llm_str is None:\n            return None, None\n        try:\n            llm_provider, llm_model = llm_str.split(\":\", 1)\n            assert llm_provider in _SUPPORTED_PROVIDERS, (\n                f\"Unsupported {llm_provider}.\\nSupported llm providers are: \"\n                + \", \".join(_SUPPORTED_PROVIDERS)\n            )\n            return llm_provider, llm_model\n        except ValueError:\n            raise ValueError(\n                \"Set SMART_LLM or FAST_LLM = '<llm_provider>:<llm_model>' \"\n                \"Eg 'openai:gpt-4o-mini'\"\n            )\n\n    @staticmethod\n    def parse_reasoning_effort(reasoning_effort_str: str | None) -> str | None:\n        \"\"\"Parse reasoning effort string into (reasoning_effort).\"\"\"\n        if reasoning_effort_str is None:\n            return ReasoningEfforts.Medium.value\n        if reasoning_effort_str not in [effort.value for effort in ReasoningEfforts]:\n            raise ValueError(f\"Invalid reasoning effort: {reasoning_effort_str}. Valid options are: {', '.join([effort.value for effort in ReasoningEfforts])}\")\n        return reasoning_effort_str\n\n    @staticmethod\n    def parse_embedding(embedding_str: str | None) -> tuple[str | None, str | None]:\n        \"\"\"Parse embedding string into (embedding_provider, embedding_model).\"\"\"\n        from gpt_researcher.memory.embeddings import _SUPPORTED_PROVIDERS\n","sourceCodeStart":201,"sourceCodeEnd":237,"githubUrl":"https://github.com/assafelovic/gpt-researcher/blob/6f998577d547b1e54ec662dac63583aa11e3b84b/gpt_researcher/config/config.py#L201-L237","documentation":"Config.parse_llm expects SMART_LLM/FAST_LLM strings of the form '<provider>:<model>'. When str.partition(':') fails to find a colon it raises ValueError, and the except ValueError branch re-raises this generic message with an example.","triggerScenarios":"Setting FAST_LLM='gpt-4o-mini' without the 'openai:' prefix, using '=' instead of ':', or a value that is empty/None-shaped so no provider:model split is possible.","commonSituations":"Migrating from the deprecated LLM_PROVIDER + FAST_LLM_MODEL vars to the combined FAST_LLM syntax; quoting issues in .env that strip part of the value.","solutions":["Set the variable as 'provider:model', e.g. FAST_LLM='openai:gpt-4o-mini'","Ensure the provider is supported (openai, anthropic, groq, ...)\nIf you meant the old style, remove it and use the combined form"],"exampleFix":"# before\nFAST_LLM=gpt-4o-mini\n# after\nFAST_LLM=openai:gpt-4o-mini","handlingStrategy":"validation","validationCode":"def parse_llm_ok(v: str) -> bool:\n    return isinstance(v, str) and \":\" in v and v.split(\":\", 1)[0] in {\"openai\",\"anthropic\",\"groq\",\"azure\",\"ollama\"}\nassert parse_llm_ok(os.getenv(\"FAST_LLM\",\"\"))","typeGuard":null,"tryCatchPattern":"try:\n    cfg = Config()\nexcept ValueError as e:\n    if \"SMART_LLM or FAST_LLM\" in str(e):\n        raise SystemExit(\"Set FAST_LLM='openai:gpt-4o-mini'\")\n    raise","preventionTips":["Always write LLM vars as provider:model","Add a config smoke test in CI that constructs Config()"],"tags":["python","config","llm","startup"],"backgroundTag":"invalid-config-value","analyzedSha":"6f998577d547b1e54ec662dac63583aa11e3b84b","analyzedAt":"2026-08-28T17:50:07.383Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}