Ë
    tPêjŒª  ã                   ó‚  — U d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
mZmZmZ ddlmZmZmZmZmZ ddl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m Z m!Z!m"Z" ddl#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z? ddl@mAZA ddlBmCZCmDZD dedeEfd„ZFde9dz  ddfd„ZGddœde9dz  deEdedeEdz  deHeEeIf   f
d„ZJ e«       ZKeeLd<   d ee=   ddfd!„ZMd ee=   deNe=   fd"„ZOd#e!ddfd$„ZP eQej¤                  j§                  d%d&«      «      ZTeeLd'<    eQej¤                  j§                  d(d)«      «      ZU G d*„ d+ed,¬-«      ZVd.e=deVfd/„ZW G d0„ d1e«      ZXd2eYd3eEd4eEdefd5„ZZd6eEd ee=   d7eYd#e!de[e=d8f   f
d9„Z\eKj§                  d:d;g ee1«      geNe=   ¬<«       ed,d=¬>«      de( ee1«      fd?ed@e]d6e
eEdz   edAdB¬C«      f   d7e
eY edAdDdE¬F«      f   d#e!f
dG„«       Z^ddHl_m`Z` ddIl_maZb eKjÇ                  d:d;g ee1«      ge=¬<«       ee1«      fd?e:ded#e!fdJ„«       ZdeKj§                  dKd;g ee1«      ge=¬<«       ee1«      fdeEd#e!fdL„«       ZeeKjÍ                  dKd;g ee1«      ge=¬<«       ee1«      fdeEd?e:ded#e!fdM„«       ZgeKjÑ                  dKd;g ee1«      ge=¬<«       ee1«      fdeEd?e?ded#e!fdN„«       ZieKjÕ                  dKdOg ee1«      g¬P«       ee1«      fdeEd#e!fdQ„«       ZkeKjÇ                  dRd;g ee1«      ge<¬<«       ee1«      fdeEd#e!fdS„«       ZleKjÇ                  dTd;g ee1«      ge<¬<«       ee1«      fd?e>d#e!fdU„«       ZmeKj§                  dVdWg ee1«      geD¬<«      ddddddAdXd ee1«      f	dYeEdz  dZeEdz  d[eEdz  d\eEdz  d]eEdz  d^eYd_eYd`eEdz  d#e!fda„«       Zny)bzä
Agent endpoints for registering + discovering agents via LiteLLM.

Follows the A2A Spec.

1. Register an agent via POST `/v1/agents`
2. Discover agents via GET `/v1/agents`
3. Get specific agent via GET `/v1/agents/{agent_id}`
é    N)ÚMappingÚSequence)ÚMappingProxyType)Ú	AnnotatedÚFinalÚ	TypedDictÚassert_never)Ú	APIRouterÚDependsÚHTTPExceptionÚQueryÚRequest)ÚReadOnlyÚRequired)Úverbose_proxy_logger)Ú_get_masked_values)Úget_async_httpx_client)ÚCommonProxyErrorsÚLitellmUserRolesÚUserAPIKeyAuthÚuser_api_key_has_admin_view)ÚSUPPORTED_A2A_PROTOCOL_VERSIONSÚmerge_agent_cardÚnormalize_protocol_version)ÚDEFAULT_AGENT_SEARCH_TOP_KÚAgentSearchEmbeddingFailedÚAgentSearchHitsÚAgentSearchNotConfiguredÚglobal_agent_search_indexÚsearch_agents)Úaccessible_agents©Úuser_api_key_auth)Úcheck_feature_access_for_user)Úget_daily_activity)Úget_custom_url)Ú	AgentCardÚAgentConfigÚAgentKeySummaryÚAgentMakePublicResponseÚAgentResponseÚMakeAgentsPublicRequestÚPatchAgentRequest)ÚhttpxSpecialProvider)ÚDailySpendMetadataÚSpendAnalyticsPaginatedResponseÚhttp_requestÚreturnc                 óB   — t        t        | j                  «      d¬«      S )zGReturn the proxy's public base URL, preferring PROXY_BASE_URL when set.N)Úroute)r&   ÚstrÚbase_url)r1   s    úl/home/oem/CyberBrain26-unified/.venv/lib/python3.12/site-packages/litellm/proxy/agent_endpoints/endpoints.pyÚ_proxy_base_urlr8   A   s   € äœ#˜l×3Ñ3Ó4¸DÔAÐAó    Úupstream_cardc           	      ó˜   — | r| j                  d«      nd}|�3t        |«      €'t        dd|› ddj                  t        «      › d�¬«      ‚yy)	zAReject an agent card pinning an unsupported A2A protocol version.ÚprotocolVersionNé�  zUnsupported protocolVersion 'z'. Supported versions: z, ú.©Ústatus_codeÚdetail)Úgetr   r   Újoinr   )r:   Úversions     r7   Ú_validate_protocol_versionrE   F   sg   € á=J�]×&Ñ&Ð'8Ô9ÐPT€GØÐÔ9¸'ÓBÐJÜØà/°¨yð 9'Ø'+§y¡yÔ1PÓ'QÐ&RÐRSðUô
ð 	
ð  KÐr9   ©Ú
agent_nameÚagent_idrG   c                óˆ   — t        |«      }t        | «       | r| j                  d«      nd}t        | |› d|› �||xs |¬«      S )zGApply the LiteLLM-fronting merge to ``upstream_card`` for ``agent_id``.ÚnameNz/a2a/)Ú	proxy_urlÚproxy_base_urlrJ   )r8   rE   rB   r   )r:   rH   r1   rG   Ú
proxy_baseÚ	card_names         r7   Ú_build_merged_agent_cardrO   S   sV   € ô (¨Ó5€JÜ˜}Ô-ñ
 5B�}×(Ñ(¨Ô0Àt€IÜØØ�L  h ZÐ0Ø!ØÒ$˜*ô	ð r9   ÚrouterÚagentsc              ƒ   ó$  ‡
K  — ddl mŠ
 t        ˆ
fd„| D «       «      }|sy|j                  j                  j                  dd|ii¬«      ƒ d{  –—† }i }|D ]W  }|j                  |j                  g «      j                  t        |j                  |j                  |j                  ¬«      «       ŒY | D ]Q  }‰
j                  |j                  «      D ��cg c]  }|j                  |«      xs d	D ]  }|‘Œ Œ  }	}}|	xs d|_        ŒS y7 Œ¹c c}}w ­w)
a#  Attach each agent's virtual keys, derived from the key table's agent_id
    foreign key. Mirrors how spend is joined into the agent response so the UI
    never has to cross-reference a full key dump client-side. Only non-secret
    fields are exposed (alias, masked key_name, hashed token).r   ©Úglobal_agent_registryc              3   ób   •K  — | ]&  }‰j                  |j                  «      D ]  }|–— Œ Œ( y ­w©N©Úids_for_agentrH   ©Ú.0ÚagentÚalias_idrT   s      €r7   ú	<genexpr>z)_attach_keys_to_agents.<locals>.<genexpr>t   s;   øè ø€ ò ØÐ5J×5XÑ5XÐY^×YgÑYgÓ5hòØ)1ŒðØñùó   ƒ,/NrH   Úin©Úwhere)ÚtokenÚ	key_aliasÚkey_name© )Ú,litellm.proxy.agent_endpoints.agent_registryrT   ÚtupleÚdbÚlitellm_verificationtokenÚ	find_manyÚ
