From 00d32c23741b95608129638cabb6b5c73150d3ff Mon Sep 17 00:00:00 2001 From: Dmytro Skarzhynets Date: Mon, 9 Jun 2025 17:11:52 +0300 Subject: [PATCH] AI rule node: fix wrapping in JSON object if response is not a valid JSON object --- .../main/java/org/thingsboard/rule/engine/ai/TbAiNode.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNode.java index 315a02a3b9..564de8d66e 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNode.java @@ -115,7 +115,7 @@ public final class TbAiNode extends TbAbstractExternalNode implements TbNode { addCallback(sendChatRequest(ctx, chatRequest), new FutureCallback<>() { @Override public void onSuccess(String response) { - if (!isValidJson(response)) { + if (!isValidJsonObject(response)) { response = wrapInJsonObject(response); } tellSuccess(ctx, ackedMsg.transform() @@ -134,9 +134,10 @@ public final class TbAiNode extends TbAbstractExternalNode implements TbNode { return ctx.getExternalCallExecutor().submit(() -> chatModel.chat(chatRequest).aiMessage().text()); } - private static boolean isValidJson(String jsonString) { + private static boolean isValidJsonObject(String jsonString) { try { - return JacksonUtil.toJsonNode(jsonString) != null; + JsonNode result = JacksonUtil.toJsonNode(jsonString); + return result != null && result.isObject(); } catch (IllegalArgumentException e) { return false; }