
    $je0                       U d Z ddlmZ ddl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mZmZmZmZm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m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(m)Z)m*Z*m+Z+m,Z, 	 ddl-m.Z/ ddl0m1Z2 e/e2fZ3de4d<   n# e5$ r dZ3Y nw xY wd*dZ6d*dZ7 ede          Z8 e$e9          Z:e	 G d dee8                               Z; G d d          Z<ddd d+d'Z=e	 G d( d)                      Z>dS ),z?Function introspection and schema generation for FastMCP tools.    )annotationsN)Callable)	dataclass)	AnnotatedAnyGenericUnionget_args
get_originget_type_hints)PydanticSchemaGenerationError)TypeVar)transform_context_annotationswithout_injected_parameters)
ToolResult)ParsedDocstringparse_docstring)compress_schema)
get_logger)AudioFileImagecreate_function_without_paramsget_cached_typeadapteris_class_member_of_typereplace_type)	PrefabApp)	Componentztuple[type, ...]_PREFAB_TYPES tpr   returnboolc                    | t           u rdS t          |           }|t          u s|t          j        u s	|t
          u r&t          d t          |           D                       S dS )zKCheck if *tp* is or contains bytes, recursing through unions and Annotated.Tc              3  4   K   | ]}t          |          V  d S N)_contains_bytes_type.0as     f/home/rurouni/.hermes/hermes-agent/venv/lib/python3.11/site-packages/fastmcp/tools/function_parsing.py	<genexpr>z'_contains_bytes_type.<locals>.<genexpr>1   s+      AAq'**AAAAAA    F)bytesr   r	   types	UnionTyper   anyr
   r!   origins     r+   r'   r'   +   sb    	U{{t^^F&EO33v7J7JAAHRLLAAAAAA5r-   c                   t          | t                    rt          | t                    rdS t	          |           }|t
          u s|t          j        u s	|t          u r&t          d t          |           D                       S dS )zSCheck if *tp* is or contains a prefab type, recursing through unions and Annotated.Tc              3  4   K   | ]}t          |          V  d S r&   )_contains_prefab_typer(   s     r+   r,   z(_contains_prefab_type.<locals>.<genexpr>;   s+      BB(++BBBBBBr-   F)
isinstancetype
issubclassr   r   r	   r/   r0   r   r1   r
   r2   s     r+   r6   r6   5   s|    "d 
2} = = t^^F&EO33v7J7JBBXb\\BBBBBB5r-   T)defaultc                      e Zd ZU ded<   dS )_WrappedResultr:   resultN)__name__
__module____qualname____annotations__r    r-   r+   r=   r=   D   s         IIIIIr-   r=   c                      e Zd ZdS )_UnserializableTypeN)r?   r@   rA   r    r-   r+   rD   rD   I   s        Dr-   rD   _root_schema
_seen_refsschemadict[str, Any]rF   dict[str, Any] | NonerG   set[str] | Nonec               V   |p| }|pt                      }|                     d          dk    rdS d| v rdS |                     d          }t          |t                    r|                    d          sdS ||v rdS |                    d          }|                    d          }|}|D ]P}	|	                    d	d                              d
d          }
t          |t                    r|
|vr dS ||
         }Q|}t          |t                    sdS t          ||||hz            S )z1Check if a JSON schema represents an object type.r8   objectT
propertiesz$refz#/F/z~1z~0~rE   )
setgetr7   str
startswithremoveprefixsplitreplacedict_is_object_schema)rH   rF   rG   root_schema	seen_refsrefpointersegmentstargetsegment	unescapedtarget_schemas               r+   rY   rY   M   sh    (&K#ceeI zz&X%%t vt **V

Cc3 s~~d';'; u
iu t$$G}}S!!HF # #OOD#..66tSAA	&$'' 	9F+B+B55	"MmT** u u$   r-   c                  p    e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   dZded<   e	 	 	 ddd            ZdS )ParsedFunctionCallable[..., Any]fnrS   namez
str | NonedescriptionrI   input_schemarJ   output_schemaNr   return_typeTexclude_argslist[str] | Nonevalidater#   wrap_non_object_output_schemar"   c                	   |rt          j        |          }|j                                        D ]T}|j        t           j        j        k    rt          d          |j        t           j        j        k    rt          d          U|r[|D ]X}||j        vrt          d| d          |j        |         }|j	        t           j        j
        k    rt          d| d          Yt          |dd           p|j        j        }t          |          }	t          j        |          s!t!          |t"          j                  s|j        }t!          |t(                    r|j        }t          |          }
