
    )`i'*              	          d 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
mZ ddlmZ ddlmZ erddlmZ  G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Zdedef         dej        dej        ej        z  fdZdedef         dej        dej        ej        z  fdZdedef         dej        dz  dej         ej        z  fdZ!dedef         dej"        dej#        ej        z  fdZ$dedef         dej%        dej&        dej'        ej        z  fdZ(dedef         dej)        dej&        dej'        ej        z  fdZ*e G d  d!                      Z+e(Z,e*Z-dS )"a  
Experimental task handler protocols for server -> client requests.

This module provides Protocol types and default handlers for when servers
send task-related requests to clients (the reverse of normal client -> server flow).

WARNING: These APIs are experimental and may change without notice.

Use cases:
- Server sends task-augmented sampling/elicitation request to client
- Client creates a local task, spawns background work, returns CreateTaskResult
- Server polls client's task status via tasks/get, tasks/result, etc.
    )	dataclassfield)TYPE_CHECKINGAnyProtocol)TypeAdapterN)RequestContext)RequestResponder)ClientSessionc                   Z    e Zd ZdZdedef         dej        dej        ej	        z  fdZ
dS )GetTaskHandlerFnTzrHandler for tasks/get requests from server.

    WARNING: This is experimental and may change without notice.
    contextr   paramsreturnc                 
   K   d S N selfr   r   s      y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/mcp/client/experimental/task_handlers.py__call__zGetTaskHandlerFnT.__call__"   s       14    N)__name__
__module____qualname____doc__r	   r   typesGetTaskRequestParamsGetTaskResult	ErrorDatar   r   r   r   r   r      se         
4 454 *4 
	u	.	4 4 4 4 4 4r   r   c                   Z    e Zd ZdZdedef         dej        dej        ej	        z  fdZ
dS )GetTaskResultHandlerFnTzuHandler for tasks/result requests from server.

    WARNING: This is experimental and may change without notice.
    r   r   r   r   c                 
   K   d S r   r   r   s      r   r   z GetTaskResultHandlerFnT.__call__/   s       8;sr   N)r   r   r   r   r	   r   r   GetTaskPayloadRequestParamsGetTaskPayloadResultr    r   r   r   r   r"   r"   )   se         
; 45; 1; 
	#eo	5	; ; ; ; ; ;r   r"   c                   `    e Zd ZdZdedef         dej        dz  dej        ej	        z  fdZ
dS )ListTasksHandlerFnTzsHandler for tasks/list requests from server.

    WARNING: This is experimental and may change without notice.
    r   r   r   Nr   c                 
   K   d S r   r   r   s      r   r   zListTasksHandlerFnT.__call__<   s       36#r   )r   r   r   r   r	   r   r   PaginatedRequestParamsListTasksResultr    r   r   r   r   r'   r'   6   sj         
6 456 ,t36 
		0	6 6 6 6 6 6r   r'   c                   Z    e Zd ZdZdedef         dej        dej        ej	        z  fdZ
dS )CancelTaskHandlerFnTzuHandler for tasks/cancel requests from server.

    WARNING: This is experimental and may change without notice.
    r   r   r   r   c                 
   K   d S r   r   r   s      r   r   zCancelTaskHandlerFnT.__call__I   s       473r   N)r   r   r   r   r	   r   r   CancelTaskRequestParamsCancelTaskResultr    r   r   r   r   r,   r,   C   se         
