Browse Source

AI rule node: make system prompt optional

pull/13371/head
Dmytro Skarzhynets 1 year ago
parent
commit
80ebd784d8
No known key found for this signature in database GPG Key ID: 2B51652F224037DF
  1. 11
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNode.java
  2. 3
      rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNodeConfiguration.java

11
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNode.java

@ -18,6 +18,7 @@ package org.thingsboard.rule.engine.ai;
import com.fasterxml.jackson.databind.JsonNode;
import com.google.common.util.concurrent.FluentFuture;
import com.google.common.util.concurrent.FutureCallback;
import dev.langchain4j.data.message.ChatMessage;
import dev.langchain4j.data.message.SystemMessage;
import dev.langchain4j.data.message.UserMessage;
import dev.langchain4j.model.chat.ChatModel;
@ -44,6 +45,7 @@ import org.thingsboard.server.common.data.rule.RuleChainType;
import org.thingsboard.server.common.msg.TbMsg;
import org.thingsboard.server.dao.exception.DataValidationException;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import java.util.Optional;
@ -106,11 +108,14 @@ public final class TbAiNode extends TbAbstractExternalNode implements TbNode {
public void onMsg(TbContext ctx, TbMsg msg) {
var ackedMsg = ackIfNeeded(ctx, msg);
var systemMessage = SystemMessage.from(TbNodeUtils.processPattern(systemPrompt, ackedMsg));
var userMessage = UserMessage.from(TbNodeUtils.processPattern(userPrompt, ackedMsg));
List<ChatMessage> chatMessages = new ArrayList<>(2);
if (systemPrompt != null) {
chatMessages.add(SystemMessage.from(TbNodeUtils.processPattern(systemPrompt, ackedMsg)));
}
chatMessages.add(UserMessage.from(TbNodeUtils.processPattern(userPrompt, ackedMsg)));
var chatRequest = ChatRequest.builder()
.messages(List.of(systemMessage, userMessage))
.messages(chatMessages)
.responseFormat(responseFormat)
.build();

3
rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/ai/TbAiNodeConfiguration.java

@ -23,6 +23,7 @@ import jakarta.validation.constraints.Max;
import jakarta.validation.constraints.Min;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
import lombok.Data;
import org.thingsboard.common.util.JsonSchemaUtils;
import org.thingsboard.rule.engine.api.NodeConfiguration;
@ -35,7 +36,7 @@ public class TbAiNodeConfiguration implements NodeConfiguration<TbAiNodeConfigur
@NotNull
private AiModelSettingsId aiModelSettingsId;
@NotBlank
@Pattern(regexp = ".*\\S.*", message = "must contain at least one non-whitespace character")
@Length(min = 1, max = 1000)
private String systemPrompt;

Loading…
Cancel
Save