
    .hp                         d dl Z d dlZd dlmZmZ d dlmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ dd	lmZmZ dd
lmZmZmZ erd dlmZ ddlmZ  G d d          ZdS )    N)TYPE_CHECKINGAny)ensure_strict_json_schema   )_debug)AgentsExceptionModelBehaviorError	UserError)logger)RunContextWrapper)FunctionToolTool)FunctionSpanDataget_current_spanmcp_tools_span)r      )	MCPServerc                       e Zd ZdZeded         dedee         fd            Zedddedee         fd            Z	ed	d
dddede
fd            Zeddd	d
dee         dedef
d            ZdS )MCPUtilz>Set of utilities for interop between MCP and Agents SDK tools.serversr   convert_schemas_to_strictreturnc                 .  K   g }t                      }|D ]}|                     ||           d{V }d |D             }t          ||z            dk    rt          d||z             |                    |           |                    |           |S )z2Get all function tools from a list of MCP servers.Nc                     h | ]	}|j         
S  name.0tools     L/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/agents/mcp/util.py	<setcomp>z1MCPUtil.get_all_function_tools.<locals>.<setcomp>    s     D D Dt D D D    r   z/Duplicate tool names found across MCP servers: )setget_function_toolslenr
   updateextend)clsr   r   tools
tool_namesserverserver_toolsserver_tool_namess           r!   get_all_function_toolszMCPUtil.get_all_function_tools   s      
 "uu
 		' 		'F!$!7!7@Y!Z!ZZZZZZZL D D| D D D$z122Q668(:58 8   /000LL&&&&r#   r,   c                     K   t          j                  5 }                                 d{V }d |D             |j        _        ddd           n# 1 swxY w Y    fd|D             S )z0Get all function tools from a single MCP server.)r,   Nc                     g | ]	}|j         
S r   r   r   s     r!   
<listcomp>z.MCPUtil.get_function_tools.<locals>.<listcomp>3   s    $A$A$A4TY$A$A$Ar#   c                 >    g | ]}                     |          S r   )to_function_tool)r   r    r)   r   r,   s     r!   r2   z.MCPUtil.get_function_tools.<locals>.<listcomp>5   s-    ```RV$$T63LMM```r#   )r   r   
list_tools	span_dataresult)r)   r,   r   spanr*   s   ```  r!   r%   zMCPUtil.get_function_tools+   s       6;/// 	B4 ++--------E$A$A5$A$A$ADN!	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B 	B a`````Z_````s   1AAAr    MCPToolc                 "   t          j        | j        ||          }|j        d}}d|vri |d<   |rA	 t	          |          }d}n.# t
          $ r!}t          j        d|            Y d}~nd}~ww xY wt          |j	        |j
        pd|||          S )z3Convert an MCP tool to an Agents SDK function tool.F
propertiesTz,Error converting MCP schema to strict mode: N )r   descriptionparams_json_schemaon_invoke_toolstrict_json_schema)	functoolspartialinvoke_mcp_toolinputSchemar   	Exceptionr   infor   r   r=   )r)   r    r,   r   invoke_funcschema	is_strictes           r!   r4   zMCPUtil.to_function_tool7   s    
  '(;VTJJ ,e	 v%%#%F< $ 	PP26:: 		 P P PN1NNOOOOOOOOP (.B%&(
 
 
 	
s   A 
A.A))A.context
input_jsonc                   K   	 |rt          j        |          ni }nu# t          $ rh}t          j        rt          j        d|j                    nt          j        d|j         d|            t          d|j         d|           |d}~ww xY wt          j        rt          j        d|j                    nt          j        d|j         d|            	 |	                    |j        |           d{V }nL# t          $ r?}t          j
        d|j         d|            t          d|j         d|           |d}~ww xY wt          j        rt          j        d|j         d           nt          j        d|j         d	|            t          |j                  d
k    r |j        d                                         }nUt          |j                  d
k    r$t          j        d |j        D                       }nt          j
        d|            d}t!                      }	|	rQt#          |	j        t&                    r ||	j        _        d|j        i|	j        _        nt          j        d|	            |S )z5Invoke an MCP tool and return the result as a string.zInvalid JSON input for tool z: NzInvoking MCP tool z with input zError invoking MCP tool z	MCP tool z completed.z
 returned r   r   c                 6    g | ]}|                                 S r   )
model_dump)r   items     r!   r2   z+MCPUtil.invoke_mcp_tool.<locals>.<listcomp>w   s"    %S%S%SDdoo&7&7%S%S%Sr#   zErrored MCP tool result: zError running tool.r,   z>Current span is not a FunctionSpanData, skipping tool output: )jsonloadsrE   r   DONT_LOG_TOOL_DATAr   debugr   r	   	call_toolerrorr   r&   contentmodel_dump_jsondumpsr   
isinstancer6   r   outputmcp_datawarning)
r)   r,   r    rK   rL   	json_datarJ   r7   tool_outputcurrent_spans
             r!   rC   zMCPUtil.invoke_mcp_toolR   s     
		BL(T
:(>(>(>RTII 	 	 	( WGDIGGHHHHUDIUUUUVVV$HtyHHJHH 	 $ 	SL9di99::::LQdiQQZQQRRR	V!++DIyAAAAAAAAFF 	V 	V 	VLDDIDDDDEEE!"MTY"M"M!"M"MNNTUU	V $ 	DL;TY;;;<<<<LBTYBB&BBCCC v~!## .+;;==KK  1$$*%S%SFN%S%S%STTKKL=V==>>>/K')) 		,02BCC 0;&-fk3&// cUacc   s-    
BA#B

B!C= =
E:EEN)__name__
__module____qualname____doc__classmethodlistboolr   r/   r%   r   r4   r   r   strrC   r   r#   r!   r   r      s)       HH;'DH	d   [& 	a 	a=A	a	d	a 	a 	a [	a 

&1
NR
	
 
 
 [
4 5 5(15<Mc<R5`c5	5 5 5 [5 5 5r#   r   )rA   rQ   typingr   r   agents.strict_schemar   r<   r   
exceptionsr   r	   r
   r   run_contextr   r    r   r   tracingr   r   r   	mcp.typesr9   r,   r   r   r   r#   r!   <module>ro      s6        % % % % % % % % : : : : : :       G G G G G G G G G G       + + + + + + % % % % % % % % H H H H H H H H H H "))))))!!!!!!t t t t t t t t t tr#   