Ë
    uPêjrK  ã                   óÎ   — d Z ddlZddlZddlZddl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mZmZ ddlmZ ddlmZ dd	lmZmZmZmZmZ dd
lmZ erddlmZ  G d„ de«      Zy)z‚
Qdrant Semantic Cache implementation

Has 4 methods:
    - set_cache
    - get_cache
    - async_set_cache
    - async_get_cache
é    N)ÚTYPE_CHECKINGÚAnyÚFinalÚcast)Úprint_verbose)ÚQDRANT_SCALAR_QUANTILEÚQDRANT_VECTOR_SIZEÚ(SEMANTIC_CACHE_EMBEDDING_TIMEOUT_SECONDS)Úget_str_from_messages)ÚEmbeddingResponseé   )Úbuild_router_embedding_metadataÚ"resolve_embedding_max_input_tokensÚresolve_embedding_routerÚresolve_embedding_timeoutÚtruncate_embedding_input)Ú	BaseCache)ÚRouterc                   ó6  — e Zd ZU dZdZedz  ed<   eZe	ed<   	 	 	 	 	 	 	 	 	 	 ddedz  de	dz  fd„Z
defd„Zded	efd
„Zdeded	dfd„Zdd„Zdeded	efd„Zdeddd	efd„Zddedeeef   dz  d	efd„Zddedeeef   dz  d	efd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy) ÚQdrantSemanticCacheÚlitellm_cache_keyNÚembedding_max_input_tokensÚembedding_timeoutc                 ól  — ddl m}m}m} ddlm} |€t        d«      ‚|| _        t        d| j                  › �«       |€t        d«      ‚|| _	        || _
        |	| _        t        |
«      | _        |�|nt        | _        i }|r)t!        |t"        «      r|j%                  d«      r ||«      }|r)t!        |t"        «      r|j%                  d«      r ||«      }|xs, t'        j(                  d«      xs t'        j(                  d	«      }|xs t'        j(                  d
«      }ddi}|r||d<   |€t+        d«      ‚|| _        || _        t        d| j,                  › �«       || _         |«       | _         ||j4                  ¬«      | _        |€t        d«       | j2                  j9                  | j,                  › d| j                  › d�| j0                  ¬«      }|j:                  dk7  rt+        d|j<                  › �«      ‚|j?                  «       d   d   r~| j2                  j9                  | j,                  › d| j                  › �| j0                  ¬«      }|j?                  «       | _         t        d| j@                  › �«       | jC                  «        y |�|dk(  rdddii}n*|dk(  rddtD        ddœi}n|d k(  rd d!dd"œi}nt        d#«      ‚| j2                  jG                  | j,                  › d| j                  › �| j                  d$d%œ|d&œ| j0                  ¬'«      }|j?                  «       d   r~| j2                  j9                  | j,                  › d| j                  › �| j0                  ¬«      }|j?                  «       | _         t        d(| j@                  › �«       | jC                  «        y t        d)«      ‚)*Nr   )Ú_get_httpx_clientÚget_async_httpx_clientÚhttpxSpecialProvider)Úget_secret_strz-collection_name must be provided, passed Nonez0qdrant semantic-cache initializing COLLECTION - z2similarity_threshold must be provided, passed Nonezos.environ/Ú
QDRANT_URLÚQDRANT_API_BASEÚQDRANT_API_KEYzContent-Typezapplication/jsonzapi-keyzQdrant url must be providedz'qdrant semantic-cache qdrant_api_base: )Úllm_providerzNQuantization config is not provided. Default binary quantization will be used.ú/collections/z/exists)ÚurlÚheaderséÈ   z1Error from qdrant checking if /collections exist ÚresultÚexistsz.Collection already exists.
Collection details:ÚbinaryÚ
always_ramFÚscalarÚint8)ÚtypeÚquantiler*   ÚproductÚx16)Úcompressionr*   zBQuantization config must be one of 'scalar', 'binary' or 'product'ÚCosine)ÚsizeÚdistance)ÚvectorsÚquantization_config)r$   Újsonr%   z+New collection created.
Collection details:z#Error while creating new collection)$Ú&litellm.llms.custom_httpx.http_handlerr   r   r   Úlitellm.secret_managers.mainr   Ú	ExceptionÚcollection_namer   Úsimilarity_thresholdÚembedding_modelr   r   r   r	   Úvector_sizeÚ
isinstanceÚstrÚ
startswithÚosÚgetenvÚ
ValueErrorÚqdrant_api_baseÚqdrant_api_keyr%   Úsync_clientÚCachingÚasync_clientÚgetÚstatus_codeÚtextr7   Úcollection_infoÚ_ensure_cache_key_payload_indexr   Úput)ÚselfrE   rF   r;   r<   r6   r=   Ú	host_typer>   r   r   r   r   r   r   r%   Úcollection_existsÚcollection_detailsÚquantization_paramsÚnew_collection_statuss                       új/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/caching/qdrant_semantic_cache.pyÚ__init__zQdrantSemanticCache.__init__/   sè  € ÷	
ñ 	
õ
 	@àÐ"ÜÐKÓLÐLà.ˆÔÜÐHÈ×I]ÑI]ÐH^Ð_Ô`àÐ'ÜÐPÓQÐQØ$8ˆÔ!Ø.ˆÔØ*DˆÔ'Ü!:Ð;LÓ!MˆÔØ*5Ð*A™;ÔGYˆÔØˆñ Ü˜/¬3Ô/°O×4NÑ4NÈ}Ô4]Ù"0°Ó"A�ÙÜ˜.¬#Ô.°>×3LÑ3LÈ]Ô3[Ù!/°Ó!?�à)Òd¬R¯Y©Y°|Ó-DÒdÌÏ	É	ÐRcÓHdˆØ'ÒF¬2¯9©9Ð5EÓ+FˆØ!Ð#5Ð6ˆÙØ!/ˆG�IÑàÐ"ÜÐ:Ó;Ð;à.ˆÔØ,ˆÔÜÐ?À×@TÑ@TÐ?UÐVÔWàˆŒá,Ó.ˆÔÙ2Ð@T×@\Ñ@\Ô]ˆÔàÐ&ÜÐjÔkØ#'×#3Ñ#3×#7Ñ#7Ø×'Ñ'Ð(¨°d×6JÑ6JÐ5KÈ7ÐSØ—L‘Lð $8ó $
