Spaces:
Paused
Paused
| from __future__ import annotations | |
| import pytest | |
| from auralynq.embeddings import get_embedder | |
| from auralynq.ingest.models import Chunk, SourceType | |
| from auralynq.retrieval.pathrag.builder import build_from_chunks | |
| from auralynq.retrieval.pathrag.retriever import PathRAGRetriever | |
| from auralynq.vectorstore.memory_store import MemoryStore | |
| def graph_and_store(tmp_path): | |
| chunks = [ | |
| Chunk( | |
| id="c0", | |
| doc_id="d", | |
| ordinal=0, | |
| source="geo.txt", | |
| source_type=SourceType.text, | |
| text="Paris is the capital of France. France is located in Europe.", | |
| ), | |
| Chunk( | |
| id="c1", | |
| doc_id="d", | |
| ordinal=1, | |
| source="geo2.txt", | |
| source_type=SourceType.text, | |
| text="France is located in Europe. Europe contains many countries.", | |
| ), | |
| Chunk( | |
| id="c2", | |
| doc_id="d", | |
| ordinal=2, | |
| source="geo3.txt", | |
| source_type=SourceType.text, | |
| text="The Seine flows through Paris.", | |
| ), | |
| ] | |
| kg = build_from_chunks(chunks) | |
| emb = get_embedder() | |
| store = MemoryStore(path=tmp_path / "ms") | |
| store.upsert(chunks, emb.embed([c.text for c in chunks])) | |
| return kg, store | |
| def test_seed_entities_found(graph_and_store): | |
| kg, store = graph_and_store | |
| r = PathRAGRetriever(kg, store=store) | |
| seeds = r.seed_entities("Tell me about Paris and France") | |
| assert seeds | |
| def test_pathrag_returns_paths_and_chunks(graph_and_store): | |
| kg, store = graph_and_store | |
| r = PathRAGRetriever(kg, store=store, max_hops=3) | |
| res = r.retrieve("How is Paris connected to Europe through France?", k=5) | |
| assert res.method == "pathrag" | |
| assert res.metadata["seeds"] | |
| assert res.metadata["paths"], "expected at least one relational path" | |
| # Paths should be reliability-scored and rendered to text. | |
| first = res.metadata["paths"][0] | |
| assert "reliability" in first and first["text"] | |
| def test_pathrag_flow_pruning_bounds_paths(graph_and_store): | |
| kg, store = graph_and_store | |
| r = PathRAGRetriever(kg, store=store, max_paths=2) | |
| res = r.retrieve("Paris France Europe relationship", k=5) | |
| assert len(res.metadata["paths"]) <= 2 | |
| def test_pathrag_empty_graph_is_safe(tmp_path): | |
| from auralynq.retrieval.pathrag.graph import KnowledgeGraph | |
| r = PathRAGRetriever(KnowledgeGraph(), store=MemoryStore(path=tmp_path / "ms")) | |
| res = r.retrieve("anything at all", k=5) | |
| assert res.chunks == [] | |
| assert res.metadata["paths"] == [] | |