Ë
    ÂÓ^j[C  ã                   ój  — U d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
mZmZmZmZ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mZmZmZ d	dlmZ ddl m!Z! e	rd dl"m#Z#  ejH                  e%«      Z&e'Z(ee)d<   ed   Z*ee)d<    G d„ de«      Z+ G d„ de«      Z, G d„ de«      Z- G d„ d«      Z.y)é    N)ÚAsyncExitStack)Ú	timedelta)ÚPath)ÚTYPE_CHECKINGÚAnyÚAsyncIterableÚLiteralÚOptionalÚ	TypedDictÚUnionÚoverload)ÚNotRequiredÚ	TypeAliasÚUnpacké   )Úget_hf_hub_versioné   )ÚAsyncInferenceClient)ÚChatCompletionInputMessageÚChatCompletionInputToolÚChatCompletionStreamOutputÚ'ChatCompletionStreamOutputDeltaToolCall)ÚPROVIDER_OR_POLICY_Té   )Úformat_result)ÚClientSessionÚToolName)ÚstdioÚsseÚhttpÚ
ServerTypec                   ód   — e Zd ZU eed<   eee      ed<   eeeef      ed<   eeee	df      ed<   y)ÚStdioServerParameters_TÚcommandÚargsÚenvNÚcwd)
Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   ÚlistÚdictr   r   © ó    út/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/huggingface_hub/inference/_mcp/mcp_client.pyr#   r#   !   s?   … ØƒLØ
�d˜3‘iÑ
 Ó Ø	�T˜#˜s˜(‘^Ñ	$Ó$Ø	�U˜3  d˜?Ñ+Ñ	,Ô,r0   r#   c                   óR   — e Zd ZU eed<   eeeef      ed<   ee   ed<   ee   ed<   y)ÚSSEServerParameters_TÚurlÚheadersÚtimeoutÚsse_read_timeoutN)	r(   r)   r*   r+   r,   r   r.   r   Úfloatr/   r0   r1   r3   r3   (   s0   … Ø	ƒHØ˜˜c 3˜h™Ñ(Ó(Ø˜ÑÓØ! %Ñ(Ô(r0   r3   c                   ób   — e Zd ZU eed<   eeeef      ed<   ee   ed<   ee   ed<   ee	   ed<   y)ÚStreamableHTTPParameters_Tr4   r5   r6   r7   Úterminate_on_closeN)
r(   r)   r*   r+   r,   r   r.   r   r   Úboolr/   r0   r1   r:   r:   /   s;   … Ø	ƒHØ˜˜c 3˜h™Ñ(Ó(Ø˜Ñ#Ó#Ø! )Ñ,Ó,Ø# DÑ)Ô)r0   r:   c                   ó*  — e Zd ZdZdddddœdee   dee   dee   dee   fd„Zd	„ Zd
„ Z	d„ Z
eded   dee   fd„«       Zeded   dee   fd„«       Zeded   dee   fd„«       Zdedefd„Z	 	 ddeeeef      deee      dedeeeef      fd„Zy)Ú	MCPClienta–  
    Client for connecting to one or more MCP servers and processing chat completions with tools.

    > [!WARNING]
    > This class is experimental and might be subject to breaking changes in the future without prior notice.

    Args:
        model (`str`, `optional`):
            The model to run inference with. Can be a model id hosted on the Hugging Face Hub, e.g. `meta-llama/Meta-Llama-3-8B-Instruct`
            or a URL to a deployed Inference Endpoint or other local or remote endpoint.
        provider (`str`, *optional*):
            Name of the provider to use for inference. Defaults to "auto" i.e. the first of the providers available for the model, sorted by the user's order in https://hf.co/settings/inference-providers.
            If model is a URL or `base_url` is passed, then `provider` is not used.
        base_url (`str`, *optional*):
            The base URL to run inference. Defaults to None.
        api_key (`str`, `optional`):
            Token to use for authentication. Will default to the locally Hugging Face saved token if not provided. You can also use your own provider API key to interact directly with the provider's service.
    N)ÚmodelÚproviderÚbase_urlÚapi_keyr?   r@   rA   rB   c                óš   — i | _         t        «       | _        g | _        |€|€t	        d«      ‚|| _        t        |�d n||||¬«      | _        y )NzCAt least one of `model` or `base_url` should be set in `MCPClient`.)r?   r@   rB   rA   )Úsessionsr   Ú
