Ë
    uPêj-,  ã                   óÐ   — d dl 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mZmZmZmZmZ d dlmZ dd	lmZ d
dlmZ erd dlmZ ddlmZ eZeZneZeZ G d„ de«      Zy)é    )ÚTYPE_CHECKINGÚAnyÚFinalN)ÚStandardBuiltInToolCostTracking)Úencode_url_path_segment)Úget_secret_str)Ú$ContainerCreateOptionalRequestParamsÚContainerFileListResponseÚContainerListResponseÚContainerObjectÚDeleteContainerResult)ÚGenericLiteLLMParamsé   )ÚBaseContainerConfigé   )Újoin_container_api_base_path)ÚLogging©ÚBaseLLMExceptionc                   óî  ‡ — e Zd ZdZˆ fd„Zdefd„Zdedede	fd„Z
	 d(d	e	d
edz  de	fd„Zdedz  de	defd„Zdede	ded	e	de	f
d„Zdej"                  dedefd„Z	 	 	 	 d)deded	e	dedz  dedz  dedz  de	eef   dz  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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dz  dedz  dedz  de	eef   dz  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	deee	f   fd#„Z#dej"                  dede$fd$„Z%d%ed&ed	e	ejL                  z  de'fd'„Z(ˆ xZ)S )*ÚOpenAIContainerConfigz-Configuration class for OpenAI container API.c                 ó"   •— t         ‰| �  «        y ©N)ÚsuperÚ__init__)ÚselfÚ	__class__s    €úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/openai/containers/transformation.pyr   zOpenAIContainerConfig.__init__&   s   ø€ Ü‰ÑÕó    Úreturnc                 ó
   — g d¢S )z>Get the list of supported OpenAI parameters for container API.)ÚnameÚexpires_afterÚfile_idsÚextra_headers© )r   s    r   Úget_supported_openai_paramsz1OpenAIContainerConfig.get_supported_openai_params)   s   € ò
ð 	
r   Ú container_create_optional_paramsÚdrop_paramsc                 ó   — t        |«      S )z:No mapping applied since inputs are in OpenAI spec already)Údict)r   r(   r)   s      r   Úmap_openai_paramsz'OpenAIContainerConfig.map_openai_params2   s   € ô Ð4Ó5Ð5r   NÚheadersÚapi_keyc                 ó˜   — |xs/ t         j                  xs t         j                  xs t        d«      }|j	                  dd|› �i«       |S )NÚOPENAI_API_KEYÚAuthorizationzBearer )Úlitellmr.   Ú
openai_keyr   Úupdate)r   r-   r.   s      r   Úvalidate_environmentz*OpenAIContainerConfig.validate_environment:   sL   € ð
 ÒfœWŸ_™_Òf´×0BÑ0BÒfÄnÐUeÓFfˆØ�‰à 7¨7¨)Ð!4ðô	
ð
 ˆr   Úapi_baseÚlitellm_paramsc                 óŽ   — |xs. t         j                  xs t        d«      xs t        d«      xs d}|j                  d«      › d�S )z.Get the complete URL for OpenAI container API.ÚOPENAI_BASE_URLÚOPENAI_API_BASEzhttps://api.openai.com/v1ú/z/containers)r2   r6   r   Úrstrip)r   r6   r7   s      r   Úget_complete_urlz&OpenAIContainerConfig.get_complete_urlG   s[   € ð ò +Ü×Ñò+äÐ/Ó0ò+ô Ð/Ó0ò+ð +ð 	ð —/‘/ #Ó&Ð' {Ð3Ð3r   r"   Ú(container_create_optional_request_paramsc                 ón   — |j                  «       D ��ci c]  \  }}|dvsŒ||“Œ }}}d|i|¥}|S c c}}w )z8Transform the container creation request for OpenAI API.)r%   r"   )Úitems)r   r"   r>   r7   r-   ÚkÚvÚrequest_dicts           r   Ú"transform_container_create_requestz8OpenAIContainerConfig.transform_container_create_requestW   s]   € ð F×KÑKÓM÷4
Ù�Q˜ÐQRÐZkÒQkˆAˆq‰Dð4
Ð0ñ 4
ð �Dð
à6ð
ˆð
 Ðùó4
s   ”1¡1Úraw_responseÚlogging_objc                 ó  — |j                  «       }t        di |¤Ž}t        j                  dd¬«      }t	        |d«      r|j
                  €i |_        d|j
                  vri |j
                  d<   ||j
                  d   d<   |S )z1Transform the OpenAI container creation response.r   Úopenai)ÚsessionsÚproviderÚ_hidden_paramsÚadditional_headersz$llm_provider-x-litellm-response-costr&   )Újsonr   r   Úget_cost_for_code_interpreterÚhasattrrK   )r   rE   rF   Úresponse_dataÚcontainer_objÚcontainer_costs         r   Ú#transform_container_create_responsez9OpenAIContainerConfig.transform_container_create_responsel   s–   € ð  ,×0Ñ0Ó2ˆô  /Ñ?°Ñ?ˆô
 !@× ]Ñ ]ØØô!
