11from dataclasses import asdict , dataclass
2- from typing import Literal , cast
2+ from typing import Any , Literal , cast
33
44from openai import AsyncOpenAI
55from openai .types .chat import ChatCompletion , ChatCompletionMessage , ChatCompletionMessageParam
@@ -272,14 +272,15 @@ class ReasoningText(BaseReasoningDetail):
272272
273273
274274OpenRouterReasoningDetail = ReasoningSummary | ReasoningEncrypted | ReasoningText
275+ _reasoning_detail_adapter : TypeAdapter [OpenRouterReasoningDetail ] = TypeAdapter (OpenRouterReasoningDetail )
275276
276277
277278@dataclass (repr = False )
278279class OpenRouterThinkingPart (ThinkingPart ):
279280 """A special ThinkingPart that includes reasoning attributes specific to OpenRouter."""
280281
281282 type : Literal ['reasoning.summary' , 'reasoning.encrypted' , 'reasoning.text' ]
282- index : int
283+ index : int | None
283284 format : Literal ['unknown' , 'openai-responses-v1' , 'anthropic-claude-v1' , 'xai-responses-v1' ]
284285
285286 __repr__ = _utils .dataclasses_no_defaults_repr
@@ -317,7 +318,7 @@ def from_reasoning_detail(cls, reasoning: OpenRouterReasoningDetail, provider_na
317318 )
318319
319320 def into_reasoning_detail (self ):
320- return TypeAdapter ( OpenRouterReasoningDetail ) .validate_python (asdict (self )).model_dump ()
321+ return _reasoning_detail_adapter .validate_python (asdict (self )).model_dump ()
321322
322323
323324class OpenRouterCompletionMessage (ChatCompletionMessage ):
@@ -368,7 +369,7 @@ def _openrouter_settings_to_openai_settings(model_settings: OpenRouterModelSetti
368369 Returns:
369370 An 'OpenAIChatModelSettings' object with equivalent settings.
370371 """
371- extra_body = model_settings .get ('extra_body' , {})
372+ extra_body = cast ( dict [ str , Any ], model_settings .get ('extra_body' , {}) )
372373
373374 if models := model_settings .pop ('openrouter_models' , None ):
374375 extra_body ['models' ] = models
@@ -379,7 +380,9 @@ def _openrouter_settings_to_openai_settings(model_settings: OpenRouterModelSetti
379380 if transforms := model_settings .pop ('openrouter_transforms' , None ):
380381 extra_body ['transforms' ] = transforms
381382
382- return OpenAIChatModelSettings (** model_settings , extra_body = extra_body )
383+ model_settings ['extra_body' ] = extra_body
384+
385+ return OpenAIChatModelSettings (** model_settings ) # type: ignore[reportCallIssue]
383386
384387
385388class OpenRouterModel (OpenAIChatModel ):
@@ -463,6 +466,6 @@ async def _map_messages(self, messages: list[ModelMessage]) -> list[ChatCompleti
463466 if reasoning_details := [
464467 part .into_reasoning_detail () for part in message .parts if isinstance (part , OpenRouterThinkingPart )
465468 ]:
466- openai_message ['reasoning_details' ] = reasoning_details
469+ openai_message ['reasoning_details' ] = reasoning_details # type: ignore[reportGeneralTypeIssues]
467470
468471 return openai_messages
0 commit comments