Ë
    uPêjW<  ã                   ó   — U d Z ddlZddlmZ ddlmZ 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mZmZmZ ddlmZmZmZ dd	lmZ erdd
lmZ ddlmZ eeedœZe	ee e!f      e"d<   eez  ez  e#z  ee e$f   z  Z%defd„Z&de dedz  fd„Z'de de dee e f   de fd„Z(de)dee ef   dee e f   fd„Z*de
jV                  de fd„Z,de
jV                  de-de de%fd„Z.dedee ef   de/fd„Z0 G d „ d!«      Z1 e1«       Z2e	e"d"<   y)#zÙ
Generic container file handler for LiteLLM.

This module provides a single generic handler that can process any container file
endpoint defined in endpoints.json, eliminating the need for individual handler methods.
é    N)Ú	Coroutine)ÚPath)ÚTYPE_CHECKINGÚAnyÚFinal)Úencode_url_path_segment)ÚAsyncHTTPHandlerÚHTTPHandlerÚ_get_httpx_clientÚget_async_httpx_client)ÚContainerFileListResponseÚContainerFileObjectÚDeleteContainerFileResponse)ÚGenericLiteLLMParams)ÚLogging)ÚBaseContainerConfigÚRESPONSE_TYPESÚreturnc                  óÔ   — t        t        «      j                  j                  j                  dz  dz  } t        | «      5 }t	        j
                  |«      cddd«       S # 1 sw Y   yxY w)z0Load the endpoints configuration from JSON file.Ú
containerszendpoints.jsonN)r   Ú__file__ÚparentÚopenÚjsonÚload)Úconfig_pathÚfs     úp/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/llms/custom_httpx/container_handler.pyÚ_load_endpoints_configr   /   sR   € äœh›×.Ñ.×5Ñ5×<Ñ<¸|ÑKÐN^Ñ^€KÜ	ˆkÓ	ð ˜aÜ�y‰y˜‹|÷÷ ò ús   ¿AÁA'Úendpoint_namec                 óT   — t        «       }|d   D ]  }|d   | k(  s	|d   | k(  sŒ|c S  y)z+Get config for a specific endpoint by name.Ú	endpointsÚnameÚ
async_nameN)r   )r    ÚconfigÚendpoints      r   Ú_get_endpoint_configr'   6   sA   € ä*Ó,€FØ˜;Ñ'ò ˆØ�FÑ˜}Ò,°¸Ñ0FÈ-Ó0WØŠOðð ó    Úapi_baseÚpath_templateÚpath_paramsc                 ó<  — |j                  d«      }|j                  «       D ](  \  }}t        ||¬«      }|j                  d|› d�|«      }Œ* t	        j
                  | «      }|j                  j                  d«      › |› �}|j                  |¬«      }t        |«      S )zöBuild the full URL by substituting path parameters.

    The api_base from get_complete_url already includes /containers and may include
    query parameters. We need to parse the URL, append the path, then preserve the
    query parameters.
    z/containers)Ú
field_nameú{ú}ú/)Úpath)
ÚremoveprefixÚitemsr   ÚreplaceÚhttpxÚURLr1   ÚrstripÚ	copy_withÚstr)	r)   r*   r+   ÚparamÚvalueÚencoded_valueÚparsed_baseÚnew_pathÚ	final_urls	            r   Ú
_build_urlr@   ?   s«   € ð "×.Ñ.¨}Ó=€Mð $×)Ñ)Ó+ò M‰ˆˆuÜ/°À%ÔHˆØ%×-Ñ-°°5°'¸¨n¸mÓL‰ðMô
 Ÿ™ 8Ó,€Kð %×)Ñ)×0Ñ0°Ó5Ð6°}°oÐF€Hð #×,Ñ,°(Ð,Ó;€Iäˆy‹>Ðr(   Úquery_param_namesÚkwargsc                 ó€   — i }| D ]6  }|j                  |«      }|€Œt        |t        «      st        |«      n|||<   Œ8 |S )z#Build query parameters from kwargs.)ÚgetÚ
