
    "<i8                       d Z ddlmZ ddlZddlZddlmZmZm	Z	 ddl
mZmZ ddlZddlmZmZmZmZm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% ddl&m'Z' ddl(m)Z)m*Z*  e'e+          Z,	 d d!dZ- ee         e          Z.e/ez  e0e/ef         z  e	e/ez  e0e/ef         z           z  Z1e1ee1         z  Z2 G d de)          Z G d de#          Z G d de          Z3dS )"z!Base classes for FastMCP prompts.    )annotationsN)	AwaitableCallableSequence)	AnnotatedAny)ContentBlockIconPromptMessageRoleTextContent)Prompt)PromptArgument)FieldTypeAdapter)PromptError)get_contextwithout_injected_parameters
TaskConfig)FastMCPComponent)compress_schema)
get_logger)FastMCPBaseModelget_cached_typeadaptercontentstr | ContentBlockroleRole | Nonekwargsr   returnr   c                t    t          | t                    rt          d|           } |d}t          d| |d|S )z.A user-friendly constructor for PromptMessage.texttyper#   Nuser)r   r    )
isinstancestrr   r   )r   r   r    s      /Users/kimhansen/Desktop/03 Workspace/ceo-agents/chl-effectiveness/mcp-servers/whoop/.venv/lib/python3.11/site-packages/fastmcp/prompts/prompt.pyMessager+      sM     '3 96888|>t>>v>>>    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S )r   z+An argument that can be passed to a prompt.zName of the argument)descriptionr)   nameNz%Description of what the argument doesdefaultr.   
str | Noner.   Fz Whether the argument is requiredboolrequired)	__name__
__module____qualname____doc__r   r/   __annotations__r.   r4   r'   r,   r*   r   r   4   s         55"8999D9999#e"I  K     U#E  H      r,   r   c                       e Zd ZU dZ edd          Zded<   d% fd	Zd% fd
Zddd&dZ	e
	 	 	 	 	 	 	 	 d'd(d"            Z	 d)d*d$Z xZS )+r   z7A prompt template that can be rendered with parameters.Nz*Arguments that can be passed to the promptr0   zlist[PromptArgument] | None	argumentsr!   Nonec                    t                                                       	 t                      }|                                 d S # t          $ r Y d S w xY wN)superenabler   _queue_prompt_list_changedRuntimeErrorselfcontext	__class__s     r*   r@   zPrompt.enableG   s_    	!mmG..00000 	 	 	DD	   "A 
AAc                    t                                                       	 t                      }|                                 d S # t          $ r Y d S w xY wr>   )r?   disabler   rA   rB   rC   s     r*   rI   zPrompt.disableO   s_    	!mmG..00000 	 	 	DD	rG   include_fastmcp_metarK   bool | None	overridesr   	MCPPromptc               j   d | j         pg D             }t          |                    d| j                  |                    d| j                  ||                    d| j                  |                    d| j                  |                    d|                     |                              S )	z$Convert the prompt to an MCP prompt.c                P    g | ]#}t          |j        |j        |j                   $S )r/   r.   r4   )MCPPromptArgumentr/   r.   r4   .0args     r*   
<listcomp>z(Prompt.to_mcp_prompt.<locals>.<listcomp>^   sH     
 
 
  XO  
 
 
r,   r/   r.   titleicons_metarJ   )r/   r.   r;   rW   rX   rY   )r;   rN   getr/   r.   rW   rX   get_meta)rD   rK   rM   r;   s       r*   to_mcp_promptzPrompt.to_mcp_promptW   s    
 
 ~+
 
 
	 vty11!mT5EFF--44--44--<PQQ 	
 	
 	
 		
