Ë
    uPêje&  ã                   ó®   — 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	 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mZ d dlmZ d dlmZ  G d„ de«      Zy)é    )ÚAnyÚFinalN)Úverbose_logger)ÚXAI_API_BASE)ÚAuthenticationError)ÚOpenAIResponsesAPIConfig)ÚXAIModelInfo)Úget_secret_str)Ú!ResponsesAPIOptionalRequestParams)ÚXAIWebSearchToolÚXAIXSearchTool)ÚGenericLiteLLMParams)ÚLlmProvidersc                   óò   ‡ — e Zd ZdZedefd„«       Zdedefˆ fd„Z	de
eef   dee
eef   z  fd„Zde
eef   dee
eef   z  fd„Zd	eded
ede
fd„Zde
dededz  de
fd„Zdedz  de
defd„Zdefd„Zˆ xZS )ÚXAIResponsesAPIConfiga­  
    Configuration for XAI's Responses API.

    Inherits from OpenAIResponsesAPIConfig since XAI's Responses API is largely
    compatible with OpenAI's, with a few differences:
    - Does not support the 'instructions' parameter
    - Requires code_interpreter tools to have 'container' field removed
    - Recommends store=false when sending images

    Reference: https://docs.x.ai/docs/api-reference#create-new-response
    Úreturnc                 ó"   — t         j                  S )N)r   ÚXAI©Úselfs    ún/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/xai/responses/transformation.pyÚcustom_llm_providerz)XAIResponsesAPIConfig.custom_llm_provider   s   € ä×ÑÐó    Úmodelc                 óP   •— t         ‰| �  |«      }d|v r|j                  d«       |S )z�
        Get supported parameters for XAI Responses API.

        XAI supports most OpenAI Responses API params except 'instructions'.
        Úinstructions)ÚsuperÚget_supported_openai_paramsÚremove)r   r   Úsupported_paramsÚ	__class__s      €r   r   z1XAIResponsesAPIConfig.get_supported_openai_params!   s4   ø€ ô #(¡'Ñ"EÀeÓ"LÐð Ð-Ñ-Ø×#Ñ# NÔ3àÐr   Útoolc                 ó¢   — ddi}d|v rt        j                  d«       i }d|v r
|d   }||d<   d|v r
|d   }||d<   |r||d<   d|v r|d   |d<   |S )	a!  
        Transform web_search tool to XAI format.

        XAI supports web_search with specific filters:
        - allowed_domains (max 5)
        - excluded_domains (max 5)
        - enable_image_understanding

        XAI does NOT support search_context_size (OpenAI-specific).
        ÚtypeÚ
web_searchÚsearch_context_sizezWXAI does not support 'search_context_size' parameter. Removing it from web_search tool.Úallowed_domainsÚexcluded_domainsÚfiltersÚenable_image_understanding)r   Úinfo)r   r"   Úxai_toolr)   r'   r(   s         r   Ú_transform_web_search_toolz0XAIResponsesAPIConfig._transform_web_search_tool/   sœ   € ð ,2°<Ð*@ˆð ! DÑ(Ü×ÑØiôð
 ˆØ Ñ$Ø%)Ð*;Ñ%<ˆOØ)8ˆGÐ%Ñ&à Ñ%Ø&*Ð+=Ñ&>ÐØ*:ˆGÐ&Ñ'ñ Ø")ˆH�YÑð (¨4Ñ/Ø59Ð:VÑ5WˆHÐ1Ñ2àˆr   c                 ó¦   — ddi}d|v r