isinstancer9   )rA   rB   ÚparamsÚ
param_namer;   s        r   Ú_build_query_paramsrH   _   sN   € ð
 €FØ'ò Uˆ
Ø—
‘
˜:Ó&ˆØÑÜ3=¸eÄSÔ3I¤ U¤ÈuˆF�:ÒðUð €Mr(   Úresponsec                 ó  — 	 | j                  «       }t        |t        «      rEt        |j                  d«      t        «      r&|d   j                  d«      }t        |t        «      r|S | j                  S # t        $ r | j                  cY S w xY w)NÚerrorÚmessage)r   Ú
ValueErrorÚtextrE   ÚdictrD   r9   )rI   ÚbodyrL   s      r   Ú_error_message_from_responserQ   l   sx   € ðØ—m‘m“oˆô �$œÔ¤*¨T¯X©X°gÓ->ÄÔ"EØ˜g™×*Ñ*¨9Ó5ˆÜ�gœsÔ#ØˆNà�=‰=Ðøô ò Ø�}‰}Òðús   ‚A3 Á3BÂ
BÚreturns_binaryÚresponse_type_namec           	      óê  — ddl m} t        j                  j	                  | j
                  «      r1 || j
                  t        | «      t        | j                  «      ¬«      ‚|r| j                  S | j                  «       }d|v rQ || j
                  |j                  di «      j                  dt        |«      «      t        | j                  «      ¬«      ‚t        j                  |«      }|r |di |¤ŽS |S )Nr   )ÚBaseLLMException)Ústatus_coderL   ÚheadersrK   rL   © )Ú)litellm.llms.base_llm.chat.transformationrU   r5   ÚcodesÚis_errorrV   rQ   rO   rW   Úcontentr   rD   r9   r   )rI   rR   rS   rU   Úresponse_jsonÚresponse_types         r   Ú_transform_responser_   z   sà   € õ
 Kä‡{�{×Ñ˜H×0Ñ0Ô1ÙØ ×,Ñ,Ü0°Ó:Ü˜×)Ñ)Ó*ô
ð 	
ñ Ø×ÑÐà#Ÿ=™=›?€MØ�-ÑÙØ ×,Ñ,Ø!×%Ñ% g¨rÓ2×6Ñ6°yÄ#ÀmÓBTÓUÜ˜×)Ñ)Ó*ô
ð 	
ô *×-Ñ-Ð.@ÓA€MÙÙÑ-˜}Ñ-Ð-ØÐr(   ÚfilerW   c                 ó  — ddl m}  || «      }|j                  d«      xs d}|j                  d«      xs d}|j                  d«      xs d}d|||fi}|j                  «       }|j	                  d	d
«       |j	                  dd
«       ||fS )z‚
    Prepare file and headers for multipart upload.

    Returns:
        Tuple of (files_dict, headers_without_content_type)
    r   )Úextract_file_dataÚfilenamer`   r\   r(   Úcontent_typezapplication/octet-streamzcontent-typeNzContent-Type)Ú8litellm.litellm_core_utils.prompt_templates.common_utilsrb   rD   ÚcopyÚpop)	r`   rW   rb   Ú	extractedrc   r\   rd   ÚfilesÚheaders_copys	            r   Ú_prepare_multipart_file_uploadrk   ™   s–   € õñ )¨Ó.€IØ—m‘m JÓ/Ò9°6€HØ—]‘] 9Ó-Ò4°€GØ#Ÿ-™-¨Ó7ÒUÐ;U€LØ˜X w°Ð=Ð>€Eð "Ÿ,™,›.€LØ×Ñ�^ TÔ*Ø×Ñ�^ TÔ*à�,ÐÐr(   c                   óœ  — e Zd ZdZ	 	 	 	 	 ddedddeddd	eeef   dz  d
