o
    -i                     @   s   d dl mZmZ d dlmZmZ 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 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)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   
initialize
list_tools)r   r   r   streamssessioninitialize_responselist_tools_response r   ]/home/ubuntu/veenaModal/venv/lib/python3.10/site-packages/vllm/entrypoints/mcp/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defaultanyOfc                 S   s    g | ]}|d  dkr|d  qS )typenullr   ).0	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>2   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 )include_in_promptT)getattrannotationsr'   toolr   r   r   r)   A   s    z2post_process_tools_description.<locals>.<listcomp>)toolsr+   inputSchema)r1   r6   r   r   r   post_process_tools_description8   s   
r9   c                   @   s~   e Zd ZededefddZe	ddedee dB dedB fddZ	e	dded	ed
e
eef dB 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   selfr;   r   r   r   has_toolK   s   zToolServer.has_toolNallowed_toolsc                 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   r   r   get_tool_descriptionR   s   zToolServer.get_tool_description
session_idheadersc                 C   r<   )z0
        Create a session for the tool.
        Nr   r>   r;   rC   rD   r   r   r   new_session\   s   zToolServer.new_sessionN)__name__
__module____qualname__r   strboolr?   listr	   rB   dictr   r   rF   r   r   r   r   r:   J   s.    
	r:   c                
   @   s   e Zd Zdd ZdefddZdefddZ		dd
edee d	B ded	B fddZ	e
		ddededeeef d	B 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__g   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   newrT   rU   r8   r5   r   r   r   r)   ~   s    z1MCPToolServer.add_tool_server.<locals>.<listcomp>rT   rU   r7   z9Tool %s already exists. Ignoring duplicate tool server %sz(MCPToolServer initialized with tools: %s)splitrQ   urlsr   r9   r	   
serverInforT   instructionsr7   loggerwarninginforM   keys)r>   r   	tool_urlsr   r   r   tool_from_mcpr   r   r   add_tool_serverq   s6   
zMCPToolServer.add_tool_serverr;   c                 C   
   || j v S rG   )rQ   r=   r   r   r   r?         
zMCPToolServer.has_toolNserver_labelr@   r!   c                    sR   | j |}|d u rd S  d u r|S  fdd|jD }|s d S t|j|j|dS )Nc                    s   g | ]	}|j  v r|qS r   )rT   )r'   tr@   r   r   r)      s    z6MCPToolServer.get_tool_description.<locals>.<listcomp>rX   )rQ   getr7   r	   rT   rU   )r>   rf   r@   cfgfilteredr   rh   r   rB      s   z"MCPToolServer.get_tool_descriptionrC   rD   c           
   
   C  s   ddl m} ddlm} | j|}d|i}|d ur || |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 sXw   Y  W d   I d H  d S 1 I d H snw   Y  d S )Nr   r   r   zx-session-idTool '' is not supported)r   rD   )	r   r   r   r   rZ   ri   updateKeyErrorr   )
r>   r;   rC   rD   r   r   r   request_headersr   r   r   r   r   rF      s$   



XzMCPToolServer.new_sessionrG   )rH   rI   rJ   rR   rK   rc   r?   rM   r	   rB   r   rN   rF   r   r   r   r   rO   f   s*    
$

rO   c                
   @   s~   e Zd Zdd Zdd ZdedefddZ		dded
ee d	B de	d	B fddZ
e		ddededeeef d	B fddZd	S )DemoToolServerc                 C   s
   i | _ d S rG   r7   )r>   r   r   r   rR      re   zDemoToolServer.__init__c                    sV   t  }t }| I d H  |jr|| jd< |jr|| jd< tdt| j  d S )Nbrowserpythonz)DemoToolServer initialized with tools: %s)	r
   r   validateenabledr7   r]   r_   rM   r`   )r>   browser_toolpython_toolr   r   r   init_and_validate   s   

z DemoToolServer.init_and_validater;   r!   c                 C   rd   rG   rr   r=   r   r   r   r?      re   zDemoToolServer.has_toolNr@   c                 C   s<   || j vrd S |dkrt S |dkrt S td| )Nrs   rt   zUnknown tool )r7   r	   rs   rt   
ValueErrorrA   r   r   r   rB      s   
z#DemoToolServer.get_tool_descriptionrC   rD   c                 C  s,   || j vrtd| d| j | V  d S )Nrl   rm   )r7   ro   rE   r   r   r   rF      s   
zDemoToolServer.new_sessionrG   )rH   rI   rJ   rR   ry   rK   rL   r?   rM   r	   rB   r   rN   rF   r   r   r   r   rq      s*    

rq   N)r1   r   r!   r   )abcr   r   
contextlibr   r   typingr   r   openai_harmonyr   r	   vllm.entrypoints.mcp.toolr
   r   r   vllm.loggerr   rH   r]   	mcp.typesr   rK   r   rN   r+   r9   r:   rO   rq   r   r   r   r   <module>   s&   
_