Skip to content

Commit 5552a11

Browse files
committed
Fix a bug in MistralAiApi HTTP error message handling
1 parent a8110bb commit 5552a11

File tree

2 files changed

+7
-34
lines changed

2 files changed

+7
-34
lines changed

models/spring-ai-mistral-ai/src/main/java/org/springframework/ai/mistralai/api/MistralAiApi.java

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package org.springframework.ai.mistralai.api;
1818

1919
import java.io.IOException;
20+
import java.nio.charset.StandardCharsets;
2021
import java.util.List;
2122
import java.util.Map;
2223
import java.util.function.Consumer;
@@ -38,6 +39,7 @@
3839
import org.springframework.http.client.ClientHttpResponse;
3940
import org.springframework.util.Assert;
4041
import org.springframework.util.CollectionUtils;
42+
import org.springframework.util.StreamUtils;
4143
import org.springframework.web.client.ResponseErrorHandler;
4244
import org.springframework.web.client.RestClient;
4345
import org.springframework.web.reactive.function.client.WebClient;
@@ -106,13 +108,12 @@ public boolean hasError(ClientHttpResponse response) throws IOException {
106108
@Override
107109
public void handleError(ClientHttpResponse response) throws IOException {
108110
if (response.getStatusCode().isError()) {
111+
String error = StreamUtils.copyToString(response.getBody(), StandardCharsets.UTF_8);
112+
String message = String.format("%s - %s", response.getStatusCode().value(), error);
109113
if (response.getStatusCode().is4xxClientError()) {
110-
throw new MistralAiApiClientErrorException(String.format("%s - %s",
111-
response.getStatusCode().value(),
112-
MistralAiApi.this.objectMapper.readValue(response.getBody(), ResponseError.class)));
114+
throw new MistralAiApiClientErrorException(message);
113115
}
114-
throw new MistralAiApiException(String.format("%s - %s", response.getStatusCode().value(),
115-
MistralAiApi.this.objectMapper.readValue(response.getBody(), ResponseError.class)));
116+
throw new MistralAiApiException(message);
116117
}
117118
}
118119
};
@@ -150,33 +151,6 @@ public MistralAiApiClientErrorException(String message) {
150151

151152
}
152153

153-
/**
154-
* API error response.
155-
*
156-
* @param error Error details.
157-
*/
158-
@JsonInclude(Include.NON_NULL)
159-
public record ResponseError(@JsonProperty("error") Error error) {
160-
161-
/**
162-
* Error details.
163-
*
164-
* @param message Error message.
165-
* @param type Error type.
166-
* @param param Error parameter.
167-
* @param code Error code.
168-
*/
169-
@JsonInclude(Include.NON_NULL)
170-
public record Error(
171-
// @formatter:off
172-
@JsonProperty("message") String message,
173-
@JsonProperty("type") String type,
174-
@JsonProperty("param") String param,
175-
@JsonProperty("code") String code) {
176-
// @formatter:on
177-
}
178-
}
179-
180154
/**
181155
* Usage statistics.
182156
*

models/spring-ai-mistral-ai/src/test/java/org/springframework/ai/mistralai/api/MistralAiApiIT.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,13 @@
2222
import org.junit.jupiter.api.condition.EnabledIfEnvironmentVariable;
2323
import reactor.core.publisher.Flux;
2424

25-
import org.springframework.ai.mistralai.api.MistralAiApi;
2625
import org.springframework.ai.mistralai.api.MistralAiApi.ChatCompletion;
2726
import org.springframework.ai.mistralai.api.MistralAiApi.ChatCompletionChunk;
2827
import org.springframework.ai.mistralai.api.MistralAiApi.ChatCompletionMessage;
28+
import org.springframework.ai.mistralai.api.MistralAiApi.ChatCompletionMessage.Role;
2929
import org.springframework.ai.mistralai.api.MistralAiApi.ChatCompletionRequest;
3030
import org.springframework.ai.mistralai.api.MistralAiApi.Embedding;
3131
import org.springframework.ai.mistralai.api.MistralAiApi.EmbeddingList;
32-
import org.springframework.ai.mistralai.api.MistralAiApi.ChatCompletionMessage.Role;
3332
import org.springframework.http.ResponseEntity;
3433

3534
import static org.assertj.core.api.Assertions.assertThat;

0 commit comments

Comments
 (0)