o
    ưiL                     @   s   d Z ddlmZmZmZmZ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dZdS )zA
Dynamic configuration class generator for JSON-based providers.
    )Any	CoroutineListLiteralOptionalTupleUnionoverload)verbose_logger)3handle_messages_with_content_list_to_str_conversion)OpenAIGPTConfig)OpenAILikeChatConfig)get_secret_str)AllMessageValues   )SimpleProviderConfigproviderc                    s*    j dkrtnt}G  fddd|}|S )z9Generate config class dynamically from JSON configurationZ
openai_gptc                       st  e Zd Zedee deded dee	e	ee f fddZ
e	ddee deded dee fd	dZ
	ddee dededeee ee	e	ee f f f fd
dZ
dee dee deee ee f ffddZ	ddee dee dedededee deffddZdedef fddZdededededef
fddZedee ffddZ  ZS )z/create_config_class.<locals>.JSONProviderConfigmessagesmodelis_asyncTreturnc                 S      d S N selfr   r   r   r   r   ^/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/openai_like/dynamic_config.py_transform_messages   s   zCcreate_config_class.<locals>.JSONProviderConfig._transform_messagesFc                 S   r   r   r   r   r   r   r   r   "   s   c                    s<   j dr
t|}|rt j||ddS t j||ddS )z3Transform messages based on special_handling configZconvert_content_list_to_stringT)r   r   r   F)Zspecial_handlinggetr   superr   r   	__class__r   r   r   r   +   s   api_baseapi_keyc                    s8   |}|s j rt j }|s j}|pt j}||fS )z%Get API base and key from JSON config)Zapi_base_envr   base_urlZapi_key_env)r   r"   r#   Zresolved_baseZresolved_keyr   r   r   $_get_openai_compatible_provider_info=   s   

zTcreate_config_class.<locals>.JSONProviderConfig._get_openai_compatible_provider_infoNoptional_paramslitellm_paramsstreamc                    s:   |s j }|du rtd j |ds| d}|S )z'Build complete URL for the API endpointNz"api_base is required for provider z/chat/completions)r$   
ValueErrorslugendswith)r   r"   r#   r   r'   r(   r)   r%   r   r   get_complete_urlN   s   


z@create_config_class.<locals>.JSONProviderConfig.get_complete_urlc                    sn   ddl m} t j|d}||jd}|s5g d}|D ]}||v r'|| qtd| dj d |S )	zvGet supported OpenAI params, excluding tool-related params for models
            that don't support function calling.r   )supports_function_calling)r   )r   custom_llm_provider)ZtoolsZtool_choiceZfunction_callZ	functionsZparallel_tool_callszModel z on provider uY    does not support function calling — removed tool-related params from supported params.)Zlitellm.utilsr.   r   get_supported_openai_paramsr+   remover
   debug)r   r   r.   supported_paramsZ_supports_fcZtool_paramsparamr    r   r   r0   c   s   
zKcreate_config_class.<locals>.JSONProviderConfig.get_supported_openai_paramsnon_default_paramsdrop_paramsc                    s   |  |}| D ]\}}| jv r|| j| < q	||v r"|||< q	d|v r`|d } j}	d|	v r9t||	d }d|	v rDt||	d }d|	v r\|dd}
|
dkr\||	d k r\|	d }||d< |S )z(Apply parameter mappings and constraintsZtemperatureZtemperature_maxZtemperature_minZtemperature_min_with_n_gt_1nr   )r0   itemsZparam_mappingsconstraintsminmaxr   )r   r5   r'   r   r6   r3   r4   valuetempr9   r7   r%   r   r   map_openai_paramsz   s(   
	
zAcreate_config_class.<locals>.JSONProviderConfig.map_openai_paramsc                    s    j S r   )r+   )r   r%   r   r   r/      s   zCcreate_config_class.<locals>.JSONProviderConfig.custom_llm_provider)Fr   )__name__
__module____qualname__r	   r   r   strr   r   r   r   boolr   r   r   r&   dictr-   listr0   r>   propertyr/   __classcell__r   r%   )r!   r   JSONProviderConfig   s    	* rH   )
base_classr   r   )r   rI   rH   r   r%   r   create_config_class   s
    rJ   N)__doc__typingr   r   r   r   r   r   r   r	   Zlitellm._loggingr
   Z8litellm.litellm_core_utils.prompt_templates.common_utilsr   Z+litellm.llms.openai.chat.gpt_transformationr   Z,litellm.llms.openai_like.chat.transformationr   Zlitellm.secret_managers.mainr   Zlitellm.types.llms.openair   Zjson_loaderr   rJ   r   r   r   r   <module>   s    (