
    .Ui/                         d dl Z d dlZd dlmZ d dlmZmZmZmZm	Z	 d dl
mZ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 ddlmZmZ ddlmZmZmZ ddlm Z  erd dl!mZ" ddl#m$Z$ ddl%m&Z& e G d d             Z'eddge e(   f   Z)	  G d de      Z*e	e)e*df   Z+	 	 	 ddee,e-      dee,e-      dee*   fdZ. G d d      Z/y)    N)	dataclass)TYPE_CHECKINGAnyCallableOptionalUnion)NotRequired	TypedDict   )_debug)AgentsExceptionModelBehaviorError	UserError)logger)RunContextWrapper)ensure_strict_json_schema)FunctionToolTool)FunctionSpanDataget_current_spanmcp_tools_span)MaybeAwaitable)r   )	AgentBase   )	MCPServerc                   :    e Zd ZU dZee   ed<   	 ded<   	 eed<   y)ToolFilterContextz7Context information available to tool filter functions.run_contextr   agentserver_nameN)__name__
__module____qualname____doc__r   r   __annotations__str     k/home/jay/workspace/tools/ai-image-gen/jaaz-app/server/venv/lib/python3.12/site-packages/agents/mcp/util.pyr   r      s%    A"3''"5%r(   r   MCPToolc                   @    e Zd ZU dZeee      ed<   	 eee      ed<   y)ToolFilterStaticzAStatic tool filter configuration using allowlists and blocklists.allowed_tool_namesblocked_tool_namesN)r!   r"   r#   r$   r	   listr&   r%   r'   r(   r)   r,   r,   2   s/    K#DI..3 $DI..1r(   r,   r-   r.   returnc                 0    | |yi }| | |d<   |||d<   |S )a  Create a static tool filter from allowlist and blocklist parameters.

    This is a convenience function for creating a ToolFilterStatic.

    Args:
        allowed_tool_names: Optional list of tool names to allow (whitelist).
        blocked_tool_names: Optional list of tool names to exclude (blacklist).

    Returns:
        A ToolFilterStatic if any filtering is specified, None otherwise.
    Nr-   r.   r'   )r-   r.   filter_dicts      r)   create_static_tool_filterr3   B   s@     !&8&@$&K%,>()%,>()r(   c                       e Zd ZdZeded   dedee   dddee	   f
d	       Z
ed
ddedee   dd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y)MCPUtilz>Set of utilities for interop between MCP and Agents SDK tools.serversr   convert_schemas_to_strictr   r   r   r0   c                 4  K   g }t               }|D ]{  }| j                  ||||       d{   }|D 	ch c]  }	|	j                   }
}	t        |
|z        dkD  rt	        d|
|z         |j                  |
       |j                  |       } |S 7 ec c}	w w)z2Get all function tools from a list of MCP servers.Nr   z/Duplicate tool names found across MCP servers: )setget_function_toolsnamelenr   updateextend)clsr6   r7   r   r   tools
tool_namesserverserver_toolstoolserver_tool_namess              r)   get_all_function_toolszMCPUtil.get_all_function_tools`   s      "u
 	'F!$!7!71;" L 8D Dt D D$z12Q6E(:568  /0LL&	'  !Es!   )BBBBABBrB   c                 @  K   t        |j                        5 }|j                  ||       d{   }|D cg c]  }|j                   c}|j                  _        ddd       D cg c]  }| j                  |||       c}S 7 Vc c}w # 1 sw Y   1xY wc c}w w)z0Get all function tools from a single MCP server.)rB   N)r   r;   
list_tools	span_dataresultto_function_tool)r?   rB   r7   r   r   spanr@   rD   s           r)   r:   zMCPUtil.get_function_toolsz   s      6;;/ 	B4 ++K??E;@$A4TYY$ADNN!	B [``RV$$T63LM`` @$A	B 	B asI   BBBBBBB)BBBBBBrD   r*   c                 >   t        j                  | j                  ||      }|j                  d}}d|vri |d<   |r	 t	        |      }d}t        |j                  |j                  xs d|||      S # t
        $ r"}t        j                  d|        Y d}~Nd}~ww xY w)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;   rP   )r?   rD   rB   r7   invoke_funcschema	is_strictes           r)   rK   zMCPUtil.to_function_tool   s    
  ''(;(;VTJ ,,e	 v%#%F< $P26: 	 ((.B%&(
 	
  PJ1#NOOPs   A1 1	B:BBcontext
input_jsonc                   K   	 |rt        j                  |      ni }t        j                  r#t        j                  d|j                          n%t        j                  d|j                   d|        	 |j                  |j                  |       d{   }t        j                  r$t        j                  d|j                   d       n%t        j                  d|j                   d	|        |j                  r,|j                  r t        j                  |j                        }nt        |j                         d
k(  r|j                   d   j#                         }nYt        |j                         d
kD  r?|j                   D 	cg c]  }	|	j%                  d       }
}	t        j                  |
      }nd}t'               }|rbt)        |j*                  t,              r0||j*                  _        d|j                  i|j*                  _        |S t        j2                  d|        |S # t        $ ry}t        j                  r#t        j                  d|j                          n%t        j                  d|j                   d|        t        d|j                   d|       |d}~ww xY w7 # t        $ rF}t        j                  d|j                   d|        t        d|j                   d|       |d}~ww xY wc c}	w w)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   json)modez[]rB   z>Current span is not a FunctionSpanData, skipping tool output: )ra   loadsrX   r   DONT_LOG_TOOL_DATAr   debugr;   r   	call_toolerrorr   use_structured_contentstructuredContentdumpsr<   contentmodel_dump_json
model_dumpr   
isinstancerI   r   outputmcp_datawarning)r?   rB   rD   r^   r_   	json_datar]   rJ   tool_outputitemtool_resultscurrent_spans               r)   rV   zMCPUtil.invoke_mcp_tool   s    
		BL

:(>RTI $$LL-dii[9:LL-dii[ZLQR	V!++DIIyAAF
 $$LL9TYYK{;<LL9TYYKz&BC ((V-E-E**V%=%=>K
 6>>"a'$nnQ/??AV^^$q(IOXV <XX"jj6 #'),002BC0;&&-fkk3&&/ 	 TUaTbc k  	((;DII;GH;DII;bUV$.tyykJ<H	 B 	VLL3DII;bDE!$<TYYKr!"MNTUU	V&  Ysn   L	H* AL	6J2 J/J2 C-L	L B
L	*	J,3A4J''J,,L	/J2 2	L;AK<<LL	N)r!   r"   r#   r$   classmethodr/   boolr   r   r   rF   r:   r   rK   r&   rV   r'   r(   r)   r5   r5   ]   s   Hk" $( 's+	
  
d 2 aa $(a 's+	a
 a 
da a 

&1
NR
	
 
4 ; ;(1;<Mc<R;`c;	; ;r(   r5   )NN)0rT   ra   dataclassesr   typingr   r   r   r   r   typing_extensionsr	   r
   rO   r   
exceptionsr   r   r   r   r   r   strict_schemar   rD   r   r   tracingr   r   r   util._typesr   	mcp.typesr*   r   r   rB   r   r   rx   ToolFilterCallabler,   
ToolFilterr/   r&   r3   r5   r'   r(   r)   <module>r      s      ! @ @ 4  G G  + 5 % H H ()!! 
& 
& 
& 2I>t@TTU 	1y 	1 %'7=>
 ` /3.2 c+ c+ 6D Dr(   