from typing import List , Callable
from swarms import Worker
class MultiAgentDebate :
def __init__ (
self ,
agents : List [ Worker ] ,
selection_func : Callable [ [ int , List [ Worker ] ] , int ]
) :
self . agents = agents
self . selection_func = selection_func
def reset_agents ( self ) :
for agent in self . agents :
agent . reset ( )
def inject_agent ( self , agent : Worker ) :
self . agents . append ( agent )
def run ( self , task : str , max_iters : int = None ) :
self . reset_agents ( )
results = [ ]
for i in range ( max_iters or len ( self . agents ) ) :
speaker_idx = self . selection_func ( i , self . agents )
speaker = self . agents [ speaker_idx ]
response = speaker . run ( task )
results . append ( {
' agent ' : speaker . ai_name ,
' response ' : response
} )
return results
def update_task ( self , task : str ) :
self . task = task
def format_results ( self , results ) :
formatted_results = " \n " . join ( [ f " Agent { result [ ' agent ' ] } responded: { result [ ' response ' ] } " for result in results ] )
return formatted_results
# Define a selection function
def select_speaker ( step : int , agents : List [ Worker ] ) - > int :
# This function selects the speaker in a round-robin fashion
return step % len ( agents )
# Initialize agents
worker1 = Worker ( openai_api_key = " " , ai_name = " Optimus Prime " )
worker2 = Worker ( openai_api_key = " " , ai_name = " Bumblebee " )
worker3 = Worker ( openai_api_key = " " , ai_name = " Megatron " )
agents = [
worker1 ,
worker2 ,
worker3
]
# Initialize multi-agent debate with the selection function
debate = MultiAgentDebate ( agents , select_speaker )
# Run task
task = " What were the winning boston marathon times for the past 5 years (ending in 2022)? Generate a table of the year, name, country of origin, and times. "
results = debate . run ( task , max_iters = 4 )
# Print results
for result in results :
print ( f " Agent { result [ ' agent ' ] } responded: { result [ ' response ' ] } " )