Swarm-Plus
Overview:
Swarm-Plus is a versatile Python framework developed by Vishnu Durairaj, designed to facilitate the creation of intelligent AI agents equipped with a diverse range of tools and functionalities. This open-source framework simplifies the development of sophisticated AI systems capable of handling various tasks through role-based agents and supports advanced multi-agent orchestration.
Features
- Built-in User Interface: Quickly create AI prototypes with a ready-to-use interf
- Create AI Agents with Tools: Easily build AI agents with a diverse set of tools.
- Role-Based Agents: Define agents with specific roles and responsibilities to handle different tasks and collaborate effectively.
- Memory Management: Efficiently handle conversation history with various memory options:
- ConversationBufferMemory: Retains the entire conversation history. Use this when you need to maintain a complete record of all interactions without any summarization or truncation.
- ConversationBufferWindowMemory: Retains only the last K messages in the conversation. Ideal for scenarios where you want to limit memory usage and only keep the most recent interactions. (
memory = ConversationBufferWindowMemory(last_k=3)
)
- ConversationSummaryMemory: Automatically summarizes the conversation once it exceeds a specified number of messages. Use this to manage lengthy conversations by creating concise summaries while retaining overall context. (
memory = ConversationSummaryMemory(number_of_messages=5)
)
- ConversationSummaryBufferMemory: Combines summarization with selective message retention. Summarizes the conversation after a certain point and retains only the most recent N messages. Perfect for balancing context preservation with memory constraints by keeping key recent interactions while summarizing earlier ones. (
memory = ConversationSummaryBufferMemory(buffer_size=5)
)
Flexible Integration: Supported AI Model Providers:
- OpenAI
- Anthropic
- Groq
- Ollama
Colab Notebook
You can try out the notebook directly in Google Colab using the following link:
Installation
You can install the Swarm-Plus framework using pip:
pip install Swarm-Plus
Example Use Case
1. Agents With Tools
Hereās an example of how to create a agent with tools using SwarmPlus:
Step 1: Import Required Modules
import os
import nest_asyncio
from SwarmPlus.helper import print_colored
from SwarmPlus.agent import Agent
from SwarmPlus.models import OpenaiChatModel
from SwarmPlus.memory import ConversationBufferMemory
from SwarmPlus.tools.FileOperationsTool import SaveFile, CreateFolder
Step 3. Prepare Agent Description and Instructions
description = "Responsible for writing story."
instruction = "You are a creative storyteller who crafts imaginative narratives with vivid details, rich characters, and unexpected plot twists."
Step 4: Load pre-defined tools that the agent will use
tools = [CreateFolder, SaveFile]
Step 5: Set your OpenAI API key
openai_api_key = "Your API Key"
Step 6: Initialize the large language model for the agent
model = OpenaiChatModel(model_name="gpt-4o-mini", api_key=openai_api_key, temperature=0)
Step 7: Initialize memory - 4 different techniques are available.
memory = ConversationBufferMemory()
Step 8: Initialize the agent with the model, description, instructions, and tools. Set verbose to True to see the steps by step actions.
agent = Agent(model=model, agent_name="AI Assistant", agent_description=description, agent_instructions=instruction, tools=tools, assistant_agents=[],max_allowed_attempts=5, verbose=True,memory=memory)
Step 9: Start the conversation
print_colored("Starting the application...........", "green")
from SwarmPlus.demo import run_ui_demo
demo = run_ui_demo(agent=agent)
if __name__ == "__main__":
demo.run()
user_input = input("User : ")
messages = []
while user_input != "bye":
output = agent.run(user_input, messages)
messages = output.messages
user_input = input("User Input : ")
2. Creating Custom Tools
Hereās an example of how to create a custom tool using pydantic base model:
import os
from typing import List
from pydantic import BaseModel,Field
class AppendToFile(BaseModel):
"""
Use this tool to append content to an existing file.
"""
reasoning :List[str] = Field(description="Why you are using this tool")
file_name: str = Field(..., description="File name to append to.")
content: str = Field(..., description="Content to append.")
class Config:
extra = "allow"
def run(self):
try:
with open(self.file_name, "a") as file:
file.write(self.content)
return f"Content appended to file: {self.file_name}",self.context_variables
except Exception as e:
return f"An error occurred while appending to the file: {str(e)}",self.context_variables
AppendToFile(reasoning=["Thoughts"],file_name="path to the file",content="content to append").run()
3. Multi-Agents
Hereās an example of how to create multiple agents with tools using SwarmPlus:
import nest_asyncio
from SwarmPlus.agent import Agent
from SwarmPlus.demo import run_ui_demo
from SwarmPlus.models import OpenaiChatModel
from SwarmPlus.memory import ConversationBufferMemory
from SwarmPlus.tools.FileOperationsTool import SaveFile, CreateFolder
nest_asyncio.apply()
openai_api_key = "OPENAI_API_KEY"
tools = [CreateFolder, SaveFile]
memory = ConversationBufferMemory()
hr_description = "Responsible for handling HR operations, including manpower and staffing queries."
hr_instruction = """
You are the HR manager. Handle all queries related to manpower, hiring, and employee relations.
Here are some current HR details you can reference:
- Total Employees: 150
- Current Open Positions: 5 (Software Engineer, Data Analyst, HR Specialist, Marketing Coordinator, and Sales Executive)
- Employee Satisfaction Rating: 4.2/5
- Average Tenure: 3 years
- Recent Hires: John Doe (Software Engineer), Sarah Lee (Data Analyst)
- Current Hiring Goals: 3 additional hires for the Sales team, 2 for the Customer Support team
- Upcoming Initiatives: Employee wellness program, leadership training sessions for middle management
Feel free to provide this information in response to queries from the CEO.
"""
hr_model = OpenaiChatModel(model_name="gpt-4o-mini", api_key=openai_api_key, temperature=0)
hr_agent = Agent(
model=hr_model,
agent_name="HR Agent",
agent_description=hr_description,
agent_instructions=hr_instruction,
tools=tools,
assistant_agents=[],
max_allowed_attempts=50,
verbose=True,
memory=ConversationBufferMemory(),
)
sales_description = "Handles all queries and tasks related to sales, including revenue targets and client relations."
sales_instruction = """
You are the Sales manager. Handle all queries related to sales performance, targets, and client relations.
Here are some current Sales details you can reference:
- Monthly Sales Target: $500,000
- Current Month-to-Date Sales: $320,000
- Top Clients: Acme Corp, Globex Industries, Initech, Umbrella Corporation
- Recent Deals Closed: $75,000 with Initech, $45,000 with Globex Industries
- Current Opportunities in Pipeline: 8 (2 in final negotiation, 3 in initial discussions, 3 in proposal review)
- Sales Team Size: 10 members (including 3 senior sales executives, 5 mid-level, 2 junior)
- Quarterly Sales Growth: 8%
- Upcoming Initiatives: New CRM implementation, sales training on advanced negotiation techniques
Feel free to provide this information in response to queries from the CEO.
"""
sales_model = OpenaiChatModel(model_name="gpt-4o-mini", api_key=openai_api_key, temperature=0)
sales_agent = Agent(
model=sales_model,
agent_name="Sales Agent",
agent_description=sales_description,
agent_instructions=sales_instruction,
tools=tools,
assistant_agents=[],
max_allowed_attempts=50,
verbose=True,
memory=ConversationBufferMemory(),
)
ceo_description = "CEO responsible for overseeing company operations and interacting with HR and Sales for strategic decisions. Also, help the users with their requests through available sources."
ceo_instruction = "You are the CEO of the company. Communicate with HR for manpower and staffing queries and with Sales for sales strategies and metrics."
ceo_model = OpenaiChatModel(model_name="gpt-4o-mini", api_key=openai_api_key, temperature=0)
ceo_agent = Agent(
model=ceo_model,
agent_name="CEO Agent",
agent_description=ceo_description,
agent_instructions=ceo_instruction,
tools=tools,
assistant_agents=[hr_agent,sales_agent],
max_allowed_attempts=50,
verbose=True,
memory=memory,
)
demo = run_ui_demo(agent=ceo_agent)
if __name__ == "__main__":
demo.run()
4. Async Implementation
Hereās an example of async implementation:
import os,nest_asyncio,asyncio
from SwarmPlus.helper import print_colored
from SwarmPlus.agent import Agent
from SwarmPlus.models import OpenaiChatModel
from SwarmPlus.tools.FileOperationsTool import SaveFile, CreateFolder
from SwarmPlus.memory import ConversationSummaryBufferMemory,ConversationSummaryMemory,ConversationBufferWindowMemory,ConversationBufferMemory
description = "Responsible for writing story."
instruction = "You are a creative storyteller who crafts imaginative narratives with vivid details, rich characters, and unexpected plot twists."
tools = [CreateFolder, SaveFile]
openai_api_key = "Your API Key"
model = OpenaiChatModel(model_name="gpt-4o-mini", api_key=openai_api_key, temperature=0)
memory = ConversationBufferMemory()
agent = Agent(model=model, agent_name="AI Assistant", agent_description=description, agent_instructions=instruction, tools=tools, assistant_agents=[],max_allowed_attempts=50, verbose=True,memory=memory)
if __name__ =="__main__":
async def main():
print_colored("Starting the application...........", "green")
user_input = input("User : ")
messages = []
while user_input != "bye":
output = await agent.arun(user_input, messages)
messages = output.messages
user_input = input("User Input : ")
asyncio.run(main())
For More Tutorials Visit My:
Let's stay Connected:
License
This project is licensed under the MIT License. - see the LICENSE file for details.