o
    ưi6                     @   s  U d dl Z d dlZd dlZd dlmZ d dlmZmZmZ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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 d dlmZ d dl m!Z!m"Z"m#Z#m$Z$ d dl%m&Z& e 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(d)dd*d+d,dd-d.d/dd0d1d2dd3d4d5dd6d7d8dd9d:d;dd<d=d>dd?d@dAdi dBdCdDddEdFdGddHdIdJddKdLdMddNdOdPddQdRdSddTdUdVddWdXdYddZd[d\dd]d^d_dd`dadbddcdddeddfdgdhddidjdkddldmdnddodpdqddrdsdtddudvdwdiZ(ee)ee)e)f f e*dx< e+dyZ,da-e	e$ e*dz< d{e)d|e)fd}d~Z.d{ee)ef d|eee)ef  fddZ/d|eee)ef  fddZ0e'j1dddgeegee ddd Z2e'j1dddgeegee ddd Z3e'j1dddgeegee ddd Z4e'j1dddge#ddd Z5e'j1dddgee) dd|ee) fddZ6e'j1dddgee" dd|ee" fddZ7e'j1dddgddd Z8e'j1ddgeddd Z9e'j1ddge$dd|e$fddZ:e'j1dddgee! dd|ee! fddZ;dS )    N)files)AnyDictListOptional)	APIRouterDependsHTTPException)verbose_logger)BlogPostBlogPostsResponseGetBlogPostsget_blog_posts)CommonProxyErrors)user_api_key_auth)	AgentCard)MCPPublicServer)ModelGroupInfoProxy)AgentCreateInfoProviderCreateInfoPublicModelHubInfoSupportedEndpointsResponse)LlmProvidersZchat_completionszChat Completionsz/chat/completions)labelendpointmessagesZMessagesz	/messages	responsesZ	Responsesz