ˆô
 �}Ð&6Ô7¸=×;WÑ;WÐ;_Ø+-ˆMÔ(Ø }×'CÑ'CÑCØACˆM×(Ñ(Ð)=Ñ>Øesˆ×$Ñ$Ð%9Ñ:Ð;aÑbàÐr   ÚafterÚlimitÚorderÚextra_queryc                 ót   — |}i }	|�||	d<   |�t        |«      |	d<   |�||	d<   |r|	j                  |«       ||	fS )z�Transform the container list request for OpenAI API.

        OpenAI API expects the following request:
        - GET /v1/containers
        rT   rU   rV   )Ústrr4   )
r   r6   r7   r-   rT   rU   rV   rW   ÚurlÚparamss
             r   Ú transform_container_list_requestz6OpenAIContainerConfig.transform_container_list_request‡   s\   € ð  ˆð ˆØÐØ#ˆF�7‰OØÐÜ! %›jˆF�7‰OØÐØ#ˆF�7‰Oñ Ø�M‰M˜+Ô&à�Fˆ{Ðr   c                 ó<   — |j                  «       }t        di |¤Ž}|S )z-Transform the OpenAI container list response.r&   )rM   r   )r   rE   rF   rP   Úcontainer_lists        r   Ú!transform_container_list_responsez7OpenAIContainerConfig.transform_container_list_response¨   s'   € ð  ,×0Ñ0Ó2ˆô !6Ñ F¸Ñ FˆàÐr   Úcontainer_idc                 óF   — t        |d¬«      }t        |d|› �«      }i }||fS )z0Transform the OpenAI container retrieve request.r`   ©Ú
field_namer;   ©r   r   ©r   r`   r6   r7   r-   Úencoded_container_idrZ   Údatas           r   Ú$transform_container_retrieve_requestz:OpenAIContainerConfig.transform_container_retrieve_requestµ   s8   € ô '>¸lÐWeÔ&fÐÜ1°(¸aÐ@TÐ?UÐ<VÓWˆð ')ˆà�DˆyÐr   c                 ó<   — |j                  «       }t        di |¤Ž}|S )z1Transform the OpenAI container retrieve response.r&   )rM   r   )r   rE   rF   rP   rQ   s        r   Ú%transform_container_retrieve_responsez;OpenAIContainerConfig.transform_container_retrieve_responseÆ   s%   € ð  ,×0Ñ0Ó2ˆä.Ñ?°Ñ?ˆàÐr   c                 óF   — t        |d¬«      }t        |d|› �«      }i }||fS )z¡Transform the container delete request for OpenAI API.

        OpenAI API expects the following request:
        - DELETE /v1/containers/{container_id}
        r`   rb   r;   rd   re   s           r   Ú"transform_container_delete_requestz8OpenAIContainerConfig.transform_container_delete_requestÒ   s8   € ô '>¸lÐWeÔ&fÐÜ1°(¸aÐ@TÐ?UÐ<VÓWˆð ')ˆà�DˆyÐr   c                 ó<   — |j                  «       }t        di |¤Ž}|S )z/Transform the OpenAI container delete response.r&   )rM   r   )r   rE   rF   rP   Údelete_results        r   Ú#transform_container_delete_responsez9OpenAIContainerConfig.transform_container_delete_responseç   s'   € ð  ,×0Ñ0Ó2ˆô  5ÑE°}ÑEˆàÐr   c	                 óª   — t        |d¬«      }	t        |d|	› d�«      }