r,   fn5Callable[..., PromptResult | Awaitable[PromptResult]]r/   r2   rW   r.   rX   list[Icon] | Nonetagsset[str] | Noneenabledmetadict[str, Any] | Nonetaskbool | TaskConfig | NoneFunctionPromptc	                H    t                               | ||||||||	  	        S )Create a Prompt from a function.

        The function can return:
        - A string (converted to a message)
        - A Message object
        - A dict (converted to a message)
        - A sequence of any of the above
        	r]   r/   rW   r.   rX   r`   rb   rc   re   )rg   from_functionrj   s	            r*   rk   zPrompt.from_functionr   s<    ( ++# , 

 

 
	
r,   list[PromptMessage]c                $   K   t          d          )zRender the prompt with arguments.

        This method is not implemented in the base Prompt class and must be
        implemented by subclasses.
        z"Subclasses must implement render())NotImplementedError)rD   r;   s     r*   renderzPrompt.render   s       ""FGGGr,   )r!   r<   )rK   rL   rM   r   r!   rN   NNNNNNNNr]   r^   r/   r2   rW   r2   r.   r2   rX   r_   r`   ra   rb   rL   rc   rd   re   rf   r!   rg   r>   r;   rd   r!   rl   )r5   r6   r7   r8   r   r;   r9   r@   rI   r\   staticmethodrk   ro   __classcell__)rF   s   @r*   r   r   @   s        AA-2U"N. . .I               -1
 
 
 
 
 
6    "&#' $#&*)-
 
 
 
 \
B ,0	H 	H 	H 	H 	H 	H 	H 	H 	Hr,   r   c                      e Zd ZU dZded<    ed           Zded<   e	 	 	 	 	 	 	 	 dd d            Zd!dZ		 d"d#dZ
dS )$rg   zA prompt that is a function.r^   r]   c                 "    t          d          S )N	forbiddenmoder   r'   r,   r*   <lambda>zFunctionPrompt.<lambda>   s    jk&B&B&B r,   )default_factoryz_Annotated[TaskConfig, Field(description='Background task execution configuration (SEP-1686).')]task_configNr/   r2   rW   r.   rX   r_   r`   ra   rb   rL   rc   rd   re   rf   r!   c
                   |pt          |dd          p|j        j        }
|
dk    rt          d          t	          j        |          }|j                                        D ]T}|j        t          j	        j
        k    rt          d          |j        t          j	        j        k    rt          d          U|pt	          j        |          }|	t          d          }n,t          |	t                    rt          j        |	          }n|	}|                    ||
           t	          j        |          s|j        }t          |t(                    r|j        }t-          |          }t/          |          }|                                }t3          |d	
          }g }d|v r|d                                         D ]\  }}|                    d          }||j        v r|j        |         }|j        t          j	        j        k    ro|j        t<          ura	 t/          |j                  }|                                }t?          j         |d          }d| }|r| d| }n|}n# tB          $ r Y nw xY w|"                    tG          ||||                    dg           v                       | |
|||||ptI                      ||nd	|||
  
        S )ri   r5   Nz<lambda>z,You must provide a name for lambda functionsz1Functions with *args are not supported as promptsz4Functions with **kwargs are not supported as promptsrw   rx   T)prune_titles
propertiesr.   ),:)
separatorsz8Provide as a JSON string matching the following schema: z

r4   rQ   )
r/   rW   r.   rX   r;   r`   rb   r]   rc   r|   )%getattrrF   r5   
ValueErrorinspect	signature
parametersvalueskind	ParameterVAR_POSITIONALVAR_KEYWORDgetdocr   r(   r3   	from_boolvalidate_function	isroutine__call__rs   __func__r   r   json_schemar   itemsrZ   
annotationemptyr)   jsondumps	Exceptionappendr   set)clsr]   r/   rW   r.   rX   r`   rb   rc   re   	func_namesigparamr|   
wrapped_fntype_adapterr   r;   
param_namearg_description	sig_paramparam_adapterparam_schema
schema_strschema_notes                            r*   rk   zFunctionPrompt.from_function   sD   , RGB
D99RR\=R	
""KLLL##^**,, 	Y 	YEzW.=== !TUUUzW.::: !WXXX ; "7W^B%7%7 <$+666KKd## 	$.t44KKK%%b)444  $$ 	Bb,'' 	B 144
-j99!--//
$ZdCCC
 +-	:%%%/%=%C%C%E%E # #!
E"'))M":": // #z :I!,0A0GGG%0;;!,B9CW,X,XM+8+D+D+F+FL *.LZ)X)X)XJ +reo*q*qK. >5D2W2W+2W2W2=( ! ! ! D!   "'$3!+z~~j"/M/M!M      s#&2GG#
 
 
 	
s   AI&&
I32I3r    dict[str, Any]c                   ddl m}  || j                  }t          j        |          }i }|                                D ]\  }}||j        v r|j        |         }|j        t          j        j	        k    s#|j        t          u st          |t                    s|||<   _	 t          |j                  }		 |	                    |          ||<   n:# t          t          t           j        f$ r |	                    |          ||<   Y nw xY w# t          t          t           j        f$ r&}
t'          d| d| d|j         d|
           |