exit_stackÚavailable_toolsÚ
ValueErrorÚpayload_modelr   Úclient)Úselfr?   r@   rA   rB   s        r1   Ú__init__zMCPClient.__init__K   sZ   € ð :<ˆŒÜ(Ó*ˆŒØ>@ˆÔàˆ=˜XÐ-ÜÐbÓcÐcØ"ˆÔÜ*Ø"Ð.‘$°EØØØô	
ˆ�r0   c              ƒ   óž   K  — | j                   j                  «       ƒ d{  –—†  | j                  j                  «       ƒ d{  –—†  | S 7 Œ(7 Œ­w)zEnter the context managerN)rI   Ú
__aenter__rE   ©rJ   s    r1   rM   zMCPClient.__aenter__b   s@   è ø€ à�k‰k×$Ñ$Ó&×&Ð&Ø�o‰o×(Ñ(Ó*×*Ð*Øˆð 	'øØ*ús!   ‚A A	¡!AÁAÁAÁAc              ƒ   óŽ   K  — | j                   j                  |||«      ƒ d{  –—†  | j                  «       ƒ d{  –—†  y7 Œ7 Œ­w)zExit the context managerN)rI   Ú	__aexit__Úcleanup)rJ   Úexc_typeÚexc_valÚexc_tbs       r1   rP   zMCPClient.__aexit__h   s:   è ø€ à�k‰k×#Ñ# H¨g°vÓ>×>Ð>Ø�l‰l‹n×Ñð 	?øØús   ‚!A£A¤A»A¼AÁAc              ƒ   óœ   K  — | j                   j                  «       ƒ d{  –—†  | j                  j                  «       ƒ d{  –—†  y7 Œ'7 Œ­w)zClean up resourcesN)rI   ÚcloserE   ÚacloserN   s    r1   rQ   zMCPClient.cleanupm   s;   è ø€ à�k‰k×ÑÓ!×!Ð!Ø�o‰o×$Ñ$Ó&×&Ñ&ð 	"øØ&ús!   ‚A A¡!AÁA
ÁAÁ
AÚtyper   Úparamsc              ‹   ó   K  — y ­w©Nr/   ©rJ   rX   rY   s      r1   Úadd_mcp_serverzMCPClient.add_mcp_serverr   s	   è ø€ Øgjùó   ‚r   c              ‹   ó   K  — y ­wr[   r/   r\   s      r1   r]   zMCPClient.add_mcp_serveru   s	   è ø€ Øcfùr^   r    c              ‹   ó   K  — y ­wr[   r/   r\   s      r1   r]   zMCPClient.add_mcp_serverx   s	   è ø€ Øilùr^   c              ‹   ó¸  K  — ddl m}m} ddl m} |j	                  dd«      }|dk(  r’ddlm} t        j                  d|d	   › d
|j                  dg «      › �«       d	|d	   i}dD ]  }	|j                  |	«      €Œ||	   ||	<   Œ  |d$i |¤Ž}
| j                  j                   ||
«      «      ƒ d{  –—† \  }}�n|dk(  rvddlm} t        j                  d|d   › �«       d|d   i}dD ]  }	|j                  |	«      €Œ||	   ||	<   Œ | j                  j                   |d$i |¤Ž«      ƒ d{  –—† \  }}nŠ|dk(  rwddlm} t        j                  d|d   › �«       d|d   i}dD ]  }	|j                  |	«      €Œ||	   ||	<   Œ | j                  j                   |d$i |¤Ž«      ƒ d{  –—† \  }}}nt!        d|› �«      ‚| j                  j                   ||||j#                  dt%        «       ¬«      ¬«      «      ƒ d{  –—† }t        j'                  d«       |j)                  «       ƒ d{  –—†  |j+                  «       ƒ d{  –—† }t        j'                  d|j,                  D �cg c]  }|j.                  ‘Œ c}«       |j,                  }|�z|j,                  D �cg c]  }|j.                  |v sŒ|‘Œ }}t        j'                  dt1        |«      › dt1        |j,                  «      › d|D �cg c]  }|j.                  ‘Œ c}› �«       |D ]ª  }|j.                  | j2                  v r$t        j5                  d|j.                  › d �«       Œ?|| j2                  |j.                  <   | j6                  j9                  t;        j<                  d!|j.                  |j>                  |j@                  d"œd#œ«      «       Œ¬ y7 �Œ	7 �Œ�7 �Œ7 �ŒÃ7 �Œ™7 �Œ„c c}w c c}w c c}w ­w)%a™  Connect to an MCP server

        Args:
            type (`str`):
                Type of the server to connect to. Can be one of:
                - "stdio": Standard input/output server (local)
                - "sse": Server-sent events (SSE) server
                - "http": StreamableHTTP server
            **params (`dict[str, Any]`):
                Server parameters that can be either:
                    - For stdio servers:
                        - command (str): The command to run the MCP server
                        - args (list[str], optional): Arguments for the command
                        - env (dict[str, str], optional): Environment variables for the command
                        - cwd (Union[str, Path, None], optional): Working directory for the command
                        - allowed_tools (list[str], optional): List of tool names to allow from this server
                    - For SSE servers:
                        - url (str): The URL of the SSE server
                        - headers (dict[str, Any], optional): Headers for the SSE connection
                        - timeout (float, optional): Connection timeout
                        - sse_read_timeout (float, optional): SSE read timeout
                        - allowed_tools (list[str], optional): List of tool names to allow from this server
                    - For StreamableHTTP servers:
                        - url (str): The URL of the StreamableHTTP server
                        - headers (dict[str, Any], optional): Headers for the StreamableHTTP connection
                        - timeout (timedelta, optional): Connection timeout
                        - sse_read_timeout (timedelta, optional): SSE read timeout
                        - terminate_on_close (bool, optional): Whether to terminate on close
                        - allowed_tools (list[str], optional): List of tool names to allow from this server
        r   )r   ÚStdioServerParameters)ÚtypesÚallowed_toolsNr   )Ústdio_clientz-Connecting to stdio MCP server with command: r$   ú r%   )r%   r&   r'   r   )Ú
