Skip to content

Commit 072a123

Browse files
authored
Add extra_body to ModelSettings (#1538)
1 parent d1dd64f commit 072a123

File tree

5 files changed

+18
-0
lines changed

5 files changed

+18
-0
lines changed

pydantic_ai_slim/pydantic_ai/models/anthropic.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ async def _messages_create(
239239
timeout=model_settings.get('timeout', NOT_GIVEN),
240240
metadata=model_settings.get('anthropic_metadata', NOT_GIVEN),
241241
extra_headers={'User-Agent': get_user_agent()},
242+
extra_body=model_settings.get('extra_body'),
242243
)
243244
except APIStatusError as e:
244245
if (status_code := e.status_code) >= 400:

pydantic_ai_slim/pydantic_ai/models/groq.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,7 @@ async def _completions_create(
218218
frequency_penalty=model_settings.get('frequency_penalty', NOT_GIVEN),
219219
logit_bias=model_settings.get('logit_bias', NOT_GIVEN),
220220
extra_headers={'User-Agent': get_user_agent()},
221+
extra_body=model_settings.get('extra_body'),
221222
)
222223
except APIStatusError as e:
223224
if (status_code := e.status_code) >= 400:

pydantic_ai_slim/pydantic_ai/models/openai.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ async def _completions_create(
284284
reasoning_effort=model_settings.get('openai_reasoning_effort', NOT_GIVEN),
285285
user=model_settings.get('openai_user', NOT_GIVEN),
286286
extra_headers={'User-Agent': get_user_agent()},
287+
extra_body=model_settings.get('extra_body'),
287288
)
288289
except APIStatusError as e:
289290
if (status_code := e.status_code) >= 400:
@@ -623,6 +624,7 @@ async def _responses_create(
623624
reasoning=reasoning,
624625
user=model_settings.get('openai_user', NOT_GIVEN),
625626
extra_headers={'User-Agent': get_user_agent()},
627+
extra_body=model_settings.get('extra_body'),
626628
)
627629
except APIStatusError as e:
628630
if (status_code := e.status_code) >= 400:

pydantic_ai_slim/pydantic_ai/settings.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,16 @@ class ModelSettings(TypedDict, total=False):
141141
* Cohere
142142
"""
143143

144+
extra_body: object
145+
"""Extra body to send to the model.
146+
147+
Supported by:
148+
149+
* OpenAI
150+
* Anthropic
151+
* Groq
152+
"""
153+
144154

145155
def merge_model_settings(base: ModelSettings | None, overrides: ModelSettings | None) -> ModelSettings | None:
146156
"""Merge two sets of model settings, preferring the overrides.

tests/models/test_openai.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,7 @@ async def test_request_simple_success(allow_model_requests: None):
176176
'model': 'gpt-4o',
177177
'n': 1,
178178
'extra_headers': {'User-Agent': IsStr(regex=r'pydantic-ai\/.*')},
179+
'extra_body': None,
179180
},
180181
{
181182
'messages': [
@@ -186,6 +187,7 @@ async def test_request_simple_success(allow_model_requests: None):
186187
'model': 'gpt-4o',
187188
'n': 1,
188189
'extra_headers': {'User-Agent': IsStr(regex=r'pydantic-ai\/.*')},
190+
'extra_body': None,
189191
},
190192
]
191193

@@ -559,6 +561,7 @@ async def test_system_prompt_role(
559561
'model': 'gpt-4o',
560562
'n': 1,
561563
'extra_headers': {'User-Agent': IsStr(regex=r'pydantic-ai\/.*')},
564+
'extra_body': None,
562565
}
563566
]
564567

@@ -635,6 +638,7 @@ async def test_image_url_input(allow_model_requests: None):
635638
],
636639
'n': 1,
637640
'extra_headers': {'User-Agent': IsStr(regex=r'pydantic-ai\/.*')},
641+
'extra_body': None,
638642
}
639643
]
640644
)

0 commit comments

Comments
 (0)