
    ^h                     ~    S r SSKJrJr  SSKrSSKJr  SSKJr  SSKJ	r	J
r
  SSKJrJrJr  SS	KJr   " S
 S\5      rg)a  
Support for o1 model family 

https://platform.openai.com/docs/guides/reasoning

Translations handled by LiteLLM:
- modalities: image => drop param (if user opts in to dropping param)  
- role: system ==> translate to role 'user' 
- streaming => faked by LiteLLM 
- Tools, response_format =>  drop param (if user opts in to dropping param) 
- Logprobs => drop param (if user opts in to dropping param) 
    )ListOptionalN)verbose_logger)get_llm_provider)AllMessageValuesChatCompletionUserMessage)supports_function_callingsupports_response_schemasupports_system_messages   )OpenAIGPTConfigc            	          ^  \ rS rSrSr\U 4S j5       r SS\S\\	   S\\   S\	4S jjr
S\S\4U 4S	 jjrS
\S\S\S\	4U 4S jjrS\S\	4S jrS\\   S\S\\   4S jrSrU =r$ )OpenAIO1Config   z>
Reference: https://platform.openai.com/docs/guides/reasoning
c                     > [         TU ]  5       $ N)super
get_config)cls	__class__s    d/home/james-whalen/.local/lib/python3.13/site-packages/litellm/llms/openai/chat/o1_transformation.pyr   OpenAIO1Config.get_config"   s    w!##    modelstreamcustom_llm_providerreturnc                 8    USLa  gSS/nU H
  nXQ;   d  M
    g   g)NTFzo1-miniz
o1-preview )selfr   r   r   supported_stream_modelssupported_models         r   should_fake_stream!OpenAIO1Config.should_fake_stream&   s2     #,l";6O'  7 r   c                   > [         T
U ]  US9n/ SQn [        US9u  ppV[        X5      n[        X5      nU(       dU  UR                  S5        UR                  S5        UR                  S5        UR                  S	5        UR                  S
5        U(       d  UR                  S5        U V	s/ s H  oU;  d  M
  U	PM     sn	$ ! [         a    [        R
                  " SU S35        Sn Nf = fs  sn	f )z6
Get the supported OpenAI params for the given model

)r   )logprobstop_ppresence_penaltyfrequency_penaltytop_logprobsz)Unable to infer model provider for model=z3, defaulting to openai for o1 supported param checkopenaitoolstool_choiceparallel_tool_callsfunction_call	functionsresponse_format)	r   get_supported_openai_paramsr   	Exceptionr   debugr	   r
   append)r    r   all_openai_paramsnon_supported_paramsr   api_baseapi_key_supports_function_calling_supports_response_schemaparamr   s             r   r2   *OpenAIO1Config.get_supported_openai_params4   s    "G?e?L 
	+<L=9E &?&
" %=U$X!) ''0 ''6 ''(=> ''8 ''4( ''(9:  1
0eAU4UE0
 	
+  	+  ;E7Buv #+		+*
s   C .	C0;C0&C-,C-non_default_paramsoptional_paramsdrop_paramsc                 .  > SU;   a  UR                  S5      US'   SU;   ae  UR                  S5      nUbQ  US:X  a  XRS'   OF[        R                  SL d  USL a  O-[        R                  R	                  SR                  U5      SS9e[        TU ]  XX45      $ )	N
max_tokensmax_completion_tokenstemperaturer   TzuO-1 doesn't support temperature={}. To drop unsupported openai params from the call, set `litellm.drop_params = True`i  )messagestatus_code)poplitellmr@   utilsUnsupportedParamsErrorformatr   _map_openai_params)r    r>   r?   r   r@   temperature_valuer   s         r   map_openai_params OpenAIO1Config.map_openai_params`   s     --7I7M7M8O34 ..1C1G1G1V ,$)5FM2 **d2kT6I%mmBB %\  %c  %c 1% ),	 C   w)
 	
r   c                 :    U[         R                  ;   a  SU;   a  gg)No1TF)rH   open_ai_chat_completion_models)r    r   s     r   is_model_o1_reasoning_model*OpenAIO1Config.is_model_o1_reasoning_model   s    G:::tu}r   messagesc                     [        US5      n[        U5       H*  u  pEUS   S:X  d  M  U(       a  M  [        US   SS9nXaU'   M,     U$ )z
Handles limitations of O-1 model family.
- modalities: image => drop param (if user opts in to dropping param)
- role: system ==> translate to role 'user'
r+   rolesystemcontentuser)rY   rW   )r   	enumerater   )r    rU   r   _supports_system_messagesirE   new_messages          r   _transform_messages"OpenAIO1Config._transform_messages   sX     %=UH$M!#H-JAv(*3L3L7#I.V * . r   r   r   )__name__
__module____qualname____firstlineno____doc__classmethodr   strr   boolr#   listr2   dictrN   rS   r   r   r_   __static_attributes____classcell__)r   s   @r   r   r      s     $ $ .2	  &c]	
 
*
 *
 *
X
 
 
 	

 
@  
-.7:		 r   r   )re   typingr   r   rH   r   1litellm.litellm_core_utils.get_llm_provider_logicr   litellm.types.llms.openair   r   litellm.utilsr	   r
   r   gpt_transformationr   r   r   r   r   <module>rr      s8    "  " N Q  0x_ xr   