Skip to content

Commit 3065693

Browse files
authored
feat: configurable per-provider response buffer limit (#114)
* feat: configurable per-provider response buffer limit * fix: scope response buffer to image clients with 64 MB default and lift Jackson limit
1 parent de1ef81 commit 3065693

27 files changed

Lines changed: 339 additions & 14 deletions

‎api-docs/openapi/v3_0/aiFoundationApis.json‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1983,6 +1983,11 @@
19831983
"type" : "string",
19841984
"description" : "Image generation endpoint path relative to baseUrl. OpenAI-compatible providers only."
19851985
},
1986+
"maxInMemorySize" : {
1987+
"type" : "integer",
1988+
"description" : "In-memory buffer limit in bytes for image generation responses (optional, defaults to 64 MB)",
1989+
"format" : "int32"
1990+
},
19861991
"parameterMappings" : {
19871992
"$ref" : "#/components/schemas/ModelParameterMappings"
19881993
},

‎app/src/main/java/run/halo/aifoundation/endpoint/ProviderConsoleEndpoint.java‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,7 @@ private Mono<AiProvider> validateAndSaveProvider(AiProvider provider, String exi
190190
}
191191
try {
192192
validateProxyConfig(provider.getSpec());
193+
validateMaxInMemorySize(provider.getSpec());
193194
normalizeEndpointPaths(provider.getSpec());
194195
parameterMappingValidator.validateProvider(
195196
provider.getSpec().getParameterMappings(), type);
@@ -236,6 +237,17 @@ private void validateProxyConfig(AiProvider.AiProviderSpec spec) {
236237
}
237238
}
238239

240+
private void validateMaxInMemorySize(AiProvider.AiProviderSpec spec) {
241+
var maxInMemorySize = spec.getMaxInMemorySize();
242+
if (maxInMemorySize == null) {
243+
return;
244+
}
245+
if (maxInMemorySize < 1024 || maxInMemorySize > 1024 * 1024 * 1024) {
246+
throw new IllegalArgumentException(
247+
"maxInMemorySize must be between 1024 and 1073741824 bytes");
248+
}
249+
}
250+
239251
private void normalizeEndpointPaths(AiProvider.AiProviderSpec spec) {
240252
spec.setChatEndpointPath(normalizeEndpointPath("chatEndpointPath",
241253
spec.getChatEndpointPath()));

‎app/src/main/java/run/halo/aifoundation/extension/AiProvider.java‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ public static class AiProviderSpec {
4343
private String proxyHost;
4444
@Schema(description = "Proxy port for this provider (optional)")
4545
private Integer proxyPort;
46+
@Schema(description = "In-memory buffer limit in bytes for image generation responses (optional, defaults to 64 MB)")
47+
private Integer maxInMemorySize;
4648
@Schema(description = "Administrator overrides for provider-neutral parameter mappings")
4749
private ModelParameterMappings parameterMappings;
4850
}

‎app/src/main/java/run/halo/aifoundation/provider/AbstractAiProviderType.java‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ protected WebClient.Builder discoveryWebClientBuilder(AiProvider provider) {
123123
return ProviderHttpClientFactory.discoveryWebClientBuilder(provider);
124124
}
125125

126+
protected WebClient.Builder imageWebClientBuilder(AiProvider provider) {
127+
return ProviderHttpClientFactory.imageWebClientBuilder(provider);
128+
}
129+
126130
protected RestClient.Builder restClientBuilder(AiProvider provider) {
127131
return ProviderHttpClientFactory.restClientBuilder(provider);
128132
}

‎app/src/main/java/run/halo/aifoundation/provider/aihubmix/AiHubMixProvider.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ public ProviderImageGenerationClient buildImageGenerationClient(AiProvider provi
175175
String apiKey, String modelId) {
176176
return new AiHubMixImageGenerationClient(new ImageGenerationClientOptions(
177177
getProviderType(), resolveBaseUrl(provider), apiKey, modelId,
178-
AiHubMixHeaders.DEFAULTS), webClientBuilder(provider));
178+
AiHubMixHeaders.DEFAULTS), imageWebClientBuilder(provider));
179179
}
180180

181181
@Override

‎app/src/main/java/run/halo/aifoundation/provider/dashscope/DashScopeProvider.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ public ProviderImageGenerationClient buildImageGenerationClient(AiProvider provi
210210
String apiKey, String modelId) {
211211
return new DashScopeImageGenerationClient(new ImageGenerationClientOptions(
212212
getProviderType(), resolveBaseUrl(provider), apiKey, modelId, null),
213-
webClientBuilder(provider));
213+
imageWebClientBuilder(provider));
214214
}
215215

216216
@Override

‎app/src/main/java/run/halo/aifoundation/provider/doubao/DouBaoProvider.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ public ProviderImageGenerationClient buildImageGenerationClient(AiProvider provi
130130
String apiKey, String modelId) {
131131
return new DouBaoImageGenerationClient(new ImageGenerationClientOptions(
132132
getProviderType(), resolveBaseUrl(provider), apiKey, modelId, null),
133-
webClientBuilder(provider));
133+
imageWebClientBuilder(provider));
134134
}
135135

136136
@Override

‎app/src/main/java/run/halo/aifoundation/provider/ernie/ErnieProvider.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@ public ProviderRerankingClient buildRerankingClient(AiProvider provider, String
159159
public ProviderImageGenerationClient buildImageGenerationClient(AiProvider provider,
160160
String apiKey, String modelId) {
161161
return new ErnieImageGenerationClient(new ImageGenerationClientOptions(getProviderType(),
162-
resolveBaseUrl(provider), apiKey, modelId, null), webClientBuilder(provider));
162+
resolveBaseUrl(provider), apiKey, modelId, null), imageWebClientBuilder(provider));
163163
}
164164

165165
@Override

‎app/src/main/java/run/halo/aifoundation/provider/gitee/GiteeProvider.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public ProviderImageGenerationClient buildImageGenerationClient(AiProvider provi
163163
String apiKey, String modelId) {
164164
return new GiteeImageGenerationClient(new ImageGenerationClientOptions(getProviderType(),
165165
resolveBaseUrl(provider), apiKey, modelId, failoverHeaders()),
166-
webClientBuilder(provider));
166+
imageWebClientBuilder(provider));
167167
}
168168

169169
@Override

‎app/src/main/java/run/halo/aifoundation/provider/minimax/MiniMaxProvider.java‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public ProviderImageGenerationClient buildImageGenerationClient(AiProvider provi
150150
String apiKey, String modelId) {
151151
return new MiniMaxImageGenerationClient(new ImageGenerationClientOptions(
152152
getProviderType(), resolveBaseUrl(provider), apiKey, modelId, null),
153-
webClientBuilder(provider));
153+
imageWebClientBuilder(provider));
154154
}
155155

156156
@Override

0 commit comments

Comments
 (0)