Ë
    uPêjB¬  ã                   ó.  — d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlmZm	Z	 d dl
mZ d dlZd dlmZ d dlmZ d dlmZ d dl­ d d	lmZ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" 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„ Z- G d„ de.e«      Z/ G d„ d«      Z0e1jd                  ddd e3e4«      fde1dz  de.dz  de.dz  de.dz  de3e5   dz  f
d „Z6e1jd                  ddd e3e4«      fde1dz  de.dz  de.dz  de.dz  de3e5   dz  f
d!„Z7d"„ Z8y)#é    N)ÚEnum)ÚAnyÚFinal)Ú	BaseModel)Úverbose_logger)ÚCACHED_STREAMING_CHUNK_DELAY)ÚModelParamHelper)Ú*)ÚEmbeddingResponseÚall_litellm_paramsé   )ÚAzureBlobCache)Ú	BaseCache)Ú	DiskCache)Ú	DualCache)ÚGCSCache)ÚInMemoryCache)ÚQdrantSemanticCache)Ú
RedisCache)ÚRedisClusterCache)ÚRedisSemanticCache)ÚS3Cachec                 ó†   — 	 t        j                  | «       t        j                  rt	        | «       y y # t
        $ r Y y w xY w©N)r   ÚdebugÚlitellmÚset_verboseÚprintÚ	Exception)Úprint_statements    ú\/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/caching/caching.pyÚprint_verboser"   (   s=   € ðÜ×Ñ˜_Ô-Ü×ÒÜ�/Õ"ð øäò Ùðús   ‚04 ´	A ¿A c                   ó   — e Zd ZdZdZy)Ú	CacheModeÚ