i }|�||d<   |�t        |«      |d<   |�||d<   |r|j                  |«       |
|fS )z§Transform the container file list request for OpenAI API.

        OpenAI API expects the following request:
        - GET /v1/containers/{container_id}/files
        r`   rb   r;   z/filesrT   rU   rV   )r   r   rY   r4   )r   r`   r6   r7   r-   rT   rU   rV   rW   rf   rZ   r[   s               r   Ú%transform_container_file_list_requestz;OpenAIContainerConfig.transform_container_file_list_requestô   s}   € ô" '>¸lÐWeÔ&fÐÜ1°(¸aÐ@TÐ?UÐU[Ð<\Ó]ˆð )+ˆØÐØ#ˆF�7‰OØÐÜ! %›jˆF�7‰OØÐØ#ˆF�7‰Oñ Ø�M‰M˜+Ô&à�Fˆ{Ðr   c                 ó<   — |j                  «       }t        di |¤Ž}|S )z2Transform the OpenAI container file list response.r&   )rM   r
   )r   rE   rF   rP   Ú	file_lists        r   Ú&transform_container_file_list_responsez<OpenAIContainerConfig.transform_container_file_list_response  s'   € ð  ,×0Ñ0Ó2ˆô 5ÑE°}ÑEˆ	àÐr   Úfile_idc                 óh   — t        |d¬«      }t        |d¬«      }t        |d|› d|› d�«      }i }	||	fS )z¼Transform the container file content request for OpenAI API.

        OpenAI API expects the following request:
        - GET /v1/containers/{container_id}/files/{file_id}/content
        r`   rb   ru   r;   z/files/z/contentrd   )
r   r`   ru   r6   r7   r-   rf   Úencoded_file_idrZ   r[   s
             r   Ú(transform_container_file_content_requestz>OpenAIContainerConfig.transform_container_file_content_request$  sP   € ô '>¸lÐWeÔ&fÐÜ!8¸ÈYÔ!WˆÜ1°(¸aÐ@TÐ?UÐU\Ð]lÐ\mÐmuÐ<vÓwˆð )+ˆà�Fˆ{Ðr   c                 ó   — |j                   S )zsTransform the OpenAI container file content response.

        Returns the raw binary content of the file.
        )Úcontent)r   rE   rF   s      r   Ú)transform_container_file_content_responsez?OpenAIContainerConfig.transform_container_file_content_response;  s   € ð ×#Ñ#Ð#r   Úerror_messageÚstatus_codec                 ó$   — ddl m}  ||||¬«      ‚)Nr   r   )r}   Úmessager-   )Úbase_llm.chat.transformationr   )r   r|   r}   r-   r   s        r   Úget_error_classz%OpenAIContainerConfig.get_error_classF  s   € õ 	EáØ#Ø!Øô
ð 	
r   r   )NNNN)*Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úlistr'   r	   Úboolr+   r,   rY   r5   r=   r   rD   ÚhttpxÚResponseÚLiteLLMLoggingObjr   rS   Úintr   Útupler\   r   r_   rh   rj   rl   r   ro   rq   r
   rt   rx   Úbytesr{   ÚHeadersr   r�   Ú__classcell__)r   s   @r   r   r   #   s¥  ø„ Ù7ôð
¨Tó 
ð6à*Nð6ð ð6ð 
ó	6ð #ñàðð �t‘ðð 
ó	ð4à˜‘*ð4ð ð4ð 
ó	4ð àðð 37ðð -ð	ð
 ðð 
óð*à—n‘nðð 'ðð 
ó	ð@ !Ø Ø Ø-1ñàðð -ðð ð	ð
 �T‰zðð �T‰zðð �T‰zðð ˜#˜s˜(‘^ dÑ*ðð 
ˆs�DˆyÑ	óðBà—n‘nðð 'ðð 
ó	ðàðð ðð -ð	ð
 ðð 
ˆs�DˆyÑ	óð"
à—n‘nð
ð 'ð
ð 
ó	
ðàðð ðð -ð	ð
 ðð 
ˆs�DˆyÑ	óð*à—n‘nðð 'ðð 
ó	ð& !Ø Ø Ø-1ñ!àð!ð ð!ð -ð	!ð
 ð!ð �T‰zð!ð �T‰zð!ð �T‰zð!ð ˜#˜s˜(‘^ dÑ*ð!ð 
ˆs�DˆyÑ	ó!ðFà—n‘nðð 'ðð 
#ó	ðàðð ðð ð	ð
 -ðð ðð 
ˆs�DˆyÑ	óð.	$à—n‘nð	$ð 'ð	$ð 
ó		$ð
àð
ð ð
ð ˜Ÿ™Ñ%ð	
ð
 
÷
r   r   ) Útypingr   r   r   rˆ   r2   Ú@litellm.litellm_core_utils.llm_cost_calc.tool_call_cost_trackingr   Ú$litellm.litellm_core_utils.url_utilsr   Úlitellm.secret_managers.mainr   Úlitellm.types.containers.mainr	   r
   r   r   r   Úlitellm.types.routerr   Ú"base_llm.containers.transformationr   Úutilsr   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú_LiteLLMLoggingObjr€   r   Ú_BaseLLMExceptionrŠ   r   r&   r   r   ú<module>r›      sd   ðß ,Ñ ,ã ã õõ IÝ 7÷õ õ 6å EÝ /áÝXåUà*ÐØ(ÑàÐØÐôo
Ð/õ o
r   