{"record":{"id":"748ee495259bca4f","repo":"HKUDS/DeepTutor","slug":"openai-sdk-connection-error-exc","errorCode":null,"errorMessage":"OpenAI SDK connection error: {exc}","messagePattern":"OpenAI SDK connection error: (.+?)","errorType":"exception","errorClass":"EmbeddingProviderError","httpStatus":null,"severity":"error","filePath":"deeptutor/services/embedding/adapters/openai_sdk.py","lineNumber":97,"sourceCode":"\n        client = self._build_client()\n        try:\n            response = await client.embeddings.create(**kwargs)\n        except APIStatusError as exc:\n            try:\n                body = exc.response.text\n            except Exception:\n                body = str(exc)\n            raise EmbeddingProviderError(\n                f\"OpenAI SDK request failed: {exc}\",\n                status=getattr(exc, \"status_code\", None),\n                body=body,\n                model=model,\n                url=self.base_url,\n                provider=\"openai_sdk\",\n            ) from exc\n        except APIConnectionError as exc:\n            raise EmbeddingProviderError(\n                f\"OpenAI SDK connection error: {exc}\",\n                model=model,\n                url=self.base_url,\n                provider=\"openai_sdk\",\n            ) from exc\n        except APIError as exc:\n            raise EmbeddingProviderError(\n                f\"OpenAI SDK API error: {exc}\",\n                model=model,\n                url=self.base_url,\n                provider=\"openai_sdk\",\n            ) from exc\n        finally:\n            try:\n                await client.close()\n            except Exception:\n                pass\n","sourceCodeStart":79,"sourceCodeEnd":115,"githubUrl":"https://github.com/HKUDS/DeepTutor/blob/3e82f130422a813cdd73c10b21a44e9325f5821a/deeptutor/services/embedding/adapters/openai_sdk.py#L79-L115","documentation":"The OpenAI SDK raised APIConnectionError before/while reaching the server — network-level failure such as DNS resolution failure, connection refused, TLS handshake error, or no route to host. No HTTP response exists, so the wrapper carries only model and URL.","triggerScenarios":"DNS for the base_url host fails; endpoint/port unreachable (service down, firewall, VPN); TLS certificate mismatch; local proxy required but not set. The SDK's built-in retries (max_retries=2) were also exhausted.","commonSituations":"Self-hosted gateway down; typo in base_url hostname; corporate proxy blocking api.openai.com; IPv6/mDNS issues; container without network egress.","solutions":["Verify base_url host resolves and the service is up: curl the embeddings endpoint","If behind a proxy, set HTTPS_PROXY/HTTP_PROXY so the SDK can egress","Fix hostname/port typos in the embedding binding config","For transient network blips, retry the embed() call with backoff"],"exampleFix":"# before\nbase_url = \"https://api.openai.com/v1/embbedings\"  # typo'd host path -> connection/DNS issues on proxies\n# after\nbase_url = \"https://api.openai.com/v1\"","handlingStrategy":"retry","validationCode":"import socket\n\ndef host_reachable(base_url: str) -> bool:\n    from urllib.parse import urlparse\n    u = urlparse(base_url)\n    try:\n        socket.getaddrinfo(u.hostname, u.port or 443)\n        return True\n    except socket.gaierror:\n        return False","typeGuard":"null","tryCatchPattern":"try:\n    resp = await adapter.embed(req)\nexcept EmbeddingProviderError as e:\n    if \"connection error\" in str(e).lower():\n        for delay in (1, 2, 4):\n            await asyncio.sleep(delay)\n            try:\n                resp = await adapter.embed(req); break\n            except EmbeddingProviderError:\n                continue\n        else:\n            raise NetworkError(str(e)) from e\n    raise","preventionTips":["Set HTTPS_PROXY in corporate/VPN environments","Health-check base_url reachability before long jobs","Retry connection errors with exponential backoff; they are usually transient"],"tags":["network","connection-error","openai-sdk","embeddings","dns"],"backgroundTag":"connection-refused","analyzedSha":"3e82f130422a813cdd73c10b21a44e9325f5821a","analyzedAt":"2026-08-27T06:57:25.364Z","schemaVersion":2},"datasetVersion":"2026-08-27T08:17:20.692Z"}