default_onÚdefault_offN)Ú__name__Ú
__module__Ú__qualname__r%   r&   © ó    r!   r$   r$   1   s   „ Ø€JØ�Kr+   r$   c            Z       óö  — e Zd ZU ej                  ej                  dddddddd ee«      dddddddddddddddddddddddddddddddddf,dedz  dedz  de	dz  de	dz  de	dz  d	e	dz  d
e
dz  de
dz  de
dz  de
dz  dee   dz  de	dz  de	dz  de	dz  de	dz  de	dz  dedz  dee	z  dz  de	dz  de	dz  de	dz  de	dz  dedz  de	dz  de	dz  de	dz  de	dz  de	d e	dz  d!e	d"e	dz  d#edz  d$edz  d%e	dz  d&e	dz  d'e	dz  d(e	dz  d)e	dz  d*e	d+edz  d,edz  d-e
dz  d.e	dz  d/e	dz  fXd0„Z eh d1£«      Zeed2<   d3Zee	d4f   ed5<   d6efd7„Zd8ed6e	fd9„Zd6e	fd:„Zd;e	d8ed6e	dz  fd<„Zd8ed6e	fd=„Zd>ed?e	dz  d6e	dz  fd@„Zd8ed6e	fdA„Zd6e	dz  fdB„ZdCe	d6dfdD„ZedEe	d6e	fdF„«       Z dGe	d6e	fdH„Z!dI„ Z"dJedz  dKe
dz  fdL„Z#ed8ee	ef   d6ee	ef   fdM„«       Z$edNee	ef   dOee	ef   d6dfdP„«       Z%didQe&dz  fdR„Z'didQe&dz  fdS„Z(dT„ Z)dU„ Z*didQe&dz  fdV„Z+	 	 djdWedXe	dz  dYedz  dZedz  d6e,f
d[„Z-d\e.d]ed6edz  fd^„Z/d\e.d]ed6edz  fd_„Z0	 dkd\e.d`e	d8ed]ed6ee	eef   f
da„Z1didQe&dz  fdb„Z2dc„ Z3dd„ Z4de„ Z5df„ Z6dg„ Z7d6efdh„Z8y)lÚCacheNTztext-embedding-ada-002ÚtypeÚmodeÚhostÚportÚpasswordÚ	namespaceÚttlÚdefault_in_memory_ttlÚdefault_in_redis_ttlÚsimilarity_thresholdÚsupported_call_typesÚazure_account_urlÚazure_blob_containerÚs3_bucket_nameÚs3_region_nameÚs3_api_versionÚ
s3_use_sslÚ	s3_verifyÚs3_endpoint_urlÚs3_aws_access_key_idÚs3_aws_secret_access_keyÚs3_aws_session_tokenÚ	s3_configÚs3_pathÚgcs_bucket_nameÚgcs_path_service_accountÚgcs_pathÚ$redis_semantic_cache_embedding_modelÚredis_semantic_cache_index_nameÚ%valkey_semantic_cache_embedding_modelÚ valkey_semantic_cache_index_nameÚredis_flush_sizeÚredis_startup_nodesÚdisk_cache_dirÚqdrant_api_baseÚqdrant_api_keyÚqdrant_collection_nameÚqdrant_quantization_configÚ%qdrant_semantic_cache_embedding_modelÚ!qdrant_semantic_cache_vector_sizeÚ)semantic_cache_embedding_max_input_tokensÚ semantic_cache_embedding_timeoutÚgcp_service_accountÚgcp_ssl_ca_certsc-                 óü  — |t         j                  k(  r�|!s<t        j                  d«      }.|.�%t	        |.t
        «      rt        j                  |.«      }!|!r*|||| |!dœ|-¥}/|+�|+|/d<   |,�|,|/d<   t        di |/¤Ž| _	        �ngt        d|||| dœ|-¤Ž| _	        �nP|t         j                  k(  rt        d||||
|||)|*dœ|-¤Ž| _	        �n"|t         j                  k(  rdd	lm}0  |0d||||
|||!|)|*d
œ	|-¤Ž| _	        nñ|t         j                   k(  rt#        |#|$|%|
|&|'|(|)|*¬«	      | _	        nÄ|t         j$                  k(  rt'        «       | _	        n¡|t         j(                  k(  rt+        d|||||||||||dœ|-¤Ž| _	        nq|t         j,                  k(  rt/        |||¬«      | _	        nJ|t         j0                  k(  rt3        ||¬«      | _	        n$|t         j4                  k(  rt7        |"¬«      | _	        dt        j8                  vrt        j8                  j;                  d«       dt        j<                  vrt        j>                  jA                  d«       dt        jB                  vrt        j>                  jE                  d«       || _#        || _$        || _%        | | _&        || _'        |xs tP        jR                  | _*        | jH                  t         j$                  k(  r	|�|| _'        | jH                  t         j                  k(  s:| jH                  t         j                  k(  s| jH                  t         j                  k(  r	|	�|	| _'        | jJ                  �7t	        | j                  t        «      r| jJ                  | j                  _%        yyy)aô  
        Initializes the cache based on the given type.

        Args:
            type (str, optional): The type of cache to initialize. Can be "local", "redis", "redis-semantic", "qdrant-semantic", "s3" or "disk". Defaults to "local".

            # Redis Cache Args
            host (str, optional): The host address for the Redis cache. Required if type is "redis".
            port (int, optional): The port number for the Redis cache. Required if type is "redis".
            password (str, optional): The password for the Redis cache. Required if type is "redis".
            namespace (str, optional): The namespace for the Redis cache. Required if type is "redis".
            ttl (float, optional): The ttl for the Redis cache
            redis_flush_size (int, optional): The number of keys to flush at a time. Defaults to 1000. Only used if batch redis set caching is used.
            redis_startup_nodes (list, optional): The list of startup nodes for the Redis cache. Defaults to None.

            # Qdrant Cache Args
            qdrant_api_base (str, optional): The url for your qdrant cluster. Required if type is "qdrant-semantic".
            qdrant_api_key (str, optional): The api_key for the local or cloud qdrant cluster.
            qdrant_collection_name (str, optional): The name for your qdrant collection. Required if type is "qdrant-semantic".
            similarity_threshold (float, optional): The similarity threshold for semantic-caching, Required if type is "redis-semantic" or "qdrant-semantic".
            semantic_cache_embedding_max_input_tokens (int, optional): Truncate prompts to this many tokens before embedding them for semantic caching. Defaults to the embedding deployment's configured max_input_tokens.
            semantic_cache_embedding_timeout (float, optional): Seconds a semantic-cache lookup may spend embedding the prompt before it gives up and lets the request continue to the LLM. Defaults to SEMANTIC_CACHE_EMBEDDING_TIMEOUT_SECONDS.

            # Disk Cache Args
            disk_cache_dir (str, optional): The directory for the disk cache. Defaults to None.

            # S3 Cache Args
            s3_bucket_name (str, optional): The bucket name for the s3 cache. Defaults to None.
            s3_region_name (str, optional): The region name for the s3 cache. Defaults to None.
            s3_api_version (str, optional): The api version for the s3 cache. Defaults to None.
            s3_use_ssl (bool, optional): The use ssl for the s3 cache. Defaults to True.
            s3_verify (bool, optional): The verify for the s3 cache. Defaults to None.
            s3_endpoint_url (str, optional): The endpoint url for the s3 cache. Defaults to None.
            s3_aws_access_key_id (str, optional): The aws access key id for the s3 cache. Defaults to None.
            s3_aws_secret_access_key (str, optional): The aws secret access key for the s3 cache. Defaults to None.
            s3_aws_session_token (str, optional): The aws session token for the s3 cache. Defaults to None.
            s3_config (dict, optional): The config for the s3 cache. Defaults to None.

            # GCS Cache Args
            gcs_bucket_name (str, optional): The bucket name for the gcs cache. Defaults to None.
            gcs_path_service_account (str, optional): Path to the service account json.
            gcs_path (str, optional): Folder path inside the bucket to store cache files.

            # Common Cache Args
            supported_call_types (list, optional): List of call types to cache for. Defaults to cache == on for all call types.
            **kwargs: Additional keyword arguments for redis.Redis() cache

        Raises:
            ValueError: If an invalid cache type is provided.

        Returns:
            None. Cache is set as a litellm param
        ÚREDIS_CLUSTER_NODESN)r0   r1   r2   rM   Ústartup_nodesrX   rY   )r0   r1   r2   rM   )r0   r1   r2   r7   Úembedding_modelÚ
index_nameÚembedding_max_input_tokensÚembedding_timeoutr   )ÚValkeySemanticCache)	r0   r1   r2   r7   r]   r^   r\   r_   r`   )	rP   rQ   Úcollection_namer7   Úquantization_configr]   Úvector_sizer_   r`   )r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   )Úbucket_nameÚpath_service_accountrH   )Úaccount_urlÚ	container)rO   Úcacher*   )+ÚLiteLLMCacheTypeÚREDISr   Ú
get_secretÚ
isinstanceÚstrÚjsonÚloadsr   ri   r   ÚREDIS_SEMANTICr   ÚVALKEY_SEMANTICÚvalkey_semantic_cachera   ÚQDRANT_SEMANTICr   ÚLOCALr   ÚS3r   ÚGCSr   Ú
AZURE_BLOBr   ÚDISKr   Úinput_callbackÚappendÚsuccess_callbackÚlogging_callback_managerÚadd_litellm_success_callbackÚ_async_success_callbackÚ"add_litellm_async_success_callbackr8   r.   r3   rM   r4   r$   r%   r/   )1Úselfr.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   rX   rY   ÚkwargsÚ_env_cluster_nodesÚcluster_kwargsra   s1                                                    r!   Ú__init__zCache.__init__8   s˜  € ðP Ô#×)Ñ)Ò)á&Ü,3×,>Ñ,>Ð?TÓ,UÐ"Ø%Ð1´jÐASÔUXÔ6YÜ*.¯*©*Ð5GÓ*HÐ'á"ð !Ø Ø (Ø(8Ø%8ñ)ð ð)�ð 'Ð2Ø<O�NÐ#8Ñ9Ø#Ð/Ø9I�NÐ#5Ñ6ä(9Ñ(K¸NÑ(K�–
ä'ð ØØØ%Ø%5ñ	ð
 ñ�–
ð Ô%×4Ñ4Ò4Ü+ð 
ØØØ!Ø%9Ø DØ:Ø+TØ"Bñ
ð ñ
ˆDŽJð Ô%×5Ñ5Ò5õ Cá,ð ØØØ!Ø%9Ø EØ;Ø1Ø+TØ"Bñð ñˆD�Jð Ô%×5Ñ5Ò5Ü,Ø /Ø-Ø 6Ø%9Ø$>Ø EØ=Ø+TØ"Bô
ˆD�Jð Ô%×+Ñ+Ò+Ü&›ˆD�JØÔ%×(Ñ(Ò(Ü ð Ø-Ø-Ø-Ø%Ø#Ø /Ø%9Ø)AØ%9Ø#Øñð ñˆD�Jð Ô%×)Ñ)Ò)Ü!Ø+Ø%=Ø!ôˆD�Jð
 Ô%×0Ñ0Ò0Ü'Ø-Ø.ôˆD�Jð Ô%×*Ñ*Ò*Ü"°.ÔAˆDŒJØœ'×0Ñ0Ñ0Ü×"Ñ"×)Ñ)¨'Ô2Øœ'×2Ñ2Ñ2Ü×,Ñ,×IÑIÈ'ÔRØœ'×9Ñ9Ñ9Ü×,Ñ,×OÑOÐPWÔXà ð 	Ô!ð ˆŒ	Ø"ˆŒØ 0ˆÔØˆŒØ#Ò;¤y×';Ñ';ˆŒ	à�9‰9Ô(×.Ñ.Ò.Ð3HÐ3TØ,ˆDŒHð �I‰IÔ)×/Ñ/Ò/Ø�y‰yÔ,×;Ñ;Ò;Ø�y‰yÔ,×<Ñ<Ò<Ø"Ð.Ø+ˆDŒHà�>‰>Ð%¬*°T·Z±ZÄÔ*LØ#'§>¡>ˆD�J‰JÕ ð +MÐ%r+   >   ÚinputÚpromptÚmessagesÚ%_SEMANTIC_CACHE_SCOPE_EXCLUDED_PARAMS)Úuser_api_keyÚuser_api_key_team_idÚuser_api_key_org_id.Ú#_SEMANTIC_CACHE_TENANT_SCOPE_FIELDSÚreturnc                 óx   — | j                   t        j                  t        j                  t        j                  fv S r   )r.   rj   rq   rt   rr   ©r�   s    r!   Ú_is_semantic_cachezCache._is_semantic_cache0  s3   € Ø�y‰yÜ×+Ñ+Ü×,Ñ,Ü×,Ñ,ð
ð 
ð 	
r+   r‚   c                 ó  — |j                  d«      xs i }|j                  d«      xs i }|j                  d«      xs i }d}| j                  D ]3  }|j                  |«      }|€|j                  |«      }|€Œ*||› d|› �z  }Œ5 |S )NÚmetadataÚlitellm_paramsÚ ú: )Úgetr�   )r�   r‚   r“   r”   Úmetadata_in_litellm_paramsÚscopeÚfieldÚvalues           r!   Ú _get_semantic_cache_tenant_scopez&Cache._get_semantic_cache_tenant_scope7  sŸ   € Ø &§
¡
¨:Ó 6Ò <¸"ˆØ&,§j¡jÐ1AÓ&BÒ&HÀbˆØ2@×2DÑ2DÀZÓ2PÒ2VÐTVÐ"àˆØ×=Ñ=ò 	-ˆEØ—L‘L Ó'ˆEØˆ}Ø2×6Ñ6°uÓ=�ØÑ Ø˜E˜7 " U GÐ,Ñ,‘ð	-ð ˆr+   c                 óâ  — d} | j                   di |¤Ž}|�t        j                  d|«       |S t        j                  «       }t
        }| j                  «       }|r| j                  n	t        «       }|D ]X  }||v rŒ||v r | j                  ||«      }	|	€Œ!||› d|	› �z  }Œ,||vsŒ1t        j                  du sŒD||   €ŒJ||   }	||› d|	› �z  }ŒZ |r|| j                  |«      z  }t        j                  |«      }
 | j                  |
fi |¤Ž}
t        j                  d|
t!        |«      «       |j#                  «       D ��ci c]  \  }}|dk7  sŒ||“Œ }}} | j$                  dd|
i|¤Ž |
S c c}}w )a
  
        Get the cache key for the given arguments.

        Args:
            **kwargs: kwargs to litellm.completion() or embedding()

        Returns:
            str: The cache key generated from the arguments, or None if no cache key could be generated.
        r•   z
Returning preset cache key: %sr–   Tz3
Created cache key: %s (source material length: %d)Úpreset_cache_keyr*   )Ú!_get_preset_cache_key_from_kwargsr   r   r	   Ú_get_all_llm_api_paramsr   r‘   r‰   Ú	frozensetÚ_get_param_valuer   Ú3enable_caching_on_provider_specific_optional_paramsrœ   r-   Ú_get_hashed_cache_keyÚ_add_namespace_to_cache_keyÚlenÚitemsÚ_set_preset_cache_key_in_kwargs)r�   r‚   Ú	cache_keyrž   Úcombined_kwargsÚlitellm_param_kwargsÚis_semantic_cacheÚscope_excluded_paramsÚparamÚparam_valueÚhashed_cache_keyÚkÚvÚkwargs_for_presets                 r!   Úget_cache_keyzCache.get_cache_keyE  s¼  € ð ˆ	ð #I $×"HÑ"HÑ"RÈ6Ñ"RÐØÐ'Ü× Ñ Ð!CÐEUÔVØ#Ð#ä!1×!IÑ!IÓ!KˆÜ&8ÐØ#'×#:Ñ#:Ó#<ÐÙUf t×'QÒ'QÔluÓlwÐØò 	;ˆEØÐ-Ñ-ØØ˜Ñ'Ø*.×*?Ñ*?ÀÀvÓ*N�ØÑ*Ø E 7¨"¨[¨MÐ!:Ñ:‘IØÐ2Ò2Ü×NÑNÐRVÒVØ˜e‘}Ð,Ø Ø"(¨¡-�KØ E 7¨"¨[¨MÐ!:Ñ:‘Ið	;ñ Ø˜×>Ñ>¸vÓFÑFˆIä ×6Ñ6°yÓAÐØ;˜4×;Ñ;Ð<LÑWÐPVÑWÐÜ×ÑØBØÜ�	‹Nô	
ð 6<·\±\³^×#_©T¨Q°ÀqÐL^ÓG^ A q¡DÐ#_ÐÑ#_Ø,ˆ×,Ñ,ÑdÐ>NÐdÐRcÒdØÐùó $`s   Ä?E+ÅE+r®   c                 ód   — |dk(  r| j                  |«      S |dk(  r| j                  |«      S ||   S )z?
        Get the value for the given param from kwargs
        ÚmodelÚfile)Ú_get_model_param_valueÚ_get_file_param_value)r�   r®   r‚   s      r!   r¢   zCache._get_param_valuey  s?   € ð �GÒØ×.Ñ.¨vÓ6Ð6Ø�fŠ_Ø×-Ñ-¨fÓ5Ð5Ø�e‰}Ðr+   c                 ó  — |j                  di «      xs i }|j                  di «      xs i }|j                  di «      xs i }|j                  d«      xs |j                  d«      }| j                  ||«      }|xs	 |xs |d   S )a¤  
        Handles getting the value for the 'model' param from kwargs

        1. If caching groups are set, then return the caching group as the model https://docs.litellm.ai/docs/routing#caching-across-model-groups
        2. Else if a model_group is set, then return the model_group as the model. This is used for all requests sent through the litellm.Router()
        3. Else use the `model` passed in kwargs
        r“   r”   Úmodel_groupr¶   )r—   Ú_get_caching_group)r�   r‚   r“   r”   r˜   r»   Úcaching_groups          r!   r¸   zCache._get_model_param_value‡  s�   € ð !'§