t-          |	j        p|
j        |
j                  }t1          |          }t3          |          }|rt5          |t7          |                    }t9          |          }|                                }|rt7          |          nd }t=          ||d	          }|j        rN|                    d
i           }|j                                         D ]\  }}||v rd||         vr|||         d<   d }t          j        |          }|j!        }t!          |tD                    r[	 tG          |d          }|                    d|          }n2# tH          $ r%}tJ          &                    d|           Y d }~nd }~ww xY w|}|t           j'        d tP          dfvrtS          |          rtT          }tV          rtY          |          rtT          }t[          |t\                    rtT          }t_          |t`          1                    td          tf          th          t\          tj          j6        j7        tj          j6        j8        tj          j6        j9        tj          j6        j:        tj          j6        j;        g	tV          R tT                              }	 t9          |          }|                    d          }|rGty          |          s8tz          |         }t9          |          }|                    d          }d|d<   n|}t=          |d          }nE# t|          $ r8}dtE          |          vrtJ          &                    d|           Y d }~nd }~ww xY w | |||j        ||pd |          S )Nz/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.r?   )rh   
parametersT)prune_paramsprune_titlesrN   rh   )include_extrasr"   z5Failed to resolve type hint for return annotation: %s.serialization)modezx-fastmcp-wrap-result)rs   rD   z#Unable to generate schema for type )rf   rg   rh   ri   rj   rk   )?inspect	signaturerq   valueskind	ParameterVAR_POSITIONAL
ValueErrorVAR_KEYWORDr;   emptygetattr	__class__r?   r   	isroutiner7   	functoolspartial__call__staticmethod__func__r   rh   r   r   r   listr   json_schemar   rR   itemsreturn_annotationrS   r   	Exceptionloggerdebug_emptyr   r'   rD   r   r6   r   r   r   rX   fromkeysr   r   r   mcpr/   TextContentImageContentAudioContentResourceLinkEmbeddedResourcerY   r=   r   )clsrf   rl   rn   ro   sigparamarg_namefn_nameouter_docstringinner_docstringparsed_docstring
wrapper_fninput_type_adapterri   rr   rN   
param_name
param_descrj   output_type
type_hintseoriginal_output_typeclean_output_typetype_adapterbase_schemawrapped_typewrapped_adapters                                r+   from_functionzParsedFunction.from_function   so     	#B''C..00  :!2!AAA$%VWWW:!2!>>>$L   ?  
 , 	 	Hs~55(a(aaa    N84E}(9(???(`(```   @ "j$//H2<3H)"--  $$ 	ZI<M-N-N 	Bb,'' 	B *"--*'3R7R&1
 
 
 +2.. 144
  	X7
DDVDVWWJ3J??)5577 .:CtL)))t&|$
 
 
 & 	G%)),;;J*:*E*K*K*M*M G G&
J*,,%Z
-CCC<FJz*=9##+ k3'' 	YY ,BtDDD
(nnX{CC Y Y YTVWXXXXXXXXY
  +w~tS#>>>#K00 21  2!6{!C!C 21 '{J?? 21 !-"	-	.	.	.	2 '  ( ! !&X56GHH*66O6LL 1 09J;9W9W 0#12C#DL&<\&J&JO$3$?$?_$?$U$UM=AM"9::$/M /D Q Q Q0 X X X(A66LL!V{!V!VWWWX s(4%'/4,
 
 
 	
s1   'K 
K4K//K4?BR 
S.R>>S)NTT)
rf   re   rl   rm   rn   r#   ro   r#   r"   rd   )r?   r@   rA   rB   rk   classmethodr   r    r-   r+   rd   rd   }   s         III    ((((K *..2r
 r
 r
 r
 [r
 r
 r
r-   rd   )r!   r   r"   r#   )rH   rI   rF   rJ   rG   rK   r"   r#   )?__doc__
__future__r   r   rw   r/   collections.abcr   dataclassesr   typingr   r   r   r	   r
   r   r   	mcp.typesr   pydanticr   typing_extensionsr   
TypeVarExtfastmcp.server.dependenciesr   r   fastmcp.tools.baser   #fastmcp.utilities.docstring_parsingr   r   fastmcp.utilities.json_schemar   fastmcp.utilities.loggingr   fastmcp.utilities.typesr   r   r   r   r   r   r   prefab_ui.appr   
_PrefabAppprefab_ui.components.baser   _PrefabComponentr   rB   ImportErrorr'   r6   r:   r?   r   r=   rD   rY   rd   r    r-   r+   <module>r      s   E E E " " " " " "       $ $ $ $ $ $ ! ! ! ! ! ! W W W W W W W W W W W W W W W W W W     2 2 2 2 2 2 3 3 3 3 3 3        * ) ) ) ) ) P P P P P P P P 9 9 9 9 9 9 0 0 0 0 0 0                 555555GGGGGG'13C&DMDDDDD   MMM       JsC   	H		     WQZ   	 	 	 	 	 	 	 	 +/"&	- - - - - -` {
 {
 {
 {
 {
 {
 {
 {
 {
 {
s   9B BB