From 8b3a077dc15c9e58de1d44aad9b9b48f5da675f5 Mon Sep 17 00:00:00 2001 From: Felipe Zambrin Date: Thu, 14 Aug 2025 00:16:33 -0300 Subject: [PATCH 1/2] updated to new community redis, added example for redis chat memory store --- redis-example/pom.xml | 18 +++++- .../java/RedisChatMemoryStoreExample.java | 60 +++++++++++++++++++ .../main/java/RedisEmbeddingStoreExample.java | 2 +- 3 files changed, 77 insertions(+), 3 deletions(-) create mode 100644 redis-example/src/main/java/RedisChatMemoryStoreExample.java diff --git a/redis-example/pom.xml b/redis-example/pom.xml index 48f26153..5497272c 100644 --- a/redis-example/pom.xml +++ b/redis-example/pom.xml @@ -12,14 +12,28 @@ 17 17 UTF-8 + 1.3.0 + 1.3.0-beta9 dev.langchain4j - langchain4j-redis - 1.0.0-alpha1 + langchain4j + ${version.langchain4j} + + + + dev.langchain4j + langchain4j-google-ai-gemini + ${version.langchain4j} + + + + dev.langchain4j + langchain4j-community-redis + ${version.langchain4j.community-redis} diff --git a/redis-example/src/main/java/RedisChatMemoryStoreExample.java b/redis-example/src/main/java/RedisChatMemoryStoreExample.java new file mode 100644 index 00000000..f3acb789 --- /dev/null +++ b/redis-example/src/main/java/RedisChatMemoryStoreExample.java @@ -0,0 +1,60 @@ +import com.redis.testcontainers.RedisStackContainer; +import dev.langchain4j.community.store.memory.chat.redis.RedisChatMemoryStore; +import dev.langchain4j.data.message.ChatMessage; +import dev.langchain4j.memory.chat.MessageWindowChatMemory; +import dev.langchain4j.model.chat.ChatModel; +import dev.langchain4j.model.googleai.GoogleAiGeminiChatModel; +import dev.langchain4j.service.AiServices; + +import java.util.List; + +import static com.redis.testcontainers.RedisStackContainer.DEFAULT_IMAGE_NAME; +import static com.redis.testcontainers.RedisStackContainer.DEFAULT_TAG; + +public class RedisChatMemoryStoreExample { + + interface Assistant { + + String chat(String message); + } + + public static final String GEMINI_API_KEY = "YOUR_API_KEY_HERE"; // Replace with your actual Gemini API key + + public static void main(String[] args) { + RedisStackContainer redis = new RedisStackContainer(DEFAULT_IMAGE_NAME.withTag(DEFAULT_TAG)); + redis.start(); + + RedisChatMemoryStore redisChatMemoryStore = RedisChatMemoryStore.builder() + .host(redis.getHost()) + .port(redis.getFirstMappedPort()) + .build(); + + ChatModel model = GoogleAiGeminiChatModel.builder() + .apiKey(GEMINI_API_KEY) + .modelName("gemini-2.5-flash") + .temperature(0.7) + .build(); + + MessageWindowChatMemory chatMemory = MessageWindowChatMemory.builder() + .chatMemoryStore(redisChatMemoryStore) + .maxMessages(30) + .build(); + + Assistant assistant = AiServices.builder(Assistant.class) + .chatModel(model) + .chatMemory(chatMemory) + .build(); + + String answer = assistant.chat("Hello! My name is Homer Simpson."); + System.out.println(answer); // Hello Homer... + + List messages = chatMemory.messages(); + System.out.println(String.format("Chat memory size: %s contents: ", messages.size())); + + for (ChatMessage message : messages) { + System.out.println(message); + } + + redis.stop(); + } +} diff --git a/redis-example/src/main/java/RedisEmbeddingStoreExample.java b/redis-example/src/main/java/RedisEmbeddingStoreExample.java index 4fc0c18d..be897426 100644 --- a/redis-example/src/main/java/RedisEmbeddingStoreExample.java +++ b/redis-example/src/main/java/RedisEmbeddingStoreExample.java @@ -1,4 +1,5 @@ import com.redis.testcontainers.RedisStackContainer; +import dev.langchain4j.community.store.embedding.redis.RedisEmbeddingStore; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModel; @@ -6,7 +7,6 @@ import dev.langchain4j.store.embedding.EmbeddingMatch; import dev.langchain4j.store.embedding.EmbeddingSearchRequest; import dev.langchain4j.store.embedding.EmbeddingStore; -import dev.langchain4j.store.embedding.redis.RedisEmbeddingStore; import java.util.List; From f06cd78e527ac5b2bfdce40f7f247b0cdba3a754 Mon Sep 17 00:00:00 2001 From: Felipe Zambrin Date: Thu, 14 Aug 2025 00:18:10 -0300 Subject: [PATCH 2/2] imports --- redis-example/src/main/java/RedisEmbeddingStoreExample.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/redis-example/src/main/java/RedisEmbeddingStoreExample.java b/redis-example/src/main/java/RedisEmbeddingStoreExample.java index be897426..9e2a5d3c 100644 --- a/redis-example/src/main/java/RedisEmbeddingStoreExample.java +++ b/redis-example/src/main/java/RedisEmbeddingStoreExample.java @@ -2,8 +2,8 @@ import dev.langchain4j.community.store.embedding.redis.RedisEmbeddingStore; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; -import dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModel; import dev.langchain4j.model.embedding.EmbeddingModel; +import dev.langchain4j.model.embedding.onnx.allminilml6v2.AllMiniLmL6V2EmbeddingModel; import dev.langchain4j.store.embedding.EmbeddingMatch; import dev.langchain4j.store.embedding.EmbeddingSearchRequest; import dev.langchain4j.store.embedding.EmbeddingStore;