Minor fixes

This commit is contained in:
Yiorgis Gozadinos 2026-04-08 12:53:09 +03:00
parent 9c5bef163e
commit 3fe953eccb
No known key found for this signature in database
4 changed files with 64 additions and 9 deletions

View file

@ -1,6 +1,6 @@
import json
try:
try: # pragma: no cover
from compression.zstd import ( # ty: ignore[unresolved-import]
compress as _zstd_compress, # type: ignore[import-not-found]
)

View file

@ -15,13 +15,11 @@ _docling_document_cache: LRUCache[str, "DoclingDocument"] = LRUCache(maxsize=100
def _validate_without_pages(compressed_data: bytes) -> "DoclingDocument":
"""Decompress and validate DoclingDocument, stripping page images."""
"""Decompress and validate DoclingDocument."""
from docling_core.types.doc.document import DoclingDocument
json_str = decompress_json(compressed_data)
data = json.loads(json_str)
data.pop("pages", None)
return DoclingDocument.model_validate(data)
return DoclingDocument.model_validate_json(json_str)
def _get_cached_docling_document(

View file

@ -106,7 +106,7 @@ def _apply_split_pages_zstd(store: Store) -> None: # pragma: no cover
.to_arrow()
.to_pylist()
]
except Exception:
except (pa.ArrowInvalid, pa.ArrowNotImplementedError, OSError):
ids = []
if not ids:
@ -132,7 +132,7 @@ def _apply_split_pages_zstd(store: Store) -> None: # pragma: no cover
range(0, len(staging_ids), BATCH_SIZE), 1
):
batch_ids = staging_ids[i : i + BATCH_SIZE]
id_list = ", ".join(f"'{id}'" for id in batch_ids)
id_list = ", ".join(f"'{doc_id}'" for doc_id in batch_ids)
batch = (
staging_table.search()
.where(f"id IN ({id_list})")
@ -174,7 +174,7 @@ def _apply_split_pages_zstd(store: Store) -> None: # pragma: no cover
for batch_num, i in enumerate(range(0, len(ids), BATCH_SIZE), 1):
batch_ids = ids[i : i + BATCH_SIZE]
id_list = ", ".join(f"'{id}'" for id in batch_ids)
id_list = ", ".join(f"'{doc_id}'" for doc_id in batch_ids)
batch = (
store.documents_table.search()
@ -212,7 +212,7 @@ def _apply_split_pages_zstd(store: Store) -> None: # pragma: no cover
for batch_num, i in enumerate(range(0, len(staging_ids), BATCH_SIZE), 1):
batch_ids = staging_ids[i : i + BATCH_SIZE]
id_list = ", ".join(f"'{id}'" for id in batch_ids)
id_list = ", ".join(f"'{doc_id}'" for doc_id in batch_ids)
batch = (
staging_table.search().where(f"id IN ({id_list})").to_arrow().to_pylist()

View file

@ -367,6 +367,63 @@ async def test_get_docling_data_loads_only_docling_columns(
store.close()
@pytest.mark.asyncio
async def test_get_pages_data_loads_only_pages_column(qa_corpus: Dataset, temp_db_path):
"""get_pages_data returns only page image data for a document."""
import json
from haiku.rag.store.compression import compress_json
pages_blob = compress_json(
json.dumps({"1": {"size": {"width": 612, "height": 792}, "page_no": 1}})
)
store = Store(temp_db_path, create=True)
doc_repo = DocumentRepository(store)
doc = Document(
content=qa_corpus[0]["document_extracted"],
uri="https://example.com/doc.txt",
docling_pages=pages_blob,
)
created = await doc_repo.create(doc)
assert created.id is not None
result = await doc_repo.get_pages_data(created.id)
assert result is not None
assert result.id == created.id
assert result.content == ""
assert result.docling_pages == pages_blob
# Non-existent ID returns None
assert await doc_repo.get_pages_data("nonexistent-id") is None
store.close()
@pytest.mark.asyncio
async def test_get_pages_data_none_for_markdown_document(
qa_corpus: Dataset, temp_db_path
):
"""Markdown documents have no page images — get_pages_data returns None pages."""
store = Store(temp_db_path, create=True)
doc_repo = DocumentRepository(store)
doc = Document(
content=qa_corpus[0]["document_extracted"],
uri="https://example.com/doc.md",
)
created = await doc_repo.create(doc)
assert created.id is not None
result = await doc_repo.get_pages_data(created.id)
assert result is not None
assert result.id == created.id
assert result.docling_pages is None
store.close()
@pytest.mark.asyncio
async def test_document_get_by_uri_with_special_characters(
qa_corpus: Dataset, temp_db_path