setdefaultrH   Úappendr)   rb   rc   rd   rX   rB   Úkeys)rQ   Úprisma_clientÚ	agent_idsÚkey_rowsÚkeys_by_agentÚrowr[   r\   Úkey_summaryÚmatched_keysrT   s             @r7   Ú_attach_keys_to_agentsru   m   s/  øè ø€ õ
 Säó Ø$ôó €Iñ ØØ)×,Ñ,×FÑF×PÑPØ˜D )Ð,Ð-ð Qó ÷ €Hð >@€MØò 
ˆØ× Ñ  §¡¨rÓ2×9Ñ9ÜØ—i‘iØŸ-™-ØŸ™ôõ	
ð
ð ò *ˆð 2×?Ñ?ÀÇÁÓO÷
àØ,×0Ñ0°Ó:Ò@¸bò
ð ò ð
Øð
ˆñ 
ð
 "Ò) Tˆ�
ñ*ðúó
ùs%   ƒADÁDÁBDÃ#D
Ã7DÄ
Dc                 óÚ   — g }| D ]c  }|j                  d¬«      }d|_        d|_        d|_        |j                  rt        |j                  dd¬«      |_        |j                  |«       Œe |S )z…
    Return copies of the given agents with sensitive configuration fields
    redacted.  The original objects are not modified.
    T)ÚdeepNé   )Úunmasked_lengthÚnumber_of_asterisks)Ú
model_copyÚstatic_headersÚextra_headersrm   Úlitellm_paramsr   rl   )rQ   Úredactedr[   Úcopys       r7   Ú_redact_sensitive_agent_fieldsr�   Ž   s|   € ð ,.€HØò ˆØ×Ñ TÐÓ*ˆØ"ˆÔØ!ˆÔØˆŒ	Ø×ÒÜ"4Ø×#Ñ#Ø !Ø$%ô#ˆDÔð
 	�‰˜Õðð €Or9   Úuser_api_key_dictc                 óv   — | j                   t        j                  k7  rt        ddd| j                   › �i¬«      ‚y)z´
    Raises HTTP 403 if the caller does not have permission to create, update,
    or delete agents.  Only PROXY_ADMIN users are allowed to perform these
    write operations.
    é“  ÚerrorzBOnly proxy admins can create, update, or delete agents. Your role=r?   N)Ú	user_roler   ÚPROXY_ADMINr   )r‚   s    r7   Ú"_check_agent_management_permissionrˆ   ¥   sI   € ð ×"Ñ"Ô&6×&BÑ&BÒBÜØàÐ]Ð^o×^yÑ^yÐ]zÐ{ðô
ð 	
ð Cr9   Ú"LITELLM_AGENT_HEALTH_CHECK_TIMEOUTz5.0Ú"AGENT_HEALTH_CHECK_TIMEOUT_SECONDSÚ)LITELLM_AGENT_HEALTH_CHECK_GATHER_TIMEOUTz30.0c                   ó8   — e Zd ZU ee   ed<   ee   ed<   eed<   y)Ú_AgentHealthResultrH   Úhealthyr…   N)Ú__name__Ú
__module__Ú__qualname__r   r5   Ú__annotations__Úboolre   r9   r7   r�   r�   ¸   s   … Ø�s‰mÓØ�d‰^ÓØ„Jr9   r�   F)Útotalr[   c              ƒ   ó¸  K  — | j                   xs i j                  d«      }|s| j                  ddœS 	 t        t        j
                  dt        i¬«      }|j                  |«      ƒ d{  –—† }|j                  dk\  r| j                  dd	|j                  › �d
œS | j                  ddœS 7 Œ?# t        $ r#}| j                  dt        |«      d
œcY d}~S d}~ww xY w­w)z·
    Perform a GET request against the agent's URL and return the health result.

    Returns a dict with ``agent_id``, ``healthy`` (bool), and an optional
    ``error`` message.
    ÚurlT)rH   rŽ   Útimeout)Úllm_providerÚparamsNéô  FzHTTP ©rH   rŽ   r…   )
Úagent_card_paramsrB   rH   r   r.   ÚAgentHealthCheckrŠ   r@   Ú	Exceptionr5   )r[   r–   ÚclientÚresponseÚexcs        r7   Ú_check_agent_url_healthr¢   ¾   sÝ   è ø€ ð ×)Ñ)Ò/¨R×4Ñ4°UÓ;€CÙØ!ŸN™N°tÑ<Ð<ð
Ü.Ü-×>Ñ>ØÔAÐBô
ˆð !'§
¡
¨3£×/ˆØ×Ñ 3Ò&à!ŸN™NØ Ø  ×!5Ñ!5Ð 6Ð7ñð ð
 "ŸN™N°tÑ<Ð<ð 0ùô ò 
àŸ™ØÜ˜“Xñ
õ 	
ûð
üsR   ‚1C´5B+ Á)B)Á*/B+ ÂCÂB+ Â(CÂ)B+ Â+	CÂ4CÃCÃCÃCÃCc                   ó.   — e Zd ZU ee   ed<   ee   ed<   y)Ú_AgentSearchErrorDetailr…   ÚmessageN)r�   r�   r‘   r   r5   r’   re   r9   r7   r¤   r¤   à   s   … Ø�C‰=ÓØ�c‰]Ôr9   r¤   r@   r…   r¥   c                 ó&   — ||dœ}t        | |¬«      S )N)r…   r¥   r?   )r   )r@   r…   r¥   rA   s       r7   Ú_agent_search_errorr§   å   s   € Ø7<ÈÑ-Q€FÜ [¸Ô@Ð@r9   ÚqueryÚtop_k.c           	   ƒ   ó<  K  — ddl m} t        | |||t        j                  t
        |¬«      ƒ d {  –—† }|xt        d˜x�\  } t        d„ |D «       «      S  xt        d˜x�\  } t        dd|«      ‚ t        d˜x�\  }t        dd	|«      ‚ 	 t        |«       y 7 Œi­w)
Nr   )Ú
llm_router)r¨   rQ   r©   rP   Úembedding_modelÚindexr‚   re   c              3   ó~   K  — | ]5  }|j                   j                  t        d |j                  i«      ¬«      –— Œ7 y­w)Úsearch_score)ÚupdateN)r[   r{   r   Úscore)rZ   Úhits     r7   r]   z(_rank_agents_by_query.<locals>.<genexpr>ú   s5   è ø€ ÒtÐhk˜Ÿ™×-Ñ-Ô5EÀ~ÐWZ×W`ÑW`ÐFaÓ5bÐ-×cÑtùs   ‚;=r=   Úagent_search_not_configuredi÷  Úagent_search_unavailable)Úlitellm.proxy.proxy_serverr«   r    ÚlitellmÚagent_search_embedding_modelr   r   rg   r   r§   r   r	   )r¨   rQ   r©   r‚   r«   ÚoutcomeÚhitsÚreasons           r7   Ú_rank_agents_by_queryr»   ê   s¢   è ø€ õ 6ä(ØØØØÜ×<Ñ<Ü'Ø+ô÷ €Gð Ø"Œ_×"ÜÑtÐosÔtÓtÐtð #à-Ô%×-Ü% cÐ+HÈ&ÓQÐQð .ä'Ö/Ü% cÐ+EÀvÓNÐNð 0àÜ˜Õ!ð#ús   ‚.B°B±A*Bz
/v1/agentsz[beta] A2A Agents)ÚtagsÚdependenciesÚresponse_modelz±When true, performs a GET request to each agent's URL. Agents with reachable URLs (HTTP status < 500) and agents without a URL are returned; unreachable agents are filtered out.)ÚdescriptionÚrequestÚhealth_checké   zãDescribe the task in natural language to rank the agents you can reach by semantic similarity over their name, description, and skills. Each result carries a search_score. Requires litellm_settings.agent_search_embedding_model.)Ú
min_lengthr¿   éd   z:With query: the maximum number of ranked agents to return.)ÚgeÚler¿   c           
   ƒ   ó  ‡‡K  — t        |d«      ƒ d{  –—†  ddlmŠ 	 t        |«      ƒ d{  –—† }ddlm} |�½t        ˆfd„|D «       «      }|r§t        |«      j                  dd|ii¬	«      ƒ d{  –—† }|D �	ci c]  }	|	j                  |	j                  “Œ c}	Š|D ]B  }
