实现Agent对话,合格自动提交,不合格补充材料的能力

This commit is contained in:
wandering
2026-06-14 12:56:33 +08:00
parent 8dd91df3b9
commit 46305fdebb
68 changed files with 8914 additions and 1908 deletions

View File

@@ -9,6 +9,9 @@ from __future__ import annotations
from pathlib import Path
from typing import Any
import pytest
from src import exceptions
from src.doc.extractor import extract_invoices
# 字段键名(与源码中的字符串字面量保持一致)
@@ -87,12 +90,13 @@ class TestExtractInvoices:
pdf.touch()
monkeypatch.setattr("src.doc.extractor._find_all_files", lambda d: [pdf])
monkeypatch.setattr("src.doc.extractor._extract_document", lambda p, c: None)
monkeypatch.setattr("src.doc.extractor._extract_document", lambda p, c, s: (None, "parse error"))
records, apps, groups = extract_invoices(str(tmp_path))
assert records == []
assert apps == []
assert groups == {"travel": [], "general": [], "application": []}
with pytest.raises(exceptions.ExtractionError) as exc_info:
extract_invoices(str(tmp_path))
assert "broken.pdf" in exc_info.value.failed_files
assert exc_info.value.details["broken.pdf"] == "parse error"
def test_normal_flow_general_invoices(self, tmp_path: Path, monkeypatch):
pdf1 = tmp_path / "inv1.pdf"
@@ -107,10 +111,10 @@ class TestExtractInvoices:
call_index = [0]
def fake_extract(path, cache_dir):
def fake_extract(path, cache_dir, source_dir):
idx = call_index[0]
call_index[0] += 1
return inv1 if idx == 0 else inv2
return (inv1, None) if idx == 0 else (inv2, None)
monkeypatch.setattr("src.doc.extractor._extract_document", fake_extract)
@@ -156,10 +160,10 @@ class TestExtractInvoices:
invoices_list = [inv_train, inv_hotel, inv_general]
call_index = [0]
def fake_extract(path, cache_dir):
def fake_extract(path, cache_dir, source_dir):
idx = call_index[0]
call_index[0] += 1
return invoices_list[idx]
return (invoices_list[idx], None)
monkeypatch.setattr("src.doc.extractor._extract_document", fake_extract)
@@ -224,10 +228,10 @@ class TestExtractInvoices:
results = [inv, app]
call_index = [0]
def fake_extract(path, cache_dir):
def fake_extract(path, cache_dir, source_dir):
idx = call_index[0]
call_index[0] += 1
return results[idx]
return (results[idx], None)
monkeypatch.setattr("src.doc.extractor._extract_document", fake_extract)
@@ -269,10 +273,10 @@ class TestExtractInvoices:
results = [inv, card]
call_index = [0]
def fake_extract(path, cache_dir):
def fake_extract(path, cache_dir, source_dir):
idx = call_index[0]
call_index[0] += 1
return results[idx]
return (results[idx], None)
monkeypatch.setattr("src.doc.extractor._extract_document", fake_extract)
@@ -312,10 +316,10 @@ class TestExtractInvoices:
results = [inv, None]
call_index = [0]
def fake_extract(path, cache_dir):
def fake_extract(path, cache_dir, source_dir):
idx = call_index[0]
call_index[0] += 1
return results[idx]
return (results[idx], "parse error") if results[idx] is None else (results[idx], None)
monkeypatch.setattr("src.doc.extractor._extract_document", fake_extract)