from __future__ import annotations import json from services.example_bills import ExampleBill from services.precomputed_assets import load_precomputed_asset from services.rag_pipeline import hydrate_precomputed_example def test_load_precomputed_asset_does_not_require_vector_store_dir(monkeypatch, tmp_path) -> None: from services import example_bills as example_bills_module monkeypatch.setattr(example_bills_module, "EXAMPLE_BILL_ASSETS_ROOT", tmp_path) bill = ExampleBill( id="example-bill", title="Example Bill", source_url="https://example.com/bill.pdf", document_hash="hash", asset_dir="example-bill", ) root_dir = tmp_path / bill.asset_dir root_dir.mkdir(parents=True) (root_dir / "analysis.json").write_text(json.dumps({"executive_summary": "Summary"}), encoding="utf-8") (root_dir / "document.txt").write_text("Document text", encoding="utf-8") (root_dir / "chunks.json").write_text(json.dumps(["Chunk one", "Chunk two"]), encoding="utf-8") asset = load_precomputed_asset(bill) assert asset is not None assert asset.document_text == "Document text" assert asset.chunks == ["Chunk one", "Chunk two"] def test_hydrate_precomputed_example_rebuilds_vector_store_from_chunks(monkeypatch, tmp_path) -> None: from services import example_bills as example_bills_module monkeypatch.setattr(example_bills_module, "EXAMPLE_BILL_ASSETS_ROOT", tmp_path) bill = ExampleBill( id="example-bill", title="Example Bill", source_url="https://example.com/bill.pdf", document_hash="hash", asset_dir="example-bill", ) root_dir = tmp_path / bill.asset_dir root_dir.mkdir(parents=True) (root_dir / "analysis.json").write_text(json.dumps({"executive_summary": "Summary"}), encoding="utf-8") (root_dir / "document.txt").write_text("Document text", encoding="utf-8") (root_dir / "chunks.json").write_text(json.dumps(["Chunk one", "Chunk two"]), encoding="utf-8") asset = load_precomputed_asset(bill) assert asset is not None built_chunks: list[list[str]] = [] monkeypatch.setattr("services.rag_pipeline.build_vector_store", lambda chunks: built_chunks.append(list(chunks)) or object()) artifacts = hydrate_precomputed_example(asset) assert built_chunks == [["Chunk one", "Chunk two"]] assert artifacts.vector_store is not None assert artifacts.document_text == "Document text"