Ë
    tPêjR-  ã            
       óœ  — U d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZmZ erd dlmZ  G d„ d	e«      Z G d
„ de«      ZdZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<    e h d£«      Z!ee e"      ed<    e h d£«      Z#ee e"      ed<    e h d£«      Z$ee e"      ed<   d9d „Z%d!d"de"fd#„Z&d!d"de'fd$„Z(d!d"dedz  fd%„Z) e	d&d&¬'«       G d(„ d)«      «       Z*d*e"de"fd+„Z+d!dd*e"ddfd,„Z,d*e"ddfd-„Z-d.e"ddfd/„Z. G d0„ d1«      Z/e-fd2d3d4e"d5ee"ged   f   dd3fd6„Z0 G d7„ d8«      Z1y):é    N)Ú	AwaitableÚCallable)ÚasdictÚ	dataclass)ÚTYPE_CHECKINGÚFinalÚProtocolÚcast)Úverbose_proxy_logger)ÚRowT_coÚTableActions)Ú
RedisCachec                   óN   — e Zd Zdedee   fd„Zdededee   fd„Z	dee   fd„Z
y)	Ú_ConfigSyncPubSubÚchannelsÚreturnc                  ó   — y ©N© )Úselfr   s     úr/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/common_utils/config_sync_pubsub.pyÚ	subscribez_ConfigSyncPubSub.subscribe   ó   � ó    Úignore_subscribe_messagesÚtimeoutc                 ó   — y r   r   )r   r   r   s      r   Úget_messagez_ConfigSyncPubSub.get_message   r   r   c                  ó   — y r   r   ©r   s    r   Úaclosez_ConfigSyncPubSub.aclose   r   r   N)Ú__name__Ú
__module__Ú__qualname__Ústrr   Úobjectr   ÚboolÚfloatr   r!   r   r   r   r   r      s:   „ ØA 3ÐA¨9°VÑ+<ÓAàg¸ÐgÀuÐgÐQZÐ[aÑQbÓgà.˜	 &Ñ)Ô.r   r   c                   ó2   — e Zd Zdededee   fd„Zdefd„Zy)Ú_ConfigSyncPubSubClientÚchannelÚmessager   c                  ó   — y r   r   )r   r+   r,   s      r   Úpublishz_ConfigSyncPubSubClient.publish   r   r   c                  ó   — y r   r   r    s    r   Úpubsubz_ConfigSyncPubSubClient.pubsub   r   r   N)	r"   r#   r$   r%   r   Úintr.   r   r0   r   r   r   r*   r*      s!   „ ØH˜sÐH¨SÐH°Y¸s±^ÓHà.Ð)Ô.r   r*   zlitellm_proxy.config_changeÚCONFIG_SYNC_CHANNELg      ð?ÚCONFIG_SYNC_DEBOUNCE_SECONDSg      @ÚCONFIG_SYNC_JITTER_MAX_SECONDSg      $@Ú'CONFIG_SYNC_MIN_RESYNC_INTERVAL_SECONDSÚ_POLL_TIMEOUT_SECONDSÚ_BACKOFF_INITIAL_SECONDSg      N@Ú_BACKOFF_MAX_SECONDS>   ÚcreateÚdeleteÚupdateÚupsertÚcreate_manyÚdelete_manyÚupdate_manyÚ_WRITE_ACTION_NAMES>   Úlitellm_ssoconfigÚlitellm_agentstableÚlitellm_cacheconfigÚlitellm_policytableÚlitellm_prompttableÚlitellm_mcpservertableÚlitellm_configoverridesÚlitellm_guardrailstableÚlitellm_proxymodeltableÚlitellm_credentialstableÚlitellm_searchtoolstableÚlitellm_policyattachmenttableÚ litellm_managedvectorstorestableÚ$litellm_managedvectorstoreindextableÚ_CONFIG_SYNCED_TABLE_NAMES>   Úrouter_settingsÚgeneral_settingsÚlitellm_settingsÚmodel_cost_map_reload_configÚ$anthropic_beta_headers_reload_configÚ"_RESYNC_APPLIED_CONFIG_PARAM_NAMESr   úRedisCache | Nonec                  ó   — ddl m}  | S )Nr   ©Úredis_usage_cache)Úlitellm.proxy.proxy_serverrY   rX   s    r   Úcoordination_redis_cacher[   H   s   € Ý<àÐr   Úredis_cacher   c                 óP   — | j                   €t        S | j                   › dt        › �S )Nú:)Ú	namespacer2   ©r\   s    r   Úconfig_sync_channelra   N   s.   € Ø×ÑÐ$Ü"Ð"Ø×#Ñ#Ð$ AÔ&9Ð%:Ð;Ð;r   c                 ó>   — t        t        | j                  «       «      S r   )r
   r&   Úinit_async_clientr`   s    r   Ú_raw_async_clientrd   T   s   € ÜÜØ×%Ñ%Ó'óð r   c                 ó^   — ddl m} t        | «      }t        ||«      rt	        t
        |«      S y )Nr   )ÚRedis)Úredis.asynciorf   rd   Ú
isinstancer
   r*   )r\   rf   Úclients      r   Ú_pubsub_capable_clientrj   [   s*   € Ý#ä% kÓ2€FÜ�&˜%Ô ÜÔ+¨VÓ4Ð4Ør   T)ÚfrozenÚslotsc                   ó   — e Zd ZU eed<   y)Ú_ConfigChangeMessageÚobject_typeN)r"   r#   r$   r%   Ú__annotations__r   r   r   rn   rn   d   s   … àÔr   rn   ro   c                 óR   — t        j                  t        t        | ¬«      «      «      S )N©ro   )ÚjsonÚdumpsr   rn   rr   s    r   Ú_config_change_message_jsonru   i   s   € Ü�:‰:”fÔ1¸kÔJÓKÓLÐLr   c              ƒ   ó  K  — | €y 	 t        | «      }|€t        j                  d|«       y |j                  t	        | «      t        |«      «      ƒ d {  –—†  y 7 Œ# t        $ r!}t        j                  d||«       Y d }~y d }~ww xY w­w)NzOconfig sync publish for %s skipped: cluster redis client has no pub/sub supportz%config sync publish for %s failed: %s)rj   r   Údebugr.   ra   ru   Ú	ExceptionÚwarning)r\   ro   ri   Úes       r   Úpublish_config_changer{   m   s†   è ø€ ØÐØð
^Ü.¨{Ó;ˆØˆ>Ü ×&Ñ&ØaØôð Ø�n‰nÔ0°Ó=Ô?ZÐ[fÓ?gÓh×hÒhùÜò ^Ü×$Ñ$Ð%LÈkÐ[\×]Ñ]ûð^üsJ   ‚B‡#A ªB«'A ÁAÁA ÁBÁA Á	BÁ#A?Á:BÁ?BÂBc              ƒ   óJ   K  — t        t        «       | ¬«      ƒ d {  –—†  y 7 Œ­w)N)r\   ro   )r{   r[   rr   s    r   Ú%publish_config_change_for_object_typer}   }   s   è ø€ Ü
Ô,DÓ,FÐT_Ô
`×`Ò`ús   ‚#›!œ#Ú
param_namec              ƒ   ót   K  — | t         vrt        j                  d| «       y t        | «      ƒ d {  –—†  y 7 Œ­w)Nz_config sync publish for %s skipped: no resync callback applies this param outside proxy startup)rU   r   rw   r}   )r~   s    r   Úpublish_config_param_changer€   �   s6   è ø€ ØÔ;Ñ;Ü×"Ñ"ØmØô	
ð 	Ü
/°
Ó
;×;Ò;ús   ‚.8°6±8c            	       óJ   — e Zd ZdZdededeeged   f   ddfd„Zdedefd	„Z	y)
Ú_PublishOnWriteActions©Ú_actionsÚ_object_typeÚ_publishÚactionsro   r.   Nr   c                 ó.   — || _         || _        || _        y r   rƒ   )r   r‡   ro   r.   s       r   Ú__init__z_PublishOnWriteActions.__init__Ž   s   € ØˆŒØ'ˆÔØˆ�r   Únamec                 ó  ‡‡‡— t        t        t        | j                  |«      «      }|t        vr|S t        t
        dt        t           f   |«      Š| j                  Š| j                  Šdt        dt        dt        fˆˆˆfd„}|S )N.ÚargsÚkwargsr   c               Ÿ   óX   •K  —  ‰| i |¤Žƒ d {  –—† } ‰‰«      ƒ d {  –—†  |S 7 Œ7 Œ­wr   r   )rŒ   r�   Úresultro   r.   Úwrite_actions      €€€r   Ú_write_then_publishz?_PublishOnWriteActions.__getattr__.<locals>._write_then_publish›   s8   øè ø€ ñ #/°Ð"?¸Ñ"?×?ˆFÙ˜+Ó&×&Ð&ØˆMð @øØ&ús   ƒ*�&�*Ÿ( *¨*)	r
   r&   Úgetattrr„   r@   r   r   r…   r†   )r   rŠ   Ú	attributer‘   ro   r.   r�   s       @@@r   Ú__getattr__z"_PublishOnWriteActions.__getattr__“   s   ú€ Ü¤¬°·±¸tÓ(DÓEˆ	ØÔ*Ñ*ØÐÜ"¤8¨C´¼6Ñ1BÐ,BÑ#CÀYÓOˆØ!×.Ñ.ˆØŸ™ˆð	Üð	äð	ô ÷	ð #Ð"r   )
