
    Kim                        d dl mZ d dl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mZmZ d dlmZmZmZ d d	lmZ d d
lmZ  ee      Z G d d      Zy)    )annotationsN)	AwaitableCallable)Any)GetPromptResult)settings)FastMCPErrorNotFoundErrorPromptError)FunctionPromptPromptPromptResult)DuplicateBehavior)
get_loggerc                  |    e Zd ZdZ	 	 d
	 	 	 ddZddZddZddZ	 	 	 d	 	 	 	 	 	 	 	 	 ddZddZ		 d	 	 	 	 	 dd	Z
y)PromptManagerzManages FastMCP prompts.Nc                    i | _         |xs t        j                  | _        |d}|t        j                  vr.t        d| ddj                  t        j                               || _        y )NwarnzInvalid duplicate_behavior: z. Must be one of: z, )_promptsr   mask_error_detailsr   __args__
ValueErrorjoinduplicate_behavior)selfr   r   s      j/home/jay/workspace/scripts/.codegraph-venv/lib/python3.12/site-packages/fastmcp/prompts/prompt_manager.py__init__zPromptManager.__init__   s}    
 ,."4"S8S8S %!'%6%?%??./A.B C##'99->-G-G#H"IK 
 #5    c                F   K   | j                          d{   }||v S 7 w)zCheck if a prompt exists.N)get_promptsr   keypromptss      r   
has_promptzPromptManager.has_prompt)   s&     ((**g~ +s   !	!c                l   K   | j                          d{   }||v r||   S t        d|       7 w)zGet prompt by key.NzUnknown prompt: )r    r
   r!   s      r   
get_promptzPromptManager.get_prompt.   s@     ((**'>3<.se455 +s   424c                4   K   t        | j                        S w)zK
        Gets the complete, unfiltered inventory of local prompts.
        )dictr   )r   s    r   r    zPromptManager.get_prompts5   s      DMM""s   c                    t         j                  rt        j                  dt        d       t        j                  ||||      }| j                  |      S )z Create a prompt from a function.zkPromptManager.add_prompt_from_fn() is deprecated. Use Prompt.from_function() and call add_prompt() instead.   )
stacklevel)namedescriptiontags)r   deprecation_warningswarningsr   DeprecationWarningr   from_function
add_prompt)r   fnr,   r-   r.   prompts         r   add_prompt_from_fnz PromptManager.add_prompt_from_fn;   sN     ((MM}"
  --T{
 v&&r   c                   | j                   j                  |j                        }|r| j                  dk(  r=t        j                  d|j                          || j                   |j                  <   |S | j                  dk(  r|| j                   |j                  <   |S | j                  dk(  rt        d|j                         | j                  dk(  r|S |S || j                   |j                  <   |S )zAdd a prompt to the manager.r   zPrompt already exists: replaceerrorignore)r   getr"   r   loggerwarningr   )r   r5   existings      r   r3   zPromptManager.add_promptO   s     ==$$VZZ0&&&0!8EF,2fjj)  ((I5,2fjj)  ((G3 #:6::,!GHH((H4  )/DMM&**%r   c                d  K   | j                  |       d{   }	 |j                  |       d{   }t        |j                  |      S 7 57 # t        $ r  t
        $ rJ}t        j                  d|       | j                  rt        d|      |t        d|d|       |d}~ww xY ww)zv
        Internal API for servers: Finds and renders a prompt, respecting the
        filtered protocol path.
        N)r-   messageszError rendering prompt z: )
r&   renderr   r-   r	   	Exceptionr<   	exceptionr   r   )r   r,   	argumentsr5   r@   es         r   render_promptzPromptManager.render_prompta   s      t,,
	R#]]955H"v/A/AHUU -5 	 	R6th?@&&!$;D8"DE1L!$;D82aS"IJPQQ	RsC   B0AB0A AA B0A B-#AB((B--B0)NN)r   zDuplicateBehavior | Noner   zbool | None)r"   strreturnbool)r"   rG   rH   r   )rH   zdict[str, Prompt])NNN)
r4   z5Callable[..., PromptResult | Awaitable[PromptResult]]r,   
str | Noner-   rJ   r.   zset[str] | NonerH   r   )r5   r   rH   r   )N)r,   rG   rD   zdict[str, Any] | NonerH   r   )__name__
__module____qualname____doc__r   r$   r&   r    r6   r3   rF    r   r   r   r      s    " 8<*.545 (5(
6#  "& $'A' '  	'
 ' 
'(* ,0RR )R 
	Rr   r   )
__future__r   _annotationsr0   collections.abcr   r   typingr   mcpr   fastmcpr   fastmcp.exceptionsr	   r
   r   fastmcp.prompts.promptr   r   r   fastmcp.settingsr   fastmcp.utilities.loggingr   rK   r<   r   rO   r   r   <module>rZ      sA    2  /    G G G G . 0	H	cR cRr   