From 44cced45e3b4c557318071c2eacd364c1ff2a71a Mon Sep 17 00:00:00 2001 From: Mahesh Kommareddi Date: Tue, 16 Jul 2024 23:45:35 -0400 Subject: [PATCH] I'll never understand beans --- src/main/java/com/ioa/IoASystem.java | 70 ++++++++++-------- .../com/ioa/service/WebSocketService.java | 8 +- src/main/java/com/ioa/team/TeamFormation.java | 16 ++-- src/main/java/com/ioa/util/TreeOfThought.java | 8 +- target/classes/com/ioa/IoASystem.class | Bin 7943 -> 9936 bytes .../com/ioa/service/WebSocketService.class | Bin 1353 -> 1369 bytes .../classes/com/ioa/team/TeamFormation.class | Bin 6268 -> 6136 bytes .../classes/com/ioa/util/TreeOfThought.class | Bin 3695 -> 3677 bytes 8 files changed, 55 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/ioa/IoASystem.java b/src/main/java/com/ioa/IoASystem.java index ade07e2..6b0a4c1 100644 --- a/src/main/java/com/ioa/IoASystem.java +++ b/src/main/java/com/ioa/IoASystem.java @@ -10,10 +10,13 @@ import com.ioa.tool.ToolRegistry; import com.ioa.model.BedrockLanguageModel; import com.ioa.service.WebSocketService; import com.ioa.tool.Tool; +import com.ioa.util.TreeOfThought; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; +import org.springframework.messaging.simp.SimpMessagingTemplate; import java.lang.reflect.Method; import java.util.Arrays; @@ -46,8 +49,13 @@ public class IoASystem { } @Bean - public TeamFormation teamFormation(AgentRegistry agentRegistry, BedrockLanguageModel model) { - return new TeamFormation(agentRegistry, model); + public TreeOfThought treeOfThought(BedrockLanguageModel model, WebSocketService webSocketService) { + return new TreeOfThought(model, webSocketService); + } + + @Bean + public TeamFormation teamFormation(AgentRegistry agentRegistry, TreeOfThought treeOfThought, WebSocketService webSocketService) { + return new TeamFormation(agentRegistry, treeOfThought, webSocketService); } @Bean @@ -56,17 +64,17 @@ public class IoASystem { } @Bean - public WebSocketService webSocketService() { - return new WebSocketService(); + public WebSocketService webSocketService(SimpMessagingTemplate messagingTemplate) { + return new WebSocketService(messagingTemplate); } public static void main(String[] args) { - var context = SpringApplication.run(IoASystem.class, args); - + ConfigurableApplicationContext context = SpringApplication.run(IoASystem.class, args); + AgentRegistry agentRegistry = context.getBean(AgentRegistry.class); TeamFormation teamFormation = context.getBean(TeamFormation.class); TaskManager taskManager = context.getBean(TaskManager.class); - + // Register all agents agentRegistry.registerAgent("agent1", new AgentInfo("agent1", "General Assistant", Arrays.asList("general", "search"), @@ -92,32 +100,32 @@ public class IoASystem { // Create all tasks List tasks = Arrays.asList( - // new Task("task1", "Plan a weekend trip to Paris", - // Arrays.asList("travel", "booking"), - // Arrays.asList("bookTravel", "findRestaurants", "getWeather")), - // new Task("task2", "Organize a corporate team-building event in New York", - // Arrays.asList("event planning", "team management"), - // Arrays.asList("findRestaurants", "bookTravel", "scheduleAppointment")), - // new Task("task3", "Develop a personalized fitness and nutrition plan", - // Arrays.asList("health", "nutrition"), - // Arrays.asList("getWeather", "findFitnessClasses", "getRecipe")), - // new Task("task4", "Research and summarize recent advancements in renewable energy", - // Arrays.asList("research", "writing"), - // Arrays.asList("webSearch", "getNewsUpdates", "translate")), - // new Task("task5", "Plan and execute a social media marketing campaign for a new product launch", - // Arrays.asList("marketing", "social media"), - // Arrays.asList("webSearch", "getNewsUpdates", "scheduleAppointment")), - // new Task("task6", "Assist in planning a multi-city European vacation for a family of four", - // Arrays.asList("travel", "family planning"), - // Arrays.asList("bookTravel", "calculateDistance", "getWeather", "findRestaurants")), + new Task("task1", "Plan a weekend trip to Paris", + Arrays.asList("travel", "booking"), + Arrays.asList("bookTravel", "findRestaurants", "getWeather")), + new Task("task2", "Organize a corporate team-building event in New York", + Arrays.asList("event planning", "team management"), + Arrays.asList("findRestaurants", "bookTravel", "scheduleAppointment")), + new Task("task3", "Develop a personalized fitness and nutrition plan", + Arrays.asList("health", "nutrition"), + Arrays.asList("getWeather", "findFitnessClasses", "getRecipe")), + new Task("task4", "Research and summarize recent advancements in renewable energy", + Arrays.asList("research", "writing"), + Arrays.asList("webSearch", "getNewsUpdates", "translate")), + new Task("task5", "Plan and execute a social media marketing campaign for a new product launch", + Arrays.asList("marketing", "social media"), + Arrays.asList("webSearch", "getNewsUpdates", "scheduleAppointment")), + new Task("task6", "Assist in planning a multi-city European vacation for a family of four", + Arrays.asList("travel", "family planning"), + Arrays.asList("bookTravel", "calculateDistance", "getWeather", "findRestaurants")), - // new Task("task7", "Organize an international tech conference with virtual and in-person components", - // Arrays.asList("event planning", "tech expertise", "marketing", "travel coordination", "content creation"), - // Arrays.asList("scheduleAppointment", "webSearch", "bookTravel", "getWeather", "findRestaurants", "getNewsUpdates")), + new Task("task7", "Organize an international tech conference with virtual and in-person components", + Arrays.asList("event planning", "tech expertise", "marketing", "travel coordination", "content creation"), + Arrays.asList("scheduleAppointment", "webSearch", "bookTravel", "getWeather", "findRestaurants", "getNewsUpdates")), - // new Task("task8", "Develop and launch a multi-lingual mobile app for sustainable tourism", - // Arrays.asList("software development", "travel", "language expertise", "environmental science", "user experience design"), - // Arrays.asList("webSearch", "translate", "getWeather", "findRestaurants", "getNewsUpdates", "compareProductPrices")), + new Task("task8", "Develop and launch a multi-lingual mobile app for sustainable tourism", + Arrays.asList("software development", "travel", "language expertise", "environmental science", "user experience design"), + Arrays.asList("webSearch", "translate", "getWeather", "findRestaurants", "getNewsUpdates", "compareProductPrices")), new Task("task9", "Create a comprehensive health and wellness program for a large corporation, including mental health support", Arrays.asList("health", "nutrition", "psychology", "corporate wellness", "data analysis"), diff --git a/src/main/java/com/ioa/service/WebSocketService.java b/src/main/java/com/ioa/service/WebSocketService.java index 4e144b8..0591f69 100644 --- a/src/main/java/com/ioa/service/WebSocketService.java +++ b/src/main/java/com/ioa/service/WebSocketService.java @@ -1,14 +1,16 @@ package com.ioa.service; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.messaging.simp.SimpMessagingTemplate; import org.springframework.stereotype.Service; @Service public class WebSocketService { - @Autowired - private SimpMessagingTemplate messagingTemplate; + private final SimpMessagingTemplate messagingTemplate; + + public WebSocketService(SimpMessagingTemplate messagingTemplate) { + this.messagingTemplate = messagingTemplate; + } public void sendUpdate(String topic, Object payload) { messagingTemplate.convertAndSend("/topic/" + topic, payload); diff --git a/src/main/java/com/ioa/team/TeamFormation.java b/src/main/java/com/ioa/team/TeamFormation.java index 60edfe2..10d2913 100644 --- a/src/main/java/com/ioa/team/TeamFormation.java +++ b/src/main/java/com/ioa/team/TeamFormation.java @@ -5,8 +5,9 @@ import com.ioa.agent.AgentRegistry; import com.ioa.model.BedrockLanguageModel; import com.ioa.task.Task; import com.ioa.util.TreeOfThought; + import com.ioa.service.WebSocketService; -import org.springframework.beans.factory.annotation.Autowired; + import org.springframework.stereotype.Component; import java.util.*; @@ -14,15 +15,14 @@ import java.util.stream.Collectors; @Component public class TeamFormation { - private AgentRegistry agentRegistry; - private TreeOfThought treeOfThought; - - @Autowired - private WebSocketService webSocketService; + private final AgentRegistry agentRegistry; + private final TreeOfThought treeOfThought; + private final WebSocketService webSocketService; - public TeamFormation(AgentRegistry agentRegistry, BedrockLanguageModel model) { + public TeamFormation(AgentRegistry agentRegistry, TreeOfThought treeOfThought, WebSocketService webSocketService) { this.agentRegistry = agentRegistry; - this.treeOfThought = new TreeOfThought(model); + this.treeOfThought = treeOfThought; + this.webSocketService = webSocketService; } public List formTeam(Task task) { diff --git a/src/main/java/com/ioa/util/TreeOfThought.java b/src/main/java/com/ioa/util/TreeOfThought.java index a40a061..f9dc6d7 100644 --- a/src/main/java/com/ioa/util/TreeOfThought.java +++ b/src/main/java/com/ioa/util/TreeOfThought.java @@ -2,7 +2,6 @@ package com.ioa.util; import com.ioa.model.BedrockLanguageModel; import com.ioa.service.WebSocketService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; @@ -13,12 +12,11 @@ import java.util.Map; @Component public class TreeOfThought { private final BedrockLanguageModel model; - - @Autowired - private WebSocketService webSocketService; + private final WebSocketService webSocketService; - public TreeOfThought(BedrockLanguageModel model) { + public TreeOfThought(BedrockLanguageModel model, WebSocketService webSocketService) { this.model = model; + this.webSocketService = webSocketService; } public String reason(String task, int depth, int branches) { diff --git a/target/classes/com/ioa/IoASystem.class b/target/classes/com/ioa/IoASystem.class index b3a430145f60a7ee759355e625cb9118754415a7..ab713d3ef1e8e97f0ea5c633e1b1baf20903c08d 100644 GIT binary patch literal 9936 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 delta 3840 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 diff --git a/target/classes/com/ioa/team/TeamFormation.class b/target/classes/com/ioa/team/TeamFormation.class index 66f73025952e4e86c62cdde75011b8edca549a09..1325d7dcd52254c033371663836ef4a8d1d22b70 100644 GIT binary patch delta 2162 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 L5_pPb)RFlMs62Yw delta 996 zcmYjPOHUI~6#iy9ZKu-*GFG5k0Vxey42=eS)F)9eh|z?NE0qETD$>DWu;QyeP!Lfp zx$bpT7d=gjrVR zqB0@^q&`hE6v)^VLN(O#TCWn|DH_5S)RbRkmOF%bkGbZLA3ktK(?`;i6MDWdGOTCE zb45)bOAq9-g~{}AcF@rD>2$VG(2T5+*9z&*DMKsf_1w@Q0WIdLlw9_Ee~P9g9~WlK zF8RFh$b2pLMCKGc#=IX-LO6m2^SAt6S`?5p8v{w7A7ugcH0#Z%5-*7sB?!1c2|n%@ zxqG>Lafxd`Pu&pt0ZQs4gjDMX_}}p)BFi-b57#Ipq6CODz*CJAjX@0Y#5@EMB9?$0 zhSxC{iSOlIqLgZlZ&$-BsLDvG_t>n~#-tU*Vv^eM2|GlrqU9~)JpWaT5pOH2Y_qGi zJ2-B&1V%8*D#S(}mu)TyjM4HiuMSr*PPPT!TbzQb?b7HHtx0k1H%|o(q00OcJXW$K zo~9RQpu9$kY(k8{O=w0NlGuZt$Y2*vAca2cX7k!uDvc@nZelNH(T)Xl;05;K4G!9b zXAow7750;+k68&!(2|*3i>tH(L{OlUrc&bcj$)GB{e%dSz$h)C;;OBI;Ne>>IiS(wRi zqQ~lvLLW#|CQ)nnDV75}wlRFwC8)9^ql}iBbBmUT_F0_c+HaP_9d@ss=X8>T>f&6w zZA6PC*zXO*W?KM9$4T6#DAAVUJUZ*HXpPmr(|G4Fze83fqKLTbKJ