eeef   dz  dee	j                  z  dedeez  dz  deeeeef   z  fd„Z	 	 	 	 ddedddeddd	eeef   dz  d
eeef   dz  dee	j                  z  deez  dz  defd„Z	 	 	 	 ddedddeddd	eeef   dz  d
eeef   dz  dee	j                  z  deez  dz  defd„Zy)ÚGenericContainerHandlerzÎ
    Generic handler for container file API endpoints.

    This single handler can process any endpoint defined in endpoints.json,
    eliminating the need for individual handler methods per endpoint.
    Nr    Úcontainer_provider_configr   Úlitellm_paramsÚlogging_objÚLiteLLMLoggingObjÚextra_headersÚextra_queryÚtimeoutÚ	_is_asyncÚclientr   c
                 ór   — |r | j                   d||||||||	dœ|
¤ŽS  | j                  d||||||||	dœ|
¤ŽS )a¸  
        Generic handler for any container file endpoint.

        Args:
            endpoint_name: Name of the endpoint (e.g., "list_container_files")
            container_provider_config: Provider-specific configuration
            litellm_params: LiteLLM parameters including api_key, api_base
            logging_obj: Logging object for request logging
            extra_headers: Additional HTTP headers
            extra_query: Additional query parameters
            timeout: Request timeout
            _is_async: Whether to make async request
            client: Optional HTTP client
            **kwargs: Path params and query params (e.g., container_id, file_id, after, limit)
        )r    rn   ro   rp   rr   rs   rt   rv   rX   )Ú_async_handleÚ_sync_handle)Úselfr    rn   ro   rp   rr   rs   rt   ru   rv   rB   s              r   ÚhandlezGenericContainerHandler.handle½   s�   € ñ8 Ø%�4×%Ñ%ð 
Ø+Ø*CØ-Ø'Ø+Ø'ØØñ
ð ñ
ð 
ð !ˆt× Ñ ð 

Ø'Ø&?Ø)Ø#Ø'Ø#ØØñ

ð ñ

ð 
	
r(   c	                 óZ  — t        |«      }
|
st        d|› �«      ‚|�t        |t        «      st	        d|j                  dd«      i¬«      }n|}|j                  |xs i |j                  dd«      ¬«      }|r|j                  |«       |j                  |j                  dd«      t        |«      ¬«      }|
j                  d	g «      D �ci c]  }||	j                  |d
«      “Œ }}t        ||
d   |«      }t        |
j                  dg «      |	«      }|r|j                  |«       |j                  d
d
|||dœ¬«       |
d   j                  «       }|
j                  dd«      }|
j                  dd«      }|xs d}	 |dk(  r|j                  |||¬«      }np|dk(  r|j                  |||¬«      }nV|dk(  rC|r,d|	v r(t        |	d   |«      \  }}|j!                  ||||¬«      }n#|j!                  |||¬«      }nt        d|› �«      ‚t#        |||
d   ¬«      S c c}w # t$        $ r}|‚d}~ww xY w)zSynchronous request handler.úUnknown endpoint: NÚ
ssl_verify)rF   Úapi_key©rW   r   r)   ©r)   ro   r+   Ú r1   Úquery_params©r)   rW   rF   ©Úinputr   Úadditional_argsÚmethodrR   FÚis_multipartÚGET©ÚurlrW   rF   ÚDELETEÚPOSTr`   ©rŒ   rW   rF   ri   úUnsupported HTTP method: r^   ©rI   rR   rS   )r'   rM   rE   r
   r   rD   Úvalidate_environmentÚupdateÚget_complete_urlrO   r@   rH   Úpre_callÚupperÚdeleterk   Úpostr_   Ú	Exception©rz   r    rn   ro   rp   rr   rs   rt   rv   rB   Úendpoint_configÚhttp_clientrW   r)   Úpr+   rŒ   rƒ   rˆ   rR   r‰   Úeffective_paramsrI   ri   Úes                            r   ry   z$GenericContainerHandler._sync_handleò   s”  € ô "6°mÓ!DˆÙÜÐ1°-°ÐAÓBÐBð ˆ>¤¨F´KÔ!@Ü+°LÀ.×BTÑBTÐUaÐcgÓBhÐ3iÔj‰Kà ˆKð ,×@Ñ@Ø!Ò' RØ"×&Ñ& y°$Ó7ð Aó 
ˆñ Ø�N‰N˜=Ô)à3×DÑDØ#×'Ñ'¨
°DÓ9Ü Ó/ð Eó 
ˆð =L×<OÑ<OÐP]Ð_aÓ<bÖc°q˜a §¡¨A¨rÓ!2Ñ2ÐcˆÐcÜ ¨/¸&Ñ*AÀ;ÓOˆô 2°/×2EÑ2EÀnÐVXÓ2YÐ[aÓbˆÙØ×Ñ Ô,ð 	×ÑØØàØ"Ø&ñð 	ô 	
ð (¨Ñ1×7Ñ7Ó9ˆØ /× 3Ñ 3Ð4DÀeÓ LˆØ-×1Ñ1°.À%ÓHˆð
 #/Ò"6°$Ðð	Ø˜ŠØ&Ÿ?™?¨s¸GÐL\˜?Ó]‘Ø˜8Ò#Ø&×-Ñ-°#¸wÐO_Ð-Ó`‘Ø˜6Ò!Ù F¨fÑ$4Ü%CÀFÈ6ÁNÐT[Ó%\‘N�E˜7Ø*×/Ñ/°CÀÐQaÐinÐ/Óo‘Hà*×/Ñ/°CÀÐQaÐ/Ób‘Hä Ð#<¸V¸HÐ!EÓFÐFä&Ø!Ø-Ø#2°?Ñ#Côð ùòW døôb ò 	ØˆGûð	ús   Ã	HÅ:BH È	H*È#H%È%H*c	              ‹   óä  K  — t        |«      }
|
st        d|› �«      ‚|�t        |t        «      s8t	        t
        j                  j                  d|j                  dd«      i¬«      }n|}|j                  |xs i |j                  dd«      ¬«      }|r|j                  |«       |j                  |j                  dd«      t        |«      ¬«      }|
