BerriAI/litellm · error · ValueError

api_key and api_base are required for Arize Phoenix prompt…

Error message

api_key and api_base are required for Arize Phoenix prompt integration

What it means

The Arize Phoenix prompt integration (`prompt_initializer` in litellm/integrations/arize/__init__.py) builds an ArizePhoenixPromptManager for prompts managed in Phoenix. It requires both an api_key (from litellm_params or the PHOENIX_API_KEY env var) and an api_base (litellm_params only — there is no env fallback for the base URL). Missing either raises this ValueError at prompt initialization.

Solutions

  1. Add both fields to the model's litellm_params: `api_key: os.environ/PHOENIX_API_KEY` and `api_base: https://app.phoenix.arize.com/s/workspace/v1` (or your local `http://localhost:6006`)
  2. Ensure PHOENIX_API_KEY is exported if api_key is not given inline
  3. Confirm the api_base points to the Phoenix API root that serves /prompt_versions endpoints, not the collector/traces endpoint

Example fix

# before
model_list:
  - model_name: my-prompt
    litellm_params:
      model: openai/gpt-4o
      prompt_id: my_prompt_id
      # api_key / api_base missing -> ValueError

# after
model_list:
  - model_name: my-prompt
    litellm_params:
      model: openai/gpt-4o
      prompt_id: my_prompt_id
      api_base: https://app.phoenix.arize.com/s/workspace/v1
      api_key: os.environ/PHOENIX_API_KEY
Defensive patterns

Strategy: validation

Validate before calling

import os

def phoenix_prompt_params(prompt_id: str, api_base: str | None = None) -> dict:
    api_key = os.getenv("PHOENIX_API_KEY")
    api_base = api_base or os.getenv("PHOENIX_API_BASE")
    if not api_key:
        raise SystemExit("PHOENIX_API_KEY not set")
    if not api_base:
        raise SystemExit("api_base required for Arize Phoenix prompts (no env fallback)")
    return {"prompt_id": prompt_id, "api_key": api_key, "api_base": api_base}

Try / catch

try:
    manager = prompt_initializer(litellm_params, prompt_spec)
except ValueError as e:
    if "api_key and api_base are required" in str(e):
        raise SystemExit("Phoenix prompt config incomplete: set api_key/PHOENIX_API_KEY and api_base in litellm_params") from e
    raise

Prevention

When it happens

Trigger: Declaring a model with `model: arize/phoenix/...` style prompt routing, or any config that routes prompt management to `prompt_initializer`, with `api_key`/`PHOENIX_API_KEY` unset or `api_base` absent from litellm_params. Note api_base has NO environment fallback, so relying on PHOENIX_HOST or similar will not help.

Common situations: Setting PHOENIX_API_KEY but forgetting api_base in the model's litellm_params; assuming a default localhost base URL exists (it does for tracing, not for the prompt client); copy-pasting a Phoenix tracing config and expecting prompts to work with the same env vars.

Understand the failure class

Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.

Related errors


AI-assisted analysis of BerriAI/litellm@77b7c6c40c (2026-08-18). Data as JSON: /api/errors/e1fe345e2bd77e2a. Report an issue: GitHub.

Appendix: source

Thrown at litellm/integrations/arize/__init__.py:25

from litellm.types.prompts.init_prompts import SupportedPromptIntegrations

from .arize_phoenix_prompt_manager import ArizePhoenixPromptManager

# Global instances
global_arize_config: Final[dict | None] = None


def prompt_initializer(litellm_params: "PromptLiteLLMParams", prompt_spec: "PromptSpec") -> "CustomPromptManagement":
    """
    Initialize a prompt from Arize Phoenix.
    """
    api_key: Final = getattr(litellm_params, "api_key", None) or os.environ.get("PHOENIX_API_KEY")
    api_base: Final = getattr(litellm_params, "api_base", None)
    prompt_id: Final = getattr(litellm_params, "prompt_id", None)

    if not api_key or not api_base:
        raise ValueError("api_key and api_base are required for Arize Phoenix prompt integration")

    try:
        arize_prompt_manager: Final = ArizePhoenixPromptManager(
            **{
                "api_key": api_key,
                "api_base": api_base,
                "prompt_id": prompt_id,
                **litellm_params.model_dump(exclude={"api_key", "api_base", "prompt_id"}),
            },
        )

        return arize_prompt_manager
    except Exception as e:
        raise e


prompt_initializer_registry: Final = {
    SupportedPromptIntegrations.ARIZE_PHOENIX.value: prompt_initializer,

View on GitHub (pinned to 77b7c6c40c)