¡
¨:°rÓ :Ò @¸bˆØ&,§j¡jÐ1AÀ2Ó&FÒ&LÈ"ˆØ2@×2DÑ2DÀZÐQSÓ2TÒ2ZÐXZÐ"Ø)1¯©°mÓ)DÒ)uÐHb×HfÑHfÐgtÓHuˆØ#×6Ñ6°xÀÓMˆØÒ> Ò>¨v°g©Ð>r+   r“   r»   c                 ó\   — |j                  dg «      }|r|D ]  }||v sŒt        |«      c S  y )NÚcaching_groups)r—   rn   )r�   r“   r»   r¿   Úgroups        r!   r¼   zCache._get_caching_group–  s<   € Ø-5¯\©\Ð:JÈBÓ-OˆÙØ'ò &�Ø %Ò'Ü˜u›:Ò%ð&ð r+   c                 óø   — |j                  d«      }|j                  di «      }|j                  di «      }|j                  d«      xs3 t        |dd«      xs$ |j                  d«      xs |j                  d«      S )zo
        Handles getting the value for the 'file' param from kwargs. Used for `transcription` requests
        r·   r“   r”   Úfile_checksumÚnameNÚ	file_name)r—   Úgetattr)r�   r‚   r·   r“   r”   s        r!   r¹   zCache._get_file_param_valuež  s{   € ð —j‘j Ó(ˆØ Ÿ*™* Z°Ó4ˆØ &§
¡
Ð+;¸RÓ @ˆà�L‰L˜Ó)ò /Ü�t˜V TÓ*ò/à�|‰|˜KÓ(ò/ð ×!Ñ! +Ó.ð		
r+   c                 ó:   — |rd|v r|d   j                  dd«      S y)a  
        Get the preset cache key from kwargs["litellm_params"]

        We use _get_preset_cache_keys for two reasons

        1. optional params like max_tokens, get transformed for bedrock -> max_new_tokens
        2. avoid doing duplicate / repeated work
        r”   rž   N)r—   )r�   r‚   s     r!   rŸ   z'Cache._get_preset_cache_key_from_kwargs¬  s,   € ñ Ø 6Ñ)ØÐ.Ñ/×3Ñ3Ð4FÈÓMÐMØr+   rž   c                 ó$   — |rd|v r	||d   d<   yyy)z£
        Set the calculated cache key in kwargs

        This is used to avoid doing duplicate / repeated work

        Placed in kwargs["litellm_params"]
        r”   rž   Nr*   )r�   rž   r‚   s      r!   r¨   z%Cache._set_preset_cache_key_in_kwargsº  s*   € ñ Ø 6Ñ)Ø?O�Ð'Ñ(Ð);Ò<ð *ð r+   r©   c                 ó˜   — t        j                  | j                  «       «      }|j                  «       }t	        j
                  d|«       |S )zý
        Get the hashed cache key for the given cache key.

        Use hashlib to create a sha256 hash of the cache key

        Args:
            cache_key (str): The cache key to hash.

        Returns:
            str: The hashed cache key.
        zHashed cache key (SHA-256): %s)ÚhashlibÚsha256ÚencodeÚ	hexdigestr   r   )r©   Úhash_objectÚhash_hexs      r!   r¤   zCache._get_hashed_cache_keyÆ  s?   € ô %Ÿ^™^¨I×,<Ñ,<Ó,>Ó?ˆà%×/Ñ/Ó1ˆÜ×ÑÐ=¸xÔHØˆr+   rÎ   c                 óö   — |j                  di «      }|j                  d«      xs i }|j                  d«      xs |j                  d«      xs | j                  }|r|› d|› �}t        j                  d|«       |S )a  
        If a redis namespace is provided, add it to the cache key

        Args:
            hash_hex (str): The hashed cache key.
            **kwargs: Additional keyword arguments.

        Returns:
            str: The final hashed cache key with the redis namespace.
        ri   r“   r3   Úredis_namespaceú:zFinal hashed key: %s)r—   r3   r   r   )r�   rÎ   r‚   Údynamic_cache_controlr“   r3   s         r!   r¥   z!Cache._add_namespace_to_cache_keyÙ  s~   € ð =C¿J¹JÀwÐPRÓ<SÐØ Ÿ*™* ZÓ0Ò6°BˆØ0×4Ñ4°[ÓAÒvÀXÇ\Á\ÐRcÓEdÒvÐhl×hvÑhvˆ	ÙØ#˜ A h ZÐ0ˆHÜ×ÑÐ3°XÔ>Øˆr+   c              #   óœ   K  — d}t        dt        |«      |«      D ]-  }ddd||||z    dœigi–— t        j                  t        «       Œ/ y ­w)Né   r   ÚchoicesÚdeltaÚ	assistant)ÚroleÚcontent)Úranger¦   ÚtimeÚsleepr   )r�   rÙ   Ú
chunk_sizeÚis       r!   Úgenerate_streaming_contentz Cache.generate_streaming_contentì  sf   è ø€ Øˆ
Ü�qœ#˜g›,¨
Ó3ò 	5ˆAààØ$/Ø'.¨q°1°z±>Ð'Bñ"ððð	ò 	ô �J‰JÔ3Õ4ñ	5ùs   ‚A
AÚcached_resultÚmax_agec                 óB  — |�wt        |t        «      rgd|v rc|d   }t        j                  «       }||z
  }|�||kD  ry|j                  d«      }	 t        |t        «      r	 |S t	        j
                  |«      }	 |S |S # t        $ r t        j                  |«      }Y |S w xY w)zL
        Common get cache logic across sync + async implementations
        NÚ	timestampÚresponse)	rm   ÚdictrÛ   r—   ro   rp   r   ÚastÚliteral_eval)r�   rà   rá   rã   Úcurrent_timeÚresponse_ageÚcached_responses          r!   Ú_get_cache_logiczCache._get_cache_logicû  sÂ   € ð Ð$¬°MÄ4Ô)HÈ[Ð\iÑMiØ,¨[Ñ9ˆIÜ"&§)¡)£+ˆLð #/°Ñ":ˆLð Ð" |°gÒ'=Øð ,×/Ñ/°
Ó;ˆOðDÜ˜o¬tÔ4Øð
 #Ð"ô '+§j¡j°Ó&A‘Oð #Ð"ØÐøô ò DÜ"%×"2Ñ"2°?Ó"C‘Ø"Ð"ðDús   ÁA< Á"A< Á<BÂBc                 ó�   — i }dD ]  }|| v sŒ| |   ||<   Œ | j                  d«      }t        |t        «      rt        |«      |d<   |S )N)rˆ   r†   r“   ©r—   rm   rå   )r‚   Úcache_lookup_kwargsÚprompt_kwargr“   s       r!   Ú_get_safe_cache_lookup_kwargsz#Cache._get_safe_cache_lookup_kwargs  s`   € à57ÐØ1ò 	IˆLØ˜vÒ%Ø4:¸<Ñ4HÐ# LÒ1ð	Ið !Ÿ*™* ZÓ0ˆÜ�h¤Ô%Ü.2°8«nÐ 
Ñ+à"Ð"r+   Úoriginal_kwargsrî   c                 ó¤   — | j                  d«      }|j                  d«      }t        |t        «      rt        |t        «      sy d|v r	|d   |d<   y y )Nr“   zsemantic-similarityrí   )rñ   rî   Úoriginal_metadataÚcache_lookup_metadatas       r!   Ú)_update_metadata_from_cache_lookup_kwargsz/Cache._update_metadata_from_cache_lookup_kwargs)  s_   € ð $3×#6Ñ#6°zÓ#BÐØ':×'>Ñ'>¸zÓ'JÐÜÐ+¬TÔ2¼*ÐEZÔ\`Ô:aØà Ð$9Ñ9Ø7LÐMbÑ7cÐÐ3Ò4ð :r+   Údynamic_cache_objectc                 ó$  — 	  | j                   di |¤Žduryd|v r|d   }n | j                  di |¤Ž}|�­|j                  di «      }|j                  d«      xs |j                  d«      xs t        d«      }| j	                  |«      }|� |j
                  |fi |¤Ž}n | j                  j
                  |fi |¤Ž}| j                  ||¬«       | j                  ||¬	«      S y# t        $ r# t        d
