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/i2v 描述里几乎必现输出侧不算输入声明
输入声明判据 = 参考词参考生/全能参考/四模态等或图像/音频词或输入媒体2
返回 (corrected_cap None, warning None)
"""
desc = description or ''
@ -493,26 +495,29 @@ def _capability_guard(capability, description):
return None, None
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)]
# 「输出 视频」的"视频"不算输入声明——t2v 描述几乎都带"视频"二字。
# 输入声明判据:参考词,或图像/音频词(这两个不会出现在纯文本生成的描述里),
# 或"视频"以外多模态组合。
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):
out_word = '视频' if capability == 't2v' else ('图像' if capability == 't2i' else '')
if capability == 't2t':
return None, ("描述含媒体输入声明(%s)但能力是 t2t——请人工核对能力分类"
% '/'.join(kinds))
expected = 'r2v' if (has_ref or len(kinds) >= 2) else (
'i2v' if 'image' in input_kinds and out_word == '视频' else
('i2i' if 'image' in input_kinds and out_word == '图像' else None))
if expected and expected != capability:
return expected, ("能力自动纠正 %s%s:描述声明媒体输入(%s%s"
"纯文本能力与之矛盾(提取照示例误判,守卫按正文模态纠正)"
% (capability, expected, '/'.join(kinds),
',含参考声明' if has_ref else ''))
return None, ("描述含媒体输入声明(%s)但能力是 %s——无法确定目标能力,"
"请人工核对(可用 overrides.model_capability 纠正)"
% ('/'.join(kinds), capability))
if not (has_ref or input_kinds):
return None, None
if capability == 't2t':
return None, ("描述含媒体输入声明(%s%s)但能力是 t2t——请人工核对能力分类"
% ('/'.join(kinds), ',含参考声明' if has_ref else ''))
out_word = '视频' if capability == 't2v' else '图像'
expected = None
if has_ref:
expected = 'r2v' if capability == 't2v' else 'i2i'
elif len(input_kinds) >= 2:
expected = 'r2v' if capability == 't2v' else 'i2i'
elif 'image' in input_kinds:
expected = 'i2v' if capability == 't2v' else 'i2i'
elif 'audio' in input_kinds:
# 音频输入语义不定r2v 音频参考 / asr / tts 反向),不敢自动纠正
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