feat(review): 取证层多源化 + 视觉多图(整体+2x2 象限)
- 新增 evidence_model.py:统一证据模型(source_type + images 列表),访问器兼容旧 image_b64/image_mime 单图字段 - phases/evidence.py:新增 collect() 多源分发 seam(仅 CAD)、capture_images() 整体+等分象限多图(结束复位视口)、sub_windows() - phases/review.py:多图逐张下采样喂 LLM,payload 增加 source_type - config.py:EVIDENCE_DETAIL_TILES=4 / EVIDENCE_MAX_IMAGES=5(默认开启多图) - 新增 tests/test_evidence_model.py,更新 evidence/review 断言与 fakes 归一
This commit is contained in:
1 parent
22db93b6f5
commit
1c9fc72839
10 files changed
+396
-32
No files matched your search
@@ -11,6 +11,7 @@ from . import findings as findings_mod
|
||||
from .annotator import annotate, clear
|
||||
from .checklist import build_system_prompt, checklist_summary
|
||||
from .context import ReviewContext
|
||||
from .evidence_model import evidence_images
|
||||
from .mcp_client import McpError, McpToolError, result_json
|
||||
from .phases import evidence as evidence_phase
|
||||
from .phases import planning, report, review
|
||||
@@ -20,7 +21,8 @@ def _dump_evidence(evidences):
|
||||
out_dir = Path(config.REPORT_DIR)
|
||||
out_dir.mkdir(parents=True, exist_ok=True)
|
||||
path = out_dir / "evidence.json"
|
||||
trimmed = [{k: v for k, v in e.items() if k != "image_b64"} for e in evidences]
|
||||
drop = ("images", "image_b64", "image_mime")
|
||||
trimmed = [{k: v for k, v in e.items() if k not in drop} for e in evidences]
|
||||
path.write_text(json.dumps(trimmed, ensure_ascii=False, indent=2), encoding="utf-8")
|
||||
return path
|
||||
|
||||
@@ -67,14 +69,14 @@ def run_review(ctx, args):
|
||||
f" - 图框 {idx}/{len(frames)} kind={frame.get('kind')} "
|
||||
f"sheet={frame.get('sheet_size')}"
|
||||
)
|
||||
ev = evidence_phase.collect_frame(ctx, idx, frame)
|
||||
ev = evidence_phase.collect(ctx, idx, frame)
|
||||
if ev is None:
|
||||
print(" [跳过] 缺少有效包围盒")
|
||||
continue
|
||||
evidences.append(ev)
|
||||
print(
|
||||
f" 图元 {(ev.get('entities') or {}).get('total')} 条,"
|
||||
f"截图 {'有' if ev.get('image_b64') else '无'}"
|
||||
f"截图 {len(evidence_images(ev))} 张"
|
||||
)
|
||||
|
||||
if args.plan_only:
|
||||
|
||||
Reference in new issue
Block a user