sse_clientz!Connecting to SSE MCP server at: r4   )r5   r6   r7   r    )Ústreamablehttp_clientz,Connecting to StreamableHTTP MCP server at: )r5   r6   r7   r;   zUnsupported server type: zhuggingface_hub.MCPClient)ÚnameÚversion)Úread_streamÚwrite_streamÚclient_infozInitializing session...zConnected to server with tools:zTool filtering applied. Using z of z available tools: zTool 'z.' already defined by another server. Skipping.Úfunction)ri   ÚdescriptionÚ
parameters)rX   rn   r/   )!Úmcpr   rb   rc   ÚpopÚmcp.client.stdiore   ÚloggerÚinfoÚgetrE   Úenter_async_contextÚmcp.client.sserg   Úmcp.client.streamable_httprh   rG   ÚImplementationr   ÚdebugÚ
initializeÚ
list_toolsÚtoolsri   ÚlenrD   ÚwarningrF   Úappendr   Úparse_obj_as_instancero   ÚinputSchema)rJ   rX   rY   r   rb   Ú	mcp_typesrd   re   Úclient_kwargsÚkeyÚserver_paramsÚreadÚwriterg   rh   Ú_ÚsessionÚresponseÚtoolÚfiltered_toolss                       r1   r]   zMCPClient.add_mcp_server{   sà  è ø€ ÷> 	=Ý*ð Ÿ
™
 ?°DÓ9ˆð �7Š?å5ä�K‰KÐGÈÈyÑHYÐGZÐZ[Ð\b×\fÑ\fÐgmÐoqÓ\rÐ[sÐtÔuà&¨¨yÑ(9Ð:ˆMØ-ò 5�Ø—:‘:˜c“?Ñ.Ø)/°©�M #Ò&ð5ñ 2ÑB°MÑBˆMØ $§¡× CÑ CÁLÐQ^ÓD_Ó `×`‰KˆD’%Ø�UŠ]å1ä�K‰KÐ;¸FÀ5¹M¸?ÐKÔLà" F¨5¡MÐ2ˆMØAò 5�Ø—:‘:˜c“?Ñ.Ø)/°©�M #Ò&ð5ð !%§¡× CÑ CÁJÑD_ÐQ^ÑD_Ó `×`‰KˆD‘%Ø�VŠ^åHä�K‰KÐFÀvÈeÁ}ÀoÐVÔWà" F¨5¡MÐ2ˆMØWò 5�Ø—:‘:˜c“?Ñ.Ø)/°©�M #Ò&ð5ð $(§?¡?×#FÑ#FÑG\ÑGmÐ_lÑGmÓ#n×n‰NˆD�%™ô Ð8¸¸Ð?Ó@Ð@àŸ™×;Ñ;ÙØ Ø"Ø%×4Ñ4Ø4Ü.Ó0ð 5ó ôó	
÷ 	
ˆô 	�‰Ð.Ô/Ø× Ñ Ó"×"Ð"ð !×+Ñ+Ó-×-ˆÜ�‰Ð6ÈxÏ~É~Ö8^Àt¸¿»Ò8^Ô_ð "Ÿ™ˆàÐ$Ø/7¯~©~Ö\ tÀÇÁÈmÒA[šdÐ\ˆNÐ\Ü�L‰LØ0´°^Ó1DÐ0EÀTÌ#ÈhÏnÉnÓJ]ÐI^Ð^pð  IWö  rXð  AEÐrv×r{Ór{ò  rXð  qYð  Zôð #ò 	ˆDØ�y‰y˜DŸM™MÑ)Ü—‘ ¨¯	©	 {Ð2`ÐaÔbØð (/ˆD�M‰M˜$Ÿ)™)Ñ$ð × Ñ ×'Ñ'Ü'×=Ñ=à *à$(§I¡IØ+/×+;Ñ+;Ø*.×*:Ñ*:ñ%ñó	õñ	ðm aùð aùð oùð
	
ùð 	#ùð .ûÚ8^ùò ]ùò rXùs²   ‚A7OÁ:6OÂ0N9Â1AOÃ>.OÄ,N<Ä-AOÅ9.OÆ'N?Æ(AOÇ?OÈ ,OÈ,OÈ-OÉOÉ"OÉ'O
É:#OÊOÊ1OÊ58OË-OÌ B:OÎ<OÎ?OÏOÏOÏOÏOÚmessagesÚexit_loop_toolsÚexit_if_first_chunk_no_toolÚreturnc                ó6	  K  — | j                   }|�g |¢| j                   ¢}| j                  j                  j                  j	                  | j
                  ||dd¬«      ƒ d{  –—† }dddœ}i }d}|2 3 d{  –—† }	|d	z  }|	j                  r1t        |	j                  «      dkD  r|	j                  d   j                  nd}
