fix: restrict scale adjust mask failover

This commit is contained in:
134 2026-07-06 04:49:56 +08:00
parent 831ce10a5b
commit fb9f0541fa
2 changed files with 29 additions and 0 deletions

View File

@ -5534,6 +5534,8 @@ export async function POST(request: NextRequest) {
scaleAdjustPatchReference?.productLockMethod || null,
scaleAdjustProductLockMaskEditApplied:
useScaleAdjustProductLockMaskEdit,
scaleAdjustRequiresProviderMaskInput:
useScaleAdjustProductLockMaskEdit,
scaleAdjustProductLockEditMaskUrl:
scaleAdjustPatchReference?.productLockEditMaskUrl || null,
scaleAdjustProductLockOverlayUrl:

View File

@ -3421,6 +3421,19 @@ function isCanvasScaleAdjustEmergencyFalEditModel(item: CanvasModelWithProvider)
);
}
function isCanvasScaleAdjustProviderMaskEditModel(item: CanvasModelWithProvider) {
if (getCanvasScaleAdjustModelFamily(item) !== "gpt-image-2") return false;
if (item.provider.type === "openai-image") return true;
if (item.provider.type !== "fal-image") return false;
const modelId = String(item.model.modelId || "").trim().toLowerCase();
return (
modelId === "openai/gpt-image-2/edit" ||
modelId === "fal-ai/gpt-image-2/edit" ||
modelId.endsWith("/gpt-image-2/edit") ||
modelId.includes("gpt-image-2/edit")
);
}
interface CanvasImageGenConfig {
maxImages?: number;
supports1K?: boolean;
@ -3617,6 +3630,7 @@ function findCanvasFailoverModel(params: {
failedModelRefs: string[];
failedProviderTypes?: string[];
preferLowCostSameNameProviders?: boolean;
requiresProviderMaskInput?: boolean;
requiresImageInput?: boolean;
requiresTextToImage?: boolean;
scaleAdjustModelFamily?: string | null;
@ -3675,6 +3689,12 @@ function findCanvasFailoverModel(params: {
}
if (failedProviderTypes.has(item.provider.type)) return false;
if (!item.model.supportsImageGen) return false;
if (
params.requiresProviderMaskInput &&
!isCanvasScaleAdjustProviderMaskEditModel(item)
) {
return false;
}
if (
params.requiresImageInput &&
modelLacksReferenceImageInputSupport(item.model, item.provider)
@ -3827,6 +3847,10 @@ export async function generateCanvasImage(
typeof debugMeta?.scaleAdjustModelFamily === "string"
? debugMeta.scaleAdjustModelFamily.trim()
: "";
const requiresProviderMaskInput = Boolean(
debugMeta?.scaleAdjustProductLockMaskEditApplied &&
debugMeta?.scaleAdjustProviderMaskImageUrl
);
const localEditComposite = normalizeLocalEditCompositeConfig(
request.localEditComposite
);
@ -3886,6 +3910,7 @@ export async function generateCanvasImage(
preferLowCostSameNameProviders: Boolean(
debugMeta?.scaleAdjustPreferSameNameProviderFailover
),
requiresProviderMaskInput,
requiresImageInput,
scaleAdjustModelFamily,
});
@ -3928,6 +3953,7 @@ export async function generateCanvasImage(
preferLowCostSameNameProviders: Boolean(
debugMeta?.scaleAdjustPreferSameNameProviderFailover
),
requiresProviderMaskInput,
requiresTextToImage,
scaleAdjustModelFamily,
});
@ -4594,6 +4620,7 @@ export async function generateCanvasImage(
preferLowCostSameNameProviders: Boolean(
debugMeta?.scaleAdjustPreferSameNameProviderFailover
),
requiresProviderMaskInput,
requiresImageInput: normalizedReferenceImages.length > 0,
requiresTextToImage: normalizedReferenceImages.length === 0,
scaleAdjustModelFamily,