
    ~h                        d dl mZ d dlZd dlmZ d dlmZmZ d dl	m
Z
mZmZmZ d dlmZ d dlmZmZ d dlmZ d d	lmZ d d
lmZ er	  ee      Z G d d      Zy)    )annotationsN)Callable)TYPE_CHECKINGAny)EmbeddedResourceImageContentTextContentToolAnnotations)settings)NotFoundError	ToolError)DuplicateBehavior)Tool)
get_loggerc                      e Zd ZdZ	 	 d	 	 	 ddZddZddZddZddZ	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 ddZ	ddd	Z
dd
Z	 	 	 	 	 	 ddZy)ToolManagerzManages FastMCP tools.Nc                    i | _         |xs t        j                  | _        |d}|t        j                  vr.t        d| ddj                  t        j                               || _        y )NwarnzInvalid duplicate_behavior: z. Must be one of: z, )_toolsr   mask_error_detailsr   __args__
ValueErrorjoinduplicate_behavior)selfr   r   s      V/opt/mcp/mcp-sentiment/venv/lib/python3.12/site-packages/fastmcp/tools/tool_manager.py__init__zToolManager.__init__   s}    
 (*"4"S8S8S %!'%6%?%??./A.B C##'99->-G-G#H"IK 
 #5    c                    || j                   v S )zCheck if a tool exists.r   r   keys     r   has_toolzToolManager.has_tool,   s    dkk!!r   c                X    || j                   v r| j                   |   S t        d|       )zGet tool by key.Unknown tool: r   r   r!   s     r   get_toolzToolManager.get_tool0   s/    $++;;s##nSE233r   c                    | j                   S )z4Get all registered tools, indexed by registered key.r    r   s    r   	get_toolszToolManager.get_tools6   s    {{r   c                P    t        | j                         j                               S )zList all registered tools.)listr*   valuesr)   s    r   
list_toolszToolManager.list_tools:   s    DNN$++-..r   c           	         t        j                  dt        d       t        j                  |||||||      }| j                  |      S )zAdd a tool to the server.zcToolManager.add_tool_from_fn() is deprecated. Use Tool.from_function() and call add_tool() instead.   )
stacklevel)namedescriptiontagsr   exclude_args
serializer)warningsr   DeprecationWarningr   from_functionadd_tool)	r   fnr2   r3   r4   r   r6   r5   tools	            r   add_tool_from_fnzToolManager.add_tool_from_fn>   sQ     	q	

 !!##%!
 }}T""r   c                   |xs |j                   }| j                  j                  |      }|r| j                  dk(  r)t        j                  d|        || j                  |<   |S | j                  dk(  r|| j                  |<   |S | j                  dk(  rt        d|       | j                  dk(  r|S |S || j                  |<   |S )z Register a tool with the server.r   zTool already exists: replaceerrorignore)r2   r   getr   loggerwarningr   )r   r<   r"   existings       r   r:   zToolManager.add_toolZ   s    TYY;;??3'&&&0!6se<=#'C   ((I5#'C   ((G3 #8!>??((H4   $DKKr   c                V    || j                   v r| j                   |= yt        d|       )zRemove a tool from the server.

        Args:
            key: The key of the tool to remove

        Raises:
            NotFoundError: If the tool is not found
        r%   Nr&   r!   s     r   remove_toolzToolManager.remove_tooll   s.     $++C . 677r   c                  K   | j                  |      }|st        d|       	 |j                  |       d{   S 7 # t        $ r"}t        j                  d|d|        |d}~wt        $ rM}t        j                  d|d|        | j                  rt        d|      |t        d|d|       |d}~ww xY ww)z#Call a tool by name with arguments.r%   NzError calling tool z: )r'   r   runr   rC   	exception	Exceptionr   )r   r"   	argumentsr<   es        r   	call_toolzToolManager.call_toolz   s      }}S!. 677	K),,,,  	23'A3?@G  	K23'A3?@&&"5cW =>AE  "5cWBqc BCJ	KsB   "CA  >A  CA   	B?	A&&B?2AB::B??C)NN)r   zDuplicateBehavior | Noner   zbool | None)r"   strreturnbool)r"   rO   rP   r   )rP   zdict[str, Tool])rP   z
list[Tool])NNNNNN)r;   zCallable[..., Any]r2   
str | Noner3   rR   r4   zset[str] | Noner   zToolAnnotations | Noner6   zCallable[[Any], str] | Noner5   zlist[str] | NonerP   r   )N)r<   r   r"   rR   rP   r   )r"   rO   rP   None)r"   rO   rL   zdict[str, Any]rP   z3list[TextContent | ImageContent | EmbeddedResource])__name__
__module____qualname____doc__r   r#   r'   r*   r.   r=   r:   rG   rN    r   r   r   r      s      8<*.545 (5("4/  "& $.226)-## #  	#
 # ,# 0# '# 
#8$8KK#1K	<Kr   r   )
__future__r   _annotationsr7   collections.abcr   typingr   r   	mcp.typesr   r   r	   r
   fastmcpr   fastmcp.exceptionsr   r   fastmcp.settingsr   fastmcp.tools.toolr   fastmcp.utilities.loggingr   rT   rC   r   rX   r   r   <module>rc      sD    2  $ % R R  7 . # 0	H	}K }Kr   