exchange
This commit is contained in:
@@ -8,6 +8,7 @@ import org.springframework.http.MediaType;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.web.reactive.function.client.WebClient;
|
||||
import org.springframework.web.reactive.function.client.WebClientResponseException;
|
||||
import org.springframework.web.reactive.function.client.ExchangeStrategies;
|
||||
import reactor.core.publisher.Mono;
|
||||
import reactor.netty.http.client.HttpClient;
|
||||
import org.springframework.http.client.reactive.ReactorClientHttpConnector;
|
||||
@@ -58,9 +59,16 @@ public class OpenAIImageGenerationService {
|
||||
HttpClient httpClient = HttpClient.create()
|
||||
.responseTimeout(Duration.ofMillis(90000));
|
||||
|
||||
// Configure exchange strategies to increase buffer limit for large base64
|
||||
// responses
|
||||
ExchangeStrategies strategies = ExchangeStrategies.builder()
|
||||
.codecs(configurer -> configurer.defaultCodecs().maxInMemorySize(10 * 1024 * 1024)) // 10 MB
|
||||
.build();
|
||||
|
||||
this.webClient = WebClient.builder()
|
||||
.baseUrl(DALL_E_API_URL)
|
||||
.clientConnector(new ReactorClientHttpConnector(httpClient))
|
||||
.exchangeStrategies(strategies)
|
||||
.build();
|
||||
}
|
||||
|
||||
@@ -101,7 +109,8 @@ public class OpenAIImageGenerationService {
|
||||
requestBody.put("quality", imageQuality);
|
||||
requestBody.put("response_format", "b64_json"); // Получаем изображение в base64
|
||||
|
||||
logger.info("Requesting image generation from DALL-E with prompt: {}", prompt.substring(0, Math.min(100, prompt.length())));
|
||||
logger.info("Requesting image generation from DALL-E with prompt: {}",
|
||||
prompt.substring(0, Math.min(100, prompt.length())));
|
||||
|
||||
Map<String, Object> response = webClient.post()
|
||||
.header("Authorization", "Bearer " + apiKey)
|
||||
@@ -109,7 +118,8 @@ public class OpenAIImageGenerationService {
|
||||
.accept(MediaType.APPLICATION_JSON)
|
||||
.bodyValue(requestBody)
|
||||
.retrieve()
|
||||
.bodyToMono(new ParameterizedTypeReference<Map<String, Object>>() {})
|
||||
.bodyToMono(new ParameterizedTypeReference<Map<String, Object>>() {
|
||||
})
|
||||
.retryWhen(createRetrySpec("generateImage"))
|
||||
.onErrorResume(err -> {
|
||||
logger.error("DALL-E API request failed after retries: {} - {}", err.getMessage(),
|
||||
@@ -117,7 +127,8 @@ public class OpenAIImageGenerationService {
|
||||
if (err instanceof WebClientResponseException) {
|
||||
WebClientResponseException wcre = (WebClientResponseException) err;
|
||||
if (wcre.getStatusCode().value() == 401) {
|
||||
logger.error("OpenAI API key is invalid or expired. Please check your openai.api.key configuration.");
|
||||
logger.error(
|
||||
"OpenAI API key is invalid or expired. Please check your openai.api.key configuration.");
|
||||
} else if (wcre.getStatusCode().value() == 429) {
|
||||
logger.error("OpenAI API rate limit exceeded after all retry attempts.");
|
||||
} else if (wcre.getStatusCode().value() >= 500) {
|
||||
@@ -210,4 +221,3 @@ public class OpenAIImageGenerationService {
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user