Ë
    tPêjÊ"  ã                  ó>  — U d Z ddlmZ ddl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 ddlmZmZmZm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 erddlmZ ddlm Z  dZ!de"d<   e#e$df   Z%de"d<    G d„ de«      Z& e	dd¬«       G d„ d«      «       Z' e	dd¬«       G d„ d«      «       Z( e	dd¬«       G d„ d«      «       Z) e	dd¬«       G d„ d «      «       Z*e(e)z  e*z  Z+de"d!<    G d"„ d#e«      Z, G d$„ d%e«      Z- G d&„ d'e«      Z. G d(„ d)e«      Z/ G d*„ d+e«      Z0d>d,„Z1d?d-„Z2d@d.„Z3dAd/„Z4dBd0„Z5dCd1„Z6dDd2„Z7 ei «      Z8d3e"d4<   dEd5„Z9 e	dd¬«       G d6„ d7«      «       Z:dFd8„Z;	 	 	 	 	 	 	 	 	 	 dGd9„Z< G d:„ d;«      Z= e=«       Z>de"d<<   	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dHd=„Z?y)IzvSemantic ranking over the in-memory A2A agent registry, shared by GET /v1/agents?query= and the agent_search MCP tool.é    )ÚannotationsN)Ú	AwaitableÚMappingÚSequence)Ú	dataclass)Úchain)ÚMappingProxyType)ÚTYPE_CHECKINGÚFinalÚProtocolÚ	TypeAlias)ÚOpenAIError)Ú	BaseModelÚ
