
    j                         d dl mZmZ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mZ eZneZd
Z G d de
      Zy)    )TYPE_CHECKINGAnyDictListOptionalN)verbose_logger)OpenAIResponsesAPIConfig)get_secret_str)!ResponsesAPIOptionalRequestParams)GenericLiteLLMParams)LlmProviders)Loggingzhttps://api.x.ai/v1c                        e Zd ZdZedefd       Zdedef fdZ	de
dededefdZd	eded
ee   defdZdee   d
e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    /Users/manta/Documents/Projects/TheRoad-I1/backend/.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     !7>uE --##N3r   response_api_optional_paramsdrop_paramsc                    t        |      }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       P|j                  |       b ||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. Sets store=false when images are detected (recommended by XAI)
        r   zIXAI Responses API does not support 'instructions' parameter. Dropping it.toolstypecode_interpreterzAXAI: Transforming code_interpreter tool, removing container field)dictr   debugpop
isinstancelistgetappend)r   r    r   r!   params
tools_listtransformed_toolstools           r   map_openai_paramsz'XAIResponsesAPIConfig.map_openai_params4   s     23 V#  [ JJ~& fJj$/(\
+-"dD)dhhv.>BT.T #(([ &,,f6H-IJ%,,T2 # 0F7Or   headerslitellm_paramsc                     |xs
 t               }|j                  xs t        j                  xs t        d      }|st	        d      |j                  dd| i       |S )z
        Validate environment and set up headers for XAI API.
        
        Uses XAI_API_KEY from environment or litellm_params.
        XAI_API_KEYzXXAI API key is required. Set XAI_API_KEY environment variable or pass api_key parameter.AuthorizationzBearer )r   api_keylitellmr
   
ValueErrorupdate)r   r2   r   r3   r7   s        r   validate_environmentz*XAIResponsesAPIConfig.validate_environmenta   st     (A+?+A"" --m, 	 j  	77)!4	

 r   api_basec                     |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
        XAI_API_BASE/z
/responses)r8   r<   r
   r>   rstrip)r   r<   r3   s      r   get_complete_urlz&XAIResponsesAPIConfig.get_complete_url|   sN      n- 	 	 ??3':&&r   )__name__
__module____qualname____doc__propertyr   r   strr*   r   r   boolr   r1   r&   r   r   r;   rA   __classcell__)r   s   @r   r   r      s    
  \         +&G+ + 	+
 
+Z$'9ABV9W	6'3-' ' 
	'r   r   )typingr   r   r   r   r   r8   litellm._loggingr   ,litellm.llms.openai.responses.transformationr	   litellm.secret_managers.mainr
   litellm.types.llms.openair   litellm.types.routerr   litellm.types.utilsr   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjLiteLLMLoggingObjr>   r    r   r   <module>rU      sF    ; ;  + Q 7 G 5 ,X*$|'4 |'r   