Ë
    uPêjŽ  ã                   ó¬   — d Z ddlmZmZ ddlmZmZ ddlZddlm	Z	 ddl
mZ ddlmZmZ ddlmZmZ d	d
lmZ ddlmZ  G d„ de«      Z G d„ de	«      Zy)zŸ
Support for CometAPI's `/v1/chat/completions` endpoint.

Based on OpenAI-compatible API interface implementation
Documentation: [CometAPI Documentation Link]
é    )ÚAsyncIteratorÚIterator)ÚAnyÚFinalN)ÚBaseModelResponseIterator)ÚBaseLLMException)ÚAllMessageValuesÚChatCompletionToolParam)ÚModelResponseÚModelResponseStreamé   )ÚOpenAIGPTConfigé   ©ÚCometAPIExceptionc                   óV  ‡ — e Zd ZdZdededededef
ˆ fd„Z	 dded	ee	   d
ed   dz  de
ee	   ed   dz  f   fˆ fd„Zded	ee	   dedededefˆ fd„Z	 ddedz  dedz  dededededz  defd„Zdededeej                   z  defd„Z	 ddee   ee   z  ez  dededz  defd„Zˆ xZS )ÚCometAPIConfigzè
    CometAPI configuration class, inherits from OpenAIGPTConfig

    Since CometAPI is OpenAI-compatible API, we inherit from OpenAIGPTConfig
    and only need to override necessary methods to handle CometAPI-specific features
    Únon_default_paramsÚoptional_paramsÚmodelÚdrop_paramsÚreturnc                 ó>   •— t         ‰| �  ||||«      }i }|r||d<   |S )zA
        Map OpenAI format parameters to CometAPI format
        Ú
extra_body)ÚsuperÚmap_openai_params)Úselfr   r   r   r   Úmapped_openai_paramsr   Ú	__class__s          €ún/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/cometapi/chat/transformation.pyr   z CometAPIConfig.map_openai_params   s<   ø€ ô ',¡gÑ&?Ð@RÐTcÐejÐlwÓ&xÐð -/ˆ
ñ Ø1;Ð  Ñ.à#Ð#ó    NÚmessagesÚtoolsr
   c                 ó&   •— t         ‰| �  |||«      S )zU
        Remove cache control flags from messages and tools if not supported
        )r   Ú1remove_cache_control_flag_from_messages_and_tools)r   r   r"   r#   r   s       €r    r%   z@CometAPIConfig.remove_cache_control_flag_from_messages_and_tools7   s   ø€ ô ‰wÑHÈÐPXÐZ_Ó`Ð`r!   Úlitellm_paramsÚheadersc                 ót   •— |j                  di «      }t        ‰| �	  |||||«      }|j                  |«       |S )z¥
        Transform the overall request to be sent to the API.

        Returns:
            dict: The transformed request. Sent as the body of the API call.
        r   )Úpopr   Útransform_requestÚupdate)	r   r   r"   r   r&   r'   r   Úresponser   s	           €r    r*   z CometAPIConfig.transform_requestC   sA   ø€ ð ,×/Ñ/°¸bÓAˆ
Ü™'Ñ3°E¸8À_ÐVdÐfmÓnˆØ�‰˜
Ô#Øˆr!   Úapi_baseÚapi_keyÚstreamc                 óü   — |€d}d}|j                  d«      }||v r|S |j                  d«      r|› d|› �S |j                  d«      r|› |› �S |dk(  r|› d|› �S d|j                  dd«      d	   vr|› d|› �S |› d|› �S )
zƒ
        Get the complete URL for the CometAPI call.

        Returns:
            str: The complete URL for the API call.
        zhttps://api.cometapi.com/v1zchat/completionsú/z/v1z/v1/zhttps://api.cometapi.comz//é   éÿÿÿÿ)ÚrstripÚendswithÚsplit)r   r-   r.   r   r   r&   r/   Úendpoints           r    Úget_complete_urlzCometAPIConfig.get_complete_urlV   sÅ   € ð  ÐØ4ˆHØ,ˆð —?‘? 3Ó'ˆð �xÑØˆOð ×Ñ˜UÔ#Ø�Z˜q  
Ð+Ð+Ø×Ñ˜VÔ$Ø�Z ˜zÐ*Ð*àÐ1Ò1Ø�Z˜t H :Ð.Ð.à˜Ÿ™ t¨QÓ/°Ñ3Ñ3Ø�Z˜t H :Ð.Ð.Ø�˜1˜X˜JÐ'Ð'r!   Úerror_messageÚstatus_codec                 ó   — t        |||¬«      S )z6
        Return CometAPI-specific error class
        ©Úmessager:   r'   r   )r   r9   r:   r'   s       r    Úget_error_classzCometAPIConfig.get_error_class~   s   € ô !Ø!Ø#Øô