t        j                  «       › �«       Y yw xY w)a&  
        Retrieves the cached result for the given arguments.

        Args:
            *args: args to litellm.completion() or embedding()
            **kwargs: kwargs to litellm.completion() or embedding()

        Returns:
            The cached result if it exists, otherwise None.
        TNr©   ri   ús-maxageú	s-max-ageÚinf)rñ   rî   ©rà   rá   úAn exception occurred: r*   )Úshould_use_cacher´   r—   Úfloatrð   Ú	get_cacheri   rõ   rë   r   r"   Ú	tracebackÚ
format_exc)r�   rö   r‚   r©   Úcache_control_argsrá   rî   rà   s           r!   rÿ   zCache.get_cache5  sA  € ð	Ø$ˆt×$Ñ$Ñ. vÑ.°dÑ:ØØ˜fÑ$Ø" ;Ñ/‘	à.˜D×.Ñ.Ñ8°Ñ8�	ØÐ$ØAGÇÁÈGÐUWÓAXÐ"Ø,×0Ñ0°Ó<ÒsÐ@R×@VÑ@VÐWbÓ@cÒsÔglÐmrÓgs�Ø-1×-OÑ-OÐPVÓ-WÐ#Ø'Ð3Ø$BÐ$8×$BÑ$BÀ9Ñ$dÐPcÑ$d‘Mà$8 D§J¡J×$8Ñ$8¸Ñ$ZÐFYÑ$Z�MØ×>Ñ>Ø$*Ø(;ð ?ô ð ×,Ñ,¸=ÐRYÐ,ÓZÐZð %øô ò 	ÜÐ3´I×4HÑ4HÓ4JÐ3KÐLÔMÙð	ús   ‚C# —C
C# Ã#)DÄDc           	   ‹   ó   K  — 	  | j                   d
i |¤Žduryd|v r|d   }n | j                  d
i |¤Ž}|�“|j                  di «      }|j                  d|j                  dt        d«      «      «      }|� |j                  |fi |¤Žƒ d{  –—† }n% | j
                  j                  |fi |¤Žƒ d{  –—† }| j                  ||¬«      S y7 Œ>7 Œ# t        $ r# t        d	t        j                  «       › �«       Y yw xY w­w)zd
        Async get cache implementation.

        Used for embedding calls in async wrapper
        TNr©   ri   rù   rø   rú   rû   rü   r*   )rý   r´   r—   rþ   Úasync_get_cacheri   rë   r   r"   r   r  )r�   rö   r‚   r©   r  rá   rà   s          r!   r  zCache.async_get_cacheX  s  è ø€ ð	Ø$ˆt×$Ñ$Ñ. vÑ.°dÑ:Øà˜fÑ$Ø" ;Ñ/‘	à.˜D×.Ñ.Ñ8°Ñ8�	ØÐ$Ø,2¯J©J°wÀÓ,CÐ"Ø!3×!7Ñ!7¸ÐEW×E[ÑE[Ð\fÔhmÐnsÓhtÓEuÓ!v�Ø'Ð3Ø*NÐ*>×*NÑ*NÈyÑ*cÐ\bÑ*c×$c‘Mà*D¨$¯*©*×*DÑ*DÀYÑ*YÐRXÑ*Y×$Y�MØ×,Ñ,¸=ÐRYÐ,ÓZÐZð %ð %døà$Yùäò 	ÜÐ3´I×4HÑ4HÓ4JÐ3KÐLÔMÙð	üsW   ‚C>„C ˜C>™A3C ÂCÂ%C Â2CÂ3C Ã	C>ÃC ÃC Ã)C;Ã8C>Ã:C;Ã;C>c                 ó´  — 	 d|v r|d   }n | j                   di |¤Ž}|�œt        |t        «      r|j                  «       }| j                  �| j                  |d<   |j                  dd«      }t        |t        «      r#|j                  «       D ]  \  }}|dk(  sŒ||d<   Œ t        j                  «       |dœ}|||fS t        d«      ‚# t        $ r}|‚d}~ww xY w)zO
        Common implementation across sync + async add_cache functions
        r©   Nr4   ri   )rã   rä   zcache key is Noner*   )
