fix(platform): 能力守卫歧义处理——'视频'字在t2v描述必现不算输入声明;音频单输入不自动纠正只警告

This commit is contained in:
yumoqing 2026-09-06 14:58:38 +08:00
parent b2ecf54f43
commit 6b306566b2

View File

@ -486,6 +486,8 @@ def _capability_guard(capability, description):
保守策略:只在「纯文本能力(t2v/t2i/t2t)+ 描述含媒体输入/参考声明」这种 保守策略:只在「纯文本能力(t2v/t2i/t2t)+ 描述含媒体输入/参考声明」这种
铁证矛盾时纠正;其他不一致只警告不改(避免误伤描述措辞不规范的正确配置)。 铁证矛盾时纠正;其他不一致只警告不改(避免误伤描述措辞不规范的正确配置)。
歧义处理:"视频"二字在 t2v/i2v 描述里几乎必现(输出侧),不算输入声明;
输入声明判据 = 参考词(参考生/全能参考/四模态等)或图像/音频词或输入媒体≥2类。
返回 (corrected_cap 或 None, warning 或 None)。 返回 (corrected_cap 或 None, warning 或 None)。
""" """
desc = description or '' desc = description or ''
@ -493,26 +495,29 @@ def _capability_guard(capability, description):
return None, None return None, None
has_ref = any(w in desc for w in _DESC_REF_WORDS) has_ref = any(w in desc for w in _DESC_REF_WORDS)
kinds = [k for k, words in _DESC_MEDIA_WORDS.items() if any(w in desc for w in words)] kinds = [k for k, words in _DESC_MEDIA_WORDS.items() if any(w in desc for w in words)]
# 「输出 视频」的"视频"不算输入声明——t2v 描述几乎都带"视频"二字。
# 输入声明判据:参考词,或图像/音频词(这两个不会出现在纯文本生成的描述里),
# 或"视频"以外多模态组合。
input_kinds = [k for k in kinds if k != 'video'] input_kinds = [k for k in kinds if k != 'video']
if has_ref or len(input_kinds) >= 1 or (has_ref is False and len(kinds) >= 2 and 'video' in kinds and input_kinds): if not (has_ref or input_kinds):
out_word = '视频' if capability == 't2v' else ('图像' if capability == 't2i' else '') return None, None
if capability == 't2t': if capability == 't2t':
return None, ("描述含媒体输入声明(%s)但能力是 t2t——请人工核对能力分类" return None, ("描述含媒体输入声明(%s%s)但能力是 t2t——请人工核对能力分类"
% '/'.join(kinds)) % ('/'.join(kinds), ',含参考声明' if has_ref else ''))
expected = 'r2v' if (has_ref or len(kinds) >= 2) else ( out_word = '视频' if capability == 't2v' else '图像'
'i2v' if 'image' in input_kinds and out_word == '视频' else expected = None
('i2i' if 'image' in input_kinds and out_word == '图像' else None)) if has_ref:
if expected and expected != capability: expected = 'r2v' if capability == 't2v' else 'i2i'
return expected, ("能力自动纠正 %s→%s:描述声明媒体输入(%s%s)," elif len(input_kinds) >= 2:
"纯文本能力与之矛盾(提取照示例误判,守卫按正文模态纠正)" expected = 'r2v' if capability == 't2v' else 'i2i'
% (capability, expected, '/'.join(kinds), elif 'image' in input_kinds:
',含参考声明' if has_ref else '')) expected = 'i2v' if capability == 't2v' else 'i2i'
return None, ("描述含媒体输入声明(%s)但能力是 %s——无法确定目标能力," elif 'audio' in input_kinds:
"请人工核对(可用 overrides.model_capability 纠正)" # 音频输入语义不定(r2v 音频参考 / asr / tts 反向),不敢自动纠正
% ('/'.join(kinds), capability)) return None, ("描述含音频输入声明但能力是 %s——无法确定目标能力,"
"请人工核对(可用 overrides.model_capability 纠正)" % capability)
if expected and expected != capability:
return expected, ("能力自动纠正 %s→%s:描述声明媒体输入(%s%s),"
"纯文本能力与之矛盾(提取照示例误判,守卫按正文模态纠正)"
% (capability, expected, '/'.join(kinds),
',含参考声明' if has_ref else ''))
return None, None return None, None