fix(canvas): 局部重绘、图片规格与任务参数修复

This commit is contained in:
Rou
2026-09-09 14:22:21 +08:00
parent bacd502f5c
commit cd2ad4d700
13 changed files with 124 additions and 45 deletions

View File

@@ -538,7 +538,7 @@ export function backendProviderConfig(config: AiConfig, mode: BackendGenerationM
if (workflow) return workflowProviderConfig(config, requestConfig, workflow);
const generationOptions = {
size: config.size,
quality: config.quality,
quality: omittedImageQuality(config.quality),
transparentBackground: config.transparentBackground,
count: config.count,
videoSeconds: config.videoSeconds,
@@ -623,13 +623,28 @@ function logicalCapabilityOptions(config: AiConfig, mode: BackendGenerationMode)
const channel = resolveModelChannel(config, config.model);
const spec = channel.modelCosts?.find((item) => item.model === modelOptionName(config.model))?.logicalCapabilitySpec;
const candidates: Record<string, unknown> = mode === "image"
? { size: config.size, quality: config.quality, transparentBackground: config.transparentBackground === "true", count: Number(config.count) }
? { size: config.size, quality: omittedImageQuality(config.quality), transparentBackground: config.transparentBackground === "true", count: Number(config.count) }
: mode === "video"
? { size: config.size, videoSeconds: Number(config.videoSeconds), vquality: config.vquality, videoGenerateAudio: config.videoGenerateAudio === "true", videoWatermark: config.videoWatermark === "true" }
: mode === "audio"
? { audioVoice: config.audioVoice, audioFormat: config.audioFormat, audioSpeed: Number(config.audioSpeed) }
: {};
return Object.fromEntries(Object.entries(candidates).filter(([key]) => Boolean(spec?.options?.[key])));
const filtered = Object.fromEntries(Object.entries(candidates).filter(([key]) => Boolean(spec?.options?.[key])));
// 图片质量和画幅同时参与按规格计费匹配。即使逻辑模型能力声明只把其中一项
// 暴露给供应线路,报价仍需要看到客户端最终选择,避免局部重绘等编辑请求落到
// “未配置所选规格”的错误分支。
if (mode === "image") {
for (const key of ["quality", "size"] as const) {
const value = candidates[key];
if (value !== undefined && value !== null && String(value).trim() !== "") filtered[key] = value;
}
}
return filtered;
}
function omittedImageQuality(value: string | undefined) {
const normalized = String(value || "").trim().toLowerCase();
return normalized === "auto" || normalized === "any" ? undefined : value;
}
export function parseBackendGenerationResult(task: GenerationTask): BackendGenerationResult {