Spaces:
Running
Running
| """Tests for the inference gateway. These exercise citation parsing and | |
| backend routing without loading any model — the mock backend is enough. | |
| """ | |
| import os | |
| from datetime import datetime | |
| import pytest | |
| import recap.inference.gateway as gw | |
| from recap.models import Event | |
| def _ev(src, date_iso="2022-03-14"): | |
| return Event( | |
| id=src, | |
| date=datetime.fromisoformat(date_iso), | |
| category="lab", | |
| title=f"Record from {src}", | |
| source=src, | |
| ) | |
| def test_parses_citations_from_model_output(): | |
| text = ( | |
| "Creatinine first crossed normal in March 2022 [src:lab_2022.pdf#p1]. " | |
| "eGFR was 52 [src:lab_2022.pdf]." | |
| ) | |
| cites = gw._parse_citations(text, [_ev("lab_2022.pdf")]) | |
| assert len(cites) == 2 | |
| assert cites[0].page == 1 | |
| assert cites[1].page is None | |
| def test_dedupes_repeated_citations(): | |
| text = "[src:a.pdf] said X [src:a.pdf]" | |
| cites = gw._parse_citations(text, [_ev("a.pdf")]) | |
| assert len(cites) == 1 | |
| def test_drops_citations_to_unknown_sources(): | |
| text = "[src:hallucinated.pdf]" | |
| cites = gw._parse_citations(text, []) | |
| assert cites == [] | |
| def test_dedupe_treats_different_pages_as_different_citations(): | |
| text = "[src:a.pdf#p1] earlier [src:a.pdf#p2] later" | |
| cites = gw._parse_citations(text, [_ev("a.pdf")]) | |
| assert len(cites) == 2 | |
| assert {c.page for c in cites} == {1, 2} | |
| def test_answer_end_to_end_with_mock_backend(monkeypatch): | |
| """Full pipeline: question -> retrieve -> mock -> cited answer.""" | |
| monkeypatch.setenv("RECAP_BACKEND", "mock") | |
| events = [ | |
| _ev("lab_2022.pdf", "2022-03-14"), | |
| _ev("visit_2023.pdf", "2023-01-01"), | |
| ] | |
| a = gw.answer("when did the lab change", events) | |
| assert "[mock answer]" in a.text | |
| assert any(c.source_id in {"lab_2022.pdf", "visit_2023.pdf"} for c in a.citations) | |