t        ˆfd
„‰j                  |
j                  «      D «       «      }|sŒ3t        |«      |
_
        ŒD t        ||«      ƒ d{  –—†  |D ]o  }
|
j                  €i |
_        t        j                   duxr9 ‰j                  |
j                  «      j#                  t        j                   «       |
j                  d<   Œq |j$                  t&        j(                  k(  xs' |j$                  t&        j(                  j*                  k(  }|st-        |«      }|rã|D �
cg c]$  }
|
j.                  xs i j1                  d«      sŒ#|
‘Œ& }}
|D �
cg c]$  }
|
j.                  xs i j1                  d«      rŒ#|
‘Œ& }}
	 t3        j4                  t3        j6                  |D �
cg c]  }
t9        |
«      ‘Œ c}
Ž t:        ¬«      ƒ d{  –—† }|D �ch c]  }|d   sŒ	|d   ’Œ }}|D �
cg c]  }
|
j                  |v sŒ|
‘Œ c}
|z   }|€|S tC        ||||«      ƒ d{  –—† S 7 �Œª7 �Œ“7 �ŒQc c}	w 7 �ŒÙc c}
w c c}
w c c}
w 7 Œx# t2        j<                  $ r@ t?        j@                  dt:        «       |D �
cg c]  }
|
j                  dddœ‘Œ nc c}
w }}
Y ŒÈw xY wc c}w c c}
w 7 Œ†# tD        $ r ‚ tF        $ r-}t?        jH                  d|«       tE        ddd|› �i¬«      ‚d}~ww xY w­w)aÝ  
    Example usage:
    ```
    curl -X GET "http://localhost:4000/v1/agents"       -H "Content-Type: application/json"       -H "Authorization: Bearer your-key"     ```

    Pass `?health_check=true` to filter out agents whose URL is unreachable:
    ```
    curl -X GET "http://localhost:4000/v1/agents?health_check=true"       -H "Content-Type: application/json"       -H "Authorization: Bearer your-key"     ```

    Pass `?query=<task>` to get the best matching agents ranked by semantic similarity:
    ```
    curl -X GET "http://localhost:4000/v1/agents?query=translate+a+PDF+document&top_k=5"       -H "Content-Type: application/json"       -H "Authorization: Bearer your-key"     ```

    Returns: List[AgentResponse]

    rQ   Nr   rS   ©rn   c              3   ób   •K  — | ]&  }‰j                  |j                  «      D ]  }|–— Œ Œ( y ­wrV   rW   rY   s      €r7   r]   zget_agents.<locals>.<genexpr>@  s=   øè ø€ ò %àØ 5× CÑ CÀEÇNÁNÓ Sò%ð ô ð%Øñ%ùr^   rH   r_   r`   c              3   ó0   •K  — | ]  }|‰v r‰|   –— Œ y ­wrV   re   )rZ   r\   Ú	spend_maps     €r7   r]   zget_agents.<locals>.<genexpr>K  s&   øè ø€ ò +à$Ø# yÑ0ð " (Õ+ñ+ùs   ƒÚ	is_publicr–   )r—   z4Agent health check gather timed out after %s secondsFzHealth check timed outr›   rŽ   zClitellm.proxy.agent_endpoints.get_agents(): Exception occurred - %srš   r…   zInternal server error: r?   )%r$   rf   rT   r!   rµ   rn   rg   Úagents_tablerj   rH   ÚspendrX   Úsumru   r~   r¶   Úpublic_agent_groupsÚ
isdisjointr†   r   r‡   Úvaluer�   rœ   rB   ÚasyncioÚwait_forÚgatherr¢   Ú)AGENT_HEALTH_CHECK_GATHER_TIMEOUT_SECONDSÚTimeoutErrorr   Úwarningr»   r   rž   Ú	exception)rÀ   rÁ   r¨   r©   r‚   Úreturned_agentsrn   ro   Ú	db_agentsÚar[   Úmatched_spendsÚis_adminÚagents_with_urlÚagents_without_urlÚhealth_resultsÚresultÚhealthy_idsÚerT   rË   s                      @@r7   Ú
get_agentsrå     sª  ùè ø€ ôd (Ð(9¸8Ó
D×DÐDåRðJ^Ü9JÐK\Ó9]×3]ˆõ 	=àÐ$Ü$ó %à,ô%ó  ˆIñ
 Ü)5°mÓ)D×)NÑ)NØ%¨¨iÐ'8Ð9ð *Oó *÷ $�	ð BKÖ#K¸A A§J¡J°·±Ñ$7Ò#K�	Ø,ò :�EÜ%*ó +à(=×(KÑ(KÈEÏNÉNÓ([ô+ó &�Nò
 &Ü&)¨.Ó&9˜�ð:ô -¨_¸mÓL×LÐLð %ò 	ˆEØ×#Ñ#Ð+Ø')�Ô$Ü07×0KÑ0KÐSWÐ0Wò 1Ø%×3Ñ3°E·N±NÓC×NÑNÌw×OjÑOjÓkð]ˆE× Ñ  Ò-ð	ð ×'Ñ'Ô+;×+GÑ+GÑGò QØ ×*Ñ*Ô.>×.JÑ.J×.PÑ.PÑPð 	ñ Ü<¸_ÓMˆOáØ9HÖ%w°ÈU×MdÑMdÒMjÐhj×LoÑLoÐpuÕLv¢eÐ%wˆOÐ%wØ5DÖ!w¨EÈU×MdÑMdÒMjÐhj×LoÑLoÐpuÕLv¢%Ð!wÐÐ!wðÜEL×EUÑEUÜ—N‘NÐQ`Ö$aÈÔ%<¸UÕ%CÒ$aÐbÜEôF÷ @�ð" DRÖ!g¸ÐU[Ð\eÓUf &¨Ó"4Ð!gˆKÐ!gØ2AÖc¨ÀUÇ^Á^ÐWbÒEbšuÒcÐfxÑxˆOàˆ=Ø"Ð"Ü*¨5°/À5ÐJ[Ó\×\Ð\ðS Eùð
 4^ùð$ûò $Lð Mûò& &xùÚ!wùò %bð@ùô ×'Ñ'ò Ü$×,Ñ,ØJÜ=ôð "1ö"ð ð	 %*§N¡NØ#(Ø!9óñ"ùò "�ò "ðüò "hùÚcð ]ùÜò ØÜò ^Ü×&Ñ&Ð'lÐnoÔpÜ¨°WÐ@WÐXYÐWZÐ>[Ð4\Ô]Ð]ûð^üs.  „N”J>•
N M ®K¯AM Á3KÁ4M Á<KÂ7M Ã!M Ã3KÃ4CM Ç$KÇ*KÇ.M Ç4$KÈKÈM È "K  ÉKÉK  É%KÉ&K  É*M É.
L6É9L6Ê M ÊL;ÊL;Ê	M Ê'NÊ(M Ê9M Ê:M Ê=NËM ËM ËM Ë
M ËK  Ë 1L3ÌL)Ì(L3Ì0M Ì2L3Ì3M ÍNÍ(M<Í<NÎN)rÍ   rS   c              ƒ   óœ  K  — t        |d«      ƒ d{  –—†  ddlm} t        |«       |€t	        dd¬«      ‚	 |j
                  xs d}t        j                  | j                  d	«      ¬