7 457 -7 
	%/	1	7 7 7 7 7 7r   r,   c            	       h    e Zd ZdZdedef         dej        dej        dej	        ej
        z  fdZdS )	TaskAugmentedSamplingFnTaR  Handler for task-augmented sampling/createMessage requests from server.

    When server sends a CreateMessageRequest with task field, this callback
    is invoked. The callback should create a task, spawn background work,
    and return CreateTaskResult immediately.

    WARNING: This is experimental and may change without notice.
    r   r   r   task_metadatar   c                 
   K   d S r   r   r   r   r   r2   s       r   r   z!TaskAugmentedSamplingFnT.__call__Z         
 473r   N)r   r   r   r   r	   r   r   CreateMessageRequestParamsTaskMetadataCreateTaskResultr    r   r   r   r   r1   r1   P   sr         7 457 07 )	7
 
	%/	17 7 7 7 7 7r   r1   c            	       h    e Zd ZdZdedef         dej        dej        dej	        ej
        z  fdZdS )	TaskAugmentedElicitationFnTaH  Handler for task-augmented elicitation/create requests from server.

    When server sends an ElicitRequest with task field, this callback
    is invoked. The callback should create a task, spawn background work,
    and return CreateTaskResult immediately.

    WARNING: This is experimental and may change without notice.
    r   r   r   r2   r   c                 
   K   d S r   r   r4   s       r   r   z$TaskAugmentedElicitationFnT.__call__l   r5   r   N)r   r   r   r   r	   r   r   ElicitRequestParamsr7   r8   r    r   r   r   r   r:   r:   b   sr         7 457 )7 )	7
 
	%/	17 7 7 7 7 7r   r:   r   r   r   r   c                 F   K   t          j        t           j        d          S )Nztasks/get not supportedcodemessager   r    METHOD_NOT_FOUNDr   r   s     r   default_get_task_handlerrD   t   s*       ?#)   r   c                 F   K   t          j        t           j        d          S )Nztasks/result not supportedr>   rA   rC   s     r   default_get_task_result_handlerrF   ~   *       ?#,   r   c                 F   K   t          j        t           j        d          S )Nztasks/list not supportedr>   rA   rC   s     r   default_list_tasks_handlerrI      s*       ?#*   r   c                 F   K   t          j        t           j        d          S )Nztasks/cancel not supportedr>   rA   rC   s     r   default_cancel_task_handlerrK      rG   r   r2   c                 F   K   t          j        t           j        d          S )Nz%Task-augmented sampling not supportedr>   r   r    INVALID_REQUESTr   r   r2   s      r   default_task_augmented_samplingrP      s*      
 ?"7   r   c                 F   K   t          j        t           j        d          S )Nz(Task-augmented elicitation not supportedr>   rM   rO   s      r   "default_task_augmented_elicitationrR      s*      
 ?":   r   c                   n   e Zd ZU dZ ee          Zeed<    ee	          Z
eed<    ee          Zeed<    ee          Zeed<    ee          Zeed<    ee          Zeed<   d	ej        d
z  fdZedej        d	efd            Zdede f         de!ej        ej"        f         d	d
fdZ#d
S )ExperimentalTaskHandlersaB  Container for experimental task handlers.

    Groups all task-related handlers that handle server -> client requests.
    This includes both pure task requests (get, list, cancel, result) and
    task-augmented request handlers (sampling, elicitation with task field).

    WARNING: These APIs are experimental and may change without notice.

    Example:
        handlers = ExperimentalTaskHandlers(
            get_task=my_get_task_handler,
            list_tasks=my_list_tasks_handler,
        )
        session = ClientSession(..., experimental_task_handlers=handlers)
    )defaultget_taskget_task_result
list_taskscancel_taskaugmented_samplingaugmented_elicitationr   Nc                    | j         t          u}| j        t          u}| j        t
          u}| j        t          u}t          ||||g          sdS d}|s|rft          j
        |r&t          j        t          j                              nd|r&t          j        t          j                              nd          }t          j        |rt          j                    nd|rt          j                    nd|          S )a4  Build ClientTasksCapability from the configured handlers.

        Returns a capability object that reflects which handlers are configured
        (i.e., not using the default "not supported" handlers).

        Returns:
            ClientTasksCapability if any handlers are provided, None otherwise
        N)createMessage)create)samplingelicitation)listcancelrequests)rX   rI   rY   rK   rZ   rP   r[   rR   anyr   ClientTasksRequestsCapabilityTasksSamplingCapabilityTasksCreateMessageCapabilityTasksElicitationCapability TasksCreateElicitationCapabilityClientTasksCapabilityTasksListCapabilityTasksCancelCapability)r   has_list
