Skip to main content
Glama

@arizeai/phoenix-mcp

Official
by Arize-ai
python-CI.yml19.4 kB
name: Python CI permissions: contents: read on: push: branches: - main - feat/version-12 pull_request: paths: - "**/*.py" - "**/*.ipynb" - "src/**" - "tests/**" - "tutorials/**" - "pyproject.toml" - "packages/**" - "tox.ini" # Allows you to run this workflow manually from the Actions tab workflow_dispatch: concurrency: group: test-python-${{ github.head_ref }} cancel-in-progress: true env: pip-version: 24.2 OPENAI_API_KEY: "sk-fake-openai-key" # fake openai key so that llama_index doesn't download huggingface embeddings jobs: changes: name: Filter Changes runs-on: ubuntu-latest outputs: ipynb: ${{ steps.filter.outputs.ipynb }} ipynb_files: ${{ steps.filter.outputs.ipynb_files }} proto: ${{ steps.filter.outputs.proto }} phoenix: ${{ steps.filter.outputs.phoenix }} phoenix_client: ${{ steps.filter.outputs.phoenix_client }} phoenix_evals: ${{ steps.filter.outputs.phoenix_evals }} phoenix_otel: ${{ steps.filter.outputs.phoenix_otel }} migrations: ${{ steps.filter.outputs.migrations }} steps: - uses: actions/checkout@v4 - uses: dorny/paths-filter@v3 id: filter with: list-files: shell filters: | ipynb: - "**/*.ipynb" proto: - "src/phoenix/proto/**" - "src/phoenix/trace/v1/**" phoenix: - "src/**" - "tests/**" - "tutorials/**" - "pyproject.toml" - "tox.ini" phoenix_client: - "packages/phoenix-client/**" - "tox.ini" phoenix_evals: - "packages/phoenix-evals/**" - "tox.ini" phoenix_otel: - "packages/phoenix-otel/**" - "tox.ini" migrations: - "src/phoenix/db/migrations/versions/**" - name: Print Filters run: | echo "ipynb: ${{ steps.filter.outputs.ipynb }}" echo "ipynb_files: ${{ steps.filter.outputs.ipynb_files }}" echo "proto: ${{ steps.filter.outputs.proto }}" echo "phoenix: ${{ steps.filter.outputs.phoenix }}" echo "phoenix_client: ${{ steps.filter.outputs.phoenix_client }}" echo "phoenix_evals: ${{ steps.filter.outputs.phoenix_evals }}" echo "phoenix_otel: ${{ steps.filter.outputs.phoenix_otel }}" echo "migrations: ${{ steps.filter.outputs.migrations }}" phoenix-client: name: Phoenix Client runs-on: ${{ matrix.os }} needs: changes if: ${{ needs.changes.outputs.phoenix_client == 'true' }} strategy: matrix: py: [3.9, 3.12] os: [ubuntu-latest, windows-latest, macos-13] steps: - uses: actions/checkout@v4 with: sparse-checkout: | requirements/ packages/phoenix-client/ - uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - uses: astral-sh/setup-uv@v6 with: version: 0.8.6 - run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e phoenix_client -- -ra -x phoenix-evals: name: Phoenix Evals runs-on: ${{ matrix.os }} needs: changes if: ${{ needs.changes.outputs.phoenix_evals == 'true' }} strategy: fail-fast: false matrix: py: [3.9, 3.12] os: [ubuntu-latest, windows-latest, macos-13] steps: - uses: actions/checkout@v4 with: sparse-checkout: | requirements/ packages/phoenix-evals/ - uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - uses: astral-sh/setup-uv@v6 with: version: 0.8.6 - run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e phoenix_evals -- -ra -x phoenix-otel: name: Phoenix OTel runs-on: ${{ matrix.os }} needs: changes if: ${{ needs.changes.outputs.phoenix_otel == 'true' }} strategy: matrix: py: [3.9, 3.12] os: [ubuntu-latest, windows-latest, macos-13] steps: - uses: actions/checkout@v4 with: sparse-checkout: | requirements/ packages/phoenix-otel/ - uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - uses: astral-sh/setup-uv@v6 with: version: 0.8.6 - run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e phoenix_otel -- -ra -x clean-jupyter-notebooks: name: Clean Jupyter Notebooks needs: changes if: ${{ needs.changes.outputs.ipynb == 'true' }} strategy: matrix: py: [3.13] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml requirements/clean-jupyter-notebooks.txt github-token: ${{ secrets.GITHUB_TOKEN }} - name: Clean Jupyter notebooks run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e clean_jupyter_notebooks -- ${{ needs.changes.outputs.ipynb_files }} - run: git diff --exit-code build-graphql-schema: name: Build GraphQL Schema needs: changes if: ${{ needs.changes.outputs.phoenix == 'true' }} strategy: matrix: py: [3.9] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml requirements/build-graphql-schema.txt github-token: ${{ secrets.GITHUB_TOKEN }} - name: Build GraphQL schema run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e build_graphql_schema - run: git diff --exit-code build-openapi-schema: name: Build OpenAPI Schema needs: changes if: ${{ needs.changes.outputs.phoenix == 'true' }} strategy: matrix: py: [3.9] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml github-token: ${{ secrets.GITHUB_TOKEN }} - name: Build OpenAPI schema run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e build_openapi_schema - run: git diff --exit-code compile-protobuf: name: Compile Protobuf needs: changes if: ${{ needs.changes.outputs.proto == 'true' }} strategy: matrix: py: [3.9] os: [ubuntu-latest] runs-on: ${{ matrix.os }} steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml requirements/compile-protobuf.txt github-token: ${{ secrets.GITHUB_TOKEN }} - name: Compile Protobuf run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e compile_protobuf - run: git diff --exit-code ruff: name: Ruff runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: py: [3.13] os: [ubuntu-latest] steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 - name: Run `ruff` run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e ruff - run: git diff --exit-code type-check: name: Type Check runs-on: ${{ matrix.os }} needs: changes if: ${{ needs.changes.outputs.phoenix == 'true' }} strategy: fail-fast: false matrix: py: [3.9, 3.13] os: [ubuntu-latest] steps: - name: Checkout repository uses: actions/checkout@v4 with: sparse-checkout: | scripts/ci/ requirements/ src/phoenix/ packages/phoenix-client/ - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml requirements/ci.txt requirements/type-check.txt github-token: ${{ secrets.GITHUB_TOKEN }} - name: Check types run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e type_check - name: Ensure GraphQL mutations have permission classes run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e ensure_graphql_mutations_have_permission_classes type-check-unit-tests: name: Type Check Unit Tests runs-on: ${{ matrix.os }} needs: changes if: ${{ needs.changes.outputs.phoenix == 'true' }} strategy: fail-fast: false matrix: py: [3.9, 3.13] os: [ubuntu-latest] steps: - name: Checkout repository uses: actions/checkout@v4 with: sparse-checkout: | requirements/ src/phoenix/ tests/unit/ tests/conftest.py tests/mypy.ini tests/__generated__/ tests/__init__.py - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml requirements/ci.txt requirements/unit-tests.txt github-token: ${{ secrets.GITHUB_TOKEN }} - name: Check types on unit tests run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e type_check_unit_tests unit-tests: name: Unit Tests runs-on: ${{ matrix.os }} needs: changes if: ${{ needs.changes.outputs.phoenix == 'true' }} strategy: fail-fast: false matrix: py: [3.9, 3.13] os: [ubuntu-latest, windows-latest, macos-latest, macos-13] exclude: - py: 3.13 os: macos-13 steps: - name: Checkout repository uses: actions/checkout@v4 with: sparse-checkout: | requirements/ src/phoenix/ tests/unit/ tests/conftest.py tests/__generated__/ tests/__init__.py - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml requirements/ci.txt requirements/unit-tests.txt github-token: ${{ secrets.GITHUB_TOKEN }} - name: Install PostgreSQL (Linux) if: runner.os == 'Linux' run: sudo apt-get -yqq install postgresql - name: Run tests with PostgreSQL (Linux) if: runner.os == 'Linux' run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e unit_tests -- -ra -x --reruns 5 --run-postgres - name: Run tests without PostgreSQL (non-Linux) if: runner.os != 'Linux' run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e unit_tests -- -ra -x --reruns 5 type-check-integration-tests: name: Type Check Integration Tests runs-on: ${{ matrix.os }} needs: changes if: ${{ needs.changes.outputs.phoenix == 'true' || needs.changes.outputs.phoenix_client == 'true' }} strategy: fail-fast: false matrix: py: [3.9, 3.13] os: [ubuntu-latest] steps: - name: Checkout repository uses: actions/checkout@v4 with: sparse-checkout: | requirements/ src/phoenix/ packages/phoenix-client/ tests/integration/ tests/__generated__/ tests/__init__.py - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml requirements/ci.txt requirements/integration-tests.txt github-token: ${{ secrets.GITHUB_TOKEN }} - name: Check types on integration tests run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e type_check_integration_tests integration-tests: name: Integration Tests runs-on: ${{ matrix.os }} needs: changes if: ${{ needs.changes.outputs.phoenix == 'true' || needs.changes.outputs.phoenix_client == 'true' }} strategy: fail-fast: false matrix: py: [3.9, 3.13] db: [sqlite, postgresql] os: [ubuntu-latest, windows-latest] exclude: - db: postgresql os: windows-latest env: CI_TEST_DB_BACKEND: ${{ matrix.db }} services: postgres: # Applying this workaround: https://github.com/actions/runner/issues/822 image: ${{ (matrix.db == 'postgresql') && 'postgres:12' || '' }} env: POSTGRES_PASSWORD: phoenix options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 steps: - name: Checkout repository uses: actions/checkout@v4 with: sparse-checkout: | requirements/ src/phoenix/ packages/phoenix-client/ tests/integration/ tests/__generated__/ tests/__init__.py - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml requirements/ci.txt requirements/integration-tests.txt github-token: ${{ secrets.GITHUB_TOKEN }} - name: Run integration tests timeout-minutes: 20 run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e integration_tests -- -ra -x --reruns 5 -n auto test-migrations: name: DB Migration Continuity (${{ matrix.db }}) runs-on: ubuntu-latest needs: changes if: ${{ needs.changes.outputs.migrations == 'true' }} strategy: fail-fast: false matrix: db: [sqlite, postgresql] services: postgres: # Applying this workaround: https://github.com/actions/runner/issues/822 image: ${{ (matrix.db == 'postgresql') && 'postgres:12' || '' }} env: POSTGRES_PASSWORD: phoenix options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 ports: - 5432:5432 steps: - name: Set up Python 3.13 uses: actions/setup-python@v5 with: python-version: 3.13 - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 - name: Install arize-phoenix and database dependencies run: | uv pip install --system -qU 'arize-phoenix[pg]' PHOENIX_PATH=$(python -c "import phoenix.db; print(phoenix.db.__path__[0])") echo "PHOENIX_PATH=$PHOENIX_PATH" >> $GITHUB_ENV - name: Set database environment variable run: | if [ "${{ matrix.db }}" = "postgresql" ]; then echo "PHOENIX_SQL_DATABASE_URL=postgresql://postgres:phoenix@localhost:5432/postgres" >> $GITHUB_ENV else echo "PHOENIX_SQL_DATABASE_URL=sqlite:///phoenix_test.db" >> $GITHUB_ENV fi - name: Run migrations on installed Phoenix working-directory: ${{ env.PHOENIX_PATH }} run: | alembic history alembic upgrade head alembic current - name: Checkout repository uses: actions/checkout@v4 with: sparse-checkout: src/phoenix/ - name: Install Phoenix from current branch run: | uv pip install --system --reinstall-package arize-phoenix . - name: Test new migrations working-directory: ${{ env.PHOENIX_PATH }} run: | alembic history alembic upgrade head alembic current - name: Test down migrations working-directory: ${{ env.PHOENIX_PATH }} run: | alembic downgrade base alembic current phoenix-client-canary-tests-sdk: name: Phoenix Client Canary Tests for Third-Party SDKs runs-on: ubuntu-latest needs: changes if: ${{ needs.changes.outputs.phoenix_client == 'true' }} strategy: fail-fast: false matrix: py: [3.9] pkg: [openai, google_generativeai] # NOTE: bypass Anthropic check while types are changing steps: - name: Checkout repository uses: actions/checkout@v4 with: sparse-checkout: | requirements/ packages/phoenix-client/ - name: Set up Python ${{ matrix.py }} uses: actions/setup-python@v5 with: python-version: ${{ matrix.py }} - name: Set up `uv` uses: astral-sh/setup-uv@v6 with: version: 0.8.6 enable-cache: true cache-dependency-glob: | pyproject.toml requirements/ci.txt requirements/canary/sdk/${{ matrix.pkg }}.txt github-token: ${{ secrets.GITHUB_TOKEN }} - name: Run canary tests for ${{ matrix.pkg }} run: uvx --with tox-uv==1.27.0 --with uv==0.8.6 tox run -e phoenix_client_canary_tests_sdk_${{ matrix.pkg }} -- -ra -x

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Arize-ai/phoenix'

If you have feedback or need assistance with the MCP directory API, please join our Discord server