Ë
    ïñþi1  ã                   ó�   — d Z ddlmZ ddlmZmZmZmZmZm	Z	 dedz  de
fd„Zdedz  dee   dz  d	e	dz  ddfd
„Zdee   ddfd„Zy)z»
Shared validation functions for server requests.

This module provides validation logic for sampling and elicitation requests
that is shared across normal and task-augmented code paths.
é    )ÚMcpError)ÚINVALID_PARAMSÚClientCapabilitiesÚ	ErrorDataÚSamplingMessageÚToolÚ
ToolChoiceÚclient_capsNÚreturnc                 óR   — | €y| j                   €y| j                   j                  €yy)zÒ
    Check if the client supports sampling tools capability.

    Args:
        client_caps: The client's declared capabilities

    Returns:
        True if client supports sampling.tools, False otherwise
    FT)ÚsamplingÚtools)r
   s    úU/root/aria/mcps/aria-brain/venv/lib/python3.12/site-packages/mcp/server/validation.pyÚcheck_sampling_tools_capabilityr      s4   € ð ÐØØ×ÑÐ#ØØ×Ñ×!Ñ!Ð)ØØó    r   Útool_choicec                 óX   — |€|�&t        | «      st        t        t        d¬«      «      ‚yy)a\  
    Validate that the client supports sampling tools if tools are being used.

    Args:
        client_caps: The client's declared capabilities
        tools: The tools list, if provided
        tool_choice: The tool choice setting, if provided

    Raises:
        McpError: If tools/tool_choice are provided but client doesn't support them
    Nz1Client does not support sampling tools capability)ÚcodeÚmessage)r   r   r   r   )r
   r   r   s      r   Úvalidate_sampling_toolsr   &   s<   € ð  Ð˜KÐ3Ü.¨{Ô;ÜÜÜ'ØOôóð ð <ð 4r   Úmessagesc                 ó  — | sy| d   j                   }t        d„ |D «       «      }t        | «      dk\  r| d   j                   nd}|xr t        d„ |D «       «      }|r7t        d„ |D «       «      rt        d«      ‚|€t        d	«      ‚|st        d
«      ‚|rf|rc|D �ch c]  }|j                  dk(  sŒ|j
                  ’Œ  }}|D �ch c]  }|j                  dk(  sŒ|j                  ’Œ  }}||k7  rt        d«      ‚yyyc c}w c c}w )a  
    Validate tool_use/tool_result message structure per SEP-1577.

    This validation ensures:
    1. Messages with tool_result content contain ONLY tool_result content
    2. tool_result messages are preceded by a message with tool_use
    3. tool_result IDs match the tool_use IDs from the previous message

    See: https://github.com/modelcontextprotocol/modelcontextprotocol/issues/1577

    Args:
        messages: The list of sampling messages to validate

    Raises:
        ValueError: If the message structure is invalid
    Néÿÿÿÿc              3   ó:   K  — | ]  }|j                   d k(  –— Œ y­w©Útool_resultN©Útype©Ú.0Úcs     r   ú	<genexpr>z4validate_tool_use_result_messages.<locals>.<genexpr>U   s   è ø€ ÒI°q˜1Ÿ6™6 ]Õ2ÑIùó   ‚é   éþÿÿÿc              3   ó:   K  — | ]  }|j                   d k(  –— Œ y­w)Útool_useNr   r   s     r   r"   z4validate_tool_use_result_messages.<locals>.<genexpr>X   s   è ø€ Ò4dÈa°Q·V±V¸zÕ5IÑ4dùr#   c              3   ó:   K  — | ]  }|j                   d k7  –— Œ y­wr   r   r   s     r   r"   z4validate_tool_use_result_messages.<locals>.<genexpr>]   s   è ø€ Ò=¨1ˆq�v‰v˜Õ&Ñ=ùr#   zHThe last message must contain only tool_result content if any is presentz;tool_result requires a previous message containing tool_usezDtool_result blocks do not match any tool_use in the previous messager'   r   zPids of tool_result blocks and tool_use blocks from previous message do not match)Úcontent_as_listÚanyÚlenÚ
ValueErrorr   ÚidÚ	toolUseId)r   Úlast_contentÚhas_tool_resultsÚprevious_contentÚhas_previous_tool_user!   Útool_use_idsÚtool_result_idss           r   Ú!validate_tool_use_result_messagesr5   @   s  € ñ" Øà˜B‘<×/Ñ/€LÜÑI¸LÔIÓIÐä7:¸8³}ÈÒ7I�x ‘|×3Ò3ÈtÐØ,Òd´Ñ4dÐScÔ4dÓ1dÐáô Ñ=°Ô=Ô=ÜÐgÓhÐhØÐ#ÜÐZÓ[Ð[Ù$ÜÐcÓdÐdáÑ!1Ø&6ÖO ¸!¿&¹&ÀJÓ:N˜Ÿ›ÐOˆÐOØ0<ÖX¨1ÀÇÁÈ-Ó@W˜1Ÿ;›;ÐXˆÐXØ˜?Ò*ÜÐoÓpÐpð +ð "2ÐùÚOùÚXs   ÂC<Â0C<ÃDÃD)Ú__doc__Úmcp.shared.exceptionsr   Ú	mcp.typesr   r   r   r   r   r	   Úboolr   Úlistr   r5   © r   r   ú<module>r<      s‰   ðñõ +÷÷ ðÐ1CÀdÑ1Jð Ètó ð&Ø# dÑ*ðà�‰:˜Ñðð ˜dÑ"ðð 
ó	ð4(q°°_Ñ0Eð (qÈ$ô (qr   