Ðð ×(Ñ(¨CÒ/ÜÐPÐQb×QgÑQgÐPhÐiÓjÐjà×!Ñ!Ó# HÑ-¨hÒ7Ø!%×!1Ñ!1×!5Ñ!5Ø×+Ñ+Ð,¨M¸$×:NÑ:NÐ9OÐPØŸ™ð "6ó "Ðð $6×#:Ñ#:Ó#<ˆDÔ ÜÐKÈD×L`ÑL`ÐKaÐbÔcØ×0Ñ0Õ2ð #Ð*Ð.AÀXÒ.MàØ$ eðð'Ñ#ð
 %¨Ò0àØ &Ü$:Ø&+ñð'Ñ#ð %¨	Ò1Ø'0À%ÐW\Ñ2]Ð&^Ñ#äÐ dÓeÐeà+/×+;Ñ+;×+?Ñ+?Ø×+Ñ+Ð,¨M¸$×:NÑ:NÐ9OÐPà(,×(8Ñ(8ÀhÑOØ+>ñð Ÿ™ð ,@ó ,Ð!ð %×)Ñ)Ó+¨HÒ5Ø%)×%5Ñ%5×%9Ñ%9Ø×/Ñ/Ð0°¸d×>RÑ>RÐ=SÐTØ ŸL™Lð &:ó &Ð"ð (:×'>Ñ'>Ó'@�Ô$ÜÐ LÈT×MaÑMaÐLbÐcÔdØ×4Ñ4Õ6äÐ EÓFÐFó    Úcached_responsec                 ó„   — |€|S 	 t        j                  |«      }|S # t        $ r t        j                  |«      }Y |S w xY w©N)r7   Úloadsr:   ÚastÚliteral_eval)rP   rY   s     rV   Ú_get_cache_logicz$QdrantSemanticCache._get_cache_logic¥   sS   € ØÐ"Ø"Ð"ð	@Ü"Ÿj™j¨Ó9ˆOð Ðøô ò 	@Ü!×.Ñ.¨Ó?‰OØÐð	@ús   † �?¾?ÚkeyÚreturnc                 ó<   — d| j                   dt        |«      idœgiS )NÚmustÚvalue)r`   Úmatch)ÚCACHE_KEY_FIELD_NAMEr@   )rP   r`   s     rV   Ú_get_qdrant_cache_key_filterz0QdrantSemanticCache._get_qdrant_cache_key_filter®   s.   € àà×4Ñ4Ø%¤s¨3£xÐ0ñðð
ð 	
rX   Údatac                 ó,   — | j                  |«      |d<   y )NÚfilter)rg   )rP   rh   r`   s      rV   Ú$_add_cache_key_filter_to_search_dataz8QdrantSemanticCache._add_cache_key_filter_to_search_data¸   s   € Ø×:Ñ:¸3Ó?ˆˆXŠrX   c                 ó:  — 	 | j                   j                  | j                  › d| j                  › d�| j                  | j
                  ddœ¬«      }|j                  dvrt        d|j                  › �«       y y # t        $ r}t        d|› �«       Y d }~y d }~ww xY w)Nr#   z/indexÚkeyword)Ú
field_nameÚfield_schema©r$   r%   r7   )r&   éÉ   z@Qdrant semantic-cache could not create cache-key payload index: )
rG   rO   rE   r;   r%   rf   rK   r   rL   r:   )rP   ÚresponseÚexcs      rV   rN   z3QdrantSemanticCache._ensure_cache_key_payload_index»   s­   € ð	dØ"×.Ñ.×2Ñ2Ø×+Ñ+Ð,¨M¸$×:NÑ:NÐ9OÈvÐVØŸ™à"&×";Ñ";Ø$-ñð 3ó ˆHð ×#Ñ#¨:Ñ5ÜÐ `Ðai×anÑanÐ`oÐpÕqð 6øäò 	dÜÐ\Ð]`Ð\aÐb×cÑcûð	dús   ‚A5A9 Á9	BÂBÂBÚpayloadc                 ór   — |j                  | j                  «      }|d uxr t        |«      t        |«      k(  S r[   )rJ   rf   r@   )rP   rt   r`   Ú
cached_keys       rV   Ú_payload_matches_cache_keyz.QdrantSemanticCache._payload_matches_cache_keyÊ   s5   € ð
 $ŸK™K¨×(AÑ(AÓBˆ
Ø Ð%ÒE¬#¨j«/¼SÀ»XÑ*EÐErX   ÚpromptÚrouterzRouter | Nonec           	      ón   — t        || j                  t        | j                  | j                  |«      «      S r[   )r   r=   r   r   )rP   rx   ry   s      rV   Ú_embedding_inputz$QdrantSemanticCache._embedding_inputÒ   s5   € Ü'ØØ× Ñ Ü.¨t×/NÑ/NÐPT×PdÑPdÐflÓmó
ð 	
rX   Úmetadatac                 ó`  — 	 ddl m}m} t	        | j
                  ||«      }| j                  ||«      }|�7|j                  | j
                  |dddœt        |«      | j                  d¬«      S t        j                  | j
                  |dddœ| j                  d¬«      S # t        $ r d}d}Y Œ¢w xY w)zAEmbed via the proxy Router when it serves the model, else direct.r   ©Úllm_model_listÚ
