From 14bcb074adad9deb9e658fdf2824625395e1bd87 Mon Sep 17 00:00:00 2001 From: Hailong Cui Date: Thu, 18 Sep 2025 10:43:44 +0800 Subject: [PATCH 1/3] add escape output parameter Signed-off-by: Hailong Cui --- .../org/opensearch/ml/common/utils/StringUtils.java | 9 +++++++-- .../org/opensearch/ml/common/utils/ToolUtils.java | 1 + .../opensearch/ml/common/utils/StringUtilsTest.java | 11 +++++++++-- .../agent/MLConversationalFlowAgentRunner.java | 8 +++++++- .../ml/engine/algorithms/agent/MLFlowAgentRunner.java | 11 ++++++++++- 5 files changed, 34 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/org/opensearch/ml/common/utils/StringUtils.java b/common/src/main/java/org/opensearch/ml/common/utils/StringUtils.java index 61a275e5f6..356176d6c7 100644 --- a/common/src/main/java/org/opensearch/ml/common/utils/StringUtils.java +++ b/common/src/main/java/org/opensearch/ml/common/utils/StringUtils.java @@ -129,11 +129,16 @@ public static boolean isJson(String json) { * prepareJsonValue("{\"key\":123}") → {\"key\":123} (valid JSON object, unchanged) * * @param input + * @param escape * @return */ - public static String prepareJsonValue(String input) { + public static String prepareJsonValue(String input, boolean escape) { if (isJson(input)) { - return input; + if (!escape) { + return input; + } else { + return escapeJson(input); + } } return escapeJson(input); } diff --git a/common/src/main/java/org/opensearch/ml/common/utils/ToolUtils.java b/common/src/main/java/org/opensearch/ml/common/utils/ToolUtils.java index becf53e3c8..d7ee79cbd1 100644 --- a/common/src/main/java/org/opensearch/ml/common/utils/ToolUtils.java +++ b/common/src/main/java/org/opensearch/ml/common/utils/ToolUtils.java @@ -33,6 +33,7 @@ public class ToolUtils { public static final String TOOL_OUTPUT_FILTERS_FIELD = "output_filter"; + public static final String TOOL_OUTPUT_ESCAPED = "output_escaped"; public static final String TOOL_REQUIRED_PARAMS = "required_parameters"; public static final String NO_ESCAPE_PARAMS = "no_escape_params"; diff --git a/common/src/test/java/org/opensearch/ml/common/utils/StringUtilsTest.java b/common/src/test/java/org/opensearch/ml/common/utils/StringUtilsTest.java index 155f78d3d7..2013f4581e 100644 --- a/common/src/test/java/org/opensearch/ml/common/utils/StringUtilsTest.java +++ b/common/src/test/java/org/opensearch/ml/common/utils/StringUtilsTest.java @@ -857,14 +857,21 @@ public void testValidateFields_InvalidCharacterSet() { @Test public void prepareJsonValue_returnsRawIfJson() { String json = "{\"key\": 123}"; - String result = StringUtils.prepareJsonValue(json); + String result = StringUtils.prepareJsonValue(json, false); assertSame(json, result); // branch where isJson(input)==true } + @Test + public void prepareJsonValue_returnEscapeJsonIfForce() { + String json = "{\"key\": 123}"; + String result = StringUtils.prepareJsonValue(json, true); + assertEquals("{\\\"key\\\": 123}", result); + } + @Test public void prepareJsonValue_escapesBadCharsOtherwise() { String input = "Tom & Jerry \"