Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,91 @@ public enum PromptEnum {
FORM_INPUT_TOOL_DESCRIPTION("FORM_INPUT_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.AGENT, true,
"tool/form-input-tool-description.txt"),
FORM_INPUT_TOOL_PARAMETERS("FORM_INPUT_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.AGENT, true,
"tool/form-input-tool-parameters.txt");
"tool/form-input-tool-parameters.txt"),

// Bash Tool
BASH_TOOL_DESCRIPTION("BASH_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
"tool/bash-tool-description.txt"),
BASH_TOOL_PARAMETERS("BASH_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/bash-tool-parameters.txt"),

// Text File Operator Tool
TEXTFILEOPERATOR_TOOL_DESCRIPTION("TEXTFILEOPERATOR_TOOL_DESCRIPTION", MessageType.SYSTEM,
PromptType.TOOL_DESCRIPTION, true, "tool/textfileoperator-tool-description.txt"),
TEXTFILEOPERATOR_TOOL_PARAMETERS("TEXTFILEOPERATOR_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER,
true, "tool/textfileoperator-tool-parameters.txt"),

// Browser Use Tool
BROWSER_USE_TOOL_DESCRIPTION("BROWSER_USE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
"tool/browser-use-tool-description.txt"),
BROWSER_USE_TOOL_PARAMETERS("BROWSER_USE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/browser-use-tool-parameters.txt"),

// Python Execute Tool
PYTHON_EXECUTE_TOOL_DESCRIPTION("PYTHON_EXECUTE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION,
true, "tool/python-execute-tool-description.txt"),
PYTHON_EXECUTE_TOOL_PARAMETERS("PYTHON_EXECUTE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER,
true, "tool/python-execute-tool-parameters.txt"),

// Database Use Tool
DATABASE_USE_TOOL_DESCRIPTION("DATABASE_USE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION,
true, "tool/database-use-tool-description.txt"),
DATABASE_USE_TOOL_PARAMETERS("DATABASE_USE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/database-use-tool-parameters.txt"),

// Cron Tool
CRON_TOOL_TOOL_DESCRIPTION("CRON_TOOL_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
"tool/cron-tool-tool-description.txt"),
CRON_TOOL_TOOL_PARAMETERS("CRON_TOOL_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/cron-tool-tool-parameters.txt"),

// Inner Storage Content Tool
INNER_STORAGE_CONTENT_TOOL_TOOL_DESCRIPTION("INNER_STORAGE_CONTENT_TOOL_TOOL_DESCRIPTION", MessageType.SYSTEM,
PromptType.TOOL_DESCRIPTION, true, "tool/inner-storage-content-tool-tool-description.txt"),
INNER_STORAGE_CONTENT_TOOL_TOOL_PARAMETERS("INNER_STORAGE_CONTENT_TOOL_TOOL_PARAMETERS", MessageType.SYSTEM,
PromptType.TOOL_PARAMETER, true, "tool/inner-storage-content-tool-tool-parameters.txt"),

// Doc Loader Tool
DOC_LOADER_TOOL_DESCRIPTION("DOC_LOADER_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
"tool/doc-loader-tool-description.txt"),
DOC_LOADER_TOOL_PARAMETERS("DOC_LOADER_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/doc-loader-tool-parameters.txt"),

// File Merge Tool
FILE_MERGE_TOOL_DESCRIPTION("FILE_MERGE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
"tool/file-merge-tool-description.txt"),
FILE_MERGE_TOOL_PARAMETERS("FILE_MERGE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/file-merge-tool-parameters.txt"),

// Data Split Tool
DATA_SPLIT_TOOL_DESCRIPTION("DATA_SPLIT_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
"tool/data-split-tool-description.txt"),
DATA_SPLIT_TOOL_PARAMETERS("DATA_SPLIT_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/data-split-tool-parameters.txt"),

// Map Output Tool
MAP_OUTPUT_TOOL_DESCRIPTION("MAP_OUTPUT_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
"tool/map-output-tool-description.txt"),
MAP_OUTPUT_TOOL_PARAMETERS("MAP_OUTPUT_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/map-output-tool-parameters.txt"),

// Reduce Operation Tool
REDUCE_OPERATION_TOOL_DESCRIPTION("REDUCE_OPERATION_TOOL_DESCRIPTION", MessageType.SYSTEM,
PromptType.TOOL_DESCRIPTION, true, "tool/reduce-operation-tool-description.txt"),
REDUCE_OPERATION_TOOL_PARAMETERS("REDUCE_OPERATION_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER,
true, "tool/reduce-operation-tool-parameters.txt"),