r´   rm   r   Úmodel_dump_jsonr4   r—   rå   r§   rÛ   r   )	r�   Úresultr‚   r©   Ú_cache_kwargsr±   r²   Úcached_dataÚes	            r!   Ú_add_cache_logiczCache._add_cache_logics  së   € ð	Ø˜fÑ$Ø" ;Ñ/‘	à.˜D×.Ñ.Ñ8°Ñ8�	ØÐ$Ü˜f¤iÔ0Ø#×3Ñ3Ó5�Fð —8‘8Ð'Ø$(§H¡H�F˜5‘Mà'-§z¡z°'¸4Ó'@�Ü˜m¬TÔ2Ø -× 3Ñ 3Ó 5ò .™˜˜1Ø ›:Ø,-˜F 5šMð.ô 48·9±9³;ÈFÑ%S�Ø  +¨vÐ5Ð5äÐ 3Ó4Ð4øÜò 	ØˆGûð	ús$   ‚BC Â"C Â<C Ã	CÃCÃCc                 óô   — 	  | j                   di |¤Ždury | j                  dd|i|¤Ž\  }}} | j                  j                  ||fi |¤Ž y# t        $ r }t        j                  d|«       Y d}~yd}~ww xY w)zâ
        Adds a result to the cache.

        Args:
            *args: args to litellm.completion() or embedding()
            **kwargs: kwargs to litellm.completion() or embedding()

        Returns:
            None
        TNr  ú%LiteLLM Cache: Excepton add_cache: %sr*   )rý   r  ri   Ú	set_cacher   r   Ú	exception)r�   r  r‚   r©   r	  r
  s         r!   Ú	add_cachezCache.add_cache‘  s†   € ð	QØ$ˆt×$Ñ$Ñ. vÑ.°dÑ:ØØ-B¨T×-BÑ-BÑ-[È&Ð-[ÐTZÑ-[Ñ*ˆI�{ FØ ˆD�J‰J× Ñ  ¨KÑB¸6ÓBøÜò 	QÜ×$Ñ$Ð%LÈa×PÑPûð	Qús   ‚A —6A Á	A7ÁA2Á2A7c              ‹   óÄ  K  — 	  | j                   di |¤Ždury| j                  dk(  r(| j                  � | j                  |fi |¤Žƒ d{  –—†  y | j                  dd|i|¤Ž\  }}}|� |j
                  ||fi |¤Žƒ d{  –—†  y | j                  j
                  ||fi |¤Žƒ d{  –—†  y7 Œc7 Œ.7 Œ	# t        $ r }t        j                  d|«       Y d}~yd}~ww xY w­w)z3
        Async implementation of add_cache
        TNÚredisr  r  r*   )
rý   r.   rM   Úbatch_cache_writer  Úasync_set_cacheri   r   r   r  )r�   r  rö   r‚   r©   r	  r
  s          r!   Úasync_add_cachezCache.async_add_cache¤  sö   è ø€ ð	QØ$ˆt×$Ñ$Ñ. vÑ.°dÑ:ØØ�y‰y˜GÒ#¨×(=Ñ(=Ð(Ià,�d×,Ñ,¨VÑ>°vÑ>×>Ñ>à1F°×1FÑ1FÑ1_ÈfÐ1_ÐX^Ñ1_Ñ.�	˜;¨Ø'Ð3Ø>Ð.×>Ñ>¸yÈ+Ñ`ÐY_Ñ`×`Ñ`à4˜$Ÿ*™*×4Ñ4°YÀÑVÈvÑV×VÑVð ?øð aøàVùÜò 	QÜ×$Ñ$Ð%LÈa×PÑPûð	Qüs†   ‚C „B4 ˜C ™1B4 Á
B.ÁB4 ÁC Á1B4 ÂB0ÂB4 ÂC Â!B4 Â(B2Â)B4 Â-C Â.B4 Â0B4 Â2B4 Â4	CÂ=CÃC ÃCÃC Úembedding_responser¶   Úprompt_tokensÚprompt_tokens_detailsc                 óô  — 	 t        |t        «      r6|j                  d«      |j                  d«      |j                  d«      |||dœS t        |d«      rF|j	                  «       }|j                  d«      |j                  d«      |j                  d«      |||dœS t        |«      }|j                  d«      |j                  d«      |j                  d«      |||dœS # t        $ r}t        d|› �«      ‚d}~ww xY w)zh
        Convert any embedding response into the standardized CachedEmbedding TypedDict format.
        Ú	embeddingÚindexÚobject)r  r  r  r¶   r  r  Ú
model_dumpz,Missing expected key in embedding response: N)rm   rå   r—   Úhasattrr  ÚvarsÚKeyErrorÚ
ValueError)r�   r  r¶   r  r  Údatar
  s          r!   Ú_convert_to_cached_embeddingz"Cache._convert_to_cached_embedding·  s  € ð	QÜÐ,¬dÔ3à!3×!7Ñ!7¸Ó!DØ/×3Ñ3°GÓ<Ø0×4Ñ4°XÓ>Ø"Ø%2Ø-Bñð ô Ð+¨\Ô:Ø)×4Ñ4Ó6�à!%§¡¨+Ó!6Ø!ŸX™X gÓ.Ø"Ÿh™h xÓ0Ø"Ø%2Ø-Bñð ô Ð.Ó/�à!%§¡¨+Ó!6Ø!ŸX™X gÓ.Ø"Ÿh™h xÓ0Ø"Ø%2Ø-Bñð øô ò 	QÜÐKÈAÈ3ÐOÓPÐPûð	Qús&   ‚AC ÁAC ÂA C Ã	C7Ã$C2Ã2C7r  Úidx_in_result_datac                 óF  — |j                   �|j                   j                  €y|j                   j                  }t        |d«      r|j                  d¬«      }n8t	        |t
        «      r'|j                  «       D ��ci c]  \  }}|€Œ	||“Œ }}}ny|syt        |j                  «      }|dk  r|S i }|j                  «       D ]R  \  }	}
