Ë
    uPêj¬  ã                   ó�   — d Z ddl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Z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ÚFinalN©Úget_secret_str)ÚAllMessageValuesÚChatCompletionAssistantMessage)ÚModelResponseé   )ÚOpenAIGPTConfig)ÚLoggingc                   ó†  ‡ — e Zd Zdedz  dedz  deedz  edz  f   fd„Zedededefd„«       Z	ed	e
de
fd
„«       Zededej                  dededede
dedz  de
ez  dededz  dedz  dedz  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ddedz  dedz  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_baseNÚ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       úq/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/openai_like/chat/transformation.pyÚ$_get_openai_compatible_provider_infoz9OpenAILikeChatConfig._get_openai_compatible_provider_info   s4   € ð
 ÒEœ~Ð.DÓEˆØ!ÒP¤^Ð4IÓ%JÒPÈ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à$Ÿ[™[¨Ó6ˆàÐ¤# kÓ"2°aÒ"7ØˆNà(¨™^¨JÑ7×;Ñ;¸KÓHÒNÈBˆ�	ÑØ $ˆ�Ñàˆr   Úresponse_jsonc                 óº   — d| v rVt        | j                  d«      t        «      r7| d   }|j                  «       D ]  \  }}|j	                  d«      sŒ|�Œd||<   Œ! | S )a	  
        Checks for a 'usage' object in the response and replaces any None token values with 0.
        This enforces OpenAI compatibility for providers that might return null.

        This method is future-proof and sanitizes any key ending in '_tokens'.
        ÚusageÚ_tokensr   )Ú
isinstancer$   ÚdictÚitemsÚendswith)r(   r*   ÚkeyÚvalues       r   Ú_sanitize_usage_objz(OpenAILikeChatConfig._sanitize_usage_obj?   sd   € ð �mÑ#¬
°=×3DÑ3DÀWÓ3MÌtÔ(TØ(¨Ñ1ˆEà#Ÿk™k›mò #‘
��Uà—<‘< 	Õ*¨u©}Ø!"�E˜#’Jð#ð Ðr   ÚmodelÚresponseÚmodel_responseÚstreamÚlogging_objÚoptional_paramsÚdataÚmessagesÚcustom_llm_providerÚ
base_modelc                 ó\  — |j                  «       }|j                  |d|d|i¬«       t        j                  |«      }|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   ú/r3   © )	ÚjsonÚ	post_callr   r2   r'   r$   r
   r3   Ú_hidden_params)r3   r4   r5   r6   r7   r8   r   r9   r:   Úprint_verboseÚencodingr   r;   r<   r(   Úchoicer   Úreturned_responses                     r   Ú_transform_responsez(OpenAILikeChatConfig._transform_responseP   sÙ   € ð" !Ÿ™›ˆØ×ÑØØØ+Ø2°DÐ9ð	 	ô 	
ô -×@Ñ@ÀÓOˆáØ'¨	Ñ2ò ,�Ü.×ZÑZØ—J‘J˜yÓ)¨9ó�ð %,��yÒ!ð	,ô $1Ñ#A°=Ñ#AÐàÐ*Ø&9¸CÑ&?ÐCT×CZÑCZÒC`Ð^`Ñ&aÐÔ#àÐ!Ø8BÐ×,Ñ,¨WÑ5Ø Ð r   Úraw_responseÚrequest_dataÚlitellm_paramsrI   ztiktoken.Encoding | Nonec                 óh   — t         j                  ||||j                  dd«      |||
||d d |d d ¬«      S )Nr6   F)r3   r4   r5   r6   r7   r8   r   r9   r:   rH   rI   r   r;   r<   )r   rL   r$   )r   r3   rM   r5   r7   rN   r:   r8   rO   rI   r   r   s               r   Útransform_responsez'OpenAILikeChatConfig.transform_response|   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   rR   r8   r3   rS   rT   Úmapped_paramsÚ	__class__s          €r   rY   z&OpenAILikeChatConfig.map_openai_params›   sT   ø€ ô  %™wÑ8Ð9KÈ_Ð^cÐepÓqˆØ"Ð&8Ñ8Ñ=jØ*<Ø'ñ+ˆM˜,Ñ'ð ×ÑÐ5°tÔ<àÐr   )NN)T)Ú__name__Ú
__module__Ú__qualname__ÚstrÚtupler   Ústaticmethodr	   Úboolr'   r-   r2   ÚhttpxÚResponser
   ÚLiteLLMLoggingObjÚlistrL   r   rQ   rY   Ú__classcell__)r\   s   @r   r   r      s  ø„ ð)à˜‘*ð)ð �t‘ð)ð 
ˆs�T‰z˜3 ™:Ð%Ñ	&ó	)ð ðØ/ðØ<@ðà	'òó ðð6 ð¨4ð °Dò ó ðð  ð)!Øð)!à—.‘.ð)!ð &ð)!ð ð	)!ð
 'ð)!ð ð)!ð �t‘ð)!ð �S‰jð)!ð ð)!ð ˜$‘;ð)!ð ! 4™Zð)!ð ˜$‘Jð)!ð 
ò)!ó ð)!ðl #Ø!%ñ
àð
ð —n‘nð
ð &ð	
ð
 'ð
ð ð
ð Ð'Ñ(ð
ð ð
ð ð
ð -ð
ð �t‘ð
ð ˜$‘;ð
ð 
ó
ðJ ?Cñà ðð ðð ð	ð
 ðð 8<ðð 
÷ñ r   r   )Ú__doc__Útypingr   r   r   rd   Úlitellm.secret_managers.mainr   Úlitellm.types.llms.openair   r	   Úlitellm.types.utilsr
   Úopenai.chat.gpt_transformationr   ÚtiktokenÚ*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjrf   r   rD   r   r   ú<module>rr      sD   ðñ÷ -Ñ ,ã å 7ß VÝ -å =áÛåXà*ÑàÐôQ˜?õ Qr   