From b5cb2852c40b361f9c4bba848c0edbfc78da63b2 Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Thu, 26 Feb 2026 10:56:28 +0200 Subject: [PATCH] Simplify _resolve_title() --- haiku_rag_slim/haiku/rag/client.py | 29 ++++++++++++----------------- tests/test_title_generation.py | 16 +++------------- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/haiku_rag_slim/haiku/rag/client.py b/haiku_rag_slim/haiku/rag/client.py index 1a6d5069..c05f40a8 100644 --- a/haiku_rag_slim/haiku/rag/client.py +++ b/haiku_rag_slim/haiku/rag/client.py @@ -310,20 +310,13 @@ class HaikuRAG: async def _resolve_title( self, - title: str | None, docling_document: "DoclingDocument", content: str, ) -> str | None: - """Resolve the title for a document. + """Auto-generate a title from document structure or LLM. - 1. Explicit title always wins. - 2. If auto_title is disabled, return None. - 3. Try structural extraction from docling metadata. - 4. Fall back to LLM generation. + Returns None if auto_title is disabled or generation fails. """ - if title is not None: - return title - if not self._config.processing.auto_title: return None @@ -493,7 +486,8 @@ class HaikuRAG: # The original content is preserved in docling_document stored_content = docling_document.export_to_markdown() - title = await self._resolve_title(title, docling_document, stored_content) + if title is None: + title = await self._resolve_title(docling_document, stored_content) # Create document model document = Document( @@ -533,7 +527,8 @@ class HaikuRAG: The created Document instance. """ content = docling_document.export_to_markdown() - title = await self._resolve_title(title, docling_document, content) + if title is None: + title = await self._resolve_title(docling_document, content) document = Document( content=content, @@ -685,14 +680,15 @@ class HaikuRAG: existing_doc.title = title elif existing_doc.title is None: existing_doc.title = await self._resolve_title( - None, docling_document, stored_content + docling_document, stored_content ) return await self._update_document_with_chunks( existing_doc, embedded_chunks ) else: # Create new document - title = await self._resolve_title(title, docling_document, stored_content) + if title is None: + title = await self._resolve_title(docling_document, stored_content) document = Document( content=stored_content, uri=uri, @@ -801,16 +797,15 @@ class HaikuRAG: existing_doc.title = title elif existing_doc.title is None: existing_doc.title = await self._resolve_title( - None, docling_document, stored_content + docling_document, stored_content ) return await self._update_document_with_chunks( existing_doc, embedded_chunks ) else: # Create new document - title = await self._resolve_title( - title, docling_document, stored_content - ) + if title is None: + title = await self._resolve_title(docling_document, stored_content) document = Document( content=stored_content, uri=url, diff --git a/tests/test_title_generation.py b/tests/test_title_generation.py index d239d283..7411c674 100644 --- a/tests/test_title_generation.py +++ b/tests/test_title_generation.py @@ -143,16 +143,6 @@ class TestResolveTitle: config = AppConfig(processing=ProcessingConfig(auto_title=auto_title)) return HaikuRAG(tmp_path / "test.lancedb", config=config, create=True) - @pytest.mark.asyncio - async def test_explicit_title_always_wins(self, tmp_path): - """Caller-supplied title is never overridden.""" - doc = DoclingDocument(name="test") - doc.add_text(label=DocItemLabel.TITLE, text="Structural Title") - - client = self._make_client(tmp_path) - result = await client._resolve_title("My Explicit Title", doc, "some content") - assert result == "My Explicit Title" - @pytest.mark.asyncio async def test_auto_title_disabled_returns_none(self, tmp_path): """When auto_title is False, returns None (no title generation).""" @@ -160,7 +150,7 @@ class TestResolveTitle: doc.add_text(label=DocItemLabel.TITLE, text="Structural Title") client = self._make_client(tmp_path, auto_title=False) - result = await client._resolve_title(None, doc, "some content") + result = await client._resolve_title(doc, "some content") assert result is None @pytest.mark.asyncio @@ -170,7 +160,7 @@ class TestResolveTitle: doc.add_text(label=DocItemLabel.TITLE, text="Auto Extracted Title") client = self._make_client(tmp_path) - result = await client._resolve_title(None, doc, "some content") + result = await client._resolve_title(doc, "some content") assert result == "Auto Extracted Title" @pytest.mark.asyncio @@ -185,7 +175,7 @@ class TestResolveTitle: raise RuntimeError("LLM is down") monkeypatch.setattr(HaikuRAG, "_generate_title_with_llm", exploding_llm) - result = await client._resolve_title(None, doc, "some content") + result = await client._resolve_title(doc, "some content") assert result is None