|
6 | 6 |
|
7 | 7 | Supports multiple providers: openai-compatible, anthropic, bedrock, azure-openai. |
8 | 8 | """ |
| 9 | +import inspect |
9 | 10 | import logging |
10 | 11 | from typing import Optional |
11 | 12 |
|
@@ -148,10 +149,20 @@ def __init__(self, model_name, *, prompt_caching=True, cache_registry_key="", ** |
148 | 149 | def _prompt_caching_active(self) -> bool: |
149 | 150 | return self._prompt_caching_enabled and self._cache_registry_key not in _CACHE_UNSUPPORTED |
150 | 151 |
|
151 | | - async def _map_messages(self, messages, model_request_parameters, *, model_settings=None): |
152 | | - openai_messages = await super()._map_messages( |
153 | | - messages, model_request_parameters, model_settings=model_settings |
154 | | - ) |
| 152 | + async def _map_messages(self, messages, model_request_parameters=None, *, model_settings=None): |
| 153 | + base = OpenAIChatModel._map_messages |
| 154 | + base_params = set(inspect.signature(base).parameters) |
| 155 | + if "model_settings" in base_params: |
| 156 | + openai_messages = await super()._map_messages( |
| 157 | + messages, model_request_parameters, model_settings=model_settings |
| 158 | + ) |
| 159 | + elif "model_request_parameters" in base_params: |
| 160 | + # Intermediate pydantic-ai versions accept request parameters but |
| 161 | + # predate the keyword-only model_settings argument. |
| 162 | + openai_messages = await super()._map_messages(messages, model_request_parameters) |
| 163 | + else: |
| 164 | + # Early pydantic-ai versions accept only messages. |
| 165 | + openai_messages = await super()._map_messages(messages) |
155 | 166 | if self._prompt_caching_active: |
156 | 167 | # Breakpoint 1: last system/developer message (covers tools + system). |
157 | 168 | for message in reversed(openai_messages): |
|
0 commit comments