Ë
    uPêjë  ã                   ó    — d dl mZmZmZ d dl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 erd dlZd d
lmZ eZneZ G d„ de«      Zy)é    )ÚTYPE_CHECKINGÚAnyÚFinalN)ÚBaseLLMException©ÚOpenAIError©Úget_secret_str)ÚAllMessageValues)ÚModelResponseé   )ÚOpenAIGPTConfig)ÚLoggingc                   óv  ‡ — e Zd ZdZdedefd„Zeddedz  dedz  fd„«       Zeddedz  dedz  fd	„«       Z	eddedz  dedz  fd
„«       Z
dedz  dedz  deedz  edz  f   fd„Zˆ 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ededeej.                  z  defd„Zˆ xZS )ÚClarifaiConfigz€
    Configuration class for Clarifai chat completions.
    Since Clarifai is OpenAI-compatible, we extend OpenAIGPTConfig.
    ÚmodelÚreturnc                 ó
   — g d¢S )zE
        Get the supported OpenAI params for the given model
        )Ú
max_tokensÚmax_completion_tokensÚresponse_formatÚstreamÚtemperatureÚtop_pÚtool_choiceÚtoolsÚpresence_penaltyÚfrequency_penaltyÚstream_options© )Úselfr   s     ún/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/clarifai/chat/transformation.pyÚget_supported_openai_paramsz*ClarifaiConfig.get_supported_openai_params   s   € ò
ð 	
ó    NÚapi_keyc                 ó    — | xs t        d«      S )NÚCLARIFAI_API_KEYr	   )r%   s    r"   Úget_api_keyzClarifaiConfig.get_api_key1   s   € àÒ<œ.Ð);Ó<Ð<r$   Úapi_basec                 ó   — | xs dS )Nú)https://api.clarifai.com/v2/ext/openai/v1r    )r)   s    r"   Úget_api_basezClarifaiConfig.get_api_base5   s   € àÒFÐFÐFr$   c                 óH   — | r | j                  d«      \  }}}d|› d|› d|› �S y )Nú.zhttps://clarifai.com/ú/z/models/)Úsplit)r   Úuser_idÚapp_idÚmodel_ids       r"   Úget_base_modelzClarifaiConfig.get_base_model9   s6   € áØ(-¯©°CÓ(8Ñ%ˆG�V˜XØ*¨7¨)°1°V°H¸HÀXÀJÐOÐOØr$   c                 ó<   — |xs d}|xs t        d«      xs d}||fS )z=
        Get API base and key for Clarifai provider.
        r+   r'   Ú r	   )r!   r)   r%   Údynamic_api_keys       r"   Ú$_get_openai_compatible_provider_infoz3ClarifaiConfig._get_openai_compatible_provider_info@   s0   € ð ÒJÐJˆØ!(Ò!T¬NÐ;MÓ,NÒ!TÐRTˆØ˜Ð(Ð(r$   c                 óT   •— | j                  |«      xs |}t        ‰| �	  |||||«      S ©N)r4   ÚsuperÚtransform_request)r!   r   ÚmessagesÚoptional_paramsÚlitellm_paramsÚheadersÚ	__class__s         €r"   r<   z ClarifaiConfig.transform_requestL   s1   ø€ Ø×#Ñ# EÓ*Ò3¨eˆÜ‰wÑ(¨°¸/È>Ð[bÓcÐcr$   Úraw_responseÚmodel_responseÚlogging_objÚrequest_datar=   r>   r?   Úencodingztiktoken.Encoding | NoneÚ	json_modec                 ó  — |j                  ||
|j                  d|i¬«       	 |j                  «       }t        di |¤Ž}|j                  �
d|z   |_        |S # t        $ r+}t	        |j
                  d|› �|j                  ¬«      |‚d}~ww xY w)z¢
        Transform the Clarifai response to a standard ModelResponse.
        Since Clarifai is OpenAI-compatible, we use OpenAI response transformation.
        Úcomplete_input_dict)Úinputr%   Úoriginal_responseÚadditional_argsz#Failed to parse Clarifai response: ©Ústatus_codeÚmessager@   Nz	clarifai/r    )	Ú	post_callÚtextÚjsonÚ	Exceptionr   rN   r@   r   r   )r!   r   rB   rC   rD   rE   r=   r>   r?   rF   r%   rG   Úcompletion_responseÚeÚresponses                  r"   Útransform_responsez!ClarifaiConfig.transform_responseP   s­   € ð& 	×ÑØØØ*×/Ñ/Ø2°LÐAð	 	ô 	
ð	Ø)5×):Ñ):Ó)<Ðô (Ñ>Ð*=Ñ>ˆà�>‰>Ð%Ø(¨5Ñ0ˆHŒNàˆøô ò 	ÜØ(×4Ñ4Ø=¸a¸SÐAØ$×,Ñ,ôð ð	ûð	ús   £A Á	B
Á&BÂB
Úerror_messagerN   r@   c                 ó   — t        |||¬«      S )z‘
        Get the appropriate error class for Clarifai errors.
        Since Clarifai is OpenAI-compatible, we use OpenAI error handling.
        rM   r   )r!   rX   rN   r@   s       r"   Úget_error_classzClarifaiConfig.get_error_classz   s   € ô
 Ø#Ø!Øô
ð 	
r$   r:   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚlistr#   Ústaticmethodr(   r,   r4   Útupler8   r<   ÚhttpxÚResponser   ÚLiteLLMLoggingObjÚdictr   ÚboolrW   ÚintÚHeadersr   rZ   Ú__classcell__)rA   s   @r"   r   r      s¢  ø„ ñð

°ð 
¸ó 
ð$ ñ=˜S 4™Zð =°3¸±:ò =ó ð=ð ñG˜s T™zð G°S¸4±Zò Gó ðGð ñ˜c D™jð °C¸$±Jò ó ðð
)à˜‘*ð
)ð �t‘ð
)ð 
ˆs�T‰z˜3 ™:Ð%Ñ	&ó	
)ôdð #Ø!%ñ(àð(ð —n‘nð(ð &ð	(ð
 'ð(ð ð(ð Ð'Ñ(ð(ð ð(ð ð(ð -ð(ð �t‘ð(ð ˜$‘;ð(ð 
ó(ðT	
¨Sð 	
¸sð 	
ÈTÐTY×TaÑTaÑMað 	
Ðfv÷ 	
r$   r   )Útypingr   r   r   rc   Ú)litellm.llms.base_llm.chat.transformationr   Ú litellm.llms.openai.common_utilsr   Úlitellm.secret_managers.mainr
   Úlitellm.types.llms.openair   Úlitellm.types.utilsr   Úopenai.chat.gpt_transformationr   ÚtiktokenÚ*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjre   r   r    r$   r"   ú<module>ru      sG   ðß ,Ñ ,ã å FÝ 8Ý 7õõ .å =áÛåXà*ÑàÐôj
�_õ j
r$   