feat(regulatory): 按实际处理数量更新节点进度
This commit is contained in:
@@ -17,6 +17,7 @@ from review_agent.models import (
|
||||
)
|
||||
from review_agent.regulatory_review.workflow import (
|
||||
NODE_DEFINITIONS,
|
||||
RegulatoryWorkflowExecutor,
|
||||
create_regulatory_review_batch,
|
||||
find_latest_successful_summary_batch,
|
||||
start_regulatory_review_workflow,
|
||||
@@ -413,3 +414,89 @@ def test_workflow_records_llm_review_artifacts_for_review_nodes(
|
||||
assert "llm_review_structure_check.json" in artifact_names
|
||||
assert "llm_review_consistency_check.json" in artifact_names
|
||||
assert "llm_review_risk_assess.json" in artifact_names
|
||||
|
||||
|
||||
def test_workflow_progress_uses_processed_file_counts(settings, tmp_path, django_user_model):
|
||||
settings.MEDIA_ROOT = tmp_path
|
||||
user = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
conversation = Conversation.objects.create(user=user, title="会话")
|
||||
summary = FileSummaryBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
batch_no="FS-OK",
|
||||
status=FileSummaryBatch.Status.SUCCESS,
|
||||
)
|
||||
for index, name in enumerate(["注册信息.txt", "说明书.txt", "综述.txt"], start=1):
|
||||
path = tmp_path / name
|
||||
path.write_text(f"产品名称:甲胎蛋白检测试剂盒\n文件:{name}", encoding="utf-8")
|
||||
FileSummaryItem.objects.create(
|
||||
batch=summary,
|
||||
file_index=index,
|
||||
file_name=name,
|
||||
file_type="txt",
|
||||
relative_path=name,
|
||||
storage_path=str(path),
|
||||
)
|
||||
batch = create_regulatory_review_batch(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
source_summary_batch=summary,
|
||||
)
|
||||
node = WorkflowNodeRun.objects.get(
|
||||
workflow_type="regulatory_review",
|
||||
workflow_batch_id=batch.pk,
|
||||
node_code="text_extract",
|
||||
)
|
||||
executor = RegulatoryWorkflowExecutor(batch)
|
||||
|
||||
texts = executor._extract_source_texts(node)
|
||||
|
||||
node.refresh_from_db()
|
||||
assert len(texts) == 3
|
||||
assert node.progress == 95
|
||||
assert "文本抽取 3/3" in node.message
|
||||
assert "综述.txt" in node.message
|
||||
assert WorkflowEvent.objects.filter(
|
||||
workflow_type="regulatory_review",
|
||||
workflow_batch_id=batch.pk,
|
||||
event_type="node_progress",
|
||||
payload__node_code="text_extract",
|
||||
payload__processed=3,
|
||||
payload__total=3,
|
||||
).exists()
|
||||
|
||||
|
||||
def test_review_services_emit_actual_workload_progress_callbacks(django_user_model):
|
||||
from review_agent.regulatory_review.services.completeness_check import run_completeness_check
|
||||
from review_agent.regulatory_review.services.consistency_check import FIELDS, run_consistency_check
|
||||
from review_agent.regulatory_review.services.structure_check import run_structure_check
|
||||
|
||||
user = django_user_model.objects.create_user(username="owner", password="pass")
|
||||
conversation = Conversation.objects.create(user=user, title="会话")
|
||||
summary = FileSummaryBatch.objects.create(
|
||||
conversation=conversation,
|
||||
user=user,
|
||||
batch_no="FS-OK",
|
||||
status=FileSummaryBatch.Status.SUCCESS,
|
||||
)
|
||||
rule_set = {
|
||||
"requirements": [
|
||||
{"code": "r1", "title": "注册信息", "type": "required", "file_keywords": ["注册信息"]},
|
||||
{"code": "r2", "title": "说明书", "type": "required", "file_keywords": ["说明书"]},
|
||||
]
|
||||
}
|
||||
completeness_updates = []
|
||||
structure_updates = []
|
||||
consistency_updates = []
|
||||
|
||||
run_completeness_check(summary, rule_set, progress_callback=completeness_updates.append)
|
||||
run_structure_check({"注册信息.txt": "注册信息"}, rule_set, progress_callback=structure_updates.append)
|
||||
run_consistency_check({"注册信息.txt": "产品名称:A"}, progress_callback=consistency_updates.append)
|
||||
|
||||
assert completeness_updates[-1]["processed"] == 2
|
||||
assert completeness_updates[-1]["total"] == 2
|
||||
assert completeness_updates[-1]["label"] == "说明书"
|
||||
assert structure_updates[-1]["processed"] == 2
|
||||
assert structure_updates[-1]["total"] == 2
|
||||
assert consistency_updates[-1]["processed"] == len(FIELDS)
|
||||
assert consistency_updates[-1]["total"] == len(FIELDS)
|
||||
|
||||
Reference in New Issue
Block a user