j                  d	g «      D �ci c]  }||	j                  |d
«      “Œ }}t        ||
d   |«      }t        |
j                  dg «      |	«      }|r|j                  |«       |j                  d
d
|||dœ¬«       |
d   j!                  «       }|
j                  dd«      }|
j                  dd«      }|xs d}	 |dk(  r|j                  |||¬«      ƒ d{  –—† }nˆ|dk(  r|j#                  |||¬«      ƒ d{  –—† }nf|dk(  rS|r4d|	v r0t%        |	d   |«      \  }}|j'                  ||||¬«      ƒ d{  –—† }n+|j'                  |||¬«      ƒ d{  –—† }nt        d|› �«      ‚t)        |||
d   ¬«      S c c}w 7 Œ£7 Œƒ7 ŒJ7 Œ/# t*        $ r}|‚d}~ww xY w­w)zAsynchronous request handler.r}   Nr~   )Úllm_providerrF   r   r€   r)   r�   r+   r‚   r1   rƒ   r„   r…   rˆ   rR   Fr‰   rŠ   r‹   r�   rŽ   r`   r�   r�   r^   r‘   )r'   rM   rE   r	   r   ÚlitellmÚLlmProvidersÚOPENAIrD   r’   r“   r”   rO   r@   rH   r•   r–   r—   rk   r˜   r_   r™   rš   s                            r   rx   z%GenericContainerHandler._async_handleK  sÊ  è ø€ ô "6°mÓ!DˆÙÜÐ1°-°ÐAÓBÐBð ˆ>¤¨FÔ4DÔ!EÜ0Ü$×1Ñ1×8Ñ8Ø$ n×&8Ñ&8¸ÀtÓ&LÐMô‰Kð
 !ˆKð ,×@Ñ@Ø!Ò' RØ"×&Ñ& y°$Ó7ð Aó 
ˆñ Ø�N‰N˜=Ô)à3×DÑDØ#×'Ñ'¨
°DÓ9Ü Ó/ð Eó 
ˆð =L×<OÑ<OÐP]Ð_aÓ<bÖc°q˜a §¡¨A¨rÓ!2Ñ2ÐcˆÐcÜ ¨/¸&Ñ*AÀ;ÓOˆô 2°/×2EÑ2EÀnÐVXÓ2YÐ[aÓbˆÙØ×Ñ Ô,ð 	×ÑØØàØ"Ø&ñð 	ô 	
ð (¨Ñ1×7Ñ7Ó9ˆØ /× 3Ñ 3Ð4DÀeÓ LˆØ-×1Ñ1°.À%ÓHˆð
 #/Ò"6°$Ðð	Ø˜ŠØ!,§¡°SÀ'ÐRb Ó!c×c‘Ø˜8Ò#Ø!,×!3Ñ!3¸ÀWÐUeÐ!3Ó!f×f‘Ø˜6Ò!Ù F¨fÑ$4Ü%CÀFÈ6ÁNÐT[Ó%\‘N�E˜7Ø%0×%5Ñ%5¸#ÀwÐWgÐotÐ%5Ó%u×u‘Hà%0×%5Ñ%5¸#ÀwÐWgÐ%5Ó%h×h‘Hä Ð#<¸V¸HÐ!EÓFÐFä&Ø!Ø-Ø#2°?Ñ#Côð ùòW dð> døàføð  vøàhùô ò 	ØˆGûð	üs   ‚C"I0Ã$IÃ>BI0ÆI Æ1IÆ2!I ÇIÇ:I ÈIÈI È+IÈ,#I ÉI0ÉI ÉI ÉI ÉI É	I-É&I(É(I-É-I0)NNéX  FN)NNr¥   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r9   r   rO   r   Úfloatr5   ÚTimeoutÚboolr
   r	   r   r{   ry   rx   rX   r(   r   rm   rm   µ   s  „ ñð 04Ø-1Ø),ØØ8<ñ3
àð3
ð $9ð3
ð -ð	3
ð
 )ð3
ð ˜C ˜H‘~¨Ñ,ð3
ð ˜#˜s˜(‘^ dÑ*ð3
ð ˜Ÿ™Ñ&ð3
ð ð3
ð Ð.Ñ.°Ñ5ð3
ð 
ˆy˜˜c 3˜Ñ'Ñ	'ó3
ðv 04Ø-1Ø),Ø8<ñWàðWð $9ðWð -ð	Wð
 )ðWð ˜C ˜H‘~¨Ñ,ðWð ˜#˜s˜(‘^ dÑ*ðWð ˜Ÿ™Ñ&ðWð Ð.Ñ.°Ñ5ðWð 
