From c7c79d74122748d6a6a966d41b5cece4c18bb9a8 Mon Sep 17 00:00:00 2001 From: Alexandros Pappas Date: Thu, 12 Jun 2025 15:35:56 +0200 Subject: [PATCH 1/3] fix(streaming): Remove retry wrapper from chat model stream methods Removes the `retryTemplate.execute` wrapper from the `chatCompletionStream` calls in MiniMax, MistralAI, and ZhiPuAI chat models. Signed-off-by: Alexandros Pappas --- .../java/org/springframework/ai/minimax/MiniMaxChatModel.java | 3 +-- .../org/springframework/ai/mistralai/MistralAiChatModel.java | 3 +-- .../java/org/springframework/ai/zhipuai/ZhiPuAiChatModel.java | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/MiniMaxChatModel.java b/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/MiniMaxChatModel.java index e5a774cacf9..8a579ca93a9 100644 --- a/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/MiniMaxChatModel.java +++ b/models/spring-ai-minimax/src/main/java/org/springframework/ai/minimax/MiniMaxChatModel.java @@ -323,8 +323,7 @@ public Flux stream(Prompt prompt) { return Flux.deferContextual(contextView -> { ChatCompletionRequest request = createRequest(requestPrompt, true); - Flux completionChunks = this.retryTemplate - .execute(ctx -> this.miniMaxApi.chatCompletionStream(request)); + Flux completionChunks = this.miniMaxApi.chatCompletionStream(request); // For chunked responses, only the first chunk contains the choice role. // The rest of the chunks with same ID share the same role. diff --git a/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatModel.java b/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatModel.java index b9838dcedf1..c612ca6060a 100644 --- a/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatModel.java +++ b/models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/MistralAiChatModel.java @@ -267,8 +267,7 @@ public Flux internalStream(Prompt prompt, ChatResponse previousCha observation.parentObservation(contextView.getOrDefault(ObservationThreadLocalAccessor.KEY, null)).start(); - Flux completionChunks = this.retryTemplate - .execute(ctx -> this.mistralAiApi.chatCompletionStream(request)); + Flux completionChunks = this.mistralAiApi.chatCompletionStream(request); // For chunked responses, only the first chunk contains the choice role. // The rest of the chunks with same ID share the same role. diff --git a/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/ZhiPuAiChatModel.java b/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/ZhiPuAiChatModel.java index 408666fdc34..38bda03dae9 100644 --- a/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/ZhiPuAiChatModel.java +++ b/models/spring-ai-zhipuai/src/main/java/org/springframework/ai/zhipuai/ZhiPuAiChatModel.java @@ -308,8 +308,7 @@ public Flux stream(Prompt prompt) { Prompt requestPrompt = buildRequestPrompt(prompt); ChatCompletionRequest request = createRequest(requestPrompt, true); - Flux completionChunks = this.retryTemplate - .execute(ctx -> this.zhiPuAiApi.chatCompletionStream(request)); + Flux completionChunks = this.zhiPuAiApi.chatCompletionStream(request); // For chunked responses, only the first chunk contains the choice role. // The rest of the chunks with same ID share the same role. From ad1a282810ff7f5e31ff7b28255022c533412c19 Mon Sep 17 00:00:00 2001 From: Alexandros Pappas Date: Fri, 13 Jun 2025 14:21:21 +0200 Subject: [PATCH 2/3] fix(streaming): Disable miniMaxChatStream tests Signed-off-by: Alexandros Pappas --- .../org/springframework/ai/minimax/api/MiniMaxRetryTests.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/api/MiniMaxRetryTests.java b/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/api/MiniMaxRetryTests.java index 9f165e27c0d..ba7cadabff4 100644 --- a/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/api/MiniMaxRetryTests.java +++ b/models/spring-ai-minimax/src/test/java/org/springframework/ai/minimax/api/MiniMaxRetryTests.java @@ -20,6 +20,7 @@ import java.util.Optional; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -115,6 +116,7 @@ public void miniMaxChatNonTransientError() { } @Test + @Disabled public void miniMaxChatStreamTransientError() { var choice = new ChatCompletionChunk.ChunkChoice(ChatCompletionFinishReason.STOP, 0, @@ -136,6 +138,7 @@ public void miniMaxChatStreamTransientError() { } @Test + @Disabled public void miniMaxChatStreamNonTransientError() { given(this.miniMaxApi.chatCompletionStream(isA(ChatCompletionRequest.class))) .willThrow(new RuntimeException("Non Transient Error")); From 0c478b0304f98f577468ef8923b2752b6a7c8e11 Mon Sep 17 00:00:00 2001 From: Alexandros Pappas Date: Sun, 15 Jun 2025 10:51:31 +0200 Subject: [PATCH 3/3] fix(streaming): Disable zhiPuAiChatStream test Signed-off-by: Alexandros Pappas --- .../org/springframework/ai/zhipuai/api/ZhiPuAiRetryTests.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/api/ZhiPuAiRetryTests.java b/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/api/ZhiPuAiRetryTests.java index b78db162096..ff53720fa18 100644 --- a/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/api/ZhiPuAiRetryTests.java +++ b/models/spring-ai-zhipuai/src/test/java/org/springframework/ai/zhipuai/api/ZhiPuAiRetryTests.java @@ -20,6 +20,7 @@ import java.util.Optional; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -128,6 +129,7 @@ public void zhiPuAiChatNonTransientError() { } @Test + @Disabled public void zhiPuAiChatStreamTransientError() { var choice = new ChatCompletionChunk.ChunkChoice(ChatCompletionFinishReason.STOP, 0, @@ -149,6 +151,7 @@ public void zhiPuAiChatStreamTransientError() { } @Test + @Disabled public void zhiPuAiChatStreamNonTransientError() { given(this.zhiPuAiApi.chatCompletionStream(isA(ChatCompletionRequest.class))) .willThrow(new RuntimeException("Non Transient Error"));