
    h                         d Z ddlmZmZmZmZmZmZ ddlZddl	m
Z
 ddlmZmZ ddlmZ ddlmZ er	dd	lmZ eZneZ G d
 de      Zy)z,
OpenAI-like chat completion transformation
    )TYPE_CHECKINGAnyListOptionalTupleUnionNget_secret_str)AllMessageValuesChatCompletionAssistantMessage)ModelResponse   )OpenAIGPTConfig)Loggingc                   p    e Zd Zdee   dee   deee   ee   f   fdZedede	defd       Z
eded	ej                  d
ede	dededee   deeef   dedee	   dee   dee   defd       Z	 	 ddedej                  d
edededee   dedededee   dee	   defdZ	 ddededede	de	def fdZ xZS )OpenAILikeChatConfigapi_baseapi_keyreturnc                 N    |xs t        d      }|xs t        d      xs d}||fS )NOPENAI_LIKE_API_BASEOPENAI_LIKE_API_KEY r	   )selfr   r   dynamic_api_keys       h/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/openai_like/chat/transformation.py$_get_openai_compatible_provider_infoz9OpenAILikeChatConfig._get_openai_compatible_provider_info   s9    
 E~.DEB~&;<B 	 ((    message	json_modec                     |s| S | j                  d      }|t        |      dk7  r| S |d   d   j                  d      xs d| d<   d| d<   | S )	a  
        if json_mode is true, convert the returned tool call response to a content with json str

        e.g. input:

        {"role": "assistant", "tool_calls": [{"id": "call_5ms4", "type": "function", "function": {"name": "json_tool_call", "arguments": "{"key": "question", "value": "What is the capital of France?"}"}}]}

        output:

        {"role": "assistant", "content": "{"key": "question", "value": "What is the capital of France?"}"}
        
tool_callsN   r   function	argumentsr   content)getlen)r   r    _tool_callss      r   +_json_mode_convert_tool_response_to_messagez@OpenAILikeChatConfig._json_mode_convert_tool_response_to_message#   sc     Nkk,/#k"2a"7N(^J7;;KHNB	 $r   modelresponsemodel_responsestreamlogging_objoptional_paramsdatamessagescustom_llm_provider
base_modelc                 2   |j                         }|j                  |d|d|i       |r4|d   D ],  }t        j                  |j	                  d      |      }||d<   . t        di |}||dz   |j                  xs dz   |_        |||j                  d<   |S )	Nr   complete_input_dict)inputr   original_responseadditional_argschoicesr   /r+    )json	post_callr   r*   r'   r   r+   _hidden_params)r+   r,   r-   r.   r/   r0   r   r1   r2   print_verboseencodingr    r3   r4   response_jsonchoicer   returned_responses                     r   _transform_responsez(OpenAILikeChatConfig._transform_response?   s    " !+2D9	 	 	
 '	2(TT

9-y 
 %,y! 3 *:M:*#c)->-D-D-JK # !8B,,W5  r   raw_responserequest_datalitellm_paramsrA   c                 h    t         j                  ||||j                  dd      |||
||d d |d d       S )Nr.   F)r+   r,   r-   r.   r/   r0   r   r1   r2   r@   rA   r    r3   r4   )r   rE   r'   )r   r+   rF   r-   r/   rG   r2   r0   rH   rA   r   r    s               r   transform_responsez'OpenAILikeChatConfig.transform_responsel   sS     $77!)"&&x7#+ $ 8 
 	
r   non_default_paramsdrop_params-replace_max_completion_tokens_with_max_tokensc                 l    t         |   ||||      }d|v r|r|d   |d<   |j                  dd        |S )Nmax_completion_tokens
max_tokens)supermap_openai_paramspop)r   rK   r0   r+   rL   rM   mapped_params	__class__s          r   rR   z&OpenAILikeChatConfig.map_openai_params   sV     1
 $'99=*<'+M,' 5t<r   )NN)T)__name__
__module____qualname__r   strr   r   staticmethodr   boolr*   httpxResponser   LiteLLMLoggingObjdictr   r   rE   r   r   rJ   rR   __classcell__)rU   s   @r   r   r      s   	)3-	) #	) 
x}hsm+	,		) /<@	' 6 *!*!..*! &*! 	*!
 '*! *! #*! D#I*! *! D>*! &c]*! SM*! 
*! *!n "&$(

 nn
 &	

 '
 
 '(
 
 
 
 #
 D>
 

J ?C   	
  8< 
 r   r   )__doc__typingr   r   r   r   r   r   r\   litellm.secret_managers.mainr
   litellm.types.llms.openair   r   litellm.types.utilsr   openai.chat.gpt_transformationr   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr^   r   r<   r   r   <module>ri      sB    D C  7 V - =X*H? Hr   