o
    i                  
   @   s   d dl Z d dlmZ d dlmZ ddlmZmZ zd dlm	Z
 W n ey1 Z zededZ[ww de
jd	eej fd
dZdeej d	eeee
j f fddZdejd	e
jfddZde
je
jB e
jB d	ejfddZdS )    N)Sequence)Literal   )
exceptionsmessages)typesu   Please install the `mcp` package to use the MCP server, you can use the `mcp` optional group — `pip install "pydantic-ai-slim[mcp]"`paramsreturnc                 C   s   g }g }| j r|tj| j d g }| jD ]L}|j}|jdkrN|r-|tj|d g }t|tj	r7|j
}ntjt|j|jdg}|tj|d q|r[|tj|d g }|t| q|rn|tj|d |ry|tj|d |S )zKConvert from MCP create message request parameters to pydantic-ai messages.contentuser)parts)data
media_type)systemPromptappendr   SystemPromptPartr   roleModelResponse
isinstance	mcp_typesTextContenttextBinaryContentbase64	b64decoder   mimeTypeUserPromptPartModelRequestmap_from_sampling_content)r   pai_messagesrequest_partsresponse_partsmsgr   user_part_content r%   V/var/www/html/karishye-ai-python/venv/lib/python3.10/site-packages/pydantic_ai/_mcp.pymap_from_mcp_params   s2   

r'   r    c              
      sB  g  dt d dtjtjB tjB f fdd}g }| D ]}t|tjr|jdur-|	|j |j
D ]`}t|tjr>|	|j t|tjrt|jtrV|dtjd|jd	 q0|jD ]6}t|trk|dtjd|d	 qYt|tjr|jr|dtjd
t|j |jd qYtdt| q0q|dt| qd| fS )zConvert from pydantic-ai messages to MCP sampling messages.

    Returns:
        A tuple containing the system prompt and a list of sampling messages.
    r   )r   	assistantr   c                    s     tj| |d d S )Nr   r   )r   r   SamplingMessager)   sampling_msgsr%   r&   add_msgA   s   z&map_from_pai_messages.<locals>.add_msgNr   r   typer   image)r/   r   r   zUnsupported content type: r(    )r   r   r   ImageContentAudioContentr   r   r   instructionsr   r   r   r   r   strr   is_imager   r   r   decoder   NotImplementedErrorr/   map_from_model_responsejoin)r    r-   system_promptpai_messagepartchunkr%   r+   r&   map_from_pai_messages9   sD   




r?   model_responsec                 C   sT   g }| j D ]}t|tjr||j qtdt|j	 dt
jdd|dS )z2Convert from a model response to MCP text content.zUnexpected part type: z, expected TextPartr   r1   r.   )r   r   r   TextPartr   r   r   UnexpectedModelBehaviorr/   __name__r   r   r:   )r@   
text_partsr=   r%   r%   r&   r9   h   s   
r9   r   c                 C   s"   t | tjrtj| jdS td)z9Convert from sampling content to a pydantic-ai text part.r
   z;Image and Audio responses in sampling are not yet supported)r   r   r   r   rA   r   r8   r
   r%   r%   r&   r   t   s   r   )r   collections.abcr   typingr   r1   r   r   mcpr   r   ImportError_import_errorCreateMessageRequestParamslistModelMessager'   tupler5   r*   r?   r   r   r9   r2   r3   rA   r   r%   r%   r%   r&   <module>   s,    &)/