has_cancelhas_samplinghas_elicitationrequests_capabilitys         r   build_capabilityz)ExperimentalTaskHandlers.build_capability   s%    ?*DD%-HH
.6UU4<^^ Hj,HII 	4 KO 	? 	"'"E6UEgEiEijjjj"E<EDjDlDlmmmm# # # *08B*,,,d4>H5.000D(
 
 
 	
r   requestc                     t          | j        t          j        t          j        z  t          j        z  t          j        z            S )z5Check if this handler handles the given request type.)
isinstancerootr   GetTaskRequestGetTaskPayloadRequestListTasksRequestCancelTaskRequest)rs   s    r   handles_requestz(ExperimentalTaskHandlers.handles_request   s:     L 5#>>AWWZ_Zqq
 
 	
r   ctxr   	responderc                   K   t          t          j        t          j        z            }|j        j        xt          j        d xR\  } |                     ||           d{V }|                    |          }|	                    |           d{V  dS  xt          j
        d xR\  } |                     ||           d{V }|                    |          }|	                    |           d{V  dS  xt          j        d xR\  } |                     ||           d{V }|                    |          }|	                    |           d{V  dS  t          j        d xQ\  }|                     ||           d{V }|                    |          }|	                    |           d{V  dS  	 t!          dt#          |j        j                             )zHandle a task-related request from the server.

        Call handles_request() first to check if this handler can handle the request.
        )r   NzUnhandled request type: )r   r   ClientResultr    rs   rv   rw   rV   validate_pythonrespondrx   rW   ry   rX   rz   rY   
ValueErrortype)r   r|   r}   client_response_typer   responseclient_responses          r   handle_requestz'ExperimentalTaskHandlers.handle_request   st      S^0S
 S
 $4%44444VV!%sF!;!;;;;;;;"6"F"Fx"P"P''88888888888 5
 <,;;;;;FF!%!5!5c6!B!BBBBBBB"6"F"Fx"P"P''88888888888 <
 7'66666vv!%f!=!======="6"F"Fx"P"P''88888888888 7
 (77777!%!1!1#v!>!>>>>>>>"6"F"Fx"P"P''88888888888 8
  !ZDARAW<X<X!Z!Z[[[r   )$r   r   r   r   r   rD   rV   r   __annotations__rF   rW   r"   rI   rX   r'   rK   rY   r,   rP   rZ   r1   rR   r[   r:   r   rj   rr   staticmethodServerRequestboolr{   r	   r   r
   r   r   r   r   r   rT   rT      s         " #(%0H"I"I"IHIII/4u=\/]/]/]O,]]]&+e4N&O&O&OJ#OOO(-6Q(R(R(RK%RRR 495A`3a3a3a0aaa9>Gi9j9j9j6jjj"
%"="D "
 "
 "
 "
H 
!4 
 
 
 
 \
#\OS01#\ $E$79K$KL#\ 
	#\ #\ #\ #\ #\ #\r   rT   ).r   dataclassesr   r   typingr   r   r   pydanticr   	mcp.typesr   mcp.shared.contextr	   mcp.shared.sessionr
   mcp.client.sessionr   r   r"   r'   r,   r1   r:   r   r   r    rD   r$   r%   rF   r)   r*   rI   r.   r/   rK   r6   r7   r8   rP   r<   rR   rT   (default_task_augmented_sampling_callback+default_task_augmented_elicitation_callbackr   r   r   <module>r      s    ) ( ( ( ( ( ( ( / / / / / / / / / /                   - - - - - - / / / / / / 1000000
4 
4 
4 
4 
4 
4 
4 
4
; 
; 
; 
; 
;h 
; 
; 
;
6 
6 
6 
6 
6( 
6 
6 
6
7 
7 
7 
7 
78 
7 
7 
77 7 7 7 7x 7 7 7$7 7 7 7 7( 7 7 7$OS01& 5?*   OS01- %/1   OS01(4/ U_,   OS01) eo-   OS01, % eo-	   OS01% % eo-	    j\ j\ j\ j\ j\ j\ j\ j\\ ,K (.P + + +r   