保留社区技能作者与时间戳修复、Agent 参数约束、资源删除 worker 生命周期、PostgreSQL/Redis 测试门禁及相关回归。 Original-Commit: 0d05ff88bbe6c875d01964041788023a662ff7e8
58 lines
3.0 KiB
TypeScript
58 lines
3.0 KiB
TypeScript
import { expect, test } from "bun:test";
|
|
import { defaultModelCapabilityConfig } from "../src/lib/model-capabilities";
|
|
import { modelQuoteRequest } from "../src/lib/model-pricing";
|
|
import { creationVideoConfig } from "../src/pages/create/creation-generation-config";
|
|
import { prepareBackendGenerationTask } from "../src/services/api/generation-task";
|
|
import { defaultConfig, type AiConfig } from "../src/stores/use-config-store";
|
|
|
|
function videoConfig(generateAudio: { supported: boolean; default: boolean }): AiConfig {
|
|
const capabilityConfig = defaultModelCapabilityConfig();
|
|
capabilityConfig.video!.generateAudio = generateAudio;
|
|
capabilityConfig.video!.watermark = { supported: false, default: false };
|
|
return {
|
|
...defaultConfig,
|
|
model: "gravity::minimax-h3-a",
|
|
videoModel: "gravity::minimax-h3-a",
|
|
videoGenerateAudio: "true",
|
|
videoWatermark: "true",
|
|
channels: [
|
|
{
|
|
id: "gravity",
|
|
name: "万有引力",
|
|
baseUrl: "/api",
|
|
apiKey: "",
|
|
apiFormat: "openai",
|
|
scope: "system",
|
|
models: ["minimax-h3-a"],
|
|
modelCosts: [{ model: "minimax-h3-a", capability: "video", billingMode: "per_second", unitPriceMicrocredits: 1, capabilityConfig }],
|
|
},
|
|
],
|
|
};
|
|
}
|
|
|
|
test("创作台无声视频报价、提交与重试不携带全局音频和水印默认值", async () => {
|
|
const config = videoConfig({ supported: false, default: false });
|
|
const requestConfig = creationVideoConfig(config, config.videoModel, { ratio: "16:9", seconds: "6", videoQuality: "480" });
|
|
const quote = modelQuoteRequest(requestConfig, requestConfig.model, "video");
|
|
expect(quote?.intent.options).toMatchObject({ size: "16:9", vquality: "480", videoSeconds: 6, videoGenerateAudio: false, videoWatermark: false });
|
|
|
|
for (const retryOf of [undefined, "failed-task"]) {
|
|
const task = await prepareBackendGenerationTask({ mode: "video", prompt: "小猫在流泪", config: requestConfig, retryOf });
|
|
expect(task.input).toMatchObject({
|
|
config: { size: "16:9", vquality: "480", videoSeconds: "6", videoGenerateAudio: "false", videoWatermark: "false" },
|
|
...(retryOf ? { metadata: { retryOf } } : {}),
|
|
});
|
|
expect(task.operation).toBe("text_to_video");
|
|
}
|
|
expect(config.videoGenerateAudio).toBe("true");
|
|
expect(config.videoWatermark).toBe("true");
|
|
});
|
|
|
|
test.each([false, true])("创作台支持同步音频时遵循模型默认值 %s", (audioDefault) => {
|
|
const config = videoConfig({ supported: true, default: audioDefault });
|
|
config.videoGenerateAudio = String(!audioDefault);
|
|
const requestConfig = creationVideoConfig(config, config.videoModel, { ratio: "16:9", seconds: "6", videoQuality: "480" });
|
|
expect(requestConfig.videoGenerateAudio).toBe(String(audioDefault));
|
|
expect(modelQuoteRequest(requestConfig, requestConfig.model, "video")?.intent.options?.videoGenerateAudio).toBe(audioDefault);
|
|
});
|