
    i0!                         U 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Zi Zeed<   defdZy)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                 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e   f   f   f fd	Z
d
ee   dee   deee   ee   f   ffdZ	 dd
ee   dee   dedededee   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e   ffd       Z xZS )/create_config_class.<locals>.JSONProviderConfigmessagesmodelis_asyncTreturnc                      y N selfr   r   r   s       x/Users/manta/Documents/Projects/TheRoad-I1/.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+   se     ((,,-MNNxXw2%UT 3   w2%UU 3  r#   api_base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_info=   sU     %M X%:%: .x/D/D E  ( 1 1 #JnX5I5I&JL ,..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   r4   r5   r6   r   s          r!   get_complete_urlz@create_config_class.<locals>.JSONProviderConfig.get_complete_urlN   sQ     #,, #Ehmm_!UVV$$%89&Z'89Or#   c                     ddl m} t        |   |      } ||j                        }|sGg d}|D ]  }||v s|j                  |        t        j                  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)toolstool_choicefunction_call	functionsparallel_tool_callszModel z on provider uY    does not support function calling — removed tool-related params from supported params.)litellm.utilsr>   r)   get_supported_openai_paramsr:   remover   debug)	r    r   r>   supported_params_supports_fctool_paramsparamr*   r   s	          r!   rF   zKcreate_config_class.<locals>.JSONProviderConfig.get_supported_openai_paramsc   s     @$wBBO4L   )E 00(//6 ) $$UG= @^ _
 $#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   )rF   itemsparam_mappingsconstraintsminmaxr(   )r    rM   r4   r   rN   rI   rL   valuetemprW   rT   r   s              r!   map_openai_paramszAcreate_config_class.<locals>.JSONProviderConfig.map_openai_params   s     $??F !3 8 8 :uH333FKOH$;$;E$BC..-2OE* !; /&}5&22 %3t[1B%CDD %3t[1B%CDD 1K?'++C3A1u4Q(R!R*+HI15.""r#   c                     j                   S r   r:   r    r   s    r!   r?   zCcreate_config_class.<locals>.JSONProviderConfig.custom_llm_provider       == r#   )Fr   )__name__
__module____qualname__r
   r   r   strr   r   r   r"   boolr	   r   r   r3   dictr<   listrF   r\   propertyr?   __classcell__)r*   r   s   @r!   JSONProviderConfigr      s   		 !12	;>	JQRV-	sC&6!778	 
	
 

 (-		+,	 	 en		
 "#	 
	 RW	 !12	;>	JN	4()9S#tDT?U5U+VVW	$	/$SM	/4<SM	/8C=(3-/0	/0 &*	sm	 c]	 		
 "	 !	 TN	 	*	$S 	$T 	$:(	# $(	# "(	# 	(	#
 (	# (	#T 
	!# 	! 
	!r#   rj   )
base_classr   r   )r   rk   rj   s   `  r!   create_config_classrl      s4    
 $..,>DX Q!Z Q!f r#   _responses_config_cachec                       j                   t        v rt         j                      S ddlm} ddlm  G  fdd|      }|t         j                   <   |S )zGenerate 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)GenericLiteLLMParamsc                   f    e Zd Zefd       ZdededeW     def fdZdee   dedeffdZ	y	)
Bcreate_responses_config_class.<locals>.JSONProviderResponsesConfigc                     j                   S r   r^   r_   s    r!   r?   zVcreate_responses_config_class.<locals>.JSONProviderResponsesConfig.custom_llm_provider   r`   r#   headersr   r5   r   c                 x    |xs         }|j                   xs t        j                        }|rd| |d<   |S )NzBearer Authorization)r,   r   r0   )r    rt   r   r5   r,   rp   r   s        r!   validate_environmentzWcreate_responses_config_class.<locals>.JSONProviderResponsesConfig.validate_environment   sG     ,E/C/EN$,,Tx?S?S0TG-4WI+>(Nr#   r+   c                     |s/j                   rt        j                         }|sj                  }|t        dj                         |j                  d      }| dS )Nr8   /z
/responses)r.   r   r/   r9   r:   rstrip)r    r+   r5   r   s      r!   r<   zScreate_responses_config_class.<locals>.JSONProviderResponsesConfig.get_complete_url   sg    
 ((-h.C.CDH'00H #Ehmm_!UVVs+HZz**r#   N)
ra   rb   rc   rh   r?   rf   rd   r   rw   r<   )rp   r   s   r!   JSONProviderResponsesConfigrr      sk    		! 
	!
	
	 
	 %%9:	
	
 
		+sm	+ !	+ 		+r#   r{   )r:   rm   1litellm.llms.openai_like.responses.transformationro   litellm.types.routerrp   )r   ro   r{   rp   s   `  @r!   create_responses_config_classr~      sQ     }}//&x}}55 : +&?  +D .IHMM*&&r#   N)__doc__typingr   r   r   r   r   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   litellm.types.llms.openair   json_loaderr   rl   rm   rf   __annotations__r~   r   r#   r!   <module>r      sZ    S R R + H M 7 6 -["6 [| !#  "1',@ 1'r#   