{"record":{"id":"72bcc41307857f86","repo":"assafelovic/gpt-researcher","slug":"set-embedding-embedding-provider-embedding-m","errorCode":null,"errorMessage":"Set EMBEDDING = '<embedding_provider>:<embedding_model>' Eg 'openai:text-embedding-3-large'","messagePattern":"Set EMBEDDING = '<embedding_provider>:<embedding_model>' Eg 'openai:text-embedding-3-large'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"gpt_researcher/config/config.py","lineNumber":248,"sourceCode":"            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\n        if embedding_str is None:\n            return None, None\n        try:\n            embedding_provider, embedding_model = embedding_str.split(\":\", 1)\n            assert embedding_provider in _SUPPORTED_PROVIDERS, (\n                f\"Unsupported {embedding_provider}.\\nSupported embedding providers are: \"\n                + \", \".join(_SUPPORTED_PROVIDERS)\n            )\n            return embedding_provider, embedding_model\n        except ValueError:\n            raise ValueError(\n                \"Set EMBEDDING = '<embedding_provider>:<embedding_model>' \"\n                \"Eg 'openai:text-embedding-3-large'\"\n            )\n\n    def validate_doc_path(self):\n        \"\"\"Ensure that the folder exists at the doc path\"\"\"\n        os.makedirs(self.doc_path, exist_ok=True)\n\n    @staticmethod\n    def convert_env_value(key: str, env_value: str, type_hint: Type) -> Any:\n        \"\"\"Convert environment variable to the appropriate type based on the type hint.\"\"\"\n        origin = get_origin(type_hint)\n        args = get_args(type_hint)\n\n        if origin is Union:\n            # Handle Union types (e.g., Union[str, None] / Optional[str]).\n            # Check the None sentinel BEFORE non-None args: for Optional[str],\n            # str conversion never raises, so looping str-first permanently","sourceCodeStart":230,"sourceCodeEnd":266,"githubUrl":"https://github.com/assafelovic/gpt-researcher/blob/6f998577d547b1e54ec662dac63583aa11e3b84b/gpt_researcher/config/config.py#L230-L266","documentation":"Config.parse_embedding parses EMBEDDING as '<embedding_provider>:<embedding_model>'. A missing colon makes partition fail with ValueError, which is re-raised as this instructive message.","triggerScenarios":"Setting EMBEDDING='text-embedding-3-large' without the 'openai:' prefix, using '=' as separator, or leaving the value malformed.","commonSituations":"Newer config syntax migration; copy-paste from docs that show only the model part; quoting problems in .env.","solutions":["Set EMBEDDING='openai:text-embedding-3-large' style value","Verify provider is in the supported embedding providers list (openai, azure, ollama, huggingface, google_genai, ...)"],"exampleFix":"# before\nEMBEDDING=text-embedding-3-large\n# after\nEMBEDDING=openai:text-embedding-3-large","handlingStrategy":"validation","validationCode":"v = os.getenv(\"EMBEDDING\", \"\")\nassert \":\" in v, \"EMBEDDING must be 'provider:model'\"","typeGuard":null,"tryCatchPattern":"try:\n    cfg = Config()\nexcept ValueError as e:\n    if \"EMBEDDING\" in str(e):\n        raise SystemExit(\"Set EMBEDDING='openai:text-embedding-3-large'\")\n    raise","preventionTips":["Use provider:model format","Add startup assertion for required colon"],"tags":["python","config","embeddings","startup"],"backgroundTag":"invalid-config-value","analyzedSha":"6f998577d547b1e54ec662dac63583aa11e3b84b","analyzedAt":"2026-08-28T17:50:07.383Z","schemaVersion":2},"datasetVersion":"2026-08-28T21:17:43.275Z"}