
    .h                        d 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 ddlmZmZmZ eez  ez  Z G d de          Z G d	 d
e          Z G d de          Z eeez           eez            Zeez  eeef         z  eeez  eeef         z           z  Zeee         z  Z G d de          Z G d de          ZdS )z!Base classes for FastMCP prompts.    N)	AwaitableCallableSequence)AnyLiteral)	BaseModelFieldTypeAdaptervalidate_call)EmbeddedResourceImageContentTextContentc                   T     e Zd ZU dZed         ed<   eed<   deez  def fdZ	 xZ
S )Messagez#Base class for all prompt messages.user	assistantrolecontentkwargsc                     t          |t                    rt          d|          } t                      j        dd|i| d S )Ntexttyper   r    )
isinstancestrr   super__init__selfr   r   	__class__s      \/var/www/FlaskApp/flask-venv/lib/python3.11/site-packages/mcp/server/fastmcp/prompts/base.pyr   zMessage.__init__   sO    gs## 	=!vG<<<G333F33333    )__name__
__module____qualname____doc__r   __annotations__CONTENT_TYPESr   r   r   __classcell__r"   s   @r#   r   r      sv         --
%
&&&&4m 3 4s 4 4 4 4 4 4 4 4 4 4r$   r   c                   N     e Zd ZU dZdZed         ed<   deez  de	f fdZ
 xZS )UserMessagezA message from the user.r   r   r   r   r   c                 >     t                      j        dd|i| d S Nr   r   r   r   r    s      r#   r   zUserMessage.__init__    +    333F33333r$   r%   r&   r'   r(   r   r   r)   r   r*   r   r   r+   r,   s   @r#   r.   r.      sn         "")/D'%
&///4m 3 4s 4 4 4 4 4 4 4 4 4 4r$   r.   c                   N     e Zd ZU dZdZed         ed<   deez  de	f fdZ
 xZS )AssistantMessagezA message from the assistant.r   r   r   r   r   c                 >     t                      j        dd|i| d S r0   r1   r    s      r#   r   zAssistantMessage.__init__)   r2   r$   r3   r,   s   @r#   r5   r5   $   sn         '')4D'%
&4444m 3 4s 4 4 4 4 4 4 4 4 4 4r$   r5   c                       e Zd ZU dZ ed          Zeed<    edd          Zedz  ed<    edd	
          Z	e
ed<   dS )PromptArgumentz+An argument that can be passed to a prompt.zName of the argumentdescriptionnameNz%Description of what the argument doesr:   Fz Whether the argument is required)defaultr:   required)r%   r&   r'   r(   r	   r;   r   r)   r:   r=   boolr   r$   r#   r8   r8   7   s         55"8999D#999#eA  Kt    U#E  Hd     r$   r8   c            
       j   e Zd ZU dZ ed          Zeed<    edd          Zedz  ed<    edd          Z	e
e         dz  ed	<    ed
          Zedeee         z  f         ed<   e	 	 ddedeee         z  f         dedz  dedz  dd fd            Zdd	eeef         dz  de
e         fdZdS )Promptz7A prompt template that can be rendered with parameters.zName of the promptr9   r;   Nz#Description of what the prompt doesr:   z*Arguments that can be passed to the prompt	argumentsT)exclude.fnreturnc           	         |p|j         }|dk    rt          d          t          |                                          }g }d|v rp|d                                         D ]U\  }}||                    dg           v }	|                    t          ||                    d          |	                     Vt          |          } | ||p|j	        pd||          S )	zCreate 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
        z<lambda>z,You must provide a name for lambda functions
propertiesr=   r:   )r;   r:   r=    )r;   r:   rA   rC   )
r%   
ValueErrorr
   json_schemaitemsgetappendr8   r   r(   )
clsrC   r;   r:   	func_name
parametersrA   
param_nameparamr=   s
             r#   from_functionzPrompt.from_functionO   s    'BK	
""KLLL !__0022
 +-	:%%%/%=%C%C%E%E  !
E%
B)G)GG  "'$)IIm$<$<!)      2s#7rz7R	
 
 
 	
r$   c                   K   | j         r;d | j         D             }t          |pi           }||z
  }|rt          d|           	  | j        di |pi }t	          j        |          r| d{V }t          |t          t          z            s|g}g }|D ].}	 t          |t                    r|
                    |           nt          |t                    r.|
                    t                              |                     nt          |t                    r5t          d|          }|
                    t!          |                     nRt#          j        |t          d                                          }|
                    t          d	|
                     # t(          $ r t          d|           w xY w|S # t(          $ r}	t          d| j         d|	           d}	~	ww xY w)z!Render the prompt with arguments.c                 *    h | ]}|j         	|j        S r   )r=   r;   ).0args     r#   	<setcomp>z Prompt.render.<locals>.<setcomp>   s!    KKKSclKKKKr$   zMissing required arguments: Nr   r   )r      )fallbackindentr   )r   r   z,Could not convert prompt result to message: zError rendering prompt z: r   )rA   setrH   rC   inspectiscoroutiner   listtupler   rL   dictmessage_validatorvalidate_pythonr   r   r.   pydantic_coreto_jsondecode	Exceptionr;   )
r!   rA   r=   providedmissingresultmessagesmsgr   es
             r#   renderzPrompt.render}   sU      > 	KKKDNKKKH9?++H)G K !I!I!IJJJ!	ITW11	R11F"6** &% fdUl33 "  ')H  !#w// O ,,,,#C.. 	O (9(I(I#(N(NOOOO#C-- O"-6"D"D"D G(D(D(DEEEE"/"7#a# # # &((   !VW(M(M(MNNN    $LsLL  
 O 	I 	I 	IGtyGGAGGHHH	Is2   AG D
F%#G %GG 
G0G++G0)NN)N)r%   r&   r'   r(   r	   r;   r   r)   r:   rA   r^   r8   rC   r   PromptResultr   classmethodrR   r`   r   r   rm   r   r$   r#   r@   r@   C   s        AA"6777D#777#e?  Kt    .3UF. . .ItN#d*    AFd@S@S@SBlY|%<<<=SSS  "&	+
 +
S,<)@@@A+
 Dj+
 4Z	+

 
+
 +
 +
 [+
Z+I +Id38nt&; +ItG} +I +I +I +I +I +Ir$   r@   )r(   r\   collections.abcr   r   r   typingr   r   rc   pydanticr   r	   r
   r   	mcp.typesr   r   r   r*   r   r.   r5   ra   r   r`   SyncPromptResultrn   r8   r@   r   r$   r#   <module>ru      s	   ' '  9 9 9 9 9 9 9 9 9 9             A A A A A A A A A A A A A A A A A A A A A Al*-==	4 	4 	4 	4 	4i 	4 	4 	44 4 4 4 4' 4 4 44 4 4 4 4w 4 4 4 @K.> >?""  
 'MDcN"XcGmd38n.L%MM   ),<"==	 	 	 	 	Y 	 	 	eI eI eI eI eIY eI eI eI eI eIr$   