o
    ưi\D                  	   @   s  d dl mZmZmZmZ d dlmZmZ d dlZer#d dl	m
Z eZneZdedefddZd	ed
efddZi 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,d-i d.d-d/d0d1d2d3d4d5d6d7d6d8d9d:d9d;d<d=d<d>d?d@d?dAdBdCdDdEdDdFdGdHdGi dIdJdKdLdMdNdOdNdPdQdRdSdTdSdUdVdWdVdXdVdYdZd[d\d]d\d^d_d`dadbd_ZG dcdd ddeZded
ee fdedfZded
dfdgdhZdediee djee dedk fdldmZdS )n    )TYPE_CHECKINGAnyLiteralOptional)HTTPExceptionstatusN)Routerdata
route_typec                    s\   |  d}tj   fdd| D }tjdi |}t|| di | }|  |S )z6Route a request using the user-provided router config.user_configc                    s   i | ]\}}| v r||qS  r   ).0kvZ
valid_argsr   V/home/app/Keep/.python/lib/python3.10/site-packages/litellm/proxy/route_llm_request.py
<dictcomp>   s    z._route_user_config_request.<locals>.<dictcomp>Nr   )poplitellmr   Zget_valid_argsitemsgetattrdiscard)r	   r
   Zrouter_configZfiltered_configZuser_routerZret_valr   r   r   _route_user_config_request   s   

r   
model_namereturnc                 C   s   t | to	| dS )z:Check if the model name is for an A2A agent (a2a/ prefix).za2a/)
isinstancestr
startswith)r   r   r   r   _is_a2a_agent_model   s   r   acompletionz/chat/completionsatext_completionz/completions
aembeddingz/embeddingsaimage_generationz/image/generationsaspeechz/audio/speechatranscriptionz/audio/transcriptionsamoderationz/moderationsarerankz/rerank
aresponsesz
/responses_aresponses_websocketalist_input_itemsz$/responses/{response_id}/input_itemsaimage_editz/images/editsacancel_responsesz/responses/{response_id}/cancelacompact_responsesz/responses/compactaocrz/ocrasearchz/searchavideo_generationz/videosavideo_listavideo_statusz/videos/{video_id}avideo_contentz/videos/{video_id}/contentavideo_remixz/videos/{video_id}/remixacreate_containerz/containersalist_containersaretrieve_containerz/containers/{container_id}adelete_containeraupload_container_filez /containers/{container_id}/filesalist_container_filesaretrieve_container_filez*/containers/{container_id}/files/{file_id}adelete_container_file aretrieve_container_file_contentz2/containers/{container_id}/files/{file_id}/contentacreate_skillz/skillsalist_skills
aget_skillz/skills/{skill_id}adelete_skillaingestz/rag/ingestacreate_interactionz/interactionsaget_interactionz/interactions/{interaction_id}adelete_interactionacancel_interactionz%/interactions/{interaction_id}/cancelacreate_evalz/evalsalist_evals	aget_evalz/evals/{eval_id}aupdate_evaladelete_evalacancel_evalz/evals/{eval_id}/cancelacreate_runz/evals/{eval_id}/runs
alist_runsaget_runz/evals/{eval_id}/runs/{run_id}acancel_runz%/evals/{eval_id}/runs/{run_id}/canceladelete_runc                       s&   e Zd Zdedef fddZ  ZS )ProxyModelNotFoundErrorrouter   c                    s*   d| d| di}t  jtj|d d S )Nerrorz%: Invalid model name passed in model=z:. Call `/v1/models` to view available models for your key.)status_codedetail)super__init__r   ZHTTP_400_BAD_REQUEST)selfrR   r   rU   	__class__r   r   rW   ^   s   z ProxyModelNotFoundError.__init__)__name__
__module____qualname__r   rW   __classcell__r   r   rY   r   rQ   ]   s    rQ   c                 C   s`   d| v r| d durd| d v r| d  dS d| v r.| d dur.d| d v r.| d  dS dS )zN
    Get the team id from the data's metadata or litellm_metadata params.
    metadataNZuser_api_key_team_idZlitellm_metadata)get)r	   r   r   r   get_team_id_from_datae   s   ra   c                 C   sp   z-ddl m} ddlm} |dur&|js&|| d< |dt| d W dS |d W dS  ty7   Y dS w )	z
    Add shared aiohttp session for connection reuse (prevents cold starts).
    Silently continues without session reuse if import fails or session is unavailable.

    Args:
        data: Dictionary to add the shared session to
    r   )verbose_proxy_logger)shared_aiohttp_sessionNZshared_sessionz?SESSION REUSE: Attached shared aiohttp session to request (ID: )z;SESSION REUSE: No shared session available for this request)Zlitellm._loggingrb   Zlitellm.proxy.proxy_serverrc   closedinfoid	Exception)r	   rb   rc   r   r   r   add_shared_session_to_datax   s   

