Skip to content

Commit 1caab62

Browse files
committed
add AG-UI processing
Signed-off-by: Jiaping Zeng <[email protected]>
1 parent 0351e4e commit 1caab62

File tree

9 files changed

+1145
-104
lines changed

9 files changed

+1145
-104
lines changed

ml-algorithms/src/main/java/org/opensearch/ml/engine/algorithms/agent/AgentUtils.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,4 +1014,48 @@ public static Tool createTool(Map<String, Tool.Factory> toolFactories, Map<Strin
10141014

10151015
return tool;
10161016
}
1017+
1018+
public static List<Map<String, Object>> parseFrontendTools(String aguiTools) {
1019+
List<Map<String, Object>> frontendTools = new ArrayList<>();
1020+
if (aguiTools != null && !aguiTools.isEmpty() && !aguiTools.trim().equals("[]")) {
1021+
try {
1022+
Type listType = new TypeToken<List<Map<String, Object>>>() {
1023+
}.getType();
1024+
List<Map<String, Object>> parsed = gson.fromJson(aguiTools, listType);
1025+
if (parsed != null) {
1026+
frontendTools.addAll(parsed);
1027+
}
1028+
} catch (Exception e) {
1029+
log.error("Failed to parse frontend tools: {}", e.getMessage());
1030+
}
1031+
}
1032+
return frontendTools;
1033+
}
1034+
1035+
public static Map<String, Tool> wrapFrontendToolsAsToolObjects(List<Map<String, Object>> frontendTools) {
1036+
Map<String, Tool> wrappedTools = new HashMap<>();
1037+
1038+
for (Map<String, Object> frontendTool : frontendTools) {
1039+
String toolName = (String) frontendTool.get("name");
1040+
String toolDescription = (String) frontendTool.get("description");
1041+
1042+
// Create frontend tool object with source marker
1043+
Map<String, Object> toolAttributes = new HashMap<>();
1044+
toolAttributes.put("source", "frontend");
1045+
toolAttributes.put("tool_definition", frontendTool);
1046+
1047+
Object parameters = frontendTool.get("parameters");
1048+
if (parameters != null) {
1049+
toolAttributes.put("input_schema", gson.toJson(parameters));
1050+
} else {
1051+
Map<String, Object> emptySchema = Map.of("type", "object", "properties", Map.of());
1052+
toolAttributes.put("input_schema", gson.toJson(emptySchema));
1053+
}
1054+
1055+
Tool frontendToolObj = new AGUIFrontendTool(toolName, toolDescription, toolAttributes);
1056+
wrappedTools.put(toolName, frontendToolObj);
1057+
}
1058+
1059+
return wrappedTools;
1060+
}
10171061
}

ml-algorithms/src/main/java/org/opensearch/ml/engine/algorithms/agent/MLAGUIAgentRunner.java

Lines changed: 410 additions & 0 deletions
Large diffs are not rendered by default.

ml-algorithms/src/main/java/org/opensearch/ml/engine/algorithms/agent/MLAgentExecutor.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,17 @@ protected MLAgentRunner getAgentRunner(MLAgent mlAgent) {
653653
sdkClient,
654654
encryptor
655655
);
656+
case AG_UI:
657+
return new MLAGUIAgentRunner(
658+
client,
659+
settings,
660+
clusterService,
661+
xContentRegistry,
662+
toolFactories,
663+
memoryFactoryMap,
664+
sdkClient,
665+
encryptor
666+
);
656667
default:
657668
throw new IllegalArgumentException("Unsupported agent type: " + mlAgent.getType());
658669
}

0 commit comments

Comments
 (0)