@@ -349,6 +349,25 @@ async def chat_completions( # type: ignore[override]
349349 )
350350
351351 # Add OpenRouter-specific parameters to the payload
352+ def _normalize_payload_value (value : Any ) -> Any :
353+ if value is None :
354+ return None
355+ if hasattr (value , "model_dump" ) and callable (value .model_dump ):
356+ try :
357+ return value .model_dump (exclude_none = True )
358+ except TypeError :
359+ return value .model_dump ()
360+ if isinstance (value , Mapping ):
361+ return {
362+ key : _normalize_payload_value (val )
363+ for key , val in value .items ()
364+ }
365+ if isinstance (value , list ):
366+ return [_normalize_payload_value (item ) for item in value ]
367+ if isinstance (value , tuple ):
368+ return [_normalize_payload_value (item ) for item in value ]
369+ return value
370+
352371 if domain_request .top_k is not None :
353372 payload ["top_k" ] = domain_request .top_k
354373 if domain_request .seed is not None :
@@ -361,6 +380,50 @@ async def chat_completions( # type: ignore[override]
361380 payload ["frequency_penalty" ] = domain_request .frequency_penalty
362381 if domain_request .presence_penalty is not None :
363382 payload ["presence_penalty" ] = domain_request .presence_penalty
383+ if domain_request .repetition_penalty is not None :
384+ payload ["repetition_penalty" ] = domain_request .repetition_penalty
385+ if domain_request .top_logprobs is not None :
386+ payload ["top_logprobs" ] = domain_request .top_logprobs
387+ if domain_request .min_p is not None :
388+ payload ["min_p" ] = domain_request .min_p
389+ if domain_request .top_a is not None :
390+ payload ["top_a" ] = domain_request .top_a
391+ if domain_request .prediction is not None :
392+ payload ["prediction" ] = _normalize_payload_value (
393+ domain_request .prediction
394+ )
395+ if domain_request .response_format is not None :
396+ payload ["response_format" ] = _normalize_payload_value (
397+ domain_request .response_format
398+ )
399+ if domain_request .transforms :
400+ transforms_value = domain_request .transforms
401+ if isinstance (transforms_value , (list , tuple )):
402+ payload ["transforms" ] = [
403+ _normalize_payload_value (item )
404+ for item in transforms_value
405+ ]
406+ else :
407+ payload ["transforms" ] = [
408+ _normalize_payload_value (transforms_value )
409+ ]
410+ if domain_request .models :
411+ models_value = domain_request .models
412+ if isinstance (models_value , (list , tuple )):
413+ payload ["models" ] = [
414+ _normalize_payload_value (item )
415+ for item in models_value
416+ ]
417+ else :
418+ payload ["models" ] = [
419+ _normalize_payload_value (models_value )
420+ ]
421+ if domain_request .route is not None :
422+ payload ["route" ] = domain_request .route
423+ if domain_request .provider is not None :
424+ payload ["provider" ] = _normalize_payload_value (
425+ domain_request .provider
426+ )
364427
365428 # Handle extra_body from the request (takes precedence)
366429 if hasattr (domain_request , "extra_body" ) and domain_request .extra_body :
0 commit comments