|
sŒP|
j                  r|
j                  |d
<   |
j                  r|dxx   |
j                  z  cc<   |
j                  rÎ|
j                  D ]¿  }|j                  }||vr3|||<   ||   j                  j                  €d||   j                  _        ŒF||   j                  j                  €d||   j                  _        |j                  j                  sŒŠ||   j                  xj                  |j                  j                  z  c_        ŒÁ |r|dk  rt        |«      dk(  r y|	­–— �Œ†7 �Œ–7 �Œ…6 |d   s|r–|j                  d
«      dk(  rd|d
<   |rjg }|j!                  «       D ]P  }|j#                  |j$                  d|j                  j&                  |j                  j                  xs ddœdœ«       ŒR ||d<   |j#                  |«       |j!                  «       D �]è  }|j                  j&                  }|€:t)        j*                  d|j$                  ddœ«      }|j#                  |«       |­–— ŒV	 t-        j.                  |j                  j                  xs d«      }n_# t,        j0                  $ rI}d|j$                  |d|› �dœ}t)        j*                  |«      }|j#                  |«       |­–— Y d}~ŒÜd}~ww xY wd|j$                  d|dœ}|rY||D �cg c]  }|j                  j&                  ‘Œ nc c}w c}v r-t)        j*                  |«      }|j#                  |«       |­–—  y| j2                  j                  |«      }|�I	 |j5                  ||«      ƒ d{  –—†7  }t7        |«      |d<   n&# t8        $ r}d|› �|d<   Y d}~nd}~ww xY wd|› �|d<   t)        j*                  |«      }|j#                  |«       |­–— �Œë y­w)au  Process a query using `self.model` and available tools, yielding chunks and tool outputs.

        Args:
            messages (`list[dict]`):
                List of message objects representing the conversation history
            exit_loop_tools (`list[ChatCompletionInputTool]`, *optional*):
                List of tools that should exit the generator when called
            exit_if_first_chunk_no_tool (`bool`, *optional*):
                Exit if no tool is present in the first chunks. Default to False.

        Yields:
            [`ChatCompletionStreamOutput`] chunks or [`ChatCompletionInputMessage`] objects
        NÚautoT)r?   r�   r~   Útool_choiceÚstreamÚunknownÚ )ÚroleÚcontentr   r   r™   rš   r   Ú	assistantrn   z{})ri   Ú	arguments)ÚidrX   rn   Ú
