diff --git a/.github/workflows/lint_0.yml b/.github/workflows/lint_0.yml index 309705ae5..e180282e4 100644 --- a/.github/workflows/lint_0.yml +++ b/.github/workflows/lint_0.yml @@ -51,6 +51,25 @@ jobs: - name: Run tests run: tox -e lint-instrumentation-openai-v2 + lint-instrumentation-openai_agents-v2: + name: instrumentation-openai_agents-v2 + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e lint-instrumentation-openai_agents-v2 + lint-instrumentation-vertexai: name: instrumentation-vertexai runs-on: ubuntu-latest diff --git a/.github/workflows/test_0.yml b/.github/workflows/test_0.yml index 68694460b..1004b4e5b 100644 --- a/.github/workflows/test_0.yml +++ b/.github/workflows/test_0.yml @@ -260,6 +260,158 @@ jobs: - name: Run tests run: tox -e pypy3-test-instrumentation-openai-v2-latest -- -ra + py310-test-instrumentation-openai_agents-v2-oldest_ubuntu-latest: + name: instrumentation-openai_agents-v2-oldest 3.10 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py310-test-instrumentation-openai_agents-v2-oldest -- -ra + + py310-test-instrumentation-openai_agents-v2-latest_ubuntu-latest: + name: instrumentation-openai_agents-v2-latest 3.10 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py310-test-instrumentation-openai_agents-v2-latest -- -ra + + py311-test-instrumentation-openai_agents-v2-oldest_ubuntu-latest: + name: instrumentation-openai_agents-v2-oldest 3.11 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py311-test-instrumentation-openai_agents-v2-oldest -- -ra + + py311-test-instrumentation-openai_agents-v2-latest_ubuntu-latest: + name: instrumentation-openai_agents-v2-latest 3.11 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py311-test-instrumentation-openai_agents-v2-latest -- -ra + + py312-test-instrumentation-openai_agents-v2-oldest_ubuntu-latest: + name: instrumentation-openai_agents-v2-oldest 3.12 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py312-test-instrumentation-openai_agents-v2-oldest -- -ra + + py312-test-instrumentation-openai_agents-v2-latest_ubuntu-latest: + name: instrumentation-openai_agents-v2-latest 3.12 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py312-test-instrumentation-openai_agents-v2-latest -- -ra + + py313-test-instrumentation-openai_agents-v2-oldest_ubuntu-latest: + name: instrumentation-openai_agents-v2-oldest 3.13 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py313-test-instrumentation-openai_agents-v2-oldest -- -ra + + py313-test-instrumentation-openai_agents-v2-latest_ubuntu-latest: + name: instrumentation-openai_agents-v2-latest 3.13 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py313-test-instrumentation-openai_agents-v2-latest -- -ra + py39-test-instrumentation-vertexai-oldest_ubuntu-latest: name: instrumentation-vertexai-oldest 3.9 Ubuntu runs-on: ubuntu-latest @@ -4629,155 +4781,3 @@ jobs: - name: Run tests run: tox -e py313-test-instrumentation-starlette-latest -- -ra - - pypy3-test-instrumentation-starlette-oldest_ubuntu-latest: - name: instrumentation-starlette-oldest pypy-3.9 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python pypy-3.9 - uses: actions/setup-python@v5 - with: - python-version: "pypy-3.9" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e pypy3-test-instrumentation-starlette-oldest -- -ra - - pypy3-test-instrumentation-starlette-latest_ubuntu-latest: - name: instrumentation-starlette-latest pypy-3.9 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python pypy-3.9 - uses: actions/setup-python@v5 - with: - python-version: "pypy-3.9" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e pypy3-test-instrumentation-starlette-latest -- -ra - - py39-test-instrumentation-jinja2_ubuntu-latest: - name: instrumentation-jinja2 3.9 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.9 - uses: actions/setup-python@v5 - with: - python-version: "3.9" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py39-test-instrumentation-jinja2 -- -ra - - py310-test-instrumentation-jinja2_ubuntu-latest: - name: instrumentation-jinja2 3.10 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.10 - uses: actions/setup-python@v5 - with: - python-version: "3.10" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py310-test-instrumentation-jinja2 -- -ra - - py311-test-instrumentation-jinja2_ubuntu-latest: - name: instrumentation-jinja2 3.11 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.11 - uses: actions/setup-python@v5 - with: - python-version: "3.11" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py311-test-instrumentation-jinja2 -- -ra - - py312-test-instrumentation-jinja2_ubuntu-latest: - name: instrumentation-jinja2 3.12 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py312-test-instrumentation-jinja2 -- -ra - - py313-test-instrumentation-jinja2_ubuntu-latest: - name: instrumentation-jinja2 3.13 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.13 - uses: actions/setup-python@v5 - with: - python-version: "3.13" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py313-test-instrumentation-jinja2 -- -ra - - pypy3-test-instrumentation-jinja2_ubuntu-latest: - name: instrumentation-jinja2 pypy-3.9 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python pypy-3.9 - uses: actions/setup-python@v5 - with: - python-version: "pypy-3.9" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e pypy3-test-instrumentation-jinja2 -- -ra diff --git a/.github/workflows/test_1.yml b/.github/workflows/test_1.yml index e60b3c530..8f484d6c0 100644 --- a/.github/workflows/test_1.yml +++ b/.github/workflows/test_1.yml @@ -32,6 +32,158 @@ env: jobs: + pypy3-test-instrumentation-starlette-oldest_ubuntu-latest: + name: instrumentation-starlette-oldest pypy-3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python pypy-3.9 + uses: actions/setup-python@v5 + with: + python-version: "pypy-3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e pypy3-test-instrumentation-starlette-oldest -- -ra + + pypy3-test-instrumentation-starlette-latest_ubuntu-latest: + name: instrumentation-starlette-latest pypy-3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python pypy-3.9 + uses: actions/setup-python@v5 + with: + python-version: "pypy-3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e pypy3-test-instrumentation-starlette-latest -- -ra + + py39-test-instrumentation-jinja2_ubuntu-latest: + name: instrumentation-jinja2 3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.9 + uses: actions/setup-python@v5 + with: + python-version: "3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py39-test-instrumentation-jinja2 -- -ra + + py310-test-instrumentation-jinja2_ubuntu-latest: + name: instrumentation-jinja2 3.10 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py310-test-instrumentation-jinja2 -- -ra + + py311-test-instrumentation-jinja2_ubuntu-latest: + name: instrumentation-jinja2 3.11 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.11 + uses: actions/setup-python@v5 + with: + python-version: "3.11" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py311-test-instrumentation-jinja2 -- -ra + + py312-test-instrumentation-jinja2_ubuntu-latest: + name: instrumentation-jinja2 3.12 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py312-test-instrumentation-jinja2 -- -ra + + py313-test-instrumentation-jinja2_ubuntu-latest: + name: instrumentation-jinja2 3.13 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py313-test-instrumentation-jinja2 -- -ra + + pypy3-test-instrumentation-jinja2_ubuntu-latest: + name: instrumentation-jinja2 pypy-3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python pypy-3.9 + uses: actions/setup-python@v5 + with: + python-version: "pypy-3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e pypy3-test-instrumentation-jinja2 -- -ra + py39-test-instrumentation-logging_ubuntu-latest: name: instrumentation-logging 3.9 Ubuntu runs-on: ubuntu-latest @@ -4629,155 +4781,3 @@ jobs: - name: Run tests run: tox -e py311-test-instrumentation-sio-pika-1 -- -ra - - py312-test-instrumentation-sio-pika-0_ubuntu-latest: - name: instrumentation-sio-pika-0 3.12 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py312-test-instrumentation-sio-pika-0 -- -ra - - py312-test-instrumentation-sio-pika-1_ubuntu-latest: - name: instrumentation-sio-pika-1 3.12 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.12 - uses: actions/setup-python@v5 - with: - python-version: "3.12" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py312-test-instrumentation-sio-pika-1 -- -ra - - py313-test-instrumentation-sio-pika-0_ubuntu-latest: - name: instrumentation-sio-pika-0 3.13 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.13 - uses: actions/setup-python@v5 - with: - python-version: "3.13" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py313-test-instrumentation-sio-pika-0 -- -ra - - py313-test-instrumentation-sio-pika-1_ubuntu-latest: - name: instrumentation-sio-pika-1 3.13 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.13 - uses: actions/setup-python@v5 - with: - python-version: "3.13" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py313-test-instrumentation-sio-pika-1 -- -ra - - pypy3-test-instrumentation-sio-pika-0_ubuntu-latest: - name: instrumentation-sio-pika-0 pypy-3.9 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python pypy-3.9 - uses: actions/setup-python@v5 - with: - python-version: "pypy-3.9" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e pypy3-test-instrumentation-sio-pika-0 -- -ra - - pypy3-test-instrumentation-sio-pika-1_ubuntu-latest: - name: instrumentation-sio-pika-1 pypy-3.9 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python pypy-3.9 - uses: actions/setup-python@v5 - with: - python-version: "pypy-3.9" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e pypy3-test-instrumentation-sio-pika-1 -- -ra - - py39-test-instrumentation-aio-pika-0_ubuntu-latest: - name: instrumentation-aio-pika-0 3.9 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.9 - uses: actions/setup-python@v5 - with: - python-version: "3.9" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py39-test-instrumentation-aio-pika-0 -- -ra - - py39-test-instrumentation-aio-pika-1_ubuntu-latest: - name: instrumentation-aio-pika-1 3.9 Ubuntu - runs-on: ubuntu-latest - timeout-minutes: 30 - steps: - - name: Checkout repo @ SHA - ${{ github.sha }} - uses: actions/checkout@v4 - - - name: Set up Python 3.9 - uses: actions/setup-python@v5 - with: - python-version: "3.9" - - - name: Install tox - run: pip install tox-uv - - - name: Run tests - run: tox -e py39-test-instrumentation-aio-pika-1 -- -ra diff --git a/.github/workflows/test_2.yml b/.github/workflows/test_2.yml index 8a385e54f..e9fe4edf1 100644 --- a/.github/workflows/test_2.yml +++ b/.github/workflows/test_2.yml @@ -32,6 +32,158 @@ env: jobs: + py312-test-instrumentation-sio-pika-0_ubuntu-latest: + name: instrumentation-sio-pika-0 3.12 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py312-test-instrumentation-sio-pika-0 -- -ra + + py312-test-instrumentation-sio-pika-1_ubuntu-latest: + name: instrumentation-sio-pika-1 3.12 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.12 + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py312-test-instrumentation-sio-pika-1 -- -ra + + py313-test-instrumentation-sio-pika-0_ubuntu-latest: + name: instrumentation-sio-pika-0 3.13 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py313-test-instrumentation-sio-pika-0 -- -ra + + py313-test-instrumentation-sio-pika-1_ubuntu-latest: + name: instrumentation-sio-pika-1 3.13 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.13 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py313-test-instrumentation-sio-pika-1 -- -ra + + pypy3-test-instrumentation-sio-pika-0_ubuntu-latest: + name: instrumentation-sio-pika-0 pypy-3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python pypy-3.9 + uses: actions/setup-python@v5 + with: + python-version: "pypy-3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e pypy3-test-instrumentation-sio-pika-0 -- -ra + + pypy3-test-instrumentation-sio-pika-1_ubuntu-latest: + name: instrumentation-sio-pika-1 pypy-3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python pypy-3.9 + uses: actions/setup-python@v5 + with: + python-version: "pypy-3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e pypy3-test-instrumentation-sio-pika-1 -- -ra + + py39-test-instrumentation-aio-pika-0_ubuntu-latest: + name: instrumentation-aio-pika-0 3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.9 + uses: actions/setup-python@v5 + with: + python-version: "3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py39-test-instrumentation-aio-pika-0 -- -ra + + py39-test-instrumentation-aio-pika-1_ubuntu-latest: + name: instrumentation-aio-pika-1 3.9 Ubuntu + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: Checkout repo @ SHA - ${{ github.sha }} + uses: actions/checkout@v4 + + - name: Set up Python 3.9 + uses: actions/setup-python@v5 + with: + python-version: "3.9" + + - name: Install tox + run: pip install tox-uv + + - name: Run tests + run: tox -e py39-test-instrumentation-aio-pika-1 -- -ra + py39-test-instrumentation-aio-pika-2_ubuntu-latest: name: instrumentation-aio-pika-2 3.9 Ubuntu runs-on: ubuntu-latest diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/CHANGELOG.md b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/CHANGELOG.md index e91401df1..95f69d6de 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/CHANGELOG.md +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/CHANGELOG.md @@ -6,6 +6,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased +- Document official package metadata and README for the OpenAI Agents instrumentation. + ([#3859](https://github.com/open-telemetry/opentelemetry-python-contrib/pull/3859)) ## Version 0.1.0 (2025-10-15) diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/README.rst b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/README.rst new file mode 100644 index 000000000..2f7c81ee6 --- /dev/null +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/README.rst @@ -0,0 +1,109 @@ +OpenTelemetry OpenAI Agents Instrumentation +=========================================== + +|pypi| + +.. |pypi| image:: https://badge.fury.io/py/opentelemetry-instrumentation-openai-agents-v2.svg + :target: https://pypi.org/project/opentelemetry-instrumentation-openai-agents-v2/ + +This library provides the official OpenTelemetry instrumentation for the +`openai-agents SDK `_. It converts +the rich trace data emitted by the Agents runtime +into the GenAI semantic conventions, enriches spans with request/response payload +metadata, and records duration/token usage metrics. + +Features +-------- + +* Generates spans for agents, tools, generations, guardrails, and handoffs using + the OpenTelemetry GenAI semantic conventions. +* Captures prompts, responses, tool arguments, and system instructions when content + capture is enabled. +* Publishes duration and token metrics for every operation. +* Supports environment overrides so you can configure agent metadata or disable + telemetry without code changes. + +Installation +------------ + +If your application is already configured with OpenTelemetry, install the package +and its optional instruments: + +.. code-block:: console + + pip install opentelemetry-instrumentation-openai-agents-v2 + pip install openai-agents + +Usage +----- + +Instrumentation automatically wires the Agents tracing processor into the SDK. +Configure OpenTelemetry as usual, then call :class:`OpenAIAgentsInstrumentor`. + +.. code-block:: python + + from agents import Agent, Runner, function_tool + from opentelemetry import trace + from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter + from opentelemetry.instrumentation.openai_agents import OpenAIAgentsInstrumentor + from opentelemetry.sdk.trace import TracerProvider + from opentelemetry.sdk.trace.export import BatchSpanProcessor + + + def configure_otel() -> None: + provider = TracerProvider() + provider.add_span_processor(BatchSpanProcessor(OTLPSpanExporter())) + trace.set_tracer_provider(provider) + + OpenAIAgentsInstrumentor().instrument(tracer_provider=provider) + + + @function_tool + def get_weather(city: str) -> str: + return f"The forecast for {city} is sunny with pleasant temperatures." + + + assistant = Agent( + name="Travel Concierge", + instructions="You are a concise travel concierge.", + tools=[get_weather], + ) + + result = Runner.run_sync(assistant, "I'm visiting Barcelona this weekend. How should I pack?") + print(result.final_output) + +Configuration +------------- + +The instrumentor exposes runtime toggles through keyword arguments and environment +variables: + +* ``OTEL_INSTRUMENTATION_GENAI_CAPTURE_MESSAGE_CONTENT`` or + ``OTEL_INSTRUMENTATION_OPENAI_AGENTS_CAPTURE_CONTENT`` – controls how much + message content is captured. Valid values map to + :class:`opentelemetry.instrumentation.openai_agents.ContentCaptureMode` + (``span_only``, ``event_only``, ``span_and_event``, ``no_content``). +* ``OTEL_INSTRUMENTATION_OPENAI_AGENTS_CAPTURE_METRICS`` – set to ``false`` to + disable duration/token metrics. +* ``OTEL_INSTRUMENTATION_OPENAI_AGENTS_SYSTEM`` – overrides the ``gen_ai.system`` + attribute when your deployment is not the default OpenAI platform. + +You can also override agent metadata directly when calling +``OpenAIAgentsInstrumentor().instrument(...)`` using ``agent_name``, ``agent_id``, +``agent_description``, ``base_url``, ``server_address``, and ``server_port``. + +Examples +-------- + +The :mod:`examples` directory contains runnable scenarios, including: + +* ``examples/manual`` – manual OpenTelemetry configuration for a single agent run. +* ``examples/content-capture`` – demonstrates span and event content capture. +* ``examples/zero-code`` – end-to-end setup using environment configuration only. + +References +---------- + +* `OpenTelemetry Python Contrib `_ +* `OpenTelemetry GenAI semantic conventions `_ +* `OpenAI Agents SDK `_ diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/pyproject.toml b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/pyproject.toml index 6d692a4c6..13dc28632 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/pyproject.toml +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/pyproject.toml @@ -5,14 +5,15 @@ build-backend = "hatchling.build" [project] name = "opentelemetry-instrumentation-openai-agents-v2" dynamic = ["version"] -description = "OpenTelemetry OpenAI Agents instrumentation (barebones)" +description = "OpenTelemetry Official OpenAI Agents instrumentation" +readme = "README.rst" license = "Apache-2.0" requires-python = ">=3.9" authors = [ { name = "OpenTelemetry Authors", email = "cncf-opentelemetry-contributors@lists.cncf.io" }, ] classifiers = [ - "Development Status :: 3 - Alpha", + "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python", diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents/__init__.py b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents/__init__.py index 16e19238c..339ccc5ba 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents/__init__.py +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents/__init__.py @@ -1,5 +1,7 @@ """OpenAI Agents instrumentation for OpenTelemetry.""" +# pylint: disable=too-many-locals + from __future__ import annotations import importlib diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents/span_processor.py b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents/span_processor.py index 68e5dc1f0..d1dce8ec5 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents/span_processor.py +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/src/opentelemetry/instrumentation/openai_agents/span_processor.py @@ -12,6 +12,8 @@ References: - OpenInference Pattern: https://github.com/Arize-ai/openinference """ +# pylint: disable=too-many-lines,invalid-name,too-many-locals,too-many-branches,too-many-statements,too-many-return-statements,too-many-nested-blocks,too-many-arguments,too-many-instance-attributes,broad-exception-caught,no-self-use,consider-iterating-dictionary,unused-variable,unnecessary-pass + from __future__ import annotations import importlib @@ -247,9 +249,9 @@ def normalize_provider(provider: Optional[str]) -> Optional[str]: """Normalize provider name to spec-compliant value.""" if not provider: return None - p = provider.strip().lower() - if p in GenAIProvider.ALL: - return p + normalized = provider.strip().lower() + if normalized in GenAIProvider.ALL: + return normalized return provider # passthrough if unknown (forward compat) @@ -257,15 +259,19 @@ def validate_tool_type(tool_type: Optional[str]) -> str: """Validate and normalize tool type.""" if not tool_type: return GenAIToolType.FUNCTION # default - t = tool_type.strip().lower() - return t if t in GenAIToolType.ALL else GenAIToolType.FUNCTION + normalized = tool_type.strip().lower() + return ( + normalized + if normalized in GenAIToolType.ALL + else GenAIToolType.FUNCTION + ) def normalize_output_type(output_type: Optional[str]) -> str: """Normalize output type to spec-compliant value.""" if not output_type: return GenAIOutputType.TEXT # default - o = output_type.strip().lower() + normalized = output_type.strip().lower() base_map = { "json_object": GenAIOutputType.JSON, "jsonschema": GenAIOutputType.JSON, @@ -276,19 +282,16 @@ def normalize_output_type(output_type: Optional[str]) -> str: "tool_call": GenAIOutputType.JSON, "transcription_json": GenAIOutputType.JSON, } - if o in base_map: - return base_map[o] - if o in { + if normalized in base_map: + return base_map[normalized] + if normalized in { GenAIOutputType.TEXT, GenAIOutputType.JSON, GenAIOutputType.IMAGE, GenAIOutputType.SPEECH, }: - return o + return normalized return GenAIOutputType.TEXT # default for unknown - (normalize_output_type,) - (normalize_provider,) - (validate_tool_type,) if TYPE_CHECKING: @@ -1515,7 +1518,7 @@ class GenAISemanticProcessor(TracingProcessor): if isinstance(first_input, dict) and "role" in first_input: return GenAIOperationName.CHAT return GenAIOperationName.TEXT_COMPLETION - elif _is_instance_of(span_data, AgentSpanData): + if _is_instance_of(span_data, AgentSpanData): # Could be create_agent or invoke_agent based on context operation = getattr(span_data, "operation", None) normalized = ( @@ -1528,17 +1531,17 @@ class GenAISemanticProcessor(TracingProcessor): if normalized in {"invoke", "invoke_agent"}: return GenAIOperationName.INVOKE_AGENT return GenAIOperationName.INVOKE_AGENT - elif _is_instance_of(span_data, FunctionSpanData): + if _is_instance_of(span_data, FunctionSpanData): return GenAIOperationName.EXECUTE_TOOL - elif _is_instance_of(span_data, ResponseSpanData): + if _is_instance_of(span_data, ResponseSpanData): return GenAIOperationName.CHAT # Response typically from chat - elif _is_instance_of(span_data, TranscriptionSpanData): + if _is_instance_of(span_data, TranscriptionSpanData): return GenAIOperationName.TRANSCRIPTION - elif _is_instance_of(span_data, SpeechSpanData): + if _is_instance_of(span_data, SpeechSpanData): return GenAIOperationName.SPEECH - elif _is_instance_of(span_data, GuardrailSpanData): + if _is_instance_of(span_data, GuardrailSpanData): return GenAIOperationName.GUARDRAIL - elif _is_instance_of(span_data, HandoffSpanData): + if _is_instance_of(span_data, HandoffSpanData): return GenAIOperationName.HANDOFF return "unknown" diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.latest.txt b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.latest.txt new file mode 100644 index 000000000..e224e4349 --- /dev/null +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.latest.txt @@ -0,0 +1,53 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +# ******************************** +# WARNING: NOT HERMETIC !!!!!!!!!! +# ******************************** +# +# This "requirements.txt" is installed in conjunction +# with multiple other dependencies in the top-level "tox.ini" +# file. In particular, please see: +# +# openai_agents-latest: {[testenv]test_deps} +# openai_agents-latest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.latest.txt +# +# This provides additional dependencies, namely: +# +# opentelemetry-api +# opentelemetry-sdk +# opentelemetry-semantic-conventions +# +# ... with a "dev" version based on the latest distribution. + + +# This variant of the requirements aims to test the system using +# the newest supported version of external dependencies. + +openai-agents==0.3.3 +pydantic>=2.10,<3 +httpx==0.27.2 +Deprecated==1.2.14 +importlib-metadata==6.11.0 +packaging==24.0 +pytest==7.4.4 +pytest-asyncio==0.21.0 +wrapt==1.16.0 +# test with the latest version of opentelemetry-api, sdk, and semantic conventions +grpcio>=1.60.0; implementation_name != "pypy" +grpcio<1.60.0; implementation_name == "pypy" + +-e opentelemetry-instrumentation +-e instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2 diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.oldest.txt b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.oldest.txt new file mode 100644 index 000000000..2e935a63b --- /dev/null +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.oldest.txt @@ -0,0 +1,35 @@ +# Copyright The OpenTelemetry Authors +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# This variant of the requirements aims to test the system using +# the oldest supported version of external dependencies. + +openai-agents==0.3.3 +pydantic>=2.10,<3 +httpx==0.27.2 +Deprecated==1.2.14 +importlib-metadata==6.11.0 +packaging==24.0 +pytest==7.4.4 +pytest-asyncio==0.21.0 +wrapt==1.16.0 +opentelemetry-exporter-otlp-proto-grpc~=1.30 +opentelemetry-exporter-otlp-proto-http~=1.30 +opentelemetry-api==1.37 # when updating, also update in pyproject.toml +opentelemetry-sdk==1.37 # when updating, also update in pyproject.toml +opentelemetry-semantic-conventions==0.58b0 # when updating, also update in pyproject.toml +grpcio>=1.60.0; implementation_name != "pypy" +grpcio<1.60.0; implementation_name == "pypy" + +-e instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2 diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/stubs/agents/tracing/__init__.py b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/stubs/agents/tracing/__init__.py index 59d54ddaf..4ed06c897 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/stubs/agents/tracing/__init__.py +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/stubs/agents/tracing/__init__.py @@ -1,3 +1,5 @@ +# pylint: skip-file + from __future__ import annotations from contextlib import contextmanager diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/stubs/opentelemetry/instrumentation/instrumentor.py b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/stubs/opentelemetry/instrumentation/instrumentor.py index c64d31de9..a84ac4978 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/stubs/opentelemetry/instrumentation/instrumentor.py +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/stubs/opentelemetry/instrumentation/instrumentor.py @@ -1,3 +1,5 @@ +# pylint: skip-file + from __future__ import annotations from typing import Collection diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_tracer.py b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_tracer.py index 5ff37de9c..1f21ab25c 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_tracer.py +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_tracer.py @@ -1,3 +1,5 @@ +# pylint: disable=wrong-import-position,wrong-import-order,import-error,no-name-in-module,unexpected-keyword-arg,no-value-for-parameter,redefined-outer-name + from __future__ import annotations import json @@ -220,7 +222,7 @@ def test_normalize_messages_skips_empty_when_sensitive_enabled(): normalized = processor._normalize_messages_to_role_parts( [{"role": "user", "content": None}] ) - assert normalized == [] + assert not normalized def test_normalize_messages_emits_placeholder_when_sensitive_disabled(): diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_z_instrumentor_behaviors.py b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_z_instrumentor_behaviors.py index 3aa15521c..e63e7b2c6 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_z_instrumentor_behaviors.py +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_z_instrumentor_behaviors.py @@ -1,3 +1,5 @@ +# pylint: disable=wrong-import-position,wrong-import-order,import-error + from __future__ import annotations import sys diff --git a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_z_span_processor_unit.py b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_z_span_processor_unit.py index f47a4a69e..b2c8c7c8f 100644 --- a/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_z_span_processor_unit.py +++ b/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/test_z_span_processor_unit.py @@ -1,3 +1,5 @@ +# pylint: disable=wrong-import-position,wrong-import-order,import-error,no-name-in-module,unexpected-keyword-arg,no-value-for-parameter,redefined-outer-name,too-many-locals,too-many-statements,too-many-branches + from __future__ import annotations import importlib @@ -91,7 +93,7 @@ except ImportError: # pragma: no cover def _collect(iterator) -> dict[str, Any]: - return {key: value for key, value in iterator} + return dict(iterator) @pytest.fixture diff --git a/tox.ini b/tox.ini index 6d3aee161..0be29fe13 100644 --- a/tox.ini +++ b/tox.ini @@ -13,6 +13,10 @@ envlist = pypy3-test-instrumentation-openai-v2-{oldest,latest} lint-instrumentation-openai-v2 + ; instrumentation-openai-agents + py3{10,11,12,13}-test-instrumentation-openai_agents-v2-{oldest,latest} + lint-instrumentation-openai_agents-v2 + ; instrumentation-vertexai py3{9,10,11,12,13}-test-instrumentation-vertexai-{oldest,latest} # Disabling pypy3 as shapely does not have wheels and fails to compile @@ -460,6 +464,10 @@ deps = openai-latest: {[testenv]test_deps} openai-latest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/requirements.latest.txt lint-instrumentation-openai-v2: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests/requirements.oldest.txt + openai_agents-oldest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.oldest.txt + openai_agents-latest: {[testenv]test_deps} + openai_agents-latest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.latest.txt + lint-instrumentation-openai_agents-v2: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests/requirements.oldest.txt vertexai-oldest: -r {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests/requirements.oldest.txt vertexai-latest: {[testenv]test_deps} @@ -847,6 +855,8 @@ commands = test-instrumentation-openai-v2: pytest {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-v2/tests {posargs} lint-instrumentation-openai-v2: sh -c "cd instrumentation-genai && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-openai-v2" + test-instrumentation-openai_agents-v2: pytest {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-openai-agents-v2/tests {posargs} + lint-instrumentation-openai_agents-v2: sh -c "cd instrumentation-genai && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-openai-agents-v2" test-instrumentation-vertexai: pytest {toxinidir}/instrumentation-genai/opentelemetry-instrumentation-vertexai/tests --vcr-record=none {posargs} lint-instrumentation-vertexai: sh -c "cd instrumentation-genai && pylint --rcfile ../.pylintrc opentelemetry-instrumentation-vertexai"