parent
							
								
									da41a7e03f
								
							
						
					
					
						commit
						cae0db7b4d
					
				@ -0,0 +1,348 @@
 | 
				
			|||||||
 | 
					# Swarms API as MCP
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Launch MCP server as a tool
 | 
				
			||||||
 | 
					- Put `SWARMS_API_KEY` in `.env`
 | 
				
			||||||
 | 
					- Client side code below
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Server Side
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```python
 | 
				
			||||||
 | 
					# server.py
 | 
				
			||||||
 | 
					from datetime import datetime
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					from typing import Any, Dict, List, Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import requests
 | 
				
			||||||
 | 
					import httpx
 | 
				
			||||||
 | 
					from fastmcp import FastMCP
 | 
				
			||||||
 | 
					from pydantic import BaseModel, Field
 | 
				
			||||||
 | 
					from swarms import SwarmType
 | 
				
			||||||
 | 
					from dotenv import load_dotenv
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					load_dotenv()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AgentSpec(BaseModel):
 | 
				
			||||||
 | 
					    agent_name: Optional[str] = Field(
 | 
				
			||||||
 | 
					        description="The unique name assigned to the agent, which identifies its role and functionality within the swarm.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    description: Optional[str] = Field(
 | 
				
			||||||
 | 
					        description="A detailed explanation of the agent's purpose, capabilities, and any specific tasks it is designed to perform.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    system_prompt: Optional[str] = Field(
 | 
				
			||||||
 | 
					        description="The initial instruction or context provided to the agent, guiding its behavior and responses during execution.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    model_name: Optional[str] = Field(
 | 
				
			||||||
 | 
					        default="gpt-4o-mini",
 | 
				
			||||||
 | 
					        description="The name of the AI model that the agent will utilize for processing tasks and generating outputs. For example: gpt-4o, gpt-4o-mini, openai/o3-mini",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    auto_generate_prompt: Optional[bool] = Field(
 | 
				
			||||||
 | 
					        default=False,
 | 
				
			||||||
 | 
					        description="A flag indicating whether the agent should automatically create prompts based on the task requirements.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    max_tokens: Optional[int] = Field(
 | 
				
			||||||
 | 
					        default=8192,
 | 
				
			||||||
 | 
					        description="The maximum number of tokens that the agent is allowed to generate in its responses, limiting output length.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    temperature: Optional[float] = Field(
 | 
				
			||||||
 | 
					        default=0.5,
 | 
				
			||||||
 | 
					        description="A parameter that controls the randomness of the agent's output; lower values result in more deterministic responses.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    role: Optional[str] = Field(
 | 
				
			||||||
 | 
					        default="worker",
 | 
				
			||||||
 | 
					        description="The designated role of the agent within the swarm, which influences its behavior and interaction with other agents.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    max_loops: Optional[int] = Field(
 | 
				
			||||||
 | 
					        default=1,
 | 
				
			||||||
 | 
					        description="The maximum number of times the agent is allowed to repeat its task, enabling iterative processing if necessary.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    # New fields for RAG functionality
 | 
				
			||||||
 | 
					    rag_collection: Optional[str] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="The Qdrant collection name for RAG functionality. If provided, this agent will perform RAG queries.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    rag_documents: Optional[List[str]] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="Documents to ingest into the Qdrant collection for RAG. (List of text strings)",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    tools: Optional[List[Dict[str, Any]]] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="A dictionary of tools that the agent can use to complete its task.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AgentCompletion(BaseModel):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Configuration for a single agent that works together as a swarm to accomplish tasks.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    agent: AgentSpec = Field(
 | 
				
			||||||
 | 
					        ...,
 | 
				
			||||||
 | 
					        description="The agent to run.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    task: Optional[str] = Field(
 | 
				
			||||||
 | 
					        ...,
 | 
				
			||||||
 | 
					        description="The task to run.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    img: Optional[str] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="An optional image URL that may be associated with the swarm's task or representation.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    output_type: Optional[str] = Field(
 | 
				
			||||||
 | 
					        "list",
 | 
				
			||||||
 | 
					        description="The type of output to return.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class AgentCompletionResponse(BaseModel):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Response from an agent completion.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    agent_id: str = Field(
 | 
				
			||||||
 | 
					        ...,
 | 
				
			||||||
 | 
					        description="The unique identifier for the agent that completed the task.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    agent_name: str = Field(
 | 
				
			||||||
 | 
					        ...,
 | 
				
			||||||
 | 
					        description="The name of the agent that completed the task.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    agent_description: str = Field(
 | 
				
			||||||
 | 
					        ...,
 | 
				
			||||||
 | 
					        description="The description of the agent that completed the task.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    messages: Any = Field(
 | 
				
			||||||
 | 
					        ...,
 | 
				
			||||||
 | 
					        description="The messages from the agent completion.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    cost: Dict[str, Any] = Field(
 | 
				
			||||||
 | 
					        ...,
 | 
				
			||||||
 | 
					        description="The cost of the agent completion.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class Agents(BaseModel):
 | 
				
			||||||
 | 
					    """Configuration for a collection of agents that work together as a swarm to accomplish tasks."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    agents: List[AgentSpec] = Field(
 | 
				
			||||||
 | 
					        description="A list containing the specifications of each agent that will participate in the swarm, detailing their roles and functionalities."
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ScheduleSpec(BaseModel):
 | 
				
			||||||
 | 
					    scheduled_time: datetime = Field(
 | 
				
			||||||
 | 
					        ...,
 | 
				
			||||||
 | 
					        description="The exact date and time (in UTC) when the swarm is scheduled to execute its tasks.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    timezone: Optional[str] = Field(
 | 
				
			||||||
 | 
					        "UTC",
 | 
				
			||||||
 | 
					        description="The timezone in which the scheduled time is defined, allowing for proper scheduling across different regions.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SwarmSpec(BaseModel):
 | 
				
			||||||
 | 
					    name: Optional[str] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="The name of the swarm, which serves as an identifier for the group of agents and their collective task.",
 | 
				
			||||||
 | 
					        max_length=100,
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    description: Optional[str] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="A comprehensive description of the swarm's objectives, capabilities, and intended outcomes.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    agents: Optional[List[AgentSpec]] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="A list of agents or specifications that define the agents participating in the swarm.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    max_loops: Optional[int] = Field(
 | 
				
			||||||
 | 
					        default=1,
 | 
				
			||||||
 | 
					        description="The maximum number of execution loops allowed for the swarm, enabling repeated processing if needed.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    swarm_type: Optional[SwarmType] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="The classification of the swarm, indicating its operational style and methodology.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    rearrange_flow: Optional[str] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="Instructions on how to rearrange the flow of tasks among agents, if applicable.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    task: Optional[str] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="The specific task or objective that the swarm is designed to accomplish.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    img: Optional[str] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="An optional image URL that may be associated with the swarm's task or representation.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    return_history: Optional[bool] = Field(
 | 
				
			||||||
 | 
					        True,
 | 
				
			||||||
 | 
					        description="A flag indicating whether the swarm should return its execution history along with the final output.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    rules: Optional[str] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="Guidelines or constraints that govern the behavior and interactions of the agents within the swarm.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    schedule: Optional[ScheduleSpec] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="Details regarding the scheduling of the swarm's execution, including timing and timezone information.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    tasks: Optional[List[str]] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="A list of tasks that the swarm should complete.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    messages: Optional[List[Dict[str, Any]]] = Field(
 | 
				
			||||||
 | 
					        None,
 | 
				
			||||||
 | 
					        description="A list of messages that the swarm should complete.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    # rag_on: Optional[bool] = Field(
 | 
				
			||||||
 | 
					    #     None,
 | 
				
			||||||
 | 
					    #     description="A flag indicating whether the swarm should use RAG.",
 | 
				
			||||||
 | 
					    # )
 | 
				
			||||||
 | 
					    # collection_name: Optional[str] = Field(
 | 
				
			||||||
 | 
					    #     None,
 | 
				
			||||||
 | 
					    #     description="The name of the collection to use for RAG.",
 | 
				
			||||||
 | 
					    # )
 | 
				
			||||||
 | 
					    stream: Optional[bool] = Field(
 | 
				
			||||||
 | 
					        False,
 | 
				
			||||||
 | 
					        description="A flag indicating whether the swarm should stream its output.",
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class SwarmCompletionResponse(BaseModel):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Response from a swarm completion.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    status: str = Field(..., description="The status of the swarm completion.")
 | 
				
			||||||
 | 
					    swarm_name: str = Field(..., description="The name of the swarm.")
 | 
				
			||||||
 | 
					    description: str = Field(..., description="Description of the swarm.")
 | 
				
			||||||
 | 
					    swarm_type: str = Field(..., description="The type of the swarm.")
 | 
				
			||||||
 | 
					    task: str = Field(
 | 
				
			||||||
 | 
					        ..., description="The task that the swarm is designed to accomplish."
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    output: List[Dict[str, Any]] = Field(
 | 
				
			||||||
 | 
					        ..., description="The output generated by the swarm."
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    number_of_agents: int = Field(
 | 
				
			||||||
 | 
					        ..., description="The number of agents involved in the swarm."
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    # "input_config": Optional[Dict[str, Any]] = Field(None, description="The input configuration for the swarm.")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BASE_URL = "https://swarms-api-285321057562.us-east1.run.app"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Create an MCP server
 | 
				
			||||||
 | 
					mcp = FastMCP("swarms-api")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Add an addition tool
 | 
				
			||||||
 | 
					@mcp.tool(name="swarm_completion", description="Run a swarm completion.")
 | 
				
			||||||
 | 
					def swarm_completion(swarm: SwarmSpec) -> Dict[str, Any]:
 | 
				
			||||||
 | 
					    api_key = os.getenv("SWARMS_API_KEY")
 | 
				
			||||||
 | 
					    headers = {"x-api-key": api_key, "Content-Type": "application/json"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    payload = swarm.model_dump()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    response = requests.post(f"{BASE_URL}/v1/swarm/completions", json=payload, headers=headers)
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    return response.json()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@mcp.tool(name="swarms_available", description="Get the list of available swarms.")
 | 
				
			||||||
 | 
					async def swarms_available() -> Any:
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Get the list of available swarms.
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    headers = {"Content-Type": "application/json"}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async with httpx.AsyncClient() as client:
 | 
				
			||||||
 | 
					        response = await client.get(f"{BASE_URL}/v1/models/available", headers=headers)
 | 
				
			||||||
 | 
					        response.raise_for_status()  # Raise an error for bad responses
 | 
				
			||||||
 | 
					        return response.json()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					    mcp.run(transport="sse")
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Client side
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Call the tool with it's name and the payload config
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```python
 | 
				
			||||||
 | 
					import asyncio
 | 
				
			||||||
 | 
					from fastmcp import Client
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					swarm_config = {
 | 
				
			||||||
 | 
					    "name": "Simple Financial Analysis",
 | 
				
			||||||
 | 
					    "description": "A swarm to analyze financial data",
 | 
				
			||||||
 | 
					    "agents": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "agent_name": "Data Analyzer",
 | 
				
			||||||
 | 
					            "description": "Looks at financial data",
 | 
				
			||||||
 | 
					            "system_prompt": "Analyze the data.",
 | 
				
			||||||
 | 
					            "model_name": "gpt-4o",
 | 
				
			||||||
 | 
					            "role": "worker",
 | 
				
			||||||
 | 
					            "max_loops": 1,
 | 
				
			||||||
 | 
					            "max_tokens": 1000,
 | 
				
			||||||
 | 
					            "temperature": 0.5,
 | 
				
			||||||
 | 
					            "auto_generate_prompt": False,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "agent_name": "Risk Analyst",
 | 
				
			||||||
 | 
					            "description": "Checks risk levels",
 | 
				
			||||||
 | 
					            "system_prompt": "Evaluate the risks.",
 | 
				
			||||||
 | 
					            "model_name": "gpt-4o",
 | 
				
			||||||
 | 
					            "role": "worker",
 | 
				
			||||||
 | 
					            "max_loops": 1,
 | 
				
			||||||
 | 
					            "max_tokens": 1000,
 | 
				
			||||||
 | 
					            "temperature": 0.5,
 | 
				
			||||||
 | 
					            "auto_generate_prompt": False,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					            "agent_name": "Strategy Checker",
 | 
				
			||||||
 | 
					            "description": "Validates strategies",
 | 
				
			||||||
 | 
					            "system_prompt": "Review the strategy.",
 | 
				
			||||||
 | 
					            "model_name": "gpt-4o",
 | 
				
			||||||
 | 
					            "role": "worker",
 | 
				
			||||||
 | 
					            "max_loops": 1,
 | 
				
			||||||
 | 
					            "max_tokens": 1000,
 | 
				
			||||||
 | 
					            "temperature": 0.5,
 | 
				
			||||||
 | 
					            "auto_generate_prompt": False,
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    ],
 | 
				
			||||||
 | 
					    "max_loops": 1,
 | 
				
			||||||
 | 
					    "swarm_type": "SequentialWorkflow",
 | 
				
			||||||
 | 
					    "task": "Analyze the financial data and provide insights.",
 | 
				
			||||||
 | 
					    "return_history": False,  # Added required field
 | 
				
			||||||
 | 
					    "stream": False,  # Added required field
 | 
				
			||||||
 | 
					    "rules": None,  # Added optional field
 | 
				
			||||||
 | 
					    "img": None,  # Added optional field
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async def fetch_weather_and_resource():
 | 
				
			||||||
 | 
					    """Connect to a server over SSE and fetch available swarms."""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    async with Client(
 | 
				
			||||||
 | 
					        transport="http://localhost:8000/sse"
 | 
				
			||||||
 | 
					        # SSETransport(
 | 
				
			||||||
 | 
					        #     url="http://localhost:8000/sse",
 | 
				
			||||||
 | 
					        #     headers={"x_api_key": os.getenv("SWARMS_API_KEY"), "Content-Type": "application/json"}
 | 
				
			||||||
 | 
					        # )
 | 
				
			||||||
 | 
					    ) as client:
 | 
				
			||||||
 | 
					        # Basic connectivity testing
 | 
				
			||||||
 | 
					        # print("Ping check:", await client.ping())
 | 
				
			||||||
 | 
					        # print("Available tools:", await client.list_tools())
 | 
				
			||||||
 | 
					        # print("Swarms available:", await client.call_tool("swarms_available", None))
 | 
				
			||||||
 | 
					        result = await client.call_tool("swarm_completion", {"swarm": swarm_config})
 | 
				
			||||||
 | 
					        print("Swarm completion:", result)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Execute the function
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					    asyncio.run(fetch_weather_and_resource())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
@ -0,0 +1,72 @@
 | 
				
			|||||||
 | 
					from swarms.prompts.paper_idea_agent import (
 | 
				
			||||||
 | 
					    PAPER_IDEA_AGENT_SYSTEM_PROMPT,
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					from swarms import Agent
 | 
				
			||||||
 | 
					from swarms.utils.any_to_str import any_to_str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tools = [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "type": "function",
 | 
				
			||||||
 | 
					        "function": {
 | 
				
			||||||
 | 
					            "name": "generate_paper_idea",
 | 
				
			||||||
 | 
					            "description": "Generate a structured academic paper idea with all required components.",
 | 
				
			||||||
 | 
					            "parameters": {
 | 
				
			||||||
 | 
					                "type": "object",
 | 
				
			||||||
 | 
					                "properties": {
 | 
				
			||||||
 | 
					                    "name": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Concise identifier for the paper idea",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "title": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Academic paper title",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "short_hypothesis": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Core hypothesis in 1-2 sentences",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "related_work": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Key papers and how this differs from existing work",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "abstract": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Complete paper abstract",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "experiments": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Detailed experimental plan",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "risk_factors": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Known challenges and constraints",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "required": [
 | 
				
			||||||
 | 
					                    "name",
 | 
				
			||||||
 | 
					                    "title",
 | 
				
			||||||
 | 
					                    "short_hypothesis",
 | 
				
			||||||
 | 
					                    "related_work",
 | 
				
			||||||
 | 
					                    "abstract",
 | 
				
			||||||
 | 
					                    "experiments",
 | 
				
			||||||
 | 
					                    "risk_factors",
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					agent = Agent(
 | 
				
			||||||
 | 
					    agent_name="Paper Idea Agent",
 | 
				
			||||||
 | 
					    agent_role="You are an experienced AI researcher tasked with proposing high-impact research ideas.",
 | 
				
			||||||
 | 
					    system_prompt=PAPER_IDEA_AGENT_SYSTEM_PROMPT,
 | 
				
			||||||
 | 
					    tools_list_dictionary=tools,
 | 
				
			||||||
 | 
					    max_loops=1,
 | 
				
			||||||
 | 
					    model_name="gpt-4o-mini",
 | 
				
			||||||
 | 
					    output_type="final",
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					out = agent.run(
 | 
				
			||||||
 | 
					    "Generate a paper idea for collaborative foundation transformer models"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					print(any_to_str(out))
 | 
				
			||||||
@ -0,0 +1,120 @@
 | 
				
			|||||||
 | 
					import cProfile
 | 
				
			||||||
 | 
					import time
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from swarms.prompts.paper_idea_agent import (
 | 
				
			||||||
 | 
					    PAPER_IDEA_AGENT_SYSTEM_PROMPT,
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					from swarms import Agent
 | 
				
			||||||
 | 
					from swarms.utils.any_to_str import any_to_str
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print("All imports completed...")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					tools = [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        "type": "function",
 | 
				
			||||||
 | 
					        "function": {
 | 
				
			||||||
 | 
					            "name": "generate_paper_idea",
 | 
				
			||||||
 | 
					            "description": "Generate a structured academic paper idea with all required components.",
 | 
				
			||||||
 | 
					            "parameters": {
 | 
				
			||||||
 | 
					                "type": "object",
 | 
				
			||||||
 | 
					                "properties": {
 | 
				
			||||||
 | 
					                    "name": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Concise identifier for the paper idea",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "title": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Academic paper title",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "short_hypothesis": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Core hypothesis in 1-2 sentences",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "related_work": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Key papers and how this differs from existing work",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "abstract": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Complete paper abstract",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "experiments": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Detailed experimental plan",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "risk_factors": {
 | 
				
			||||||
 | 
					                        "type": "string",
 | 
				
			||||||
 | 
					                        "description": "Known challenges and constraints",
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "required": [
 | 
				
			||||||
 | 
					                    "name",
 | 
				
			||||||
 | 
					                    "title",
 | 
				
			||||||
 | 
					                    "short_hypothesis",
 | 
				
			||||||
 | 
					                    "related_work",
 | 
				
			||||||
 | 
					                    "abstract",
 | 
				
			||||||
 | 
					                    "experiments",
 | 
				
			||||||
 | 
					                    "risk_factors",
 | 
				
			||||||
 | 
					                ],
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# agent = Agent(
 | 
				
			||||||
 | 
					#     agent_name="Paper Idea Agent",
 | 
				
			||||||
 | 
					#     agent_role="You are an experienced AI researcher tasked with proposing high-impact research ideas.",
 | 
				
			||||||
 | 
					#     system_prompt=PAPER_IDEA_AGENT_SYSTEM_PROMPT,
 | 
				
			||||||
 | 
					#     tools_list_dictionary=tools,
 | 
				
			||||||
 | 
					#     max_loops=1,
 | 
				
			||||||
 | 
					#     model_name="gpt-4o-mini",
 | 
				
			||||||
 | 
					#     output_type="final",
 | 
				
			||||||
 | 
					# )
 | 
				
			||||||
 | 
					def generate_paper_idea():
 | 
				
			||||||
 | 
					    print("Starting generate_paper_idea function...")
 | 
				
			||||||
 | 
					    try:
 | 
				
			||||||
 | 
					        print("Creating agent...")
 | 
				
			||||||
 | 
					        agent = Agent(
 | 
				
			||||||
 | 
					            agent_name="Paper Idea Agent",
 | 
				
			||||||
 | 
					            agent_role="You are an experienced AI researcher tasked with proposing high-impact research ideas.",
 | 
				
			||||||
 | 
					            system_prompt=PAPER_IDEA_AGENT_SYSTEM_PROMPT,
 | 
				
			||||||
 | 
					            tools_list_dictionary=tools,
 | 
				
			||||||
 | 
					            max_loops=1,
 | 
				
			||||||
 | 
					            model_name="gpt-4o-mini",
 | 
				
			||||||
 | 
					            output_type="final",
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        print("Agent created, starting run...")
 | 
				
			||||||
 | 
					        start_time = time.time()
 | 
				
			||||||
 | 
					        out = agent.run(
 | 
				
			||||||
 | 
					            "Generate a paper idea for collaborative foundation transformer models"
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        end_time = time.time()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        print(f"Execution time: {end_time - start_time:.2f} seconds")
 | 
				
			||||||
 | 
					        print("Output:", any_to_str(out))
 | 
				
			||||||
 | 
					        return out
 | 
				
			||||||
 | 
					    except Exception as e:
 | 
				
			||||||
 | 
					        print(f"Error occurred: {str(e)}")
 | 
				
			||||||
 | 
					        raise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print("Defining main block...")
 | 
				
			||||||
 | 
					if __name__ == "__main__":
 | 
				
			||||||
 | 
					    print("Entering main block...")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Basic timing first
 | 
				
			||||||
 | 
					    print("\nRunning basic timing...")
 | 
				
			||||||
 | 
					    generate_paper_idea()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Then with profiler
 | 
				
			||||||
 | 
					    print("\nRunning with profiler...")
 | 
				
			||||||
 | 
					    profiler = cProfile.Profile()
 | 
				
			||||||
 | 
					    profiler.enable()
 | 
				
			||||||
 | 
					    generate_paper_idea()
 | 
				
			||||||
 | 
					    profiler.disable()
 | 
				
			||||||
 | 
					    profiler.print_stats(sort="cumulative")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					print("Script completed.")
 | 
				
			||||||
@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					# System Role Definition
 | 
				
			||||||
 | 
					PAPER_IDEA_AGENT_SYSTEM_PROMPT = """
 | 
				
			||||||
 | 
					You are an experienced AI researcher tasked with proposing high-impact research ideas. Your ideas should:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Be novel and creative
 | 
				
			||||||
 | 
					- Think outside conventional boundaries
 | 
				
			||||||
 | 
					- Start from simple, elegant questions or observations
 | 
				
			||||||
 | 
					- Be distinguishable from existing literature
 | 
				
			||||||
 | 
					- Be feasible within academic lab resources
 | 
				
			||||||
 | 
					- Be publishable at top ML conferences
 | 
				
			||||||
 | 
					- Be implementable using the provided codebase
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Your responses must follow this strict format:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					IDEA JSON Structure:
 | 
				
			||||||
 | 
					   {
 | 
				
			||||||
 | 
					       "Name": "Concise identifier",
 | 
				
			||||||
 | 
					       "Title": "Academic paper title",
 | 
				
			||||||
 | 
					       "Short Hypothesis": "Core hypothesis in 1-2 sentences",
 | 
				
			||||||
 | 
					       "Related Work": "Key papers and how this differs",
 | 
				
			||||||
 | 
					       "Abstract": "Complete paper abstract",
 | 
				
			||||||
 | 
					       "Experiments": "Detailed experimental plan",
 | 
				
			||||||
 | 
					       "Risk Factors and Limitations": "Known challenges and constraints"
 | 
				
			||||||
 | 
					   }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Important Guidelines:
 | 
				
			||||||
 | 
					- Perform at least one literature search before finalizing any idea
 | 
				
			||||||
 | 
					- Ensure JSON formatting is valid for automated parsing
 | 
				
			||||||
 | 
					- Keep proposals clear and implementable
 | 
				
			||||||
 | 
					"""
 | 
				
			||||||
					Loading…
					
					
				
		Reference in new issue