tool_callsr�   z(Invalid tool call with no function name.)r™   Útool_call_idrš   z%Invalid JSON generated by the model: )r™   rŸ   ri   rš   )r™   rŸ   rš   ri   z0Error: MCP tool call failed with error message: z"Error: No session found for tool: )rF   rI   ÚchatÚcompletionsÚcreaterH   Úchoicesr   Údeltar™   rš   rž   Úindexrn   rœ   rv   Úvaluesr�   r�   ri   r   r‚   ÚjsonÚloadsÚJSONDecodeErrorrD   Ú	call_toolr   Ú	Exception)rJ   r�   r�   r‘   r~   rŒ   ÚmessageÚfinal_tool_callsÚnum_of_chunksÚchunkr¤   Ú	tool_callÚidxÚtool_calls_listÚtcÚfunction_nameÚfunction_argsÚerrÚtool_messageÚtool_message_as_objÚtr‹   Úresults                          r1   Úprocess_single_turn_with_toolsz(MCPClient.process_single_turn_with_toolsø   sŸ  è ø€ ð( ×$Ñ$ˆØÐ&Ø=�oÐ=¨×(<Ñ(<Ð=ˆEð Ÿ™×)Ñ)×5Ñ5×<Ñ<Ø×$Ñ$ØØØØð =ó 
÷ 
ˆð ,5ÀÑ"DˆØOQÐØˆð $÷ "	ð "	�%Ø˜QÑˆMØ.3¯mªmÄÀEÇMÁMÓ@RÐUVÒ@V�E—M‘M !Ñ$×*Ò*Ð\`ˆEÙØð �zŠzØ"'§*¡*�˜‘Ø�}Š}Ø˜	Ó" e§m¡mÑ3Ó"ð ×ÒØ!&×!1Ñ!1ò a�IØ#Ÿ/™/�CàÐ"2Ñ2Ø09Ð(¨Ñ-Ø+¨CÑ0×9Ñ9×CÑCÐKØGIÐ,¨SÑ1×:Ñ:ÔDØ à'¨Ñ,×5Ñ5×?Ñ?ÐGØCEÐ(¨Ñ-×6Ñ6Ô@à ×)Ñ)×3Ó3Ø(¨Ñ-×6Ñ6×@Ò@ÀI×DVÑDV×D`ÑD`Ñ`Ö@ðañ  +¨}ÀÒ/AÄcÐJZÓF[Ð_`ÒF`Ùð �Kð_
ùð"	ù˜8ðJ �9ÒÑ!1à�{‰{˜6Ó" iÒ/Ø"-�˜‘áØ8:�Ø*×1Ñ1Ó3ò 
�BØ#×*Ñ*à"$§%¡%Ø$.à(*¯©×(8Ñ(8Ø-/¯[©[×-BÑ-BÒ-JÀdñ)ñõ	ð
ð )8�˜Ñ%Ø�O‰O˜GÔ$ð *×0Ñ0Ó2ó 2	&ˆIØ%×.Ñ.×3Ñ3ˆMØÐ$Ü4×JÑJà &Ø(1¯©Ø#Mñó�ð —‘ Ô(Ø“ØðÜ $§
¡
¨9×+=Ñ+=×+GÑ+GÒ+OÈ4Ó P‘øÜ×'Ñ'ò 
à"Ø$-§L¡LØ)Ø!FÀsÀeÐLñ	 �ô 'A×&VÑ&VÐWcÓ&dÐ#Ø—‘Ð 3Ô4Ø)Ó)Üûð
úð %+¸I¿L¹LÐUWÐanÑoˆLñ  =ÈoÖ4^È°Q·Z±Z·_³_Ñ4^ùÔ4^Ñ#^Ü&@×&VÑ&VÐWcÓ&dÐ#Ø—‘Ð 3Ô4Ø)Ó)Ùð —m‘m×'Ñ'¨Ó6ˆGØÐ"ðgØ#*×#4Ñ#4°]ÀMÓ#R×RÐR�FÜ.;¸FÓ.C�L Ò+øÜ ò gØ0`ÐadÐ`eÐ.f�L Ö+ûðgúð -OÈ}ÈoÐ*^�˜YÑ'ô #=×"RÑ"RÐS_Ó"`ÐØ�O‰OÐ/Ô0Ø%Õ%ñe2	&ùs¬   ‚A RÁ"G8Á#RÁ2G>Á6G;Á7G>Á:D'RÆ"ARÇ;G>Ç>DRÌ-L1Ì0RÌ1NÍ?NÎRÎNÎRÎ(OÏARÐQÐ/P2Ð0QÑRÑ	QÑQÑRÑQÑ:R)NF)r(   r)   r*   Ú__doc__r
   r+   r   rK   rM   rP   rQ   r   r	   r   r#   r]   r3   r:   r!   r   r-   r   r.   r   r   r<   r   r   r»   r/   r0   r1   r>   r>   7   sI  „ ñð,  $Ø37Ø"&Ø!%ò
