
    hP.                         d dl mZmZmZmZmZmZ d dlZd dlZd dl	m
Z
 d dlmZ d dlmZ d dl d dl 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 G d de      Zy)    )TYPE_CHECKINGAnyDictOptionalUnioncastN)verbose_logger)BaseResponsesAPIConfig)get_secret_str)*)GenericLiteLLMParams   )OpenAIError)_safe_convert_created_field)Loggingc                   J   e Zd ZdedefdZdedededefdZ	dede
eef   ded	ed
edefdZdedej                   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dedededefdZededefd       Z	 d'dee   dee   dee   defdZdeded	ed
edeeef   f
dZdej                   dedefdZ deded	ed
edeeef   f
dZ!dej                   dedefdZ"	 	 	 	 	 d(deded	ed
edee   d ee   d!ee#e      d"e$d#e%d$   deeef   fd%Z&dej                   dedefd&Z'y))OpenAIResponsesAPIConfigmodelreturnc                 
    g dS )z?
        All OpenAI Responses API params are supported
        )inputr   includeinstructionsmax_output_tokensmetadataparallel_tool_callsprevious_response_id	reasoningstore
backgroundstreamprompttemperaturetexttool_choicetoolstop_p
truncationuserextra_headersextra_query
extra_bodytimeout )selfr   s     h/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/llms/openai/responses/transformation.pyget_supported_openai_paramsz4OpenAIResponsesAPIConfig.get_supported_openai_params   s    
 	
    response_api_optional_paramsdrop_paramsc                     t        |      S )z:No mapping applied since inputs are in OpenAI spec already)dict)r/   r3   r   r4   s       r0   map_openai_paramsz*OpenAIResponsesAPIConfig.map_openai_params8   s     011r2   r   $response_api_optional_request_paramslitellm_paramsheadersc                 0    t        t        d||d|      S )z<No transform applied since inputs are in OpenAI spec already)r   r   r.   )r6   ResponsesAPIRequestParams)r/   r   r   r8   r9   r:   s         r0   transform_responses_api_requestz8OpenAIResponsesAPIConfig.transform_responses_api_requestA   s+     % 5,P
 	
r2   raw_responselogging_objc                     	 |j                         }t        |d         |d<   t        di |S # t        $ r" t        |j                  |j
                        w xY w)z=No transform applied since outputs are in OpenAI spec already
created_atmessagestatus_coder.   )jsonr   	Exceptionr   r$   rD   ResponsesAPIResponse)r/   r   r>   r?   raw_response_jsons        r0   transform_response_api_responsez8OpenAIResponsesAPIConfig.transform_response_api_responseP   sm    	 , 1 1 3.IJ[\hJi.jl+
 $8&788	  	$))|7O7O 	s	   !. +Ac                     |xs
 t               }|j                  xs/ t        j                  xs t        j                  xs t	        d      }|j                  dd| i       |S )NOPENAI_API_KEYAuthorizationzBearer )r   api_keylitellm
openai_keyr   update)r/   r:   r   r9   rM   s        r0   validate_environmentz-OpenAIResponsesAPIConfig.validate_environment`   sp     (A+?+A"" 00!!0 ./	 	 	77)!4	

 r2   api_basec                     |xs. t         j                  xs t        d      xs t        d      xs d}|j                  d      }| dS )z;
        Get the endpoint for OpenAI responses API
        OPENAI_BASE_URLOPENAI_API_BASEzhttps://api.openai.com/v1/z
/responses)rN   rR   r   rstrip)r/   rR   r9   s      r0   get_complete_urlz)OpenAIResponsesAPIConfig.get_complete_urlq   s_      ++/0+ /0+ + 	 ??3':&&r2   parsed_chunkc                     t        j                  d|       t        |j                  d            }t        j                  |      } |di |S )zb
        Transform a parsed streaming response chunk into a ResponsesAPIStreamingResponse
        zRaw OpenAI Chunk=%stype)
event_typer.   )r	   debugstrgetr   get_event_model_class)r/   r   rY   r?   r\   event_pydantic_models         r0   transform_streaming_responsez5OpenAIResponsesAPIConfig.transform_streaming_response   sT     	2LA))&12
7MM!  N  
 $3l33r2   r\   c                    i t         j                  t        t         j                  t        t         j
                  t        t         j                  t        t         j                  t        t         j                  t        t         j                  t        t         j                  t         t         j"                  t$        t         j&                  t(        t         j*                  t,        t         j.                  t0        t         j2                  t4        t         j6                  t8        t         j:                  t<        t         j>                  t@        t         jB                  tD        t         jF                  tH        t         jJ                  tL        t         jN                  tP        t         jR                  tT        t         jV                  tX        t         jZ                  t\        i}|j_                  ta        t         |             }|stb        S |S )a8  
        Returns the appropriate event model class based on the event type.

        Args:
            event_type (str): The type of event from the response chunk

        Returns:
            Any: The corresponding event model class

        Raises:
            ValueError: If the event type is unknown
        )2ResponsesAPIStreamEventsRESPONSE_CREATEDResponseCreatedEventRESPONSE_IN_PROGRESSResponseInProgressEventRESPONSE_COMPLETEDResponseCompletedEventRESPONSE_FAILEDResponseFailedEventRESPONSE_INCOMPLETEResponseIncompleteEventOUTPUT_ITEM_ADDEDOutputItemAddedEventOUTPUT_ITEM_DONEOutputItemDoneEventCONTENT_PART_ADDEDContentPartAddedEventCONTENT_PART_DONEContentPartDoneEventOUTPUT_TEXT_DELTAOutputTextDeltaEventOUTPUT_TEXT_ANNOTATION_ADDEDOutputTextAnnotationAddedEventOUTPUT_TEXT_DONEOutputTextDoneEventREFUSAL_DELTARefusalDeltaEventREFUSAL_DONERefusalDoneEventFUNCTION_CALL_ARGUMENTS_DELTAFunctionCallArgumentsDeltaEventFUNCTION_CALL_ARGUMENTS_DONEFunctionCallArgumentsDoneEventFILE_SEARCH_CALL_IN_PROGRESSFileSearchCallInProgressEventFILE_SEARCH_CALL_SEARCHINGFileSearchCallSearchingEventFILE_SEARCH_CALL_COMPLETEDFileSearchCallCompletedEventWEB_SEARCH_CALL_IN_PROGRESSWebSearchCallInProgressEventWEB_SEARCH_CALL_SEARCHINGWebSearchCallSearchingEventWEB_SEARCH_CALL_COMPLETEDWebSearchCallCompletedEventERROR
ErrorEventr_   r   GenericEvent)r\   event_modelsmodel_classs      r0   r`   z.OpenAIResponsesAPIConfig.get_event_model_class   s   
$557K
$99;R
 %779O
 %446I	

 %88:Q
 %668L
 %557J
 %779N
 %668L
 %668L
 %AACa
 %557J
 %224E
 %113C
 %BBDc
  %AACa!
