From 4392f1b72a0ac03dbb4699277e8eb9faaa79f615 Mon Sep 17 00:00:00 2001 From: Christian Tzolov Date: Sat, 20 Jul 2024 11:14:18 +0200 Subject: [PATCH] Relax AbstractMessage parameter constrains. Remove jackson auto-module registrattion --- models/spring-ai-anthropic/pom.xml | 7 +++--- .../ai/chat/messages/AbstractMessage.java | 4 +++- .../ai/converter/BeanOutputConverter.java | 24 +++++++++---------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/models/spring-ai-anthropic/pom.xml b/models/spring-ai-anthropic/pom.xml index 732ae38fa..13c57803c 100644 --- a/models/spring-ai-anthropic/pom.xml +++ b/models/spring-ai-anthropic/pom.xml @@ -1,6 +1,7 @@ + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 4.0.0 org.springframework.ai @@ -78,11 +79,9 @@ com.fasterxml.jackson.dataformat jackson-dataformat-xml - 2.11.1 test - - + \ No newline at end of file diff --git a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java index 179c7121a..05a89117c 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/chat/messages/AbstractMessage.java @@ -48,7 +48,9 @@ public abstract class AbstractMessage implements Message { protected AbstractMessage(MessageType messageType, String textContent, Map metadata) { Assert.notNull(messageType, "Message type must not be null"); - Assert.notNull(textContent, "Content must not be null"); + if (messageType == MessageType.SYSTEM || messageType == MessageType.USER) { + Assert.notNull(textContent, "Content must not be null for SYSTEM or USER messages"); + } this.messageType = messageType; this.textContent = textContent; this.metadata = new HashMap<>(metadata); diff --git a/spring-ai-core/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java b/spring-ai-core/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java index 5225a1ac7..c267e06f5 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/converter/BeanOutputConverter.java @@ -15,8 +15,17 @@ */ package org.springframework.ai.converter; +import static com.github.victools.jsonschema.generator.OptionPreset.PLAIN_JSON; +import static com.github.victools.jsonschema.generator.SchemaVersion.DRAFT_2020_12; + +import java.lang.reflect.Type; import java.util.Objects; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.lang.NonNull; + import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.util.DefaultIndenter; @@ -25,21 +34,11 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; -import com.fasterxml.jackson.databind.json.JsonMapper; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.github.victools.jsonschema.generator.SchemaGenerator; import com.github.victools.jsonschema.generator.SchemaGeneratorConfig; import com.github.victools.jsonschema.generator.SchemaGeneratorConfigBuilder; import com.github.victools.jsonschema.module.jackson.JacksonModule; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import org.springframework.core.ParameterizedTypeReference; -import org.springframework.lang.NonNull; -import java.lang.reflect.Type; - -import static com.github.victools.jsonschema.generator.OptionPreset.PLAIN_JSON; -import static com.github.victools.jsonschema.generator.SchemaVersion.DRAFT_2020_12; /** * An implementation of {@link StructuredOutputConverter} that transforms the LLM output @@ -64,7 +63,7 @@ public class BeanOutputConverter implements StructuredOutputConverter { /** * The target class type reference to which the output will be converted. */ - @SuppressWarnings({ "FieldMayBeFinal", "rawtypes" }) + @SuppressWarnings({ "FieldMayBeFinal"}) private TypeReference typeRef; /** The object mapper used for deserialization and other JSON operations. */ @@ -182,8 +181,9 @@ public class BeanOutputConverter implements StructuredOutputConverter { * @return Configured object mapper. */ protected ObjectMapper getObjectMapper() { - ObjectMapper mapper = JsonMapper.builder().findAndAddModules().build(); + ObjectMapper mapper = new ObjectMapper(); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + mapper.registerModule(new JavaTimeModule()); return mapper; }