d}
~
ww xY w|||<   |S )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)fastmcp.server.dependenciesr   r]   r   r   r   r   r   r   r   r)   r(   r   validate_jsonr   	TypeErrorpydantic_coreValidationErrorvalidate_pythonr   )rD   r    r   
wrapper_fnr   converted_kwargsr   param_valuer   adapteres              r*   _convert_string_argumentsz(FunctionPrompt._convert_string_arguments  s   KKKKKK0099

++'-||~~  	;  	;#JS^++z2 $(9(???'3..#K55 /3>$Z00!"89I"J"J;B;P;P +< <,Z88 !+I}7TU   ;B;R;R +< <,Z888
 '	=3PQ ! ! !)O: O OU` O O050@O OKLO O   !!! 0; ,,s<   !D
6CD
4DD
DD

E&!EEr;   rl   c           
       K   | j         r;d | j         D             }t          |pi           }||z
  }|rt          d|           	 |r|                                ni }|                     |          } | j        di |}t          j        |          r| d{V }t          |t          t          z            s|g}g }|D ]}	 t          |t                    r|                    |           nt          |t                    r4|                    t          dt          d|                               n`t          j        |t                                                    }	|                    t          dt          d|	                               # t$          $ r}
t'          d	          |
d}
~
ww xY w|S # t$          $ r@}
t(                              d
| j                    t'          d
| j         d          |
d}
~
ww xY w)z!Render the prompt with arguments.c                *    h | ]}|j         	|j        S r'   )r4   r/   rS   s     r*   	<setcomp>z(FunctionPrompt.render.<locals>.<setcomp>I  s!    KKKSclKKKKr,   zMissing required arguments: Nr&   r#   r$   )r   r   )fallbackz+Could not convert prompt result to message.zError rendering prompt .r'   )r;   r   r   copyr   r]   r   isawaitabler(   listtupler   r   r)   r   r   to_jsondecoder   r   logger	exceptionr/   )rD   r;   r4   providedmissingr    resultmessagesmsgr   r   s              r*   ro   zFunctionPrompt.renderB  s      > 	KKKDNKKKH9?++H)G K !I!I!IJJJ.	M)2:Y^^%%%F 33F;;F TW&&v&&F"6** &% fdUl33 "  -/H  !#}55  ,,,,#C--  )%+(3c(J(J(J      #0"7c"J"J"J"Q"Q"S"S )%+(3g(N(N(N     !   %E 
 O 	M 	M 	MBtyBBCCCD	DDDEE1L	Ms>   A<F< CFF< 
F7"F22F77F< <
H;HHrp   rq   )r    r   r!   r   r>   rr   )r5   r6   r7   r8   r9   r   r|   classmethodrk   r   ro   r'   r,   r*   rg   rg      s         &&==== 	BBCCC  D D D D
    "&#' $#&*)-l
 l
 l
 l
 [l
\*  *  *  * \ ,0;M ;M ;M ;M ;M ;M ;Mr,   rg   r>   )r   r   r   r   r    r   r!   r   )4r8   
__future__r   _annotationsr   r   collections.abcr   r   r   typingr   r   r   	mcp.typesr	   r
   r   r   r   r   rN   r   rR   pydanticr   r   fastmcp.exceptionsr   r   r   r   fastmcp.server.tasks.configr   fastmcp.utilities.componentsr   fastmcp.utilities.json_schemar   fastmcp.utilities.loggingr   fastmcp.utilities.typesr   r   r5   r   r+   message_validatorr)   dictSyncPromptResultPromptResultrg   r'   r,   r*   <module>r      s   ' ' 2 2 2 2 2 2   9 9 9 9 9 9 9 9 9 9 ! ! ! ! ! ! ! !     J J J J J J J J J J J J J J ) ) ) ) ) ) 9 9 9 9 9 9 ' ' ' ' ' ' ' ' * * * * * * P P P P P P P P 2 2 2 2 2 2 9 9 9 9 9 9 9 9 9 9 9 9 0 0 0 0 0 0       
 
H		 6:? ? ? ? ? /K.}==  
38n s]"T#s(^345   ),<"==	 	 	 	 	% 	 	 	[H [H [H [H [H [H [H [H|_M _M _M _M _MV _M _M _M _M _Mr,   