AI rule node: use ObjectNode instead of more general JsonNode for JSON Schema config field
This commit is contained in:
parent
cb106760c1
commit
2e5aab3fd6
@ -16,6 +16,7 @@
|
|||||||
package org.thingsboard.rule.engine.ai;
|
package org.thingsboard.rule.engine.ai;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import dev.langchain4j.model.chat.request.json.JsonArraySchema;
|
import dev.langchain4j.model.chat.request.json.JsonArraySchema;
|
||||||
import dev.langchain4j.model.chat.request.json.JsonBooleanSchema;
|
import dev.langchain4j.model.chat.request.json.JsonBooleanSchema;
|
||||||
import dev.langchain4j.model.chat.request.json.JsonEnumSchema;
|
import dev.langchain4j.model.chat.request.json.JsonEnumSchema;
|
||||||
@ -42,10 +43,10 @@ final class Langchain4jJsonSchemaAdapter {
|
|||||||
/**
|
/**
|
||||||
* Creates a Langchain4j {@link JsonSchema} from the given root JSON Schema node.
|
* Creates a Langchain4j {@link JsonSchema} from the given root JSON Schema node.
|
||||||
*
|
*
|
||||||
* @param rootSchemaNode a valid JSON Schema as a Jackson {@link JsonNode}
|
* @param rootSchemaNode a valid JSON Schema as a Jackson {@link ObjectNode}
|
||||||
* @return the corresponding Langchain4j {@link JsonSchema}
|
* @return the corresponding Langchain4j {@link JsonSchema}
|
||||||
*/
|
*/
|
||||||
public static JsonSchema fromJsonNode(JsonNode rootSchemaNode) {
|
public static JsonSchema fromJsonNode(ObjectNode rootSchemaNode) {
|
||||||
return JsonSchema.builder()
|
return JsonSchema.builder()
|
||||||
.name(rootSchemaNode.get("title").textValue())
|
.name(rootSchemaNode.get("title").textValue())
|
||||||
.rootElement(parse(rootSchemaNode))
|
.rootElement(parse(rootSchemaNode))
|
||||||
|
|||||||
@ -16,6 +16,7 @@
|
|||||||
package org.thingsboard.rule.engine.ai;
|
package org.thingsboard.rule.engine.ai;
|
||||||
|
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.JsonNode;
|
||||||
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import com.google.common.util.concurrent.FutureCallback;
|
import com.google.common.util.concurrent.FutureCallback;
|
||||||
import com.google.common.util.concurrent.ListenableFuture;
|
import com.google.common.util.concurrent.ListenableFuture;
|
||||||
import dev.langchain4j.data.message.SystemMessage;
|
import dev.langchain4j.data.message.SystemMessage;
|
||||||
@ -97,11 +98,11 @@ public final class TbAiNode extends TbAbstractExternalNode implements TbNode {
|
|||||||
aiSettingsId = config.getAiSettingsId();
|
aiSettingsId = config.getAiSettingsId();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static JsonSchema getJsonSchema(ResponseFormatType responseFormatType, JsonNode jsonSchema) {
|
private static JsonSchema getJsonSchema(ResponseFormatType responseFormatType, ObjectNode jsonSchema) {
|
||||||
if (responseFormatType == ResponseFormatType.TEXT) {
|
if (responseFormatType == ResponseFormatType.TEXT) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return responseFormatType == ResponseFormatType.JSON && jsonSchema != null && !jsonSchema.isNull() ? Langchain4jJsonSchemaAdapter.fromJsonNode(jsonSchema) : null;
|
return responseFormatType == ResponseFormatType.JSON && jsonSchema != null ? Langchain4jJsonSchemaAdapter.fromJsonNode(jsonSchema) : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -16,7 +16,7 @@
|
|||||||
package org.thingsboard.rule.engine.ai;
|
package org.thingsboard.rule.engine.ai;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||||
import com.fasterxml.jackson.databind.JsonNode;
|
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||||
import dev.langchain4j.model.chat.request.ResponseFormatType;
|
import dev.langchain4j.model.chat.request.ResponseFormatType;
|
||||||
import jakarta.validation.constraints.AssertTrue;
|
import jakarta.validation.constraints.AssertTrue;
|
||||||
import jakarta.validation.constraints.Max;
|
import jakarta.validation.constraints.Max;
|
||||||
@ -46,7 +46,7 @@ public class TbAiNodeConfiguration implements NodeConfiguration<TbAiNodeConfigur
|
|||||||
@NotNull
|
@NotNull
|
||||||
private ResponseFormatType responseFormatType;
|
private ResponseFormatType responseFormatType;
|
||||||
|
|
||||||
private JsonNode jsonSchema;
|
private ObjectNode jsonSchema;
|
||||||
|
|
||||||
@Min(value = 1, message = "must be at least 1 second")
|
@Min(value = 1, message = "must be at least 1 second")
|
||||||
@Max(value = 600, message = "cannot exceed 600 seconds (10 minutes)")
|
@Max(value = 600, message = "cannot exceed 600 seconds (10 minutes)")
|
||||||
@ -55,7 +55,7 @@ public class TbAiNodeConfiguration implements NodeConfiguration<TbAiNodeConfigur
|
|||||||
@JsonIgnore
|
@JsonIgnore
|
||||||
@AssertTrue(message = "provided JSON Schema must conform to the Draft 2020-12 meta-schema")
|
@AssertTrue(message = "provided JSON Schema must conform to the Draft 2020-12 meta-schema")
|
||||||
public boolean isJsonSchemaValid() {
|
public boolean isJsonSchemaValid() {
|
||||||
return jsonSchema == null || jsonSchema.isNull() || JsonSchemaUtils.isValidJsonSchema(jsonSchema);
|
return jsonSchema == null || JsonSchemaUtils.isValidJsonSchema(jsonSchema);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user