{"record":{"id":"d2126f1649cbc1a8","repo":"zylon-ai/private-gpt","slug":"web-search-is-not-properly-initialized-or-is-disab","errorCode":null,"errorMessage":"Web Search is not properly initialized or is disabled in settings.Consider enabling it in the configuration.","messagePattern":"Web Search is not properly initialized or is disabled in settings\\.Consider enabling it in the configuration\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"private_gpt/components/web/web_search/web_search_service.py","lineNumber":73,"sourceCode":"        self._initialize_providers()\n        self._initialize_processor()\n        self._initialized = True\n\n        logger.debug(\"WebSearchService initialized successfully\")\n\n    async def search(\n        self, query: str, model_id: str | None = None, **kwargs: Any\n    ) -> list[WebSearchResult]:\n        await self.validate()\n\n        provider_results: list[WebSearchResult] = await self._provider.make_query(\n            query, self._settings.web_search.num_links, **kwargs\n        )\n        return await self._processor.process_results(query, provider_results, model_id)\n\n    async def validate(self) -> None:\n        if not self._initialized:\n            raise ValueError(\n                \"Web Search is not properly initialized or is disabled in settings.\"\n                \"Consider enabling it in the configuration.\"\n            )\n\n        await self._provider.validate()\n        await self._processor.validate()\n\n    async def close(self) -> None:\n        await self._provider.close()\n\n    def _initialize_providers(self) -> None:\n        if self._settings.web_search.provider == \"brave\":\n            from private_gpt.components.web.web_search.providers.brave import (\n                BraveSearchProvider,\n            )\n\n            self._provider = BraveSearchProvider(self._settings)\n        elif self._settings.web_search.provider == \"mock\":","sourceCodeStart":55,"sourceCodeEnd":91,"githubUrl":"https://github.com/zylon-ai/private-gpt/blob/4a030776a31a901ad80b1bf4d7faa2c1a367efbb/private_gpt/components/web/web_search/web_search_service.py#L55-L91","documentation":"ValueError from WebSearchService.validate() when the service singleton never completed initialization. _initialize() returns early when settings.web_search.enabled is false (the default), leaving _initialized False; search() calls validate() first, so any search attempt fails immediately. Note validate() also chains to provider.validate() and processor.validate(), so after enabling the flag you may next hit the Brave key check.","triggerScenarios":"web_search.enabled left at default false while calling WebSearchService.search(); settings profile not loaded so the toggle never applied; startup log 'Web Search is disabled in settings, skipping initialization' preceding the failure.","commonSituations":"Expecting web search to work out of the box; enabling only web_fetch but not web_search; env var misnamed so the enabled override is ignored.","solutions":["Set web_search.enabled: true in the active settings profile (or PRIVATE_GPT_WEB_SEARCH_ENABLED=true).","Also configure what the chained validations need: brave.api_key and, for content processors, web_fetch.enabled.","Restart the process — the flag is read once at singleton construction."],"exampleFix":"# settings.yaml\nweb_search:\n  enabled: true   # was false/default\n  provider: brave\n  brave:\n    api_key: \"BSA...\"","handlingStrategy":"validation","validationCode":"svc = get_global_injector().get(WebSearchService)\nawait svc.validate()  # raises the exact config gap before user traffic hits it","typeGuard":"def web_search_initialized(svc: WebSearchService) -> bool:\n    return svc._initialized","tryCatchPattern":"try:\n    results = await search_svc.search(query)\nexcept ValueError as e:\n    if 'Web Search is not properly initialized' in str(e):\n        raise RuntimeError('Enable web_search (and its brave key / web_fetch deps)') from e\n    raise","preventionTips":["Call validate() in a readiness probe at startup.","Enable all three flags together: web_search.enabled, brave.api_key, web_fetch.enabled (for content processors).","Watch startup logs for 'Web Search is disabled in settings, skipping initialization'."],"tags":["configuration","web-search","settings","initialization"],"backgroundTag":null,"analyzedSha":"4a030776a31a901ad80b1bf4d7faa2c1a367efbb","analyzedAt":"2026-08-15T03:51:26.951Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}