Ë
    uPêj¿$  ã                   ó®   — U d Z ddlmZ ddlmZmZmZmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZ ddlmZ dd	lmZ d
dlmZ defd„Zi Zee   ed<   defd„Zy)zA
Dynamic configuration class generator for JSON-based providers.
é    )Ú	Coroutine)ÚAnyÚFinalÚLiteralÚoverload)Úverbose_logger)Ú3handle_messages_with_content_list_to_str_conversion)ÚOpenAIGPTConfig)ÚOpenAILikeChatConfig)Úget_secret_str)ÚAllMessageValuesé   )ÚSimpleProviderConfigÚproviderc                 óX   ‡ — ‰ j                   dk(  rt        nt        } G ˆ fd„d|«      }|S )z9Generate config class dynamically from JSON configurationÚ
openai_gptc                   ó¢  •‡ — e Zd Zedee   deded   dee	e	ee   f   fd„«       Z
e	 ddee   deded   dee   fd„«       Z
	 ddee   dededee   ee	e	ee   f   z  fˆ ˆfd	„Z
d
edz  dedz  deedz  edz  f   fˆfd„Z	 dd
edz  dedz  dededededz  defˆfd„Zdedefˆ ˆfd„Zdededededef
ˆfd„Zededz  fˆfd„«       Zˆ xZS )ú/create_config_class.<locals>.JSONProviderConfigÚmessagesÚmodelÚis_asyncTÚreturnc                  ó   — y ©N© ©Úselfr   r   r   s       úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/openai_like/dynamic_config.pyÚ_transform_messageszCcreate_config_class.<locals>.JSONProviderConfig._transform_messages   s   € ð ;>ó    Fc                  ó   — y r   r   r   s       r   r   zCcreate_config_class.<locals>.JSONProviderConfig._transform_messages    s   € ð &)r    c                 óœ   •— ‰j                   j                  d«      rt        |«      }|rt        ‰| �  ||d¬«      S t        ‰| �  ||d¬«      S )z3Transform messages based on special_handling configÚconvert_content_list_to_stringT)r   r   r   F)Úspecial_handlingÚgetr	   Úsuperr   )r   r   r   r   Ú	__class__r   s       €€r   r   zCcreate_config_class.<locals>.JSONProviderConfig._transform_messages(   sW   ø€ ð ×(Ñ(×,Ñ,Ð-MÔNÜNÈxÓX�áÜ‘wÑ2¸HÈEÐ\`Ð2ÓaÐaä‘wÑ2¸HÈEÐ\aÐ2ÓbÐbr    Úapi_baseNÚapi_keyc                 ó¤   •— |}|s!‰j                   rt        ‰j                   «      }|s‰j                  }|xs t        ‰j                  «      }||fS )z%Get API base and key from JSON config)Úapi_base_envr   Úbase_urlÚapi_key_env)r   r(   r)   Úresolved_baseÚresolved_keyr   s        €r   Ú$_get_openai_compatible_provider_infozTcreate_config_class.<locals>.JSONProviderConfig._get_openai_compatible_provider_info6   sU   ø€ ð %ˆMÙ  X×%:Ò%:Ü .¨x×/DÑ/DÓ E�Ù Ø (× 1Ñ 1�ð #*Ò"Q¬^¸H×<PÑ<PÓ-QˆLà  ,Ð.Ð.r    Úoptional_paramsÚlitellm_paramsÚstreamc                 ó„   •— |s‰j                   }|€t        d‰j                  › �«      ‚|j                  d«      s|› d�}|S )z'Build complete URL for the API endpointú"api_base is required for provider z/chat/completions)r,   Ú
ValueErrorÚslugÚendswith)r   r(   r)   r   r1   r2   r3   r   s          €r   Úget_complete_urlz@create_config_class.<locals>.JSONProviderConfig.get_complete_urlG   sQ   ø€ ñ Ø#×,Ñ,�àÐÜ Ð#EÀhÇmÁmÀ_Ð!UÓVÐVà×$Ñ$Ð%8Ô9Ø&˜ZÐ'8Ð9�àˆOr    c                 ó>  •— ddl m}m} t        ‰	| �  |¬«      } ||‰
j
                  ¬«      }|sBg d¢}|D ]  }||v sŒ|j                  |«       Œ t        j                  d|‰
j
                  «        ||‰
j
                  ¬«      }|rd|vr|j                  d«       |S )zvGet supported OpenAI params, excluding tool-related params for models
            that don't support function calling.r   )Úsupports_function_callingÚsupports_reasoning)r   )r   Úcustom_llm_provider)ÚtoolsÚtool_choiceÚfunction_callÚ	functionsÚparallel_tool_callsup   Model %s on provider %s does not support function calling â€” removed tool-related params from supported params.Úreasoning_effort)
Úlitellm.utilsr;   r<   r&   Úget_supported_openai_paramsr7   Úremover   ÚdebugÚappend)r   r   r;   r<   Úsupported_paramsÚ_supports_fcÚtool_paramsÚparamÚ_supports_reasoningr'   r   s            €€r   rE   zKcreate_config_class.<locals>.JSONProviderConfig.get_supported_openai_params\   s¹   ø€ ÷ Tä&+¡gÑ&IÐPUÐ&IÓ&VÐá";À%Ð]e×]jÑ]jÔ"kˆLáò&�ð )ò 7�EØÐ 0Ò0Ø(×/Ñ/°Õ6ð7ô ×$Ñ$ð GØØ—M‘Môñ *<À%Ð]e×]jÑ]jÔ)kÐÙ"Ð'9ÐAQÑ'QØ ×'Ñ'Ð(:Ô;à#Ð#r    Únon_default_paramsÚdrop_paramsc                 ó€  •— | j                  |«      }|j                  «       D ]0  \  }}|‰j                  v r||‰j                  |   <   Œ'||v sŒ,|||<   Œ2 d|v rd|d   }‰j                  }	d|	v rt	        ||	d   «      }d|	v rt        ||	d   «      }d|	v r$|j                  dd«      }
|
dkD  r||	d   k  r|	d   }||d<   |S )z(Apply parameter mappings and constraintsÚtemperatureÚtemperature_maxÚtemperature_minÚtemperature_min_with_n_gt_1Únr   )rE   ÚitemsÚparam_mappingsÚconstraintsÚminÚmaxr%   )r   rN   r1   r   rO   rI   rL   ÚvalueÚtemprX   rU   r   s              €r   Úmap_openai_paramszAcreate_config_class.<locals>.JSONProviderConfig.map_openai_params|   s  ø€ ð '+×&FÑ&FÀuÓ&MÐð !3× 8Ñ 8Ó :ò 3‘��uà˜H×3Ñ3Ñ3ØFK�O H×$;Ñ$;¸EÑ$BÒCØÐ.Ò.Ø-2�O EÒ*ð3ð  Ñ/Ø& }Ñ5�Ø%-×%9Ñ%9�ð %¨Ñ3Ü˜t [Ð1BÑ%CÓD�Dð %¨Ñ3Ü˜t [Ð1BÑ%CÓD�Dð 1°KÑ?Ø.×2Ñ2°3¸Ó:�AØ˜1’u ¨Ð4QÑ(RÒ!RØ*Ð+HÑI˜à15� Ñ.à"Ð"r    c                 ó   •— ‰j                   S r   ©r7   ©r   r   s    €r   r=   zCcreate_config_class.<locals>.JSONProviderConfig.custom_llm_provider¦   ó   ø€ à—=‘=Ð r    )Fr   )Ú__name__Ú
__module__Ú__qualname__r   Úlistr   Ústrr   r   r   r   ÚboolÚtupler0   Údictr9   rE   r]   Úpropertyr=   Ú__classcell__)r'   r   s   @€r   ÚJSONProviderConfigr      sï  ù„ Ø	ð	>Ø Ð!1Ñ2ð	>Ø;>ð	>ØJQÐRVÉ-ð	>à�s˜C Ð&6Ñ!7Ð7Ñ8ò	>ó 
ð	>ð 
ð
 (-ñ		)àÐ+Ñ,ð	)ð ð	)ð ˜e‘nð		)ð
 Ð"Ñ#ò	)ó 
ð	)ð RWñ	cØ Ð!1Ñ2ð	cØ;>ð	cØJNð	càÐ"Ñ# i°°S¸$Ð?OÑ:PÐ0PÑ&QÑQö	cð	/Ø $™Jð	/Ø14°t±ð	/à�3˜‘:˜s T™zÐ)Ñ*õ	/ð0 #'ñ	à˜D‘jð	ð ˜4‘Zð	ð ð		ð
 "ð	ð !ð	ð ˜4‘Kð	ð õ	ð*	$°Sð 	$¸Tö 	$ð@(	#à $ð(	#ð "ð(	#ð ð	(	#ð
 ð(	#ð õ(	#ðT 
ð	!¨¨t©ô 	!ó 
ô	!r    rl   )Ú
base_classr
   r   )r   rm   rl   s   `  r   Úcreate_config_classrn      s1   ø€ ð 2:×1DÑ1DÈÒ1T�oÔZn€JöN!˜Zô N!ð` Ðr    Ú_responses_config_cachec                 ó¾   ‡ ‡‡— ‰ j                   t        v rt        ‰ j                      S ddlm} ddlmŠ ddlmŠ  G ˆˆˆ fd„d|«      }|t        ‰ j                   <   |S )zèGenerate a Responses API config class dynamically from JSON configuration.

    Parallel to create_config_class() but for /v1/responses endpoints.
    Classes are cached per provider slug to avoid regeneration on every request.
    r   )ÚOpenAILikeResponsesConfig)ÚResponseInputParam)ÚGenericLiteLLMParamsc                   óž   •‡ — e Zd Zeˆfd„«       ZdededW °dz  defˆˆfd„Zdedz  dedefˆfd	„Zded
eW °z  dedW °dedefˆ ˆfd„Z	ˆ xZ
S )úBcreate_responses_config_class.<locals>.JSONProviderResponsesConfigc                 ó   •— ‰j                   S r   r_   r`   s    €r   r=   zVcreate_responses_config_class.<locals>.JSONProviderResponsesConfig.custom_llm_providerÀ   ra   r    Úheadersr   r2   Nr   c                 óx   •— |xs  ‰«       }|j                   xs t        ‰j                  «      }|rd|› �|d<   |S )NzBearer ÚAuthorization)r)   r   r-   )r   rw   r   r2   r)   rs   r   s        €€r   Úvalidate_environmentzWcreate_responses_config_class.<locals>.JSONProviderResponsesConfig.validate_environmentÄ   sG   ø€ ð ,ÒEÑ/CÓ/EˆNØ+×3Ñ3Ò[´~Àh×FZÑFZÓ7[ˆGÙØ-4°W°IÐ+>�˜Ñ(ØˆNr    r(   c                 óÆ   •— |s/‰j                   rt        ‰j                   «      }|s‰j                  }|€t        d‰j                  › �«      ‚|j                  d«      }|› d�S )Nr5   ú/z
/responses)r+   r   r,   r6   r7   Úrstrip)r   r(   r2   r   s      €r   r9   zScreate_responses_config_class.<locals>.JSONProviderResponsesConfig.get_complete_urlÐ   sg   ø€ ñ
 Ø×(Ò(Ü-¨h×.CÑ.CÓD�HÙØ'×0Ñ0�HàÐÜ Ð#EÀhÇmÁmÀ_Ð!UÓVÐVà—‘ sÓ+ˆHØ�Z˜zÐ*Ð*r    ÚinputÚ$response_api_optional_request_paramsc                 ól   •— ‰j                   j                  d«      rd|d<   t        ‰| �  |||||¬«      S )NÚforce_store_falseFÚstore)r   r~   r   r2   rw   )r$   r%   r&   Útransform_responses_api_request)r   r   r~   r   r2   rw   r'   r   s         €€r   rƒ   zbcreate_responses_config_class.<locals>.JSONProviderResponsesConfig.transform_responses_api_requestá   sK   ø€ ð ×(Ñ(×,Ñ,Ð-@ÔAØ@EÐ4°WÑ=Ü‘7Ñ:ØØØ5YØ-Øð ;ó ð r    )rb   rc   rd   rj   r=   ri   rf   rz   r9   rƒ   rk   )r'   rs   rr   r   s   @€€€r   ÚJSONProviderResponsesConfigru   ¿   s´   ù„ Ø	ó	!ó 
ð	!ð
	àð
	ð ð
	ñ 1°4Ñ7ð	
	ð
 ö
	ð	+à˜D‘jð	+ð !ð	+ð õ		+ð"	àð	ð Ñ+Ñ+ð	ð 37ð		ñ
 1ð	ð ð	ð ÷	ò 	r    r„   )r7   ro   Ú1litellm.llms.openai_like.responses.transformationrq   Úlitellm.types.llms.openairr   Úlitellm.types.routerrs   )r   rq   r„   rs   rr   s   `  @@r   Úcreate_responses_config_classrˆ   °   sY   ú€ ð ‡}�}Ô/Ñ/Ü& x§}¡}Ñ5Ð5õõ =Ý9÷2ð 2Ð&?ô 2ðh .IÔ˜HŸM™MÑ*Ø&Ð&r    N)Ú__doc__Úcollections.abcr   Útypingr   r   r   r   Úlitellm._loggingr   Ú8litellm.litellm_core_utils.prompt_templates.common_utilsr	   Ú+litellm.llms.openai.chat.gpt_transformationr
   Ú,litellm.llms.openai_like.chat.transformationr   Úlitellm.secret_managers.mainr   r†   r   Újson_loaderr   rn   ro   ri   Ú__annotations__rˆ   r   r    r   ú<module>r“      s_   ðòõ &ß 0Ó 0å +õõ HÝ MÝ 7Ý 6å -ðVÐ"6ó Vðr (*Ð ˜˜t™Ó )ðD'Ð,@ô D'r    