parent
049869ea5c
commit
7c550d9344
@ -0,0 +1,144 @@
|
|||||||
|
|
||||||
|
from swarms import Agent
|
||||||
|
from swarms.tools.mcp_integration import MCPServerSseParams
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
class MCPClient:
|
||||||
|
def __init__(self):
|
||||||
|
# Configure MCP servers
|
||||||
|
self.math_server = MCPServerSseParams(
|
||||||
|
url="http://0.0.0.0:8000/mcp",
|
||||||
|
headers={"Content-Type": "application/json"},
|
||||||
|
timeout=5.0,
|
||||||
|
sse_read_timeout=30.0
|
||||||
|
)
|
||||||
|
|
||||||
|
self.stock_server = MCPServerSseParams(
|
||||||
|
url="http://0.0.0.0:8001/mcp",
|
||||||
|
headers={"Content-Type": "application/json"},
|
||||||
|
timeout=5.0,
|
||||||
|
sse_read_timeout=30.0
|
||||||
|
)
|
||||||
|
|
||||||
|
# Initialize agents with specific servers
|
||||||
|
self.math_agent = Agent(
|
||||||
|
agent_name="Math Agent",
|
||||||
|
system_prompt="""You are a mathematical computation specialist with access to the following capabilities through the MCP server:
|
||||||
|
- Addition of two numbers
|
||||||
|
- Multiplication of two numbers
|
||||||
|
- Power/exponent calculations
|
||||||
|
- Square root calculations
|
||||||
|
|
||||||
|
Always follow these rules:
|
||||||
|
1. Only use tools that are available from the MCP server
|
||||||
|
2. First list the available tools when asked
|
||||||
|
3. Explain your mathematical approach before using tools
|
||||||
|
4. Provide clear step-by-step explanations of calculations""",
|
||||||
|
mcp_servers=[self.math_server],
|
||||||
|
max_loops=1,
|
||||||
|
streaming_on=True,
|
||||||
|
model_name="gpt-4o-mini",
|
||||||
|
temperature=0.1
|
||||||
|
)
|
||||||
|
|
||||||
|
self.stock_agent = Agent(
|
||||||
|
agent_name="Stock Agent",
|
||||||
|
system_prompt="""You are a stock market analysis specialist with access to the following capabilities through the MCP server:
|
||||||
|
- Get current stock prices
|
||||||
|
- Get trading volumes
|
||||||
|
- Calculate market capitalization
|
||||||
|
- Generate price statistics across multiple stocks
|
||||||
|
|
||||||
|
Always follow these rules:
|
||||||
|
1. Only use tools that are available from the MCP server
|
||||||
|
2. First list the available tools when asked
|
||||||
|
3. Explain your analysis approach before using tools
|
||||||
|
4. Provide clear explanations of market metrics""",
|
||||||
|
mcp_servers=[self.stock_server],
|
||||||
|
max_loops=1,
|
||||||
|
streaming_on=True,
|
||||||
|
model_name="gpt-4o-mini",
|
||||||
|
temperature=0.1
|
||||||
|
)
|
||||||
|
|
||||||
|
async async def process_query(self, query: str):
|
||||||
|
try:
|
||||||
|
if query.lower() in ["capabilities", "what can you do", "what kind of problems you can solve"]:
|
||||||
|
return [
|
||||||
|
{"agent": "Math Agent", "response": """I can help with mathematical computations including:
|
||||||
|
- Addition of two numbers
|
||||||
|
- Multiplication of two numbers
|
||||||
|
- Power/exponent calculations
|
||||||
|
- Square root calculations"""},
|
||||||
|
{"agent": "Stock Agent", "response": """I can help with stock market analysis including:
|
||||||
|
- Get current stock prices
|
||||||
|
- Get trading volumes
|
||||||
|
- Calculate market capitalization
|
||||||
|
- Generate price statistics across stocks"""}
|
||||||
|
]
|
||||||
|
|
||||||
|
# Run agents concurrently
|
||||||
|
results = await asyncio.gather(
|
||||||
|
self.math_agent.arun(query),
|
||||||
|
self.stock_agent.arun(query)
|
||||||
|
)
|
||||||
|
|
||||||
|
# Format results
|
||||||
|
formatted_results = []
|
||||||
|
for idx, result in enumerate(results):
|
||||||
|
agent_name = "Math Agent" if idx == 0 else "Stock Agent"
|
||||||
|
if isinstance(result, dict):
|
||||||
|
formatted_results.append({
|
||||||
|
"agent": agent_name,
|
||||||
|
"response": result.get("response", str(result))
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
formatted_results.append({
|
||||||
|
"agent": agent_name,
|
||||||
|
"response": str(result)
|
||||||
|
})
|
||||||
|
return formatted_results
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logger.error(f"Error processing query: {e}")
|
||||||
|
return None
|
||||||
|
|
||||||
|
def main():
|
||||||
|
client = MCPClient()
|
||||||
|
|
||||||
|
print("\nAvailable Agents and Capabilities:")
|
||||||
|
print("\nMath Agent:")
|
||||||
|
print("- Addition of two numbers")
|
||||||
|
print("- Multiplication of two numbers")
|
||||||
|
print("- Power/exponent calculations")
|
||||||
|
print("- Square root calculations")
|
||||||
|
|
||||||
|
print("\nStock Agent:")
|
||||||
|
print("- Get current stock prices")
|
||||||
|
print("- Get trading volumes")
|
||||||
|
print("- Calculate market capitalization")
|
||||||
|
print("- Generate price statistics")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
query = input("\nEnter your query (or 'exit' to quit): ")
|
||||||
|
if query.lower() == 'exit':
|
||||||
|
break
|
||||||
|
|
||||||
|
results = asyncio.run(client.process_query(query))
|
||||||
|
|
||||||
|
if results:
|
||||||
|
print("\nResults:")
|
||||||
|
for result in results:
|
||||||
|
if not result:
|
||||||
|
continue
|
||||||
|
print(f"\n{result['agent']}:")
|
||||||
|
print("-" * 50)
|
||||||
|
print(result['response'])
|
||||||
|
print("-" * 50)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
Reference in new issue