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

@@ -1,7 +1,7 @@
import { describe, expect, test } from "bun:test";
import { canvasConnectionError } from "../src/lib/canvas/canvas-connection-policy";
import { buildGenerationConfig, resolveCanvasGenerationModel } from "../src/lib/canvas/canvas-project-generation";
import { assertCanvasImageReferenceLimit, buildGenerationConfig, canvasImageReferenceLimitError, resolveCanvasGenerationModel } from "../src/lib/canvas/canvas-project-generation";
import { defaultModelCapabilityConfig } from "../src/lib/model-capabilities";
import { groupModelsByDisplayName, modelCompatibilityError, modelGroupReferenceLimits, resolveCompatibleModel } from "../src/lib/model-selection";
import { defaultConfig, type AiConfig, type ModelChannel } from "../src/stores/use-config-store";
@@ -124,3 +124,20 @@ describe("画布连线能力", () => {
expect(canvasConnectionError(config, nodes, [], { fromNodeId: "character", toNodeId: "target" })).toBe("");
});
});
describe("图片参考图上限", () => {
test("超出当前模型上限时保留全部输入并返回明确错误", () => {
const config = policyConfig();
const modelCost = config.channels[0]?.modelCosts?.[0];
if (!modelCost?.capabilityConfig?.image) throw new Error("缺少图片能力配置");
modelCost.capabilityConfig.image.references.maxImages = 1;
const references = [
{ id: "image-a", name: "image-a.png", type: "image/png", dataUrl: "data:image/png;base64,YQ==" },
{ id: "image-b", name: "image-b.png", type: "image/png", dataUrl: "data:image/png;base64,Yg==" },
];
expect(canvasImageReferenceLimitError(config, references)).toContain("最多支持 1 张参考图,当前已连接 2 张");
expect(() => assertCanvasImageReferenceLimit(config, references)).toThrow("请移除多余连线后重试");
expect(references).toHaveLength(2);
});
});