Migrated Bedrock from Gson to Jackson. (#1730)
## Issue Closes #1687 ## Change Migrate Bedrock from Gson to Jackson ## General checklist <!-- Please double-check the following points and mark them like this: [X] --> - [x] There are no breaking changes - [ ] I have added unit and integration tests for my change - [x] I have manually run all the unit and integration tests in the module I have added/changed, and they are all green - [x] I have manually run all the unit and integration tests in the [core](https://github.com/langchain4j/langchain4j/tree/main/langchain4j-core) and [main](https://github.com/langchain4j/langchain4j/tree/main/langchain4j) modules, and they are all green <!-- Before adding documentation and example(s) (below), please wait until the PR is reviewed and approved. --> - [ ] I have added/updated the [documentation](https://github.com/langchain4j/langchain4j/tree/main/docs/docs) - [ ] I have added an example in the [examples repo](https://github.com/langchain4j/langchain4j-examples) (only for "big" features) - [ ] I have added/updated [Spring Boot starter(s)](https://github.com/langchain4j/langchain4j-spring) (if applicable)
This commit is contained in:
parent
429f53a9b1
commit
6ee0f68a7e
|
@ -37,6 +37,11 @@
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.fasterxml.jackson.core</groupId>
|
||||||
|
<artifactId>jackson-databind</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.junit.jupiter</groupId>
|
<groupId>org.junit.jupiter</groupId>
|
||||||
<artifactId>junit-jupiter-engine</artifactId>
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
|
|
@ -11,7 +11,7 @@ import dev.langchain4j.data.message.Content;
|
||||||
import dev.langchain4j.data.message.ImageContent;
|
import dev.langchain4j.data.message.ImageContent;
|
||||||
import dev.langchain4j.data.message.TextContent;
|
import dev.langchain4j.data.message.TextContent;
|
||||||
import dev.langchain4j.data.message.UserMessage;
|
import dev.langchain4j.data.message.UserMessage;
|
||||||
import dev.langchain4j.internal.Json;
|
import dev.langchain4j.model.bedrock.internal.Json;
|
||||||
import dev.langchain4j.model.bedrock.internal.AbstractBedrockChatModel;
|
import dev.langchain4j.model.bedrock.internal.AbstractBedrockChatModel;
|
||||||
import dev.langchain4j.model.output.Response;
|
import dev.langchain4j.model.output.Response;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
|
|
@ -4,7 +4,7 @@ import static dev.langchain4j.internal.RetryUtils.withRetry;
|
||||||
|
|
||||||
import dev.langchain4j.data.message.AiMessage;
|
import dev.langchain4j.data.message.AiMessage;
|
||||||
import dev.langchain4j.data.message.ChatMessage;
|
import dev.langchain4j.data.message.ChatMessage;
|
||||||
import dev.langchain4j.internal.Json;
|
import dev.langchain4j.model.bedrock.internal.Json;
|
||||||
import dev.langchain4j.model.bedrock.internal.AbstractBedrockChatModel;
|
import dev.langchain4j.model.bedrock.internal.AbstractBedrockChatModel;
|
||||||
import dev.langchain4j.model.output.Response;
|
import dev.langchain4j.model.output.Response;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
|
@ -1,30 +1,21 @@
|
||||||
package dev.langchain4j.model.bedrock.internal;
|
package dev.langchain4j.model.bedrock.internal;
|
||||||
|
|
||||||
|
import static dev.langchain4j.internal.RetryUtils.withRetry;
|
||||||
|
|
||||||
import dev.langchain4j.data.message.AiMessage;
|
import dev.langchain4j.data.message.AiMessage;
|
||||||
import dev.langchain4j.data.message.ChatMessage;
|
import dev.langchain4j.data.message.ChatMessage;
|
||||||
import dev.langchain4j.data.message.ChatMessageType;
|
|
||||||
import dev.langchain4j.internal.Json;
|
|
||||||
import dev.langchain4j.model.chat.ChatLanguageModel;
|
import dev.langchain4j.model.chat.ChatLanguageModel;
|
||||||
import dev.langchain4j.model.output.Response;
|
import dev.langchain4j.model.output.Response;
|
||||||
import lombok.Builder;
|
|
||||||
import lombok.Getter;
|
|
||||||
import lombok.experimental.SuperBuilder;
|
|
||||||
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
|
|
||||||
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
|
|
||||||
import software.amazon.awssdk.core.SdkBytes;
|
|
||||||
import software.amazon.awssdk.regions.Region;
|
|
||||||
import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeAsyncClient;
|
|
||||||
import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient;
|
|
||||||
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelRequest;
|
|
||||||
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelResponse;
|
|
||||||
|
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import lombok.Getter;
|
||||||
import static dev.langchain4j.internal.RetryUtils.withRetry;
|
import lombok.experimental.SuperBuilder;
|
||||||
import static java.util.stream.Collectors.joining;
|
import software.amazon.awssdk.core.SdkBytes;
|
||||||
|
import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient;
|
||||||
|
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelRequest;
|
||||||
|
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bedrock chat model
|
* Bedrock chat model
|
||||||
|
|
|
@ -1,11 +1,18 @@
|
||||||
package dev.langchain4j.model.bedrock.internal;
|
package dev.langchain4j.model.bedrock.internal;
|
||||||
|
|
||||||
|
import static dev.langchain4j.internal.RetryUtils.withRetry;
|
||||||
|
|
||||||
import dev.langchain4j.data.embedding.Embedding;
|
import dev.langchain4j.data.embedding.Embedding;
|
||||||
import dev.langchain4j.data.segment.TextSegment;
|
import dev.langchain4j.data.segment.TextSegment;
|
||||||
import dev.langchain4j.internal.Json;
|
|
||||||
import dev.langchain4j.model.embedding.EmbeddingModel;
|
import dev.langchain4j.model.embedding.EmbeddingModel;
|
||||||
import dev.langchain4j.model.output.Response;
|
import dev.langchain4j.model.output.Response;
|
||||||
import dev.langchain4j.model.output.TokenUsage;
|
import dev.langchain4j.model.output.TokenUsage;
|
||||||
|
import java.nio.charset.Charset;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
|
@ -17,15 +24,6 @@ import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient;
|
||||||
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelRequest;
|
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelRequest;
|
||||||
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelResponse;
|
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelResponse;
|
||||||
|
|
||||||
import java.nio.charset.Charset;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
import static dev.langchain4j.internal.RetryUtils.withRetry;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract bedrock embedding model
|
* Abstract bedrock embedding model
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
package dev.langchain4j.model.bedrock.internal;
|
package dev.langchain4j.model.bedrock.internal;
|
||||||
|
|
||||||
import dev.langchain4j.agent.tool.ToolSpecification;
|
|
||||||
import dev.langchain4j.data.message.AiMessage;
|
import dev.langchain4j.data.message.AiMessage;
|
||||||
import dev.langchain4j.data.message.ChatMessage;
|
import dev.langchain4j.data.message.ChatMessage;
|
||||||
import dev.langchain4j.data.message.UserMessage;
|
import dev.langchain4j.data.message.UserMessage;
|
||||||
import dev.langchain4j.internal.Json;
|
|
||||||
import dev.langchain4j.model.StreamingResponseHandler;
|
import dev.langchain4j.model.StreamingResponseHandler;
|
||||||
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
|
import dev.langchain4j.model.chat.StreamingChatLanguageModel;
|
||||||
import dev.langchain4j.model.output.Response;
|
import dev.langchain4j.model.output.Response;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
import software.amazon.awssdk.core.SdkBytes;
|
import software.amazon.awssdk.core.SdkBytes;
|
||||||
|
@ -15,10 +15,6 @@ import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeAsyncClient;
|
||||||
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelWithResponseStreamRequest;
|
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelWithResponseStreamRequest;
|
||||||
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelWithResponseStreamResponseHandler;
|
import software.amazon.awssdk.services.bedrockruntime.model.InvokeModelWithResponseStreamResponseHandler;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bedrock Streaming chat model
|
* Bedrock Streaming chat model
|
||||||
*/
|
*/
|
||||||
|
@ -28,7 +24,7 @@ public abstract class AbstractBedrockStreamingChatModel extends AbstractSharedBe
|
||||||
@Getter
|
@Getter
|
||||||
private final BedrockRuntimeAsyncClient asyncClient = initAsyncClient();
|
private final BedrockRuntimeAsyncClient asyncClient = initAsyncClient();
|
||||||
|
|
||||||
class StreamingResponse {
|
static class StreamingResponse {
|
||||||
public String completion;
|
public String completion;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,21 +1,18 @@
|
||||||
package dev.langchain4j.model.bedrock.internal;
|
package dev.langchain4j.model.bedrock.internal;
|
||||||
|
|
||||||
|
import static java.util.stream.Collectors.joining;
|
||||||
|
|
||||||
import dev.langchain4j.data.message.ChatMessage;
|
import dev.langchain4j.data.message.ChatMessage;
|
||||||
import dev.langchain4j.data.message.ChatMessageType;
|
import dev.langchain4j.data.message.ChatMessageType;
|
||||||
import dev.langchain4j.internal.Json;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import lombok.Builder;
|
import lombok.Builder;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.experimental.SuperBuilder;
|
import lombok.experimental.SuperBuilder;
|
||||||
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
|
import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider;
|
||||||
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
|
import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider;
|
||||||
import software.amazon.awssdk.regions.Region;
|
import software.amazon.awssdk.regions.Region;
|
||||||
import software.amazon.awssdk.services.bedrockruntime.BedrockRuntimeClient;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
import static java.util.stream.Collectors.joining;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package dev.langchain4j.model.bedrock.internal;
|
||||||
|
|
||||||
|
import static com.fasterxml.jackson.databind.SerializationFeature.INDENT_OUTPUT;
|
||||||
|
|
||||||
|
import com.fasterxml.jackson.annotation.JsonInclude;
|
||||||
|
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||||
|
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||||
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||||
|
|
||||||
|
public class Json {
|
||||||
|
|
||||||
|
static final ObjectMapper OBJECT_MAPPER = new ObjectMapper()
|
||||||
|
.enable(INDENT_OUTPUT)
|
||||||
|
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
|
||||||
|
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
|
||||||
|
|
||||||
|
public static String toJson(Object o) {
|
||||||
|
try {
|
||||||
|
return OBJECT_MAPPER.writeValueAsString(o);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> T fromJson(String json, Class<T> type) {
|
||||||
|
try {
|
||||||
|
return OBJECT_MAPPER.readValue(json, type);
|
||||||
|
} catch (JsonProcessingException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue