Skip to content

Commit b7137cb

Browse files
authored
Added request_id to the model response. (#1547)
1 parent bd89845 commit b7137cb

File tree

20 files changed

+105
-4
lines changed

20 files changed

+105
-4
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ examples/pydantic_ai_examples/.chat_app_messages.sqlite
1717
/docs-site/.wrangler/
1818
/CLAUDE.md
1919
node_modules/
20+
**.idea/
21+
.coverage*

docs/agents.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,7 @@ async def main():
155155
model_name='gpt-4o',
156156
timestamp=datetime.datetime(...),
157157
kind='response',
158+
vendor_id=None,
158159
)
159160
),
160161
End(data=FinalResult(output='Paris', tool_name=None, tool_call_id=None)),
@@ -226,6 +227,7 @@ async def main():
226227
model_name='gpt-4o',
227228
timestamp=datetime.datetime(...),
228229
kind='response',
230+
vendor_id=None,
229231
)
230232
),
231233
End(data=FinalResult(output='Paris', tool_name=None, tool_call_id=None)),
@@ -829,6 +831,7 @@ with capture_run_messages() as messages: # (2)!
829831
model_name='gpt-4o',
830832
timestamp=datetime.datetime(...),
831833
kind='response',
834+
vendor_id=None,
832835
),
833836
ModelRequest(
834837
parts=[
@@ -862,6 +865,7 @@ with capture_run_messages() as messages: # (2)!
862865
model_name='gpt-4o',
863866
timestamp=datetime.datetime(...),
864867
kind='response',
868+
vendor_id=None,
865869
),
866870
]
867871
"""

docs/direct.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ async def main():
9595
model_name='gpt-4.1-nano',
9696
timestamp=datetime.datetime(...),
9797
kind='response',
98+
vendor_id=None,
9899
)
99100
"""
100101
```

docs/message-history.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ print(result.all_messages())
7474
model_name='gpt-4o',
7575
timestamp=datetime.datetime(...),
7676
kind='response',
77+
vendor_id=None,
7778
),
7879
]
7980
"""
@@ -159,6 +160,7 @@ async def main():
159160
model_name='gpt-4o',
160161
timestamp=datetime.datetime(...),
161162
kind='response',
163+
vendor_id=None,
162164
),
163165
]
164166
"""
@@ -225,6 +227,7 @@ print(result2.all_messages())
225227
model_name='gpt-4o',
226228
timestamp=datetime.datetime(...),
227229
kind='response',
230+
vendor_id=None,
228231
),
229232
ModelRequest(
230233
parts=[
@@ -254,6 +257,7 @@ print(result2.all_messages())
254257
model_name='gpt-4o',
255258
timestamp=datetime.datetime(...),
256259
kind='response',
260+
vendor_id=None,
257261
),
258262
]
259263
"""
@@ -367,6 +371,7 @@ print(result2.all_messages())
367371
model_name='gpt-4o',
368372
timestamp=datetime.datetime(...),
369373
kind='response',
374+
vendor_id=None,
370375
),
371376
ModelRequest(
372377
parts=[
@@ -396,6 +401,7 @@ print(result2.all_messages())
396401
model_name='gemini-1.5-pro',
397402
timestamp=datetime.datetime(...),
398403
kind='response',
404+
vendor_id=None,
399405
),
400406
]
401407
"""

docs/models/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ print(response.all_messages())
105105
model_name='claude-3-5-sonnet-latest',
106106
timestamp=datetime.datetime(...),
107107
kind='response',
108+
vendor_id=None,
108109
),
109110
]
110111
"""

docs/tools.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ print(dice_result.all_messages())
106106
model_name='gemini-1.5-flash',
107107
timestamp=datetime.datetime(...),
108108
kind='response',
109+
vendor_id=None,
109110
),
110111
ModelRequest(
111112
parts=[
@@ -139,6 +140,7 @@ print(dice_result.all_messages())
139140
model_name='gemini-1.5-flash',
140141
timestamp=datetime.datetime(...),
141142
kind='response',
143+
vendor_id=None,
142144
),
143145
ModelRequest(
144146
parts=[
@@ -170,6 +172,7 @@ print(dice_result.all_messages())
170172
model_name='gemini-1.5-flash',
171173
timestamp=datetime.datetime(...),
172174
kind='response',
175+
vendor_id=None,
173176
),
174177
]
175178
"""

pydantic_ai_slim/pydantic_ai/agent.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -585,6 +585,7 @@ async def main():
585585
model_name='gpt-4o',
586586
timestamp=datetime.datetime(...),
587587
kind='response',
588+
vendor_id=None,
588589
)
589590
),
590591
End(data=FinalResult(output='Paris', tool_name=None, tool_call_id=None)),
@@ -1854,6 +1855,7 @@ async def main():
18541855
model_name='gpt-4o',
18551856
timestamp=datetime.datetime(...),
18561857
kind='response',
1858+
vendor_id=None,
18571859
)
18581860
),
18591861
End(data=FinalResult(output='Paris', tool_name=None, tool_call_id=None)),
@@ -1999,6 +2001,7 @@ async def main():
19992001
model_name='gpt-4o',
20002002
timestamp=datetime.datetime(...),
20012003
kind='response',
2004+
vendor_id=None,
20022005
)
20032006
),
20042007
End(data=FinalResult(output='Paris', tool_name=None, tool_call_id=None)),

pydantic_ai_slim/pydantic_ai/direct.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ async def main():
5252
model_name='claude-3-5-haiku-latest',
5353
timestamp=datetime.datetime(...),
5454
kind='response',
55+
vendor_id=None,
5556
)
5657
'''
5758
```
@@ -108,6 +109,7 @@ def model_request_sync(
108109
model_name='claude-3-5-haiku-latest',
109110
timestamp=datetime.datetime(...),
110111
kind='response',
112+
vendor_id=None,
111113
)
112114
'''
113115
```

pydantic_ai_slim/pydantic_ai/messages.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,9 @@ class ModelResponse:
569569
For OpenAI models, this may include 'logprobs', 'finish_reason', etc.
570570
"""
571571

572+
vendor_id: str | None = None
573+
"""Vendor ID as specified by the model provider. This can be used to track the specific request to the model."""
574+
572575
def otel_events(self) -> list[Event]:
573576
"""Return OpenTelemetry events for the response."""
574577
result: list[Event] = []

pydantic_ai_slim/pydantic_ai/models/anthropic.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,7 @@ def _process_response(self, response: AnthropicMessage) -> ModelResponse:
262262
)
263263
)
264264

265-
return ModelResponse(items, usage=_map_usage(response), model_name=response.model)
265+
return ModelResponse(items, usage=_map_usage(response), model_name=response.model, vendor_id=response.id)
266266

267267
async def _process_streamed_response(self, response: AsyncStream[RawMessageStreamEvent]) -> StreamedResponse:
268268
peekable_response = _utils.PeekableAsyncStream(response)

0 commit comments

Comments
 (0)