Spaces:
Configuration error
Configuration error
# Create server parameters for stdio connection | |
import os | |
import sys | |
import pytest | |
sys.path.insert( | |
0, os.path.abspath("../../..") | |
) # Adds the parent directory to the system path | |
from mcp import ClientSession, StdioServerParameters | |
from mcp.client.stdio import stdio_client | |
import os | |
from litellm import experimental_mcp_client | |
import litellm | |
import pytest | |
import json | |
async def test_mcp_agent(): | |
local_server_path = "./mcp_server.py" | |
ci_cd_server_path = "tests/mcp_tests/mcp_server.py" | |
server_params = StdioServerParameters( | |
command="python3", | |
# Make sure to update to the full absolute path to your math_server.py file | |
args=[ci_cd_server_path], | |
) | |
async with stdio_client(server_params) as (read, write): | |
async with ClientSession(read, write) as session: | |
# Initialize the connection | |
await session.initialize() | |
# Get tools | |
tools = await experimental_mcp_client.load_mcp_tools( | |
session=session, format="openai" | |
) | |
print("MCP TOOLS: ", tools) | |
# Create and run the agent | |
messages = [{"role": "user", "content": "what's (3 + 5)"}] | |
llm_response = await litellm.acompletion( | |
model="gpt-4o", | |
api_key=os.getenv("OPENAI_API_KEY"), | |
messages=messages, | |
tools=tools, | |
tool_choice="required", | |
) | |
print("LLM RESPONSE: ", json.dumps(llm_response, indent=4, default=str)) | |
# Add assertions to verify the response | |
assert llm_response["choices"][0]["message"]["tool_calls"] is not None | |
assert ( | |
llm_response["choices"][0]["message"]["tool_calls"][0]["function"][ | |
"name" | |
] | |
== "add" | |
) | |
openai_tool = llm_response["choices"][0]["message"]["tool_calls"][0] | |
# Call the tool using MCP client | |
call_result = await experimental_mcp_client.call_openai_tool( | |
session=session, | |
openai_tool=openai_tool, | |
) | |
print("CALL RESULT: ", call_result) | |
# send the tool result to the LLM | |
messages.append(llm_response["choices"][0]["message"]) | |
messages.append( | |
{ | |
"role": "tool", | |
"content": str(call_result.content[0].text), | |
"tool_call_id": openai_tool["id"], | |
} | |
) | |
print("final messages: ", messages) | |
llm_response = await litellm.acompletion( | |
model="gpt-4o", | |
api_key=os.getenv("OPENAI_API_KEY"), | |
messages=messages, | |
tools=tools, | |
) | |
print( | |
"FINAL LLM RESPONSE: ", json.dumps(llm_response, indent=4, default=str) | |
) | |