fix: Codex 全量审查修正

Critical:
- C1: assemble_mode 'plain' → 'ids'(合法枚举值)
- C2: question_id 加入 task_type slug 避免跨题型冲突

Important/Minor:
- generate_one 移除未用的 embed_fn/similarity_threshold 参数
- config.py 注释 11→12 同步
- 测试 question_id 断言更新

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-07-09 07:40:27 -04:00
parent fad8147d71
commit f57ee45dc0
4 changed files with 7 additions and 28 deletions
+4 -15
View File
@@ -346,14 +346,14 @@ class TestParseVlmResponse:
assert result["question"] == "What?"
assert result["answer"] == "A"
assert len(result["options"]) == 4
assert result["question_id"] == "gen-vid1-001"
assert result["question_id"] == "gen-vid1-object_recognition-001"
def test_json_in_code_block(self) -> None:
"""从 markdown 代码块中提取 JSON。"""
raw = '```json\n{"question": "Q?", "options": ["A. 1", "B. 2", "C. 3", "D. 4"], "answer": "B"}\n```'
result = parse_vlm_response(raw, "vid1", "Object Recognition", 2)
assert result["question"] == "Q?"
assert result["question_id"] == "gen-vid1-002"
assert result["question_id"] == "gen-vid1-object_recognition-002"
def test_invalid_json_raises(self) -> None:
"""非 JSON 文本应抛出 ValueError。"""
@@ -382,7 +382,7 @@ class TestParseVlmResponse:
"""seq 应按 3 位零填充格式化到 question_id 中。"""
raw = '{"question": "Q?", "options": ["A. 1", "B. 2", "C. 3", "D. 4"], "answer": "C"}'
result = parse_vlm_response(raw, "video_abc", "Action Reasoning", 42)
assert result["question_id"] == "gen-video_abc-042"
assert result["question_id"] == "gen-video_abc-action_reasoning-042"
# ---------------------------------------------------------------------------
@@ -448,14 +448,9 @@ class TestGenerateOne:
content='{"question":"Q?","options":["A. 1","B. 2","C. 3","D. 4"],"answer":"A"}',
)
def embed_fn(t: str | list[str]) -> np.ndarray:
shape = (1, 4) if isinstance(t, str) else (len(t), 4)
return np.zeros(shape, dtype=np.float32)
tree, vid = self._load_test_tree()
result = await generate_one(
vlm=vlm,
embed_fn=embed_fn,
tree=tree,
video_id=vid,
task_type="Object Recognition",
@@ -463,12 +458,11 @@ class TestGenerateOne:
exemplars=[],
used_node_ids=set(),
max_retries=3,
similarity_threshold=0.85,
rng=random.Random(42),
session_id="test",
)
assert result is not None
assert result.question_id == f"gen-{vid}-001"
assert result.question_id == f"gen-{vid}-object_recognition-001"
assert result.task_type == "Object Recognition"
assert result.source_nodes # non-empty
assert result.difficulty == "medium"
@@ -479,13 +473,9 @@ class TestGenerateOne:
vlm = AsyncMock()
vlm.chat_with_images.return_value = MagicMock(content="invalid")
def embed_fn(t: str | list[str]) -> np.ndarray:
return np.zeros((1, 4), dtype=np.float32)
tree, vid = self._load_test_tree()
result = await generate_one(
vlm=vlm,
embed_fn=embed_fn,
tree=tree,
video_id=vid,
task_type="Object Recognition",
@@ -493,7 +483,6 @@ class TestGenerateOne:
exemplars=[],
used_node_ids=set(),
max_retries=2,
similarity_threshold=0.85,
rng=random.Random(42),
session_id="test",
)