
     h7                       d Z ddlmZ ddlZddlZddlmZmZ ddl	m
Z
mZmZ ddlmZ ddlZddl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 ddl m!Z! ddl"m#Z# ddl$m%Z% ddl&m'Z'm(Z(m)Z)  e%e*          Z+	 d d!dZ, ee         e          Z-e.ez  e/e.ef         z  ee.ez  e/e.ef         z           z  Z0e0e
e0         z  Z1 G d de'          Z G d de!e          Z G d de          Z2dS )"z!Base classes for FastMCP prompts.    )annotationsN)ABCabstractmethod)	AwaitableCallableSequence)Any)ContentBlockPromptMessageRoleTextContent)Prompt)PromptArgument)FieldTypeAdapter)PromptError)get_context)FastMCPComponent)compress_schema)
get_logger)FastMCPBaseModelfind_kwarg_by_type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      h/Users/user/workspace/sujinbaek/cqa-test-app/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,   r2   r%   r*   r(   r   r   5   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e	 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 promptr.   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.enableH   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   r?   r@   rA   s     r(   rG   zPrompt.disableP   s_    	!mmG..00000 	 	 	DD	rE   include_fastmcp_metarI   bool | None	overridesr	   	MCPPromptc               6   d | j         pg D             }t          |                    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,   r2   )MCPPromptArgumentr-   r,   r2   .0args     r(   
<listcomp>z(Prompt.to_mcp_prompt.<locals>.<listcomp>_   sH     
 
 
  XO  
 
 
r*   r-   r,   title_metarH   )r-   r,   r9   rU   rV   )r9   rL   getr-   r,   rU   get_meta)rB   rI   rK   r9   s       r(   to_mcp_promptzPrompt.to_mcp_promptX   s    
 
 ~+
 
 
	 vty11!mT5EFF--44--<PQQ 
 
 
 	
r*   fn5Callable[..., PromptResult | Awaitable[PromptResult]]r-   r0   rU   r,   tagsset[str] | Noneenabledmetadict[str, Any] | NoneFunctionPromptc           	     D    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
        rZ   r-   rU   r,   r\   r^   r_   )ra   from_functionrd   s          r(   re   zPrompt.from_functionr   s6    $ ++# , 
 
 	
r*   list[PromptMessage]c                $   K   t          d          )!Render the prompt with arguments.z1Prompt.render() must be implemented by subclasses)NotImplementedError)rB   r9   s     r(   renderzPrompt.render   s       ""UVVVr*   )r   r:   )rI   rJ   rK   r	   r   rL   NNNNNNrZ   r[   r-   r0   rU   r0   r,   r0   r\   r]   r^   rJ   r_   r`   r   ra   r<   r9   r`   r   rf   )r3   r4   r5   r6   r   r9   r7   r>   rG   rY   staticmethodre   r   rj   __classcell__)rD   s   @r(   r   r   A   s"        AA-2U"N. . .I               -1
 
 
 
 
 
4    "& $#&*
 
 
 
 \
6  ,0W W W W ^W W W W Wr*   r   c                  X    e Zd ZU dZded<   e	 	 	 	 	 	 ddd            ZddZ	 dddZdS )ra   zA prompt that is a function.r[   rZ   Nr-   r0   rU   r,   r\   r]   r^   rJ   r_   r`   r   c                0   ddl m} |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          j        |          s|j        }t#          |t$                    r|j        }t)          |          }|                                }t-          ||	          }|r|g}nd}t/          ||
          }g }d|v r|d                                         D ]\  }}|                    d          }||
j        v r|
j        |         }|j        t          j        j        k    ru|j        t8          urg||k    ra	 t)          |j                  }|                                }t;          j        |d          }d| }|r| d| }n|}n# t>          $ r Y nw xY w|                     tC          ||||                    dg           v                       | |	||||ptE                      ||nd||          S )rc   r   Contextr3   Nz<lambda>z,You must provide a name for lambda functionsz1Functions with *args are not supported as promptsz4Functions with **kwargs are not supported as prompts
kwarg_type)prune_params
propertiesr,   ),:)
separatorsz8Provide as a JSON string matching the following schema: z

r2   rO   T)r-   rU   r,   r9   r\   r^   rZ   r_   )#fastmcp.server.contextrs   getattrrD   r3   
ValueErrorinspect	signature
parametersvalueskind	ParameterVAR_POSITIONALVAR_KEYWORDgetdoc	isroutine__call__r&   rn   __func__r   json_schemar   r   itemsrW   
annotationemptyr'   jsondumps	Exceptionappendr   set)clsrZ   r-   rU   r,   r\   r^   r_   rs   	func_namesigparamtype_adapterr   context_kwargrv   r9   
param_namearg_description	sig_paramparam_adapterparam_schema
schema_strschema_notes                           r(   re   zFunctionPrompt.from_function   s   & 	322222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  $$ 	Bb,'' 	B-b11!--//
 +2'BBB 	 )?LLL$ZlKKK
 +-	:%%%/%=%C%C%E%E $ $!
E"'))M":": // #z :I!,0A0GGG%0;;&-77!,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H''
H43H4r   dict[str, Any]c                   ddl m} t          j        | j                  }i }t          | j        |          }|                                D ]%\  }}||j        v r|j        |         }||k    r|||<   )|j        t          j	        j
        k    s|j        t          u r|||<   Wt          |t                    s|||<   r	 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   rr   rt   zCould not convert argument 'z' with value 'z' to expected type z	. Error: N)r{   rs   r~   r   rZ   r   r   r   r   r   r   r'   r&   r   validate_jsonr}   	TypeErrorpydantic_coreValidationErrorvalidate_pythonr   )rB   r   rs   r   converted_kwargscontext_param_namer   param_valuer   adapteres              r(   _convert_string_argumentsz(FunctionPrompt._convert_string_arguments  s   222222(( 0GLLL'-||~~ (	; (	;#JS^++z2 !3333>$Z0 $(9(???'3..3>$Z00#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(C-,D(-4D$!D(#D$$D((E) E$$E)r9   rf   c           
     d  K   ddl m} | j        r;d | j        D             }t          |pi           }||z
  }|rt	          d|           	 |r|                                ni }t          | j        |          }|r||vrt                      ||<   | 	                    |          } | 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          w xY w|	S # t,          $ r; t0                              d| j                    t/          d| j         d          w xY w)rh   r   rr   c                *    h | ]}|j         	|j        S r%   )r2   r-   rQ   s     r(   	<setcomp>z(FunctionPrompt.render.<locals>.<setcomp>F  s!    KKKSclKKKKr*   zMissing required arguments: rt   Nr$   r!   r"   )r   r   )fallbackz+Could not convert prompt result to message.zError rendering prompt .r%   )r{   rs   r9   r   r}   copyr   rZ   r   r   r~   isawaitabler&   listtupler   r   r'   r   r   to_jsondecoder   r   logger	exceptionr-   )rB   r9   rs   r2   providedmissingr   r   resultmessagesmsgr   s               r(   rj   zFunctionPrompt.render=  s     
 	322222 > 	KKKDNKKKH9?++H)G K !I!I!IJJJ.	F)2:Y^^%%%F.tw7KKKM 6f!<!<(3}% 33F;;F TW&&v&&F"6** &% fdUl33 "  -/H U UU!#}55  ,,,,#C--  )%+(3c(J(J(J      #0"7c"J"J"J"Q"Q"S"S )%+(3g(N(N(N     ! U U U%&STTTU O 	F 	F 	FBtyBBCCCD	DDDEEE	Fs'   B)G* 6CG
G* G%%G* *AH/rk   rl   )r   r   r   r   r<   rm   )	r3   r4   r5   r6   r7   classmethodre   r   rj   r%   r*   r(   ra   ra      s         &&====   "& $#&*h
 h
 h
 h
 [h
T4  4  4  4 p ,0=F =F =F =F =F =F =Fr*   ra   r<   )r   r   r   r   r   r	   r   r   )3r6   
__future__r   _annotationsr~   r   abcr   r   collections.abcr   r   r   typingr	   r   	mcp.typesr
   r   r   r   r   rL   r   rP   pydanticr   r   fastmcp.exceptionsr   fastmcp.server.dependenciesr   fastmcp.utilities.componentsr   fastmcp.utilities.json_schemar   fastmcp.utilities.loggingr   fastmcp.utilities.typesr   r   r   r3   r   r)   message_validatorr'   dictSyncPromptResultPromptResultra   r%   r*   r(   <module>r      s   ' ' 2 2 2 2 2 2   # # # # # # # # 9 9 9 9 9 9 9 9 9 9           D D D D D D D D D D D D ) ) ) ) ) ) 9 9 9 9 9 9 ' ' ' ' ' ' ' ' * * * * * * 3 3 3 3 3 3 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   ),<"==	 	 	 	 	% 	 	 	SW SW SW SW SWs SW SW SWlcF cF cF cF cFV cF cF cF cF cFr*   