Skip to content

Commit d10fae4

Browse files
committed
perf(adk): reduce tracing serialization overhead
Capture ADK request, config, and event fields directly instead of deep-copying entire objects on tracing paths. Preserve extra dict config fields while still serializing Pydantic schemas for logged config readability. Verified with targeted ADK capture_config and call-type tests.
1 parent 11c2016 commit d10fae4

2 files changed

Lines changed: 141 additions & 159 deletions

File tree

py/src/braintrust/integrations/adk/test_adk.py

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1454,9 +1454,9 @@ class Person(BaseModel):
14541454

14551455

14561456
@pytest.mark.asyncio
1457-
async def test_serialize_config_handles_all_schema_fields():
1458-
"""Test that _serialize_config handles all 4 schema fields."""
1459-
from braintrust.integrations.adk.tracing import _serialize_config
1457+
async def test_capture_config_handles_all_schema_fields():
1458+
"""Test that _capture_config handles all 4 schema fields."""
1459+
from braintrust.integrations.adk.tracing import _capture_config
14601460

14611461
class TestSchema(BaseModel):
14621462
value: str = Field(description="Test value")
@@ -1470,7 +1470,7 @@ class TestSchema(BaseModel):
14701470
"other_field": "keep me",
14711471
}
14721472

1473-
serialized = _serialize_config(config)
1473+
serialized = _capture_config(config)
14741474

14751475
assert isinstance(serialized, dict)
14761476

@@ -1488,14 +1488,14 @@ class TestSchema(BaseModel):
14881488

14891489

14901490
@pytest.mark.asyncio
1491-
async def test_serialize_config_handles_non_pydantic():
1492-
"""Test that _serialize_config handles non-Pydantic values gracefully."""
1493-
from braintrust.integrations.adk.tracing import _serialize_config
1491+
async def test_capture_config_handles_non_pydantic():
1492+
"""Test that _capture_config handles non-Pydantic values gracefully."""
1493+
from braintrust.integrations.adk.tracing import _capture_config
14941494

14951495
# Test with non-Pydantic values
14961496
config = {"response_schema": "not a pydantic model", "other_field": {"key": "value"}}
14971497

1498-
serialized = _serialize_config(config)
1498+
serialized = _capture_config(config)
14991499

15001500
assert isinstance(serialized, dict)
15011501
# Non-Pydantic schema should remain as-is
@@ -1695,28 +1695,28 @@ async def test_adk_response_json_schema_dict(memory_logger):
16951695

16961696

16971697
@pytest.mark.asyncio
1698-
async def test_serialize_config_preserves_none():
1699-
"""Test that _serialize_config returns None when config is None (not empty dict)."""
1700-
from braintrust.integrations.adk.tracing import _serialize_config
1698+
async def test_capture_config_preserves_none():
1699+
"""Test that _capture_config returns None when config is None (not empty dict)."""
1700+
from braintrust.integrations.adk.tracing import _capture_config
17011701

17021702
# None should be preserved as None, not converted to {}
1703-
result = _serialize_config(None)
1703+
result = _capture_config(None)
17041704
assert result is None, f"Expected None, got {result}"
17051705

17061706
# Empty dict should remain empty dict
1707-
result = _serialize_config({})
1707+
result = _capture_config({})
17081708
assert result == {}
17091709

17101710
# False should be preserved as False
1711-
result = _serialize_config(False)
1711+
result = _capture_config(False)
17121712
assert result is False
17131713

17141714
# 0 should be preserved as 0
1715-
result = _serialize_config(0)
1715+
result = _capture_config(0)
17161716
assert result == 0
17171717

17181718
# Empty string should be preserved
1719-
result = _serialize_config("")
1719+
result = _capture_config("")
17201720
assert result == ""
17211721

17221722

0 commit comments

Comments
 (0)