Was using wrong field in BedrockAPI to retrieve generated results. Working finally.
This commit is contained in:
parent
2859a502ba
commit
1634dfcdc5
|
@ -176,23 +176,23 @@ public class IoASystem {
|
||||||
|
|
||||||
new Task("task7", "Organize an international tech conference with virtual and in-person components",
|
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("event planning", "tech expertise", "marketing", "travel coordination", "content creation"),
|
||||||
Arrays.asList("scheduleAppointment", "webSearch", "bookTravel", "getWeather", "findRestaurants", "getNewsUpdates")),
|
Arrays.asList("scheduleAppointment", "webSearch", "bookTravel", "getWeather", "findRestaurants", "getNewsUpdates"))//,
|
||||||
|
|
||||||
new Task("task8", "Develop and launch a multi-lingual mobile app for sustainable tourism",
|
// 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("software development", "travel", "language expertise", "environmental science", "user experience design"),
|
||||||
Arrays.asList("webSearch", "translate", "getWeather", "findRestaurants", "getNewsUpdates", "compareProductPrices")),
|
// 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",
|
// 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"),
|
// Arrays.asList("health", "nutrition", "psychology", "corporate wellness", "data analysis"),
|
||||||
Arrays.asList("findFitnessClasses", "getRecipe", "setReminder", "getWeather", "scheduleAppointment", "getFinancialAdvice")),
|
// Arrays.asList("findFitnessClasses", "getRecipe", "setReminder", "getWeather", "scheduleAppointment", "getFinancialAdvice")),
|
||||||
|
|
||||||
new Task("task10", "Plan and execute a global product launch campaign for a revolutionary eco-friendly technology",
|
// new Task("task10", "Plan and execute a global product launch campaign for a revolutionary eco-friendly technology",
|
||||||
Arrays.asList("marketing", "environmental science", "international business", "public relations", "social media"),
|
// Arrays.asList("marketing", "environmental science", "international business", "public relations", "social media"),
|
||||||
Arrays.asList("webSearch", "getNewsUpdates", "scheduleAppointment", "translate", "compareProductPrices", "bookTravel")),
|
// Arrays.asList("webSearch", "getNewsUpdates", "scheduleAppointment", "translate", "compareProductPrices", "bookTravel")),
|
||||||
|
|
||||||
new Task("task11", "Design and implement a smart city initiative focusing on transportation, energy, and public safety",
|
// new Task("task11", "Design and implement a smart city initiative focusing on transportation, energy, and public safety",
|
||||||
Arrays.asList("urban planning", "environmental science", "data analysis", "public policy", "technology integration"),
|
// Arrays.asList("urban planning", "environmental science", "data analysis", "public policy", "technology integration"),
|
||||||
Arrays.asList("webSearch", "getWeather", "calculateDistance", "getNewsUpdates", "getFinancialAdvice", "findHomeServices"))
|
// Arrays.asList("webSearch", "getWeather", "calculateDistance", "getNewsUpdates", "getFinancialAdvice", "findHomeServices"))
|
||||||
|
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -44,9 +44,16 @@ public class ConversationManager {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void postMessage(String conversationId, String senderId, String content) {
|
public void postMessage(String conversationId, String senderId, String content) {
|
||||||
|
System.out.println("DEBUG: Posting message - ConversationId: " + conversationId + ", SenderId: " + senderId + ", Content: " + content);
|
||||||
ConversationFSM conversation = conversations.get(conversationId);
|
ConversationFSM conversation = conversations.get(conversationId);
|
||||||
if (conversation != null) {
|
if (conversation != null) {
|
||||||
|
if (content == null) {
|
||||||
|
System.out.println("WARNING: Attempting to post null content message");
|
||||||
|
return;
|
||||||
|
}
|
||||||
conversation.postMessage(new Message(conversationId, senderId, content));
|
conversation.postMessage(new Message(conversationId, senderId, content));
|
||||||
|
} else {
|
||||||
|
System.out.println("WARNING: Conversation not found for id: " + conversationId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import com.fasterxml.jackson.databind.node.ArrayNode;
|
import com.fasterxml.jackson.databind.node.ArrayNode;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
@ -32,6 +34,7 @@ public class BedrockLanguageModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String generate(String prompt, String imagePath) {
|
public String generate(String prompt, String imagePath) {
|
||||||
|
System.out.println("DEBUG: Generating response for prompt: " + prompt);
|
||||||
try {
|
try {
|
||||||
ObjectNode requestBody = objectMapper.createObjectNode();
|
ObjectNode requestBody = objectMapper.createObjectNode();
|
||||||
requestBody.put("anthropic_version", "bedrock-2023-05-31");
|
requestBody.put("anthropic_version", "bedrock-2023-05-31");
|
||||||
|
@ -39,7 +42,7 @@ public class BedrockLanguageModel {
|
||||||
ObjectNode message = messages.addObject();
|
ObjectNode message = messages.addObject();
|
||||||
message.put("role", "user");
|
message.put("role", "user");
|
||||||
requestBody.put("max_tokens", 20000);
|
requestBody.put("max_tokens", 20000);
|
||||||
requestBody.put("temperature", 0.4);
|
requestBody.put("temperature", 0.7);
|
||||||
requestBody.put("top_p", 0.9);
|
requestBody.put("top_p", 0.9);
|
||||||
|
|
||||||
ArrayNode content = message.putArray("content");
|
ArrayNode content = message.putArray("content");
|
||||||
|
@ -71,12 +74,30 @@ public class BedrockLanguageModel {
|
||||||
|
|
||||||
InvokeModelResponse response = bedrockClient.invokeModel(invokeRequest);
|
InvokeModelResponse response = bedrockClient.invokeModel(invokeRequest);
|
||||||
String responseBody = response.body().asUtf8String();
|
String responseBody = response.body().asUtf8String();
|
||||||
|
System.out.println("DEBUG: Raw response from Bedrock: " + responseBody);
|
||||||
|
|
||||||
ObjectNode responseJson = (ObjectNode) objectMapper.readTree(responseBody);
|
JsonNode responseJson = objectMapper.readTree(responseBody);
|
||||||
return responseJson.path("content").get(0).path("text").asText();
|
JsonNode contentArray = responseJson.path("content");
|
||||||
|
|
||||||
|
if (contentArray.isArray() && contentArray.size() > 0) {
|
||||||
|
JsonNode firstContent = contentArray.get(0);
|
||||||
|
String generatedText = firstContent.path("text").asText();
|
||||||
|
|
||||||
|
if (generatedText.isEmpty()) {
|
||||||
|
System.out.println("WARNING: Generated text is empty. Full response: " + responseBody);
|
||||||
|
return "No response generated";
|
||||||
|
}
|
||||||
|
|
||||||
|
System.out.println("DEBUG: Generated text: " + generatedText);
|
||||||
|
return generatedText;
|
||||||
|
} else {
|
||||||
|
System.out.println("WARNING: Unexpected response format. Full response: " + responseBody);
|
||||||
|
return "Unexpected response format";
|
||||||
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException("Error generating text with Bedrock", e);
|
System.out.println("ERROR: Failed to generate text with Bedrock: " + e.getMessage());
|
||||||
|
e.printStackTrace();
|
||||||
|
return "Error: " + e.getMessage();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -37,27 +37,46 @@ public class TaskManager {
|
||||||
Task task = tasks.get(taskId);
|
Task task = tasks.get(taskId);
|
||||||
AgentInfo agent = task.getAssignedAgent();
|
AgentInfo agent = task.getAssignedAgent();
|
||||||
|
|
||||||
|
System.out.println("DEBUG: Executing task: " + taskId + " for agent: " + agent.getId());
|
||||||
|
|
||||||
conversationManager.postMessage(conversationId, agent.getId(), "Starting task: " + task.getDescription());
|
conversationManager.postMessage(conversationId, agent.getId(), "Starting task: " + task.getDescription());
|
||||||
|
|
||||||
String executionPlanningTask = "Plan the execution of this task: " + task.getDescription() +
|
String executionPlanningTask = "Plan the execution of this task: " + task.getDescription() +
|
||||||
"\nAssigned agent capabilities: " + agent.getCapabilities() +
|
"\nAssigned agent capabilities: " + agent.getCapabilities() +
|
||||||
"\nAvailable tools: " + agent.getTools();
|
"\nAvailable tools: " + agent.getTools();
|
||||||
|
|
||||||
|
System.out.println("DEBUG: Generating execution plan for task: " + taskId);
|
||||||
Map<String, Object> reasoningResult = treeOfThought.reason(executionPlanningTask, 3, 2);
|
Map<String, Object> reasoningResult = treeOfThought.reason(executionPlanningTask, 3, 2);
|
||||||
String reasoning = (String) reasoningResult.get("reasoning"); // Assuming the reasoning is stored under the key "reasoning"
|
String reasoning = (String) reasoningResult.get("reasoning");
|
||||||
|
|
||||||
|
System.out.println("DEBUG: Execution plan generated: " + reasoning);
|
||||||
|
|
||||||
|
if (reasoning == null || reasoning.isEmpty()) {
|
||||||
|
System.out.println("WARNING: Empty execution plan generated for task: " + taskId);
|
||||||
|
reasoning = "No execution plan generated.";
|
||||||
|
}
|
||||||
|
|
||||||
conversationManager.postMessage(conversationId, agent.getId(), "Task execution plan:\n" + reasoning);
|
conversationManager.postMessage(conversationId, agent.getId(), "Task execution plan:\n" + reasoning);
|
||||||
|
|
||||||
String executionPrompt = "Based on this execution plan:\n" + reasoning +
|
String executionPrompt = "Based on this execution plan:\n" + reasoning +
|
||||||
"\nExecute the task using the available tools and provide the result.";
|
"\nExecute the task using the available tools and provide the result.";
|
||||||
Map<String, Object> executionResult = treeOfThought.reason(executionPrompt, 1, 1);
|
Map<String, Object> executionResult = treeOfThought.reason(executionPrompt, 1, 1);
|
||||||
String response = (String) executionResult.get("response"); // Assuming the response is stored under the key "response"
|
String response = (String) executionResult.get("response");
|
||||||
|
|
||||||
|
if (response == null || response.isEmpty()) {
|
||||||
|
System.out.println("WARNING: Empty response generated for task execution: " + taskId);
|
||||||
|
response = "No response generated.";
|
||||||
|
}
|
||||||
|
|
||||||
String result = executeToolsFromResponse(response, agent);
|
String result = executeToolsFromResponse(response, agent);
|
||||||
|
|
||||||
task.setResult(result);
|
task.setResult(result);
|
||||||
|
|
||||||
|
if (result != null && !result.isEmpty()) {
|
||||||
conversationManager.postMessage(conversationId, agent.getId(), "Task result: " + result);
|
conversationManager.postMessage(conversationId, agent.getId(), "Task result: " + result);
|
||||||
|
} else {
|
||||||
|
conversationManager.postMessage(conversationId, agent.getId(), "Task completed, but no result was generated.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String executeToolsFromResponse(String response, AgentInfo agent) {
|
private String executeToolsFromResponse(String response, AgentInfo agent) {
|
||||||
|
|
|
@ -17,8 +17,11 @@ public class TreeOfThought {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, Object> reason(String task, int depth, int branches) {
|
public Map<String, Object> reason(String task, int depth, int branches) {
|
||||||
|
System.out.println("DEBUG: Starting reasoning process for task: " + task);
|
||||||
Map<String, Object> treeData = exploreThought(task, depth, branches, "Root");
|
Map<String, Object> treeData = exploreThought(task, depth, branches, "Root");
|
||||||
webSocketService.sendUpdate("tree_of_thought", treeData);
|
webSocketService.sendUpdate("tree_of_thought", treeData);
|
||||||
|
String reasoning = formatReasoning(treeData);
|
||||||
|
System.out.println("DEBUG: Reasoning result: " + reasoning);
|
||||||
return treeData;
|
return treeData;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,4 +70,30 @@ public class TreeOfThought {
|
||||||
"\nPath: " + path + "\nEvaluations:\n" + childEvaluations;
|
"\nPath: " + path + "\nEvaluations:\n" + childEvaluations;
|
||||||
return model.generate(prompt, null);
|
return model.generate(prompt, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String formatReasoning(Map<String, Object> treeData) {
|
||||||
|
StringBuilder sb = new StringBuilder();
|
||||||
|
formatNode(treeData, sb, 0);
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void formatNode(Map<String, Object> node, StringBuilder sb, int depth) {
|
||||||
|
String indent = " ".repeat(depth);
|
||||||
|
sb.append(indent).append(node.get("name")).append("\n");
|
||||||
|
|
||||||
|
if (node.containsKey("evaluation")) {
|
||||||
|
sb.append(indent).append("Evaluation: ").append(node.get("evaluation")).append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.containsKey("conclusion")) {
|
||||||
|
sb.append(indent).append("Conclusion: ").append(node.get("conclusion")).append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node.containsKey("children")) {
|
||||||
|
List<Map<String, Object>> children = (List<Map<String, Object>>) node.get("children");
|
||||||
|
for (Map<String, Object> child : children) {
|
||||||
|
formatNode(child, sb, depth + 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user