Skip to content

Commit ea22edc

Browse files
danielmillerpclaude
andcommitted
feat: add Pydantic AI sync streaming converter
Introduces convert_pydantic_ai_to_agentex_events at agentex.lib.adk.providers._modules.pydantic_ai, mirroring the existing OpenAI Agents SDK converter in sync_provider.py. Maps Pydantic AI's AgentStreamEvent stream (PartStartEvent / PartDeltaEvent / PartEndEvent / FunctionToolResultEvent) into Agentex StreamTaskMessage* events, with first-class support for tool-call argument tokens streaming via ToolCallPartDelta.args_delta -> ToolRequestDelta.arguments_delta. This is slice 1 of an Agentex <-> Pydantic AI integration intended to match the level of support we have for OpenAI Agents SDK (sync, non-Temporal async, and Temporal). Subsequent slices will add the example agent, tracing wiring, and CLI templates. Adds pydantic-ai-slim>=1.0,<2 as a hard dependency, consistent with how openai-agents and other framework integrations are pinned. 22 unit tests cover text streaming, tool-call delta streaming, multi-step runs (where Pydantic AI part indices restart at 0 per model response), thinking/reasoning deltas, structured one-shot args, RetryPromptPart results, and ignored events. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 73eca7a commit ea22edc

5 files changed

Lines changed: 723 additions & 0 deletions

File tree

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ dependencies = [
3636
"mcp[cli]>=1.4.1",
3737
"scale-gp>=0.1.0a59",
3838
"openai-agents==0.14.1",
39+
"pydantic-ai-slim>=1.0,<2",
3940
"tzlocal>=5.3.1",
4041
"tzdata>=2025.2",
4142
"pytest>=8.4.0",

requirements-dev.lock

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,13 @@ frozenlist==1.8.0
112112
# via aiosignal
113113
fsspec==2026.3.0
114114
# via huggingface-hub
115+
genai-prices==0.0.59
116+
# via pydantic-ai-slim
115117
google-auth==2.49.1
116118
# via kubernetes
117119
griffelib==2.0.2
118120
# via openai-agents
121+
# via pydantic-ai-slim
119122
h11==0.16.0
120123
# via httpcore
121124
# via uvicorn
@@ -126,12 +129,15 @@ httpcore==1.0.9
126129
httpx==0.28.1
127130
# via agentex-sdk
128131
# via anthropic
132+
# via genai-prices
129133
# via httpx-aiohttp
130134
# via huggingface-hub
131135
# via langsmith
132136
# via litellm
133137
# via mcp
134138
# via openai
139+
# via pydantic-ai-slim
140+
# via pydantic-graph
135141
# via respx
136142
# via scale-gp
137143
# via scale-gp-beta
@@ -196,6 +202,8 @@ langsmith==0.7.22
196202
# via langchain-core
197203
litellm==1.83.7
198204
# via agentex-sdk
205+
logfire-api==4.32.1
206+
# via pydantic-graph
199207
markdown-it-py==3.0.0
200208
# via rich
201209
markupsafe==3.0.3
@@ -236,6 +244,7 @@ opentelemetry-api==1.40.0
236244
# via ddtrace
237245
# via opentelemetry-sdk
238246
# via opentelemetry-semantic-conventions
247+
# via pydantic-ai-slim
239248
opentelemetry-sdk==1.40.0
240249
# via agentex-sdk
241250
opentelemetry-semantic-conventions==0.61b0
@@ -287,18 +296,25 @@ pydantic==2.12.5
287296
# via agentex-sdk
288297
# via anthropic
289298
# via fastapi
299+
# via genai-prices
290300
# via langchain-core
291301
# via langsmith
292302
# via litellm
293303
# via mcp
294304
# via openai
295305
# via openai-agents
306+
# via pydantic-ai-slim
307+
# via pydantic-graph
296308
# via pydantic-settings
297309
# via python-on-whales
298310
# via scale-gp
299311
# via scale-gp-beta
312+
pydantic-ai-slim==1.92.0
313+
# via agentex-sdk
300314
pydantic-core==2.41.5
301315
# via pydantic
316+
pydantic-graph==1.92.0
317+
# via pydantic-ai-slim
302318
pydantic-settings==2.13.1
303319
# via mcp
304320
pygments==2.19.2
@@ -459,6 +475,8 @@ typing-inspection==0.4.2
459475
# via fastapi
460476
# via mcp
461477
# via pydantic
478+
# via pydantic-ai-slim
479+
# via pydantic-graph
462480
# via pydantic-settings
463481
tzdata==2025.3
464482
# via agentex-sdk

requirements.lock

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,10 +99,13 @@ frozenlist==1.8.0
9999
# via aiosignal
100100
fsspec==2026.3.0
101101
# via huggingface-hub
102+
genai-prices==0.0.59
103+
# via pydantic-ai-slim
102104
google-auth==2.49.1
103105
# via kubernetes
104106
griffelib==2.0.2
105107
# via openai-agents
108+
# via pydantic-ai-slim
106109
h11==0.16.0
107110
# via httpcore
108111
# via uvicorn
@@ -113,12 +116,15 @@ httpcore==1.0.9
113116
httpx==0.28.1
114117
# via agentex-sdk
115118
# via anthropic
119+
# via genai-prices
116120
# via httpx-aiohttp
117121
# via huggingface-hub
118122
# via langsmith
119123
# via litellm
120124
# via mcp
121125
# via openai
126+
# via pydantic-ai-slim
127+
# via pydantic-graph
122128
# via scale-gp
123129
# via scale-gp-beta
124130
httpx-aiohttp==0.1.12
@@ -180,6 +186,8 @@ langsmith==0.7.22
180186
# via langchain-core
181187
litellm==1.83.7
182188
# via agentex-sdk
189+
logfire-api==4.32.1
190+
# via pydantic-graph
183191
markdown-it-py==4.0.0
184192
# via rich
185193
markupsafe==3.0.3
@@ -214,6 +222,7 @@ opentelemetry-api==1.40.0
214222
# via ddtrace
215223
# via opentelemetry-sdk
216224
# via opentelemetry-semantic-conventions
225+
# via pydantic-ai-slim
217226
opentelemetry-sdk==1.40.0
218227
# via agentex-sdk
219228
opentelemetry-semantic-conventions==0.61b0
@@ -260,18 +269,25 @@ pydantic==2.12.5
260269
# via agentex-sdk
261270
# via anthropic
262271
# via fastapi
272+
# via genai-prices
263273
# via langchain-core
264274
# via langsmith
265275
# via litellm
266276
# via mcp
267277
# via openai
268278
# via openai-agents
279+
# via pydantic-ai-slim
280+
# via pydantic-graph
269281
# via pydantic-settings
270282
# via python-on-whales
271283
# via scale-gp
272284
# via scale-gp-beta
285+
pydantic-ai-slim==1.92.0
286+
# via agentex-sdk
273287
pydantic-core==2.41.5
274288
# via pydantic
289+
pydantic-graph==1.92.0
290+
# via pydantic-ai-slim
275291
pydantic-settings==2.13.1
276292
# via mcp
277293
pygments==2.20.0
@@ -424,6 +440,8 @@ typing-inspection==0.4.2
424440
# via fastapi
425441
# via mcp
426442
# via pydantic
443+
# via pydantic-ai-slim
444+
# via pydantic-graph
427445
# via pydantic-settings
428446
tzdata==2025.3
429447
# via agentex-sdk

0 commit comments

Comments
 (0)