{"record":{"id":"2f55d4f1aeb15b00","repo":"ScrapeGraphAI/Scrapegraph-ai","slug":"search-engine-must-be-one-of-join-valid-eng","errorCode":null,"errorMessage":"Search engine must be one of: {', '.join(valid_engines)}","messagePattern":"Search engine must be one of: (.+?)","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"scrapegraphai/utils/research_web.py","lineNumber":67,"sourceCode":"\n    query: str = Field(..., description=\"Search query\")\n    search_engine: str = Field(\"duckduckgo\", description=\"Search engine to use\")\n    max_results: int = Field(10, description=\"Maximum number of results to return\")\n    port: Optional[int] = Field(8080, description=\"Port for SearXNG\")\n    timeout: int = Field(10, description=\"Request timeout in seconds\")\n    proxy: Optional[Union[str, Dict, ProxyConfig]] = Field(\n        None, description=\"Proxy configuration\"\n    )\n    serper_api_key: Optional[str] = Field(None, description=\"API key for Serper\")\n    region: Optional[str] = Field(None, description=\"Country/region code\")\n    language: str = Field(\"en\", description=\"Language code\")\n\n    @validator(\"search_engine\")\n    def validate_search_engine(cls, v):\n        \"\"\"Validate search engine.\"\"\"\n        valid_engines = {\"duckduckgo\", \"bing\", \"searxng\", \"serper\"}\n        if v.lower() not in valid_engines:\n            raise ValueError(\n                f\"Search engine must be one of: {', '.join(valid_engines)}\"\n            )\n        return v.lower()\n\n    @validator(\"query\")\n    def validate_query(cls, v):\n        \"\"\"Validate search query.\"\"\"\n        if not v or not isinstance(v, str):\n            raise ValueError(\"Query must be a non-empty string\")\n        return v\n\n    @validator(\"max_results\")\n    def validate_max_results(cls, v):\n        \"\"\"Validate max results.\"\"\"\n        if v < 1 or v > 100:\n            raise ValueError(\"max_results must be between 1 and 100\")\n        return v\n","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/ScrapeGraphAI/Scrapegraph-ai/blob/532dfffbf6ee823a6c9cf8cfedc24a93bf026780/scrapegraphai/utils/research_web.py#L49-L85","documentation":"ValueError from the pydantic validator on search_engine in scrapegraphai.utils.research_web: the configured search engine must be one of duckduckgo, bing, searxng, serper (case-insensitive; value is lowercased before comparison).","triggerScenarios":"Setting search_engine to 'google', 'google_serp', or any string outside the four allowed values on the research/search web model.","commonSituations":"Upgrading from versions supporting more engines; copying configs expecting Google search; typos like 'serper.dev'.","solutions":["Use one of: duckduckgo, bing, searxng, serper","For Google-style results use 'serper' with a SERPER_API_KEY","Check spelling/case (case-insensitive but must match exactly otherwise)"],"exampleFix":"# before\nparams = {\"search_engine\": \"google\", \"query\": \"...\"}\n# after\nparams = {\"search_engine\": \"serper\", \"query\": \"...\"}  # + set SERPER_API_KEY","handlingStrategy":"validation","validationCode":"VALID = {\"duckduckgo\", \"bing\", \"searxng\", \"serper\"}\nsearch_engine = search_engine.lower()\nassert search_engine in VALID, f\"pick one of {sorted(VALID)}\"","typeGuard":"def is_supported_search_engine(name: str) -> bool:\n    return isinstance(name, str) and name.lower() in {\"duckduckgo\", \"bing\", \"searxng\", \"serper\"}","tryCatchPattern":"try:\n    params = SearchParams(query=q, search_engine=engine)\nexcept ValidationError as e:\n    engine = \"duckduckgo\"\n    params = SearchParams(query=q, search_engine=engine)","preventionTips":["Pin the engine list from docs at build time","Set SERPER_API_KEY when choosing serper","Fail fast on config load, not mid-pipeline"],"tags":["search-engine","config","validation"],"backgroundTag":"invalid-config-value","analyzedSha":"532dfffbf6ee823a6c9cf8cfedc24a93bf026780","analyzedAt":"2026-08-28T15:19:38.821Z","schemaVersion":2},"datasetVersion":"2026-08-28T16:17:29.566Z"}