
    kKj5N                       d Z ddlmZ ddlZddlZddlZddl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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Zdd
lmZ ddlm Z m!Z!m"Z" ddl#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. ddl/m0Z0 ddl1m2Z2 ddl3m4Z4 ddl5m6Z6 erddl7m8Z8 ddl9m:Z:  ededef         Z; e2e<      Z=e G d de             Z> e
dd       G d d             Z? G d d e$      Z@ed'd!       ZAeddddddddd"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d(d#       ZAe	 d)dddddddddd$		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d*d%       ZA	 d)dddddddddd$		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d+d&ZAy),z)Standalone @prompt decorator for FastMCP.    )annotationsN)Callable)	dataclassfield)
MethodType)TYPE_CHECKINGAnyLiteralProtocolTypeVarcastoverloadruntime_checkable)Icon)SkipJsonSchema)resolve_task_config)FastMCPDeprecationWarningFastMCPErrorPromptError)PromptPromptArgumentPromptResult)call_sync_fn_in_threadpoolis_coroutine_function)	AuthCheck)ParsedDocstringparse_docstring)compress_schema)
get_logger)
TaskConfig)get_cached_typeadapter)Docket)	ExecutionF.)boundc                  $    e Zd ZU dZded<   ddZy)DecoratedPromptz.Protocol for functions decorated with @prompt.
PromptMeta__fastmcp__c                     y N )selfargskwargss      p/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/fastmcp/prompts/function_prompt.py__call__zDecoratedPrompt.__call__9   s    #    N)r.   r	   r/   r	   returnr	   )__name__
__module____qualname____doc____annotations__r1   r,   r2   r0   r'   r'   3   s    8=r2   r'   T)frozenkw_onlyc                      e Zd ZU dZ edd      Zded<   dZded	<   dZd
ed<   dZ	ded<   dZ
ded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   y)r(   z8Metadata attached to functions by the @prompt decorator.promptF)defaultinitzLiteral['prompt']typeN
str | Nonenamestr | int | Noneversiontitledescriptionlist[Icon] | Noneiconsset[str] | Nonetagsdict[str, Any] | Nonemetabool | TaskConfig | Nonetask"AuthCheck | list[AuthCheck] | NoneauthTboolenabled)r4   r5   r6   r7   r   r?   r8   rA   rC   rD   rE   rG   rI   rK   rM   rO   rQ   r,   r2   r0   r(   r(   <   s    B#H5AD
AD* $G$E:"K"#E# D/ "&D
&%)D
")/3D
,3GTr2   r(   c                      e Zd ZU dZded<   eddddddddddd
	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd       ZddZ	 d	 	 	 ddZdd	Z	ddd
	 	 	 	 	 	 	 	 	 	 	 ddZ
y)FunctionPromptzA prompt that is a function.z"SkipJsonSchema[Callable[..., Any]]fnN)
metadatarA   rC   rD   rE   rG   rI   rK   rM   rO   c       
           t        d |||||||	|
|f	D              }||rt        d      |t        |||||||	|
|	      }|j                  xs% t	        |dd      xs |j
                  j                  }|dk(  rt        d      t        j                  |      }|j                  j                         D ]f  }|j                  t        j                  j                  k(  rt        d      |j                  t        j                  j                  k(  s]t        d	       t!        |      }|j"                  }|t%        d
      }n(t'        |t(              rt%        j*                  |      }n|}|j-                  ||       t        j.                  |      s&t'        |t0        j2                        s|j4                  }t'        |t6              r|j8                  }t!        |      }t;        |j<                  xs |j<                  |j                        }|j<                  |j<                  n|j<                  }ddlm }m!}  ||      } ||      }tE        |      }|jG                         }tI        |d      }|j                  rI|jK                  di       }|j                  jM                         D ]  \  }}||v sd||   vs|||   d<    g }d|v r|d   jM                         D ]  \  }}|jK                  d      }||j                  v r|j                  |   }|jN                  t        j                  jP                  k7  r`|jN                  tR        urN	 tE        |jN                        } | jG                         }!tU        jV                  |!d      }"d|" }#|r| d|# }n|#}|j_                  ta        ||||jK                  dg       v                | ||jb                  tS        |jb                        nd|jd                  ||jf                  ||jh                  xs
 tk               ||jl                  ||jn                        S # tX        $ r!}$tZ        j]                  d||$       Y d}$~$d}$~$ww xY w)a'  Create a Prompt from a function.

        Args:
            fn: The function to wrap
            metadata: PromptMeta object with all configuration. If provided,
                individual parameters must not be passed.
            name, title, etc.: Individual parameters for backwards compatibility.
                Cannot be used together with metadata parameter.

        The function can return:
        - str: wrapped as single user Message
        - list[Message | str]: converted to list[Message]
        - PromptResult: used directly
        c              3  $   K   | ]  }|d u 
 y wr+   r,   ).0xs     r0   	<genexpr>z/FunctionPrompt.from_function.<locals>.<genexpr>r   s      )
