Ë
    tPêjœ  ã                   óJ  — U d 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mZ d	Zeed
<   dZeed<    G d„ de«      Zdedefd„Zdedee   fd„Zdedefd„Zdeedf   deedf   defd„Zdeddfd„Zdededefd„Zdedede defd„Z!deded edefd!„Z"y)"zNContract machinery shared by every LiteLLM-defined list route, on any surface.é    )ÚFinal)Ú	urlencode)ÚRequest)Úget_flat_params)Ú
ParamTypes)ÚJSONResponse)Ú	ListLinksÚ	PageLinksÚProblemDetailzapplication/problem+jsonÚPROBLEM_CONTENT_TYPEzurn:litellm:error:ÚPROBLEM_TYPE_BASEc                   ó,   ‡ — e Zd ZdZdeddfˆ fd„Zˆ xZS )ÚManagementProblemzORaised to return an RFC 9457 problem instead of the proxy's OpenAI error shape.ÚproblemÚreturnNc                 óF   •— || _         t        ‰| �	  |j                  «       y ©N)r   ÚsuperÚ__init__Údetail)Úselfr   Ú	__class__s     €úb/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/list_api/common.pyr   zManagementProblem.__init__   s   ø€ ØˆŒÜ‰Ñ˜Ÿ™Õ(ó    )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ú__classcell__)r   s   @r   r   r      s   ø„ ÙYð) ð )°$÷ )ñ )r   r   r   r   c                 óZ   — t        | j                  | j                  d¬«      t        ¬«      S )NT)Úexclude_none)Ústatus_codeÚcontentÚ
media_type)r   ÚstatusÚ
model_dumpr   )r   s    r   Úproblem_responser'       s*   € ÜØ—N‘NØ×"Ñ"°Ð"Ó5Ü'ôð r   Úrequestc                 ó    — | j                   j                  d«      }t        |dd «      }|€
t        «       S t        d„ t	        |«      D «       «      S )NÚrouteÚ	dependantc              3   ó„   K  — | ]8  }t        |j                  d d«      t        j                  k(  r|j                  –— Œ: y­w)Úin_N)ÚgetattrÚ
field_infor   ÚqueryÚalias)Ú.0Úfields     r   ú	<genexpr>z)_declared_query_params.<locals>.<genexpr>/   s9   è ø€ ò àÜ�5×#Ñ# U¨DÓ1´Z×5EÑ5EÒEð 	��ñùs   ‚>A )ÚscopeÚgetr.   Ú	frozensetr   )r(   r*   r+   s      r   Ú_declared_query_paramsr8   (   sS   € Ø—=‘=×$Ñ$ WÓ-€EÜ˜u k°4Ó8€IØÐÜ‹{Ðô ñ ä$ YÓ/ôó ð r   Úvaluec                 óf   — | j                  dd«      j                  dd«      j                  dd«      S )z[Escape LIKE/ILIKE metacharacters. Ids routinely contain `_`, which is a wildcard unescaped.ú\z\\ú%z\%Ú_z\_)Úreplace)r9   s    r   Úescape_liker?   6   s-   € à�=‰=˜˜vÓ&×.Ñ.¨s°EÓ:×BÑBÀ3ÈÓNÐNr   Úunknown.Úallowedc           	      óh   — t        t        › d�ddddj                  | «      › d�t        |«      ¬«      S )Nzunknown-query-parameterzUnknown query parameteri�  z!Unrecognized query parameter(s): z, ú.)ÚtypeÚtitler%   r   rA   )r   r   ÚjoinÚsorted©r@   rA   s     r   Úunknown_query_param_problemrI   ;   s>   € ÜÜ!Ð"Ð"9Ð:Ø'ØØ2°4·9±9¸WÓ3EÐ2FÀaÐHÜ�w“ôð r   Nc           
   ƒ   óÆ   ‡K  — t        | «      Št        t        ˆfd„| j                  D «       «      «      }|syt	        t        |t        t        ‰«      «      ¬«      «      ‚­w)zÎReject any query param the route did not declare.

    A silently ignored filter over-returns data, which is worse than a rejected
    request; a fresh surface is the only chance to be strict about it.
    c              3   ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wr   © )r2   ÚnameÚdeclareds     €r   r4   z.reject_unknown_query_params.<locals>.<genexpr>L   s   øè ø€ Ò2q¸DÐ\`ÐhpÒ\p´4Ñ2qùs   ƒ	�NrH   )r8   ÚtuplerG   Úquery_paramsr   rI   )r(   r@   rN   s     @r   Úreject_unknown_query_paramsrQ   E   sT   øè ø€ ô -¨WÓ5€HÜ&+¬FÓ2qÀG×DXÑDXÔ2qÓ,qÓ&r€GÙØÜ
Ô7ÀÔQVÔW]Ð^fÓWgÓQhÔiÓ
jÐjùs   ƒAA!Úpagec                 ó¬   — t        d„ | j                  j                  «       D «       «      }| j                  j                  › dt        g |¢d|f‘­«      › �S )Nc              3   ó6   K  — | ]  \  }}|d k7  sŒ||f–— Œ y­w)rR   NrL   )r2   Úkeyr9   s      r   r4   z_page_url.<locals>.<genexpr>S   s!   è ø€ Òm©:¨3°Ð_bÐflÓ_l˜3 œ,Ñmùs   ‚�	ú?rR   )rO   rP   Úmulti_itemsÚurlÚpathr   )r(   rR   Úotherss      r   Ú	_page_urlr[   R   sR   € ÜÑm¸×9MÑ9M×9YÑ9YÓ9[ÔmÓm€FØ�k‰k×ÑÐ˜q¤Ð+D¨VÐ+D°f¸d°^Ñ+DÓ!EÐ FÐGÐGr   Úhas_morec           	      ó†   — t        t        | |«      |dkD  rt        | |dz
  «      nd |rt        | |dz   «      ¬«      S d ¬«      S )Né   )Ú	self_linkÚprevÚnext)r
   r[   )r(   rR   r\   s      r   Úbuild_page_linksrb   W   sO   € ÜÜ˜G TÓ*Ø-1°AªXŒY�w  q¡Ô)¸4Ù-5ŒY�w  q¡Ó)ôð ð <@ôð r   Útotal_pagesc           
      óÆ   — t        |d«      }t        t        | |«      t        | d«      |dkD  rt        | |dz
  «      nd||k  rt        | |dz   «      ndt        | |«      ¬«      S )z]Page-mode links. `last` clamps to page 1 on an empty result set so every link still resolves.r^   N)r_   Úfirstr`   ra   Úlast)Úmaxr	   r[   )r(   rR   rc   rf   s       r   Úbuild_list_linksrh   _   se   € ä�k 1Ó%€DÜÜ˜G TÓ*Ü˜ Ó#Ø-1°AªXŒY�w  q¡Ô)¸4Ø-1°Dª[ŒY�w  q¡Ô)¸dÜ�w Ó%ôð r   )#r   Útypingr   Úurllib.parser   Úfastapir   Úfastapi.dependencies.utilsr   Úfastapi.paramsr   Úfastapi.responsesr   Ú6litellm.types.proxy.management_endpoints.management_v1r	   r
   r   r   Ú__annotations__r   Ú	Exceptionr   r'   r7   Ústrr8   r?   rO   rI   rQ   Úintr[   Úboolrb   rh   rL   r   r   ú<module>ru      s+  ðÚ Tå Ý "å Ý 6Ý %Ý *÷ñ ð 9Ð �eÓ 8ð 0Ð �5Ó /ô)˜	ô )ð˜mð °ó ð Gð °	¸#±ó ðO�sð O˜só Oð
¨¨s°C¨x©ð À5ÈÈcÈÁ?ð ÐWdó ð
k¨wð 
k¸4ó 
kðH�wð H cð H¨có Hð
˜gð ¨Sð ¸Dð ÀYó ð	˜gð 	¨Sð 	¸sð 	Àyô 	r   