o
    ưi**                     @   s   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mZmZmZmZ d dlmZ ddlmZ erQd d	lmZ dd
lmZ eZeZneZeZG dd deZdS )    )TYPE_CHECKINGAnyDictOptionalTupleUnionN)StandardBuiltInToolCostTracking)get_secret_str)$ContainerCreateOptionalRequestParamsContainerFileListResponseContainerListResponseContainerObjectDeleteContainerResult)GenericLiteLLMParams   )BaseContainerConfig)LoggingBaseLLMExceptionc                       sp  e Zd ZdZ fddZdefddZdedede	fd	d
Z
	d:dedee defddZdee dedefddZdede	dedede	f
ddZdejdedefddZ				d;dedededee dee dee dee	eef  deee	f fd d!Zdejdedefd"d#Zd$ededededeee	f f
d%d&Zdejdedefd'd(Zd$ededededeee	f f
d)d*Zdejdede fd+d,Z!				d;d$ededededee dee dee dee	eef  deee	f fd-d.Z"dejdede#fd/d0Z$d$ed1ededededeee	f fd2d3Z%dejdede&fd4d5Z'd6ed7ede(eej)f de*fd8d9Z+  Z,S )<OpenAIContainerConfigz2Configuration class for OpenAI container API.
    c                    s   t    d S N)super__init__self	__class__ d/home/app/Keep/.python/lib/python3.10/site-packages/litellm/llms/openai/containers/transformation.pyr   %   s   zOpenAIContainerConfig.__init__returnc                 C   s   g dS )zGGet the list of supported OpenAI parameters for container API.
        )nameZexpires_afterZfile_idsextra_headersr   r   r   r   r   get_supported_openai_params(   s   z1OpenAIContainerConfig.get_supported_openai_params container_create_optional_paramsdrop_paramsc                 C   s   t |S )z:No mapping applied since inputs are in OpenAI spec already)dict)r   r#   r$   r   r   r   map_openai_params2   s   z'OpenAIContainerConfig.map_openai_paramsNheadersapi_keyc                 C   s0   |pt jpt jptd}|dd| i |S )NZOPENAI_API_KEYAuthorizationzBearer )litellmr(   Z
openai_keyr	   update)r   r'   r(   r   r   r   validate_environment:   s   
z*OpenAIContainerConfig.validate_environmentapi_baselitellm_paramsc                 C   s.   |pt jptdptdpd}|d dS )z7Get the complete URL for OpenAI container API.
        ZOPENAI_BASE_URLZOPENAI_API_BASEzhttps://api.openai.com/v1/z/containers)r*   r-   r	   rstrip)r   r-   r.   r   r   r   get_complete_urlL   s   z&OpenAIContainerConfig.get_complete_urlr    (container_create_optional_request_paramsc                 C   s"   dd |  D }d|i|}|S )zATransform the container creation request for OpenAI API.
        c                 S   s   i | ]\}}|d vr||qS ))r!   r   ).0kvr   r   r   
<dictcomp>g   s
    zLOpenAIContainerConfig.transform_container_create_request.<locals>.<dictcomp>r    )items)r   r    r2   r.   r'   Zrequest_dictr   r   r   "transform_container_create_request]   s   
z8OpenAIContainerConfig.transform_container_create_requestraw_responselogging_objc                 C   sd   |  }tdi |}tjddd}t|dr|jdu ri |_d|jvr)i |jd< ||jd d< |S )	z:Transform the OpenAI container creation response.
           Zopenai)sessionsprovider_hidden_paramsNZadditional_headersz$llm_provider-x-litellm-response-costr   )jsonr   r   Zget_cost_for_code_interpreterhasattrr>   )r   r9   r:   response_datacontainer_objZcontainer_costr   r   r   #transform_container_create_responset   s   

z9OpenAIContainerConfig.transform_container_create_responseafterlimitorderextra_queryc           
      C   sR   |}i }	|dur||	d< |durt ||	d< |dur||	d< |r%|	| ||	fS )zTransform the container list request for OpenAI API.
        
        OpenAI API expects the following request:
        - GET /v1/containers
        NrD   rE   rF   )strr+   )