// Finalize Tool
FINALIZE_TOOL_DESCRIPTION("FINALIZE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
"tool/finalize-tool-description.txt"),
FINALIZE_TOOL_PARAMETERS("FINALIZE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/finalize-tool-parameters.txt"),

// Terminate Tool
TERMINATE_TOOL_DESCRIPTION("TERMINATE_TOOL_DESCRIPTION", MessageType.SYSTEM, PromptType.TOOL_DESCRIPTION, true,
"tool/terminate-tool-description.txt"),
TERMINATE_TOOL_PARAMETERS("TERMINATE_TOOL_PARAMETERS", MessageType.SYSTEM, PromptType.TOOL_PARAMETER, true,
"tool/terminate-tool-parameters.txt");

private String promptName;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,6 @@

public enum PromptType {

LLM, PLANNING, AGENT
LLM, PLANNING, AGENT, TOOL_DESCRIPTION, TOOL_PARAMETER

}
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.Map;
import java.util.concurrent.TimeUnit;

import com.alibaba.cloud.ai.example.manus.tool.ToolPromptManager;
import org.apache.hc.client5.http.classic.HttpClient;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.impl.classic.HttpClients;
Expand Down Expand Up @@ -142,6 +143,9 @@ public class PlanningFactory implements IPlanningFactory {
@Autowired
private StreamingResponseHandler streamingResponseHandler;

@Autowired
private ToolPromptManager toolPromptManager;

@Autowired
@Lazy
private CronService cronService;
Expand Down Expand Up @@ -214,15 +218,18 @@ public Map<String, ToolCallBackContext> toolCallbackMap(String planId, String ro
return toolCallbackMap;
}
// Add all tool definitions
toolDefinitions.add(BrowserUseTool.getInstance(chromeDriverService, innerStorageService, objectMapper));
toolDefinitions.add(DatabaseUseTool.getInstance(dataSourceService, objectMapper));
toolDefinitions.add(new TerminateTool(planId, terminateColumns));
toolDefinitions.add(new Bash(unifiedDirectoryManager, objectMapper));
toolDefinitions.add(new DocLoaderTool());
toolDefinitions.add(new TextFileOperator(textFileService, innerStorageService, objectMapper));
toolDefinitions
.add(BrowserUseTool.getInstance(chromeDriverService, innerStorageService, objectMapper, toolPromptManager));
toolDefinitions.add(DatabaseUseTool.getInstance(dataSourceService, objectMapper, toolPromptManager));
toolDefinitions.add(new TerminateTool(planId, terminateColumns, toolPromptManager));
toolDefinitions.add(new Bash(unifiedDirectoryManager, objectMapper, toolPromptManager));
toolDefinitions.add(new DocLoaderTool(toolPromptManager));
toolDefinitions
.add(new TextFileOperator(textFileService, innerStorageService, objectMapper, toolPromptManager));
// toolDefinitions.add(new InnerStorageTool(unifiedDirectoryManager));
toolDefinitions.add(new InnerStorageContentTool(unifiedDirectoryManager, summaryWorkflow, recorder));
toolDefinitions.add(new FileMergeTool(unifiedDirectoryManager));
toolDefinitions
.add(new InnerStorageContentTool(unifiedDirectoryManager, summaryWorkflow, recorder, toolPromptManager));
toolDefinitions.add(new FileMergeTool(unifiedDirectoryManager, toolPromptManager));
// toolDefinitions.add(new GoogleSearch());
// toolDefinitions.add(new PythonExecute());
toolDefinitions.add(new FormInputTool(objectMapper, promptService));
Expand All @@ -233,7 +240,7 @@ public Map<String, ToolCallBackContext> toolCallbackMap(String planId, String ro
toolDefinitions.add(new ReduceOperationTool(planId, manusProperties, sharedStateManager,
unifiedDirectoryManager, terminateColumns));
toolDefinitions.add(new FinalizeTool(planId, manusProperties, sharedStateManager, unifiedDirectoryManager));
toolDefinitions.add(new CronTool(cronService, objectMapper));
toolDefinitions.add(new CronTool(cronService, objectMapper, toolPromptManager));

List<McpServiceEntity> functionCallbacks = mcpService.getFunctionCallbacks(planId);
for (McpServiceEntity toolCallback : functionCallbacks) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,11 @@
import org.apache.pdfbox.text.PDFTextStripper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;

import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.ai.tool.function.FunctionToolCallback;

import java.io.File;

public class DocLoaderTool extends AbstractBaseTool<DocLoaderTool.DocLoaderInput> {

private static final Logger log = LoggerFactory.getLogger(DocLoaderTool.class);
Expand Down Expand Up @@ -68,51 +67,36 @@ public void setFilePath(String filePath) {

}

private static String PARAMETERS = """
{
"type": "object",
"properties": {
"file_type": {
"type": "string",
"description": "(required) File type, only support pdf file."
},
"file_path": {
"type": "string",
"description": "(required) Get the absolute path of the file from the user request."
}
},
"required": ["file_type","file_path"]
}
""";

private static final String name = "doc_loader";

private static final String description = """
Get the content information of a local file at a specified path.
Use this tool when you want to get some related information asked by the user.
This tool accepts the file path and gets the related information content.
""";
private final ToolPromptManager toolPromptManager;

public static OpenAiApi.FunctionTool getToolDefinition() {
OpenAiApi.FunctionTool.Function function = new OpenAiApi.FunctionTool.Function(description, name, PARAMETERS);
public OpenAiApi.FunctionTool getToolDefinition() {
String description = getDescription();
String parameters = getParameters();
OpenAiApi.FunctionTool.Function function = new OpenAiApi.FunctionTool.Function(description, name, parameters);
OpenAiApi.FunctionTool functionTool = new OpenAiApi.FunctionTool(function);
return functionTool;
}

/**
* Get FunctionToolCallback for Spring AI
*/
public static FunctionToolCallback<DocLoaderInput, ToolExecuteResult> getFunctionToolCallback() {
public static FunctionToolCallback<DocLoaderInput, ToolExecuteResult> getFunctionToolCallback(
ToolPromptManager toolPromptManager) {
return FunctionToolCallback
.<DocLoaderInput, ToolExecuteResult>builder(name,
(DocLoaderInput input, org.springframework.ai.chat.model.ToolContext context) -> new DocLoaderTool()
.run(input))
.description(description)
(DocLoaderInput input,
org.springframework.ai.chat.model.ToolContext context) -> new DocLoaderTool(
toolPromptManager)
.run(input))
.description(toolPromptManager.getToolDescription("doc_loader"))
.inputType(DocLoaderInput.class)
.build();
}

public DocLoaderTool() {
public DocLoaderTool(ToolPromptManager toolPromptManager) {
this.toolPromptManager = toolPromptManager;
}

private String lastFilePath = "";
Expand Down Expand Up @@ -161,12 +145,12 @@ public String getName() {

@Override
public String getDescription() {
return description;
return toolPromptManager.getToolDescription("doc_loader");
}

@Override
public String getParameters() {
return PARAMETERS;
return toolPromptManager.getToolParameters("doc_loader");
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
import com.alibaba.cloud.ai.example.manus.tool.code.ToolExecuteResult;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.springframework.ai.openai.api.OpenAiApi;

import java.util.List;
Expand All @@ -32,25 +31,21 @@ public class TerminateTool extends AbstractBaseTool<Map<String, Object>> impleme

private final List<String> columns;

private final ToolPromptManager toolPromptManager;

private String lastTerminationMessage = "";

private boolean isTerminated = false;

private String terminationTimestamp = "";

public static OpenAiApi.FunctionTool getToolDefinition(List<String> columns) {
public static OpenAiApi.FunctionTool getToolDefinition(List<String> columns, ToolPromptManager toolPromptManager) {
String parameters = generateParametersJson(columns);
String description = getDescriptions(columns);
String description = toolPromptManager.getToolDescription("terminate");
OpenAiApi.FunctionTool.Function function = new OpenAiApi.FunctionTool.Function(description, name, parameters);
return new OpenAiApi.FunctionTool(function);
}

private static String getDescriptions(List<String> columns) {
// Simple description to avoid generating overly long content
return "Terminate the current execution step with structured data. "
+ "Provide data in JSON format with 'columns' array and 'data' array containing rows of values.";
}

private static String generateParametersJson(List<String> columns) {
String template = """
{
Expand Down Expand Up @@ -94,10 +89,11 @@ public String getCurrentToolStateString() {
currentPlanId != null ? currentPlanId : "N/A", columns != null ? String.join(", ", columns) : "N/A");
}

public TerminateTool(String planId, List<String> columns) {
public TerminateTool(String planId, List<String> columns, ToolPromptManager toolPromptManager) {
this.currentPlanId = planId;
// If columns is null or empty, use "message" as default column
this.columns = (columns == null || columns.isEmpty()) ? List.of("message") : columns;
this.toolPromptManager = toolPromptManager;
}

@Override
Expand Down Expand Up @@ -143,7 +139,7 @@ public String getName() {

@Override
public String getDescription() {
return getDescriptions(this.columns);
return toolPromptManager.getToolDescription("terminate");
}

@Override
Expand Down
Loading
Loading