Skip to content

feat: configurable per-provider response buffer limit - #114

Open
Akvicor wants to merge 1 commit into
halo-dev:mainfrom
Akvicor:feat/provider-response-buffer-limit
Open

Akvicor wants to merge 1 commit into
halo-dev:mainfrom
Akvicor:feat/provider-response-buffer-limit

Conversation

@Akvicor

@Akvicor Akvicor commented Sep 19, 2026

Copy link
Copy Markdown

What this PR does / why we need it:

AI Foundation 的 provider HTTP 客户端使用 Spring 默认的 256 KB 内存缓冲上限。图片生成接口内联 base64 图片时(例如 gpt-image-* 总是返回 b64_json,单张图片可达数 MB)会超出该上限,导致请求以 DataBufferLimitException 失败。

本 PR 为 AiProvider 增加可选的 spec.maxInMemorySize(字节):

  • ProviderHttpClientFactory.webClientBuilder 应用 Provider 配置的值,未配置时保持 256 KB 默认(现有行为不变)
  • Console 校验限定取值范围为 1024–1073741824 字节
  • console/ai-foundation/providers 的供应商表单新增「响应缓冲上限(字节)」输入框

Does this PR introduce a user-facing change?

供应商支持按 Provider 配置响应缓冲上限(spec.maxInMemorySize),解决 base64 图片生成响应超出默认缓冲上限导致的失败。

@ruibaby
ruibaby requested a review from LIlGG September 20, 2026 09:26

@LIlGG LIlGG left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

同时,调大 http 编码缓存区之后, base64 仍可能触发 Jackson 的字符串长度限制,可能报错 StreamConstraintsException ,建议一并处理一下。

Comment on lines 49 to +55
public static WebClient.Builder webClientBuilder(AiProvider provider) {
return WebClient.builder()
.clientConnector(new ReactorClientHttpConnector(httpClient(provider)));
return webClientBuilder(provider, providerMaxInMemorySize(provider));
}

public static WebClient.Builder discoveryWebClientBuilder(AiProvider provider) {
return webClientBuilder(provider)
return webClientBuilder(provider, DISCOVERY_MAX_IN_MEMORY_SIZE);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

不建议对 webClientBuilder 以及 discoveryWebClientBuilder 做修改。我建议新增一个 image 专用的 imageWebClientBuilder 来处理此问题。

* can be several megabytes) and fail with a {@code DataBufferLimitException}. Providers that
* return such payloads can raise the limit through {@code AiProvider.spec.maxInMemorySize}.
*/
public static final int DEFAULT_MAX_IN_MEMORY_SIZE = 256 * 1024;

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

改为 image 专用的内存大小设置即可,并且我建议对 image 设置一个默认且合理的缓存区大小,这样可以减少用户的设置,避免用户报错后再去修改。

根据 https://developers.openai.com/api/reference/cli/resources/images/methods/generate 它一次请求最多支持 10 张图,因此我建议设置为 64 * 1024 * 1024

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants