{"record":{"id":"40f9a814569b3a69","repo":"BerriAI/litellm","slug":"no-valid-endpoint-found-for-arize-please-set-ari","errorCode":null,"errorMessage":"No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint","messagePattern":"No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"litellm/litellm_core_utils/litellm_logging.py","lineNumber":3949,"sourceCode":"            for callback in _in_memory_loggers:\n                if isinstance(callback, OpikLogger):\n                    return callback\n\n            _opik_logger: Final = OpikLogger()\n            _in_memory_loggers.append(_opik_logger)\n            return _opik_logger\n        elif logging_integration == \"arize\":\n            _v2 = _maybe_construct_otel_v2(\"arize\", _in_memory_loggers)\n            if _v2 is not None:\n                return _v2\n            from litellm.integrations.opentelemetry import (\n                OpenTelemetry,\n                OpenTelemetryConfig,\n            )\n\n            arize_config: Final = ArizeLogger.get_arize_config()\n            if arize_config.endpoint is None:\n                raise ValueError(\n                    \"No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint\"\n                )\n            otel_config = OpenTelemetryConfig(\n                exporter=arize_config.protocol,\n                endpoint=arize_config.endpoint,\n                service_name=arize_config.project_name,\n            )\n\n            os.environ[\"OTEL_EXPORTER_OTLP_TRACES_HEADERS\"] = (\n                f\"space_id={arize_config.space_key or arize_config.space_id},api_key={arize_config.api_key}\"\n            )\n            for callback in _in_memory_loggers:\n                if isinstance(callback, ArizeLogger) and callback.callback_name == \"arize\":\n                    return callback\n            _arize_otel_logger: Final = ArizeLogger(config=otel_config, callback_name=\"arize\")\n            _in_memory_loggers.append(_arize_otel_logger)\n            return _arize_otel_logger\n        elif logging_integration == \"arize_phoenix\":","sourceCodeStart":3931,"sourceCodeEnd":3967,"githubUrl":"https://github.com/BerriAI/litellm/blob/77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8/litellm/litellm_core_utils/litellm_logging.py#L3931-L3967","documentation":"Raised while constructing the 'arize' callback: LiteLLM builds an OpenTelemetry exporter from ArizeLogger.get_arize_config(), which reads ARIZE_ENDPOINT (gRPC) or ARIZE_HTTP_ENDPOINT (HTTP) from the environment; if neither produces an endpoint, logger initialization fails with this ValueError before any telemetry is sent. It typically fires on the first logged request or at proxy startup, and also stamps OTEL_EXPORTER_OTLP_TRACES_HEADERS from the Arize space/key once configured.","triggerScenarios":"litellm.callbacks/success_callback = ['arize'] (or config.yaml callbacks: ['arize']) on a process where neither ARIZE_ENDPOINT nor ARIZE_HTTP_ENDPOINT is set; env vars set in your shell but not in the Docker/systemd/uvicorn process running LiteLLM.","commonSituations":"Containerized proxies without env passthrough; CI runs with callbacks copied from config but env vars omitted; typos like ARIZE_ENDPONT; configuring only ARIZE_API_KEY/ARIZE_SPACE_KEY and assuming the endpoint is inferred.","solutions":["Export ARIZE_ENDPOINT (gRPC, e.g. https://otlp.arize.com:443) or ARIZE_HTTP_ENDPOINT (HTTP) in the environment of the LiteLLM process.","Also set ARIZE_API_KEY and ARIZE_SPACE_KEY/ARIZE_SPACE_ID so the exporter can authenticate.","For Docker, add the vars to the container env (docker run -e / compose environment:).","Verify inside the running process: printenv | grep ARIZE."],"exampleFix":"# before\nimport litellm\nlitellm.success_callback = ['arize']  # ValueError: No valid endpoint found for Arize\n\n# after\nimport os\nos.environ['ARIZE_HTTP_ENDPOINT'] = 'https://otlp.arize.com/v1'\nos.environ['ARIZE_API_KEY'] = '...'\nos.environ['ARIZE_SPACE_KEY'] = '...'\nimport litellm\nlitellm.success_callback = ['arize']","handlingStrategy":"validation","validationCode":"import os\n\nmissing = [v for v in ('ARIZE_ENDPOINT', 'ARIZE_HTTP_ENDPOINT') if not os.environ.get(v)]\nif missing == ['ARIZE_ENDPOINT', 'ARIZE_HTTP_ENDPOINT']:\n    raise RuntimeError('Set ARIZE_ENDPOINT (gRPC) or ARIZE_HTTP_ENDPOINT (HTTP) before enabling the arize callback')\nfor v in ('ARIZE_API_KEY', 'ARIZE_SPACE_KEY'):\n    if not os.environ.get(v):\n        raise RuntimeError(f'{v} is required by the arize callback')","typeGuard":null,"tryCatchPattern":"try:\n    litellm.completion(model='gpt-4o', messages=m)\nexcept ValueError as e:\n    if 'No valid endpoint found for Arize' in str(e):\n        os.environ['ARIZE_HTTP_ENDPOINT'] = 'https://otlp.arize.com/v1'\n        litellm.completion(model='gpt-4o', messages=m)\n    else:\n        raise","preventionTips":["Add a startup env check for every observability callback you enable.","Declare callback env vars in docker-compose/k8s so deployments fail loudly and early.","Keep one canonical list of required env vars per callback in your repo."],"tags":["litellm","arize","observability","callbacks","env-vars","opentelemetry"],"backgroundTag":"missing-env-var","analyzedSha":"77b7c6c40c0c5aa5fbcb1d6a1825ac39ca8829b8","analyzedAt":"2026-08-18T11:44:31.656Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}