llm_routerNT©zno-storezno-cache©ÚmodelÚinputÚcacher|   ÚtimeoutÚnum_retries©rƒ   r„   r…   r†   r‡   )Úlitellm.proxy.proxy_serverr   r€   ÚImportErrorr   r=   r{   Ú	embeddingr   r   Úlitellm)rP   rx   r|   r   r€   ry   Úembedding_inputs          rV   Ú_get_embeddingz"QdrantSemanticCache._get_embeddingÙ   sÉ   € ð	ßMô
 1°×1EÑ1EÀzÐSaÓbˆØ!%×!6Ñ!6°v¸vÓ!FˆØÐØ×#Ñ#Ø×*Ñ*Ø%Ø#'°TÑ:Ü8¸ÓBØ×.Ñ.Øð $ó ð ô × Ñ Ø×&Ñ&Ø!Ø#°Ñ6Ø×*Ñ*Øô
ð 	
øô ò 	Ø!ˆNØŠJð	ús   ‚B ÂB-Â,B-c              ƒ   ó¼  K  — 	 ddl m}m} t	        | j
                  ||«      }| j                  ||«      }|�7|j                  | j
                  |dddœt        |«      | j                  d¬«      n0t        j                  | j
                  |dddœ| j                  d¬«      }t        j                  || j                  «      ƒ d {  –—† S # t        $ r d }d }Y ŒÊw xY w7 Œ­w)Nr   r~   Tr�   r‚   rˆ   )r‰   r   r€   rŠ   r   r=   r{   Ú
aembeddingr   r   rŒ   ÚasyncioÚwait_for)rP   rx   r|   r   r€   ry   r�   Úembedding_calls           rV   Ú_get_async_embeddingz(QdrantSemanticCache._get_async_embeddingô   sð   è ø€ ð	ßMô
 1°×1EÑ1EÀzÐSaÓbˆØ!%×!6Ñ!6°v¸vÓ!Fˆð Ð!ð ×ÑØ×*Ñ*Ø%Ø#'°TÑ:Ü8¸ÓBØ×.Ñ.Øð ô ô ×#Ñ#Ø×*Ñ*Ø%Ø#'°TÑ:Ø×.Ñ.Øôð 	ô$ ×%Ñ% n°d×6LÑ6LÓM×MÐMøô1 ò 	Ø!ˆNØŠJð	úð0 Nús4   ‚C„C ŒB6CÃCÃCÃCÃCÃCÃCc           	      óò  — t        d|› �«       ddlm} |d   }t        |«      }t	        t
        | j                  ||j                  d«      ¬«      «      }|d   d   d   }t        |«      }t        |t        «      sJ ‚d	t        |j                  «       «      || j                  t        |«      d
