o
    ưiT                     @   s   d dl Z d dlmZ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 d dlmZ ddlmZ ddlmZmZmZmZm Z  G dd deZ!dS )    N)AnyOptional)STREAM_SSE_DONE_STRING)AuthenticationError)process_response_headers)_safe_convert_created_field)OpenAIError)OpenAIResponsesAPIConfig)ResponsesAPIResponseResponsesAPIStreamEvents)GenericLiteLLMParams)LlmProviders)CustomStreamWrapper   )Authenticator)CHATGPT_API_BASEGetAccessTokenErrorensure_chatgpt_session_idget_chatgpt_default_headers get_chatgpt_default_instructionsc                       s   e Zd Zd fddZedefddZdeded	e	e
 defd
dZdededed	e
dedef fddZdededef fddZde	e d	edefddZdefddZ  ZS )ChatGPTResponsesAPIConfigreturnNc                    s   t    t | _d S N)super__init__r   authenticatorself	__class__ d/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/chatgpt/responses/transformation.pyr      s   
z"ChatGPTResponsesAPIConfig.__init__c                 C   s   t jS r   )r   ZCHATGPTr   r    r    r!   custom_llm_provider#   s   z-ChatGPTResponsesAPIConfig.custom_llm_providerheadersmodellitellm_paramsc           	   
   C   sd   z| j  }W n ty } z	t|dt|dd }~ww | j  }t|}t|||}i ||S )NZchatgpt)r$   Zllm_providermessage)r   Zget_access_tokenr   r   strZget_account_idr   r   )	r   r#   r$   r%   Zaccess_tokeneZ
account_idZ
session_iddefault_headersr    r    r!   validate_environment'   s    
z.ChatGPTResponsesAPIConfig.validate_environmentinput$response_api_optional_request_paramsc           
         s   t  |||||}t }|d}|r"||vr!| d| |d< n||d< d|d< d|d< t|dp5g }	d|	vr@|	d |	|d< h d	  fd
d| D S )Ninstructionsz

FstoreTstreamincludezreasoning.encrypted_content>   r/   Zprevious_response_idr.   r$   r-   r0   Ztool_choicer+   Z	reasoningZtoolsZ
truncationc                    s   i | ]\}}| v r||qS r    r    ).0kvZallowed_keysr    r!   
<dictcomp>j   s    zMChatGPTResponsesAPIConfig.transform_responses_api_request.<locals>.<dictcomp>)r   transform_responses_api_requestr   getlistappenditems)
r   r$   r+   r,   r%   r#   requestZbase_instructionsZexisting_instructionsr0   r   r4   r!   r6   =   s.   

z9ChatGPTResponsesAPIConfig.transform_responses_api_requestraw_responselogging_objc              	      s&  |j pi dd}|jpd}d| vr3| }|ds3|ds3d|v s3d|v s3t j|||dS |j|jd	i id
 d }d }|	 D ]}	t
|	}
|
sOqE|
 }
|
sVqE|
tkr\ nzt|
}W n
 tjym   Y qEw t|tstqE|d}|tjkr|d}t|trt|}d|v rt|d |d< z	tdi |}W n ty   tjdi |}Y nw  n/|tjtjfv r|dp|dpi d}|d urt|tr|dpt|}qEt|}qE|d u rt|p|j|jdt|j }t|}t|dst |di  ||j!d< ||j!d< |S )Nzcontent-type ztext/event-streamzevent:zdata:z
event:z
data:)r$   r<   r=   Zcomplete_input_dict)original_responseZadditional_argstyperesponseZ
created_aterrorr&   )r&   status_code_hidden_paramsZadditional_headersr#   r    )"r#   r7   textlowerlstrip
startswithr   transform_response_api_responseZ	post_call
splitlinesr   Z_strip_sse_data_from_chunkstripr   jsonloadsJSONDecodeError
isinstancedictr   ZRESPONSE_COMPLETEDr   r
   	ExceptionZmodel_constructZRESPONSE_FAILEDERRORr'   r   rC   r   hasattrsetattrrD   )r   r$   r<   r=   content_typeZ	body_textZtrimmed_bodyZcompleted_responseerror_messagechunkZstripped_chunkZparsed_chunkZ
event_typeZresponse_payloadZ	error_objZraw_headersZprocessed_headersr   r    r!   rI   l   s   












z9ChatGPTResponsesAPIConfig.transform_response_api_responseapi_basec                 C   s&   |p| j  pt}|d}| dS )N/z
/responses)r   Zget_api_baser   rstrip)r   rX   r%   r    r    r!   get_complete_url   s   

z*ChatGPTResponsesAPIConfig.get_complete_urlc                 C   s   dS )z;ChatGPT does not support native WebSocket for Responses APIFr    r   r    r    r!   supports_native_websocket   s   z3ChatGPTResponsesAPIConfig.supports_native_websocket)r   N)__name__
__module____qualname__r   propertyr   r"   rP   r'   r   r   r*   r   r6   rI   r[   boolr\   __classcell__r    r    r   r!   r      sR    
/W
	r   )"rL   typingr   r   Zlitellm.constantsr   Zlitellm.exceptionsr   Z'litellm.litellm_core_utils.core_helpersr   ZFlitellm.litellm_core_utils.llm_response_utils.convert_dict_to_responser   Z litellm.llms.openai.common_utilsr   Z,litellm.llms.openai.responses.transformationr	   Zlitellm.types.llms.openair
   r   Zlitellm.types.routerr   Zlitellm.types.utilsr   Zlitellm.utilsr   r   r   Zcommon_utilsr   r   r   r   r   r   r    r    r    r!   <module>   s    	