ConfigDictÚValidationError)ÚBudgetExceededError)ÚAgentResponse)ÚUserAPIKeyAuth)ÚRouteré   r   ÚDEFAULT_AGENT_SEARCH_TOP_K.r   ÚVectorc                  ó   — e Zd Zdd„Zy)ÚEmbedderc                 ó   — y ©N© )ÚselfÚtextss     úo/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/agent_endpoints/agent_search.pyÚ__call__zEmbedder.__call__   s   � ó    N)r   úSequence[str]ÚreturnzAwaitable[Sequence[Vector]])Ú__name__Ú
__module__Ú__qualname__r!   r   r"   r    r   r      s   „ ÜPr"   r   T)ÚfrozenÚslotsc                  ó"   — e Zd ZU ded<   ded<   y)ÚAgentSearchHitr   ÚagentÚfloatÚscoreN©r%   r&   r'   Ú__annotations__r   r"   r    r+   r+      s   … àÓØ„Lr"   r+   c                  ó   — e Zd ZU ded<   y)ÚAgentSearchHitsztuple[AgentSearchHit, ...]ÚhitsNr/   r   r"   r    r2   r2   %   s   … à
$Ô$r"   r2   c                  ó   — e Zd ZU ded<   y)ÚAgentSearchNotConfiguredÚstrÚreasonNr/   r   r"   r    r5   r5   *   ó   … à„Kr"   r5   c                  ó   — e Zd ZU ded<   y)ÚAgentSearchEmbeddingFailedr6   r7   Nr/   r   r"   r    r:   r:   /   r8   r"   r:   ÚAgentSearchOutcomec                  óL   — e Zd ZU  edd¬«      ZdZded<   dZded<   dZd	ed
<   y)Ú_SearchableSkillTÚignore©r(   ÚextraÚ r6   ÚnameÚdescriptionr   ztuple[str, ...]ÚtagsN)	r%   r&   r'   r   Úmodel_configrB   r0   rC   rD   r   r"   r    r=   r=   7   s+   … Ù T°Ô:€Là€Dˆ#ƒNØ€K�ÓØ€Dˆ/Ôr"   r=   c                  ó>   — e Zd ZU  edd¬«      ZdZded<   dZded	<   y
)Ú_SearchableCardTr>   r?   rA   r6   rC   r   útuple[_SearchableSkill, ...]ÚskillsN)r%   r&   r'   r   rE   rC   r0   rI   r   r"   r    rG   rG   ?   s#   … Ù T°Ô:€Là€K�ÓØ+-€FÐ(Ô-r"   rG   c                  ó,   — e Zd ZU  edd¬«      Zded<   y)Ú_EmbeddingItemTr>   r?   ztuple[float, ...]Ú	embeddingN©r%   r&   r'   r   rE   r0   r   r"   r    rK   rK   F   s   … Ù T°Ô:€Là Ô r"   rK   c                  ó,   — e Zd ZU  edd¬«      Zded<   y)Ú_EmbeddingDataTr>   r?   ztuple[_EmbeddingItem, ...]ÚdataNrM   r   r"   r    rO   rO   L   s   … Ù T°Ô:€Là
$Ô$r"   rO   c                  óR   — e Zd ZU  ed¬«      Zded<   ded<   ded<   ded<   d	ed
<   y)ÚAgentSearchResultT)r(   r6   Úagent_idÚ
agent_namerC   rH   rI   r-   r.   NrM   r   r"   r    rR   rR   R   s'   … Ù TÔ*€LàƒMØƒOØÓØ(Ó(Ø„Lr"   rR   c                ót   — 	 t         j                  | j                  «      S # t        $ r t        «       cY S w xY wr   )rG   Úmodel_validateÚagent_card_paramsr   )r,   s    r    Ú_searchable_cardrX   \   s6   € ð!Ü×-Ñ-¨e×.EÑ.EÓFÐFøÜò !ÜÓ Ò ð!ús   ‚! ¡7¶7c                ó’   — dj                  d„ | j                  | j                  dj                  | j                  «      fD «       «      S )Nú c              3  ó&   K  — | ]	  }|sŒ|–— Œ y ­wr   r   ©Ú.0Úparts     r    ú	<genexpr>z_skill_text.<locals>.<genexpr>d   s   è ø€ Òc˜TÒ^b”DÑcùó   ‚Š)ÚjoinrB   rC   rD   )Úskills    r    Ú_skill_textrc   c   s5   € Ø�8‰8Ñc e§j¡j°%×2CÑ2CÀSÇXÁXÈeÏjÉjÓEYÐ%ZÔcÓcÐcr"   c                ó²   — t        | «      }t        d„ |j                  D «       «      }dj                  d„ | j                  |j
                  g|¢­D «       «      S )Nc              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr   )rc   )r]   rb   s     r    r_   z$agent_search_text.<locals>.<genexpr>i   s   è ø€ ÒK°eœ{¨5×1ÑKùó   ‚ú
c              3  ó&   K  — | ]	  }|sŒ|–— Œ y ­wr   r   r\   s     r    r_   z$agent_search_text.<locals>.<genexpr>j   s   è ø€ Òa˜dÒ\`”TÑaùr`   )rX   ÚtuplerI   ra   rT   rC   )r,   ÚcardÚskill_liness      r    Úagent_search_textrl   g   sK   € Ü" 5Ó)€DÜÑK¸t¿{¹{ÔKÓK€KØ�9‰9Ña u×'7Ñ'7¸×9IÑ9IÐ&XÈKÑ&XÔaÓaÐar"   c                óØ   — t        | j                  «      }t        | j                  j                  | j                  j                  |j
                  |j                  | j                  ¬«      S )N)rS   rT   rC   rI   r.   )rX   r,   rR   rS   rT   rC   rI   r.   )Úhitrj   s     r    Úagent_search_resultro   m   sN   € Ü" 3§9¡9Ó-€DÜØ—‘×#Ñ#Ø—9‘9×'Ñ'Ø×$Ñ$Ø�{‰{Ø�i‰iôð r"   c                óæ   — t        d„ t        | |d¬«      D «       «      }t        j                  t        d„ | D «       «      «      t        j                  t        d„ |D «       «      «      z  }|r||z  S dS )Nc              3  ó,   K  — | ]  \  }}||z  –— Œ y ­wr   r   )r]   ÚaÚbs      r    r_   z$cosine_similarity.<locals>.<genexpr>y   s   è ø€ ÒE™t˜q !�Q˜•UÑEùs   ‚T©Ústrictc              3  ó&   K  — | ]	  }||z  –— Œ y ­wr   r   )r]   rr   s     r    r_   z$cosine_similarity.<locals>.<genexpr>z   s   è ø€ Ò 5¨1  Q¥Ñ 5ùó   ‚c              3  ó&   K  — | ]	  }||z  –— Œ y ­wr   r   )r]   rs   s     r    r_   z$cosine_similarity.<locals>.<genexpr>z   s   è ø€ ÒF\ÐQRÀqÈ1ÅuÑF\ùrw   g        )ÚsumÚzipÚmathÚsqrt)ÚleftÚrightÚdotÚnormss       r    Úcosine_similarityr�   x   s_   € ÜÑE¤s¨4°¸tÔ'DÔEÓE€CÜ—9‘9œSÑ 5°Ô 5Ó5Ó6¼¿¹Ä3ÑF\ÐV[ÔF\ÓC\Ó9]Ñ]€EÙˆ3�‰;Ð( SÐ(r"   c                óP   — ddl m} i |j                  | «      ¥d| j                  i¥S )Nr   )ÚLiteLLMProxyRequestSetupÚuser_api_key)Ú$litellm.proxy.litellm_pre_call_utilsrƒ   Ú'get_sanitized_user_information_from_keyÚapi_key)Úuser_api_key_dictrƒ   s     r    Úembedding_spend_metadatar‰   ~   s4   € ÝMðØ