/responsesZ
embeddingsZ
Embeddingsz/embeddingsZimage_generationszImage Generationsz/images/generationsZaudio_transcriptionszAudio Transcriptionsz/audio/transcriptionsZaudio_speechzAudio Speechz/audio/speechZmoderationsZModerationsz/moderationsZbatchesZBatchesz/batchesZrerankZRerankz/rerankZocrZOCRz/ocrsearchZSearchz/searchZskillsZSkillsz/skillsZinteractionsZInteractionsz/interactionsZa2azA2A (Agent Gateway)z/a2a/{agent}/message/send	containerZ
Containersz/containersZcontainer_fileszContainer Filesz/containers/{id}/filescompactZCompactz/responses/compactr   ZFilesz/filesZimage_editszImage Editsz/images/editsZvector_stores_createzVector Stores (Create)z/vector_storesZvector_stores_searchzVector Stores (Search)z/vector_stores/{id}/searchZvector_store_fileszVector Store Filesz/vector_stores/{id}/filesZvideo_generationszVideo Generationsz/videos/generationsZ
assistantsZ
Assistantsz/assistantsZfine_tuningzFine Tuningz/fine_tuning/jobsZtext_completionzText Completionz/completionsZrealtimeZRealtimez	/realtimeZcount_tokenszCount Tokensz/utils/token_counterZimage_variationszImage Variationsz/images/variationsZgenerateContentzGenerate Contentz/generateContentZbedrock_invokezBedrock Invokez/bedrock/invokeZbedrock_conversezBedrock Conversez/bedrock/converseZ
rag_ingestz
RAG Ingestz/rag/ingestZ	rag_queryz	RAG Queryz
/rag/query_ENDPOINT_METADATAz\s*\(`[^`]+`\)\s*$_cached_endpointsrawreturnc                 C   s   t d|  S )N )_SLUG_SUFFIX_REsubstripr"    r)   f/home/app/Keep/.python/lib/python3.10/site-packages/litellm/proxy/public_endpoints/public_endpoints.py_clean_display_nameR   s   r+   c           
         s   |  di }t }g }| D ]}| di D ]  |vr'|  |  qqg }|D ]8 t  }|r:|d n dd }|rH|d nd dd } fdd	| D }	| |||	d
 q-|S )zMTransform raw provider_endpoints_support_backup.json into the response shape.	providers	endpointsr   _ r   /c                    s8   g | ]\}}| d i   r|t| d|dqS )r-   display_name)slugr1   )getr+   ).0r2   pdkeyr)   r*   
<listcomp>i   s    z$_build_endpoints.<locals>.<listcomp>)r7   r   r   r,   )	r3   setvaluesaddappendr    replacetitleitems)
r"   r,   seenall_keysZprovider_dataresultmetar   pathZ
supportingr)   r6   r*   _build_endpointsV   s(   



rE   c                  C   s$   t tddjdd} t| S )Nlitellmz&provider_endpoints_support_backup.jsonzutf-8)encoding)jsonloadsr   joinpath	read_textrE   r(   r)   r)   r*   _load_endpointsv   s   rL   z/public/model_hubpubliczmodel management)tagsdependenciesresponse_modelc                     s  dd l } ddlm}m}m} ddlm} |d u r!tdtj	j
dg }| jd ur0||| jd d}i }|d uriz)| I d H }|D ]}|jrH|jn|j}	|	r]||}
|
||	< |jr]|
||j< q@W n	 tyh   Y nw |D ]}||j}|r|d|_|d|_|d	|_qk|S )
Nr   )_get_model_group_info
llm_routerprisma_client)_convert_health_check_to_dicti  status_codedetail)rR   Zall_models_strmodel_groupstatusZresponse_time_msZ
checked_at)rF   litellm.proxy.proxy_serverrQ   rR   rS   Z0litellm.proxy.health_endpoints._health_endpointsrT   r	   r   Zno_llm_routervalueZpublic_model_groupsZget_all_latest_health_checksZmodel_idZ
model_name	Exceptionr3   rX   Zhealth_statusZhealth_response_timeZhealth_checked_at)rF   rQ   rR   rS   rT   Zmodel_groupsZhealth_checks_mapZlatest_checkscheckr7   Zhealth_check_dictrX   Zhealth_infor)   r)   r*   public_model_hub   sN   

r^   z/public/agent_hubz[beta] Agentsc                     sB   dd l  ddlm}  |  } jd u rg S  fdd|D }|S )Nr   )global_agent_registryc                    s   g | ]}|j  jv r|jqS r)   )Zagent_idpublic_agent_groupsZagent_card_params)r4   agentrF   r)   r*   r8      s
    zget_agents.<locals>.<listcomp>)rF   Z,litellm.proxy.agent_endpoints.agent_registryr_   Zget_public_agent_listr`   )r_   ZagentsZagent_card_listr)   rb   r*   
get_agents   s   

rc   z/public/mcp_hubz
[beta] MCPc                     s$   ddl m}  |  }dd |D S )Nr   )global_mcp_server_managerc                 S   s   g | ]}t d i | qS r)   )r   Z
model_dump)r4   serverr)   r)   r*   r8      s    z#get_mcp_servers.<locals>.<listcomp>)Z9litellm.proxy._experimental.mcp_server.mcp_server_managerrd   Zget_public_mcp_servers)rd   Zpublic_mcp_serversr)   r)   r*   get_mcp_servers   s   rg   z/public/model_hub/info)rN   rP   c                     s\   dd l } ddlm}m} zddlm} | }W n ty$   d }Y nw t|||| j	dS )Nr   )_titleversion)EnterpriseProxyConfig)Z
docs_titlecustom_docs_descriptionZlitellm_versionZuseful_links)
rF   rZ   rh   ri   Z%litellm_enterprise.proxy.proxy_serverrj   Zget_custom_docs_descriptionr\   r   Zpublic_model_groups_links)rF   rh   ri   rj   rk   r)   r)   r*   public_model_hub_info   s   rl   z/public/providersr,   c                      s   t dd tD S )zE
    Return a sorted list of all providers supported by LiteLLM.
    c                 s   s    | ]}|j V  qd S )N)r[   )r4   providerr)   r)   r*   	<genexpr>   s    z*get_supported_providers.<locals>.<genexpr>)sortedr   r)   r)   r)   r*   get_supported_providers   s   