r"   r#   r$   Ú	__slots__r&   r%   r   r   r‰   r”   r   r   r   r‚   r‚   ‹   sO   „ Ø8€Ið  ð  °Sð  À8ÈSÈEÐS\Ð]aÑSbÐLbÑCcð  Ðhló  ð
# ð #¨ô #r   r‚   r‡   úTableActions[RowT_co]Ú
table_namer.   c                 óJ   — |t         vr| S t        | ||¬«      }t        d|«      S )N)r‡   ro   r.   r–   )rO   r‚   r
   )r‡   r—   r.   Úwrappeds       r   Ú"wrap_table_actions_for_config_syncrš   ¦   s/   € ð
 Ô3Ñ3ØˆÜ+°GÈÐ]dÔe€GÜÐ'¨Ó1Ð1r   c                   ó:  — e Zd ZdZeeeeede	j                  ej                  fdddeeg ed   f   df   deded	ed
ededej$                  dz  deeged   f   deg ef   ddfd„Zdd„Zdd„Zdd„Zdeddfd„Zdd„Zededdfd„«       Zdd„Zededdfd„«       Zy)ÚConfigSyncSubscriber)Ú_backoff_initial_secondsÚ_backoff_max_secondsÚ_debounce_secondsÚ_jitter_max_secondsÚ_last_resync_atÚ_min_resync_interval_secondsÚ
_monotonicÚ_redis_cacheÚ_resync_callbacksÚ_rngÚ_sleepÚ_taskNr\   r   Úresync_callbacks.Údebounce_secondsÚjitter_max_secondsÚmin_resync_interval_secondsÚbackoff_initial_secondsÚbackoff_max_secondsÚrngÚsleepÚ	monotonicr   c                 óØ   — || _         || _        || _        || _        || _        || _        || _        |�|nt        j                  «       | _	        |	| _
        |
