{"record":{"id":"87d64d942d36f27c","repo":"BerriAI/litellm","slug":"api-base-is-required-for-pydantic-ai-agents","errorCode":null,"errorMessage":"api_base is required for Pydantic AI agents","messagePattern":"api_base is required for Pydantic AI agents","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/a2a_protocol/providers/pydantic_ai_agents/config.py","lineNumber":47,"sourceCode":"            raise ValueError(\"api_base is required for PydanticAIProviderConfig\")\n        return await PydanticAIHandler.handle_non_streaming(\n            request_id=request_id,\n            params=params,\n            api_base=api_base,\n            timeout=kwargs.get(\"timeout\", 60.0),\n            agent_extra_headers=kwargs.get(\"agent_extra_headers\"),\n        )\n\n    async def handle_streaming(\n        self,\n        request_id: str,\n        params: dict[str, Any],\n        api_base: str | None = None,\n        **kwargs,\n    ) -> AsyncIterator[dict[str, Any]]:\n        \"\"\"Handle streaming request with fake streaming.\"\"\"\n        if not api_base:\n            raise ValueError(\"api_base is required for Pydantic AI agents\")\n        async for chunk in PydanticAIHandler.handle_streaming(\n            request_id=request_id,\n            params=params,\n            api_base=api_base,\n            timeout=kwargs.get(\"timeout\", 60.0),\n            chunk_size=kwargs.get(\"chunk_size\", 50),\n            delay_ms=kwargs.get(\"delay_ms\", 10),\n            agent_extra_headers=kwargs.get(\"agent_extra_headers\"),\n        ):\n            yield chunk\n","sourceCodeStart":29,"sourceCodeEnd":58,"githubUrl":"https://github.com/BerriAI/litellm/blob/6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d/litellm/a2a_protocol/providers/pydantic_ai_agents/config.py#L29-L58","documentation":"PydanticAIProviderConfig.handle_streaming raises ValueError when api_base is falsy. Streaming for Pydantic AI is simulated (fake streaming) from a non-streaming HTTP call, which still requires the agent's base URL.","triggerScenarios":"Calling handle_streaming on the pydantic_ai_agents config with api_base=None or empty string.","commonSituations":"Streaming requests through a gateway where the deployment lacks api_base; passing \"\" from an env var that was never set.","solutions":["Provide a non-empty api_base in the call/deployment config","Verify the api_base env/config variable resolves at request time (not an unset env default of '')"],"exampleFix":"# before\nasync for c in config.handle_streaming(request_id=rid, params=params, api_base=os.getenv(\"AGENT_URL\")): ...\n# after\nbase = os.environ[\"AGENT_URL\"]  # fail fast if unset\nasync for c in config.handle_streaming(request_id=rid, params=params, api_base=base): ...","handlingStrategy":"validation","validationCode":"if not api_base:\n    raise ValueError(\"pydantic-ai streaming requires api_base\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Never default api_base to '' from env vars; use required lookup","Assert api_base before entering streaming code paths"],"tags":["a2a","litellm","pydantic-ai","streaming","missing-endpoint"],"backgroundTag":null,"analyzedSha":"6c2dcb801bf2b75c18f1bb24140e7cf57465cc4d","analyzedAt":"2026-08-15T07:12:03.035Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}