W TMWs   Nz|Cannot pass both 'metadata' and individual parameters to from_function(). Use metadata alone or individual parameters alone.	rA   rC   rD   rE   rG   rI   rK   rM   rO   r4   z<lambda>z,You must provide a name for lambda functionsz1Functions with *args are not supported as promptsz4Functions with **kwargs are not supported as prompts	forbidden)mode)rE   
parametersr   )transform_context_annotationswithout_injected_parametersT)prune_titles
propertiesrE   ),:)
separatorsz8Provide as a JSON string matching the following schema: z

z4Failed to generate schema for prompt argument %s: %srequired)rA   rE   rf   )rA   rC   rD   rE   rG   	argumentsrI   rT   rK   task_configrO   )8any	TypeErrorr(   rA   getattr	__class__r4   
ValueErrorinspect	signaturer^   valueskind	ParameterVAR_POSITIONALVAR_KEYWORDr   rM   r    
isinstancerP   	from_boolvalidate_function	isroutine	functoolspartialr1   staticmethod__func__r   rE   fastmcp.server.dependenciesr_   r`   r!   json_schemar   getitems
annotationemptystrjsondumps	Exceptionloggerdebugappendr   rC   rD   rG   rI   setrK   rO   )%clsrT   rU   rA   rC   rD   rE   rG   rI   rK   rM   rO   individual_params_provided	func_namesigparamouter_docstring
task_valuerh   inner_docstringparsed_docstringr_   r`   
wrapped_fntype_adapterr^   rb   
param_name
param_descrg   arg_description	sig_paramparam_adapterparam_schema
schema_strschema_notees%                                        r0   from_functionzFunctionPrompt.from_functionR   sY   @ &) )
GUKdDRVW)
 &
"
 $>E  !'
H MMSWRT:Sbll>S>S 	 
"KLL #^^**,EzzW..=== !TUUzzW..::: !WXX	 - *"- ]]
$+6K
D)$..z:K$K%%b)4   $ZI<M<M-NBb,'B *"-*'33R7R7R&11
 ##/   !-- 		

 +2. 14
-j9!--/
$ZdC

 &&#b9J*:*E*E*K*K*M&
J*,%Z
-CC<FJz*=9 +N +-	:%%/%=%C%C%E!
E"'))M": / #z :I!,,0A0A0G0GG%00;,B9CWCW,XM+8+D+D+FL *.LZ)XJ -eeodp*qK.5D4ET+2W2=   "'$3!+z~~j"/M!MC &FR -5-=-=-IC(()t..#..'#%#
 	
!  ) "LL V * ! s   AP==	Q'Q""Q'c                   ddl m}  || j                        }t        j                  |      }i }|j                         D ]  \  }}||j                  v r|j                  |   }|j                  t        j                  j                  k(  s"|j                  t        u st        |t              s|||<   r	 t        |j                        }		 |	j                  |      ||<   |||<    |S # t        t        t         j"                  f$ r |	j%                  |      ||<   Y >w xY w# t        t        t         j"                  f$ r'}
t'        d| d| d|j                   d|
       |