rp   z/public/providers/fieldsc               	      sf   t jt jt jt jtddd} t| d}t|}W d   |S 1 s,w   Y  |S )zO
    Return provider metadata required by the dashboard create-model flow.
    proxypublic_endpointsprovider_create_fields.jsonrN)osrD   joindirname__file__openrH   load)provider_create_fields_pathfprovider_create_fieldsr)   r)   r*   get_provider_fields  s   

r~   z/public/litellm_model_cost_map)rN   c               
      sH   ddl } z| j}|W S  ty# } ztddt| ddd}~ww )zv
    Public endpoint to get the LiteLLM model cost map.
    Returns pricing information for all supported models.
    r   Ni  zInternal Server Error ()rU   )rF   Z
model_costr\   r	   str)rF   Z_model_cost_maper)   r)   r*   get_litellm_model_cost_map  s   	r   z/public/litellm_blog_postsc               
      sp   zt tjd} W n ty' } ztdt| t } W Y d}~nd}~ww dd | dd D }t	|dS )z
    Public endpoint to get the latest LiteLLM blog posts.

    Fetches from GitHub with a 1-hour in-process cache.
    Falls back to the bundled local backup on any failure.
    )urlz?LiteLLM: get_litellm_blog_posts endpoint fallback triggered: %sNc                 S   s   g | ]	}t d i |qS re   )r   r4   pr)   r)   r*   r8   B  s    z*get_litellm_blog_posts.<locals>.<listcomp>   )posts)
r   rF   Zblog_posts_urlr\   r
   warningr   r   Zload_local_blog_postsr   )Z
posts_datar   r   r)   r)   r*   get_litellm_blog_posts.  s   
r   z/public/endpointsc                      s   t du rtt da t S )z
    Return the list of LiteLLM proxy endpoints and which providers support each one.

    Reads from the bundled local backup file. Result is cached in-process for
    the lifetime of the server process.
    N)r-   )r!   r   rL   r)   r)   r)   r*   get_supported_endpointsF  s   r   z/public/agents/fieldsc               	      s8  t jt jt jt jtdd} t j| d}t j| d}t|d}t|}W d   n1 s8w   Y  t|d}t|}W d   n1 sRw   Y  dd |D }|D ]9}|d	}|r||v r|| }	g }
|	d
g D ]}|	 }d|d< |

| qy|d
g |
 |d
< |d	d q`|S )z
    Return agent type metadata required by the dashboard create-agent flow.

    If an agent has `inherit_credentials_from_provider`, the provider's credential
    fields are automatically appended to the agent's credential_fields.
    rq   rr   zagent_create_fields.jsonrs   rt   Nc                 S   s   i | ]}|d  |qS )rm   r)   r   r)   r)   r*   
<dictcomp>t  s    z$get_agent_fields.<locals>.<dictcomp>Z!inherit_credentials_from_providerZcredential_fieldsTZinclude_in_litellm_params)ru   rD   rv   rw   rx   ry   rH   rz   r3   copyr<   pop)	base_pathZagent_create_fields_pathr{   r|   Zagent_create_fieldsr}   Zprovider_mapra   Zinherit_fromrm   Zinherited_fieldsfieldZ
field_copyr)   r)   r*   get_agent_fieldsX  s6   
r   )<rH   ru   reimportlib.resourcesr   typingr   r   r   r   rF   Zfastapir   r   r	   Zlitellm._loggingr
   Z)litellm.litellm_core_utils.get_blog_postsr   r   r   r   Zlitellm.proxy._typesr   Z$litellm.proxy.auth.user_api_key_authr   Zlitellm.types.agentsr   Zlitellm.types.mcpr   ZClitellm.types.proxy.management_endpoints.model_management_endpointsr   Z5litellm.types.proxy.public_endpoints.public_endpointsr   r   r   r   Zlitellm.types.utilsr   Zrouterr    r   __annotations__compiler%   r!   r+   rE   rL   r3   r^   rc   rg   rl   rp   r~   r   r   r   r   r)   r)   r)   r*   <module>   s6  
 








	























 
!
"
#
&& 
+