|d|idœgi}	| j                  j                  | j                  › d| j                  › d�| j                   |	¬«       y )Nz)qdrant semantic-cache set_cache, kwargs: r   ©ÚuuidÚmessagesr|   ©r|   rh   r‹   ÚpointsrL   rr   ©ÚidÚvectorrt   r#   ú/pointsrp   )r   Úlitellm._uuidr—   r   r   r   rŽ   rJ   r@   r?   Úuuid4rf   rG   rO   rE   r;   r%   ©
rP   r`   rd   Úkwargsr—   r˜   rx   Úembedding_responser‹   rh   s
             rV   Ú	set_cachezQdrantSemanticCache.set_cache  s  € ÜÐAÀ&ÀÐJÔKÝ&ð ! Ñ,ˆÜ-¨hÓ7ˆô %)ÜØ×Ñ °·±¸JÓ1GÐÓHó%
Ðð .¨fÑ5°aÑ8¸ÑEˆ	ä�E“
ˆÜ˜%¤Ô%Ð%Ð%ð ä˜dŸj™j›lÓ+Ø'à×1Ñ1´3°s³8Ø Ø" Eð ñð
ð
ˆð 	×Ñ×ÑØ×'Ñ'Ð(¨°d×6JÑ6JÐ5KÈ7ÐSØ—L‘LØð 	õ 	
rX   c           
      óª  — t        d|› �«       |d   }t        |«      }t        t        | j	                  ||j                  d«      ¬«      «      }|d   d   d   }|dd	d
ddœidd
dœ}| j                  ||¬«       | j                  j                  | j                  › d| j                  › d�| j                  |¬«      }|j                  «       d   }	|	€d|j                  di «      d<   y t        |	t        «      r$t!        |	«      dk(  rd|j                  di «      d<   y |	d   d   }
|	d   d   }| j#                  ||¬«      s!t        d«       d|j                  di «      d<   y |d   }t        d| j$                  › d|
› d|› d|› �«       |
|j                  di «      d<   |
| j$                  k\  r+|d   }t        d |
› d!|› d"|› �«       | j'                  |¬#«      S y )$Nz.sync qdrant semantic-cache get_cache, kwargs: r˜   r|   r™   rh   r   r‹   ÚquantizationFTç      @©ÚignoreÚrescoreÚoversamplingr   ©r�   ÚparamsÚlimitÚwith_payload©rh   r`   r#   ú/points/searchrp   r'   ç        úsemantic-similarityÚscorert   ©rt   r`   ú7Qdrant semantic-cache hit did not match cache key scoperL   ú&semantic cache: similarity threshold: ú, similarity: ú
, prompt: ú, closest_cached_prompt: rr   úgot a cache hit, similarity: ú, Current prompt: ú, cached_prompt: ©rY   )r   r   r   r   rŽ   rJ   rk   rG   ÚpostrE   r;   r%   r7   Ú
setdefaultr?   ÚlistÚlenrw   r<   r_   ©rP   r`   r¢   r˜   rx   r£   r‹   rh   Úsearch_responseÚresultsÚ
similarityrt   Úcached_promptÚcached_values                 rV   Ú	get_cachezQdrantSemanticCache.get_cache8  sc  € ÜÐFÀvÀhÐOÔPð ! Ñ,ˆÜ-¨hÓ7ˆô %)ÜØ×Ñ °·±¸JÓ1GÐÓHó%
Ðð .¨fÑ5°aÑ8¸ÑEˆ	ð  àØ#Ø#Ø$'ñ!ðð Ø ñ
ˆð 	×1Ñ1°tÀÐ1ÔEà!%×!1Ñ!1×!6Ñ!6Ø×'Ñ'Ð(¨°d×6JÑ6JÐ5KÈ>ÐZØ—L‘LØð "7ó "
ˆð
 )×-Ñ-Ó/°Ñ9ˆàˆ?ØGJˆF×Ñ˜j¨"Ó-Ð.CÑDØÜ�gœtÔ$Ü�7‹|˜qÒ ØKN�×!Ñ! *¨bÓ1Ð2GÑHØà# A™J wÑ/ˆ
Ø  ™ IÑ.ˆØ×.Ñ.°wÀCÐ.ÔHÜÐSÔTØGJˆF×Ñ˜j¨"Ó-Ð.CÑDØà& v™ˆô 	Ø4°T×5NÑ5NÐ4OÈ~Ð^hÐ]iÐisÐtzÐs{ð  |Uð  Vcð  Udð  eô	
ð
 DNˆ×Ñ˜* bÓ)Ð*?Ñ@à˜×2Ñ2Ò2à")¨*Ñ"5ˆLÜØ/°
¨|Ð;MÈfÈXÐUfÐgtÐfuÐvôð ×(Ñ(¸Ð(ÓFÐFð rX   c           	   ‹   ó  K  — ddl m} t        d|› �«       |d   }t        |«      }| j	                  ||j                  d«      ¬«      ƒ d {  –—† }|d   d   d   }t        |«      }t        |t        «      sJ ‚d	t        |j                  «       «      || j                  t        |«      d
|d|idœgi}	| j                  j                  | j                  › d| j                  › d�| j                  |	¬«      ƒ d {  –—†  y 7 Œ°7 Œ­w)Nr   r–   z/async qdrant semantic-cache set_cache, kwargs: r˜   r|   r™   rh   r‹   rš   rL   rr   r›   r#   rž   rp   )rŸ   r—   r   r   r”   rJ   r@   r?   r    rf   rI   rO   rE   r;   r%   r¡   s
             rV   Úasync_set_cachez#QdrantSemanticCache.async_set_cache�  s"  è ø€ Ý&äÐGÈÀxÐPÔQð ! Ñ,ˆÜ-¨hÓ7ˆØ*.×*CÑ*CÀFÐU[×U_ÑU_Ð`jÓUkÐ*CÓ*l×$lÐð .¨fÑ5°aÑ8¸ÑEˆ	ä�E“