| _        d | _        d | _        y r   )r¤   r¥   rŸ   r    r¢   r�   rž   ÚrandomÚRandomr¦   r§   r£   r¨   r¡   )r   r\   r©   rª   r«   r¬   r­   r®   r¯   r°   r±   s              r   r‰   zConfigSyncSubscriber.__init__Á   sl   € ð (ˆÔØ!1ˆÔØ!1ˆÔØ#5ˆÔ Ø,GˆÔ)Ø(?ˆÔ%Ø$7ˆÔ!Ø˜?‘C´·±³ˆŒ	ØˆŒØ#ˆŒØ04ˆŒ
Ø-1ˆÕr   c                 ón   — | j                   �y t        j                  | j                  «       «      | _         y r   )r¨   ÚasyncioÚcreate_taskÚ_runr    s    r   ÚstartzConfigSyncSubscriber.startÛ   s'   € Ø�:‰:Ð!ØÜ×(Ñ(¨¯©«Ó5ˆ�
r   c              ƒ   ó¤   K  — | j                   }|€y d | _         |j                  «       }	 |ƒ d {  –—†  y 7 Œ# t        j                  $ r Y y w xY w­wr   )r¨   Úcancelr¶   ÚCancelledError)r   ÚtaskÚ_s      r   ÚstopzConfigSyncSubscriber.stopà   sL   è ø€ Ø—j‘jˆØˆ<ØØˆŒ
Ø�K‰K‹Mˆð	Ø�JŠJùÜ×%Ñ%ò 	Ùð	üs1   ‚'Aª7 ¯5°7 ´Aµ7 ·AÁ
AÁAÁAc              ƒ   óª  K  — | j                   }	 	 t        | j                  «      }|€t        j                  d«       y |j                  «       }	 |j                  t        | j                  «      «      ƒ d {  –—†  | j                   }| j                  |«      ƒ d {  –—†  | j                  |«      ƒ d {  –—†  	 Œ«7 ŒD7 Œ!7 Œ
# | j                  |«      ƒ d {  –—†7   w xY w# t        j                  $ r ‚ t        $ rT}t        j                  d||«       | j                  |«      ƒ d {  –—†7   t        |dz  | j                  «      }Y d }~Œ‘d }~ww xY w­w)Nz~config sync subscriber disabled: cluster redis client has no pub/sub support; interval polling remains the only sync mechanismz=config sync subscriber redis error: %s; reconnecting in %.0fsé   )r�   rj   r¤   r   ry   r0   r   ra   Ú_consumeÚ_close_pubsubr¶   r¼   rx   r§   Úminrž   )r   Úbackoff_secondsri   r0   rz   s        r   r¸   zConfigSyncSubscriber._runë   s4  è ø€ Ø×7Ñ7ˆØðVÜ/°×0AÑ0AÓB�Ø�>Ü(×0Ñ0ðKôð ØŸ™›�ð5Ø ×*Ñ*Ô+>¸t×?PÑ?PÓ+QÓR×RÐRØ&*×&CÑ&C�OØŸ-™-¨Ó/×/Ð/à×,Ñ,¨VÓ4×4Ñ4ð ð Søà/øà4ù˜$×,Ñ,¨VÓ4×4Ò4ûÜ×)Ñ)ò ØÜò VÜ$×,Ñ,ØSØØ#ôð
 —k‘k /Ó2×2Ñ2Ü"% o¸Ñ&9¸4×;TÑ;TÓ"U•ûðVüsž   ‚E‘,C  ½E¾C  Á'C Á6B;Á7$C ÂB=ÂC Â C  Â4B?Â5C  Â9EÂ;C Â=C Â?C  ÃCÃCÃCÃC  Ã EÃ<+EÄ'D*Ä(EÅEÅEÅEr0   c              ƒ   ó¶  K  — 	 |j                  dt        ¬«      ƒ d {  –—† }|€Œ#| j                  | j                  | j                  j                  d| j                  «      z   «      ƒ d {  –—†  | j                  «       ƒ d {  –—†  | j                  |«      ƒ d {  –—†  | j                  «       ƒ d {  –—†  | j                  «       | _        ŒË7 Œ°7 Œe7 ŒO7 Œ87 Œ"­w)NT©r   r   g        )r   r6   r§   rŸ   r¦   Úuniformr    Ú_wait_for_min_resync_intervalÚ_drain_pendingÚ_run_resync_callbacksr£   r¡   )r   r0   r,   s      r   rÂ   zConfigSyncSubscriber._consume  sÀ   è ø€ ØØ"×.Ñ.ÈÔWlÐ.Óm×mˆGØˆØØ—+‘+˜d×4Ñ4°t·y±y×7HÑ7HÈÈd×NfÑNfÓ7gÑgÓh×hÐhØ×4Ñ4Ó6×6Ð6Ø×%Ñ% fÓ-×-Ð-Ø×,Ñ,Ó.×.Ð.Ø#'§?¡?Ó#4ˆDÔ ð Ømøð iøØ6øØ-øØ.úsX   ‚CžCŸACÁ+CÁ,CÂCÂCÂCÂCÂ4CÂ5CÃCÃCÃCÃCc              ƒ   óè   K  — | j                   €y | j                  | j                  «       | j                   z
  z
  }|dk  ry t        j                  d|«       | j                  |«      ƒ d {  –—†  y 7 Œ­w)Nr   zDconfig sync resync throttled for %.1fs to cap fleet-wide reload rate)r¡   r¢   r£   r   rw   r§   )r   Úseconds_until_next_resyncs     r   rÉ   z2ConfigSyncSubscriber._wait_for_min_resync_interval  sm   è ø€ Ø×ÑÐ'ØØ$(×$EÑ$EÈÏÉÓIZÐ]a×]qÑ]qÑIqÑ$rÐ!Ø$¨Ò)ØÜ×"Ñ"ØRØ%ô	