«      }|� t	        dd| j                  d	«      › d�¬«      ‚| j                  d«      }| }d}|�Ct        t        j                  «       «      }t        |||| j                  d	«      ¬«      }	i | ¥d|	i¥}t        j                  ||||¬«      ƒ d{  –—† }
|
j                  }|
j                  }	 t        j                   |
¬«       t#        j$                  d||«       |
S 7 �Œ@7 ŒO# t&        $ r#}t#        j(                  d|||«       Y d}~|
S d}~ww xY w# t        $ r ‚ t&        $ r1}t#        j*                  d|«       t	        dt        |«      ¬«      ‚d}~ww xY w­w)a´  
    Create a new agent

    Example Request:
    ```bash
    curl -X POST "http://localhost:4000/v1/agents" \
        -H "Authorization: Bearer <your_api_key>" \
        -H "Content-Type: application/json" \
        -d '{
            "agent_name": "my-custom-agent",
            "agent_card_params": {
                "protocolVersion": "1.0",
                "name": "Hello World Agent",
                "description": "Just a hello world agent",
                "url": "http://localhost:9999/",
                "version": "1.0.0",
                "defaultInputModes": ["text"],
                "defaultOutputModes": ["text"],
                "capabilities": {
                    "streaming": true
                },
                "skills": [
                    {
                        "id": "hello_world",
                        "name": "Returns hello world",
                        "description": "just returns hello world",
                        "tags": ["hello world"],
                        "examples": ["hi", "hello world"]
                    }
                ]
            },
            "litellm_params": {
                "make_public": true
            }
        }'
    ```
    rQ   Nr   rÈ   rš   úPrisma client not initializedr?   ÚunknownrG   rF   r=   úAgent with name z already existsrœ   ©rH   r1   rG   )r[   rn   Ú
created_byrH   ©Úagent_configz5Successfully registered agent '%s' (ID: %s) in memoryz4Failed to register agent '%s' (ID: %s) in memory: %szError adding agent to db: %s)r$   rµ   rn   rˆ   r   Úuser_idÚAGENT_REGISTRYÚget_agent_by_namerB   r5   ÚuuidÚuuid4rO   Úadd_agent_to_dbrG   rH   Úregister_agentr   Úinforž   rØ   rÙ   )rÀ   r1   r‚   rn   rë   Úexisting_agentr:   Úagent_to_createÚnew_agent_idÚmerged_cardrâ   rG   rH   Ú	reg_errorrä   s                  r7   Úcreate_agentrû   �  sæ  è ø€ ô` (Ð(9¸8Ó
D×DÐDå8ä&Ð'8Ô9àÐÜ¨Ð4SÔTÐTð9<à-×5Ñ5ÒB¸ˆ
ô !/× @Ñ @ÈGÏKÉKÐXdÓLeÔ fˆØÐ%ÜØØ)¨'¯+©+°lÓ*CÐ)DÀOÐTôð ð  'Ÿ{™{Ð+>Ó?ˆØ'.ˆØ#'ˆØÐ$ô œtŸz™z›|Ó,ˆLÜ!9ØØ%Ø)Ø"Ÿ;™; |Ó4ô	"ˆKð L ÐKÐ*=¸{ÑKˆOä,×<Ñ<Ø!Ø'Ø!Ø!ô	
÷ 
ˆð #×-Ñ-ˆ
Ø Ÿ/™/ˆð	Ü×)Ñ)°vÕ>Ü ×%Ñ%Ð&]Ð_iÐksÔtð ˆðy EùðR
ùô ò 	Ü ×(Ñ(ØFÈ
ÐT\Ð^g÷ð ð ˆûð	ûô ò ØÜò <Ü×&Ñ&Ð'EÀqÔIÜ¨´C¸³FÔ;Ð;ûð<üsu   ‚G’E“$G¸CF ÄEÄF Ä#-E ÅF ÅGÅF Å	FÅ E>Å8F Å=GÅ>FÆF ÆG	Æ,GÇG	Ç	Gz/v1/agents/{agent_id}c              ƒ   ó\  K  — t        |d«      ƒ d{  –—†  t        |«      s4ddlm} |j	                  | |¬«      ƒ d{  –—† }|st        dd| › d�¬	«      ‚dd
lm} |€t        dd¬	«      ‚	 t        j                  | ¬«      }|€pt        |«      j                  d| iddi¬«      ƒ d{  –—† }|�~|j                  «       }|j                  �	 |j                  j                  «       |d<   t!        di |¤Ž}n8t        |«      j                  d| i¬«      ƒ d{  –—† }|�|j"                  |_        |€t        dd| › d�¬	«      ‚t%        |g|«      ƒ d{  –—†  |j&                  t(        j*                  k(  xs' |j&                  t(        j*                  j,                  k(  }	|	st/        |g«      d   }|S 7 �Œ›7 �Œr7 �Œ# t        $ r  |j                  j                  «       |d<   Y Œöw xY w7 ŒÍ7 Œ”# t
        $ r ‚ t        $ r1}
t1        j2                  d|
«       t        dt5        |
«      ¬	«      ‚d}
~
ww xY w­w)zÙ
    Get a specific agent by ID

    Example Request:
    ```bash
    curl -X GET "http://localhost:4000/v1/agents/123e4567-e89b-12d3-a456-426614174000" \
        -H "Authorization: Bearer <your_api_key>"
    ```
    rQ   Nr   )ÚAgentRequestHandler)rH   r#   r„   zAgent 'zC' is not allowed for your key/team. Contact proxy admin for access.r?   rÈ   rš   rç   ©rH   rH   Úobject_permissionT)ra   Úincluder`   é”  úAgent with ID ú
 not foundzError getting agent from db: %sre   )r$   r   Ú;litellm.proxy.agent_endpoints.auth.agent_permission_handlerrý   Úis_agent_allowedr   rµ   rn   rï   Úget_agent_by_idrÍ   Úfind_uniqueÚ