t	        |
t        «      rt        |
|«      \  }}|||k  rdndz   ||	<   Œ5t	        |
t        «      r	|
|z  ||	<   ŒN|
||	<   ŒT |r|S dS c c}}w )a�  
        Extract per-item prompt_tokens_details from a response for caching.

        For single-item responses (common for multimodal providers like Bedrock Titan,
        Nova, Vertex AI), returns the full prompt_tokens_details.
        For multi-item responses, distributes integer fields evenly across items
        so that summing all per-item details reconstructs the original totals.
        Nr  T)Úexclude_noner   r   )Úusager  r  r  rm   rå   r§   r¦   r"  ÚintÚdivmodrþ   )r�   r  r$  ÚdetailsÚdetails_dictr±   r²   Ú	num_itemsÚper_itemÚkeyr›   ÚquotientÚ	remainders                r!   Ú#_get_per_item_prompt_tokens_detailsz)Cache._get_per_item_prompt_tokens_detailsâ  s,  € ð �<‰<Ð 6§<¡<×#EÑ#EÐ#MØàŸ™×;Ñ;ˆÜ�7˜LÔ)Ø"×-Ñ-¸4Ð-Ó@‰LÜ˜¤Ô&Ø-4¯]©]«_×N¡T Q¨ÀÁ˜A˜q™DÐNˆLÒNàáØä˜vŸ{™{Ó+ˆ	Ø˜Š>ØÐð !#ˆØ&×,Ñ,Ó.ò 	&‰JˆC�Ü˜%¤Ô%Ü&,¨U°IÓ&>Ñ#�˜)Ø (Ð1CÀiÒ1O©AÐUVÑ W�˜’Ü˜E¤5Ô)Ø %¨	Ñ 1�˜’à %�˜’ð	&ñ $ˆxÐ-¨Ð-ùó+ Os   Á<
DÂDc                 óæ   — |j                   �|j                   j                  €y|j                   j                  }t        |j                  «      }|dk  r|S t	        ||«      \  }}|||k  rdz   S dz   S )a1  
        Extract the per-item prompt_tokens from a response for caching.

        Single-item responses store the full usage.prompt_tokens. Multi-item
        responses distribute it evenly (with remainder) so that summing all
        per-item values on retrieval reconstructs the original total.
        Nr   r   )r'  r  r¦   r"  r)  )r�   r  r$  Útotalr,  r/  r0  s          r!   Ú_get_per_item_prompt_tokensz!Cache._get_per_item_prompt_tokens  su   € ð �<‰<Ð 6§<¡<×#=Ñ#=Ð#EØà—|‘|×1Ñ1ˆÜ˜vŸ{™{Ó+ˆ	Ø˜Š>ØˆLä$ U¨IÓ6Ñˆ�)ØÐ 2°YÒ >˜1ÑFÐFÀAÑFÐFr+   r†   c                 ó"  —  | j                   di i |¥d|i¥¤Ž}||d<   |j                  |   }| j                  ||¬«      }| j                  ||¬«      }|j                  }	| j                  ||	||¬«      }
 | j                  dd|