ˆÜ˜%¤Ô%Ð%Ð%ð ä˜dŸj™j›lÓ+Ø'à×1Ñ1´3°s³8Ø Ø" Eð ñð
ð
ˆð ×Ñ×#Ñ#Ø×'Ñ'Ð(¨°d×6JÑ6JÐ5KÈ7ÐSØ—L‘LØð $ó 
÷ 	
ñ 	
ð- %møð,	
ús%   ‚A
DÁC=ÁB*DÃ7C?Ã8DÃ?Dc           
   ‹   óÂ  K  — t        d|› �«       |d   }t        |«      }| j                  ||j                  d«      ¬«      ƒ d {  –—† }|d   d   d   }|dd	d
ddœidd
dœ}| j	                  ||¬«       | j
                  j                  | j                  › d| j                  › d�| j                  |¬«      ƒ d {  –—† }|j                  «       d   }	|	€d|j                  di «      d<   y t        |	t        «      r$t        |	«      dk(  rd|j                  di «      d<   y |	d   d   }
|	d   d   }| j                  ||¬«      s!t        d«       d|j                  di «      d<   y |d   }t        d| j                   › d|
› d|› d|› �«       |
|j                  di «      d<   |
| j                   k\  r+|d   }t        d |
› d!|› d"|› �«       | j#                  |¬#«      S y 7 �Œ“7 �Œ!­w)$Nz/async qdrant semantic-cache get_cache, kwargs: r˜   r|   r™   rh   r   r‹   r¦   FTr§   r¨   r   r¬   r°   r#   r±   rp   r'   r²   r³   r´   rt   rµ   r¶   rL   r·   r¸   r¹   rº   rr   r»   r¼   r½   r¾   )r   r   r”   rJ   rk   rI   r¿   rE   r;   r%   r7   rÀ   r?   rÁ   rÂ   rw   r<   r_   rÃ   s                 rV   Úasync_get_cachez#QdrantSemanticCache.async_get_cache¥  ss  è ø€ ÜÐGÈÀxÐPÔQð ! Ñ,ˆÜ-¨hÓ7ˆà*.×*CÑ*CÀFÐU[×U_ÑU_Ð`jÓUkÐ*CÓ*l×$lÐð .¨fÑ5°aÑ8¸ÑEˆ	ð  àØ#Ø#Ø$'ñ!ðð Ø ñ
ˆð 	×1Ñ1°tÀÐ1ÔEà'+×'8Ñ'8×'=Ñ'=Ø×'Ñ'Ð(¨°d×6JÑ6JÐ5KÈ>ÐZØ—L‘LØð (>ó (
÷ "
ˆð )×-Ñ-Ó/°Ñ9ˆàˆ?ØGJˆF×Ñ˜j¨"Ó-Ð.CÑDØÜ�gœtÔ$Ü�7‹|˜qÒ ØKN�×!Ñ! *¨bÓ1Ð2GÑHØà# A™J wÑ/ˆ
Ø  ™ IÑ.ˆØ×.Ñ.°wÀCÐ.ÔHÜÐSÔTØGJˆF×Ñ˜j¨"Ó-Ð.CÑDØà& v™ˆô 	Ø4°T×5NÑ5NÐ4OÈ~Ð^hÐ]iÐisÐtzÐs{ð  |Uð  Vcð  Udð  eô	
ð
 DNˆ×Ñ˜* bÓ)Ð*?Ñ@à˜×2Ñ2Ò2à")¨*Ñ"5ˆLÜØ/°