"×
JÑ
JÐK\Ó
]ðàÐ)×1Ñ1ñð r"   c                ó   ‡ ‡‡— dˆˆ ˆfd„}|S )Nc              “  óê   •K  — t        | «      }‰j                  ‰|t        ‰«      ¬«      ƒ d {  –—† }t        d„ t        j                  |j                  «       «      j                  D «       «      S 7 ŒA­w)N)ÚmodelÚinputÚmetadatac              3  ó4   K  — | ]  }|j                   –— Œ y ­wr   )rL   )r]   Úitems     r    r_   z1router_embedder.<locals>.embed.<locals>.<genexpr>�   s   è ø€ Òj¨�T—^•^Ñjùs   ‚)ÚlistÚ
aembeddingr‰   ri   rO   rV   Ú
model_dumprP   )r   ÚbatchÚresponseÚembedding_modelÚrouterrˆ   s      €€€r    Úembedzrouter_embedder.<locals>.embedˆ   sj   øè ø€ Ü˜E“{ˆØ &× 1Ñ 1Ø!¨Ô9QÐRcÓ9dð !2ó !
÷ 
ˆô Ñj´×0MÑ0MÈh×NaÑNaÓNcÓ0d×0iÑ0iÔjÓjÐjð
ús   ƒ,A3¯A1°AA3)r   r#   r$   zSequence[Vector]r   )r—   r–   rˆ   r˜   s   ``` r    Úrouter_embedderr™   ‡   s   ú€ ÷kð €Lr"   zFinal[Mapping[str, Vector]]Ú_NO_VECTORSc              ƒ  ó  K  — 	 t         | |«      ƒ d {  –—† «      }t        |«      t        |«      k7  r%t	        dt        |«      › dt        |«      › d�¬«      S |S 7 ŒF# t        t        t        f$ r}t	        d|› �¬«      cY d }~S d }~ww xY w­w)Nz#embedding the search query failed: ©r7   zembedding model returned z vectors for z inputs)ri   r   Ú
ValueErrorr   r:   Úlen)r˜   r   ÚvectorsÚexcs       r    Ú
_embed_allr¡   •   s‘   è ø€ ð^Ü¡U¨5£\×1Ó2ˆô ˆ7ƒ|”s˜5“zÒ!Ü)Ø.¬s°7«|¨n¸MÌ#ÈeË*ÈÐU\Ð]ô
ð 	
ð €Nð  2ùÜœÔ%8Ð9ò ^Ü)Ð3VÐWZÐV[Ð1\Ô]Õ]ûð^üsC   ‚B„A ”A•A �>BÁA ÁB
Á1BÁ?B
Â BÂB
Â
Bc                  ó"   — e Zd ZU ded<   ded<   y)Ú	_Embeddedr   Úquery_vectorúMapping[str, Vector]rŸ   Nr/   r   r"   r    r£   r£   ¡   s   … àÓØ!Ô!r"   r£   c                ó0   ‡ ‡— t        ˆ ˆfd„|D «       «      S )Nc              3  óR   •K  — | ]  }t        ‰|   «      t        ‰«      k(  –— Œ  y ­wr   )rž   )r]   Útextr¤   rŸ   s     €€r    r_   z"_same_dimension.<locals>.<genexpr>¨   s$   øè ø€ ÒI¸4Œs�7˜4‘=Ó!¤S¨Ó%6Õ6ÑIùs   ƒ$')Úall)r¤   rŸ   r   s   `` r    Ú_same_dimensionrª   §   s   ù€ ÜÔIÀ5ÔIÓIÐIr"   c              ƒ  ó^  ‡K  — t        t        j                  ˆfd„|D «       «      «      }t        | |g|¢­«      ƒ d {  –—† }t	        |t
        «      r|S t        t        t        ‰j                  «       t        ||dd  d¬«      «      «      «      }t        |d   ||«      rt        |d   |¬«      S t        t        j                  |«      «      }t        | |g|¢­«      ƒ d {  –—† }t	        |t
        «      r|S t        |d   t        t        t        ||dd  d¬«      «      «      ¬«      S 7 Œê7 ŒI­w)Nc              3  ó,   •K  — | ]  }|‰vsŒ|–— Œ y ­wr   r   )r]   r¨   Úcacheds     €r    r_   z*_embed_query_and_agents.<locals>.<genexpr>®   s   øè ø€ Ò(V°$À4ÈvÒCU¬Ñ(Vùs   ƒ	�é   Trt   r   )r¤   rŸ   )ri   ÚdictÚfromkeysr¡   Ú
