Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions py/nox_session_constraints.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@
"test_livekit_agents": {"max_python_exclusive": "3.14", "ci_platforms": ["linux"]},
"test_pipecat": {"min_python": "3.11", "max_python_exclusive": "3.14"},
"test_agentscope": {"versions": {"latest": {"min_python": "3.11"}}},
"test_pydantic_ai_integration": {"versions": {"latest": {"min_python": "3.11"}}},
"test_pydantic_ai_logfire": {"versions": {"latest": {"min_python": "3.11"}}},
"test_pydantic_ai_wrap_openai": {"versions": {"latest": {"min_python": "3.11"}}},
"test_dspy": {"versions": {"latest": {"min_python": "3.11"}}},
"test_crewai": {"max_python_exclusive": "3.14"},
"test_deepagents": {"min_python": "3.11"},
Expand Down
4 changes: 4 additions & 0 deletions py/noxfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,7 @@ def test_autogen(session, version):
@nox.session()
@nox.parametrize("version", PYDANTIC_AI_INTEGRATION_VERSIONS, ids=PYDANTIC_AI_INTEGRATION_VERSIONS)
def test_pydantic_ai_integration(session, version):
_skip_if_incompatible(session)
_install_test_deps(session)
# Pydantic AI 1.10.0 imports opentelemetry._events, removed in opentelemetry-api 1.40.
constraint_group = "test-pydantic-ai-otel-events" if version == "1.10.0" else None
Expand All @@ -565,6 +566,7 @@ def test_pydantic_ai_integration(session, version):
@nox.parametrize("version", PYDANTIC_AI_INTEGRATION_VERSIONS, ids=PYDANTIC_AI_INTEGRATION_VERSIONS)
def test_pydantic_ai_logfire(session, version):
"""Test pydantic_ai + logfire coexistence (issue #1324)."""
_skip_if_incompatible(session)
_install_test_deps(session, "test-pydantic-ai-logfire")
_install_matrix_dep(session, "pydantic-ai-integration", version, "test-pydantic-ai-logfire-constraints")
_run_tests(session, f"{INTEGRATION_DIR}/pydantic_ai/test_pydantic_ai_logfire.py", version=version)
Expand All @@ -574,6 +576,7 @@ def test_pydantic_ai_logfire(session, version):
@nox.parametrize("version", PYDANTIC_AI_WRAP_OPENAI_VERSIONS, ids=PYDANTIC_AI_WRAP_OPENAI_VERSIONS)
def test_pydantic_ai_wrap_openai(session, version):
"""Test pydantic_ai with wrap_openai() approach - supports older versions."""
_skip_if_incompatible(session)
_install_test_deps(session)
# These versions import opentelemetry._events, removed in opentelemetry-api 1.40.
constraint_group = "test-pydantic-ai-otel-events" if version in {"0.1.9", "1.0.1"} else None
Expand Down Expand Up @@ -920,6 +923,7 @@ def pylint(session):
"agentscope": (3, 11),
"harbor": (3, 12),
"pipecat-ai": (3, 11),
"pydantic-ai-integration": (3, 11),
}
for package in _VENDOR_TABLE:
if sys.version_info[:2] < minimum_python.get(package, (3, 10)):
Expand Down
55 changes: 29 additions & 26 deletions py/pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -319,6 +319,9 @@ lint = [
"llama-index-core",
"llama-index-llms-openai",
"llama-index-embeddings-openai",
# pydantic-ai's matrix latest requires Python 3.11+, so pylint skips it on
# 3.10. Keep a lock-resolved version here so pydantic_ai imports resolve.
"pydantic-ai",
# Keep the lint environment's optional SDK dependencies lock-resolved
# instead of installing the unconstrained [all] extra separately.
"opentelemetry-api==1.39.1",
Expand Down Expand Up @@ -370,7 +373,7 @@ explicit = true
# ---------------------------------------------------------------------------

[tool.uv]
exclude-newer = "2026-10-09T00:00:00Z"
exclude-newer = "2026-10-12T06:05:49Z"
conflicts = [
# Groups that pin or transitively require conflicting openai versions.
[
Expand Down Expand Up @@ -427,13 +430,13 @@ latest = "ai[openai]==0.8.0"
"0.4.0" = "ai[openai]==0.4.0"

[tool.braintrust.matrix.openai]
latest = "openai==3.24.0"
latest = "openai==3.29.0"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Re-record latest cassettes before accepting provider bumps

The latest provider versions now advance across several minor releases, but this commit changes only pyproject.toml and uv.lock; the checked-in recordings still identify the previous clients—for example, OpenAI cassettes contain 3.24.0, Anthropic 1.11.0, Google GenAI 2.28.0, and Mistral 3.0.0. Because CI uses replay-only VCR, the new clients receive old response payloads, so passing integration sessions cannot detect response-shape or wire-format changes in the versions introduced here. Re-record the affected cassettes/latest directories, including integrations that consume these providers as auxiliary dependencies, and validate playback before merging.

AGENTS.md reference: AGENTS.md:L201-L205

Useful? React with 👍 / 👎.

"1.92.0" = "openai==1.92.0"
"1.77.0" = "openai==1.77.0"
"1.71.0" = "openai==1.71.0"

[tool.braintrust.matrix.anthropic]
latest = "anthropic==1.11.0"
latest = "anthropic==1.13.0"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Finish refreshing the Anthropic latest cassettes

Although most Anthropic recordings were refreshed, cassettes/latest/test_anthropic_messages_sync_server_tool_spans.yaml is unchanged and still records Anthropic/Python 1.11.0 and x-stainless-package-version: 1.11.0. When CI runs this server-tool test against the new 1.13.0 pin, VCR therefore returns the old payload and cannot detect request or response-shape changes for this path; re-record this remaining fixture with 1.13.0.

AGENTS.md reference: AGENTS.md:L201-L205

Useful? React with 👍 / 👎.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Refresh the remaining Anthropic events cassette

Beyond the previously identified server-tool fixture, test_anthropic_beta_sessions_events_send_and_stream.yaml is also unchanged and all seven requests still identify Anthropic/Python 1.4.0. Since test_anthropic(latest) runs this VCR-marked managed-agent events path whenever the 1.13.0 client exposes it, replay-only CI will continue validating old request/response shapes rather than the newly pinned client; re-record this cassette with the rest of the latest set.

AGENTS.md reference: AGENTS.md:L196-L204

Useful? React with 👍 / 👎.

"0.48.0" = "anthropic==0.48.0"

[tool.braintrust.matrix.cohere]
Expand All @@ -448,29 +451,29 @@ latest = "openai-agents==0.23.1"
[tool.braintrust.matrix.litellm]
# 1.92.0 only publishes Linux wheels through CPython 3.13, but the test
# matrix also covers Windows and CPython 3.14.
latest = "litellm==1.104.0"
latest = "litellm==1.105.0"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Finish refreshing the LiteLLM latest cassettes

The refreshed set omits both test_litellm_text_completion_metrics[async].yaml and [sync].yaml, whose request headers still identify litellm/1.104.0. Under the 1.105.0 latest session, replay-only CI will run these text-completion paths against the prior release's recordings, leaving this API surface unvalidated; re-record both remaining fixtures with the new pin.

AGENTS.md reference: AGENTS.md:L201-L205

Useful? React with 👍 / 👎.

"1.74.0" = "litellm==1.74.0"

[tool.braintrust.matrix.livekit-agents]
latest = "livekit-agents==1.8.4"
latest = "livekit-agents==1.8.6"
"1.3.1" = "livekit-agents==1.3.1"

[tool.braintrust.matrix.pipecat-ai]
latest = "pipecat-ai==1.12.0"
"1.3.0" = "pipecat-ai==1.3.0"

[tool.braintrust.matrix.claude-agent-sdk]
latest = "claude-agent-sdk==0.2.163"
latest = "claude-agent-sdk==0.2.165"
"0.1.10" = "claude-agent-sdk==0.1.10"

[tool.braintrust.matrix.cursor-sdk]
# 1.0.25 fixes bridge callback tokens that could be parsed as CLI flags while
# retaining per-turn usage, sync/async consumption, multimodal, and custom tools.
latest = "cursor-sdk==1.0.35"
latest = "cursor-sdk==1.0.37"
"1.0.25" = "cursor-sdk==1.0.25"

[tool.braintrust.matrix.agno]
latest = "agno==3.1.1"
latest = "agno==3.1.2"
"2.4.0" = "agno==2.4.0"
"2.1.0" = "agno==2.1.0"

Expand All @@ -487,28 +490,28 @@ latest = "autogen-ext[openai]==0.7.5"
"0.7.0" = "autogen-ext[openai]==0.7.0"

[tool.braintrust.matrix.strands-agents]
latest = "strands-agents==1.57.2"
latest = "strands-agents==1.59.0"
"1.20.0" = "strands-agents==1.20.0"

[tool.braintrust.matrix.pydantic-ai-integration]
latest = "pydantic-ai==2.54.0"
latest = "pydantic-ai==2.55.0"
"1.10.0" = "pydantic-ai==1.10.0"

[tool.braintrust.matrix.pydantic-ai-wrap-openai]
latest = "pydantic-ai==2.54.0"
latest = "pydantic-ai==2.55.0"
"1.0.1" = "pydantic-ai==1.0.1"
"0.1.9" = "pydantic-ai==0.1.9"

[tool.braintrust.matrix.autoevals]
latest = "autoevals==0.3.0"
latest = "autoevals==0.4.0"
"0.0.129" = "autoevals==0.0.129"

[tool.braintrust.matrix.instructor]
latest = "instructor==1.17.0"
"1.11.0" = "instructor==1.11.0"

[tool.braintrust.matrix.google-genai]
latest = "google-genai==2.28.0"
latest = "google-genai==2.29.0"
"1.75.0" = "google-genai==1.75.0"
"1.30.0" = "google-genai==1.30.0"

Expand All @@ -520,14 +523,14 @@ latest = "dspy==3.4.0"
"2.6.0" = "dspy==2.6.0"

[tool.braintrust.matrix.deepagents]
latest = "deepagents==0.7.21"
latest = "deepagents==0.7.24"
"0.6.0" = "deepagents==0.6.0"

[tool.braintrust.matrix.crewai]
# 1.13.0 is the first release with the full causal-id surface (event_id /
# parent_event_id / started_event_id on BaseEvent) plus the ``usage`` field on
# LLMCallCompletedEvent that the Braintrust CrewAI integration depends on.
latest = "crewai==1.15.23"
latest = "crewai==1.15.27"
"1.13.0" = "crewai==1.13.0"

[tool.braintrust.matrix.google-adk]
Expand All @@ -536,35 +539,35 @@ latest = "google-adk[mcp]==2.11.0"
"1.14.1" = "google-adk[mcp]==1.14.1"

[tool.braintrust.matrix.langchain-core]
latest = "langchain-core==1.6.6"
latest = "langchain-core==1.6.9"
"0.3.28" = "langchain-core==0.3.28"

[tool.braintrust.matrix.llama-index-core]
latest = "llama-index-core==0.14.25"
"0.13.0" = "llama-index-core==0.13.0"

[tool.braintrust.matrix.openrouter]
latest = "openrouter==1.3.22"
latest = "openrouter==1.3.43"
"0.6.0" = "openrouter==0.6.0"

[tool.braintrust.matrix.mistralai]
latest = "mistralai==3.0.0"
latest = "mistralai==3.2.0"
"2.10.1" = "mistralai==2.10.1"
"1.12.4" = "mistralai==1.12.4"

[tool.braintrust.matrix.typesafe-sdk]
latest = "typesafe-sdk==0.7.2"
latest = "typesafe-sdk==0.7.4"

[tool.braintrust.matrix.huggingface-hub]
# Floor pinned to 0.32.0: the earliest release that exposes the
# ``provider="auto"`` routing mode the integration relies on for multi-
# provider use, while still keeping the same chat_completion /
# text_generation / feature_extraction / sentence_similarity method names.
latest = "huggingface-hub==2.1.1"
latest = "huggingface-hub==2.2.0"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Re-record the Hugging Face 2.2 cassette set

The fresh evidence after the prior cassette comment is that this revision adds many cassette updates but none under integrations/huggingface_hub/cassettes/latest; those fixtures still advertise hf_hub/1.15.0 even though this pin advances from 2.1.1 to 2.2.0. Consequently, test_huggingface_hub(latest) in replay-only CI continues exercising old HTTP payloads rather than the newly selected client/server behavior, so this provider bump remains unvalidated until that latest directory is re-recorded and replayed.

AGENTS.md reference: AGENTS.md:L201-L205

Useful? React with 👍 / 👎.

"0.32.0" = "huggingface-hub==0.32.0"

[tool.braintrust.matrix.transformers]
latest = "transformers==5.18.0"
latest = "transformers==5.19.0"
"4.42.0" = "transformers==4.42.0"

[tool.braintrust.matrix.temporalio]
Expand All @@ -590,29 +593,29 @@ latest = "pytest==9.1.1"
latest = "braintrust-core==0.0.59"

[tool.braintrust.matrix.boto3]
latest = "boto3==1.43.108"
latest = "boto3==1.43.111"
"1.34.116" = "boto3==1.34.116"

[tool.braintrust.matrix.botocore]
latest = "botocore==1.43.108"
latest = "botocore==1.43.111"
"1.34.116" = "botocore==1.34.116"

# OpenTelemetry api/sdk/exporter release in lockstep; keep their keys in sync.
# 1.45.0 moved OTLP HTTP exporter headers onto an internal client, so keep a
# pre-1.45 version covered alongside latest. 1.16.0 is the oldest release that
# imports without pkg_resources; test_otel skips it on Python 3.14 (protobuf<5).
[tool.braintrust.matrix.opentelemetry-api]
latest = "opentelemetry-api==1.45.0"
latest = "opentelemetry-api==1.45.1"
"1.44.0" = "opentelemetry-api==1.44.0"
"1.16.0" = "opentelemetry-api==1.16.0"

[tool.braintrust.matrix.opentelemetry-sdk]
latest = "opentelemetry-sdk==1.45.0"
latest = "opentelemetry-sdk==1.45.1"
"1.44.0" = "opentelemetry-sdk==1.44.0"
"1.16.0" = "opentelemetry-sdk==1.16.0"

[tool.braintrust.matrix.opentelemetry-exporter-otlp-proto-http]
latest = "opentelemetry-exporter-otlp-proto-http==1.45.0"
latest = "opentelemetry-exporter-otlp-proto-http==1.45.1"
"1.44.0" = "opentelemetry-exporter-otlp-proto-http==1.44.0"
"1.16.0" = "opentelemetry-exporter-otlp-proto-http==1.16.0"

Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading
Loading