pyproject.toml•7.12 kB
[project]
name = "arize-phoenix"
description = "AI Observability and Evaluation"
readme = "README.md"
requires-python = ">=3.9, <3.14"
license = {text="Elastic-2.0"}
license-files = { paths = ["LICENSE", "IP_NOTICE"] }
keywords = [
  "Observability",
  "Monitoring",
  "Explainability",
]
authors = [
  { name = "Arize AI", email = "phoenix-devs@arize.com" },
]
classifiers = [
  "Programming Language :: Python",
  "Programming Language :: Python :: 3.9",
  "Programming Language :: Python :: 3.10",
  "Programming Language :: Python :: 3.11",
  "Programming Language :: Python :: 3.12",
  "Programming Language :: Python :: 3.13",
]
dependencies = [
  "scikit-learn",
  "numpy!=2.0.0",  # https://github.com/lmcinnes/umap/issues/1138
  "pandas>=1.0",
  "jinja2",
  "starlette",
  "uvicorn",
  "psutil",
  "strawberry-graphql==0.270.1",
  "pyarrow",
  "typing-extensions>=4.6",
  "scipy",
  "wrapt>=1.17.2,<2",
  "protobuf>=4.25.8",
  "grpcio",
  "grpc-interceptor",
  "tqdm",
  "httpx",
  "opentelemetry-sdk",
  "opentelemetry-proto>=1.12.0",  # needed to avoid this issue: https://github.com/Arize-ai/phoenix/issues/2695
  "opentelemetry-exporter-otlp",
  "opentelemetry-semantic-conventions",
  "openinference-semantic-conventions>=0.1.20",
  "openinference-instrumentation>=0.1.32",
  "sqlalchemy[asyncio]>=2.0.4, <3",
  "alembic>=1.3.0, <2",
  "aiosqlite",
  "aioitertools",
  "sqlean.py>=3.45.1; platform_system != 'Windows'",
  "sqlean.py>=3.45.1,<3.50; platform_system == 'Windows'",  # https://github.com/nalgeon/sqlean.py/commit/2714a4789998811b7dd9f102f5b45ea071ed879e
  "cachetools",
  "python-multipart",  # see https://www.starlette.io/#dependencies
  "arize-phoenix-evals>=2.0.0",
  "arize-phoenix-otel>=0.10.3",
  "fastapi",
  "pydantic>=2.1.0", # exclude 2.0.* since it does not support the `json_encoders` configuration setting
  "authlib",
  "arize-phoenix-client>=1.20.0",
  "email-validator",
  "python-dateutil",
  "prometheus_client",
  "orjson",
  "jmespath",
]
dynamic = ["version"]
[project.scripts]
arize-phoenix = "phoenix.server.main:main"
phoenix = "phoenix.server.main:main"
[project.optional-dependencies]
dev = [
  "gcsfs",
  "hatch",
  "tox==4.18.1",
  "tox-uv==1.11.3",
  "uv==0.7.12",
  "jupyter",
  "nbqa",
  "ruff==0.6.9",
  "mypy==1.12.1",
  "pandas>=1.0",
  "tabulate",  # used by DataFrame.to_markdown()
  "types-tabulate",
  "pandas-stubs==2.2.2.240603",
  "pytest==8.3.3",
  "pytest-xdist",
  "pytest-asyncio",
  "pytest-cov",
  "pytest-postgresql",
  "asyncpg",
  "psycopg[binary,pool]",
  "strawberry-graphql[debug-server,opentelemetry]==0.270.1",
  "pre-commit",
  "arize[AutoEmbeddings, LLM_Evaluation]",
  "llama-index>=0.10.3",
  "langchain>=0.0.334",
  "litellm>=1.0.3,<1.57.5", # windows compatibility broken on 1.57.5 (https://github.com/BerriAI/litellm/issues/7677)
  "google-cloud-aiplatform>=1.3",
  "anthropic>=0.49.0",
  "asgi-lifespan",
  "Faker>=30.1.0",
  "portpicker",
  "uvloop; platform_system != 'Windows'",
  "grpc-interceptor[testing]",
  "types-jsonschema",
  "types-python-dateutil",
]
embeddings = [
  "fast-hdbscan>=0.2.0",
  "numba>=0.60.0",  # https://github.com/astral-sh/uv/issues/6281
  "umap-learn",
]
evals = []
experimental = []
pg = [
  "asyncpg",
  "psycopg[binary,pool]",
]
aws = [
  "boto3",
]
container = [
  "anthropic>=0.49.0",
  "google-genai",
  "prometheus-client",
  "openai>=1.0.0",
  "azure-identity",
  "aiohttp",  # used by azure-identity via azure.core.pipeline.transport
  # Note: when updating opentelemetry dependencies, all packages must use versions
  # released on the same date (e.g., 1.33.1/0.54b1) to ensure compatibility.
  "opentelemetry-sdk==1.33.1",
  "opentelemetry-proto==1.33.1",
  "opentelemetry-exporter-otlp==1.33.1",
  "opentelemetry-semantic-conventions==0.54b1",
  "opentelemetry-instrumentation-fastapi==0.54b1",  # https://github.com/open-telemetry/opentelemetry-python-contrib/issues/3637
  "opentelemetry-instrumentation-sqlalchemy==0.54b1",
  "opentelemetry-instrumentation-grpc==0.54b1",
  "py-grpc-prometheus",
  "strawberry-graphql[opentelemetry]==0.270.1",
  "uvloop; platform_system != 'Windows'",
  "fast-hdbscan>=0.2.0",
  "numba>=0.60.0",  # https://github.com/astral-sh/uv/issues/6281
  "umap-learn",
  "boto3",
]
test = [
]
[project.urls]
Documentation = "https://arize.com/docs/phoenix/"
Issues = "https://github.com/Arize-ai/phoenix/issues"
Source = "https://github.com/Arize-ai/phoenix"
[tool.hatch.version]
path = "src/phoenix/version.py"
[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"
[tool.hatch.build.targets.wheel]
packages = ["src/phoenix"]
exclude = [
  "src/phoenix/client/",
  "src/phoenix/evals/",
  "src/phoenix/otel/",
]
artifacts = [
  "src/phoenix/server/static",
  "src/phoenix/db/migrations",
  "src/phoenix/server/cost_tracking/model_cost_manifest.json",
]
[tool.hatch.build]
only-packages = true
[tool.hatch.build.targets.sdist]
exclude = [
  "packages/",
  "src/phoenix/client/",
  "src/phoenix/evals/",
  "src/phoenix/otel/",
  "tests/",
  "scripts/",
  "examples/",
  "js/",
]
artifacts = [
  "src/phoenix/server/static",
  "src/phoenix/db/migrations",
  "src/phoenix/server/cost_tracking/model_cost_manifest.json",
]
[tool.pytest.ini_options]
asyncio_mode = "auto"
asyncio_default_fixture_loop_scope="function"
addopts = [
  "-rA",
  "--import-mode=importlib",
  "--doctest-modules",
  "--new-first",
  "--showlocals",
]
testpaths = [
  "tests",
]
[tool.coverage.run]
branch = true
parallel = true
omit = [
  "**/__init__.py",
]
[tool.coverage.report]
fail_under=30
show_missing=true
sort="cover"
exclude_lines = [
  "no cov",
  "if __name__ == .__main__.:",
  "if TYPE_CHECKING:",
]
[tool.hatch.envs.publish]
dependencies = [
  "check-wheel-contents",
  "twine",
]
[tool.hatch.envs.publish.scripts]
testpypi = [
  "check-wheel-contents dist/",
  "twine upload  --verbose --repository testpypi dist/*",
]
pypi = [
  "check-wheel-contents dist/",
  "twine upload --verbose dist/*",
]
[tool.mypy]
plugins = ["strawberry.ext.mypy_plugin", "pydantic.mypy"]
strict = true
exclude = [
  "api_reference",
  "dist/",
  "examples/",
  "packages/",
  "scripts/",
  "sdist/",
  "src/phoenix/client/",
  "src/phoenix/evals/",
  "src/phoenix/otel/",
  "tutorials/",
  "js/",
]
[[tool.mypy.overrides]]
module = [
  "fast_hdbscan",
  "umap",
  "numba.*",
  "scipy.*",
  "sklearn.*",
  "arize.*",
  "wrapt",
  "langchain.*",
  "litellm",
  "litellm.*",
  "nest_asyncio",
  "opentelemetry.*",
  "pyarrow",
  "sqlean",
  "grpc.*",
  "py_grpc_prometheus.*",
  "orjson",  # suppress fastapi internal type errors
  "pypistats",
  "authlib.*",
  "google.*",
  "mistralai.*",
]
ignore_missing_imports = true
[tool.ruff]
exclude = [
  "api_reference",
  "dist/",
  ".git",
  "__pycache__",
  "*_pb2.py*",
  "*.pyi",
  "docs/",
]
line-length = 100
target-version = "py39"
[tool.ruff.lint.per-file-ignores]
"*.ipynb" = ["E402", "E501"]
"examples/**/*.py" = ["E501"]
"tests/**/*.py" = ["E501"]
[tool.ruff.lint]
select = ["E", "F", "W", "I", "NPY201"]
[tool.ruff.lint.isort]
force-single-line = false
[tool.ruff.format]
line-ending = "native"