legislation-explainer / services /precomputed_assets.py
KayO's picture
Rebuild precomputed retrieval without vector indexes
6d78ee1
Raw
History Blame Contribute Delete
2.02 kB
"""Helpers for bundled example-bill analysis assets."""
from __future__ import annotations
import json
from dataclasses import dataclass
from pathlib import Path
from typing import Any
from services.example_bills import ExampleBill, example_bill_by_url
@dataclass(frozen=True)
class PrecomputedExampleAsset:
bill: ExampleBill
analysis_payload: dict[str, Any]
document_text: str
chunks: list[str]
metadata: dict[str, Any]
def load_precomputed_asset_for_url(url: str | None) -> PrecomputedExampleAsset | None:
bill = example_bill_by_url(url)
if bill is None:
return None
return load_precomputed_asset(bill)
def load_precomputed_asset(bill: ExampleBill) -> PrecomputedExampleAsset | None:
if not bill.analysis_path.exists():
return None
if not bill.document_path.exists():
return None
if not bill.chunks_path.exists():
return None
analysis_payload = json.loads(bill.analysis_path.read_text(encoding="utf-8"))
document_text = bill.document_path.read_text(encoding="utf-8")
chunks = json.loads(bill.chunks_path.read_text(encoding="utf-8"))
metadata = {}
if bill.metadata_path.exists():
metadata = json.loads(bill.metadata_path.read_text(encoding="utf-8"))
return PrecomputedExampleAsset(
bill=bill,
analysis_payload=analysis_payload,
document_text=document_text,
chunks=chunks,
metadata=metadata,
)
def write_precomputed_asset(
bill: ExampleBill,
*,
analysis_payload: dict[str, Any],
document_text: str,
chunks: list[str],
metadata: dict[str, Any],
) -> None:
bill.root_dir.mkdir(parents=True, exist_ok=True)
bill.analysis_path.write_text(json.dumps(analysis_payload, indent=2), encoding="utf-8")
bill.document_path.write_text(document_text, encoding="utf-8")
bill.chunks_path.write_text(json.dumps(chunks, indent=2), encoding="utf-8")
bill.metadata_path.write_text(json.dumps(metadata, indent=2), encoding="utf-8")