i|¤Ž\  }}}|||fS )Nr†   r©   )r  r$  )r  r  r  r*   )r´   r"  r4  r1  r¶   r#  r  )r�   r  r†   r‚   r$  rž   r  r  r  Ú
model_nameÚembedding_dictr©   r	  s                r!   Úadd_embedding_response_to_cachez%Cache.add_embedding_response_to_cache$  så   € ð #5 $×"4Ñ"4Ñ"RÐ7Q¸&Ð7QÀ'È5Ñ7QÑ"RÐØ.ˆˆ{ÑØ$*§K¡KÐ0BÑ$CÐð  $×?Ñ?ØØ1ð  @ó  
ˆð (,×'OÑ'OØØ1ð (Pó (
Ðð #ŸL™Lˆ
Ø15×1RÑ1RØØØ'Ø"7ð	 2Só 2
ˆð *?¨×)>Ñ)>ñ *
Ø!ð*
àñ*
Ñ&ˆ	�; ð ˜+ vÐ-Ð-r+   c              ‹   ó†  K  — 	  | j                   di |¤Ždury| j                  �| j                  |d<   g }t        |d   t        «      rBt	        |d   «      D ]0  \  }}| j                  ||||«      \  }}}|j                  ||f«       Œ2 n@t        |d   t        «      r-| j                  ||d   |«      \  }}}|j                  ||f«       |� |j                  dd|i|¤Žƒ d{  –—†  y | j                  j                  dd|i|¤Žƒ d{  –—†  y7 Œ,7 Œ# t        $ r }	t        j                  d|	«       Y d}	~	yd}	~	ww xY w­w)z…
        Async implementation of add_cache for Embedding calls

        Does a bulk write, to prevent using too many clients
        TNr4   r†   Ú
cache_listr  r*   )rý   r4   rm   ÚlistÚ	enumerater8  r{   rn   Úasync_set_cache_pipelineri   r   r   r  )
r�   r  rö   r‚   r:  ÚidxrÞ   r©   r	  r
  s
             r!   Úasync_add_cache_pipelinezCache.async_add_cache_pipelineH  sh  è ø€ ð	QØ$ˆt×$Ñ$Ñ. vÑ.°dÑ:Øð �x‰xÐ#Ø $§¡��u‘à "ˆJÜ˜& ™/¬4Ô0Ü'¨¨w©Ó8ò @‘F�C˜ð
 ×<Ñ<¸VÀQÈÐPSÓTñ	Ø!Ø#Øà×%Ñ% y°+Ð&>Õ?ñ@ô ˜F 7™O¬SÔ1Ø15×1UÑ1UÐV\Ð^dÐelÑ^mÐouÓ1vÑ.�	˜;¨Ø×!Ñ! 9¨kÐ":Ô;à#Ð/ØCÐ*×CÑCÑdÈzÐdÐ]cÑd×dÑdà9�d—j‘j×9Ñ9ÑZÀZÐZÐSYÑZ×ZÑZð eøàZùÜò 	QÜ×$Ñ$Ð%LÈa×PÑPûð	Qüsi   ‚E„D ˜E™CD Ã$DÃ%D Ã)EÃ*!D ÄDÄD ÄEÄD ÄD Ä	D>ÄD9Ä4EÄ9D>Ä>Ec                 óà   — | j                   t        j                  k(  ry|j                  dd«      }t	        j
                  d||«       |r%t        |t        «      r|j                  dd«      du ryy)zØ
        Returns true if we should use the cache for LLM API calls

        If cache is default_on then this is True
        If cache is default_off then this is only true when user has opted in to use cache
        Tri   Nz(should_use_cache: kwargs: %s; _cache: %sz	use-cacheF)r/   r$   r%   r—   r   r   rm   rå   )r�   r‚   Ú_caches      r!   rý   zCache.should_use_cachej  sd   € ð �9‰9œ	×,Ñ,Ò,Øð Ÿ
™
 7¨DÓ1ˆÜ×ÑÐGÈÐQWÔXÙ”j ¬Ô.Ø�z‰z˜+ uÓ-°Ñ5ØØr+   c              ‹   óŒ   K  —  | j                   dd|i|¤Ž\  }}} | j                  j                  ||fi |¤Žƒ d {  –—†  y 7 Œ­w)Nr  r*   )r  ri   r  )r�   r  r‚   r©   r	  s        r!   r  zCache.batch_cache_write|  sI   è ø€ Ø)>¨×)>Ñ)>Ñ)WÀfÐ)WÐPVÑ)WÑ&ˆ	�; Ø*ˆd�j‰j×*Ñ*¨9°kÑLÀVÑL×LÒLús   ‚:A¼A½Ac              ƒ   ó^   K  — t        | j                  d«      }|r |«       ƒ d {  –—† S y 7 Œ­w)NÚping©rÅ   ri   )r�   Ú
cache_pings     r!   rD  z
Cache.ping€  s,   è ø€ Ü# D§J¡J°Ó7ˆ
ÙÙ#›×%Ð%Øð &ús   ‚#-¥+¦-c              ƒ   ó`   K  — t        | j                  d«      }|r ||«      ƒ d {  –—† S y 7 Œ­w)NÚdelete_cache_keysrE  )r�   ÚkeysÚcache_delete_cache_keyss      r!   rH  zCache.delete_cache_keys†  s1   è ø€ Ü)0°·±Ð=PÓ)QÐÙ"Ù0°Ó6×6Ð6Øð 7ús   ‚$.¦,§.c              ƒ   ó‚   K  — t        | j                  d«      r#| j                  j                  «       ƒ d {  –—†  y y 7 Œ­w)NÚ
disconnect)r  ri   rL  r�   s    r!   rL  zCache.disconnectŒ  s2   è ø€ Ü�4—:‘:˜|Ô,Ø—*‘*×'Ñ'Ó)×)Ñ)ð -Ø)ús   ‚4?¶=·?c                  ó   — y)z•
        Internal method to check if the cache type supports async get/set operations

        All cache types now support async operations

        Tr*   r�   s    r!   Ú_supports_asynczCache._supports_async�  s   € ð r+   r   )NN)r   )9r'   r(   r)   rj   ru   r$   r%   r;  Ú$DEFAULT_CACHING_SUPPORTED_CALL_TYPESrn   rþ   ÚCachingSupportedCallTypesÚboolr   r(  r…   r¡   r‰   Ú__annotations__r�   Útupler‘   rå   rœ   r´   r¢   r¸   r¼   r¹   rŸ   r¨   Ústaticmethodr¤   r¥   rß   rë   rð   rõ   r   rÿ   r  r  r  r  ÚCachedEmbeddingr#  r   r1  r4  r8  r?  rý   r  rD  rH  rL  rN  r*   r+   r!   r-   r-   7   ss  … ð )9×(>Ñ(>à×%Ñ%ØØØ#Ø $Ø Ø.2Ø-1Ø-1ÙGKÐLpÓGqà(,Ø+/Ø%)Ø%)Ø%)Ø"&Ø'+Ø&*Ø+/Ø/3Ø+/Ø $Ø"Ø&*Ø/3Ø#Ø4LØ6:Ø5MØ7;Ø'+Ø+/Ø%)Ø&*Ø%)Ø-1Ø15Ø5MØ8<Ø@DØ9=à*.Ø'+ñah2à Ñ%ðh2ð Ø
ñðh2ð
 �D‰jðh2ð �D‰jðh2ð ˜‘*ðh2ð ˜‘:ðh2ð �T‰\ðh2ð  % t™|ðh2ð $ d™lðh2ð $ d™lðh2ð #Ð#<Ñ=ÀÑDðh2ð  ™:ðh2ð  " D™jð!h2ð" ˜d™
ð#h2ð$ ˜d™
ð%h2ð& ˜d™
ð'h2ð( ˜4‘Kð)h2ð* ˜#‘: Ñ$ð+h2ð, ˜t™ð-h2ð. " D™jð/h2ð0 #&¨¡*ð1h2ð2 " D™jð3h2ð4 ˜‘:ð5h2ð6 �t‘ð7h2ð8 ˜t™ð9h2ð: #&¨¡*ð;h2ð< ˜‘*ð=h2ð> /2ð?h2ð@ *-¨t©ðAh2ðB 03ðCh2ðD +.°©*ðEh2ðF  ™*ðGh2ðH " D™[ðIh2ðJ ˜d™
ðKh2ðL ˜t™ðMh2ðN ˜d™
ðOh2ðP !$ d¡
ðQh2ðR %(¨$¡JðSh2ðT 03ðUh2ðV ,/°©:ðWh2ðX 47¸±:ðYh2ðZ +0°$©,ð[h2ð^ ! 4™Zð_h2ð`  ™*óah2ñZ 8AÒA`Ó7aÐ)¨9Óað
<Ð'¨¨s°C¨x©ó ð
 Dó 
ð°tð Àó ð2 ¨ó 2 ðhàðð ðð 
ˆt‰ó	ð?¨Tð ?°có ?ð¨4ð ¸cÀD¹jð ÈSÐSWÉZó ð
¨Dð 
°Só 
ð¸SÀ4¹Zó ð
PÀð 
PÐRVó 
Pð ð¨ð °ò ó ðð$°Cð Àcó ò&5ðà˜T‘zðð ˜‘óðB ð
#¨d°3¸°8©nð 
#ÀÀcÈ3ÀhÁò 
#ó ð
#ð ð	dØ˜c 3˜h™ð	dØ>BÀ3ÈÀ8¹nð	dà	ò	dó ð	dñ!¨i¸$Ñ.>ó !ñF¸)ÀdÑ:Jó ò6ò<Qñ&QÀ)ÈdÑBRó Qð. %)Ø-1ñ)Qàð)Qð �T‰zð)Qð ˜T‘zð	)Qð
  $ d™{ð)Qð 
ó)QðV).à!ð).ð  ð).ð 
�‰ó	).ðVGà!ðGð  ðGð 
ˆt‰ó	Gð8 #$ñ".à!ð".ð ð".ð ð	".ð
  ð".ð 
