pridanie topn testov query evidence
This commit is contained in:
parent
1ba9293db7
commit
6080d001b5
163
test/test_rag_query_evidence_topn.py
Normal file
163
test/test_rag_query_evidence_topn.py
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
import sqlite3
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
|
from scripts.rag_query_evidence import (
|
||||||
|
expand_results_with_query_evidence,
|
||||||
|
find_top_query_evidence_chunks,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def create_db(tmp_path: Path) -> Path:
|
||||||
|
db = tmp_path / "evidence.sqlite"
|
||||||
|
|
||||||
|
with sqlite3.connect(db) as conn:
|
||||||
|
conn.execute(
|
||||||
|
"""
|
||||||
|
CREATE TABLE chunks (
|
||||||
|
id INTEGER PRIMARY KEY,
|
||||||
|
chunk_id TEXT,
|
||||||
|
document_path TEXT,
|
||||||
|
title TEXT,
|
||||||
|
author TEXT,
|
||||||
|
published INTEGER,
|
||||||
|
chunk_index INTEGER,
|
||||||
|
heading_paths_json TEXT,
|
||||||
|
text TEXT
|
||||||
|
)
|
||||||
|
"""
|
||||||
|
)
|
||||||
|
|
||||||
|
return db
|
||||||
|
|
||||||
|
|
||||||
|
def insert_chunk(
|
||||||
|
db: Path,
|
||||||
|
*,
|
||||||
|
index: int,
|
||||||
|
text: str,
|
||||||
|
published: bool = True,
|
||||||
|
) -> None:
|
||||||
|
path = "pages/students/2022/jan_ptak/README.md"
|
||||||
|
|
||||||
|
with sqlite3.connect(db) as conn:
|
||||||
|
conn.execute(
|
||||||
|
"""
|
||||||
|
INSERT INTO chunks(
|
||||||
|
chunk_id,
|
||||||
|
document_path,
|
||||||
|
title,
|
||||||
|
author,
|
||||||
|
published,
|
||||||
|
chunk_index,
|
||||||
|
heading_paths_json,
|
||||||
|
text
|
||||||
|
) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
||||||
|
""",
|
||||||
|
(
|
||||||
|
f"{path}::chunk-{index}",
|
||||||
|
path,
|
||||||
|
"Ján Pták",
|
||||||
|
"Daniel Hladek",
|
||||||
|
1 if published else 0,
|
||||||
|
index,
|
||||||
|
"[]",
|
||||||
|
text,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_top_evidence_returns_more_than_one_relevant_chunk(tmp_path: Path) -> None:
|
||||||
|
db = create_db(tmp_path)
|
||||||
|
insert_chunk(
|
||||||
|
db,
|
||||||
|
index=0,
|
||||||
|
text="Ján Pták. Stav: databáza SQLite.",
|
||||||
|
)
|
||||||
|
insert_chunk(
|
||||||
|
db,
|
||||||
|
index=1,
|
||||||
|
text="Ján Pták. Backend systému je FastAPI.",
|
||||||
|
)
|
||||||
|
insert_chunk(
|
||||||
|
db,
|
||||||
|
index=2,
|
||||||
|
text="Ján Pták. Nesúvisiaci text o prezentácii.",
|
||||||
|
)
|
||||||
|
|
||||||
|
with sqlite3.connect(db) as conn:
|
||||||
|
conn.row_factory = sqlite3.Row
|
||||||
|
chunks = find_top_query_evidence_chunks(
|
||||||
|
conn,
|
||||||
|
"pages/students/2022/jan_ptak/README.md",
|
||||||
|
"Ján Pták databáza backend",
|
||||||
|
published_only=True,
|
||||||
|
top_k=3,
|
||||||
|
)
|
||||||
|
|
||||||
|
combined = "\n".join(
|
||||||
|
str(item.get("focus_text") or "")
|
||||||
|
for item in chunks
|
||||||
|
)
|
||||||
|
|
||||||
|
assert "SQLite" in combined
|
||||||
|
assert "FastAPI" in combined
|
||||||
|
assert len(chunks) >= 2
|
||||||
|
|
||||||
|
|
||||||
|
def test_expansion_exposes_evidence_blocks_and_legacy_fields(tmp_path: Path) -> None:
|
||||||
|
db = create_db(tmp_path)
|
||||||
|
insert_chunk(
|
||||||
|
db,
|
||||||
|
index=0,
|
||||||
|
text="Matej Ščišľak vytvoril 110 otázok na testovanie systému.",
|
||||||
|
)
|
||||||
|
path = "pages/students/2022/jan_ptak/README.md"
|
||||||
|
base = [
|
||||||
|
{
|
||||||
|
"chunk_id": f"{path}::chunk-9",
|
||||||
|
"document_path": path,
|
||||||
|
"title": "Ján Pták",
|
||||||
|
"author": "Daniel Hladek",
|
||||||
|
"published": True,
|
||||||
|
"chunk_index": 9,
|
||||||
|
"heading_paths": [],
|
||||||
|
"text": "menej relevantný text",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
result = expand_results_with_query_evidence(
|
||||||
|
db,
|
||||||
|
"Matej Ščišľak 110 otázok testovanie systému",
|
||||||
|
base,
|
||||||
|
published_only=True,
|
||||||
|
)
|
||||||
|
|
||||||
|
item = result[0]
|
||||||
|
assert item["query_evidence_blocks"]
|
||||||
|
assert "110" in item["query_focus_text"]
|
||||||
|
assert item["query_evidence"]["applied"] is True
|
||||||
|
assert item["query_evidence"]["evidence_chunks"]
|
||||||
|
|
||||||
|
|
||||||
|
def test_published_only_excludes_unpublished_evidence(tmp_path: Path) -> None:
|
||||||
|
db = create_db(tmp_path)
|
||||||
|
insert_chunk(
|
||||||
|
db,
|
||||||
|
index=0,
|
||||||
|
text="Ján Pták databáza SQLite backend FastAPI.",
|
||||||
|
published=False,
|
||||||
|
)
|
||||||
|
|
||||||
|
with sqlite3.connect(db) as conn:
|
||||||
|
conn.row_factory = sqlite3.Row
|
||||||
|
chunks = find_top_query_evidence_chunks(
|
||||||
|
conn,
|
||||||
|
"pages/students/2022/jan_ptak/README.md",
|
||||||
|
"Ján Pták databáza backend",
|
||||||
|
published_only=True,
|
||||||
|
top_k=3,
|
||||||
|
)
|
||||||
|
|
||||||
|
assert chunks == []
|
||||||
Loading…
Reference in New Issue
Block a user