Spaces:
Running
Running
| """One-off: generate D8 from SP memory + write retrieval manifest.""" | |
| from __future__ import annotations | |
| import json | |
| import sys | |
| from pathlib import Path | |
| _ROOT = Path(__file__).resolve().parents[1] | |
| if str(_ROOT) not in sys.path: | |
| sys.path.insert(0, str(_ROOT)) | |
| from backend.pipeline import section_mapper | |
| from backend.rag.types import KNOWLEDGE_SOURCE_STANDARD_PARAGRAPH | |
| from backend.storage import retrieval_manifest | |
| TENANT = "khanchaudhry3@gmail.com" | |
| DRAFT_ID = "sp-d8-test-20260729" | |
| SECTION_ID = "D8" | |
| NOTES = """D8 Other joinery and finishes | |
| Surface rust/deterioration to timber boards. | |
| """ | |
| def main() -> int: | |
| print("tenant=", TENANT) | |
| print("draft=", DRAFT_ID) | |
| print("section=", SECTION_ID) | |
| result = section_mapper.generate_report( | |
| TENANT, | |
| NOTES, | |
| property_type="terraced house", | |
| tenure="freehold", | |
| interference_level="assist", | |
| survey_level=3, | |
| report_draft_id=DRAFT_ID, | |
| only_section_ids=[SECTION_ID], | |
| knowledge_source=KNOWLEDGE_SOURCE_STANDARD_PARAGRAPH, | |
| ) | |
| sec_out = next( | |
| (s for s in result.sections if s.section_id.upper() == SECTION_ID), None | |
| ) | |
| print(f"\n=== {SECTION_ID} STATUS ===") | |
| if not sec_out: | |
| print(f"{SECTION_ID} missing; sections=", [s.section_id for s in result.sections]) | |
| return 1 | |
| print("status=", sec_out.status) | |
| print("text=\n", sec_out.text) | |
| path = retrieval_manifest.retrieval_manifest_path(TENANT, DRAFT_ID) | |
| print("\n=== RETRIEVAL MANIFEST ===") | |
| print("path=", path) | |
| if not path.is_file(): | |
| print("manifest missing") | |
| return 2 | |
| data = json.loads(path.read_text(encoding="utf-8")) | |
| sec = (data.get("sections") or {}).get(SECTION_ID) or {} | |
| print("status=", sec.get("status")) | |
| print("retrieved_chunk_count=", sec.get("retrieved_chunk_count")) | |
| print("generated_text=\n", (sec.get("generated_text") or "")[:800]) | |
| print("\n--- retrieved labels/scores ---") | |
| for i, ch in enumerate(sec.get("chunks_used") or [], 1): | |
| print( | |
| f"{i}. cosine={ch.get('score')} fusion={ch.get('fusion_score')} " | |
| f"text={(ch.get('chunk_text') or '')[:120]!r}" | |
| ) | |
| out = ( | |
| _ROOT | |
| / "backend" | |
| / "standard_paragraphs" | |
| / "samples" | |
| / "d8_sp_generation_test_retrieval.json" | |
| ) | |
| out.write_text(json.dumps(data, indent=2, ensure_ascii=False), encoding="utf-8") | |
| print("\ncopied=", out) | |
| return 0 | |
| if __name__ == "__main__": | |
| raise SystemExit(main()) | |