" %AAC`#
$ %??A]$??A]$@@B^$>>@[$>>@[$**J/
4 #&&t,Dj'QRr2   Nr!   custom_llm_providerc                     |dury|'	 t         j                  j                  ||      du ry	 yy# t        $ r"}t	        j
                  d|        Y d }~yd }~ww xY w)NTF)r   r   z6Error getting model info in OpenAIResponsesAPIConfig: )rN   utilssupports_native_streamingrF   r	   r]   )r/   r   r!   r   es        r0   should_fake_streamz+OpenAIResponsesAPIConfig.should_fake_stream   s     MM;;#,? <  	   	  $$LQCP  	s   #0 	AAAresponse_idc                     | d| }i }||fS )z
        Transform the delete response API request into a URL and data

        OpenAI API expects the following request
        - DELETE /v1/responses/{response_id}
        rV   r.   r/   r   rR   r9   r:   urldatas          r0   %transform_delete_response_api_requestz>OpenAIResponsesAPIConfig.transform_delete_response_api_request   #     
!K=)Dyr2   c                     	 |j                         }t        di |S # t        $ r" t        |j                  |j                        w xY w)zX
        Transform the delete response API response into a DeleteResponseResult
        rB   r.   )rE   rF   r   r$   rD   DeleteResponseResultr/   r>   r?   rH   s       r0   &transform_delete_response_api_responsez?OpenAIResponsesAPIConfig.transform_delete_response_api_response   V    	 , 1 1 3
 $8&788	  	$))|7O7O 		    +Ac                     | d| }i }||fS )z
        Transform the get response API request into a URL and data

        OpenAI API expects the following request
        - GET /v1/responses/{response_id}
        rV   r.   r   s          r0   "transform_get_response_api_requestz;OpenAIResponsesAPIConfig.transform_get_response_api_request  r   r2   c                     	 |j                         }t        di |S # t        $ r" t        |j                  |j                        w xY w)zU
        Transform the get response API response into a ResponsesAPIResponse
        rB   r.   )rE   rF   r   r$   rD   rG   r   s       r0   #transform_get_response_api_responsez<OpenAIResponsesAPIConfig.transform_get_response_api_response  r   r   afterbeforer   limitorder)ascdescc
                     | d| d}
i }|||d<   |||d<   |rdj                  |      |d<   |||d<   |	|	|d<   |
|fS )	NrV   z/input_itemsr   r   ,r   r   r   )join)r/   r   rR   r9   r:   r   r   r   r   r   r   paramss               r0   "transform_list_input_items_requestz;OpenAIResponsesAPIConfig.transform_list_input_items_request(  sx     
!K=5!##F7O%F8 # 1F9#F7O#F7OF{r2   c                     	 |j                         S # t        $ r" t        |j                  |j                        w xY w)NrB   )rE   rF   r   r$   rD   )r/   r>   r?   s      r0   #transform_list_input_items_responsez<OpenAIResponsesAPIConfig.transform_list_input_items_responseB  sC    
	$$&& 	$))|7O7O 	s    +=)N)NNN   r   )(__name__
__module____qualname__r^   listr1   !ResponsesAPIOptionalRequestParamsboolr   r7   r   ResponseInputParamr   r6   r=   httpxResponseLiteLLMLoggingObjrG   rI   r   rQ   rX   ResponsesAPIStreamingResponserb   staticmethodr   r`   r   Tupler   r   r   r   r   ListintLiteralr   r   r.   r2   r0   r   r      s   
 
 
>2&G2 2 	2
 
2

 S,,-
 /3	

 -
 
 

99 nn9 '	9
 
9 $'9ABV9W	"'3-' ' 
	'*44 4 '	4
 
'4" +# +# + +b .2	}  &c]	
 
6  -	
  
sDy	"9nn9 '9 
	9&  -	
  
sDy	"9nn9 '9 
	92  $ $'+(.  -	
  }  $s)$  }% 
sDy	4
nn
 '
 
	
r2   r   )typingr   r   r   r   r   r   r   rN   litellm._loggingr	   .litellm.llms.base_llm.responses.transformationr
   litellm.secret_managers.mainr   litellm.types.llms.openailitellm.types.responses.mainlitellm.types.routerr   common_utilsr   Flitellm.litellm_core_utils.llm_response_utils.convert_dict_to_responser   *litellm.litellm_core_utils.litellm_loggingr   _LiteLLMLoggingObjr   r   r.   r2   r0   <module>r      sJ    B B   + Q 7 ' * 5 & nX*t5 tr2   