fix: fail over fixed detail image model first
This commit is contained in:
parent
0b1a3a715b
commit
52cd365925
@ -1526,6 +1526,75 @@ export async function generateCanvasImage(
|
|||||||
await slot.release();
|
await slot.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
await recordAiModelHealthFailure({
|
||||||
|
model: selectedModel.model,
|
||||||
|
provider,
|
||||||
|
error: caughtError,
|
||||||
|
context: debugLabel,
|
||||||
|
elapsedMs: Date.now() - startedAt,
|
||||||
|
metadata: {
|
||||||
|
aspectRatio,
|
||||||
|
imageSize,
|
||||||
|
imageCount,
|
||||||
|
requestedReferenceImageCount: normalizedReferenceImages.length,
|
||||||
|
reachableReferenceImageCount: reachableReferenceImages.length,
|
||||||
|
effectiveReferenceImageCount: effectiveReferenceImages.length,
|
||||||
|
droppedReferenceImageCount: unreachableReferenceImages.length,
|
||||||
|
...debugMeta,
|
||||||
|
},
|
||||||
|
}).catch((healthError) => {
|
||||||
|
console.warn("[Canvas Generate Image] Record model health failure failed:", {
|
||||||
|
selectedModelRef: selectedModel.model.id,
|
||||||
|
selectedModelId: selectedModel.model.modelId,
|
||||||
|
error: healthError instanceof Error ? healthError.message : String(healthError),
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
const failedModelRefs = Array.from(
|
||||||
|
new Set([
|
||||||
|
...(Array.isArray(request.internalFailoverTriedModelRefs)
|
||||||
|
? request.internalFailoverTriedModelRefs
|
||||||
|
: []),
|
||||||
|
selectedModel.model.id,
|
||||||
|
selectedModel.model.modelId,
|
||||||
|
].filter(Boolean))
|
||||||
|
);
|
||||||
|
const allowFailover = request.allowFailover !== false;
|
||||||
|
const shouldFailover =
|
||||||
|
shouldFailoverAiModelError(caughtError) ||
|
||||||
|
(Boolean(debugMeta?.detailFixedModelApplied) && Boolean(caughtError));
|
||||||
|
const fallbackModel = allowFailover && shouldFailover
|
||||||
|
? findCanvasFailoverModel({
|
||||||
|
selectedModel,
|
||||||
|
imageModels,
|
||||||
|
failedModelRefs,
|
||||||
|
})
|
||||||
|
: null;
|
||||||
|
|
||||||
|
if (fallbackModel) {
|
||||||
|
console.warn("[Canvas Generate Image] Failover to alternate image model:", {
|
||||||
|
debugLabel,
|
||||||
|
failedModelRef: selectedModel.model.id,
|
||||||
|
failedModelId: selectedModel.model.modelId,
|
||||||
|
fallbackModelRef: fallbackModel.model.id,
|
||||||
|
fallbackModelId: fallbackModel.model.modelId,
|
||||||
|
fallbackProviderType: fallbackModel.provider.type,
|
||||||
|
error: caughtError instanceof Error ? caughtError.message : String(caughtError),
|
||||||
|
...debugMeta,
|
||||||
|
});
|
||||||
|
|
||||||
|
return await generateCanvasImage({
|
||||||
|
...request,
|
||||||
|
model: fallbackModel.model.id,
|
||||||
|
internalFailoverTriedModelRefs: failedModelRefs,
|
||||||
|
debugMeta: {
|
||||||
|
...debugMeta,
|
||||||
|
failoverFromModelId: selectedModel.model.modelId,
|
||||||
|
failoverFromModelRef: selectedModel.model.id,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
if (scaleAdjustVerification) {
|
if (scaleAdjustVerification) {
|
||||||
try {
|
try {
|
||||||
const sourceImage = await loadScaleAdjustSourceImage(scaleAdjustVerification);
|
const sourceImage = await loadScaleAdjustSourceImage(scaleAdjustVerification);
|
||||||
@ -1533,38 +1602,13 @@ export async function generateCanvasImage(
|
|||||||
const fallbackImage = await createScaleAdjustFallbackUpload({
|
const fallbackImage = await createScaleAdjustFallbackUpload({
|
||||||
debugLabel,
|
debugLabel,
|
||||||
imageIndex: 1,
|
imageIndex: 1,
|
||||||
reason: "provider-error",
|
reason: allowFailover ? "provider-error-after-failover-exhausted" : "provider-error",
|
||||||
sourceBuffer: sourceImage.sourceBuffer,
|
sourceBuffer: sourceImage.sourceBuffer,
|
||||||
sourceHeight: sourceImage.sourceHeight,
|
sourceHeight: sourceImage.sourceHeight,
|
||||||
sourceWidth: sourceImage.sourceWidth,
|
sourceWidth: sourceImage.sourceWidth,
|
||||||
verification: scaleAdjustVerification,
|
verification: scaleAdjustVerification,
|
||||||
});
|
});
|
||||||
|
|
||||||
await recordAiModelHealthFailure({
|
|
||||||
model: selectedModel.model,
|
|
||||||
provider,
|
|
||||||
error: caughtError,
|
|
||||||
context: debugLabel,
|
|
||||||
elapsedMs: Date.now() - startedAt,
|
|
||||||
metadata: {
|
|
||||||
aspectRatio,
|
|
||||||
imageSize,
|
|
||||||
imageCount,
|
|
||||||
requestedReferenceImageCount: normalizedReferenceImages.length,
|
|
||||||
reachableReferenceImageCount: reachableReferenceImages.length,
|
|
||||||
effectiveReferenceImageCount: effectiveReferenceImages.length,
|
|
||||||
droppedReferenceImageCount: unreachableReferenceImages.length,
|
|
||||||
scaleAdjustFallbackReason: "provider-error",
|
|
||||||
...debugMeta,
|
|
||||||
},
|
|
||||||
}).catch((healthError) => {
|
|
||||||
console.warn("[Canvas Generate Image] Record model health failure failed:", {
|
|
||||||
selectedModelRef: selectedModel.model.id,
|
|
||||||
selectedModelId: selectedModel.model.modelId,
|
|
||||||
error: healthError instanceof Error ? healthError.message : String(healthError),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
recordCanvasImageModelExecutionDuration(
|
recordCanvasImageModelExecutionDuration(
|
||||||
resolvedModelKey,
|
resolvedModelKey,
|
||||||
Date.now() - startedAt
|
Date.now() - startedAt
|
||||||
@ -1602,71 +1646,5 @@ export async function generateCanvasImage(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
await recordAiModelHealthFailure({
|
|
||||||
model: selectedModel.model,
|
|
||||||
provider,
|
|
||||||
error: caughtError,
|
|
||||||
context: debugLabel,
|
|
||||||
elapsedMs: Date.now() - startedAt,
|
|
||||||
metadata: {
|
|
||||||
aspectRatio,
|
|
||||||
imageSize,
|
|
||||||
imageCount,
|
|
||||||
requestedReferenceImageCount: normalizedReferenceImages.length,
|
|
||||||
reachableReferenceImageCount: reachableReferenceImages.length,
|
|
||||||
effectiveReferenceImageCount: effectiveReferenceImages.length,
|
|
||||||
droppedReferenceImageCount: unreachableReferenceImages.length,
|
|
||||||
...debugMeta,
|
|
||||||
},
|
|
||||||
}).catch((healthError) => {
|
|
||||||
console.warn("[Canvas Generate Image] Record model health failure failed:", {
|
|
||||||
selectedModelRef: selectedModel.model.id,
|
|
||||||
selectedModelId: selectedModel.model.modelId,
|
|
||||||
error: healthError instanceof Error ? healthError.message : String(healthError),
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
const failedModelRefs = Array.from(
|
|
||||||
new Set([
|
|
||||||
...(Array.isArray(request.internalFailoverTriedModelRefs)
|
|
||||||
? request.internalFailoverTriedModelRefs
|
|
||||||
: []),
|
|
||||||
selectedModel.model.id,
|
|
||||||
selectedModel.model.modelId,
|
|
||||||
].filter(Boolean))
|
|
||||||
);
|
|
||||||
const allowFailover = request.allowFailover !== false;
|
|
||||||
const fallbackModel = allowFailover && shouldFailoverAiModelError(caughtError)
|
|
||||||
? findCanvasFailoverModel({
|
|
||||||
selectedModel,
|
|
||||||
imageModels,
|
|
||||||
failedModelRefs,
|
|
||||||
})
|
|
||||||
: null;
|
|
||||||
|
|
||||||
if (fallbackModel) {
|
|
||||||
console.warn("[Canvas Generate Image] Failover to alternate image model:", {
|
|
||||||
debugLabel,
|
|
||||||
failedModelRef: selectedModel.model.id,
|
|
||||||
failedModelId: selectedModel.model.modelId,
|
|
||||||
fallbackModelRef: fallbackModel.model.id,
|
|
||||||
fallbackModelId: fallbackModel.model.modelId,
|
|
||||||
fallbackProviderType: fallbackModel.provider.type,
|
|
||||||
error: caughtError instanceof Error ? caughtError.message : String(caughtError),
|
|
||||||
...debugMeta,
|
|
||||||
});
|
|
||||||
|
|
||||||
return await generateCanvasImage({
|
|
||||||
...request,
|
|
||||||
model: fallbackModel.model.id,
|
|
||||||
internalFailoverTriedModelRefs: failedModelRefs,
|
|
||||||
debugMeta: {
|
|
||||||
...debugMeta,
|
|
||||||
failoverFromModelId: selectedModel.model.modelId,
|
|
||||||
failoverFromModelRef: selectedModel.model.id,
|
|
||||||
},
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
throw caughtError;
|
throw caughtError;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user