fix: attribute descriptive review gaps to the named evidence target

This commit is contained in:
2026-10-17 20:44:50 +08:00
parent 14cef5c929
commit 5a6e5d47a0
2 changed files with 35 additions and 1 deletions
+28
View File
@@ -373,6 +373,34 @@ def test_model_declining_score_records_original_gap(sqlite_db):
assert score.evidence_gaps[0]["reason"] == "只有装置介绍"
@pytest.mark.parametrize("missing", [["误差分析(t1):缺少误差来源和统计数据"],
["尚缺 t1 对应的正文"], ["当前资料无法判断"]])
def test_declined_score_attributes_descriptive_missing_evidence_to_its_target(sqlite_db, missing):
db = sqlite_db
item = project(db)
file = SubmissionFile(project_id=item.id, category="stage3", relative_path="test.pdf", mime_type="application/pdf",
size=1, mtime=1, sha256="test", recognition_status="recognized", parse_status="ready")
db.add(file)
db.commit()
ingest(db, course_version_id=1, project_id=item.id, submission_file_id=file.id, title="test.pdf",
category="stage3", source_hash="test", pages=[{"page_number": 1, "text": "实验测得响应时间80毫秒,但未解释误差来源。"}], embedder=FLAT)
criterion = {"criterion_id": "stage3.data", "category": "stage3", "max_score": 20,
"description": "实验数据与误差分析", "required_evidence": ["实验数据", "误差分析"]}
created = services.create_batch(SimpleNamespace(course_version_id=1, rubric_version_id=1), db)
class Client:
def json_call(self, *args, **kwargs):
return ScoreResult(criterion_id="stage3.data", score=None, max_score=20,
reason="误差分析尚不足以判断", missing_evidence=missing, confidence=.2)
def retriever(session, **kwargs):
if kwargs.get("public_only"):
return []
return retrieve(session, **{**kwargs, "embedder": FLAT})
score = _score_criterion(db, db.get(ScoringBatch, created["id"]), item, criterion, Client(), retriever=retriever)
expected = ["t0", "t1"] if missing == ["当前资料无法判断"] else ["t1"]
assert [gap["target_id"] for gap in score.evidence_gaps] == expected
assert score.status == "needs_review" and score.model_score is None
def test_failed_model_call_cannot_overwrite_a_concurrent_teacher_review(sqlite_db, monkeypatch):
from wisegrade import scoring
db = sqlite_db