model_dumprÿ   rž   Údictr+   rÎ   ru   r†   r   r‡   rÒ   r�   r   rÙ   r5   )rH   r‚   rý   Ú
is_allowedrn   r[   Ú	agent_rowÚ
agent_dictÚdb_rowrÞ   rä   s              r7   r  r    s\  è ø€ ô& (Ð(9¸8Ó
D×DÐDä&Ð'8Ô9õ	
ð /×?Ñ?ÈÐevÐ?Ów×wˆ
ÙÜØØ   
Ð*mÐnôð õ
 9àÐÜ¨Ð4SÔTÐTð'<Ü×.Ñ.¸ÔAˆØˆ=Ü%1°-Ó%@×%LÑ%LØ! 8Ð,Ø,¨dÐ3ð &Mó &÷  ˆIð Ð$Ø$-×$8Ñ$8Ó$:�
Ø×.Ñ.Ð:ð]Ø:C×:UÑ:U×:`Ñ:`Ó:b˜
Ð#6Ñ7ô &Ñ3¨
Ñ3‘ô #/¨}Ó"=×"IÑ"IÐQ[Ð]eÐPfÐ"IÓ"g×gˆFØÐ!Ø$Ÿl™l�”àˆ=Ü¨C¸.ÈÈ
ÐR\Ð8]Ô^Ð^ä$ e W¨mÓ<×<Ð<ð ×'Ñ'Ô+;×+GÑ+GÑGò QØ ×*Ñ*Ô.>×.JÑ.J×.PÑ.PÑPð 	ñ Ü2°E°7Ó;¸AÑ>ˆEàˆðk Eùð xùð úô %ò ]Ø:C×:UÑ:U×:ZÑ:ZÓ:\˜
Ð#6Ó7ð]úð
 høð 	=ùô ò ØÜò <Ü×&Ñ&Ð'HÈ!ÔLÜ¨´C¸³FÔ;Ð;ûð<üs˜   ‚H,’F-“+H,¾F0¿,H,Á,;G& Â'F3Â("G& ÃF6 Ã(,G& ÄG"Ä:G& ÅG$ÅAG& Æ,H,Æ0H,Æ3G& Æ6&GÇG& ÇGÇG& Ç$G& Ç&H)Ç8,H$È$H)È)H,c              ƒ   óf  K  — t        |d«      ƒ d{  –—†  ddlm} t        |«       |€%t	        dt
        j                  j                  ¬«      ‚	 t        |«      j                  d| i¬«      ƒ d{  –—† }|�t        |«      }|€t	        d	d
