Ë
    uPêj·  ã                  ó¨   — d Z ddlmZ ddlmZ ddlmZmZmZ ddl	Z	ddl
mZ erddlmZ 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 dd	„Z	 	 	 	 	 	 	 	 dd
„Zdd„Zdd„Zy)a  Shared selection of the embedding path for semantic caches.

Both the Redis and qdrant semantic caches need the same decision: when the
configured embedding model is a proxy Router deployment, embeddings must run
through the Router so per-deployment auth (e.g. Bedrock aws_role_name) is
applied. Otherwise fall back to a direct litellm embedding call.

This module is dependency-injected: callers pass the proxy ``llm_router`` and
``llm_model_list`` in, so the decision logic is unit-testable without importing
``litellm.proxy.proxy_server``.
é    )Úannotations)ÚSequence)ÚTYPE_CHECKINGÚAnyÚFinalN©Ú(SEMANTIC_CACHE_EMBEDDING_TIMEOUT_SECONDS)ÚRouterc                óX   — |€y|�|D �cg c]  }d|v sŒ|d   ‘Œ c}ng }| |v r|S yc c}w )zHReturn ``llm_router`` iff it serves ``embedding_model`` as a deployment.NÚ
model_name© )Úembedding_modelÚ
llm_routerÚllm_model_listÚmÚrouter_model_namess        úf/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/caching/_embedding_router.pyÚresolve_embedding_routerr      sM   € ð ÐØàJXÐJd .ÖF˜Q°LÀAÒ4Eˆˆ<‹ÓFÐjlð ð Ð,Ñ,ØÐØùò	 	Gs   Š	'”'c                ó.   — t        | xs i «      }d|d<   |S )zJForward the caller's full metadata, flagged as a semantic-cache embedding.Tzsemantic-cache-embedding)Údict)Úrequest_metadataÚmetadatas     r   Úbuild_router_embedding_metadatar   )   s$   € ô '+Ð+;Ò+A¸rÓ&B€HØ+/€HÐ'Ñ(Ø€Oó    c                ó<   — | �| S |€y|j                  |«      \  }}|S )z[Explicit cache setting first, else the Router deployment's configured ``max_input_tokens``.N)Úget_configured_token_limits)Úconfigured_max_input_tokensr   ÚrouterÚdeployment_max_input_tokensÚ_s        r   Ú"resolve_embedding_max_input_tokensr!   2   s4   € ð #Ð.Ø*Ð*Ø€~ØØ%+×%GÑ%GÈÓ%XÑ"Ð Ø&Ð&r   c                ó   — | �| S t         S )zDExplicit cache setting first, else the short semantic-cache default.r   )Úconfigured_timeouts    r   Úresolve_embedding_timeoutr$   @   s   € àÐ%Ø!Ð!Ü3Ð3r   c                ó�   — |€| S t        j                  || ¬«      }t        |«      |k  r| S t        j                  ||d| ¬«      }|S )zUKeep only the first ``max_input_tokens`` tokens of ``prompt`` for the embedding call.N)ÚmodelÚtext)r&   Útokens)ÚlitellmÚencodeÚlenÚdecode)Úpromptr   Úmax_input_tokensr(   Ú	truncateds        r   Útruncate_embedding_inputr0   G   sN   € àÐØˆÜ#*§>¡>¸ÈfÔ#U€FÜ
ˆ6ƒ{Ð&Ò&ØˆÜ#ŸN™N°ÈÐPaÐQaÐIbÔc€IØÐr   )r   Ústrr   úRouter | Noner   zlist[dict[str, Any]] | NoneÚreturnr2   )r   zdict[str, Any] | Noner3   zdict[str, Any])r   ú
int | Noner   r1   r   r2   r3   r4   )r#   zfloat | Noner3   Úfloat)r-   r1   r   r1   r.   r4   r3   r1   )Ú__doc__Ú
__future__r   Úcollections.abcr   Útypingr   r   r   r)   Úlitellm.constantsr	   Úlitellm.routerr
   r   r   r!   r$   r0   r   r   r   ú<module>r<      s•   ðñ
õ #å $ß ,Ñ ,ã Ý FáÝ%ðØðàðð 0ðð ó	ð Ø+ðàóð'Ø!+ð'àð'ð ð'ð ó	'ó4ôr   