Preserve proxy image API resolution sizes

This commit is contained in:
Codex
2026-05-13 03:30:40 +00:00
parent 4a1a309b4f
commit 54e6ab6750

View File

@@ -27,6 +27,21 @@ function normalizeGptImageSize(size: string | undefined): string | undefined {
return '1024x1024';
}
function isOfficialOpenAIEndpoint(apiUrl: string | undefined): boolean {
try {
return new URL(apiUrl || '').hostname.toLowerCase() === 'api.openai.com';
} catch {
return false;
}
}
function preserveRequestedImageSize(size: string | undefined): string | undefined {
if (!size) return undefined;
const normalized = size.trim().toLowerCase();
if (normalized === 'auto') return 'auto';
return /^\d{2,5}x\d{2,5}$/i.test(normalized) ? normalized : undefined;
}
function normalizeDallE3Size(size: string | undefined): string {
const normalized = (size || '').trim().toLowerCase();
if (['1024x1024', '1792x1024', '1024x1792'].includes(normalized)) return normalized;
@@ -46,9 +61,16 @@ function normalizeDallE2Size(size: string | undefined): string {
return '1024x1024';
}
export function normalizeOpenAICompatibleImageSize(modelName: string | undefined, size: string | undefined): string {
export function normalizeOpenAICompatibleImageSize(
modelName: string | undefined,
size: string | undefined,
options: { apiUrl?: string } = {},
): string {
if (isDallE3Model(modelName)) return normalizeDallE3Size(size);
if (isDallE2Model(modelName)) return normalizeDallE2Size(size);
if (isGptImageModel(modelName) && !isOfficialOpenAIEndpoint(options.apiUrl)) {
return preserveRequestedImageSize(size) || 'auto';
}
return normalizeGptImageSize(size) || 'auto';
}
@@ -118,7 +140,7 @@ export const openAICompatibleImageTemplate: ImageApiTemplate = {
matches: isOpenAICompatibleImageApi,
buildTextToImageRequest(input) {
const requestCount = normalizeOpenAICompatibleImageCount(input.modelName, input.count);
const requestSize = normalizeOpenAICompatibleImageSize(input.modelName, input.size);
const requestSize = normalizeOpenAICompatibleImageSize(input.modelName, input.size, { apiUrl: input.apiUrl });
const prompt = input.negativePrompt
? `${input.prompt}\n\nNegative prompt: ${input.negativePrompt}`
: input.prompt;
@@ -148,7 +170,7 @@ export const openAICompatibleImageTemplate: ImageApiTemplate = {
},
buildImageToImageRequest(input) {
const requestCount = normalizeOpenAICompatibleImageCount(input.modelName, input.count);
const requestSize = normalizeOpenAICompatibleImageSize(input.modelName, input.size);
const requestSize = normalizeOpenAICompatibleImageSize(input.modelName, input.size, { apiUrl: input.apiUrl });
const denoisingStrength = input.strength ?? 0.5;
const formFields = buildOpenAICompatibleImageEditFields(input, requestCount, requestSize);
const chatBody: Record<string, unknown> = {