|d   }||d<   d|v r
|d   }||d<   d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   d|v r|d   |d<   |S )	aX  
        Transform x_search tool to XAI format.

        XAI supports x_search with specific parameters:
        - allowed_x_handles (max 10)
        - excluded_x_handles (max 10)
        - from_date (ISO8601: YYYY-MM-DD)
        - to_date (ISO8601: YYYY-MM-DD)
        - enable_image_understanding
        - enable_video_understanding
        r$   Úx_searchÚallowed_x_handlesÚexcluded_x_handlesÚ	from_dateÚto_dater*   Úenable_video_understanding© )r   r"   r,   Úallowed_handlesÚexcluded_handless        r   Ú_transform_x_search_toolz.XAIResponsesAPIConfig._transform_x_search_toolV   s·   € ð ,2°:Ð*>ˆð  $Ñ&Ø%)Ð*=Ñ%>ˆOØ,;ˆHÐ(Ñ)ð   4Ñ'Ø&*Ð+?Ñ&@ÐØ-=ˆHÐ)Ñ*ð ˜$ÑØ$(¨Ñ$5ˆH�[Ñ!à˜ÑØ"& y¡/ˆH�YÑð (¨4Ñ/Ø59Ð:VÑ5WˆHÐ1Ñ2à'¨4Ñ/Ø59Ð:VÑ5WˆHÐ1Ñ2àˆr   Úresponse_api_optional_paramsÚdrop_paramsc                 óö  — t        |«      }d|v r&t        j                  d«       |j                  d«       d|v r&t        j                  d«       |j                  d«       d|v �r|d   �r|d   }t	        |t
        «      s|g}g }|D ]ê  }t	        |t         «      rÇ|j                  d«      }|dk(  r)t        j                  d«       |j                  ddi«       ŒR|d	k(  r6t        j                  d
«       |j                  | j                  |«      «       Œ�|dk(  r6t        j                  d«       |j                  | j                  |«      «       ŒÈ|j                  |«       ŒÚ|j                  |«       Œì ||d<   |S )aÇ  
        Map parameters for XAI Responses API.

        Handles XAI-specific transformations:
        1. Drops 'instructions' parameter (not supported)
        2. Transforms code_interpreter tools to remove 'container' field
        3. Transforms web_search tools to XAI format (removes search_context_size, adds filters)
        4. Transforms x_search tools to XAI format
        5. Sets store=false when images are detected (recommended by XAI)
        r   zIXAI Responses API does not support 'instructions' parameter. Dropping it.ÚmetadatazEXAI Responses API does not support 'metadata' parameter. Dropping it.Útoolsr$   Úcode_interpreterzAXAI: Transforming code_interpreter tool, removing container fieldr%   z/XAI: Transforming web_search tool to XAI formatr/   z-XAI: Transforming x_search tool to XAI format)
Údictr   ÚdebugÚpopÚ
isinstanceÚlistÚgetÚappendr-   r8   )	r   r9   r   r:   ÚparamsÚ
tools_listÚtransformed_toolsr"   Ú	tool_types	            r   Úmap_openai_paramsz'XAIResponsesAPIConfig.map_openai_params~   si  € ô  Ð9Ó:ˆð ˜VÑ#Ü× Ñ Ð!lÔmØ�J‰J�~Ô&à˜ÑÜ× Ñ Ð!hÔiØ�J‰J�zÔ"ð �fÒ ¨£Ø ™ˆJä˜j¬$Ô/Ø(˜\�
à24ÐØ"ò 3�Ü˜d¤DÔ)Ø $§¡¨Ó 0�Ià Ð$6Ò6ä&×,Ñ,Ð-pÔqØ)×0Ñ0°&Ð:LÐ1MÕNà" lÒ2ä&×,Ñ,Ð-^Ô_Ø)×0Ñ0°×1PÑ1PÐQUÓ1VÕWà" jÒ0ä&×,Ñ,Ð-\Ô]Ø)×0Ñ0°×1NÑ1NÈtÓ1TÕUð *×0Ñ0°Õ6à%×,Ñ,¨TÕ2ð/3ð2 0ˆF�7‰Oàˆr   ÚheadersÚlitellm_paramsNc                 óŒ  — |xs
 t        «       }t        j                  |j                  d¬«      }|s6ddlm}m}m}  ||j                  «       «      r	  |«       j                  «       }|st        d«      ‚|j                  dd	|› �i«       |S # |$ r1}t        || j                  j                  t        |«      ¬«      |‚d}~ww xY w)