isinstancer:   r	   r   Úitemsrz   rª   r£   )	r˜   Úqueryr   r­   ÚmissingÚembeddedrŸ   ÚuniqueÚ
reembeddeds	      `     r    Ú_embed_query_and_agentsr¸   «   s  øè ø€ ô œ4Ÿ=™=Ó(V¸%Ô(VÓVÓW€GÜ& u¨uÐ.?°wÑ.?Ó@×@€HÜ�(Ô6Ô7ØˆÜ%¤d¬5°·±³ÄÀWÈhÐWXÐWYÈlÐcgÔAhÓ+iÓ&jÓk€GÜ�x ‘{ G¨UÔ3Ü h¨q¡k¸7ÔCÐCÜœ$Ÿ-™-¨Ó.Ó/€FÜ(¨°Ð0@¸Ñ0@ÓA×A€JÜ�*Ô8Ô9ØÐÜØ ‘]Ô,<¼TÄ#ÀfÈjÐYZÐY[ÈnÐeiÔBjÓ=kÓ,lôð ð Aøð Bús#   ƒ;D-¾D)¿B"D-Ã!D+Ã"AD-Ä+D-c                  ó@   — e Zd ZdZdd„Zdd„Z	 	 	 	 	 	 	 	 	 	 	 	 dd„Zy)	ÚAgentSearchIndexzgCaches one vector per distinct agent text per embedding model, so repeat searches only embed the query.c                ó$   — t        i «      | _        y r   )r	   Ú_vectors)r   s    r    Ú__init__zAgentSearchIndex.__init__Á   s   € Ü<LÈRÓ<Pˆ�r"   c                ó  — | j                   j                  |t        «      j                  «       D ��ci c])  \  }}t	        |«      t	        |j
                  «      k(  r||“Œ+ }}}t        i |¥|j                  ¥«      S c c}}w r   )r¼   Úgetrš   r²   rž   r¤   r	   rŸ   )r   r–   rµ   r¨   ÚvectorÚkepts         r    Ú_mergedzAgentSearchIndex._mergedÄ   s}   € ð !%§¡× 1Ñ 1°/Ä;Ó O× UÑ UÓ W÷
á��fÜ�6‹{œc (×"7Ñ"7Ó8Ò8ð �&‰Lð
ˆñ 
ô
  Ð < 4Ð <¨8×+;Ñ+;Ð <Ó=Ð=ùó
s   ².A<c              ƒ  ó  ‡	K  — |st        d¬«      S t        d„ |D «       «      }| j                  j                  |t        «      }t        ||||«      ƒ d {  –—† Š	t        ‰	t        «      r‰	S t        ‰	j                  ‰	j                  |«      st        d|› d�¬«      S t        i | j                  ¥|| j                  |‰	«      i¥«      | _        t        ˆ	fd„t        ||d¬	«      D «       d
„ d¬«      }t        t        |d | «      ¬«      S 7 Œ³­w)Nr   )r3   c              3  ó2   K  — | ]  }t        |«      –— Œ y ­wr   )rl   )r]   r,   s     r    r_   z*AgentSearchIndex.search.<locals>.<genexpr>Ñ   s   è ø€ ÒJ¸%Ô.¨u×5ÑJùrf   zembedding model z% returned vectors of mixed dimensionsrœ   c           	   3  ó€   •K  — | ]5  \  }}t        |t        ‰j                  ‰j                  |   «      ¬ «      –— Œ7 y­w))r,   r.   N)r+   r�   r¤   rŸ   )r]   r,   r¨   rµ   s      €r    r_   z*AgentSearchIndex.search.<locals>.<genexpr>Ü   sB   øè ø€ ò á�E˜4ô  UÔ2CÀH×DYÑDYÐ[c×[kÑ[kÐlpÑ[qÓ2r×sÐsñùs   ƒ;>Trt   c                ó   — | j                   S r   )r.   )rn   s    r    ú<lambda>z)AgentSearchIndex.search.<locals>.<lambda>à   s
   € ˜CŸI™I€ r"   )ÚkeyÚreverse)r2   ri   r¼   r¿   rš   r¸   r±   r:   rª   r¤   rŸ   r	   rÂ   Úsortedrz   )
r   r³   ÚagentsÚtop_kr˜   r–   r   r­   Úrankedrµ   s
            @r    ÚsearchzAgentSearchIndex.searchÌ   s  øè ø€ ñ Ü"¨Ô+Ð+ÜÑJÀ6ÔJÓJˆØŸ™×)Ñ)¨/¼;ÓGˆÜ 7¸¸uÀeÈVÓ T×TˆÜ�hÔ :Ô;ØˆOÜ˜x×4Ñ4°h×6FÑ6FÈÔNÜ-Ø)¨/Ð):Ð:_Ð`ôð ô )Ð)t¨D¯M©MÐ)t¸?ÈDÏLÉLÐYhÐjrÓLsÑ)tÓuˆŒÜóä#& v¨u¸TÔ#Bôñ &Øô
