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 0acba685ac..1477f321a8 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 @@ -95,6 +95,10 @@ public final class TbAiNode extends TbAbstractExternalNode implements TbNode { ); timeoutSeconds = config.getTimeoutSeconds(); + + if (!aiSettingsExist(ctx, config.getAiSettingsId())) { + throw new TbNodeException("[" + ctx.getTenantId() + "] AI settings with ID: " + config.getAiSettingsId() + " were not found", true); + } aiSettingsId = config.getAiSettingsId(); } @@ -105,6 +109,10 @@ public final class TbAiNode extends TbAbstractExternalNode implements TbNode { return responseFormatType == ResponseFormatType.JSON && jsonSchema != null ? Langchain4jJsonSchemaAdapter.fromJsonNode(jsonSchema) : null; } + private static boolean aiSettingsExist(TbContext ctx, AiSettingsId aiSettingsId) { + return ctx.getAiSettingsService().findAiSettingsByTenantIdAndId(ctx.getTenantId(), aiSettingsId).isPresent(); + } + @Override public void onMsg(TbContext ctx, TbMsg msg) throws TbNodeException { var ackedMsg = ackIfNeeded(ctx, msg);