From 2859a502badb21895d93b37bc6f0f23896244222 Mon Sep 17 00:00:00 2001 From: Mahesh Kommareddi Date: Wed, 17 Jul 2024 04:25:03 -0400 Subject: [PATCH] Threading the team based system --- src/main/java/com/ioa/IoASystem.java | 45 ++++++++++++++++++++----- target/classes/com/ioa/IoASystem.class | Bin 11715 -> 13447 bytes 2 files changed, 36 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/ioa/IoASystem.java b/src/main/java/com/ioa/IoASystem.java index 940fd7f..e8aa11b 100644 --- a/src/main/java/com/ioa/IoASystem.java +++ b/src/main/java/com/ioa/IoASystem.java @@ -38,6 +38,11 @@ import org.springframework.messaging.simp.SimpMessagingTemplate; import java.util.Arrays; import java.util.List; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.CountDownLatch; + @SpringBootApplication public class IoASystem { @@ -191,34 +196,46 @@ public class IoASystem { ); + // Create a thread pool + ExecutorService executorService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()); + for (Task task : tasks) { System.out.println("\nProcessing task: " + task.getDescription()); List team = teamFormation.formTeam(task); System.out.println("Formed team: " + team); - + if (!team.isEmpty()) { // Create a conversation for the team String conversationId = conversationManager.createConversation(); - + // Add team members to the conversation for (AgentInfo agent : team) { conversationManager.addParticipant(conversationId, agent); } - // Assign the task to all team members + // Create a CountDownLatch to wait for all agents to complete their tasks + CountDownLatch latch = new CountDownLatch(team.size()); + + // Assign the task to all team members and execute in parallel for (AgentInfo agent : team) { - Task agentTask = new Task(task.getId() + "_" + agent.getId(), task.getDescription(), task.getRequiredCapabilities(), task.getRequiredTools()); - agentTask.setAssignedAgent(agent); - taskManager.addTask(agentTask); - taskManager.executeTask(agentTask.getId(), conversationId); + executorService.submit(() -> { + try { + Task agentTask = new Task(task.getId() + "_" + agent.getId(), task.getDescription(), task.getRequiredCapabilities(), task.getRequiredTools()); + agentTask.setAssignedAgent(agent); + taskManager.addTask(agentTask); + taskManager.executeTask(agentTask.getId(), conversationId); + } finally { + latch.countDown(); + } + }); } // Start the conversation conversationManager.startConversation(conversationId, "Let's work on the task: " + task.getDescription()); - // Wait for the conversation to finish (you might want to implement a more sophisticated mechanism) + // Wait for all agents to complete their tasks try { - Thread.sleep(30000); // Wait for 30 seconds + latch.await(5, TimeUnit.MINUTES); // Wait for up to 5 minutes } catch (InterruptedException e) { e.printStackTrace(); } @@ -230,5 +247,15 @@ public class IoASystem { System.out.println("No suitable agents found for this task. Consider updating the agent pool or revising the task requirements."); } } + + // Shutdown the executor service + executorService.shutdown(); + try { + if (!executorService.awaitTermination(60, TimeUnit.SECONDS)) { + executorService.shutdownNow(); + } + } catch (InterruptedException e) { + executorService.shutdownNow(); + } } } diff --git a/target/classes/com/ioa/IoASystem.class b/target/classes/com/ioa/IoASystem.class index df0d0f8d7b89344d00225cd2da29a16c9d0bfe51..2a4f41c6719f5f0fef562ad73b6ba1e07e6e646c 100644 GIT binary patch delta 4112 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 VxgHg(LW-05?M%58&8?)8=ig^e%pd>& delta 2707 zcmb7EYjjlA75=`-y)%=UJDFhyLIw~9!jKT2f(Q)?4KIttn(~N7P#BWiFpx~b%mfgW zv516!J|{>5ZC6+4$DV!9 z+56kyxA!@xJ$Y)e@2!iS#{pFF?R~yLpMaks_VF-mF~Yu1SD(rLV)pm2#A1{KoT_k{ zx0r)0UcK=u{_z7%qH!O zkSHJ7oz#|1HjS%JX0lUNr5cN0P>G>li3?j=nlfs0fyISfy)cnkMU*);zWB0{wP6&nLdjcZF`>fxWU?Zzw|G;gCcn1vKHB`E zhm96jFew~*L@it)Eo+blWSVTdl`zV09$D+*D(B(i(pf9nY%v8l5o}E-Q`rUCME$CT z=|sJ)>b6>3&Cx_ZQPjKYd^^+DlnujRg_l|9FU6??;pkvbpfJ&Br?TB5BF>|ch%+{J ztFt#&!9mXSA%h)jXxwQUnsW{gOXm&|5noNZrQXhDlBvd6R-{+P=;aX^arTN1e^_kjXcQxD$%^cV3PMU3|+q8K30$L;3|b$To)~ip$nWkL62j1=otT zv~O}9@0KreJvRu!HfP$1fweucV|8o{1rp=C6sx>@c(2a)aU*kb7VndNRqIOvwMqO! zml*PXZ8vhWhJNV^=!yRY`T=ga1ihZ^{|kC6zbqkbPONO;#2(gDdMUibx;H~1_8_$nH&>b}-yMT{!C(NsuJA6!46U0^UXyo8g#Og+k9uqa9PII}>?$I-^SN-7S`axm5 zQ`ZktHCwR_YEEj(LCwj~o|^5|^&jUGTJ6uu2QTiaRHG|hCnxSorJq*%&q`Hw<0^gI z`J~2QH1e$O<_v@ca}m6_9sN*;VYmb1uoyRB3FhKX)Z#AGV<}p(4EG{|2eBMa%F457 zz&_YGjz-O`SnE7-sS92l?w-OG)eE_cyJe!PyY+B6&s7Xxpft)eAy)Of2@y1-1SyT# zeJ`SXicibF2Vs7NUzN^AL z_9J$4kn#o+Cvd*fzn?>*{ygKI90}w(W{mopP-&@k>oBkHWTjq@T1PmQcna@Ey?IWn z45$T#TNEwo#>GJ8Y20mfd7*^o~7>^L481ER}FmCqD;hPRh(v z=GH^_b!8|TQv37e{DtzY?f#n;4di)8N7oCwo`i~!yALo@MC_9FTgTN>EpL0*RRg}~5-Dlr2