ð 	
r!   Ústreaming_responseÚsync_streamÚ	json_modec                 ó   — t        |||¬«      S )zE
        Get model response iterator for streaming responses
        )r?   r@   rA   )Ú&CometAPIChatCompletionStreamingHandler)r   r?   r@   rA   s       r    Úget_model_response_iteratorz*CometAPIConfig.get_model_response_iteratorˆ   s   € ô 6Ø1Ø#Øô
ð 	
r!   )N)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚdictÚstrÚboolr   Úlistr	   Útupler%   r*   r8   ÚintÚhttpxÚHeadersr   r>   r   r   r   r   rD   Ú__classcell__)r   s   @r    r   r      s³  ø„ ñð$à ð$ð ð$ð ð	$ð
 ð$ð 
õ$ð: 9=ñ	
aàð
að Ð'Ñ(ð
að Ð-Ñ.°Ñ5ð	
að
 
ˆtÐ$Ñ% tÐ,EÑ'FÈÑ'MÐMÑ	Nõ
aðàðð Ð'Ñ(ðð ð	ð
 ðð ðð 
õð4 #ñ&(à˜‘*ð&(ð �t‘ð&(ð ð	&(ð
 ð&(ð ð&(ð �t‘ð&(ð 
ó&(ðP
¨Sð 
¸sð 
ÈTÐTY×TaÑTaÑMað 
Ðfvó 
ð "'ñ	
à$ S™M¨M¸#Ñ,>Ñ>ÀÑNð
ð ð
ð ˜$‘;ð	
ð
 
÷
r!   r   c                   ó    — e Zd ZdZdedefd„Zy)rC   zB
    Handler for CometAPI streaming chat completion responses
    Úchunkr   c                 óØ  — 	 d|v rF|d   }dj                  |j                  dd«      «      }t        ||j                  dd«      ddi¬	«      ‚g }|d
   D ]8  }d|v r!d|d   v r|d   j                  d«      |d   d<   |j                  |«       Œ: t	        |d   d|d   |j                  d«      |d   |¬«      S # t
        $ r}t        d|› d|› �dddi¬	«      ‚d}~wt        $ r}|‚d}~ww xY w)zA
        Parse individual chunks from streaming response
        ÚerrorzCometAPI Error: {}r=   zUnknown errorÚcodei�  zContent-Typezapplication/jsonr<   ÚchoicesÚdeltaÚ	reasoningÚreasoning_contentÚidzchat.completion.chunkÚcreatedÚusager   )r[   Úobjectr\   r]   r   rW   z
KeyError: z), Got unexpected response from CometAPI: N)ÚformatÚgetr   Úappendr   ÚKeyErrorÚ	Exception)r   rS   Úerror_chunkr9   Únew_choicesÚchoiceÚes          r    Úchunk_parserz3CometAPIChatCompletionStreamingHandler.chunk_parser�   s;  € ð"	à˜%ÑØ%*¨7¡^�Ø';×'BÑ'BÀ;Ç?Á?ÐS\Ð^mÓCnÓ'o�Ü'Ø)Ø +§¡°¸Ó <Ø+Ð-?Ð@ôð ð "$ˆKØ 	Ñ*ò +�à˜fÑ$¨¸¸w¹Ñ)GØ;AÀ'¹?×;NÑ;NÈ{Ó;[�F˜7‘OÐ$7Ñ8Ø×"Ñ" 6Õ*ð	+ô 'Ø˜‘;Ø.Ø˜iÑ(Ø—i‘i Ó(Ø˜G‘nØ#ôð øô ò 	Ü#Ø$ Q CÐ'PÐQVÐPWÐXØØ'Ð);Ð<ôð ûô
 ò 	ØˆGûð	ús$   ‚B4B7 Â7	C)Ã CÃC)Ã"C$Ã$C)N)rE   rF   rG   rH   rI   r   rh   © r!   r    rC   rC   ˜   s   „ ñð& $ð &Ð+>ô &r!   rC   )rH   Úcollections.abcr   r   Útypingr   r   rO   Ú)litellm.llms.base_llm.base_model_iteratorr   Ú)litellm.llms.base_llm.chat.transformationr   Úlitellm.types.llms.openair	   r
   Úlitellm.types.utilsr   r   Úopenai.chat.gpt_transformationr   Úcommon_utilsr   r   rC   ri   r!   r    ú<module>rr      sC   ðñ÷ 4ß ã å OÝ Fß Oß Bå =Ý ,ô
�_ô 
ôD+Ð-Fõ +r!   