Ë
    uPêjî   ã                   ó  — U d dl mZmZ d dlmZmZmZm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 d dlmZmZ d d	lmZ d d
lmZmZ  e«       Zeed<    eddg¬«      Zeed<   deeef   fd„Zej?                  de ee«      g¬«      d„ «       Z ejC                  ddg ee«      g¬«      defd„«       Z"de#e$e%f   fd„Z&ej?                  d ee«      g¬«      d„ «       Z'ejC                  ddg ee«      g¬«      d„ «       Z(y)é    )ÚAnyÚFinal)Ú	APIRouterÚDependsÚHTTPExceptionÚRequestN)Úverbose_proxy_logger)Ú
RedisCache)Ú
safe_dumps)ÚSensitiveDataMasker)ÚProxyErrorTypesÚProxyException)Úuser_api_key_auth)ÚCachePingResponseÚHealthCheckCacheParamsÚmaskerz/cacheÚcaching)ÚprefixÚtagsÚrouterÚreturnc                  ó:  — t         j                  €i S 	 t        t         j                  j                  «      } | rt        di | ¤Žj	                  «       ni }t
        j                  |«      S # t        t        f$ r"}t        j                  d|«       i cY d}~S d}~ww xY w)a�  
    Safely extracts and cleans cache parameters.

    The health check UI needs to display specific cache parameters, to show users how they set up their cache.

    eg.
        {
            "host": "localhost",
            "port": 6379,
            "redis_kwargs": {"db": 0},
            "namespace": "test",
        }

    Returns:
        Dict containing cleaned and masked cache parameters
    Nz!Error extracting cache params: %s© )ÚlitellmÚcacheÚvarsr   Ú
model_dumpr   Ú	mask_dictÚAttributeErrorÚ	TypeErrorr	   Údebug)Úcache_paramsÚcleaned_paramsÚes      úa/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/caching_routes.pyÚ_extract_cache_paramsr&      s„   € ô" ‡}�}ÐØˆ	ðÜ"¤7§=¡=×#6Ñ#6Ó7ˆÙWcÔ 6Ñ F¸Ñ F× QÑ QÔ SÐikˆÜ×Ñ Ó/Ð/øÜœIÐ&ò Ü×"Ñ"Ð#FÈÔJØ�	ûðús   ”AA) Á)BÁ8BÂBÂBz/ping)Úresponse_modelÚdependenciesc            	   ƒ   ó&  K  — i } i }t         j                  €*t        t        ddddœ«      t        j
                  dd¬«      ‚	 t        j                  t        t         j                  «      «      } | j                  dd«       t        «       }t         j                  j                  d	k(  rÅt         j                  j                  «       ƒ d{  –—† }t        j                  d
t        |«      z   «       t         j                  j!                  dddddœg¬«      ƒ d{  –—†  t        j                  d«       t#        dt        t         j                  j                  «      ddt        | «      |¬«      S t#        dt        t         j                  j                  «      t        | «      ¬«      S 7 ŒÛ7 ŒŽ# t$        $ r ‚ t&        $ rT t        j(                  d«       dt        | «      t        |«      dœ}t        t        |«      t        j
                  dd¬«      ‚w xY w­w)z6
    Endpoint for checking if cache can be pinged
    Nú,Cache not initialized. litellm.cache is Nonez{})ÚmessageÚlitellm_cache_paramsÚhealth_check_cache_paramsÚ
cache_pingé÷  )r+   ÚtypeÚparamÚcoder   Úredisz/cache/ping: ping_response: Útest_keyz
test-modelÚuserztest from litellm)ÚroleÚcontent)ÚresultÚmodelÚmessagesz"/cache/ping: done with set_cache()ÚhealthyTÚsuccess)ÚstatusÚ
cache_typeÚping_responseÚset_cache_responser,   r-   )r=   r>   r,   zCache health check failedzService Unhealthy)r   r   r   r   r   Úcache_ping_errorr   r   r   Úpopr&   r0   Úpingr	   r!   ÚstrÚasync_add_cacher   r   Ú	ExceptionÚ	exception)r,   Úcleaned_cache_paramsr?   Úerror_messages       r%   r.   r.   2   sæ  è ø€ ð ,.ÐØ+-ÐÜ‡}�}ÐÜÜàMØ,0Ø15ñóô !×1Ñ1ØØô
ð 	
ð-
Ü%×/Ñ/´´W·]±]Ó0CÓDÐà× Ñ  ¨$Ô/Ü4Ó6Ðä�=‰=×Ñ Ò(Ü)0¯©×);Ñ);Ó)=×#=ˆMÜ ×&Ñ&Ð'EÌÈMÓHZÑ'ZÔ[ä—-‘-×/Ñ/Ø!Ø"Ø#)Ð6IÑJÐKð 0ó ÷ ð ô
 !×&Ñ&Ð'KÔLä$Ø ÜœwŸ}™}×1Ñ1Ó2Ø"Ø#,Ü%/Ð0DÓ%EØ*>ôð ô %Ø ÜœwŸ}™}×1Ñ1Ó2Ü%/Ð0DÓ%Eôð ð' $>øðùô* ò ØÜò 