óWð~ 04Ø-1Ø),Ø8<ñZàðZð $9ðZð -ð	Zð
 )ðZð ˜C ˜H‘~¨Ñ,ðZð ˜#˜s˜(‘^ dÑ*ðZð ˜Ÿ™Ñ&ðZð Ð.Ñ.°Ñ5ðZð 
ôZr(   rm   Úgeneric_container_handler)3r©   r   Úcollections.abcr   Úpathlibr   Útypingr   r   r   r5   r¢   Ú$litellm.litellm_core_utils.url_utilsr   Ú&litellm.llms.custom_httpx.http_handlerr	   r
   r   r   Úlitellm.types.containers.mainr   r   r   Úlitellm.types.routerr   Ú*litellm.litellm_core_utils.litellm_loggingr   rq   Ú/litellm.llms.base_llm.containers.transformationr   r   rO   r9   ÚtypeÚ__annotations__ÚbytesÚobjectÚContainerEndpointResponser   r'   r@   ÚlistrH   ÚResponserQ   r¬   r_   Útuplerk   rm   r­   rX   r(   r   ú<module>r¿      s¦  ðòó Ý %Ý ß ,Ñ ,ã ã Ý H÷ó ÷ñ õ
 6áÝWÝSð
 ";Ø.Ø#>ñ*€��d˜3 ˜9‘oÑ&ó ð Ð 3Ñ3Ð6QÑQÐTYÑYÐ\`ÐadÐflÐalÑ\mÑmð ð
 ó ð¨ð °°t±ó ðØðàðð �c˜3�h‘ðð 	ó	ð@
Øð
à��c�‰Nð
ð 
ˆ#ˆsˆ(�^ó
ð¨5¯>©>ð ¸có ðØ�n‰nðàðð ðð ó	ð>Ø
ðà�#�s�(‰^ðð ó÷8pñ pñh $;Ó#<Ð ˜5Ô <r(   