diff --git a/.github/workflows/test-integrations-ai.yml b/.github/workflows/test-integrations-ai.yml index a6995fa268..72a4253744 100644 --- a/.github/workflows/test-integrations-ai.yml +++ b/.github/workflows/test-integrations-ai.yml @@ -22,89 +22,6 @@ env: CACHED_BUILD_PATHS: | ${{ github.workspace }}/dist-serverless jobs: - test-ai-latest: - name: AI (latest) - timeout-minutes: 30 - runs-on: ${{ matrix.os }} - strategy: - fail-fast: false - matrix: - python-version: ["3.9","3.11","3.12"] - # python3.6 reached EOL and is no longer being supported on - # new versions of hosted runners on Github Actions - # ubuntu-20.04 is the last version that supported python3.6 - # see https://github.com/actions/setup-python/issues/544#issuecomment-1332535877 - os: [ubuntu-22.04] - # Use Docker container only for Python 3.6 - container: ${{ matrix.python-version == '3.6' && 'python:3.6' || null }} - steps: - - uses: actions/checkout@v5.0.0 - - uses: actions/setup-python@v5 - if: ${{ matrix.python-version != '3.6' }} - with: - python-version: ${{ matrix.python-version }} - allow-prereleases: true - - name: Setup Test Env - run: | - pip install "coverage[toml]" tox - - name: Erase coverage - run: | - coverage erase - - name: Test anthropic latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-anthropic-latest" - - name: Test cohere latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-cohere-latest" - - name: Test langchain latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-langchain-latest" - - name: Test openai_base latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-openai_base-latest" - - name: Test openai_notiktoken latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-openai_notiktoken-latest" - - name: Test openai_agents latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-openai_agents-latest" - - name: Test huggingface_hub latest - run: | - set -x # print commands that are executed - ./scripts/runtox.sh "py${{ matrix.python-version }}-huggingface_hub-latest" - - name: Generate coverage XML (Python 3.6) - if: ${{ !cancelled() && matrix.python-version == '3.6' }} - run: | - export COVERAGE_RCFILE=.coveragerc36 - coverage combine .coverage-sentry-* - coverage xml --ignore-errors - - name: Generate coverage XML - if: ${{ !cancelled() && matrix.python-version != '3.6' }} - run: | - coverage combine .coverage-sentry-* - coverage xml - - name: Upload coverage to Codecov - if: ${{ !cancelled() }} - uses: codecov/codecov-action@v5.5.0 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: coverage.xml - # make sure no plugins alter our coverage reports - plugins: noop - verbose: true - - name: Upload test results to Codecov - if: ${{ !cancelled() }} - uses: codecov/test-results-action@v1 - with: - token: ${{ secrets.CODECOV_TOKEN }} - files: .junitxml - verbose: true test-ai-pinned: name: AI (pinned) timeout-minutes: 30 @@ -141,18 +58,22 @@ jobs: run: | set -x # print commands that are executed ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-cohere" - - name: Test langchain pinned + - name: Test langchain-base pinned + run: | + set -x # print commands that are executed + ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-langchain-base" + - name: Test langchain-notiktoken pinned run: | set -x # print commands that are executed - ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-langchain" - - name: Test openai_base pinned + ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-langchain-notiktoken" + - name: Test openai-base pinned run: | set -x # print commands that are executed - ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-openai_base" - - name: Test openai_notiktoken pinned + ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-openai-base" + - name: Test openai-notiktoken pinned run: | set -x # print commands that are executed - ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-openai_notiktoken" + ./scripts/runtox.sh --exclude-latest "py${{ matrix.python-version }}-openai-notiktoken" - name: Test openai_agents pinned run: | set -x # print commands that are executed diff --git a/scripts/populate_tox/config.py b/scripts/populate_tox/config.py index 65e463a947..0d4d0fe6ee 100644 --- a/scripts/populate_tox/config.py +++ b/scripts/populate_tox/config.py @@ -126,6 +126,26 @@ "huggingface_hub": { "package": "huggingface_hub", }, + "langchain-base": { + "package": "langchain", + "integration_name": "langchain", + "deps": { + "*": ["openai", "tiktoken", "langchain-openai"], + "<=0.1": ["httpx<0.28.0"], + ">=0.3": ["langchain-community"], + }, + "include": "<1.0", + }, + "langchain-notiktoken": { + "package": "langchain", + "integration_name": "langchain", + "deps": { + "*": ["openai", "langchain-openai"], + "<=0.1": ["httpx<0.28.0"], + ">=0.3": ["langchain-community"], + }, + "include": "<1.0", + }, "launchdarkly": { "package": "launchdarkly-server-sdk", }, @@ -139,7 +159,7 @@ "loguru": { "package": "loguru", }, - "openai_base": { + "openai-base": { "package": "openai", "integration_name": "openai", "deps": { @@ -148,7 +168,7 @@ }, "python": ">=3.8", }, - "openai_notiktoken": { + "openai-notiktoken": { "package": "openai", "integration_name": "openai", "deps": { diff --git a/scripts/populate_tox/tox.jinja b/scripts/populate_tox/tox.jinja index 632ce7c71b..2b968b7aa1 100644 --- a/scripts/populate_tox/tox.jinja +++ b/scripts/populate_tox/tox.jinja @@ -77,12 +77,6 @@ envlist = {py3.9,py3.11,py3.12}-httpx-v{0.25,0.27} {py3.9,py3.12,py3.13}-httpx-latest - # Langchain - {py3.9,py3.11,py3.12}-langchain-v0.1 - {py3.9,py3.11,py3.12}-langchain-v0.3 - {py3.9,py3.11,py3.12}-langchain-latest - {py3.9,py3.11,py3.12}-langchain-notiktoken - # OpenTelemetry (OTel) {py3.7,py3.9,py3.12,py3.13}-opentelemetry @@ -231,20 +225,6 @@ deps = httpx-v0.27: httpx~=0.27.0 httpx-latest: httpx - # Langchain - langchain-v0.1: openai~=1.0.0 - langchain-v0.1: langchain~=0.1.11 - langchain-v0.1: tiktoken~=0.6.0 - langchain-v0.1: httpx<0.28.0 - langchain-v0.3: langchain~=0.3.0 - langchain-v0.3: langchain-community - langchain-v0.3: tiktoken - langchain-v0.3: openai - langchain-{latest,notiktoken}: langchain - langchain-{latest,notiktoken}: langchain-openai - langchain-{latest,notiktoken}: openai>=1.6.1 - langchain-latest: tiktoken~=0.6.0 - # OpenTelemetry (OTel) opentelemetry: opentelemetry-distro @@ -376,12 +356,13 @@ setenv = httpx: TESTPATH=tests/integrations/httpx huey: TESTPATH=tests/integrations/huey huggingface_hub: TESTPATH=tests/integrations/huggingface_hub - langchain: TESTPATH=tests/integrations/langchain + langchain-base: TESTPATH=tests/integrations/langchain + langchain-notiktoken: TESTPATH=tests/integrations/langchain launchdarkly: TESTPATH=tests/integrations/launchdarkly litestar: TESTPATH=tests/integrations/litestar loguru: TESTPATH=tests/integrations/loguru - openai_base: TESTPATH=tests/integrations/openai - openai_notiktoken: TESTPATH=tests/integrations/openai + openai-base: TESTPATH=tests/integrations/openai + openai-notiktoken: TESTPATH=tests/integrations/openai openai_agents: TESTPATH=tests/integrations/openai_agents openfeature: TESTPATH=tests/integrations/openfeature opentelemetry: TESTPATH=tests/integrations/opentelemetry diff --git a/scripts/split_tox_gh_actions/split_tox_gh_actions.py b/scripts/split_tox_gh_actions/split_tox_gh_actions.py index 305ceeae76..1c3435f43b 100755 --- a/scripts/split_tox_gh_actions/split_tox_gh_actions.py +++ b/scripts/split_tox_gh_actions/split_tox_gh_actions.py @@ -61,9 +61,10 @@ "AI": [ "anthropic", "cohere", - "langchain", - "openai_base", - "openai_notiktoken", + "langchain-base", + "langchain-notiktoken", + "openai-base", + "openai-notiktoken", "openai_agents", "huggingface_hub", ], diff --git a/sentry_sdk/integrations/__init__.py b/sentry_sdk/integrations/__init__.py index e2eadd523d..6f0109aced 100644 --- a/sentry_sdk/integrations/__init__.py +++ b/sentry_sdk/integrations/__init__.py @@ -141,7 +141,7 @@ def iter_default_integrations(with_auto_enabling_integrations): "graphene": (3, 3), "grpc": (1, 32, 0), # grpcio "huggingface_hub": (0, 22), - "langchain": (0, 0, 210), + "langchain": (0, 1, 0), "launchdarkly": (9, 8, 0), "loguru": (0, 7, 0), "openai": (1, 0, 0), diff --git a/tox.ini b/tox.ini index eea115876b..0898bc888f 100644 --- a/tox.ini +++ b/tox.ini @@ -10,7 +10,7 @@ # The file (and all resulting CI YAMLs) then need to be regenerated via # "scripts/generate-test-files.sh". # -# Last generated: 2025-09-01T14:09:50.564158+00:00 +# Last generated: 2025-09-02T10:59:55.249513+00:00 [tox] requires = @@ -77,12 +77,6 @@ envlist = {py3.9,py3.11,py3.12}-httpx-v{0.25,0.27} {py3.9,py3.12,py3.13}-httpx-latest - # Langchain - {py3.9,py3.11,py3.12}-langchain-v0.1 - {py3.9,py3.11,py3.12}-langchain-v0.3 - {py3.9,py3.11,py3.12}-langchain-latest - {py3.9,py3.11,py3.12}-langchain-notiktoken - # OpenTelemetry (OTel) {py3.7,py3.9,py3.12,py3.13}-opentelemetry @@ -138,15 +132,23 @@ envlist = {py3.9,py3.11,py3.12}-cohere-v5.13.12 {py3.9,py3.11,py3.12}-cohere-v5.17.0 - {py3.8,py3.11,py3.12}-openai_base-v1.0.1 - {py3.8,py3.11,py3.12}-openai_base-v1.35.15 - {py3.8,py3.11,py3.12}-openai_base-v1.69.0 - {py3.8,py3.12,py3.13}-openai_base-v1.102.0 + {py3.9,py3.11,py3.12}-langchain-base-v0.1.20 + {py3.9,py3.11,py3.12}-langchain-base-v0.2.17 + {py3.9,py3.12,py3.13}-langchain-base-v0.3.27 + + {py3.9,py3.11,py3.12}-langchain-notiktoken-v0.1.20 + {py3.9,py3.11,py3.12}-langchain-notiktoken-v0.2.17 + {py3.9,py3.12,py3.13}-langchain-notiktoken-v0.3.27 - {py3.8,py3.11,py3.12}-openai_notiktoken-v1.0.1 - {py3.8,py3.11,py3.12}-openai_notiktoken-v1.35.15 - {py3.8,py3.11,py3.12}-openai_notiktoken-v1.69.0 - {py3.8,py3.12,py3.13}-openai_notiktoken-v1.102.0 + {py3.8,py3.11,py3.12}-openai-base-v1.0.1 + {py3.8,py3.11,py3.12}-openai-base-v1.35.15 + {py3.8,py3.11,py3.12}-openai-base-v1.69.0 + {py3.8,py3.12,py3.13}-openai-base-v1.102.0 + + {py3.8,py3.11,py3.12}-openai-notiktoken-v1.0.1 + {py3.8,py3.11,py3.12}-openai-notiktoken-v1.35.15 + {py3.8,py3.11,py3.12}-openai-notiktoken-v1.69.0 + {py3.8,py3.12,py3.13}-openai-notiktoken-v1.102.0 {py3.10,py3.11,py3.12}-openai_agents-v0.0.19 {py3.10,py3.12,py3.13}-openai_agents-v0.1.0 @@ -412,20 +414,6 @@ deps = httpx-v0.27: httpx~=0.27.0 httpx-latest: httpx - # Langchain - langchain-v0.1: openai~=1.0.0 - langchain-v0.1: langchain~=0.1.11 - langchain-v0.1: tiktoken~=0.6.0 - langchain-v0.1: httpx<0.28.0 - langchain-v0.3: langchain~=0.3.0 - langchain-v0.3: langchain-community - langchain-v0.3: tiktoken - langchain-v0.3: openai - langchain-{latest,notiktoken}: langchain - langchain-{latest,notiktoken}: langchain-openai - langchain-{latest,notiktoken}: openai>=1.6.1 - langchain-latest: tiktoken~=0.6.0 - # OpenTelemetry (OTel) opentelemetry: opentelemetry-distro @@ -516,22 +504,37 @@ deps = cohere-v5.13.12: cohere==5.13.12 cohere-v5.17.0: cohere==5.17.0 - openai_base-v1.0.1: openai==1.0.1 - openai_base-v1.35.15: openai==1.35.15 - openai_base-v1.69.0: openai==1.69.0 - openai_base-v1.102.0: openai==1.102.0 - openai_base: pytest-asyncio - openai_base: tiktoken - openai_base-v1.0.1: httpx<0.28 - openai_base-v1.35.15: httpx<0.28 - - openai_notiktoken-v1.0.1: openai==1.0.1 - openai_notiktoken-v1.35.15: openai==1.35.15 - openai_notiktoken-v1.69.0: openai==1.69.0 - openai_notiktoken-v1.102.0: openai==1.102.0 - openai_notiktoken: pytest-asyncio - openai_notiktoken-v1.0.1: httpx<0.28 - openai_notiktoken-v1.35.15: httpx<0.28 + langchain-base-v0.1.20: langchain==0.1.20 + langchain-base-v0.2.17: langchain==0.2.17 + langchain-base-v0.3.27: langchain==0.3.27 + langchain-base: openai + langchain-base: tiktoken + langchain-base: langchain-openai + langchain-base-v0.3.27: langchain-community + + langchain-notiktoken-v0.1.20: langchain==0.1.20 + langchain-notiktoken-v0.2.17: langchain==0.2.17 + langchain-notiktoken-v0.3.27: langchain==0.3.27 + langchain-notiktoken: openai + langchain-notiktoken: langchain-openai + langchain-notiktoken-v0.3.27: langchain-community + + openai-base-v1.0.1: openai==1.0.1 + openai-base-v1.35.15: openai==1.35.15 + openai-base-v1.69.0: openai==1.69.0 + openai-base-v1.102.0: openai==1.102.0 + openai-base: pytest-asyncio + openai-base: tiktoken + openai-base-v1.0.1: httpx<0.28 + openai-base-v1.35.15: httpx<0.28 + + openai-notiktoken-v1.0.1: openai==1.0.1 + openai-notiktoken-v1.35.15: openai==1.35.15 + openai-notiktoken-v1.69.0: openai==1.69.0 + openai-notiktoken-v1.102.0: openai==1.102.0 + openai-notiktoken: pytest-asyncio + openai-notiktoken-v1.0.1: httpx<0.28 + openai-notiktoken-v1.35.15: httpx<0.28 openai_agents-v0.0.19: openai-agents==0.0.19 openai_agents-v0.1.0: openai-agents==0.1.0 @@ -833,12 +836,13 @@ setenv = httpx: TESTPATH=tests/integrations/httpx huey: TESTPATH=tests/integrations/huey huggingface_hub: TESTPATH=tests/integrations/huggingface_hub - langchain: TESTPATH=tests/integrations/langchain + langchain-base: TESTPATH=tests/integrations/langchain + langchain-notiktoken: TESTPATH=tests/integrations/langchain launchdarkly: TESTPATH=tests/integrations/launchdarkly litestar: TESTPATH=tests/integrations/litestar loguru: TESTPATH=tests/integrations/loguru - openai_base: TESTPATH=tests/integrations/openai - openai_notiktoken: TESTPATH=tests/integrations/openai + openai-base: TESTPATH=tests/integrations/openai + openai-notiktoken: TESTPATH=tests/integrations/openai openai_agents: TESTPATH=tests/integrations/openai_agents openfeature: TESTPATH=tests/integrations/openfeature opentelemetry: TESTPATH=tests/integrations/opentelemetry