Ü×&Ñ&Ð'BÔCà*Ü$.Ð/CÓ$DÜ)3Ð4HÓ)Iñ 
ˆô
 Ü˜}Ó-Ü ×1Ñ1ØØô	
ð 	
ð
üsQ   ‚?HÁBF( ÃF$Ã	AF( ÄF&ÄAF( Å+HÅ,7F( Æ#HÆ$F( Æ&F( Æ(A&HÈHz/delete)r   r(   Úrequestc              ƒ   óÊ  K  — 	 t         j                  €t        dd¬«      ‚| j                  «       ƒ d{  –—† }|j	                  dd«      }t         j                  j
                  dk(  r,t         j                  j                  |¬«      ƒ d{  –—†  dd	iS t        d
dt         j                  j
                  › d�¬«      ‚7 Œˆ7 Œ3# t        $ r}t        d
d|› d�¬«      ‚d}~ww xY w­w)a›  
    Endpoint for deleting a key from the cache. All responses from litellm proxy have `x-litellm-cache-key` in the headers

    Parameters:
    - **keys**: *Optional[List[str]]* - A list of keys to delete from the cache. Example {"keys": ["key1", "key2"]}

    ```shell
    curl -X POST "http://0.0.0.0:4000/cache/delete"     -H "Authorization: Bearer sk-1234"     -d '{"keys": ["key1", "key2"]}'
    ```

    Nr/   r*   ©Ústatus_codeÚdetailÚkeysr3   )rO   r=   r<   éô  úCache type z; does not support deleting a key. only `redis` is supportedzCache Delete Failed(ú))r   r   r   ÚjsonÚgetr0   Údelete_cache_keysrF   )rJ   Úrequest_datarO   r$   s       r%   Úcache_deleterW   z   sá   è ø€ ð&
Ü�=‰=Ð Ü¨CÐ8fÔgÐgà$+§L¡L£N×2ˆØ"×&Ñ& v¨tÓ4ˆä�=‰=×Ñ Ò(Ü—-‘-×1Ñ1°tÐ1Ó<×<Ð<à˜)ðð ô  ØØ$¤W§]¡]×%7Ñ%7Ð$8Ð8sÐtôð ð 3øð =ùô ò 
ÜØØ)¨!¨¨AÐ.ô
ð 	
ûð
üsK   ‚C#„0C ´B=µAC ÂB?ÂC ÂC#Â*C Â?C Ã	C Ã
CÃC Ã C#c                 ó    — 	 | j                  «       }|t        |«      fS # t        $ r%}t        j                  d|«       dgdfcY d}~S d}~ww xY w)z´
    Helper function to safely get Redis client list information.

    Returns:
        tuple: (client_list, num_clients) where num_clients is -1 if CLIENT LIST is unavailable
    zCCLIENT LIST command failed (likely restricted on managed Redis): %sz8CLIENT LIST command not available on this Redis instanceéÿÿÿÿN)Úclient_listÚlenrF   r	   Úwarning)Úcache_instancerZ   r$   s      r%   Ú_get_redis_client_infor^   ¥   sX   € ðPØ+×7Ñ7Ó9ˆØœC Ó,Ð,Ð,øÜò PÜ×$Ñ$Ð%jÐlmÔnØJÐKÈRÐOÕOûðPús   ‚ Ÿ	A¨AÁAÁAz/redis/info)r(   c               ƒ   ó  K  — 	 t         j                  €t        dd¬«      ‚t         j                  j                  dk(  r(t	        t         j                  j                  t
        «      s)t        ddt         j                  j                  › d�¬«      ‚t        t         j                  j                  «      \  } }t         j                  j                  j                  «       }|| |d	œS # t        $ r}t        dd