r   r-   r.   r'   rD   rE   rF   rG   urlparamsr   r   r    transform_container_list_request   s   
z6OpenAIContainerConfig.transform_container_list_requestc                 C      |  }tdi |}|S )z6Transform the OpenAI container list response.
        Nr   )r?   r   )r   r9   r:   rA   Zcontainer_listr   r   r   !transform_container_list_response      z7OpenAIContainerConfig.transform_container_list_responsecontainer_idc                 C       | d d| }i }||fS )z9Transform the OpenAI container retrieve request.
        r/   r0   r   rO   r-   r.   r'   rI   datar   r   r   $transform_container_retrieve_request   s   
z:OpenAIContainerConfig.transform_container_retrieve_requestc                 C   rL   )z:Transform the OpenAI container retrieve response.
        Nr   )r?   r   )r   r9   r:   rA   rB   r   r   r   %transform_container_retrieve_response   s   z;OpenAIContainerConfig.transform_container_retrieve_responsec                 C   rP   )zTransform the container delete request for OpenAI API.
        
        OpenAI API expects the following request:
        - DELETE /v1/containers/{container_id}
        r/   rQ   rR   r   r   r   "transform_container_delete_request   s   z8OpenAIContainerConfig.transform_container_delete_requestc                 C   rL   )z8Transform the OpenAI container delete response.
        Nr   )r?   r   )r   r9   r:   rA   Zdelete_resultr   r   r   #transform_container_delete_response   rN   z9OpenAIContainerConfig.transform_container_delete_responsec	                 C   sd   | d d| d}	i }
|dur||
d< |durt||
d< |dur'||
d< |r.|
| |	|
fS )zTransform the container file list request for OpenAI API.
        
        OpenAI API expects the following request:
        - GET /v1/containers/{container_id}/files
        r/   z/filesNrD   rE   rF   )r0   rH   r+   )r   rO   r-   r.   r'   rD   rE   rF   rG   rI   rJ   r   r   r   %transform_container_file_list_request   s   
z;OpenAIContainerConfig.transform_container_file_list_requestc                 C   rL   )z;Transform the OpenAI container file list response.
        Nr   )r?   r   )r   r9   r:   rA   	file_listr   r   r   &transform_container_file_list_response!  rN   z<OpenAIContainerConfig.transform_container_file_list_responsefile_idc                 C   s(   | d d| d| d}i }||fS )zTransform the container file content request for OpenAI API.
        
        OpenAI API expects the following request:
        - GET /v1/containers/{container_id}/files/{file_id}/content
        r/   z/files/z/contentrQ   )r   rO   r[   r-   r.   r'   rI   rJ   r   r   r   (transform_container_file_content_request/  s   z>OpenAIContainerConfig.transform_container_file_content_requestc                 C   s   |j S )z{Transform the OpenAI container file content response.
        
        Returns the raw binary content of the file.
        )content)r   r9   r:   r   r   r   )transform_container_file_content_responseD  s   	z?OpenAIContainerConfig.transform_container_file_content_responseerror_messagestatus_codec                 C   s   ddl m} ||||d)Nr   r   )r`   messager'   )base_llm.chat.transformationr   )r   r_   r`   r'   r   r   r   r   get_error_classO  s   z%OpenAIContainerConfig.get_error_classr   )NNNN)-__name__
__module____qualname____doc__r   listr"   r
   boolr   r&   r%   r   rH   r,   r1   r   r8   httpxResponseLiteLLMLoggingObjr   rC   intr   r   rK   r   rM   rT   rU   rV   r   rW   rX   r   rZ   r\   bytesr^   r   ZHeadersr   rc   __classcell__r   r   r   r   r   !   sN   





!
	
!






	


"



r   )typingr   r   r   r   r   r   rj   r*   Z@litellm.litellm_core_utils.llm_cost_calc.tool_call_cost_trackingr   Zlitellm.secret_managers.mainr	   Zlitellm.types.containers.mainr
   r   r   r   r   Zlitellm.types.routerr   Z"base_llm.containers.transformationr   Z*litellm.litellm_core_utils.litellm_loggingr   Z_LiteLLMLoggingObjrb   r   Z_BaseLLMExceptionrl   r   r   r   r   r   <module>   s      