| › d�¬«      ‚|j                  xs d}|j                  d«      }|}|�&t        || ||j                  d«      ¬«      }	i |¥d|	i¥}t        j                  | |||¬«      ƒ d{  –—† }
t        j                   |j                  d«      ¬«       t        j"                  |
¬«       t%        j&                  d|j                  d«      | «       |
S 7 �ŒR7 Œö7 Œl# t        $ r ‚ t(        $ r1}t%        j*                  d|«       t	        dt-        |«      ¬«      ‚d}~ww xY w­w)a…  
    Update an existing agent

    Example Request:
    ```bash
    curl -X PUT "http://localhost:4000/v1/agents/123e4567-e89b-12d3-a456-426614174000" \
        -H "Authorization: Bearer <your_api_key>" \
        -H "Content-Type: application/json" \
        -d '{
            "agent_name": "updated-agent",
            "agent_card_params": {
                "protocolVersion": "1.0",
                "name": "Updated Agent",
                "description": "Updated description",
                "url": "http://localhost:9999/",
                "version": "1.1.0",
                "defaultInputModes": ["text"],
                "defaultOutputModes": ["text"],
                "capabilities": {
                    "streaming": true
                },
                "skills": []
            },
            "litellm_params": {
                "make_public": false
            }
        }'
    ```
    rQ   Nr   rÈ   rš   r?   rH   r`   r  r  r  rè   rœ   rG   rê   ©rH   r[   rn   Ú
updated_byrF   rì   ú2Successfully updated agent '%s' (ID: %s) in memoryúError updating agent: %s)r$   rµ   rn   rˆ   r   r   Údb_not_connected_errorrÒ   rÍ   r  r	  rî   rB   rO   rï   Úupdate_agent_in_dbÚderegister_agentrô   r   rõ   rž   rÙ   r5   )rH   rÀ   r1   r‚   rn   rö   r  r:   Úagent_to_updaterù   râ   rä   s               r7   Úupdate_agentr  U  sÀ  è ø€ ôR (Ð(9¸8Ó
D×DÐDå8ä&Ð'8Ô9àÐÜ¨Ô4E×4\Ñ4\×4bÑ4bÔcÐcð1<ä+¨MÓ:×FÑFÈjÐZbÐMcÐFÓd×dˆØÐ%Ü! .Ó1ˆNàÐ!Ü¨C¸.ÈÈ
ÐR\Ð8]Ô^Ð^ð .×5Ñ5ÒB¸ˆ
ð  'Ÿ{™{Ð+>Ó?ˆØ'.ˆØÐ$Ü!9ØØ!Ø)Ø"Ÿ;™; |Ó4ô	"ˆKð L ÐKÐ*=¸{ÑKˆOä,×?Ñ?ØØ!Ø'Ø!ô	
÷ 
ˆô 	×'Ñ'°>×3EÑ3EÀlÓ3SÕTä×%Ñ%°6Õ:ä×!Ñ!Ø@À.×BTÑBTÐUaÓBbÐdlô	
ð ˆðk Eùð eøð4
ùô" ò ØÜò <Ü×&Ñ&Ð'AÀ1ÔEÜ¨´C¸³FÔ;Ð;ûð<üóY   ‚F1’E$“<F1Á E+ Á0E'Á1BE+ Ã<E)Ã=A&E+ Å#F1Å'E+ Å)E+ Å+F.Å=,F)Æ)F.Æ.F1c              ƒ   óf  K  — t        |d«      ƒ d{  –—†  ddlm} t        |«       |€%t	        dt
        j                  j                  ¬«      ‚	 t        |«      j                  d| i¬«      ƒ d{  –—† }|�t        |«      }|€t	        d	d
| › d�¬«      ‚|j                  xs d}|}|j                  d«      }|�&t        || ||j                  d«      ¬«      }	i |¥d|	i¥}t        j                  | |||¬«      ƒ d{  –—† }
t        j                   |j                  d«      ¬«       t        j"                  |
¬«       t%        j&                  d|j                  d«      | «       |
S 7 �ŒR7 Œö7 Œl# t        $ r ‚ t(        $ r1}t%        j*                  d|«       t	        dt-        |«      ¬«      ‚d}~ww xY w­w)a‡  
    Update an existing agent

    Example Request:
    ```bash
    curl -X PATCH "http://localhost:4000/v1/agents/123e4567-e89b-12d3-a456-426614174000" \
        -H "Authorization: Bearer <your_api_key>" \
        -H "Content-Type: application/json" \
        -d '{
            "agent_name": "updated-agent",
            "agent_card_params": {
                "protocolVersion": "1.0",
                "name": "Updated Agent",
                "description": "Updated description",
                "url": "http://localhost:9999/",
                "version": "1.1.0",
                "defaultInputModes": ["text"],
                "defaultOutputModes": ["text"],
                "capabilities": {
                    "streaming": true
                },
                "skills": []
            },
            "litellm_params": {
                "make_public": false
            }
        }'
    ```
    rQ   Nr   rÈ   rš   r?   rH   r`   r  r  r  rè   rœ   rG   rê   r  rF   rì   r  r  )r$   rµ   rn   rˆ   r   r   r  rÒ   rÍ   r  r	  rî   rB   rO   rï   Úpatch_agent_in_dbr  rô   r   rõ   rž   rÙ   r5   )rH   rÀ   r1   r‚   rn   rö   r  Úpatch_payloadr:   rù   râ   rä   s               r7   Úpatch_agentr  »  sÀ  è ø€ ôR (Ð(9¸8Ó
D×DÐDå8ä&Ð'8Ô9àÐÜ¨Ô4E×4\Ñ4\×4bÑ4bÔcÐcð2<ä+¨MÓ:×FÑFÈjÐZbÐMcÐFÓd×dˆØÐ%Ü! .Ó1ˆNàÐ!Ü¨C¸.ÈÈ
ÐR\Ð8]Ô^Ð^ð .×5Ñ5ÒB¸ˆ
ð ,3ˆØ&Ÿ{™{Ð+>Ó?ˆØÐ$Ü!9ØØ!Ø)Ø"Ÿ;™; |Ó4ô	"ˆKð J˜wÐIÐ(;¸[ÑIˆMä,×>Ñ>ØØØ'Ø!ô	
÷ 
ˆô 	×'Ñ'°>×3EÑ3EÀlÓ3SÕTä×%Ñ%°6Õ:ä×!Ñ!Ø@À.×BTÑBTÐUaÓBbÐdlô	
ð ˆðm Eùð eøð6
ùô" ò ØÜò <Ü×&Ñ&Ð'AÀ1ÔEÜ¨´C¸³FÔ;Ð;ûð<ür  ÚAgents)r¼   r½   c              ƒ   óH  K  — t        |d«      ƒ d{  –—†  ddlm} t        |«       |€t	        dd¬«      ‚	 t        |«      j                  d| i¬	«      ƒ d{  –—† }|�t        t        t        f   |«      }|€t	        d
d| › d�¬«      ‚t        j                  | |¬«      ƒ d{  –—†  t        j                  |j                  d«      ¬«       dd| › d�iS 7 ŒÃ7 Œ7 Œ5# t        $ r ‚ t        $ r1}t        j                   d|«       t	        dt        |«      ¬«      ‚d}~ww xY w­w)a]  
    Delete an agent

    Example Request:
    ```bash
    curl -X DELETE "http://localhost:4000/v1/agents/123e4567-e89b-12d3-a456-426614174000" \
        -H "Authorization: Bearer <your_api_key>"
    ```

    Example Response:
    ```json
    {
        "message": "Agent 123e4567-e89b-12d3-a456-426614174000 deleted successfully"
    }
    ```
    rQ   Nr   rÈ   rš   rç   r?   rH   r`   r  r  z not found in DB.)rH   rn   rG   rF   r¥   zAgent z deleted successfullyzError deleting agent: %s)r$   rµ   rn   rˆ   r   rÍ   r  r	  r5   Úobjectrï   Údelete_agent_from_dbr  rB   rž   r   rÙ   )rH   r‚   rn   rö   rä   s        r7   Údelete_agentr!  "  s,  è ø€ ô2 (Ð(9¸8Ó
D×DÐDå8ä&Ð'8Ô9àÐÜ¨Ð4SÔTÐTð<ä+¨MÓ:×FÑFÈjÐZbÐMcÐFÓd×dˆØÐ%Ü!¤#¤v +Ñ.¨~Ó>ˆNàÐ!Ü¨C¸.ÈÈ
ÐRcÐ8dÔeÐeä×1Ñ1¸8ÐS`Ôa×aÐaä×'Ñ'°>×3EÑ3EÀlÓ3SÕTà˜V H :Ð-BÐCÐDÐDð- Eøð eøð 	bùô
 ò ØÜò <Ü×&Ñ&Ð'AÀ1ÔEÜ¨´C¸³FÔ;Ð;ûð<üsW   ‚D"’C“$D"¸ C ÁCÁAC Â$CÂ%0C ÃD"ÃC ÃC ÃDÃ.,DÄDÄD"z!/v1/agents/{agent_id}/make_publicc              ƒ   ó   K  — ddl m} |€%t        dt        j                  j
                  ¬«      ‚	 ddl}ddlm} ddl m	} |j                  t        j                  k7  rt        dd	d
|j                  › �i¬«      ‚ |j                  | ¬«      }|€St        |«      j                  d| i¬«      ƒ d{  –—† }|�t!        di |j#                  «       ¤Ž}|€t        dd| › d�¬«      ‚|j$                  €g |_         |j&                  |j(                  «      j+                  |j$                  «      st        dd|j,                  › d�¬«      ‚|j$                  j/                  |j(                  «       |j1                  «       ƒ d{  –—† }d|vs|d   €i |d<   |j$                  |d   d<   |j3                  |¬«      ƒ d{  –—†  t5        j6                  d|j$                  |j8                  «       d|j$                  |j8                  dœS 7 �ŒR7 Œ†7 ŒN# t        $ r ‚ t:        $ r1}t5        j<                  d|«       t        dt?        |«      ¬«      ‚d}~ww xY w­w)aÁ  
    Make an agent publicly discoverable

    Example Request:
    ```bash
    curl -X POST "http://localhost:4000/v1/agents/123e4567-e89b-12d3-a456-426614174000/make_public" \
        -H "Authorization: Bearer <your_api_key>" \
        -H "Content-Type: application/json"
    ```

    Example Response:
    ```json
    {
        "agent_id": "123e4567-e89b-12d3-a456-426614174000",
        "agent_name": "my-custom-agent",
        "litellm_params": {
            "make_public": true
        },
        "agent_card_params": {...},
        "created_at": "2025-11-15T10:30:00Z",
        "updated_at": "2025-11-15T10:35:00Z",
        "created_by": "user123",
        "updated_by": "user123"
    }
    ```
    r   rÈ   Nrš   r?   rS   ©Úproxy_configr„   r…   ú<Only proxy admins can update public model groups. Your role=rþ   rH   r`   r  r  r  r=   ré   z already in public agent groupsÚlitellm_settingsrÐ   ©Ú
new_configú.Updated public agent groups to: %s by user: %sú(Successfully updated public agent groups©r¥   rÐ   r  úError making agent public: %sre   ) rµ   rn   r   r   r  rÒ   r¶   rf   rT   r$  r†   r   r‡   r  rÍ   r  r+   r  rÐ   rX   rH   rÑ   rG   rl   Ú
get_configÚsave_configr   Údebugrî   rž   rÙ   r5   )	rH   r‚   rn   r¶   rï   r$  r[   Úconfigrä   s	            r7   Úmake_agent_publicr1  Y  s`  è ø€ õH 9àÐÜ¨Ô4E×4\Ñ4\×4bÑ4bÔcÐcð><ãõ	
õ 	<ð ×&Ñ&Ô*:×*FÑ*FÒFÜØàÐ[Ð\m×\wÑ\wÐ[xÐyðôð ð /�×.Ñ.¸ÔAˆØˆ=ä& }Ó5×AÑAÈÐU]ÐH^ÐAÓ_×_ˆEØÐ Ü%Ñ;¨×(8Ñ(8Ó(:Ñ;�àˆ}Ü#°¸nÈXÈJÐV`Ð<aÔbÐbà×&Ñ&Ð.Ø*,ˆGÔ'à+ˆ~×+Ñ+¨E¯N©NÓ;×FÑFÀw×GbÑGbÔcÜØØ)¨%×*:Ñ*:Ð);Ð;ZÐ[ôð ð 	×#Ñ#×*Ñ*¨5¯>©>Ô:ð +×5Ñ5Ó7×7ˆð  VÑ+¨vÐ6HÑ/IÐ/QØ)+ˆFÐ%Ñ&à<C×<WÑ<WˆÐ!Ñ"Ð#8Ñ9ð ×&Ñ&°&Ð&Ó9×9Ð9ä×"Ñ"Ø<¸g×>YÑ>YÐ[l×[tÑ[tô	
ð
 BØ#*×#>Ñ#>Ø+×3Ñ3ñ
ð 	
ðC `ùð$ 8øð 	:ùô ò ØÜò <Ü×&Ñ&Ð'FÈÔJÜ¨´C¸³FÔ;Ð;ûð<üsa   ‚.I±A>H Â/HÂ0CH Å=HÅ>9H Æ7HÆ8AH È IÈH ÈH ÈH ÈIÈ,IÉIÉIz/v1/agents/make_publicc              ƒ   óü  K  — ddl m} |€%t        dt        j                  j
                  ¬«      ‚	 ddl}ddlm} ddl m	} |j                  «       ƒ d{  –—† }|j                  t        j                  k7  rt        dd	d
|j                  › �i¬«      ‚|j                  €g |_        | j                  D ]k  } |j                   |¬«      }|�Œt#        |«      j%                  d|i¬«      ƒ d{  –—† }|�t'        di |j)                  «       ¤Ž}|�Œ\t        dd|› d�¬«      ‚ | j                  |_        d|vs|d   €i |d<   |j                  |d   d<   |j+                  |¬«      ƒ d{  –—†  t-        j.                  d|j                  |j0                  «       d|j                  |j0                  dœS 7 �Œ[7 ŒÇ7 ŒN# t        $ r ‚ t2        $ r1}	t-        j4                  d|	«       t        dt7        |	«      ¬«      ‚d}	~	ww xY w­w)a(  
    Make multiple agents publicly discoverable

    Example Request:
    ```bash
    curl -X POST "http://localhost:4000/v1/agents/make_public" \
        -H "Authorization: Bearer <your_api_key>" \
        -H "Content-Type: application/json" \
        -d '{
            "agent_ids": ["123e4567-e89b-12d3-a456-426614174000", "123e4567-e89b-12d3-a456-426614174001"]
        }'
    ```

    Example Response:
    ```json
    {
        "agent_id": "123e4567-e89b-12d3-a456-426614174000",
        "agent_name": "my-custom-agent",
        "litellm_params": {
            "make_public": true
        },
        "agent_card_params": {...},
        "created_at": "2025-11-15T10:30:00Z",
        "updated_at": "2025-11-15T10:35:00Z",
        "created_by": "user123",
        "updated_by": "user123"
    }
    ```
    r   rÈ   Nrš   r?   rS   r#  r„   r…   r%  rþ   rH   r`   r  r  r  r&  rÐ   r'  r)  r*  r+  r,  re   )rµ   rn   r   r   r  rÒ   r¶   rf   rT   r$  r-  r†   r   r‡   rÐ   ro   r  rÍ   r  r+   r  r.  r   r/  rî   rž   rÙ   r5   )
rÀ   r‚   rn   r¶   rï   r$  r0  rH   r[   rä   s
             r7   Úmake_agents_publicr3  Ã  s$  è ø€ õN 9àÐÜ¨Ô4E×4\Ñ4\×4bÑ4bÔcÐcð9<ãõ	
õ 	<ð +×5Ñ5Ó7×7ˆà×&Ñ&Ô*:×*FÑ*FÒFÜØàÐ[Ð\m×\wÑ\wÐ[xÐyðôð ð ×&Ñ&Ð.Ø*,ˆGÔ'à×)Ñ)ò 		gˆHØ2�N×2Ñ2¸HÔEˆEØ‰}ä*¨=Ó9×EÑEÈZÐYaÐLbÐEÓc×c�ØÐ$Ü)Ñ?¨E×,<Ñ,<Ó,>Ñ?�Eà‘=Ü'°CÀ.ÐQYÐPZÐZdÐ@eÔfÐfð		gð '.×&7Ñ&7ˆÔ#ð  VÑ+¨vÐ6HÑ/IÐ/QØ)+ˆFÐ%Ñ&à<C×<WÑ<WˆÐ!Ñ"Ð#8Ñ9ð ×&Ñ&°&Ð&Ó9×9Ð9ä×"Ñ"Ø<¸g×>YÑ>YÐ[l×[tÑ[tô	
ð
 BØ#*×#>Ñ#>Ø+×3Ñ3ñ
ð 	
ðO 8ùð" døð  	:ùô ò ØÜò <Ü×&Ñ&Ð'FÈÔJÜ¨´C¸³FÔ;Ð;ûð<üsm   ‚.G<±#F6 ÁF/ÁA4F6 Ã
 F6 Ã*F2Ã+!F6 ÄAF6 Å%F4Å&AF6 Æ.G<Æ/F6 Æ2F6 Æ4F6 Æ6G9Ç,G4Ç4G9Ç9G<z/agent/daily/activityzAgent Managementé
   ro   Ú
start_dateÚend_dateÚmodelÚapi_keyÚpageÚ	page_sizeÚexclude_agent_idsc	              ƒ   ó  K  — t        |d«      ƒ d{  –—†  ddlm}	 |	€'t        ddt        j
                  j                  i¬«      ‚| r| j                  d«      nd}
d}|r|r|j                  d«      nd}dd	lm	}m
}m} dd
lm} i } ||«      ság }|j                  |¬«      ƒ d{  –—† x|d˜x�\  } t        |«      }n^ |d˜ x�W\   |j                   �Jt#        |	«      j%                  d|j                   i¬«      ƒ d{  –—† }|D �cg c]  }|j&                  ‘Œ }}n |
r t)        |«      }|
D �cg c]	  }||v sŒ|‘Œ }
}nt        |«      }
|
s#t+        g t-        dddddddddd|dd¬«      ¬«      S |
rdt        |
«      i|d<   t#        |	«      j%                  |¬«      ƒ d{  –—† }|D �ci c]  }|j&                  d|j.                  i“Œ }}t1        |	dd|
||||||||¬«      ƒ d{  –—† S 7 �Œ×7 �ŒG7 Œñc c}w c c}w 7 Œ[c c}w 7 Œ­w)zJ
    Get daily activity for specific agents or all accessible agents.
    rQ   Nr   rÈ   rš   r…   r?   ú,)rý   ÚRestrictedAgentAccessÚUnrestrictedAgentAccess)Ú_user_has_admin_viewr"   re   rë   r`   g        F)Útotal_spendÚtotal_prompt_tokensÚtotal_completion_tokensÚtotal_tokensÚtotal_api_requestsÚtotal_successful_requestsÚtotal_failed_requestsÚtotal_cache_read_input_tokensÚ!total_cache_creation_input_tokensÚtotal_compression_saved_tokensr9  Útotal_pagesÚhas_more)ÚresultsÚmetadatar_   rH   rG   Úlitellm_dailyagentspend)rn   Ú
