o
    )i                     @   s   d dl mZmZ d dlmZmZ d dlmZmZm	Z	 d dl
mZmZ d dlmZmZmZ d dlmZ eeZer>d dlmZ defd	d
ZdedefddZ				dddZG dd deZG dd deZG dd deZdS )    )ABCabstractmethod)AbstractAsyncContextManagerasynccontextmanager)TYPE_CHECKINGAnyOptional)ToolDescriptionToolNamespaceConfig)HarmonyBrowserToolHarmonyPythonToolTool)init_logger)ListToolsResult
server_urlc              
      s   ddl m} ddlm} || d4 I d H F}|| 4 I d H '}| I d H }| I d H }||fW  d   I d H  W  d   I d H  S 1 I d H sLw   Y  W d   I d H  d S 1 I d H sbw   Y  d S )Nr   ClientSession
sse_clienturl)mcpr   mcp.client.sser   
initializeZ
list_tools)r   r   r   streamssessioninitialize_responselist_tools_response r   h/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/vllm/entrypoints/tool_server.pylist_server_and_tools   s   pr    schemareturnc                 C   sv   d| v r| d= d| v r| d d u r| d= d| v r(dd | d D }|| d< | d= d| v r9dd	 | d   D | d< | S )
NtitledefaultZanyOfc                 S   s    g | ]}|d  dkr|d  qS )typenullr   ).0Z	type_dictr   r   r   
<listcomp>(   s
    ztrim_schema.<locals>.<listcomp>r%   
propertiesc                 S   s   i | ]	\}}|t |qS r   )trim_schema)r'   kvr   r   r   
<dictcomp>/   s    ztrim_schema.<locals>.<dictcomp>)items)r!   typesr   r   r   r*      s   

r*   list_tools_resultr   c                 C   s.   | j D ]}t|j|_qdd | j D | _ | S )Nc                 S   s   g | ]}t |jd dr|qS )Zinclude_in_promptT)getattrannotationsr'   toolr   r   r   r(   >   s    z2post_process_tools_description.<locals>.<listcomp>)toolsr*   inputSchema)r0   r4   r   r   r   post_process_tools_description6   s   
r7   c                   @   sV   e Zd ZededefddZededee fddZ	edede
e fddZd	S )

ToolServer	tool_namer"   c                 C      dS )zH
        Return True if the tool is supported, False otherwise.
        Nr   selfr9   r   r   r   has_toolH      zToolServer.has_toolc                 C   r:   )zy
        Return the tool description for the given tool name.
        If the tool is not supported, return None.
        Nr   r;   r   r   r   get_tool_descriptionO   s   zToolServer.get_tool_descriptionc                 C   r:   )z0
        Create a session for the tool.
        Nr   r;   r   r   r   new_sessionX   r>   zToolServer.new_sessionN)__name__
__module____qualname__r   strboolr=   r   r
   r?   r   r   r@   r   r   r   r   r8   F   s    r8   c                   @   sP   e Zd Zdd ZdefddZdefddZdefd	d
ZedefddZ	dS )MCPToolServerc                 C   s0   zdd l }W n ty   tdd w i | _d S )Nr   zHmcp is not installed. Please run `pip install mcp` to use MCPToolServer.)r   ImportErrorharmony_tool_descriptions)r<   r   r   r   r   __init__b   s   
zMCPToolServer.__init__r   c                    s   | d}i | _i | _|D ]@}d| d}t|I d H \}}t|}t|jj|jdd |j	D d}|| j|j< |j| jvrF|| j|j< qt
d|j| qt
dt| j  d S )	N,zhttp://z/ssec                 S   s"   g | ]}t j|j|j|jd qS ))namedescription
parameters)r	   newrK   rL   r6   r3   r   r   r   r(   z   s    z1MCPToolServer.add_tool_server.<locals>.<listcomp>)rK   rL   r5   z9Tool %s already exists. Ignoring duplicate tool server %sz(MCPToolServer initialized with tools: %s)splitrH   urlsr    r7   r
   Z
serverInforK   Zinstructionsr5   loggerwarninginfolistkeys)r<   r   Z	tool_urlsr   r   r   Ztool_from_mcpr   r   r   add_tool_serverk   s8   
	zMCPToolServer.add_tool_serverr9   c                 C   
   || j v S N)rH   r;   r   r   r   r=         
zMCPToolServer.has_toolc                 C   s   | j |S rX   )rH   getr;   r   r   r   r?      s   z"MCPToolServer.get_tool_descriptionc              
   C  s   ddl m} ddlm} | j|}|std| d||d4 I d H 4}|| 4 I d H }| I d H  |V  W d   I d H  n1 I d H sJw   Y  W d   I d H  d S 1 I d H s`w   Y  d S )Nr   r   r   Tool '' is not supportedr   )r   r   r   r   rP   rZ   KeyErrorr   )r<   r9   r   r   r   r   r   r   r   r   r@      s   XzMCPToolServer.new_sessionN)
rA   rB   rC   rI   rD   rV   r=   r?   r   r@   r   r   r   r   rF   `   s    	rF   c                   @   sN   e Zd Zdd ZdedefddZdedee fddZ	e
defd	d
ZdS )DemoToolServerc                 C   sL   i | _ t }|jr|| j d< t }|jr|| j d< tdt| j   d S )Nbrowserpythonz)DemoToolServer initialized with tools: %s)r5   r   enabledr   rQ   rS   rT   rU   )r<   Zbrowser_toolZpython_toolr   r   r   rI      s   

zDemoToolServer.__init__r9   r"   c                 C   rW   rX   )r5   r;   r   r   r   r=      rY   zDemoToolServer.has_toolc                 C   s<   || j vrd S |dkrt S |dkrt S td| )Nr_   r`   zUnknown tool )r5   r
   r_   r`   
ValueErrorr;   r   r   r   r?      s   
z#DemoToolServer.get_tool_descriptionc                 C  s,   || j vrtd| d| j | V  d S )Nr[   r\   )r5   r]   r;   r   r   r   r@      s   
zDemoToolServer.new_sessionN)rA   rB   rC   rI   rD   rE   r=   r   r
   r?   r   r@   r   r   r   r   r^      s    
r^   N)r0   r   r"   r   )abcr   r   
contextlibr   r   typingr   r   r   Zopenai_harmonyr	   r
   Zvllm.entrypoints.toolr   r   r   Zvllm.loggerr   rA   rQ   Z	mcp.typesr   rD   r    dictr*   r7   r8   rF   r^   r   r   r   r   <module>   s&   
=