From 6eadf28c66189793a4751188c85428b236ee487e Mon Sep 17 00:00:00 2001 From: Mahesh Kommareddi Date: Wed, 17 Jul 2024 09:21:42 -0400 Subject: [PATCH] Working version with increased timeout and slight messaging improvements --- src/main/java/com/ioa/IoASystem.java | 14 +++++++------- .../ioa/conversation/ConversationManager.java | 2 +- src/main/java/com/ioa/task/TaskManager.java | 16 ++++++++-------- src/main/java/com/ioa/util/TreeOfThought.java | 14 +++++++++++--- target/classes/com/ioa/IoASystem.class | Bin 12332 -> 12205 bytes .../conversation/ConversationManager.class | Bin 4700 -> 4700 bytes target/classes/com/ioa/task/TaskManager.class | Bin 5390 -> 5599 bytes .../classes/com/ioa/util/TreeOfThought.class | Bin 5760 -> 6068 bytes 8 files changed, 27 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/ioa/IoASystem.java b/src/main/java/com/ioa/IoASystem.java index 5d7bee4..febcebe 100644 --- a/src/main/java/com/ioa/IoASystem.java +++ b/src/main/java/com/ioa/IoASystem.java @@ -155,9 +155,9 @@ 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("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")), @@ -174,9 +174,9 @@ public class IoASystem { // 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"), @@ -235,7 +235,7 @@ public class IoASystem { // Wait for all agents to complete their tasks try { - latch.await(5, TimeUnit.MINUTES); // Wait for up to 5 minutes + latch.await(40, TimeUnit.MINUTES); // Wait for up to 5 minutes } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/src/main/java/com/ioa/conversation/ConversationManager.java b/src/main/java/com/ioa/conversation/ConversationManager.java index 7228efe..e2782ff 100644 --- a/src/main/java/com/ioa/conversation/ConversationManager.java +++ b/src/main/java/com/ioa/conversation/ConversationManager.java @@ -67,7 +67,7 @@ public class ConversationManager { if (!conversation.isFinished()) { conversation.finish("Time limit reached"); } - }, 10, TimeUnit.MINUTES); + }, 40, TimeUnit.MINUTES); } } diff --git a/src/main/java/com/ioa/task/TaskManager.java b/src/main/java/com/ioa/task/TaskManager.java index 705ccd4..8f8fd64 100644 --- a/src/main/java/com/ioa/task/TaskManager.java +++ b/src/main/java/com/ioa/task/TaskManager.java @@ -53,7 +53,7 @@ public class TaskManager { if (reasoning == null || reasoning.isEmpty()) { System.out.println("WARNING: Empty execution plan generated for task: " + taskId); - reasoning = "No execution plan generated."; + reasoning = "No execution plan generated. Proceeding with a general approach to organize execution plan."; } conversationManager.postMessage(conversationId, agent.getId(), "Task execution plan:\n" + reasoning); @@ -61,22 +61,22 @@ public class TaskManager { String executionPrompt = "Based on this execution plan:\n" + reasoning + "\nExecute the task using the available tools and provide the result."; Map executionResult = treeOfThought.reason(executionPrompt, 1, 1); - String response = (String) executionResult.get("response"); + String response = (String) executionResult.get("reasoning"); if (response == null || response.isEmpty()) { System.out.println("WARNING: Empty response generated for task execution: " + taskId); - response = "No response generated."; + response = "Unable to execute the task due to technical difficulties. Please try again or seek assistance."; } String result = executeToolsFromResponse(response, agent); + if (result == null || result.isEmpty()) { + result = "No specific actions were taken based on the execution plan. Please review the plan and provide more detailed instructions if necessary."; + } + task.setResult(result); - if (result != null && !result.isEmpty()) { - conversationManager.postMessage(conversationId, agent.getId(), "Task result: " + result); - } else { - conversationManager.postMessage(conversationId, agent.getId(), "Task completed, but no result was generated."); - } + conversationManager.postMessage(conversationId, agent.getId(), "Task result: " + result); } private String executeToolsFromResponse(String response, AgentInfo agent) { diff --git a/src/main/java/com/ioa/util/TreeOfThought.java b/src/main/java/com/ioa/util/TreeOfThought.java index b9be837..164a86a 100644 --- a/src/main/java/com/ioa/util/TreeOfThought.java +++ b/src/main/java/com/ioa/util/TreeOfThought.java @@ -22,7 +22,11 @@ public class TreeOfThought { webSocketService.sendUpdate("tree_of_thought", treeData); String reasoning = formatReasoning(treeData); System.out.println("DEBUG: Reasoning result: " + reasoning); - return treeData; + + Map result = new HashMap<>(); + result.put("reasoning", reasoning); + result.put("treeData", treeData); + return result; } private Map exploreThought(String task, int depth, int branches, String nodeName) { @@ -41,8 +45,12 @@ public class TreeOfThought { "\nExplore a new branch of thought (branch " + (i+1) + "/" + branches + "):"; String thought = model.generate(branchPrompt, null); - Map childNode = exploreThought(task, depth - 1, branches, thought); - children.add(childNode); + if (!thought.equals("No response generated") && !thought.startsWith("Error:")) { + Map childNode = exploreThought(task, depth - 1, branches, thought); + children.add(childNode); + } else { + System.out.println("WARNING: Failed to generate thought. Result: " + thought); + } } node.put("children", children); diff --git a/target/classes/com/ioa/IoASystem.class b/target/classes/com/ioa/IoASystem.class index 6a0836cc5dcb82a84184cb2a1419cbb7c5a6ccef..93d8cbc1cac67f6c345fa32a9fb7fc1606f8f942 100644 GIT binary patch delta 2941 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 diff --git a/target/classes/com/ioa/conversation/ConversationManager.class b/target/classes/com/ioa/conversation/ConversationManager.class index 4de5c4ecfd84c39a11ae9d4e7ec1e20edc27b767..07f856f57da4f8b75ed7a3e6fdc13f412f34e3c4 100644 GIT binary patch delta 14 Vcmcbkaz|x@2OFctW=}R@9snsk1W5n@ delta 14 Vcmcbkaz|x@2OA^TW=}R@9snqa1S
F5KYN~HDHLwM2Zkm5J`sJOFOd8mYHcQ zD6Hb6iVD^%YJI;^RBS0Owg{*o3gQz)QMA4l->+X7ALmZRM6;Q5&zbZ3zHjcXsUEB` z_Wn7r9l$jF)@#&6@)yp`adD|gxA}I?;jLNA;myJkuH}nN9iQdq(n4fxrWm%%JPi8c(I*s%lfwP2u)U49#y!@xYcag4lU-M5KFk_dA8?UPFmC% zh+?IQJg$)IA{XU#tYYXSj$W%s+cb+?X~opz9l}*xmk5V1qNy29^c9f*it+DKSG3!r zBd7>OvYZSj1={V5;FsiRR7UugouxUp9Ej-V1ml3#1Ty5eSoXt?; z34gZmh+6_BXwq;U!-$KmcB`JgL38~a-zC+jx7pc@a1C^#D2f|!qlTMItif98XbmM@ zxJ83BajV>@jnlhun~B?ThdiW>jofMCF5E4dUK70+_i4D_!~=LxHt4hUPCRVl5j-lp z^eJ_Z5fJVMFjCw=2pdd1f$^T4`own6&sWtrIXnwvZr(;`%LaDZDwD{ zQ({xuS8{2rB6h^UH~3b=cP7rj_fp38hks(IlsjUT5e>gEj3#%q>?=E7dzvnB2tD#( zS$%OY7&b{GK9%*!Gvifdn<>{wmk+4HGbqRv@dj-Ro(-zD#>Y(Sql_X8j6oU3Le&os z;<&1(2#BK}1JuE=70;eX0w&9cFdk#VCSe=469dAH9pr@& zVad$$ z8Z1J1UM4S!R|u<;a%jjN8Zy+dhZ^=uul&^fa19HJsDl2YL$cxsMH=-j+=|Y5TX6l% z2?bdFSj~_MC&T@?nV}n}D{mbO^e(PR78lUnjVhAvIOX4yiqxv}p~QMJ$w&c@tKdm8 z=db^3TWtXwduT%u`eaqbxcspTavG9&75fO~c+}!GVoiiKu<5wjA20P7-{{R30 delta 1222 zcmYjQd2AGA6#u=wW_ETud$a+^BN<9+LwC1T!Dv<}hxQ*O1%cFHs&OonrdoH)?o zeYju21|1LJK@kbhQ+x2Rjy^mhobYM&k1=~WEpy6P8hqHKV>2f4V%%Jrg^DK#q)8T= z`uB#<_4QBI(?o9zyP|IVyM)+$*Ur04*K&E{j72Km7aJ-T(ud-3#fkK>s5ffq6VYOv zN}q{U#xeAT*l4uVSE4dHmA(;kqgBQs4d3EB1>fs99Y2VCbbsJyLXB7-t??`PRV&wsfEae*X+{usVwXg6yEOycbiZa+qnX5bk-%jB36o@31igHG~@`%y(HJdYQ+UJDN4MUDoM!#=#k zBZsh@BRTdd99f3ltf?H!;bo47F#@|DOWCPW2pPP>S_H2$Ik}~Bkzp=U1`IP`k2s_1 zM_HJm5;jWXaTe$F{kt<=!j>)E!Ov^^qiSMt?Cz(*#A|q+ zSx!P4d%1W}@)%nkYjQqb9cyw;K3+fzPx=N|+QZ&B{C}fTL5~9Q7iRs*2?4yx0UwY3 z7M~#o@8|OXe~tW{M%g}yCV9N$8Si=W15bYB$q`R}>dDVN`K2en#*bV?W8_cx1;4@k E51u?WbpQYW diff --git a/target/classes/com/ioa/util/TreeOfThought.class b/target/classes/com/ioa/util/TreeOfThought.class index cdbfc3dbe12ebb7502652fc2ce139706d207c023..72c0c5f40def69a8b7ce80c04434b47feba99c74 100644 GIT binary patch delta 2688 zcmZ8jdwdkt75-*-UOSm&!4MqA` z+hVQOwzgAkp${LWO^ek+fRzLrrL7jzTHD%}ZEfw-KEyu$)1Q%kcP3f;^Y=^coVoYR zx#xV}ckbQW79Cq+OuRWZ4xkJFJz~5VG9m>xRm|ryxk2xh(AIf6u8^RY3a-06RZ8i& zQi7aI-Rv6BvE0N8tn@a9*UVTY!Ekq{vO}p-CZE%AwRa>utG)+e3n8pEVWU@q+{!-_{%{uz%v!YPQ7aS36 zn~Cj6G3R0_RVWpcnNm8;Z$*C5g_~>8j{yy?iJP#+>yu};SO{a5jtrsbPiL|N1ve)E zc#nxJZuSn!+nVwW)}PPyXNQUez=DihMAa)b6umi0b8P`(5q7tU_hOINt+dtb#rrh8 z-^2&-L2r+;K;MhoOne9*_J);t>OK><_fKQ6a zPf1whgZhM_dAroc=%*z}hN#dp@mbvK9a1l>QSdpD%I77rGEG2KTc{o|@dbR*yG*-` zdwki%{dmCJr_HZ_hkSxRMc#ntYuIv$o_uBg)P z#B@AzRMi_LI~uSsRLW$RtWE9eB>JRvC|mNbj67mQd=Pu{1Fm-_(sZ=Jcp)VH#(ULV zCcWsLS36hwz1LNnyzmba7AL#b_xAL5JF%6iOx7KUmGV_p#7gP>&|tc>IJVx8?8GD; zfAaR%o-h5yd$zWx?qvgi!{0UhLsb7yZ+_kL@~aYBy=&@PRSo}^Fo)(GZ+SFceiRbE z#U|K9wTAhO#vg+ePaKC9Z$FOOBb*B1Fh@ZwP{%Qf2dD<2k zg#A3)xI56mJsL3+=VBhmIA-Bu%*GXH!WuN=2DJFOtqS(4=C%bDuspFpPGFQd39CFt zGt4l{8Q>%fjH3gW&{6RNKF&E6-=^!i{2=fer!8{#*u}FG=5#f z`HAV`6kD;nrVDC5fTnoDmMgf*QOjKEw$-UpmBS~|LpWADYWO0pQEPb!+vwS-$=h4T zSREWaehiweOBJkhB6h^uSi$uNuz=Q$6>L3#mUyCB9%!*66}-bSY}GbKu_J`!FzSiA z9T~$Q2t?C9O&UJ?pskdx^z`n{@&lMH60_9`b~+j}%h_5rGu9*fBwSDMf%8bkJX-Uq zvQ}DcSd0b4E)E9?T!nV5=gd|tWz%+`jAiWG^KmyWz<#dZPmCX?=ixFs3Gt=)J}&oJ z+lN{Pi((ZiQ2CjGQ(QL~tQ+6qoX(J)_%5vo-i;mj9_iEQVIt2tp{|K4;}ccJC#sB3 zARt`$J;g7|G6S8$(+r_7pL>vDDgom{+(824Od#+YuX>%P*E8I1F4Q;Bp~0C%jfQ?{ z61^Id{Cf@N>rfU<31ouO;H^RZiB8zc(4wQPM7ezoyMSIn>mtFb5PQ&c2A?33ym5SJ z;=w1?@~mok7Jk4|Li9B7Lt0_lJfS&qGfAA{0+{qk6sWC|BQF}o5bq_bacl;qNDiNUD$#DsC-9ju+(%(5zA%;P5(25r zCP*Nc5%f?TS5v{Ou?}m|$5EUgt5DXs(28e?zi>@gt4mj_OHWlNRs}m@hTDc8;W^^b z$37DkE7cwiqKVE7{7=(g@KlG;BxYzRXxRHYr4#h+kIMw9gW?QMs4PQ@gRo%=s<#rlg|9ZLPgU-cE>y&%PuW4R~M1 zs>QXU^Owt9+{iOuD57Ni8x#@PWuw9~{__&@Da@Jx{}jga3EKUtD( zlZdg0sgT!r2n7oH8DssNP9gjPzvNRTalhj81^&13?XP_QwLkvWAAjeMFZtsi{qfIu Pg}w&;&fs785A6Q|V;wNq delta 2332 zcmZ8iS$Gpw7(F+c$xPGf7AZK;LZw16X+_q4hDD{69Rw5$iqKFZDYPk+6hYL0f{3E1 zSH+D*#3HEF0tQ|_Qa%$mK zG3Q%|;x74{-ZwjjdIJkBEJA~{ePw10aSKgYEXVnJ`_9liwpX90BliC@9K2qfM@fkQP(356Q`Db2G-vWWH^6LDOvTc-H02-gUeC8nw`Lqh~ zGFM8-GPt%KugFFD_7ywuDkZj+YwtpbkH2BLDZet$*50D+#Wp^>!zVA~cT3t%gpsb7 zioiYkqZK=uTUoDR7o#a_H!Ux^p%ky<4OS6k4R6v<#~$um^mq5#xTi9C(9Ulk^mVHd z$LX2P_11$JJnI04hIKos2P$o?1J`>|Q}hCQ1Vgr#!VO`ctp}=XpSxk}ZyiK6PmB%w zyhDvbqj)=p(Xr6bYKuEDj+h_YbFx7*aHHO%E z@nZ(Q?NZ<(Ex8TdRZiQN!pyM2&Dpk*$;w(a2dxRj9w;X2JyA%!ZCr)k{9H>c2C%;{ z%20)Vm`+UQpqzK90xeuyiR-Wq1F->vunB{SZl#0w8szYF9!4h#pO42%v6q&~!`-lt zRu)6}v7a#eF#;p;Hla5d!or>0H57;$vRX4_wPwg_O_QbkQaqtC;$|FRJe|chpa$~d_ zRNl!yn4*}eP{g>B*v36SPXNQ%Z*sVUN6Nr+)TkpUE!BJ4DtVV$&2vb!gI#AhxB_5*E5?GN+VkK9qGAs9| zu(F0K36{21GNTX zBJo`T{87| zajrjKK~&=hEY*{_{tVB(HY&m8`a|w}A5;_{h1+YT7DN+;DA~ za2*6#`5$m7P|7G&w|0zy)qT&Sgx8h=`HO?cW#?mdH2xEMdGIMd