table_nameÚentity_id_fieldÚ	entity_idÚentity_metadata_fieldÚexclude_entity_idsr5  r6  r7  r8  r9  r:  )r$   rµ   rn   r   r   r  rÒ   Úsplitr  rý   r>  r?  Ú/litellm.proxy.management_endpoints.common_utilsr@  Úresolve_agent_accessÚlistrî   rÍ   rj   rH   Úsetr0   r/   rG   r%   )ro   r5  r6  r7  r8  r9  r:  r;  r‚   rn   Úagent_ids_listÚexclude_agent_ids_listrý   r>  r?  r@  Úwhere_conditionÚpermitted_agent_idsÚallowed_agent_idsÚowned_recordsrÜ   Úpermitted_agent_id_setÚaidÚagent_recordsr[   Úagent_metadatas                             r7   Úget_agent_daily_activityrd  +  sx  è ø€ ô( (Ð(9¸8Ó
D×DÐDå8àÐÜØØÔ.×EÑE×KÑKÐLô
ð 	
ñ
 .7�Y—_‘_ SÔ)¸D€NØ/3ÐÙÙARÐ!2×!8Ñ!8¸Ô!=ÐX\Ð÷ñ õ
 Uà02€OÙÐ 1Ô2Ø)+Ðð (×<Ñ<ÐO`Ð<Óa×aØ9Ð&×9Ü&*Ð+<Ó&=Ñ#ð :à(Õ*Ø$×,Ñ,Ð8Ü1=¸mÓ1L×1VÑ1VØ+Ð->×-FÑ-FÐGð 2Wó 2÷ ,�Mð @MÖ*M¸!¨1¯:«:Ð*MÐ'Ñ*Mð +ñ Ü,/Ð0CÓ,DÐ"Ø-;Ö] c¸sÐF\Ò?\šcÐ]ˆNÑ]ä!Ð"5Ó6ˆNñ Ü2ØÜ+Ø #Ø()Ø,-Ø!"Ø'(Ø./Ø*+Ø23Ø67Ø34ØØ !Ø"ôôð ñ& Ø'+¬T°.Ó-AÐ&Bˆ˜
Ñ#ä!-¨mÓ!<×!FÑ!FÈ_Ð!FÓ!]×]€MàFSö>Ø=Bˆ�‰˜ u×'7Ñ'7Ð8Ñ8ð>€Nð >ô $Ø#Ø,Ø"Ø Ø,Ø1ØØØØØØô÷ ð ða EùðF bùð
,úò +Nùò ^ð8 ^úò>ðús„   ‚H’G)“BHÂ%G,Â&AHÃ=G/Ã>HÄG1ÄHÄ.	G6Ä8G6Ä<A#HÆG;Æ HÆ( G=ÇHÇ$HÇ%HÇ,HÇ/HÇ1HÇ=H)oÚ__doc__rÓ   Úosrñ   Úcollections.abcr   r   Útypesr   Útypingr   r   r   r	   Úfastapir
   r   r   r   r   Útyping_extensionsr   r   r¶   Úlitellm._loggingr   Ú*litellm.litellm_core_utils.litellm_loggingr   Ú&litellm.llms.custom_httpx.http_handlerr   Úlitellm.proxy._typesr   r   r   r   Úlitellm.proxy.a2a.agent_cardr   r   r   Ú*litellm.proxy.agent_endpoints.agent_searchr   r   r   r   r   r    r  r!   Ú$litellm.proxy.auth.user_api_key_authr#   Ú%litellm.proxy.common_utils.rbac_utilsr$   Ú8litellm.proxy.management_endpoints.common_daily_activityr%   Úlitellm.proxy.utilsr&   Úlitellm.types.agentsr'   r(   r)   r*   r+   r,   r-   Úlitellm.types.llms.custom_httpr.   Ú>litellm.types.proxy.management_endpoints.common_daily_activityr/   r0   r5   r8   rE   r	  r  rO   rP   r’   ru   rX  r�   rˆ   ÚfloatÚenvironrB   rŠ   rÖ   r�   r¢   r¤   Úintr§   rg   r»   r“   rå   rf   rÍ   rT   rï   Úpostrû   r  Úputr  Úpatchr  Údeleter!  r1  r3  rd  re   r9   r7   ú<module>r€     s‰  ðòó Û 	Û ß -Ý "ß <Ó <ç EÕ Eß 0ã Ý 1Ý IÝ I÷ó ÷ñ ÷
÷ õ ZÝ BÝ OÝ WÝ .÷÷ ñ õ @÷ðB 'ð B¨có Bð


¨i¸$Ñ.>ð 

À4ó 

ð$ "òØ˜tÑ#ðð ðð ð	ð
 �d‘
ðð 
ˆ#ˆvˆ+Ñóñ. “€ˆÓ ð*¨°-Ñ)@ð *ÐTXó *ðBØ�]Ñ#ðà	ˆ-Ñóð.
¸.ð 
ÈTó 
ñ -2°"·*±*·.±.ÐAeÐglÓ2mÓ,nÐ " EÓ nÙ,1°"·*±*·.±.ÐAlÐntÓ2uÓ,vÐ )ô˜¨%õ ð
Øð
àó
ôD˜iô ð
A Sð A°ð A¸sð AÀ}ó Að
"Øð"Ø  Ñ/ð"Ø8;ð"ØP^ð"à
ˆ=˜#ÐÑó"ð2 ‡�ØØ
Ð	ÙÐ+Ó,Ð-Ø˜Ñ&ð	 ó ñ Øð Hôð 	ð 	#Ù(/Ð0AÓ(Bñ#z^Øðz^àðz^ð Øˆd‰
ÙØð ~ô	
ð	ñðz^ð ØÙ��sÐ(dÔeð	gñðz^ð" &ò#z^óðz^õ~õð
 ‡�ØØ
Ð	ÙÐ+Ó,Ð-Ø ð	 ó ñ )0Ð0AÓ(Bñl<Øðl<àðl<ð &òl<óðl<ð^ ‡�ØØ
Ð	ÙÐ+Ó,Ð-Ø ð	 ó ñ )0Ð0AÓ(BñG<ØðG<à%òG<óðG<ðT ‡�ØØ
Ð	ÙÐ+Ó,Ð-Ø ð	 ó ñ )0Ð0AÓ(Bñ	]<Øð]<àð]<ð ð]<ð &ò	]<óð]<ð@ ‡�ØØ
Ð	ÙÐ+Ó,Ð-Ø ð	 ó ñ )0Ð0AÓ(Bñ	^<Øð^<àð^<ð ð^<ð &ò	^<óð^<ðB ‡�ØØ
ˆÙÐ+Ó,Ð-ð ó ñ )0Ð0AÓ(Bñ/<Øð/<à%ò/<óð
/<ðd ‡�Ø'Ø
Ð	ÙÐ+Ó,Ð-Ø*ð	 ó ñ )0Ð0AÓ(Bña<Øða<à%òa<óða<ðH ‡�ØØ
Ð	ÙÐ+Ó,Ð-Ø*ð	 ó ñ )0Ð0AÓ(Bñ_<Ø$ð_<à%ò_<óð_<ðD ‡�ØØ
Ð	ÙÐ+Ó,Ð-Ø2ð	 ó ð !Ø!ØØØØØØ$(Ù(/Ð0AÓ(BñkØ�T‰zðkà�d‘
ðkð �D‰jðkð �‰:ð	kð
 �4‰Zðkð ðkð ðkð ˜T‘zðkð &òkóñkr9   