From 9a1afd502036d98224d95696f3fefd351dcbfa82 Mon Sep 17 00:00:00 2001 From: aerospaceboy <790286734@qq.com> Date: Sat, 17 Oct 2026 20:19:37 +0800 Subject: [PATCH] fix: clear resolved evidence gaps after a successful scoring retry --- backend/tests/test_optimization.py | 4 ++++ backend/wisegrade/scoring.py | 1 + 2 files changed, 5 insertions(+) diff --git a/backend/tests/test_optimization.py b/backend/tests/test_optimization.py index c3f4d05..21dca2d 100644 --- a/backend/tests/test_optimization.py +++ b/backend/tests/test_optimization.py @@ -607,6 +607,9 @@ def test_scoring_retry_carries_target_contract_and_specific_repair_feedback(sqli "description": "实现方法", "required_evidence": ["实验数据", "实现方法"]} created = services.create_batch(SimpleNamespace(course_version_id=1, rubric_version_id=1), db) batch = db.get(ScoringBatch, created["id"]) + db.add(CriterionScore(batch_id=batch.id, project_id=item.id, criterion_id=criterion["criterion_id"], + status="needs_review", evidence_gaps=[{"target_id": "t1", "reason": "上次未命中正文"}])) + db.commit() class Client: calls = 0 def json_call(self, prompt, payload, *args, **kwargs): @@ -626,6 +629,7 @@ def test_scoring_retry_carries_target_contract_and_specific_repair_feedback(sqli score = _score_criterion(db, batch, item, criterion, client, retriever=lambda *args, **kwargs: [], multi_retriever=selected) assert score.status == "scored" and client.calls == 2 + assert score.evidence_gaps == [] @pytest.mark.parametrize("version", [None, 1]) diff --git a/backend/wisegrade/scoring.py b/backend/wisegrade/scoring.py index 5f34560..a128b78 100644 --- a/backend/wisegrade/scoring.py +++ b/backend/wisegrade/scoring.py @@ -263,6 +263,7 @@ def _score_criterion(db, batch, project, criterion, client, *, retriever, multi_ gap["reason"] = result.reason else: score.status, score.error = STATUS_SCORED, "" + score.evidence_gaps = [] for evidence in db.scalars(select(ScoreEvidence).where(ScoreEvidence.score_id == score.id)).all(): db.delete(evidence) by_id = {chunk["chunk_id"]: chunk for chunk in chunks}