{"id":3,"library":"arize-phoenix","title":"Arize Phoenix (arize-phoenix)","description":"Open-source AI observability and evaluation platform from Arize AI. Phoenix provides tracing, evaluation, prompt management, datasets, and experiments for LLM applications. Built on OpenTelemetry and OpenInference. Can be run locally, self-hosted (Docker/K8s), or accessed via cloud at app.phoenix.arize.com. CRITICAL: Phoenix is a separate product from Arize AX (the enterprise cloud platform). They share the Arize brand but use different packages, credentials, and endpoints: Phoenix uses phoenix.otel + PHOENIX_API_KEY; Arize AX uses arize.otel + ARIZE_SPACE_ID + ARIZE_API_KEY. arize-phoenix is the full-platform bundle. For production deployments, the modular sub-packages (arize-phoenix-otel, arize-phoenix-client, arize-phoenix-evals) are preferred. LICENSE: Elastic License 2.0 (ELv2) — NOT MIT/Apache. Restrictions apply to providing Phoenix as a managed service to third parties.","status":"active","version":"13.3.0","language":"python","source_language":"en","source_url":"https://github.com/Arize-ai/phoenix","tags":["arize-phoenix","phoenix","tracing","observability","llm-monitoring","opentelemetry","openinference","evaluation","self-hosted","open-source","elv2"],"install":[{"cmd":"pip install arize-phoenix","lang":"bash","label":"Full platform (server + all APIs) — for local dev / self-hosting"},{"cmd":"pip install arize-phoenix-otel arize-phoenix-client arize-phoenix-evals","lang":"bash","label":"Modular install — preferred for production app code against a deployed Phoenix server"},{"cmd":"pip install 'arize-phoenix[evals]'","lang":"bash","label":"Full platform + evals extra"},{"cmd":"pip install 'arize-phoenix[pg]'","lang":"bash","label":"Full platform + PostgreSQL backend (instead of default SQLite)"}],"dependencies":[],"imports":[{"note":"Phoenix OTel registration. arize.otel.register sends to Arize AX. phoenix.otel.register sends to Phoenix. They look identical — wrong import sends traces to the wrong backend silently.","wrong":"from arize.otel import register","symbol":"register (phoenix.otel)","correct":"from phoenix.otel import register"},{"note":"Phoenix REST client. ArizeClient is for Arize AX. Different platforms, different credentials.","wrong":"from arize import ArizeClient","symbol":"Client (phoenix.client)","correct":"from phoenix.client import Client"},{"note":"Primary evaluation API. Requires arize-phoenix-evals installed separately (not included in arize-phoenix-otel).","symbol":"llm_classify (evals)","correct":"from phoenix.evals import llm_classify, OpenAIModel"}],"quickstart":{"code":"# === OPTION A: Local dev (run Phoenix server + instrument your app) ===\n\n# 1. Launch Phoenix server locally\nimport phoenix as px\npx.launch_app()  # Opens UI at http://localhost:6006\n\n# 2. Instrument with OTel\nfrom phoenix.otel import register\nfrom openinference.instrumentation.openai import OpenAIInstrumentor\n\ntracer_provider = register(\n    project_name='my-app',\n    # auto_instrument=True  # Only works if openinference-instrumentation-* pkgs are installed\n)\nOpenAIInstrumentor().instrument(tracer_provider=tracer_provider)\n\nimport openai\nclient = openai.OpenAI()\nresponse = client.chat.completions.create(\n    model='gpt-4o',\n    messages=[{'role': 'user', 'content': 'Hello!'}]\n)\n# Trace visible in Phoenix UI at http://localhost:6006\n\n# === OPTION B: Production (app code → deployed Phoenix server) ===\nimport os\nos.environ['PHOENIX_COLLECTOR_ENDPOINT'] = 'https://app.phoenix.arize.com/s/my-space'\nos.environ['PHOENIX_API_KEY'] = 'your-phoenix-api-key'\n\nfrom phoenix.otel import register\ntracer_provider = register(project_name='prod-app', batch=True)\nOpenAIInstrumentor().instrument(tracer_provider=tracer_provider)\n\n# === Phoenix Client (REST API) ===\nfrom phoenix.client import Client\nph = Client()  # reads PHOENIX_BASE_URL and PHOENIX_API_KEY from env\n\n# Query traces\nspans = ph.spans.query(project_name='my-app')\n\n# === Evaluations ===\nfrom phoenix.evals import llm_classify, OpenAIModel\nmodel = OpenAIModel(model='gpt-4o')\nresults = llm_classify(\n    dataframe=spans_df,\n    model=model,\n    template='hallucination',  # built-in template\n    rails=['factual', 'hallucinated']\n)","lang":"python","description":"For local dev, px.launch_app() starts the Phoenix server in-process. For production deployments, run Phoenix as a separate service (Docker/K8s) and use the modular sub-packages in your app code. Never mix Phoenix and Arize AX credentials."},"warnings":[{"fix":"Phoenix: from phoenix.otel import register + PHOENIX_API_KEY + PHOENIX_COLLECTOR_ENDPOINT. Arize AX: from arize.otel import register + ARIZE_API_KEY + ARIZE_SPACE_ID. Confirm which product you have an account for before writing any code.","message":"Phoenix (arize-phoenix) and Arize AX (arize) are two completely different products that share the Arize brand. They have different packages, different credentials, different endpoints, and different import paths. The most dangerous confusion: both have a register() function (phoenix.otel.register vs arize.otel.register) that look identical but export to completely different backends. Using the wrong one sends traces to the wrong service silently with no error.","severity":"breaking","affected_versions":"all"},{"fix":"Install the specific instrumentors you need: pip install openinference-instrumentation-openai openinference-instrumentation-anthropic openinference-instrumentation-langchain etc. Or install all at once: pip install openinference-instrumentation.","message":"auto_instrument=True in register() does NOT work out of the box. It only instruments providers for which you have separately installed the corresponding openinference-instrumentation-* package. For example, to auto-trace OpenAI calls, you must install openinference-instrumentation-openai separately. If the instrumentation package is absent, auto_instrument silently skips that provider.","severity":"breaking","affected_versions":"all"},{"fix":"For SaaS products where your customers would access Phoenix UI/APIs directly, consult Arize AI about a commercial license. For internal observability tooling, ELv2 permits free self-hosting.","message":"arize-phoenix is licensed under Elastic License 2.0 (ELv2), NOT MIT or Apache. ELv2 prohibits providing Phoenix as a managed service to third parties (i.e., you cannot resell or host Phoenix as a product feature that your own customers access directly). Internal use and self-hosting for your own team are fully permitted.","severity":"gotcha","affected_versions":"all"},{"fix":"In app service requirements.txt: pip install arize-phoenix-otel arize-phoenix-client. Reserve pip install arize-phoenix for the dedicated Phoenix server process.","message":"pip install arize-phoenix installs the full platform bundle including a FastAPI server, SQLite/PostgreSQL ORM, and a bundled React frontend — it's a heavy install (~100MB+). In production app code (your LLM service), you almost never want the full bundle. You only need arize-phoenix-otel (for tracing) and/or arize-phoenix-client (for querying).","severity":"gotcha","affected_versions":"all"},{"fix":"Always use equals sign: PHOENIX_CLIENT_HEADERS='Authorization=Bearer <token>'.","message":"PHOENIX_CLIENT_HEADERS uses equals-sign-separated key=value format (matching OTel conventions), not HTTP colon-separated format. PHOENIX_CLIENT_HEADERS='Authorization=Bearer token' is correct. Using 'Authorization: Bearer token' (colon) silently fails.","severity":"gotcha","affected_versions":"all"},{"fix":"If analytics collection is a concern for self-hosted deployments, review your version's telemetry settings. Trace data and LLM content are never collected by Phoenix's own telemetry.","message":"By default, arize-phoenix collects basic web analytics (page views, UI interactions) from the Phoenix UI. This applies to the hosted server only — not to trace data or LLM inputs/outputs. Self-hosted instances have this disabled by default as of recent versions.","severity":"gotcha","affected_versions":"all"},{"fix":"Ensure a C compiler and build tools are installed in your environment. For Debian/Ubuntu-based systems, add `RUN apt-get update && apt-get install -y build-essential` to your Dockerfile, or consider using a Python base image that includes these tools (e.g., `python:3.9` instead of `python:3.9-slim`).","message":"Installing `arize-phoenix` (and its dependencies like `sqlean-py`) requires a C compiler to build certain packages from source if pre-built wheels are not available for your specific Python version and platform. The installation will fail with 'command 'gcc' failed: No such file or directory'. This often occurs in minimal or 'slim' Docker images.","severity":"breaking","affected_versions":"all"},{"fix":"For Alpine Linux, install the necessary build tools before attempting `pip install`: `apk add build-base python3-dev`. For Debian/Ubuntu, use `apt-get install build-essential python3-dev`.","message":"Installing `arize-phoenix` (or its dependencies like `scikit-learn`) on minimal Linux distributions such as Alpine may fail due to missing build tools. Python packages with native extensions, like `scikit-learn`, require a C/C++ compiler and development headers to be present in the environment for successful installation.","severity":"breaking","affected_versions":"all"}],"env_vars":{"optional":[{"name":"PHOENIX_BASE_URL","note":"Base URL for the Phoenix Client (REST API). Defaults to http://localhost:6006 for local server."},{"name":"PHOENIX_PROJECT_NAME","note":"Default project name for grouping traces. Defaults to 'default'."},{"name":"PHOENIX_CLIENT_HEADERS","note":"Custom HTTP headers for client and OTEL. Format: 'key=value,key2=value2' (equals-separated, NOT colon-separated)."}],"required":[{"name":"PHOENIX_API_KEY","note":"API key for Phoenix cloud (app.phoenix.arize.com) or authenticated self-hosted instances. NOT the same as ARIZE_API_KEY (that's for Arize AX)."},{"name":"PHOENIX_COLLECTOR_ENDPOINT","note":"OTLP trace collector URL. Cloud: https://app.phoenix.arize.com/s/<your-space>. Local: http://localhost:6006/v1/traces (default when running locally)."}]},"last_verified":"2026-05-11T17:53:46.207Z","next_check":"2026-05-28T00:00:00.000Z","problems":[{"fix":"Ensure that you are importing the correct attribute from 'phoenix.version'. If 'version' is not available, check the module's documentation or source code for the correct attribute to import.","cause":"This error occurs when attempting to import 'version' from 'phoenix.version', but the 'version' attribute does not exist in that module.","error":"ImportError: cannot import name 'version' from 'phoenix.version'"},{"fix":"Install the 'arize' module using pip: 'pip install arize'.","cause":"This error indicates that the 'arize' module is not installed in your Python environment.","error":"ModuleNotFoundError: No module named 'arize'"},{"fix":"Install the 'phoenix' module using pip: 'pip install arize-phoenix'.","cause":"This error occurs when the 'phoenix' module is not installed or not found in your Python environment.","error":"ModuleNotFoundError: No module named 'phoenix'"}],"ecosystem":"pypi","meta_description":null,"install_score":85,"install_tag":"verified","quickstart_score":0,"quickstart_tag":"stale","pypi_latest":null,"install_checks":{"last_tested":"2026-05-11","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"evals","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"pg","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.45,"mem_mb":22.6,"disk_size":"315.4M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"evals","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.61,"mem_mb":156,"disk_size":"643M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"pg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.68,"mem_mb":156,"disk_size":"674M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":9.67,"mem_mb":156,"disk_size":"643M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.47,"mem_mb":20.7,"disk_size":"371M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"evals","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"pg","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.11,"mem_mb":24.8,"disk_size":"334.8M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"evals","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":14.88,"mem_mb":177,"disk_size":"681M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"pg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":14.9,"mem_mb":177,"disk_size":"713M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":14.95,"mem_mb":177,"disk_size":"681M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.25,"mem_mb":22.8,"disk_size":"390M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"evals","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"pg","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":3.73,"mem_mb":24,"disk_size":"317.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"evals","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":16.61,"mem_mb":173.7,"disk_size":"659M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"pg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":16.96,"mem_mb":173.7,"disk_size":"693M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":16.9,"mem_mb":173.7,"disk_size":"659M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.83,"mem_mb":22,"disk_size":"373M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"evals","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"pg","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2,"mem_mb":25.1,"disk_size":"313.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"evals","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":15.78,"mem_mb":174.1,"disk_size":"656M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"pg","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":15.63,"mem_mb":174.1,"disk_size":"690M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":15.86,"mem_mb":174.1,"disk_size":"656M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.73,"mem_mb":23,"disk_size":"371M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"evals","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"pg","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":2.26,"mem_mb":22.6,"disk_size":"323.7M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"evals","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"pg","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":1,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":null},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":1.63,"mem_mb":20.7,"disk_size":"384M"}]},"quickstart_checks":{"last_tested":"2026-05-11","tag":"stale","tag_description":"widespread failures or data too old to trust","results":[{"runtime":"python:3.10-alpine","exit_code":1},{"runtime":"python:3.10-slim","exit_code":-1},{"runtime":"python:3.11-alpine","exit_code":1},{"runtime":"python:3.11-slim","exit_code":-1},{"runtime":"python:3.12-alpine","exit_code":1},{"runtime":"python:3.12-slim","exit_code":-1},{"runtime":"python:3.13-alpine","exit_code":1},{"runtime":"python:3.13-slim","exit_code":-1},{"runtime":"python:3.9-alpine","exit_code":1},{"runtime":"python:3.9-slim","exit_code":1}]}}