ð �k‰kÐ3Ó4×4Ò4ús   ‚A(A2Á*A0Á+A2c              ƒ   ó†   K  — | j                  dd¬«      ƒ d {  –—† �	 | j                  dd¬«      ƒ d {  –—† �Œy y 7 Œ#7 Œ	­w)NTr   rÇ   )r   )r0   s    r   rÊ   z#ConfigSyncSubscriber._drain_pending  sD   è ø€ à×&Ñ&ÀÈqÐ&ÓQ×QÐ]Øð ×&Ñ&ÀÈqÐ&ÓQ×QÓ]ÐQøÐQús!   ‚A™=šAµ?¶A»A¿Ac              ƒ   óª   K  — | j                   D ]  }	  |«       ƒ d {  –—†  Œ y 7 Œ# t        $ r }t        j                  d|«       Y d }~Œ<d }~ww xY w­w)Nz&config sync resync callback failed: %s)r¥   rx   r   ry   )r   Úcallbackrz   s      r   rË   z*ConfigSyncSubscriber._run_resync_callbacks$  sW   è ø€ Ø×.Ñ.ò 	ZˆHðZÙ“j× Ñ ñ	Zà ùÜò ZÜ$×,Ñ,Ð-UÐWX×YÑYûðZüs6   ‚A“
'�%ž'¢A¥'§	A°AÁAÁAÁAc              ƒ   óš   K  — 	 | j                  «       ƒ d {  –—†  y 7 Œ# t        $ r }t        j                  d|«       Y d }~y d }~ww xY w­w)Nz#config sync pubsub close failed: %s)r!   rx   r   rw   )r0   rz   s     r   rÃ   z"ConfigSyncSubscriber._close_pubsub+  s@   è ø€ ð	QØ—-‘-“/×!Ò!ùÜò 	QÜ ×&Ñ&Ð'LÈa×PÑPûð	Qüs5   ‚A„ —˜ œA� Ÿ	A¨A¾AÁAÁA)r   N)r"   r#   r$   r•   r3   r4   r5   r7   r8   r¶   r°   Útimer±   Útupler   r   r(   r³   r´   r‰   r¹   r¿   r¸   r   rÂ   rÉ   ÚstaticmethodrÊ   rË   rÃ   r   r   r   rœ   rœ   ±   sO  „ ð€Ið& #?Ø$BØ-TØ)AØ%9Ø$(Ø4;·M±MØ)-¯©ñ2à!ð2ð   ¨¨Y°t©_Ð)<Ñ =¸sÐ BÑCð2ð  ð	2ð
 "ð2ð &+ð2ð "'ð2ð #ð2ð �]‰]˜TÑ!ð2ð ˜˜ ¨4¡Ð0Ñ1ð2ð ˜B ˜IÑ&ð2ð 
ó2ó46ó
	óVð:	5Ð%6ð 	5¸4ó 	5ó
5ð ðÐ%6ð ¸4ò ó ðóZð ðQÐ$5ð Q¸$ò Qó ñQr   rœ   )r   rV   )2r¶   rs   r³   rÒ   Úcollections.abcr   r   Údataclassesr   r   Útypingr   r   r	   r
   Úlitellm._loggingr   Ú%litellm.repositories.prisma_protocolsr   r   Úlitellm.caching.redis_cacher   r   r*   r2   rp   r3   r4   r5   r6   r7   r8   Ú	frozensetr@   r%   rO   rU   r[   ra   r&   rd   rj   rn   ru   r{   r}   r€   r‚   rš   rœ   r   r   r   ú<module>rÜ      s  ðÜ Û Û Û ß /ß )ß 7Ó 7å 1ß GáÝ6ô/˜ô /ô/˜hô /ð ;Ð �UÓ :Ø&)Ð ˜eÓ )Ø(+Ð  Ó +Ø15Ð '¨Ó 5Ø"Ð �uÓ "Ø"%Ð ˜%Ó %Ø"Ð �eÓ "á-6ÚYó.Ð �U˜9 S™>Ñ*ó ñ 5>òó5Ð ˜E )¨C¡.Ñ1ó ñ& =Fòó=Ð " E¨)°C©.Ñ$9ó óð< \ð <°có <ð <ð °Fó ð¨ð Ð9PÐSWÑ9Wó ñ �$˜dÔ#÷ð ó $ððM¨Sð M°Só Mð^Ð-@ð ^Èsð ^ÐW[ó ^ð a¸Sð aÀTó að<°#ð <¸$ó <÷#ñ #ð< 1Vñ2Ø$ð2àð2ð �s�e˜Y t™_Ð,Ñ-ð2ð ó	2÷Qò Qr   