You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
110 lines
3.5 KiB
110 lines
3.5 KiB
# from swarms.structs import Flow
|
|
# from swarms.models import OpenAIChat
|
|
# from swarms.swarms.groupchat import GroupChat
|
|
# from swarms.agents import SimpleAgent
|
|
|
|
# api_key = ""
|
|
|
|
# llm = OpenAIChat(
|
|
# openai_api_key=api_key,
|
|
# )
|
|
|
|
# agent1 = SimpleAgent("Captain Price", Flow(llm=llm, max_loops=4))
|
|
# agent2 = SimpleAgent("John Mactavis", Flow(llm=llm, max_loops=4))
|
|
|
|
# # Create a groupchat with the 2 agents
|
|
# chat = GroupChat([agent1, agent2])
|
|
|
|
# # Assign duties to the agents
|
|
# chat.assign_duty(agent1.name, "Buy the groceries")
|
|
# chat.assign_duty(agent2.name, "Clean the house")
|
|
|
|
# # Initate a chat
|
|
# response = chat.run("Captain Price", "Hello, how are you John?")
|
|
# print(response)
|
|
|
|
|
|
from swarms.models import OpenAIChat
|
|
from swarms.structs import Flow
|
|
import random
|
|
|
|
api_key = "" # Your API Key here
|
|
|
|
|
|
class GroupChat:
|
|
"""
|
|
GroupChat class that facilitates agent-to-agent communication using multiple instances of the Flow class.
|
|
"""
|
|
|
|
def __init__(self, agents: list):
|
|
self.agents = {f"agent_{i}": agent for i, agent in enumerate(agents)}
|
|
self.message_log = []
|
|
|
|
def add_agent(self, agent: Flow):
|
|
agent_id = f"agent_{len(self.agents)}"
|
|
self.agents[agent_id] = agent
|
|
|
|
def remove_agent(self, agent_id: str):
|
|
if agent_id in self.agents:
|
|
del self.agents[agent_id]
|
|
|
|
def send_message(self, sender_id: str, recipient_id: str, message: str):
|
|
if sender_id not in self.agents or recipient_id not in self.agents:
|
|
raise ValueError("Invalid sender or recipient ID.")
|
|
formatted_message = f"{sender_id} to {recipient_id}: {message}"
|
|
self.message_log.append(formatted_message)
|
|
recipient_agent = self.agents[recipient_id]
|
|
recipient_agent.run(message)
|
|
|
|
def broadcast_message(self, sender_id: str, message: str):
|
|
for agent_id, agent in self.agents.items():
|
|
if agent_id != sender_id:
|
|
self.send_message(sender_id, agent_id, message)
|
|
|
|
def get_message_log(self):
|
|
return self.message_log
|
|
|
|
|
|
class EnhancedGroupChatV2(GroupChat):
|
|
def __init__(self, agents: list):
|
|
super().__init__(agents)
|
|
|
|
def multi_round_conversation(self, rounds: int = 5):
|
|
"""
|
|
Initiate a multi-round conversation between agents.
|
|
|
|
Args:
|
|
rounds (int): The number of rounds of conversation.
|
|
"""
|
|
for _ in range(rounds):
|
|
# Randomly select a sender and recipient agent for the conversation
|
|
sender_id = random.choice(list(self.agents.keys()))
|
|
recipient_id = random.choice(list(self.agents.keys()))
|
|
while recipient_id == sender_id: # Ensure the recipient is not the sender
|
|
recipient_id = random.choice(list(self.agents.keys()))
|
|
|
|
# Generate a message (for simplicity, a generic message is used)
|
|
message = f"Hello {recipient_id}, how are you today?"
|
|
self.send_message(sender_id, recipient_id, message)
|
|
|
|
|
|
# Sample usage with EnhancedGroupChatV2
|
|
# Initialize the language model
|
|
llm = OpenAIChat(
|
|
openai_api_key=api_key,
|
|
temperature=0.5,
|
|
max_tokens=3000,
|
|
)
|
|
|
|
# Initialize two Flow agents
|
|
agent1 = Flow(llm=llm, max_loops=5, dashboard=True)
|
|
agent2 = Flow(llm=llm, max_loops=5, dashboard=True)
|
|
|
|
# Create an enhanced group chat with the two agents
|
|
enhanced_group_chat_v2 = EnhancedGroupChatV2(agents=[agent1, agent2])
|
|
|
|
# Simulate multi-round agent to agent communication
|
|
enhanced_group_chat_v2.multi_round_conversation(rounds=5)
|
|
|
|
enhanced_group_chat_v2.get_message_log() # Get the conversation log
|