fix(canvas): 画布图片生成 - 参考图超限时停止生成并提示清理连线

保留全部已连接参考图,在首次生成、重试和任务入口统一校验模型上限。
This commit is contained in:
dyhhhhh
2026-08-17 16:54:56 +08:00
committed by GitHub
parent fddda497d0
commit 60bad10fc9
4 changed files with 48 additions and 13 deletions

View File

@@ -52,14 +52,14 @@ export async function runBackendCanvasGenerationTask(
},
dependencies?: GenerationTaskDependencies,
) {
const normalizedReferenceImages = mode === "image" ? limitCanvasImageReferences(config, referenceImages) : referenceImages;
if (mode === "image") assertCanvasImageReferenceLimit(config, referenceImages);
return runBackendGenerationTask(
{
projectId,
mode,
prompt,
config,
referenceImages: normalizedReferenceImages,
referenceImages,
referenceVideos,
referenceAudios,
mask,
@@ -74,12 +74,15 @@ export async function runBackendCanvasGenerationTask(
);
}
// Canvas references can include a scene frame plus multiple character turnarounds. Keep
// the earliest connected scene image when a provider accepts fewer images than the graph.
export function limitCanvasImageReferences(config: AiConfig, referenceImages: ReferenceImage[]) {
export function canvasImageReferenceLimitError(config: AiConfig, referenceImages: ReferenceImage[]) {
const maxImages = modelCapabilityConfigFor(config, config.model).image?.references.maxImages;
if (maxImages === undefined || maxImages < 1 || referenceImages.length <= maxImages) return referenceImages;
return referenceImages.slice(0, maxImages);
if (maxImages === undefined || referenceImages.length <= maxImages) return "";
return `当前图片模型最多支持 ${maxImages} 张参考图,当前已连接 ${referenceImages.length} 张。请移除多余连线后重试`;
}
export function assertCanvasImageReferenceLimit(config: AiConfig, referenceImages: ReferenceImage[]) {
const error = canvasImageReferenceLimitError(config, referenceImages);
if (error) throw new Error(error);
}
export { backendProviderConfig };