ð ˜‰}ð
ð Ð/Ñ0ð	
ð
 ˜3‘-ð
ð ˜#‘ó
ò.òò
'ð
 Øj¨°Ñ)9ÐjÀVÐLcÑEdÒjó ØjàØf¨°©ÐfÀ6ÐJ_ÑC`Òfó ØfàØl¨°©ÐlÀFÐKeÑDfÒló Ølð{¨ð {¸só {ð@ DHØ,1ñ	S&à�u˜TÐ#=Ð=Ñ>Ñ?ðS&ð " $Ð'>Ñ"?Ñ@ðS&ð &*ð	S&ð
 
�uÐ7Ð9SÐSÑTÑ	UôS&r0   r>   )/r§   ÚloggingÚ
contextlibr   Údatetimer   Úpathlibr   Útypingr   r   r   r	   r
   r   r   r   Útyping_extensionsr   r   r   Úutils._runtimer   Ú_generated._async_clientr   Ú_generated.typesr   r   r   r   Ú
_providersr   Úutilsr   rq   r   Ú	getLoggerr(   rt   r+   r   r,   r!   r#   r3   r:   r>   r/   r0   r1   ú<module>rÉ      s¡   ðÜ Û Ý %Ý Ý ß c× cÓ cç <Ñ <å 0Ý ;÷ó õ .Ý  ñ Ý!à	ˆ×	Ñ	˜8Ó	$€ð €ˆ)Ó àÐ 6Ñ7€
ˆIÓ 7ô-˜iô -ô)˜Iô )ô* ô *÷T&ò T&r0   