
    i                        d dl mZmZ d dlZd dl Z d dlmZ d dl mZmZ d dlm	Z	 d dl
mZmZmZmZ d dlmZ d dlmZmZmZmZmZ  ej.                  e      Z G d	 d
e j4                        Z G d de      Z G d de      Zy)    )OptionalUnionN)AsyncExitStack)ProtocolAny)ClientSession)ListPromptsResultEmbeddedResourceImageContentTextContent)MCPException)FunctionToolFunctionSystemMessageTypedDictAssistantMessageTypedDictTextChunkTypedDictc                   8    e Zd ZU ee   ed<   eeee	f      ed<   y)MCPSystemPromptdescriptionmessagesN)
__name__
__module____qualname__r   str__annotations__listr   r   r        V/var/www/html/eduruby.in/venv/lib/python3.12/site-packages/mistralai/extra/mcp/base.pyr   r      s#    #5/1JJKLLr   r   c                       e Zd ZU dZeed<   dee   ddfdZddZ	de
e   fdZd	ed
ede
e   fdZd	ed
eeef   defdZdefdZy)MCPClientProtocolz9MCP client that converts MCP artifacts to Mistral format._name
exit_stackreturnNc                    K   y wNr   selfr#   s     r   
initializezMCPClientProtocol.initialize    	        c                    K   y wr&   r   r(   s    r   aclosezMCPClientProtocol.aclose#   r*   r+   c                    K   y wr&   r   r-   s    r   	get_toolszMCPClientProtocol.get_tools&   r*   r+   name	argumentsc                    K   y wr&   r   r(   r1   r2   s      r   execute_toolzMCPClientProtocol.execute_tool)         	r+   c                    K   y wr&   r   r4   s      r   get_system_promptz#MCPClientProtocol.get_system_prompt.   r6   r+   c                    K   y wr&   r   r-   s    r   list_system_promptsz%MCPClientProtocol.list_system_prompts3   r*   r+   )r$   N)r   r   r   __doc__r   r   r   r   r)   r.   r   r   r0   dictr   r5   r   r   r8   r	   r:   r   r   r   r!   r!      s    CJ8N+C  l!3 $(	 	!
$(cN	
+< r   r!   c                   
   e Zd ZU dZeed<   ddee   fdZde	e
eef   defdZd	ee	e
eef      dee   fd
Zdee   fdZdedeeef   dee   fdZdedeeef   defdZdefdZddee   ddfdZd Zd Zd ZdefdZy)MCPClientBasezHBase class to implement functionalities from an initialized MCP session._sessionNr1   c                 ^    |xs | j                   j                  | _        d | _        d| _        y )NF)	__class__r   r"   _exit_stack_is_initialized)r(   r1   s     r   __init__zMCPClientBase.__init__<   s(    4T^^44
59$r   mcp_contentr$   c                 T    |j                   dk(  st        d      d|j                  dS )Ntextz,Only supporting text tool responses for now.)typerG   )rH   r   rG   )r(   rE   s     r   _convert_contentzMCPClientBase._convert_contentA   s/     6)MNN(8(899r   mcp_contentsc                 X    g }|D ]"  }|j                  | j                  |             $ |S r&   )appendrI   )r(   rJ   content_chunksrE   s       r   _convert_content_listz#MCPClientBase._convert_content_listH   s9     ' 	FK!!$"7"7"DE	Fr   c                 
  K   | j                   j                          d {   }g }|j                  D ]I  }|j                  t	        dt        |j                  |j                  |j                  d                   K |S 7 `w)NfunctionT)r1   r   
parametersstrict)rH   rP   )	r?   
list_toolstoolsrL   r   r   r1   r   inputSchema)r(   	mcp_toolsrT   mcp_tools       r   r0   zMCPClientBase.get_toolsP   sz     --2244	! 	HLL#%%]]$,$8$8#+#7#7#	
	  5s   BBA!Br2   c                    K   | j                   j                  ||       d {   }| j                  |j                        S 7 w)Nr1   r2   )r?   	call_toolrN   content)r(   r1   r2   contentss       r   r5   zMCPClientBase.execute_toola   sA      00di0PP))(*:*:;; Qs   !AA Ac                 H  K   | j                   j                  ||       d {   }|j                  |j                  D cg c]P  }t	        j
                  t        t        t        f   |j                  | j                  |j                        d      R c}dS 7 wc c}w w)NrY   )rE   )roler[   )r   r   )r?   
get_promptr   r   typingcastr   r   r   r^   rI   r[   )r(   r1   r2   prompt_resultmessages        r   r8   zMCPClientBase.get_system_promptg   s      #mm66DI6VV(44  -55	  02KKL '#'#8#8W__#8#U	
 	
 W	s"   !B"BB"ABB"B"c                 R   K   | j                   j                          d {   S 7 wr&   )r?   list_promptsr-   s    r   r:   z!MCPClientBase.list_system_promptsy   s     ]]//1111s   '%'r#   c                 @  K   | j                   ry|t               | _        | j                  }| j                  |       d{   }|j	                  t        |d   |d                d{   }|j                          d{    || _        d| _         y7 U7 -7 w)zInitialize the MCP session.N)r#   r      )read_streamwrite_streamT)rC   r   rB   _get_transportenter_async_contextr   r)   r?   )r(   r#   stdio_transportmcp_sessions       r   r)   zMCPClientBase.initialize|   s      -/D))J $ 3 3z 3 JJ&::+A.,Q/
 
 $$&&&## K
 	's6   A BB)B,B-BBBBBc                 n   K   | j                   r#| j                   j                          d{    yy7 w)zClose the MCP session.N)rB   r.   r-   s    r   r.   zMCPClientBase.aclose   s/     ""))+++ +s   *535c                 j    d| j                   j                   d| j                  dt        |       ddS )N<z name=z id=0xx>)rA   r   r"   idr-   s    r   __repr__zMCPClientBase.__repr__   s3    4>>**+6$**vbhq\QRSSr   c                 N    | j                   j                   d| j                   dS )Nz(name=))rA   r   r"   r-   s    r   __str__zMCPClientBase.__str__   s$    ..))*&A>>r   c                    K   t         wr&   )NotImplementedErrorr'   s     r   rj   zMCPClientBase._get_transport   s     !!s   	r&   ) r   r   r   r;   r   r   r   r   rD   r   r   r   r
   r   rI   r   rN   r   r0   r<   r   r5   r   r8   r	   r:   r   r)   r.   rt   rw   rj   r   r   r   r>   r>   7   s   R%Xc] %
: l<L!LM:	: {LBR'R!ST	 	!l!3 "<<$(cN<	 	!<

$(cN
	
$2+< 2$8N+C $t $&,
T?"~ "r   r>   )r`   r   r   logging
contextlibr   r   r   mcpr   	mcp.typesr	   r
   r   r   mistralai.extra.exceptionsr   mistralai.modelsr   r   r   r   r   	getLoggerr   logger	TypedDictr   r!   r>   r   r   r   <module>r      sm    "   %    T T 3  
		8	$Mf&& M
 8d"% d"r   