BerriAI/litellm · error · ValueError

No valid endpoint found for Arize, please set 'ARIZE_ENDPOIN

Error message

No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint

What it means

When initializing the 'arize' callback, LiteLLM reads ArizeLogger.get_arize_config(); if neither ARIZE_ENDPOINT (gRPC) nor ARIZE_HTTP_ENDPOINT (HTTP) resolves to a non-None endpoint, it raises this ValueError. Arize needs both credentials (ARIZE_API_KEY/ARIZE_SPACE_KEY) and an explicit endpoint to build the OpenTelemetry exporter, and the endpoint is the piece you forgot.

Source

Thrown at litellm/litellm_core_utils/litellm_logging.py:3943

            for callback in _in_memory_loggers:
                if isinstance(callback, OpikLogger):
                    return callback

            _opik_logger: Final = OpikLogger()
            _in_memory_loggers.append(_opik_logger)
            return _opik_logger
        elif logging_integration == "arize":
            _v2 = _maybe_construct_otel_v2("arize", _in_memory_loggers)
            if _v2 is not None:
                return _v2
            from litellm.integrations.opentelemetry import (
                OpenTelemetry,
                OpenTelemetryConfig,
            )

            arize_config: Final = ArizeLogger.get_arize_config()
            if arize_config.endpoint is None:
                raise ValueError(
                    "No valid endpoint found for Arize, please set 'ARIZE_ENDPOINT' to your GRPC endpoint or 'ARIZE_HTTP_ENDPOINT' to your HTTP endpoint"
                )
            otel_config = OpenTelemetryConfig(
                exporter=arize_config.protocol,
                endpoint=arize_config.endpoint,
                service_name=arize_config.project_name,
            )

            os.environ["OTEL_EXPORTER_OTLP_TRACES_HEADERS"] = (
                f"space_id={arize_config.space_key or arize_config.space_id},api_key={arize_config.api_key}"
            )
            for callback in _in_memory_loggers:
                if isinstance(callback, ArizeLogger) and callback.callback_name == "arize":
                    return callback
            _arize_otel_logger: Final = ArizeLogger(config=otel_config, callback_name="arize")
            _in_memory_loggers.append(_arize_otel_logger)
            return _arize_otel_logger
        elif logging_integration == "arize_phoenix":

View on GitHub (pinned to 6c2dcb801b)

Solutions

  1. Set ARIZE_HTTP_ENDPOINT (e.g. https://otlp.arize.com/phonybroker/otel/v1/traces for the phony broker) or ARIZE_ENDPOINT for gRPC in the proxy environment
  2. Verify with a quick env check before startup: python -c "import os; print(os.getenv('ARIZE_ENDPOINT'), os.getenv('ARIZE_HTTP_ENDPOINT'))"
  3. Ensure the vars are actually visible to the proxy process (docker-compose env, systemd Environment=, k8s secret) not just your shell
  4. If you only wanted Arize-hosted phony-broker tracing, follow the LiteLLM Arize docs for the exact endpoint URL format

Example fix

# before
export ARIZE_API_KEY=... ARIZE_SPACE_KEY=...
litellm_settings:
  callbacks: ["arize"]   # ValueError: No valid endpoint found

# after
export ARIZE_API_KEY=... ARIZE_SPACE_KEY=... ARIZE_HTTP_ENDPOINT="https://otlp.arize.com/phonybroker/otel/v1/traces"
litellm_settings:
  callbacks: ["arize"]
Defensive patterns

Strategy: validation

Validate before calling

import os

missing = [v for v in ('ARIZE_API_KEY', 'ARIZE_SPACE_KEY') if not os.getenv(v)]
if not (os.getenv('ARIZE_ENDPOINT') or os.getenv('ARIZE_HTTP_ENDPOINT')):
    missing.append('ARIZE_ENDPOINT or ARIZE_HTTP_ENDPOINT')
assert not missing, f'Arize callback misconfigured, missing: {missing}'

Try / catch

try:
    litellm.callbacks = ['arize']
    litellm.completion(...)
except ValueError as e:
    if 'No valid endpoint found for Arize' in str(e):
        os.environ['ARIZE_HTTP_ENDPOINT'] = 'https://otlp.arize.com/...'
        raise RuntimeError('Arize endpoint configured; restart proxy')
    raise

Prevention

When it happens

Trigger: Setting callbacks: ['arize'] (config.yaml litellm_settings or LITELLM_CALLBACKS env) with ARIZE_API_KEY/ARIZE_SPACE_KEY set but neither ARIZE_ENDPOINT nor ARIZE_HTTP_ENDPOINT present in the proxy process environment.

Common situations: Copying Arize setup docs that only mention API key/space; deploying to a new environment where the endpoint env vars were not carried over; mistyped var names (e.g. ARIZE_ENDPOINT_URL).

Related errors


AI-assisted analysis of BerriAI/litellm@6c2dcb801b (2026-08-15). Data as JSON: /api/errors/40f9a814569b3a69. Report an issue: GitHub.