Preserve proxy image API resolution sizes
This commit is contained in:
@@ -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> = {
|
||||
|
||||
Reference in New Issue
Block a user