File size: 1,398 Bytes
5dcfc5c | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | from pathlib import Path
from figment.retrieval import search_protocol_cards
from scripts.build_fts import build_index
PROJECT_ROOT = Path(__file__).resolve().parents[1]
CARD_DIR = PROJECT_ROOT / "data" / "protocol_cards"
def test_builds_temp_fts_index_and_retrieves_relevant_cards_with_bm25(tmp_path: Path) -> None:
index_path = tmp_path / "protocol_cards.sqlite"
indexed_count = build_index(card_dir=str(CARD_DIR), index_path=str(index_path))
assert indexed_count == 10
results = search_protocol_cards(
"child lethargy sunken eyes unable to keep fluids down no urine",
card_dir=CARD_DIR,
index_path=index_path,
limit=3,
)
assert [result["source"] for result in results] == ["sqlite_fts"] * len(results)
assert results[0]["card_id"] == "PED-DEHYD-RED-FLAGS-v1"
assert [result["score"] for result in results] == sorted(
(result["score"] for result in results),
reverse=True,
)
def test_search_uses_json_fallback_when_fts_index_is_absent(tmp_path: Path) -> None:
results = search_protocol_cards(
"spreading redness fever wound drainage",
card_dir=CARD_DIR,
index_path=tmp_path / "missing.sqlite",
limit=3,
)
assert [result["source"] for result in results] == ["json_fallback"] * len(results)
assert results[0]["card_id"] == "WOUND-INFECTION-ESCALATION-v1"
|