
    h              
       *   d dl Z d dlmZmZmZmZ d dlmZ d dlm	Z
 d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ dedefdZdedefdZ	 ddeded   deee   ee   f   fdZdede
defdZdedefdZdeeef   de
fdZdededefdZy)    N)DictListLiteralUnion)ClientSession)CallToolRequestParams)CallToolResult)Tool)ChatCompletionToolParam)FunctionToolParam)FunctionDefinition)ChatCompletionMessageToolCallmcp_toolreturnc           	      z    t        dt        | j                  | j                  xs d| j                  d            S )z&Convert an MCP tool to an OpenAI tool.function F)namedescription
parametersstrict)typer   )r   r   r   r   inputSchemar   s    a/var/www/Befach/backend/env/lib/python3.12/site-packages/litellm/experimental_mcp_client/tools.py!transform_mcp_tool_to_openai_toolr      s;    "# ,,2++	
     c                 f    t        | j                  | j                  dd| j                  xs d      S )z4Convert an MCP tool to an OpenAI Responses API tool.Fr   r   )r   r   r   r   r   )r   r   r   r   r   s    r   /transform_mcp_tool_to_openai_responses_api_toolr      s3    ]]''((.B r   sessionformat)mcpopenaic                    K   | j                          d{   }|dk(  r$|j                  D cg c]  }t        |       c}S |j                  S 7 9c c}w w)a  
    Load all available MCP tools

    Args:
        session: The MCP session to use
        format: The format to convert the tools to
    By default, the tools are returned in MCP format.

    If format is set to "openai", the tools are converted to OpenAI API compatible tools.
    Nr#   r   )
list_toolstoolsr   )r    r!   r&   tools       r   load_mcp_toolsr(   )   sY      $$&&EIN
AE-t<
 	
 ;; '
s    AAAAAAcall_tool_request_paramsc                 p   K   | j                  |j                  |j                         d{   }|S 7 w)zCall an MCP tool.r   	argumentsN)	call_toolr   r,   )r    r)   tool_results      r   call_mcp_toolr/   C   sA     
  ))%***44 *  K 	s   +646r   c                     | j                  di       }t        |t              r	 t        j                  |      }t        |t              r|S i S # t        j
                  $ r i }Y +w xY w)z2Helper to safely get and parse function arguments.r,   )get
isinstancestrjsonloadsJSONDecodeErrordict)r   r,   s     r   _get_function_argumentsr8   O   sa    ["-I)S!	

9-I #9d39;; ## 	I	s   A A%$A%openai_toolc                 >    | d   }t        |d   t        |            S )zPConvert an OpenAI ChatCompletionMessageToolCall to an MCP CallToolRequestParams.r   r   r+   )MCPCallToolRequestParamsr8   )r9   r   s     r   ;transform_openai_tool_call_request_to_mcp_tool_call_requestr<   Z   s+     :&H#f)(3 r   c                 P   K   t        |      }t        | |       d{   S 7 w)a(  
    Call an OpenAI tool using MCP client.

    Args:
        session: The MCP session to use
        openai_tool: The OpenAI tool to call. You can get this from the `choices[0].message.tool_calls[0]` of the response from the OpenAI API.
    Returns:
        The result of the MCP tool call.
    )r9   )r    r)   N)r<   r/   )r    r9   mcp_tool_call_request_paramss      r   call_openai_toolr?   e   s8      	D#	
 !
 !=   s   &$&)r"   )r4   typingr   r   r   r   r"   r   	mcp.typesr   r;   r	   MCPCallToolResultr
   MCPToolopenai.types.chatr   *openai.types.responses.function_tool_paramr   .openai.types.shared_params.function_definitionr   litellm.types.utilsr   r   r   r(   r/   r7   r8   r<   r?    r   r   <module>rI      s     - -  G 9 % 5 H M =
 
<S 
g J[  @E$+O$<
4=$67784		6	 	<&8 <T <4d:;. r   