@ -3,11 +3,17 @@ import queue
from time import sleep
from swarms . workers . autobot import AutoBot
from swarms . utils . decorators import error_decorator , log_decorator , timing_decorator
# TODO Handle task assignment and task delegation
# TODO: User task => decomposed into very small sub tasks => sub tasks assigned to workers => workers complete and update the swarm, can ask for help from other agents.
# TODO: Missing, Task Assignment, Task delegation, Task completion, Swarm level communication with vector db
#
class AutoScaler :
@log_decorator
@error_decorator
@timing_decorator
def __init__ ( self ,
initial_agents = 10 ,
scale_up_factor = 1 ,
@ -23,6 +29,9 @@ class AutoScaler:
def add_task ( self , task ) :
self . tasks_queue . put ( task )
@log_decorator
@error_decorator
@timing_decorator
def scale_up ( self ) :
with self . lock :
new_agents_counts = len ( self . agents_pool ) * self . scale_up_factor
@ -34,6 +43,9 @@ class AutoScaler:
if len ( self . agents_pool ) > 10 : #ensure minmum of 10 agents
del self . agents_pool [ - 1 ] #remove last agent
@log_decorator
@error_decorator
@timing_decorator
def monitor_and_scale ( self ) :
while True :
sleep ( 60 ) #check minute
@ -44,7 +56,10 @@ class AutoScaler:
self . scale_up ( )
elif active_agents / len ( self . agents_pool ) < self . idle_threshold :
self . scale_down ( )
@log_decorator
@error_decorator
@timing_decorator
def start ( self ) :
monitor_thread = threading . Thread ( target = self . monitor_and_scale )
monitor_thread . start ( )
@ -56,8 +71,3 @@ class AutoScaler:
if available_agent :
available_agent . run ( task )