ˆs�D˜$ˆÑ	ó".ñH QÈ9ÐW[ÑK[ó  QòDò$Mòòò*ð ô r+   r-   r.   r0   r1   r2   r8   c           	      ó  — t        d«       dt        j                  vrt        j                  j                  d«       dt        j                  vrt        j
                  j                  d«       dt        j                  vrt        j
                  j                  d«       t        j                  €t        d| ||||dœ|¤Žt        _	        t        dt        j                  › �«       t        dt        t        j                  «      › �«       y)a  
    Enable cache with the specified configuration.

    Args:
        type (Optional[Literal["local", "redis", "s3", "disk"]]): The type of cache to enable. Defaults to "local".
        host (Optional[str]): The host address of the cache server. Defaults to None.
        port (Optional[str]): The port number of the cache server. Defaults to None.
        password (Optional[str]): The password for the cache server. Defaults to None.
        supported_call_types (Optional[List[Literal["completion", "acompletion", "embedding", "aembedding"]]]):
            The supported call types for the cache. Defaults to ["completion", "acompletion", "embedding", "aembedding"].
        **kwargs: Additional keyword arguments.

    Returns:
        None

    Raises:
        None
    zLiteLLM: Enabling Cacheri   N©r.   r0   r1   r2   r8   z&LiteLLM: Cache enabled, litellm.cache=úLiteLLM Cache: r*   )r"   r   rz   r{   r|   r}   r~   r   r€   ri   r-   r  ©r.   r0   r1   r2   r8   r‚   s         r!   Úenable_cacherZ  š  sÖ   € ô4 Ð+Ô,Ø”g×,Ñ,Ñ,Ü×Ñ×%Ñ% gÔ.Ø”g×.Ñ.Ñ.Ü×(Ñ(×EÑEÀgÔNØ”g×5Ñ5Ñ5Ü×(Ñ(×KÑKÈGÔTä‡}�}ÐÜð 
ØØØØØ!5ñ
ð ñ
ŒŒô Ð:¼7¿=¹=¸/ÐJÔKÜ�O¤D¬¯©Ó$7Ð#8Ð9Õ:r+   c           	      óÐ   — t        d«       t        d| ||||dœ|¤Žt        _        t        dt        j                  › �«       t        dt	        t        j                  «      › �«       y)a¾  
    Update the cache for LiteLLM.

    Args:
        type (Optional[Literal["local", "redis", "s3", "disk"]]): The type of cache. Defaults to "local".
        host (Optional[str]): The host of the cache. Defaults to None.
        port (Optional[str]): The port of the cache. Defaults to None.
        password (Optional[str]): The password for the cache. Defaults to None.
        supported_call_types (Optional[List[Literal["completion", "acompletion", "embedding", "aembedding"]]]):
            The supported call types for the cache. Defaults to ["completion", "acompletion", "embedding", "aembedding"].
        **kwargs: Additional keyword arguments for the cache.

    Returns:
        None

    zLiteLLM: Updating CacherW  z&LiteLLM: Cache Updated, litellm.cache=rX  Nr*   )r"   r-   r   ri   r  rY  s         r!   Úupdate_cacher\  É  sf   € ô0 Ð+Ô,Üð ØØØØØ1ñð ñ„G„Mô Ð:¼7¿=¹=¸/ÐJÔKÜ�O¤D¬¯©Ó$7Ð#8Ð9Õ:r+   c                  óp  — ddl m}  t        d«        | t        «      5  t        j
                  j                  d«       t        j                  j                  d«       t        j                  j                  d«       ddd«       dt        _	        t        dt        j                  › �«       y# 1 sw Y   Œ1xY w)aF  
    Disable the cache used by LiteLLM.

    This function disables the cache used by the LiteLLM module. It removes the cache-related callbacks from the input_callback, success_callback, and _async_success_callback lists. It also sets the litellm.cache attribute to None.

    Parameters:
    None

    Returns:
    None
    r   ©ÚsuppresszLiteLLM: Disabling Cacheri   Nz'LiteLLM: Cache disabled, litellm.cache=)
Ú
contextlibr_  r"   r!  r   rz   Úremover|   r   ri   r^  s    r!   Údisable_cacherb  î  s†   € õ $äÐ,Ô-Ù	”*Ó	ñ 8Ü×Ñ×%Ñ% gÔ.Ü× Ñ ×'Ñ'¨Ô0Ü×'Ñ'×.Ñ.¨wÔ7÷8ð
 „G„MÜÐ;¼G¿M¹M¸?ÐKÕL÷8ð 8ús   žAB,Â,B5)9ræ   rÉ   ro   rÛ   r   Úenumr   Útypingr   r   Úpydanticr   r   Úlitellm._loggingr   Úlitellm.constantsr   Ú-litellm.litellm_core_utils.model_param_helperr	   Úlitellm.types.cachingÚlitellm.types.utilsr   r   Úazure_blob_cacher   Ú
base_cacher   Ú
disk_cacher   Ú
dual_cacher   Ú	gcs_cacher   Úin_memory_cacher   Úqdrant_semantic_cacher   Úredis_cacher   Úredis_cluster_cacher   Úredis_semantic_cacher   Ús3_cacher   r"   rn   r$   r-   rj   ru   r;  rO  rP  rZ  r\  rb  r*   r+   r!   ú<module>rv     sR  ðó Û Û Û Û Ý ß å ã Ý +Ý :Ý JÜ #ß Eå ,Ý !Ý !Ý !Ý Ý *Ý 6Ý #Ý 2Ý 4Ý òô ��Tô  ÷`ñ `ðH %5×$:Ñ$:ØØØÙCGÐHlÓCmñ,;Ø
˜TÑ
!ð,;à
�‰*ð,;ð �‰*ð,;ð �D‰jð	,;ð
 Ð8Ñ9¸DÑ@ó,;ð` %5×$:Ñ$:ØØØÙCGÐHlÓCmñ";Ø
˜TÑ
!ð";à
�‰*ð";ð �‰*ð";ð �D‰jð	";ð
 Ð8Ñ9¸DÑ@ó";óJMr+   