Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -21,16 +21,18 @@
import java.util.Objects;

import com.github.victools.jsonschema.generator.Option;
import com.github.victools.jsonschema.generator.OptionPreset;
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.generator.SchemaVersion;
import com.github.victools.jsonschema.module.jackson.JacksonOption;
import com.github.victools.jsonschema.module.jackson.JacksonSchemaModule;
import org.jspecify.annotations.NonNull;
import org.jspecify.annotations.Nullable;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import tools.jackson.core.JacksonException;
import tools.jackson.core.type.TypeReference;
import tools.jackson.core.util.DefaultIndenter;
import tools.jackson.core.util.DefaultPrettyPrinter;
import tools.jackson.databind.DeserializationFeature;
Expand Down Expand Up @@ -64,7 +66,9 @@
*/
public class BeanOutputConverter<T> implements StructuredOutputConverter<T> {

private final Logger logger = LoggerFactory.getLogger(BeanOutputConverter.class);
private static final Logger logger = LoggerFactory.getLogger(BeanOutputConverter.class);

private static final MapTypeReference MAP_TYPE_REFERENCE = new MapTypeReference();

/**
* The target class type reference to which the output will be converted.
Expand Down Expand Up @@ -189,9 +193,8 @@ private static ResponseTextCleaner createDefaultTextCleaner() {
private void generateSchema() {
JacksonSchemaModule jacksonModule = new JacksonSchemaModule(JacksonOption.RESPECT_JSONPROPERTY_REQUIRED,
JacksonOption.RESPECT_JSONPROPERTY_ORDER);
SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(
com.github.victools.jsonschema.generator.SchemaVersion.DRAFT_2020_12,
com.github.victools.jsonschema.generator.OptionPreset.PLAIN_JSON)
SchemaGeneratorConfigBuilder configBuilder = new SchemaGeneratorConfigBuilder(SchemaVersion.DRAFT_2020_12,
OptionPreset.PLAIN_JSON)
.with(jacksonModule)
.with(Option.FORBIDDEN_ADDITIONAL_PROPERTIES_BY_DEFAULT);

Expand Down Expand Up @@ -222,22 +225,22 @@ private void generateSchema() {
* subclasses.
* @param jsonNode the JSON schema, in the form of a JSON node
*/
protected void postProcessSchema(@NonNull JsonNode jsonNode) {
@SuppressWarnings("unused")
protected void postProcessSchema(JsonNode jsonNode) {
}

/**
* Parses the given text to transform it to the desired target type.
* @param text The LLM output in string format.
* @return The parsed output in the desired target type.
*/
@SuppressWarnings("unchecked")
@Override
public T convert(String text) {
try {
// Clean the text using the configured text cleaner
text = this.textCleaner.clean(text);

return (T) this.jsonMapper.readValue(text, this.jsonMapper.constructType(this.type));
return this.jsonMapper.readValue(text, this.jsonMapper.constructType(this.type));
}
catch (JacksonException e) {
logger.error(SENSITIVE_DATA_MARKER,
Expand Down Expand Up @@ -285,12 +288,16 @@ public String getJsonSchema() {

public Map<String, Object> getJsonSchemaMap() {
try {
return this.jsonMapper.readValue(this.jsonSchema, Map.class);
return this.jsonMapper.readValue(this.jsonSchema, MAP_TYPE_REFERENCE);
}
catch (JacksonException ex) {
logger.error("Could not parse the JSON Schema to a Map object", ex);
throw new IllegalStateException(ex);
}
}

private static final class MapTypeReference extends TypeReference<Map<String, Object>> {

}

}
Original file line number Diff line number Diff line change
Expand Up @@ -29,9 +29,6 @@
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;
import org.slf4j.LoggerFactory;
import tools.jackson.databind.DeserializationFeature;
import tools.jackson.databind.JsonNode;
Expand All @@ -51,17 +48,12 @@
* @author Soby Chacko
* @author Konstantin Pavlov
*/
@ExtendWith(MockitoExtension.class)
class BeanOutputConverterTest {

private ListAppender<ILoggingEvent> logAppender;

@Mock
private JsonMapper jsonMapperMock;

@BeforeEach
void beforeEach() {

var logger = (Logger) LoggerFactory.getLogger(BeanOutputConverter.class);

this.logAppender = new ListAppender<>();
Expand All @@ -82,19 +74,15 @@ static class TestClass {

private String someString;

@SuppressWarnings("unused")
TestClass() {
}

TestClass(String someString) {
this.someString = someString;
}

String getSomeString() {
return this.someString;
}

public void setSomeString(String someString) {
@SuppressWarnings("unused")
void setSomeString(String someString) {
this.someString = someString;
}

Expand All @@ -104,19 +92,15 @@ static class TestClassWithDateProperty {

private LocalDate someString;

@SuppressWarnings("unused")
TestClassWithDateProperty() {
}

TestClassWithDateProperty(LocalDate someString) {
this.someString = someString;
}

LocalDate getSomeString() {
return this.someString;
}

public void setSomeString(LocalDate someString) {
@SuppressWarnings("unused")
void setSomeString(LocalDate someString) {
this.someString = someString;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ void shouldApplyCleanersInOrder() {

@Test
void shouldWorkWithSingleCleaner() {
var cleaner = new CompositeResponseTextCleaner(text -> text.trim());
var cleaner = new CompositeResponseTextCleaner(String::trim);
String result = cleaner.clean(" content ");
assertThat(result).isEqualTo("content");
}
Expand Down