First commit
This commit is contained in:
commit
a97cd853fe
12
pom.xml
Normal file
12
pom.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>software.amazon.awssdk</groupId>
|
||||
<artifactId>bedrock-runtime</artifactId>
|
||||
<version>2.20.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
<version>2.13.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
68
src/main/Main.java
Normal file
68
src/main/Main.java
Normal file
|
@ -0,0 +1,68 @@
|
|||
package com.ioa;
|
||||
|
||||
import com.ioa.agent.AgentInfo;
|
||||
import com.ioa.agent.AgentRegistry;
|
||||
import com.ioa.task.Task;
|
||||
import com.ioa.task.TaskManager;
|
||||
import com.ioa.team.TeamFormation;
|
||||
import com.ioa.tool.CommonTools;
|
||||
import com.ioa.tool.ToolRegistry;
|
||||
import dev.langchain4j.model.chat.ChatLanguageModel;
|
||||
import dev.langchain4j.model.openai.OpenAiChatModel;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) {
|
||||
// Initialize the system
|
||||
ToolRegistry toolRegistry = new ToolRegistry();
|
||||
CommonTools commonTools = new CommonTools();
|
||||
|
||||
// Register all tools from CommonTools
|
||||
for (Method method : CommonTools.class.getMethods()) {
|
||||
if (method.isAnnotationPresent(dev.langchain4j.agent.tool.Tool.class)) {
|
||||
toolRegistry.registerTool(method.getName(), method);
|
||||
}
|
||||
}
|
||||
|
||||
AgentRegistry agentRegistry = new AgentRegistry(toolRegistry);
|
||||
ChatLanguageModel model = OpenAiChatModel.builder()
|
||||
.apiKey(System.getenv("OPENAI_API_KEY"))
|
||||
.build();
|
||||
|
||||
TeamFormation teamFormation = new TeamFormation(agentRegistry, model);
|
||||
TaskManager taskManager = new TaskManager(agentRegistry, model, toolRegistry);
|
||||
|
||||
// Register some example agents
|
||||
AgentInfo agent1 = new AgentInfo("agent1", "General Assistant",
|
||||
Arrays.asList("general", "search"),
|
||||
Arrays.asList("webSearch", "getWeather", "setReminder"));
|
||||
AgentInfo agent2 = new AgentInfo("agent2", "Travel Expert",
|
||||
Arrays.asList("travel", "booking"),
|
||||
Arrays.asList("bookTravel", "calculateDistance", "findRestaurants"));
|
||||
|
||||
agentRegistry.registerAgent(agent1.getId(), agent1);
|
||||
agentRegistry.registerAgent(agent2.getId(), agent2);
|
||||
|
||||
// Create a sample task
|
||||
Task task = new Task("task1", "Plan a weekend trip to Paris",
|
||||
Arrays.asList("travel", "booking"),
|
||||
Arrays.asList("bookTravel", "findRestaurants", "getWeather"));
|
||||
|
||||
// Form a team for the task
|
||||
List<AgentInfo> team = teamFormation.formTeam(task);
|
||||
System.out.println("Formed team: " + team);
|
||||
|
||||
// Assign the task to the first agent in the team (simplified)
|
||||
task.setAssignedAgent(team.get(0));
|
||||
|
||||
// Execute the task
|
||||
taskManager.addTask(task);
|
||||
taskManager.executeTask(task.getId());
|
||||
|
||||
// Print the result
|
||||
System.out.println("Task result: " + task.getResult());
|
||||
}
|
||||
}
|
35
src/main/java/com/ioa/IoASystem.java
Normal file
35
src/main/java/com/ioa/IoASystem.java
Normal file
|
@ -0,0 +1,35 @@
|
|||
package com.ioa;
|
||||
|
||||
import com.ioa.agent.AgentRegistry;
|
||||
import com.ioa.task.TaskManager;
|
||||
import com.ioa.team.TeamFormation;
|
||||
import com.ioa.tool.CommonTools;
|
||||
import com.ioa.tool.ToolRegistry;
|
||||
import dev.langchain4j.model.chat.ChatLanguageModel;
|
||||
import dev.langchain4j.model.openai.OpenAiChatModel;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
|
||||
public class IoASystem {
|
||||
public static void initialize() {
|
||||
ToolRegistry toolRegistry = new ToolRegistry();
|
||||
CommonTools commonTools = new CommonTools();
|
||||
|
||||
// Register all tools from CommonTools
|
||||
for (Method method : CommonTools.class.getMethods()) {
|
||||
if (method.isAnnotationPresent(dev.langchain4j.agent.tool.Tool.class)) {
|
||||
toolRegistry.registerTool(method.getName(), method);
|
||||
}
|
||||
}
|
||||
|
||||
AgentRegistry agentRegistry = new AgentRegistry(toolRegistry);
|
||||
ChatLanguageModel model = OpenAiChatModel.builder()
|
||||
.apiKey(System.getenv("OPENAI_API_KEY"))
|
||||
.build();
|
||||
|
||||
TeamFormation teamFormation = new TeamFormation(agentRegistry, model);
|
||||
TaskManager taskManager = new TaskManager(agentRegistry, model, toolRegistry);
|
||||
|
||||
// Initialize other components as needed
|
||||
}
|
||||
}
|
28
src/main/java/com/ioa/agent/AgentInfo.java
Normal file
28
src/main/java/com/ioa/agent/AgentInfo.java
Normal file
|
@ -0,0 +1,28 @@
|
|||
package com.ioa.agent;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class AgentInfo {
|
||||
private String id;
|
||||
private String name;
|
||||
private List<String> capabilities;
|
||||
private List<String> tools;
|
||||
|
||||
// Constructor
|
||||
public AgentInfo(String id, String name, List<String> capabilities, List<String> tools) {
|
||||
this.id = id;
|
||||
this.name = name;
|
||||
this.capabilities = capabilities;
|
||||
this.tools = tools;
|
||||
}
|
||||
|
||||
// Getters and setters
|
||||
public String getId() { return id; }
|
||||
public void setId(String id) { this.id = id; }
|
||||
public String getName() { return name; }
|
||||
public void setName(String name) { this.name = name; }
|
||||
public List<String> getCapabilities() { return capabilities; }
|
||||
public void setCapabilities(List<String> capabilities) { this.capabilities = capabilities; }
|
||||
public List<String> getTools() { return tools; }
|
||||
public void setTools(List<String> tools) { this.tools = tools; }
|
||||
}
|
37
src/main/java/com/ioa/agent/AgentRegistry.java
Normal file
37
src/main/java/com/ioa/agent/AgentRegistry.java
Normal file
|
@ -0,0 +1,37 @@
|
|||
package com.ioa.agent;
|
||||
|
||||
import com.ioa.tool.ToolRegistry;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class AgentRegistry {
|
||||
private Map<String, AgentInfo> agents = new HashMap<>();
|
||||
private ToolRegistry toolRegistry;
|
||||
|
||||
public AgentRegistry(ToolRegistry toolRegistry) {
|
||||
this.toolRegistry = toolRegistry;
|
||||
}
|
||||
|
||||
public void registerAgent(String agentId, AgentInfo agentInfo) {
|
||||
agents.put(agentId, agentInfo);
|
||||
// Register agent's tools
|
||||
for (String tool : agentInfo.getTools()) {
|
||||
if (toolRegistry.getTool(tool) == null) {
|
||||
throw new IllegalArgumentException("Tool not found in registry: " + tool);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public AgentInfo getAgent(String agentId) {
|
||||
return agents.get(agentId);
|
||||
}
|
||||
|
||||
public List<AgentInfo> searchAgents(List<String> capabilities) {
|
||||
return agents.values().stream()
|
||||
.filter(agent -> agent.getCapabilities().containsAll(capabilities))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
66
src/main/java/com/ioa/conversation/ConversationFSM.java
Normal file
66
src/main/java/com/ioa/conversation/ConversationFSM.java
Normal file
|
@ -0,0 +1,66 @@
|
|||
package com.ioa.conversation;
|
||||
|
||||
import com.ioa.util.TreeOfThought;
|
||||
import dev.langchain4j.model.chat.ChatLanguageModel;
|
||||
import dev.langchain4j.model.output.Response;
|
||||
|
||||
public class ConversationFSM {
|
||||
private ConversationState currentState;
|
||||
private TreeOfThought treeOfThought;
|
||||
|
||||
public ConversationFSM(ChatLanguageModel model) {
|
||||
this.currentState = ConversationState.DISCUSSION;
|
||||
this.treeOfThought = new TreeOfThought(model);
|
||||
}
|
||||
|
||||
public void handleMessage(Message message) {
|
||||
String stateTransitionTask = "Decide the next conversation state based on this message: " + message.getContent() +
|
||||
"\nCurrent state: " + currentState;
|
||||
|
||||
String reasoning = treeOfThought.reason(stateTransitionTask, 2, 3);
|
||||
|
||||
String decisionPrompt = "Based on this reasoning:\n" + reasoning +
|
||||
"\nProvide the next conversation state (DISCUSSION, TASK_ASSIGNMENT, EXECUTION, or CONCLUSION).";
|
||||
Response<String> response = treeOfThought.getModel().generate(decisionPrompt);
|
||||
|
||||
ConversationState newState = ConversationState.valueOf(response.content().trim());
|
||||
transitionTo(newState);
|
||||
|
||||
// Handle the message based on the new state
|
||||
switch (newState) {
|
||||
case DISCUSSION:
|
||||
handleDiscussionMessage(message);
|
||||
break;
|
||||
case TASK_ASSIGNMENT:
|
||||
handleTaskAssignmentMessage(message);
|
||||
break;
|
||||
case EXECUTION:
|
||||
handleExecutionMessage(message);
|
||||
break;
|
||||
case CONCLUSION:
|
||||
handleConclusionMessage(message);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
private void transitionTo(ConversationState newState) {
|
||||
// Add any transition logic here
|
||||
this.currentState = newState;
|
||||
}
|
||||
|
||||
private void handleDiscussionMessage(Message message) {
|
||||
// Implement discussion logic
|
||||
}
|
||||
|
||||
private void handleTaskAssignmentMessage(Message message) {
|
||||
// Implement task assignment logic
|
||||
}
|
||||
|
||||
private void handleExecutionMessage(Message message) {
|
||||
// Implement execution logic
|
||||
}
|
||||
|
||||
private void handleConclusionMessage(Message message) {
|
||||
// Implement conclusion logic
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package com.ioa.conversation;
|
||||
|
||||
public enum ConversationState {
|
||||
DISCUSSION, TASK_ASSIGNMENT, EXECUTION, CONCLUSION
|
||||
}
|
14
src/main/java/com/ioa/conversation/Message.java
Normal file
14
src/main/java/com/ioa/conversation/Message.java
Normal file
|
@ -0,0 +1,14 @@
|
|||
package com.ioa.conversation;
|
||||
|
||||
public class Message {
|
||||
private String sender;
|
||||
private String content;
|
||||
|
||||
public Message(String sender, String content) {
|
||||
this.sender = sender;
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public String getSender() { return sender; }
|
||||
public String getContent() { return content; }
|
||||
}
|
54
src/main/java/com/ioa/model/BedrockLanguageModel.java
Normal file
54
src/main/java/com/ioa/model/BedrockLanguageModel.java
Normal file
|
@ -0,0 +1,54 @@
|
|||
package com.ioa.model;
|
||||
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
|
||||
import software.amazon.awssdk.regions.Region;
|
||||
import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient;
|
||||
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelRequest;
|
||||
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelResponse;
|
||||
import software.amazon.awssdk.core.SdkBytes;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.HashMap;
|
||||
|
||||
public class BedrockLanguageModel {
|
||||
private final BedrockRuntimeClient bedrockClient;
|
||||
private final ObjectMapper objectMapper;
|
||||
private final String modelId;
|
||||
|
||||
public BedrockLanguageModel(String modelId) {
|
||||
this.bedrockClient = BedrockRuntimeClient.builder()
|
||||
.region(Region.US_EAST_1)
|
||||
.credentialsProvider(ProfileCredentialsProvider.create())
|
||||
.build();
|
||||
this.objectMapper = new ObjectMapper();
|
||||
this.modelId = modelId;
|
||||
}
|
||||
|
||||
public String generate(String prompt) {
|
||||
try {
|
||||
Map<String, Object> requestBody = new HashMap<>();
|
||||
requestBody.put("prompt", prompt);
|
||||
requestBody.put("max_tokens_to_sample", 500);
|
||||
requestBody.put("temperature", 0.7);
|
||||
requestBody.put("top_p", 0.9);
|
||||
|
||||
String jsonPayload = objectMapper.writeValueAsString(requestBody);
|
||||
|
||||
InvokeModelRequest invokeModelRequest = InvokeModelRequest.builder()
|
||||
.modelId(modelId)
|
||||
.contentType("application/json")
|
||||
.accept("application/json")
|
||||
.body(SdkBytes.fromUtf8String(jsonPayload))
|
||||
.build();
|
||||
|
||||
InvokeModelResponse response = bedrockClient.invokeModel(invokeModelRequest);
|
||||
String responseBody = response.body().asUtf8String();
|
||||
|
||||
Map<String, Object> responseMap = objectMapper.readValue(responseBody, Map.class);
|
||||
return (String) responseMap.get("completion");
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException("Error generating text with Bedrock", e);
|
||||
}
|
||||
}
|
||||
}
|
32
src/main/java/com/ioa/task/Task.java
Normal file
32
src/main/java/com/ioa/task/Task.java
Normal file
|
@ -0,0 +1,32 @@
|
|||
package com.ioa.task;
|
||||
|
||||
import com.ioa.agent.AgentInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Task {
|
||||
private String id;
|
||||
private String description;
|
||||
private List<String> requiredCapabilities;
|
||||
private List<String> requiredTools;
|
||||
private AgentInfo assignedAgent;
|
||||
private String result;
|
||||
|
||||
// Constructor
|
||||
public Task(String id, String description, List<String> requiredCapabilities, List<String> requiredTools) {
|
||||
this.id = id;
|
||||
this.description = description;
|
||||
this.requiredCapabilities = requiredCapabilities;
|
||||
this.requiredTools = requiredTools;
|
||||
}
|
||||
|
||||
// Getters and setters
|
||||
public String getId() { return id; }
|
||||
public String getDescription() { return description; }
|
||||
public List<String> getRequiredCapabilities() { return requiredCapabilities; }
|
||||
public List<String> getRequiredTools() { return requiredTools; }
|
||||
public AgentInfo getAssignedAgent() { return assignedAgent; }
|
||||
public void setAssignedAgent(AgentInfo assignedAgent) { this.assignedAgent = assignedAgent; }
|
||||
public String getResult() { return result; }
|
||||
public void setResult(String result) { this.result = result; }
|
||||
}
|
63
src/main/java/com/ioa/task/TaskManager.java
Normal file
63
src/main/java/com/ioa/task/TaskManager.java
Normal file
|
@ -0,0 +1,63 @@
|
|||
package com.ioa.task;
|
||||
|
||||
import com.ioa.agent.AgentInfo;
|
||||
import com.ioa.agent.AgentRegistry;
|
||||
import com.ioa.tool.ToolRegistry;
|
||||
import com.ioa.util.TreeOfThought;
|
||||
import dev.langchain4j.model.chat.ChatLanguageModel;
|
||||
import dev.langchain4j.model.output.Response;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class TaskManager {
|
||||
private Map<String, Task> tasks = new HashMap<>();
|
||||
private AgentRegistry agentRegistry;
|
||||
private TreeOfThought treeOfThought;
|
||||
private ToolRegistry toolRegistry;
|
||||
|
||||
public TaskManager(AgentRegistry agentRegistry, ChatLanguageModel model, ToolRegistry toolRegistry) {
|
||||
this.agentRegistry = agentRegistry;
|
||||
this.treeOfThought = new TreeOfThought(model);
|
||||
this.toolRegistry = toolRegistry;
|
||||
}
|
||||
|
||||
public void executeTask(String taskId) {
|
||||
Task task = tasks.get(taskId);
|
||||
AgentInfo agent = task.getAssignedAgent();
|
||||
|
||||
String executionPlanningTask = "Plan the execution of this task: " + task.getDescription() +
|
||||
"\nAssigned agent capabilities: " + agent.getCapabilities() +
|
||||
"\nAvailable tools: " + agent.getTools();
|
||||
|
||||
String reasoning = treeOfThought.reason(executionPlanningTask, 3, 3);
|
||||
|
||||
String executionPrompt = "Based on this execution plan:\n" + reasoning +
|
||||
"\nExecute the task using the available tools and provide the result.";
|
||||
Response<String> response = treeOfThought.getModel().generate(executionPrompt);
|
||||
|
||||
String result = executeToolsFromResponse(response.content(), agent);
|
||||
|
||||
task.setResult(result);
|
||||
}
|
||||
|
||||
private String executeToolsFromResponse(String response, AgentInfo agent) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
for (String tool : agent.getTools()) {
|
||||
if (response.contains(tool)) {
|
||||
Object toolInstance = toolRegistry.getTool(tool);
|
||||
// Execute the tool (this is a simplified representation)
|
||||
result.append(tool).append(" result: ").append(toolInstance.toString()).append("\n");
|
||||
}
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
public void addTask(Task task) {
|
||||
tasks.put(task.getId(), task);
|
||||
}
|
||||
|
||||
public Task getTask(String taskId) {
|
||||
return tasks.get(taskId);
|
||||
}
|
||||
}
|
53
src/main/java/com/ioa/team/TeamFormation.java
Normal file
53
src/main/java/com/ioa/team/TeamFormation.java
Normal file
|
@ -0,0 +1,53 @@
|
|||
package com.ioa.team;
|
||||
|
||||
import com.ioa.agent.AgentInfo;
|
||||
import com.ioa.agent.AgentRegistry;
|
||||
import com.ioa.task.Task;
|
||||
import com.ioa.util.TreeOfThought;
|
||||
import dev.langchain4j.model.chat.ChatLanguageModel;
|
||||
import dev.langchain4j.model.output.Response;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
public class TeamFormation {
|
||||
private AgentRegistry agentRegistry;
|
||||
private TreeOfThought treeOfThought;
|
||||
|
||||
public TeamFormation(AgentRegistry agentRegistry, ChatLanguageModel model) {
|
||||
this.agentRegistry = agentRegistry;
|
||||
this.treeOfThought = new TreeOfThought(model);
|
||||
}
|
||||
|
||||
public List<AgentInfo> formTeam(Task task) {
|
||||
List<String> requiredCapabilities = task.getRequiredCapabilities();
|
||||
List<String> requiredTools = task.getRequiredTools();
|
||||
List<AgentInfo> potentialAgents = agentRegistry.searchAgents(requiredCapabilities);
|
||||
|
||||
String teamFormationTask = "Form the best team for this task: " + task.getDescription() +
|
||||
"\nRequired tools: " + requiredTools +
|
||||
"\nAvailable agents and their tools: " + formatAgentTools(potentialAgents);
|
||||
|
||||
String reasoning = treeOfThought.reason(teamFormationTask, 3, 3);
|
||||
|
||||
String finalDecisionPrompt = "Based on this reasoning:\n" + reasoning +
|
||||
"\nProvide the final team composition as a comma-separated list of agent IDs.";
|
||||
Response<String> response = treeOfThought.getModel().generate(finalDecisionPrompt);
|
||||
|
||||
return parseTeamComposition(response.content(), potentialAgents);
|
||||
}
|
||||
|
||||
private String formatAgentTools(List<AgentInfo> agents) {
|
||||
return agents.stream()
|
||||
.map(agent -> agent.getId() + ": " + agent.getTools())
|
||||
.collect(Collectors.joining(", "));
|
||||
}
|
||||
|
||||
private List<AgentInfo> parseTeamComposition(String composition, List<AgentInfo> potentialAgents) {
|
||||
List<String> selectedIds = Arrays.asList(composition.split(","));
|
||||
return potentialAgents.stream()
|
||||
.filter(agent -> selectedIds.contains(agent.getId()))
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
}
|
126
src/main/java/com/ioa/tool/CommonTools.java
Normal file
126
src/main/java/com/ioa/tool/CommonTools.java
Normal file
|
@ -0,0 +1,126 @@
|
|||
package com.ioa.tool;
|
||||
|
||||
import dev.langchain4j.agent.tool.Tool;
|
||||
|
||||
public class CommonTools {
|
||||
|
||||
@Tool("Search the web for information")
|
||||
public String webSearch(String query) {
|
||||
// Implement web search functionality
|
||||
return "Web search results for: " + query;
|
||||
}
|
||||
|
||||
@Tool("Get current weather information")
|
||||
public String getWeather(String location) {
|
||||
// Implement weather API call
|
||||
return "Weather information for " + location;
|
||||
}
|
||||
|
||||
@Tool("Set a reminder")
|
||||
public String setReminder(String task, String time) {
|
||||
// Implement reminder functionality
|
||||
return "Reminder set for " + task + " at " + time;
|
||||
}
|
||||
|
||||
@Tool("Calculate distances between locations")
|
||||
public String calculateDistance(String from, String to) {
|
||||
// Implement distance calculation
|
||||
return "Distance from " + from + " to " + to;
|
||||
}
|
||||
|
||||
@Tool("Translate text between languages")
|
||||
public String translate(String text, String fromLang, String toLang) {
|
||||
// Implement translation API call
|
||||
return "Translated text from " + fromLang + " to " + toLang;
|
||||
}
|
||||
|
||||
@Tool("Get recipe suggestions")
|
||||
public String getRecipe(String ingredients) {
|
||||
// Implement recipe suggestion logic
|
||||
return "Recipe suggestions for: " + ingredients;
|
||||
}
|
||||
|
||||
@Tool("Check product prices and compare")
|
||||
public String compareProductPrices(String product) {
|
||||
// Implement price comparison logic
|
||||
return "Price comparison for: " + product;
|
||||
}
|
||||
|
||||
@Tool("Book travel arrangements")
|
||||
public String bookTravel(String destination, String dates) {
|
||||
// Implement travel booking logic
|
||||
return "Travel arrangements for " + destination + " on " + dates;
|
||||
}
|
||||
|
||||
@Tool("Find nearby restaurants")
|
||||
public String findRestaurants(String location, String cuisine) {
|
||||
// Implement restaurant search
|
||||
return "Restaurants near " + location + " serving " + cuisine;
|
||||
}
|
||||
|
||||
@Tool("Schedule appointments")
|
||||
public String scheduleAppointment(String service, String date) {
|
||||
// Implement appointment scheduling
|
||||
return "Appointment scheduled for " + service + " on " + date;
|
||||
}
|
||||
|
||||
@Tool("Get movie recommendations")
|
||||
public String getMovieRecommendations(String genres, String mood) {
|
||||
// Implement movie recommendation logic
|
||||
return "Movie recommendations for " + genres + " matching " + mood + " mood";
|
||||
}
|
||||
|
||||
@Tool("Find and book fitness classes")
|
||||
public String findFitnessClasses(String type, String location) {
|
||||
// Implement fitness class search and booking
|
||||
return "Fitness classes for " + type + " near " + location;
|
||||
}
|
||||
|
||||
@Tool("Get public transport information")
|
||||
public String getPublicTransport(String from, String to) {
|
||||
// Implement public transport routing
|
||||
return "Public transport options from " + from + " to " + to;
|
||||
}
|
||||
|
||||
@Tool("Track package deliveries")
|
||||
public String trackPackage(String trackingNumber) {
|
||||
// Implement package tracking
|
||||
return "Tracking information for package: " + trackingNumber;
|
||||
}
|
||||
|
||||
@Tool("Get news updates")
|
||||
public String getNewsUpdates(String topics) {
|
||||
// Implement news aggregation
|
||||
return "Latest news updates on: " + topics;
|
||||
}
|
||||
|
||||
@Tool("Find and apply for jobs")
|
||||
public String jobSearch(String field, String location) {
|
||||
// Implement job search functionality
|
||||
return "Job openings in " + field + " near " + location;
|
||||
}
|
||||
|
||||
@Tool("Get health and medical advice")
|
||||
public String getMedicalAdvice(String symptoms) {
|
||||
// Implement medical advice lookup (with disclaimer)
|
||||
return "General health information for symptoms: " + symptoms;
|
||||
}
|
||||
|
||||
@Tool("Find and book event tickets")
|
||||
public String findEventTickets(String event, String location) {
|
||||
// Implement event ticket search and booking
|
||||
return "Ticket options for " + event + " in " + location;
|
||||
}
|
||||
|
||||
@Tool("Get financial advice and budgeting tips")
|
||||
public String getFinancialAdvice(String income, String expenses) {
|
||||
// Implement financial advice generation
|
||||
return "Financial advice based on income: " + income + " and expenses: " + expenses;
|
||||
}
|
||||
|
||||
@Tool("Find and book home services")
|
||||
public String findHomeServices(String service, String location) {
|
||||
// Implement home service search and booking
|
||||
return "Home service options for " + service + " in " + location;
|
||||
}
|
||||
}
|
20
src/main/java/com/ioa/tool/ToolRegistry.java
Normal file
20
src/main/java/com/ioa/tool/ToolRegistry.java
Normal file
|
@ -0,0 +1,20 @@
|
|||
package com.ioa.tool;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
public class ToolRegistry {
|
||||
private Map<String, Object> tools = new HashMap<>();
|
||||
|
||||
public void registerTool(String name, Object tool) {
|
||||
tools.put(name, tool);
|
||||
}
|
||||
|
||||
public Object getTool(String name) {
|
||||
return tools.get(name);
|
||||
}
|
||||
|
||||
public Map<String, Object> getAllTools() {
|
||||
return new HashMap<>(tools);
|
||||
}
|
||||
}
|
45
src/main/java/com/ioa/util/TreeOfThought.java
Normal file
45
src/main/java/com/ioa/util/TreeOfThought.java
Normal file
|
@ -0,0 +1,45 @@
|
|||
package com.ioa.util;
|
||||
|
||||
import dev.langchain4j.model.chat.ChatLanguageModel;
|
||||
import dev.langchain4j.model.output.Response;
|
||||
|
||||
public class TreeOfThought {
|
||||
private final ChatLanguageModel model;
|
||||
|
||||
public TreeOfThought(ChatLanguageModel model) {
|
||||
this.model = model;
|
||||
}
|
||||
|
||||
public String reason(String task, int depth, int branches) {
|
||||
return exploreThought(task, depth, branches, "");
|
||||
}
|
||||
|
||||
private String exploreThought(String task, int depth, int branches, String path) {
|
||||
if (depth == 0) {
|
||||
return evaluateLeaf(task, path);
|
||||
}
|
||||
|
||||
StringBuilder result = new StringBuilder();
|
||||
for (int i = 0; i < branches; i++) {
|
||||
String branchPrompt = "Consider the task: " + task + "\nCurrent path: " + path +
|
||||
"\nExplore a new branch of thought (branch " + (i+1) + "/" + branches + "):";
|
||||
Response<String> response = model.generate(branchPrompt);
|
||||
String thought = response.content();
|
||||
|
||||
result.append("Branch ").append(i + 1).append(":\n");
|
||||
result.append(thought).append("\n");
|
||||
result.append(exploreThought(task, depth - 1, branches, path + " -> " + thought)).append("\n\n");
|
||||
}
|
||||
return result.toString();
|
||||
}
|
||||
|
||||
private String evaluateLeaf(String task, String path) {
|
||||
String prompt = "Evaluate the effectiveness of this approach for the task: " + task + "\nPath: " + path;
|
||||
Response<String> response = model.generate(prompt);
|
||||
return response.content();
|
||||
}
|
||||
|
||||
public ChatLanguageModel getModel() {
|
||||
return model;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user