feat(models): 统一模型规格价格与路由
This commit is contained in:
1 parent
d268a938e5
commit
236b850177
36 files changed
+3404
-421
No files matched your search
@@ -4,7 +4,7 @@ import { canvasConnectionError } from "../src/lib/canvas/canvas-connection-polic
|
||||
import { assertCanvasImageReferenceLimit, buildGenerationConfig, canvasImageReferenceLimitError, resolveCanvasGenerationModel } from "../src/lib/canvas/canvas-project-generation";
|
||||
import { defaultModelCapabilityConfig } from "../src/lib/model-capabilities";
|
||||
import { groupModelsByDisplayName, modelCompatibilityError, modelGroupReferenceLimits, resolveCompatibleModel, resolveModelGenerationDefaults } from "../src/lib/model-selection";
|
||||
import { defaultConfig, type AiConfig, type ModelChannel } from "../src/stores/use-config-store";
|
||||
import { defaultConfig, normalizeModelOptionValue, type AiConfig, type ModelChannel } from "../src/stores/use-config-store";
|
||||
import { CanvasNodeType, type CanvasConnection, type CanvasNodeData } from "../src/types/canvas";
|
||||
|
||||
function policyConfig(): AiConfig {
|
||||
@@ -167,6 +167,61 @@ describe("逻辑模型选择", () => {
|
||||
expect(modelCompatibilityError(config, "relay::cinema-image", requirements)).toContain("参考音频");
|
||||
});
|
||||
|
||||
test("逻辑视频模型将 720 与 720p 视为同一分辨率", () => {
|
||||
const model = "cinema-720p";
|
||||
const channel: ModelChannel = {
|
||||
id: "logical-video",
|
||||
name: "平台视频模型",
|
||||
baseUrl: "/api",
|
||||
apiKey: "system",
|
||||
apiFormat: "openai",
|
||||
scope: "system",
|
||||
models: [model],
|
||||
modelCosts: [{
|
||||
model,
|
||||
capability: "video",
|
||||
billingMode: "per_second",
|
||||
unitPriceMicrocredits: 1,
|
||||
logicalCapabilitySpec: {
|
||||
version: 1,
|
||||
capability: "video",
|
||||
operations: ["text_to_video"],
|
||||
inputs: {},
|
||||
options: {
|
||||
videoSeconds: { min: 1, max: 15, step: 1 },
|
||||
size: { values: ["16:9"] },
|
||||
vquality: { values: ["720p"] },
|
||||
videoGenerateAudio: { values: [false] },
|
||||
videoWatermark: { values: [false] },
|
||||
},
|
||||
},
|
||||
}],
|
||||
};
|
||||
const value = `logical-video::${model}`;
|
||||
const config = { ...defaultConfig, channels: [channel], models: [value], videoModels: [value], videoModel: value };
|
||||
|
||||
expect(modelCompatibilityError(config, value, {
|
||||
capability: "video",
|
||||
input: { textCount: 1, imageCount: 0, videoCount: 0, audioCount: 0, characterCount: 0 },
|
||||
options: { size: "16:9", videoSeconds: 6, vquality: "720", videoGenerateAudio: false, videoWatermark: false },
|
||||
})).toBe("");
|
||||
});
|
||||
|
||||
test("已保存的旧 SKU 选择会解析到新的模型家族", () => {
|
||||
const channel: ModelChannel = {
|
||||
id: "managed",
|
||||
name: "平台模型",
|
||||
baseUrl: "/api",
|
||||
apiKey: "system",
|
||||
apiFormat: "openai",
|
||||
scope: "system",
|
||||
models: ["family-seedance-2-5"],
|
||||
modelAliases: { "legacy-seedance-720": "family-seedance-2-5" },
|
||||
};
|
||||
|
||||
expect(normalizeModelOptionValue("managed::legacy-seedance-720", [channel])).toBe("managed::family-seedance-2-5");
|
||||
});
|
||||
|
||||
test("逻辑模型容量使用同名细分模型的最大值", () => {
|
||||
const config = policyConfig();
|
||||
expect(modelGroupReferenceLimits(config, "relay::cinema-text", "video")).toEqual({ maxImages: 1, maxVideos: 0, maxAudios: 1 });
|
||||
|
||||
Reference in new issue
Block a user