
    ~h+                    ^   d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 d dlZd dlmZmZmZmZ d dlmZ d dlmZ d dlZd d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZm Z m!Z! e	rd dl"m#Z#m$Z$  ee%      Z&ddZ' G d de      Z G d de      Z(e G d d             Z)	 	 d	 	 	 	 	 	 	 ddZ*y)    )annotationsN)Callable)	dataclass)TYPE_CHECKINGAny)EmbeddedResourceImageContentTextContentToolAnnotations)Tool)Field)get_context)FastMCPComponent)compress_schema)
get_logger)Imagefind_kwarg_by_typeget_cached_typeadapter)ArgTransformTransformedToolc                V    t        j                  | t        d      j                         S )N   )fallbackindent)pydantic_coreto_jsonstrdecode)datas    N/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/fastmcp/tools/tool.pydefault_serializerr!      s       A>EEGG    c                     e Zd ZU dZ ed      Zded<    edd      Zd	ed
<    edd      Zded<   ddZ	e
	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Z	 	 	 	 ddZe	 	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Zy)r   z Internal tool registration info.zJSON schema for tool parameters)descriptiondict[str, Any]
parametersNz%Additional annotations about the tool)defaultr$   ToolAnnotations | Noner   z+Optional custom serializer for tool resultsCallable[[Any], str] | None
serializerc                |    | j                   | j                  | j                  | j                  d}t	        di ||z  S )N)namer$   inputSchemar    )r,   r$   r&   r   MCPTool)self	overrideskwargss      r    to_mcp_toolzTool.to_mcp_tool.   s>    II++??++	
 ,)+,,r"   c           
     <    t         j                  | |||||||      S )Create a Tool from a function.fnr,   r$   tagsr   exclude_argsr*   enabled)FunctionToolfrom_functionr6   s           r    r<   zTool.from_function7   s4     ))##%! * 	
 		
r"   c                    K   t        d      w)Run the tool with arguments.zSubclasses must implement run())NotImplementedError)r0   	argumentss     r    runzTool.runN   s      ""CDDs   c
                D    ddl m}
  |
j                  |||||||||		      S )Nr   )r   )	tooltransform_fnr,   transform_argsr$   r8   r   r*   r:   )fastmcp.tools.tool_transformr   	from_tool)clsrC   rD   r,   rE   r$   r8   r   r*   r:   r   s              r    rG   zTool.from_toolT   s8     	A(((%)##!

 
	
r"   )r1   r   returnr/   NNNNNNNr7   Callable[..., Any]r,   
str | Noner$   rM   r8   set[str] | Noner   r(   r9   list[str] | Noner*   r)   r:   bool | NonerI   r;   r@   r%   rI   3list[TextContent | ImageContent | EmbeddedResource])NNNNNNNN)rC   r   rD   zCallable[..., Any] | Noner,   rM   rE   zdict[str, ArgTransform] | Noner$   rM   r8   rN   r   r(   r*   r)   r:   rP   rI   r   )__name__
__module____qualname____doc__r   r&   __annotations__r   r*   r3   staticmethodr<   rA   classmethodrG   r.   r"   r    r   r   #   su   *!&3T!UJU*/"I+K'  /4"O/J+ -   "& $.2)-26#


  
 	

 ,
 '
 0
 
 

 
,E'E	<E  379="& $.226#

 0
 	

 7
  
 
 ,
 0
 
 

 
r"   r   c                  l    e Zd ZU ded<   e	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       Z	 	 	 	 ddZy)	r;   rL   r7   Nc	           
        t         j                  ||      }	||	j                  dk(  rt        d       | |	j                  |xs |	j                  |xs |	j
                  |	j                  |xs
 t               ||||      S d      S )r5   )r9   z<lambda>z,You must provide a name for lambda functionsT)r7   r,   r$   r&   r8   r   r*   r:   )ParsedFunctionr<   r,   
ValueErrorr7   r$   r&   set)
rH   r7   r,   r$   r8   r   r9   r*   r:   	parsed_fns
             r    r<   zFunctionTool.from_functions   s     #00,0O	<INNj8KLL||'#<y'<'< ++#!&2G	
 		
 9=	
 		