¨|Ð;MÈfÈXÐUfÐgtÐfuÐvôð ×(Ñ(¸Ð(ÓFÐFð ð{ %mùð&"
ûs&   ‚AGÁGÁA4GÂ;GÂ<DGÇGc              ƒ   ó"   K  — | j                   S ­wr[   )rM   )rP   s    rV   Ú_collection_infoz$QdrantSemanticCache._collection_infoë  s   è ø€ Ø×#Ñ#Ð#ùs   ‚c              ‹   ó¨   K  — g }|D ]+  }|j                   | j                  |d   |d   fi |¤Ž«       Œ- t        j                  |Ž ƒ d {  –—†  y 7 Œ­w)Nr   r   )ÚappendrË   r‘   Úgather)rP   Ú
cache_listr¢   ÚtasksÚvals        rV   Úasync_set_cache_pipelinez,QdrantSemanticCache.async_set_cache_pipelineî  sW   è ø€ ØˆØò 	IˆCØ�L‰LÐ-˜×-Ñ-¨c°!©f°c¸!±fÑGÀÑGÕHð	Iä�n‰n˜eÐ$×$Ò$ús   ‚AAÁ
AÁA)
NNNNNztext-embedding-ada-002NNNN)ra   Nr[   )Ú__name__Ú
__module__Ú__qualname__rf   r   ÚintÚ__annotations__r
   r   ÚfloatrW   r   r_   r@   Údictrg   rk   rN   Úboolrw   r{   r   rŽ   r”   r¤   rÉ   rË   rÍ   rÏ   rÖ   © rX   rV   r   r   *   s^  … Ø.ÐØ-1Ð  d¡
Ó1ØGÐ�uÓGð ØØØ!Ø Ø0ØØØ15Ø*.ñtGð %(¨$¡JðtGð ! 4™<ótGðl°ó ð
°ð 
¸ó 
ð@¸ð @ÀCð @ÈDó @ódðF°$ð F¸Sð FÀTó Fð
 sð 
°Oð 
Èó 
ñ
 Sð 
°D¸¸c¸±NÀTÑ4Ið 
ÐUfó 
ñ6N°ð NÀÀSÈ#ÀXÁÐQUÑ@Uð NÐaró Nò:%
òNGòR"
òHDòL$ó%rX   r   ) Ú__doc__r]   r‘   r7   rB   Útypingr   r   r   r   rŒ   Úlitellm._loggingr   Úlitellm.constantsr   r	   r
   Ú8litellm.litellm_core_utils.prompt_templates.common_utilsr   Úlitellm.types.utilsr   Ú_embedding_routerr   r   r   r   r   Ú
base_cacher   Úlitellm.routerr   r   rß   rX   rV   ú<module>ré      s[   ðñó Û Û Û 	ß 2Ó 2ã Ý *÷ñ õ
õ 2÷õ õ "áÝ%ôH%˜)õ H%rX   