ˆô ¤E¨&°°%¨.Ó$9Ô:Ð:ð! Uús   ƒADÁD	ÁB4DN)r$   ÚNone)r–   r6   rµ   r£   r$   r¥   )r³   r6   rË   úSequence[AgentResponse]rÌ   Úintr˜   r   r–   r6   r$   z,AgentSearchHits | AgentSearchEmbeddingFailed)r%   r&   r'   Ú__doc__r½   rÂ   rÎ   r   r"   r    rº   rº   ¾   sE   „ ÙqóQó>ð;Øð;Ø"9ð;ØBEð;ØNVð;Øilð;à	5ô;r"   rº   Úglobal_agent_search_indexc           
   ƒ  ó–   K  — |€t        d¬«      S |€t        d¬«      S |j                  | ||t        |||«      |«      ƒ d {  –—† S 7 Œ­w)Nzjagent search needs litellm_settings.agent_search_embedding_model set to an embedding model from model_listrœ   zDagent search needs a model_list so the embedding model can be called)r5   rÎ   r™   )r³   rË   rÌ   r—   r–   Úindexrˆ   s          r    Úsearch_agentsrÖ   é   sb   è ø€ ð ÐÜ'Øô
ð 	
ð €~Ü'Ð/uÔvÐvØ—‘Øˆv�uœo¨f°oÐGXÓYÐ[jó÷ ð ð ús   ‚A A	ÁAÁA	)r,   r   r$   rG   )rb   r=   r$   r6   )r,   r   r$   r6   )rn   r+   r$   rR   )r}   r   r~   r   r$   r-   )rˆ   r   r$   zdict[str, object])r—   r   r–   r6   rˆ   r   r$   r   )r˜   r   r   r#   r$   z/tuple[Vector, ...] | AgentSearchEmbeddingFailed)r¤   r   rŸ   r¥   r   r#   r$   Úbool)
r˜   r   r³   r6   r   r#   r­   r¥   r$   z&_Embedded | AgentSearchEmbeddingFailed)r³   r6   rË   rÐ   rÌ   rÑ   r—   zRouter | Noner–   z
str | NonerÕ   rº   rˆ   r   r$   r;   )@rÒ   Ú
__future__r   r{   Úcollections.abcr   r   r   Údataclassesr   Ú	itertoolsr   Útypesr	   Útypingr
   r   r   r   Úopenair   Úpydanticr   r   r   Úlitellm.exceptionsr   Úlitellm.types.agentsr   Úlitellm.proxy._typesr   Úlitellm.routerr   r   r0   ri   r-   r   r   r+   r2   r5   r:   r;   r=   rG   rK   rO   rR   rX   rc   rl   ro   r�   r‰   r™   rš   r¡   r£   rª   r¸   rº   rÓ   rÖ   r   r"   r    ú<module>rä      s7  ðÚ |å "ã ß 8Ñ 8Ý !Ý Ý "ß <Ó <å ß ;Ñ ;å 2Ý .áÝ3Ý%à$%Ð ˜EÓ %à˜% ˜*Ñ%€ˆ	Ó %ôQˆxô Qñ �$˜dÔ#÷ð ó $ðñ
 �$˜dÔ#÷%ð %ó $ð%ñ �$˜dÔ#÷ð ó $ðñ �$˜dÔ#÷ð ó $ðð !0Ð2JÑ JÐMgÑ gÐ �IÓ gô�yô ô.�iô .ô!�Yô !ô%�Yô %ô˜	ô ó!ódóbóó)óóñ ,<¸BÓ+?€Ð(Ó ?ó	ñ �$˜dÔ#÷"ð "ó $ð"ó
JðØðØðØ(5ðØ?Sðà+ó÷&%;ñ %;ñP $4Ó#5Ð ˜5Ó 5ðØðà#ðð ðð ð	ð
  ðð ðð &ðð ôr"   