z–
        Validate environment and set up headers for XAI API.

        Uses the shared xAI key resolver with Responses API legacy precedence.
        T©Úlegacy_generic_before_envr   )ÚXAIOAuthAuthenticatorÚXAIOAuthErrorÚshould_use_xai_oauth)r   Úllm_providerÚmessageNzkXAI API key is required. Set api_key, litellm.xai_key, litellm.api_key, XAI_API_KEY, or use_xai_oauth=True.ÚAuthorizationzBearer )r   r	   Úget_api_keyÚapi_keyÚlitellm.llms.xai.oauthrP   rQ   rR   Ú
model_dumpÚget_access_tokenr   r   ÚvalueÚstrÚ
ValueErrorÚupdate)	r   rK   r   rL   rW   rP   rQ   rR   Úexcs	            r   Úvalidate_environmentz*XAIResponsesAPIConfig.validate_environment¾   sÜ   € ð (ÒAÔ+?Ó+AˆÜ×*Ñ*¨>×+AÑ+AÐ]aÔbˆá÷ñ ñ $ N×$=Ñ$=Ó$?Ô@ðÙ3Ó5×FÑFÓH�Gñ ÜðGóð ð
 	�‰à 7¨7¨)Ð!4ðô	
ð
 ˆøð% %ò Ü-Ø#Ø%)×%=Ñ%=×%CÑ%CÜ # C£ôð ð	ûðús   ÁB ÂCÂ,B>Â>CÚapi_basec                 ó  — ddl m}m} t        j                  |j                  d«      d¬«      } ||«      r|s |«       j                  «       }n)|xs% t        j                  xs t        d«      xs t        }|j                  d«      }|› d�S )	z–
        Get the complete URL for XAI Responses API endpoint.

        Returns:
            str: The full URL for the XAI /responses endpoint
        r   )rP   rR   rW   TrN   r   ú/z
/responses)rX   rP   rR   r	   rV   rD   Úget_api_baseÚlitellmra   r
   r   Úrstrip)r   ra   rL   rP   rR   rW   s         r   Úget_complete_urlz&XAIResponsesAPIConfig.get_complete_urlå   s~   € ÷ 	Wä%×1Ñ1°.×2DÑ2DÀYÓ2OÐkoÔpˆÙ Ô/¹Ù,Ó.×;Ñ;Ó=‰HàÒe¤7×#3Ñ#3Òe´~ÀnÓ7UÒeÔYeˆHð —?‘? 3Ó'ˆà�˜:Ð&Ð&r   c                  ó   — y)z7XAI does not support native WebSocket for Responses APIFr5   r   s    r   Úsupports_native_websocketz/XAIResponsesAPIConfig.supports_native_websocketý   s   € àr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úpropertyr   r   r\   rC   r   r?   r   r   r-   r   r8   r   ÚboolrJ   r   r`   rg   ri   Ú__classcell__)r!   s   @r   r   r      s  ø„ ñ
ð ð  \ò  ó ð ð °ð  ¸õ  ð%¨t°C¸°H©~ð %ÐBRÐUYÐZ]Ð_bÐZbÑUcÑBcó %ðN&¨T°#°s°(©^ð &ÀÐQUÐVYÐ[^ÐV^ÑQ_Ñ@_ó &ðP>à&Gð>ð ð>ð ð	>ð
 
ó>ð@%¨Dð %¸ð %ÐNbÐeiÑNið %Ðnró %ðN'à˜‘*ð'ð ð'ð 
ó	'ð0¨4÷ r   r   )Útypingr   r   re   Úlitellm._loggingr   Úlitellm.constantsr   Úlitellm.exceptionsr   Ú,litellm.llms.openai.responses.transformationr   Úlitellm.llms.xai.common_utilsr	   Úlitellm.secret_managers.mainr
   Úlitellm.types.llms.openair   Úlitellm.types.llms.xair   r   Úlitellm.types.routerr   Úlitellm.types.utilsr   r   r5   r   r   ú<module>r|      s8   ðß ã Ý +Ý *Ý 2Ý QÝ 6Ý 7Ý Gß CÝ 5Ý ,ôoÐ4õ or   