d}
~
ww xY w)zGConvert string arguments to expected types based on function signature.r   )r`   zCould not convert argument 'z' with value 'z' to expected type z	. Error: N)r}   r`   rT   rn   ro   r   r^   r   rr   r   r   ru   r!   validate_jsonrm   rj   pydantic_coreValidationErrorvalidate_pythonr   )r-   r/   r`   
wrapper_fnr   converted_kwargsr   param_valuer   adapterr   s              r0   _convert_string_argumentsz(FunctionPrompt._convert_string_arguments  sv   K09

+'-||~#JS^^+z2 $$(9(9(?(??''3.#K53>$Z0!"89I9I"J;B;P;P +<,Z8  0; ,A (6D   !+I}7T7TU ;B;R;R +<,Z8
 '	=3P3PQ !)::,nU`Ta b0050@0@/A1#O  !!!s6   3D	C''2DDDDE$="EE$c                  K   | j                   rT| j                   D ch c]  }|j                  s|j                   }}t        |xs i       }||z
  }|rt	        d|       	 |r|j                         ni }| j                  |      }t        j                  | j                        }t        |j                  j                               }|j                         D 	
ci c]  \  }	}
|	|v s|	|
 }}	}
t        | j                        }t        | j                        r|j                  |       d{   }n=t!        |j                  |       d{   }t        j"                  |      r
| d{   }| j%                  |      S c c}w c c}
}	w 7 ^7 A7 $# t&        $ r  t(        $ rC}t*        j-                  d| j                          t/        d| j                  d|       |d}~ww xY ww)z!Render the prompt with arguments.zMissing required arguments: NzError rendering prompt z: )rg   rf   rA   r   rm   copyr   rn   ro   rT   r^   keysr   r!   r   r   r   isawaitableconvert_resultr   r   r   	exceptionr   )r-   rg   argrf   providedmissingr/   r   valid_paramskvr   resultr   s                 r0   renderzFunctionPrompt.renderA  s     >>,0NNKNScllNHK9?+H)G #?y!IJJ%	S)2Y^^%F 33F;F ##DGG,Cs~~2245L'-||~K~tq!l9Jad~FK 2$'':L %TWW-+;;FCC  : 00&   &&v.#)\F&&v..M L& L D
 *  	 	S6tyykBC 7		}BqcJKQRR	Ss   G.FF&G.$A:F F
+F
0AF 1F2F FF /F0F G.
F F F G+(>G&&G++G.c                    | j                   j                         sy|j                  | j                  | j                  g       y)z:Register this prompt with docket for background execution.N)names)rh   supports_tasksregisterrT   key)r-   dockets     r0   register_with_docketz#FunctionPrompt.register_with_docketu  s1    ..0z2r2   )fn_keytask_keyc                  K   |xs | j                   }|r||d<     |j                  |fi |di |xs i  d{   S 7 w)a  Schedule this prompt for background execution via docket.

        FunctionPrompt splats the arguments dict since .fn expects **kwargs.

        Args:
            docket: The Docket instance
            arguments: Prompt arguments
            fn_key: Function lookup key in Docket registry (defaults to self.key)
            task_key: Redis storage key for the result
            **kwargs: Additional kwargs passed to docket.add()
        r   Nr,   )r   add)r-   r   rg   r   r   r/   
lookup_keys          r0   add_to_docketzFunctionPrompt.add_to_docket{  sL     ( 'txx
$F5M5ZVZZ
5f5JbJJJJs   8A?A)rT   Callable[..., Any]rU   zPromptMeta | NonerA   r@   rC   rB   rD   r@   rE   r@   rG   rF   rI   rH   rK   rJ   rM   rL   rO   rN   r3   rS   )r/   dict[str, Any]r3   r   r+   )rg   rJ   r3   r   )r   r"   r3   None)r   r"   rg   rJ   r   r@   r   r@   r/   r	   r3   r#   )r4   r5   r6   r7   r8   classmethodr   r   r   r   r   r,   r2   r0   rS   rS   M   s;   &**
 '+$( "&#' $&*)-37@
@
 $	@
 @
 "@
 @
  @
 !@
 @
 $@
 '@
 1@
 
@
 @