ri   
llm_router
user_model)Dr   r    r!   r"   r#   r$   r%   r&   r'   aget_responsesadelete_responsesr+   r,   Zacreate_response_replyr)   Z
_arealtimer(   r*   agenerate_contentagenerate_content_streamallm_passthrough_routeavector_store_searchavector_store_createavector_store_file_createavector_store_file_listavector_store_file_retrieveavector_store_file_contentavector_store_file_updateavector_store_file_deleter-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   Zanthropic_messagesrB   rC   rD   rE   Zacancel_batchZafile_deleterF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   c                    s  t |  t| }|dur|jng }|dv r%d| v r%d| vr%| d| d< d| v s-d| v rG|dur<t|| d"i | S tt| d"i | S |dkr| dd	durd
| dd	v r|dur| ddrm|jd"i | S dd | dd
D }|j	d"d|i| S d| v rt
| |S d| v r| d}g d}|D ]}	|	|v r|	| vr||	 | |	< q|durt|| d"i | S tt| d"i | S |durF|dv r| d}
|
r
|r
z#|j|
d}|s|j|
d}|r|jr|jjdd}|r| | W n
 ty	   Y nw tt| d"i | S |dv r%t|| d"i | S |dv r5t|| d"i | S |dv rU| ddu sJ| dd	krUtt| d"i | S |durb|| d |nd}|durx|| d< t|| d"i | S | d |v s|| d rt|| d"i | S |jdur| d |jv rt|| d"i | S | d |vrE|jjrtt| d"i | S |jdust|jjdkrt|| d"i | S | d |jv rt|| d"i | ddiS |dv rt|| d"i | S |dv r*zt|| d"i | W S  ty)   tt| d"i |  Y S w t| dd	rEddlm} || |}|durE|S n |durVtt| d"i | S |d krftt| d"i | S t||}t|| dd	d!)#z,
    Common helper to route the request
    N)rn   ro   ZgenerationConfigconfigZapi_keyZapi_baser   model ,Zfastest_responseFc                 S   s   g | ]}|  qS r   )strip)r   rz   r   r   r   
<listcomp>   s    z!route_request.<locals>.<listcomp>modelsr   Zrouter_settings_override)Z	fallbacksZcontext_window_fallbacksZcontent_policy_fallbacksZnum_retriestimeoutZmodel_group_retry_policy)rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   rP   )Zmodel_id)Zmodel_group_nameT)Zexclude_none)	r4   r5   r6   r7   r8   r9   r:   r;   r<   )rB   rC   rD   rE   )r0   r1   r2   r3   rt   ru   rv   rx   r=   r>   r?   r@   rA   r   Zspecific_deployment)r%   rl   rm   r+   r)   rr   rq   rs   rt   ru   rv   rw   rx   r.   r4   r5   r6   r7   r8   r9   r:   r;   r<   )r1   r2   r3   )route_a2a_agent_requestrp   )rR   r   r   ) ri   ra   Zmodel_namesr   r   r   r`   Z"abatch_completion_fastest_responsesplitZabatch_completionr   Zget_deployment_credentialsZ"get_deployment_by_model_group_nameZlitellm_paramsZ
model_dumpupdaterh   Zmap_team_modelZhas_model_idZmodel_group_aliasZrouter_general_settingsZpass_through_all_modelsZdefault_deploymentlenZpattern_routerpatternsZdeployment_namesr   Z)litellm.proxy.agent_endpoints.a2a_routingr   ROUTE_ENDPOINT_MAPPINGrQ   )r	   rj   rk   r
   Zteam_idZrouter_model_namesr   Zoverride_settingsZper_request_settingskeyrz   Zdeployment_credsZ
deploymentZteam_model_namer   resultZ
route_namer   r   r   route_request   s   N










 









r   )typingr   r   r   r   Zfastapir   r   r   Zlitellm.routerr   Z_RouterZLitellmRouterdictr   r   boolr   r   rQ   ra   ri   r   r   r   r   r   <module>   s    	
 !"#$&'()+,-./023456: