
    -`i                        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	Zd
edefdZ	 	 	 	 ddZ G d de          Z G d de          Z G d de          ZdS )    )ABCabstractmethod)AbstractAsyncContextManagerasynccontextmanager)TYPE_CHECKINGAny)ToolDescriptionToolNamespaceConfig)HarmonyBrowserToolHarmonyPythonToolTool)init_logger)ListToolsResult
server_urlc                   K   ddl m} ddlm}  ||           4 d {V 	 } || 4 d {V 	 }|                                 d {V }|                                 d {V }||fcd d d           d {V  cd d d           d {V  S # 1 d {V swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   ClientSession
sse_client)url)mcpr   mcp.client.sser   
initialize
list_tools)r   r   r   streamssessioninitialize_responselist_tools_responses          t/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/vllm/entrypoints/mcp/tool_server.pylist_server_and_toolsr       sV     !!!!!!)))))) 	
z"""8 8 8 8 8 8 8 8&-w8 8 8 8 8 8 8 8#*$+$6$6$8$8888888$+$6$6$8$8888888"$778 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8 8s4   B08B'B0
B	B0B	B00
B:=B:schemareturnc                     d| v r| d= d| v r| d         | d= d| v rd | d         D             }|| d<   | d= d| v r'd | d                                          D             | d<   | S )NtitledefaultanyOfc                 6    g | ]}|d          dk    |d          S )typenull ).0	type_dicts     r   
<listcomp>ztrim_schema.<locals>.<listcomp>*   s7     
 
 
 F** f***    r(   
propertiesc                 4    i | ]\  }}|t          |          S r*   )trim_schema)r+   kvs      r   
<dictcomp>ztrim_schema.<locals>.<dictcomp>2   s1      
  
  
"&!QA{1~~ 
  
  
r.   )items)r!   typess     r   r1   r1      s    &7OFvi089&

 
#G_
 
 

 v7Ov 
  
*0*>*D*D*F*F 
  
  
| Mr.   list_tools_resultr   c                 x    | j         D ]}t          |j                  |_        d | j         D             | _         | S )Nc                 >    g | ]}t          |j        d d          |S )include_in_promptT)getattrannotationsr+   tools     r   r-   z2post_process_tools_description.<locals>.<listcomp>A   s>       4#%8$??  r.   )toolsr1   inputSchema)r7   r>   s     r   post_process_tools_descriptionrA   8   sY     "' 9 9&t'788 %+   r.   c                       e Zd Zededefd            Ze	 d
dedee         dz  dedz  fd            Z	e	 d
dedede
eef         dz  dee         fd	            ZdS )
ToolServer	tool_namer"   c                     dS )zH
        Return True if the tool is supported, False otherwise.
        Nr*   selfrD   s     r   has_toolzToolServer.has_toolK   s	    
 	r.   Nallowed_toolsc                     dS )zy
        Return the tool description for the given tool name.
        If the tool is not supported, return None.
        Nr*   rG   rD   rI   s      r   get_tool_descriptionzToolServer.get_tool_descriptionR   s	     	r.   
session_idheadersc                     dS )z0
        Create a session for the tool.
        Nr*   rG   rD   rM   rN   s       r   new_sessionzToolServer.new_session\   s	     	r.   N)__name__
__module____qualname__r   strboolrH   listr
   rL   dictr   r   rQ   r*   r.   r   rC   rC   J   s        # $    ^ @D -1#Y-=	t	#   ^ PT *-8<S#X8M	$S	)   ^  r.   rC   c            
           e Zd Zd ZdefdZdefdZ	 ddedee         dz  d	edz  fd
Z	e
	 ddededeeef         dz  fd            ZdS )MCPToolServerc                 \    	 dd l }n# t          $ r t          d          d w xY wi | _        d S )Nr   zHmcp is not installed. Please run `pip install mcp` to use MCPToolServer.)r   ImportErrorharmony_tool_descriptions)rG   r   s     r   __init__zMCPToolServer.__init__g   sY    	JJJJ 	 	 	!  	
 *,&&&s    "r   c                 .  K   |                     d          }i | _        i | _        |D ]}d| d}t          |           d {V \  }}t	          |          }t          |j        j        |j        d |j	        D                       }|| j        |j        <   |j        | j        vr|| j        |j        <   t                              d|j        |           t                              dt          | j                                                             d S )N,zhttp://z/ssec                 Z    g | ](}t          j        |j        |j        |j                   )S ))namedescription
parameters)r	   newrc   rd   r@   r=   s     r   r-   z1MCPToolServer.add_tool_server.<locals>.<listcomp>~   sM         $'!Y$($4#'#3    r.   rc   rd   r?   z9Tool %s already exists. Ignoring duplicate tool server %sz(MCPToolServer initialized with tools: %s)splitr^   urlsr    rA   r
   
serverInforc   instructionsr?   loggerwarninginforX   keys)rG   r   	tool_urlsr   r   r   tool_from_mcps          r   add_tool_serverzMCPToolServer.add_tool_serverq   s]     $$S))	)+&$&	 	 	C%C%%%C=RSV=W=W7W7W7W7W7W7W4!4"@AT"U"U/(38/<  !4 9    M BOD*=+=>!2203	-,--O!&   
 	6/446677	
 	
 	
 	
 	
r.   rD   c                     || j         v S rR   )r^   rF   s     r   rH   zMCPToolServer.has_tool   s    D:::r.   Nserver_labelrI   r"   c                     | j                             |          }|d S |S fd|j        D             }|sd S t          |j        |j        |          S )Nc                 &    g | ]}|j         v |S r*   )rc   )r+   trI   s     r   r-   z6MCPToolServer.get_tool_description.<locals>.<listcomp>   s%    DDD!AFm,C,CA,C,C,Cr.   rg   )r^   getr?   r
   rc   rd   )rG   rt   rI   cfgfiltereds     `  r   rL   z"MCPToolServer.get_tool_description   s~    
 ,00>>;4  JDDDDsyDDD 	4"
 
 
 	
r.   rM   rN   c                  K   ddl m} ddlm} | j                            |          }d|i}||                    |           |st          d| d           |||          4 d {V 	 } || 4 d {V 	 }	|	                                 d {V  |	W V  d d d           d {V  n# 1 d {V swxY w Y   d d d           d {V  d S # 1 d {V swxY w Y   d S )Nr   r   r   zx-session-idTool '' is not supported)r   rN   )	r   r   r   r   ri   rx   updateKeyErrorr   )
rG   rD   rM   rN   r   r   r   request_headersr   r   s
             r   rQ   zMCPToolServer.new_session   sJ      	&%%%%%------immI&&):6""7+++ 	CAIAAABBBJ3888	 	 	 	 	 	 	 	<CM7#	 	 	 	 	 	 	 	'.$$&&&&&&&&&MMMM	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s6   -C: B,C,
B6	6C9B6	:C
CCrR   )rS   rT   rU   r_   rV   rr   rH   rX   r
   rL   r   rY   rQ   r*   r.   r   r[   r[   f   s        , , ,"
 "
 "
 "
 "
H;# ; ; ; ; +/
 

 Cy4'
 
t	#	
 
 
 
0 PT *-8<S#X8M     r.   r[   c            
           e Zd Zd Zd ZdedefdZ	 ddedee         dz  de	dz  fdZ
e	 dded	ed
eeef         dz  fd            ZdS )DemoToolServerc                     i | _         d S rR   r?   )rG   s    r   r_   zDemoToolServer.__init__   s    &(


r.   c                 8  K   t                      }t                      }|                                 d {V  |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enabledr?   rl   rn   rX   ro   )rG   browser_toolpython_tools      r   init_and_validatez DemoToolServer.init_and_validate   s      )++'))""$$$$$$$$$ 	1$0DJy! 	/#.DJx 7djoo>O>O9P9P	
 	
 	
 	
 	
r.   rD   r"   c                     || j         v S rR   r   rF   s     r   rH   zDemoToolServer.has_tool   s    DJ&&r.   NrI   c                     || j         vrd S |dk    rt          j                    S |dk    rt          j                    S t	          d|           )Nr   r   zUnknown tool )r?   r
   r   r   
ValueErrorrK   s      r   rL   z#DemoToolServer.get_tool_description   sa     DJ&&4	!!&.000(""&-///8Y88999r.   rM   rN   c                b   K   || j         vrt          d| d          | j         |         W V  d S )Nr|   r}   )r?   r   rP   s       r   rQ   zDemoToolServer.new_session   sK       DJ&&AIAAABBBj#######r.   rR   )rS   rT   rU   r_   r   rV   rW   rH   rX   r
   rL   r   rY   rQ   r*   r.   r   r   r      s        ) ) )

 

 

'# '$ ' ' ' ' AE
: 
:
:-1#Y-=
:	t	#
: 
: 
: 
: PT$ $$*-$8<S#X8M$ $ $ $ $ $r.   r   N)r7   r   r"   r   )abcr   r   
contextlibr   r   typingr   r   openai_harmonyr	   r
   vllm.entrypoints.mcp.toolr   r   r   vllm.loggerr   rS   rl   	mcp.typesr   rV   r    rY   r1   rA   rC   r[   r   r*   r.   r   <module>r      s   $ # # # # # # # G G G G G G G G % % % % % % % % ? ? ? ? ? ? ? ? Q Q Q Q Q Q Q Q Q Q # # # # # #	X		 *))))))
8C 
8 
8 
8 
8     2(   $       8\ \ \ \ \J \ \ \~%$ %$ %$ %$ %$Z %$ %$ %$ %$ %$r.   