r"   c                  K   ddl m} |j                         }t        | j                  |      }|r||vrt               ||<   t        j                  j                  rt        j                  | j                        }| j                  d   D ]x  }|j                  |d      }||j                  vr$t        |t              s5|j                  |   j                  t         t"        t$        fv r`	 t'        j(                  |      ||<   z t-        | j                        }|j/                  |      }t        j0                  |      r
| d{   }t3        || j4                        S # t&        j*                  $ r Y w xY w7 4w)r>   r   Context
kwarg_type
propertiesN)r*   )fastmcp.server.contextrb   copyr   r7   r   fastmcpsettingstool_attempt_parse_json_argsinspect	signaturer&   get
isinstancer   
annotationintfloatbooljsonloadsJSONDecodeErrorr   validate_pythonisawaitable_convert_to_contentr*   )	r0   r@   rb   context_kwargrl   
param_nameargtype_adapterresults	            r    rA   zFunctionTool.run   sQ     	3NN$	*477wG]);'2}Im$88  ))$''2I"ool; 
mmJ5Y%9%99!#s+''
3>>C 
 ,0JJsOIj)!* .dgg6--i8v&!\F"6dooFF ++  "s7   C)E=,E"AE=E;E="E85E=7E88E=rJ   rK   rQ   )rS   rT   rU   rW   rY   r<   rA   r.   r"   r    r;   r;   p   s      "& $.2)-26#

 
  	

 
 ,
 '
 0
 
 

 
:.G'.G	<.Gr"   r;   c                  \    e Zd ZU ded<   ded<   ded<   ded<   e	 	 d	 	 	 	 	 	 	 dd
       Zy	)r\   rL   r7   r   r,   rM   r$   r%   r&   Nc                   ddl m} |rt        j                  |      }|j                  j                         D ]f  }|j                  t        j                  j                  k(  rt        d      |j                  t        j                  j                  k(  s]t        d       |ri|D ]d  }||j                  vrt        d| d      |j                  |   }|j                  t        j                  j                  k(  sWt        d| d       t        |dd       xs |j                  j                  }|j                   }	t        j"                  |      s|j$                  }t'        |t(              r|j*                  }t-        |      }
|
j/                         }g }t1        ||	      }|r|j3                  |       |r|j5                  |       t7        ||
      } | |||	|      S )Nr   ra   z/Functions with *args are not supported as toolsz2Functions with **kwargs are not supported as toolszParameter 'z-' in exclude_args does not exist in function.z,' in exclude_args must have a default value.rS   rc   )prune_params)r7   r,   r$   r&   )rf   rb   rk   rl   r&   valueskind	ParameterVAR_POSITIONALr]   VAR_KEYWORDr'   emptygetattr	__class__rS   rV   	isroutine__call__rn   rX   __func__r   json_schemar   appendextendr   )rH   r7   r9   validaterb   sigparamarg_namefn_namefn_docr|   schemar   ry   s                 r    r<   zParsedFunction.from_function   s    	3##B'C..0 ::!2!2!A!AA$%VWW::!2!2!>!>>$L 	  , 	Hs~~5()(3`a   NN84E}}(9(9(?(??()(3_` 	 "j$/H2<<3H3H   $Bb,'B-b1))+"$*2'B.- lC	
 	
r"   )NT)r7   rL   r9   rO   r   rr   rI   r\   )rS   rT   rU   rW   rY   r<   r.   r"   r    r\   r\      sY    
I *.	;
;
 ';
 	;

 
;
 ;
r"   r\   c                   | g S t        | t        t        z  t        z        r| gS t        | t              r| j                         gS t        | t        t        z        r|sg }g }| D ]V  }t        |t        t        z  t        z  t        z        r|j                  t        |      d          F|j                  |       X |r!t        t        |      dk(  r|d   n||d      }||z   S t        | t              s|t        |       } n		  ||       } t        d| 	      gS # t        $ r-}t        j                  d|d       t        |       } Y d}~?d}~ww xY w)
z2Convert a result to a sequence of content objects.Nr      T)r*   _process_as_single_itemz!Error serializing tool result: %s)exc_infotext)typer   )rn   r
   r	   r   r   to_image_contentlisttupler   rx   lenr   r!   	Exceptionloggerwarning)r}   r*   r   	mcp_typesother_contentitemes          r    rx   rx     s_    ~	&+47GGHx&% '')**&$,'0G 	 	+D$l :=M MPU UV  !4T!:1!=>$$T*		+ /$'$6!$;a %(,M y((fc"'/F4#F+ V&122  47!  
 ,F34s   D 	E%#EE)r   r   rI   r   )NF)r}   r   r*   r)   r   rr   rI   rR   )+
__future__r   rk   rs   collections.abcr   dataclassesr   typingr   r   r   	mcp.typesr   r	   r
   r   r   r/   pydanticr   rh   fastmcp.server.dependenciesr   fastmcp.utilities.componentsr   fastmcp.utilities.json_schemar   fastmcp.utilities.loggingr   fastmcp.utilities.typesr   r   r   rF   r   r   rS   r   r!   r;   r\   rx   r.   r"   r    <module>r      s    "   $ ! %  R R %   3 9 9 0  J	H	HJ
 J
ZOG4 OGd B
 B
 B
N /3$)6363+63 "63 9	63r"   