|› d�¬«      ‚d}~ww xY w­w)z*
    Endpoint for getting /redis/info
    Nr/   r*   rL   r3   rP   rQ   z does not support redis info)Únum_clientsÚclientsÚinfoúService Unhealthy (rR   )	r   r   r   r0   Ú
isinstancer
   r^   rb   rF   )rZ   r`   Ú
redis_infor$   s       r%   Úcache_redis_inforf   ´   sè   è ø€ ð
Ü�=‰=Ð Ü¨CÐ8fÔgÐgä—‘×"Ñ" gÒ-´*¼W¿]¹]×=PÑ=PÔR\Ô2]ÜØØ$¤W§]¡]×%7Ñ%7Ð$8Ð8TÐUôð ô $:¼'¿-¹-×:MÑ:MÓ#NÑ ˆ�[ô $ŸM™M×/Ñ/×4Ñ4Ó6ˆ
ð 'Ø"Øñ
ð 	
øô
 ò 
ÜØØ(¨¨¨1Ð-ô
ð 	
ûð
üs)   ‚D„CC# Ã"DÃ#	DÃ,C=Ã=DÄDz	/flushallc               ƒ   ó¾  K  — 	 t         j                  €t        dd¬«      ‚t         j                  j                  dk(  rTt	        t         j                  j                  t
        «      r,t         j                  j                  j                  «        ddiS t        dd	t         j                  j                  › d
�¬«      ‚# t        $ r} t        dd| › d�¬«      ‚d} ~ ww xY w­w)aƒ  
    A function to flush all items from the cache. (All items will be deleted from the cache with this)
    Raises HTTPException if the cache is not initialized or if the cache type does not support flushing.
    Returns a dictionary with the status of the operation.

    Usage:
    ```
    curl -X POST http://0.0.0.0:4000/cache/flushall -H "Authorization: Bearer sk-1234"
    ```
    Nr/   r*   rL   r3   r=   r<   rP   rQ   z does not support flushingrc   rR   )r   r   r   r0   rd   r
   ÚflushallrF   )r$   s    r%   Úcache_flushallri   Ø   sÄ   è ø€ ð 
Ü�=‰=Ð Ü¨CÐ8fÔgÐgÜ�=‰=×Ñ Ò(¬Z¼¿¹×8KÑ8KÌZÔ-XÜ�M‰M×Ñ×(Ñ(Ô*à˜)ðð ô  ØØ$¤W§]¡]×%7Ñ%7Ð$8Ð8RÐSôð øô ò 
ÜØØ(¨¨¨1Ð-ô
ð 	
ûð
üs/   ‚C„BB; ÂCÂ)B; Â;	CÃCÃCÃC))Útypingr   r   Úfastapir   r   r   r   r   Úlitellm._loggingr	   Úlitellm.caching.cachingr
   Ú*litellm.litellm_core_utils.safe_json_dumpsr   Ú0litellm.litellm_core_utils.sensitive_data_maskerr   Úlitellm.proxy._typesr   r   Ú$litellm.proxy.auth.user_api_key_authr   Úlitellm.types.cachingr   r   r   Ú__annotations__r   ÚdictrD   r&   rT   r.   ÚpostrW   ÚtupleÚlistÚintr^   rf   ri   r   ó    r%   ú<module>rz      sW  ðß Ð ç >Ó >ã Ý 1Ý .Ý AÝ Pß @Ý Bß Ká#Ó%€ˆÓ %áØØ
ˆô€ˆó ð˜t C¨ H™~ó ð8 ‡�ØØ$ÙÐ+Ó,Ð-ð ó ñ
@
óð
@
ðF ‡�ØØ
ˆÙÐ+Ó,Ð-ð ó ð
#
 ò #
óð
#
ðLP¨e°D¸#°IÑ.>ó Pð ‡�ØÙÐ+Ó,Ð-ð ó ñ
ó	ð
ð@ ‡�ØØ
ˆÙÐ+Ó,Ð-ð ó ñ

óñ

ry   