D* \ ,02S(2S 
2Sh3 "#KK )K
 K K K 
Kr2   rS   c                     y r+   r,   )rT   s    r0   r<   r<     s    r2   )rC   rD   rE   rG   rI   rK   rM   rO   c                    y r+   r,   )	
name_or_fnrC   rD   rE   rG   rI   rK   rM   rO   s	            r0   r<   r<     s     r2   r[   c       	             y r+   r,   )
r   rA   rC   rD   rE   rG   rI   rK   rM   rO   s
             r0   r<   r<     s     r2   c       	   	     d  	 t        | t              rt        d      	 	 	 	 	 	 d	fdd		fdd	fdt        j                  |       r	 | |      S t        | t
              r|t        d      | n| |nt        dt        |              d
fd}
|
S )zStandalone decorator to mark a function as an MCP prompt.

    Returns the original function with metadata attached. Register with a server
    using mcp.add_prompt().
    zwTo decorate a classmethod, use @classmethod above @prompt. See https://gofastmcp.com/servers/prompts#using-with-methodsc                l    t        |
	t              	      }t        j                  | |      S )Nr[   )rU   )r(   r   rS   r   )rT   prompt_nameprompt_metarO   rE   rG   rK   rI   rM   rD   rC   s      r0   create_promptzprompt.<locals>.create_prompt  sG     !#$T*

 ++B+EEr2   c                    t        |
		      }t        | t        t        z        r| j                  n| }|t        t        |      _        | S )Nr[   )r(   ru   r{   r   r|   r   r	   r)   )rT   r   rU   targetrO   rE   rG   rK   rI   rM   rD   rC   s       r0   attach_metadatazprompt.<locals>.attach_metadata  sW    #

 !+2|j/H Ir(0S&%	r2   c                    t         j                  j                  dk(  r%t        j                  dt
        d        | |      S  | |      S )Nobjectzdecorator_mode='object' is deprecated and will be removed in a future version. Decorators now return the original function with metadata attached.   )
stacklevel)fastmcpsettingsdecorator_modewarningswarnr   )rT   r   r   r   s     r0   	decoratorzprompt.<locals>.decorator  sK    **h6MMV)	 ![11r;//r2   z6Cannot specify name both as first argument and keywordzInvalid first argument: c                     |       S r+   r,   )rT   r   r   s    r0   wrapperzprompt.<locals>.wrapper  s    [))r2   )rT   r   r   r@   r3   rS   )rT   r$   r   r@   r3   r$   rT   r$   r3   r$   )ru   r   rj   rn   rx   r   r?   )r   rA   rC   rD   rE   rG   rI   rK   rM   rO   r   r   r   r   r   s     ```````` @@@@r0   r<   r<     s    $ *k*K
 	

FF-7F	F F"  	0 $T**	J	$TUU 		24
3C2DEFF* Nr2   r   )r   r   rC   rB   rD   r@   rE   r@   rG   rF   rI   rH   rK   rJ   rM   rL   rO   rN   r3   Callable[[F], F]r+   )r   r   rA   r@   rC   rB   rD   r@   rE   r@   rG   rF   rI   rH   rK   rJ   rM   rL   rO   rN   r3   r   )r   zstr | Callable[..., Any] | NonerA   r@   rC   rB   rD   r@   rE   r@   rG   rF   rI   rH   rK   rJ   rM   rL   rO   rN   r3   r	   )Br7   
__future__r   ry   rn   r   r   collections.abcr   dataclassesr   r   typesr   typingr   r	   r
   r   r   r   r   r   r   	mcp.typesr   pydantic.json_schemar   r   fastmcp.decoratorsr   fastmcp.exceptionsr   r   r   fastmcp.prompts.baser   r   r   fastmcp.utilities.async_utilsr   r   fastmcp.utilities.authorizationr   #fastmcp.utilities.docstring_parsingr   r   fastmcp.utilities.json_schemar   fastmcp.utilities.loggingr   fastmcp.utilities.tasksr    fastmcp.utilities.typesr!   r   r"   docket.executionr#   r$   r4   r   r'   r(   rS   r<   r,   r2   r0   <module>r      s   / "     $ ( 	 	 	   /  2 S S E E 6 P 9 0 . :*CxS)*	H	 >h > > $%  & EKV EKP
 
  
 	 !%"# "&%)/3  	
      # -  
 
  $"# "&%)/3  	
       # -  
  37R  $"# "&%)/3R/R R 	R
 R R R R  R #R -R 	Rr2   