XjdZddlmZddlmZmZmZddlmZddl m Z erddl m Z edejZGd d Zy) a Experimental client-side task support. This module provides client methods for interacting with MCP tasks. WARNING: These APIs are experimental and may change without notice. Example: # Call a tool as a task result = await session.experimental.call_tool_as_task("tool_name", {"arg": "value"}) task_id = result.task.taskId # Get task status status = await session.experimental.get_task(task_id) # Get task result when complete if status.status == "completed": result = await session.experimental.get_task_result(task_id, CallToolResult) # List all tasks tasks = await session.experimental.list_tasks() # Cancel a task await session.experimental.cancel_task(task_id) ) AsyncIterator) TYPE_CHECKINGAnyTypeVarN)poll_until_terminal) ClientSessionResultT)boundc .eZdZdZddZ dddddedeeefdzd ed eeefdzde jf d Z d ede jfd Z d edeedefdZ ddedzde j"fdZd ede j&fdZd edee jfdZy)ExperimentalClientFeaturesz Experimental client features for tasks and other experimental APIs. WARNING: These APIs are experimental and may change without notice. Access via session.experimental: status = await session.experimental.get_task(task_id) returnNc||_yN)_session)selfsessions q/mnt/ssd/data/Dropbox/adrian/vault-secondbrain/venv/lib/python3.12/site-packages/mcp/client/experimental/tasks.py__init__z#ExperimentalClientFeatures.__init__1s  i`)ttlmetaname argumentsrrc \Kd}|tjjdi|}|jj tj tj tj||tj||tjd{S7w)aCall a tool as a task, returning a CreateTaskResult for polling. This is a convenience method for calling tools that support task execution. The server will return a task reference instead of the immediate result, which can then be polled via `get_task()` and retrieved via `get_task_result()`. Args: name: The tool name arguments: Tool arguments ttl: Task time-to-live in milliseconds (default: 60000 = 1 minute) meta: Optional metadata to include in the request Returns: CreateTaskResult containing the task reference Example: # Create task result = await session.experimental.call_tool_as_task( "long_running_tool", {"input": "data"} ) task_id = result.task.taskId # Poll for completion while True: status = await session.experimental.get_task(task_id) if status.status == "completed": break await asyncio.sleep(0.5) # Get result final = await session.experimental.get_task_result(task_id, CallToolResult) N)r)rrtask_metaparams) types RequestParamsMetar send_request ClientRequestCallToolRequestCallToolRequestParams TaskMetadataCreateTaskResult)rrrrrrs rcall_tool_as_taskz,ExperimentalClientFeatures.call_tool_as_task4sP26  '',,4t4E]]//   %% 66!"+"//C8#    " "    sB#B,%B*&B,task_idc K|jjtjtjtj |tj d{S7w)z Get the current status of a task. Args: task_id: The task identifier Returns: GetTaskResult containing the task status and metadata taskIdrN)rr#r r$GetTaskRequestGetTaskRequestParams GetTaskResultrr*s rget_taskz#ExperimentalClientFeatures.get_taskns^]]//   $$ 55WE         A)A2+A0,A2 result_typec K|jjtjtjtj ||d{S7w)a Get the result of a completed task. The result type depends on the original request type: - tools/call tasks return CallToolResult - Other request types return their corresponding result type Args: task_id: The task identifier result_type: The expected result type (e.g., CallToolResult) Returns: The task result, validated against result_type r,rN)rr#r r$GetTaskPayloadRequestGetTaskPayloadRequestParams)rr*r4s rget_task_resultz*ExperimentalClientFeatures.get_task_resultsX&]]//   ++ <rBrCrrFrrrr r 's ,08 &* 8 8 S>D(8  8 38nt# 8    8 t c e.A.A &  ']    <" d      *  1G1G &s}U=P=P/Qrr )rJcollections.abcrtypingrrr mcp.typesr %mcp.shared.experimental.tasks.pollingrmcp.client.sessionrResultr r rrrrUs=4*..E0 )5<< 0yyr