From 61a38fc0a92b8e536b86faef549d9a4aaf3b2455 Mon Sep 17 00:00:00 2001 From: Yiorgis Gozadinos Date: Fri, 27 Mar 2026 11:49:51 +0200 Subject: [PATCH] Coverage for skill extras --- pyproject.toml | 1 - tests/skills/test_rag.py | 49 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index a07282a8..acf0d379 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -64,7 +64,6 @@ members = ["haiku_rag_slim", "evaluations"] "haiku.rag-slim" = { workspace = true } "haiku.rag-evals" = { workspace = true } - [dependency-groups] dev = [ "haiku.rag-evals", diff --git a/tests/skills/test_rag.py b/tests/skills/test_rag.py index a66a4096..8cd49a8c 100644 --- a/tests/skills/test_rag.py +++ b/tests/skills/test_rag.py @@ -98,6 +98,55 @@ class TestRAGSkillCreation: assert skill.metadata.name == "rag" +class TestSkillExtras: + async def test_list_documents_returns_all(self, rag_db): + from haiku.rag.skills.rag import create_skill + + skill = create_skill(db_path=rag_db) + list_docs = skill.extras["list_documents"] + results = await list_docs() + assert len(results) == 2 + assert all(k in results[0] for k in ("id", "title", "uri", "metadata")) + + async def test_list_documents_with_filter(self, rag_db): + from haiku.rag.skills.rag import create_skill + + skill = create_skill(db_path=rag_db) + list_docs = skill.extras["list_documents"] + results = await list_docs(filter="title = 'AI Overview'") + assert len(results) == 1 + assert results[0]["title"] == "AI Overview" + + async def test_visualize_chunk_unknown_returns_empty(self, rag_db): + from haiku.rag.skills.rag import create_skill + + skill = create_skill(db_path=rag_db) + visualize = skill.extras["visualize_chunk"] + result = await visualize("nonexistent-chunk-id") + assert result == [] + + async def test_visualize_chunk_returns_images(self, rag_db, monkeypatch): + from haiku.rag.client import HaikuRAG + from haiku.rag.skills.rag import create_skill + + monkeypatch.setattr( + HaikuRAG, "visualize_chunk", AsyncMock(return_value=["img1"]) + ) + + skill = create_skill(db_path=rag_db) + visualize = skill.extras["visualize_chunk"] + + # Get a real chunk_id from the db + async with HaikuRAG(rag_db, read_only=True) as rag: + docs = await rag.list_documents() + doc = await rag.get_document_by_id(docs[0].id) + chunks = await rag.chunk_repository.get_by_document_id(doc.id) + chunk_id = str(chunks[0].id) + + result = await visualize(chunk_id) + assert result == ["img1"] + + class TestSearchTool: async def test_search_returns_formatted_string(self, rag_db): from haiku.rag.skills.rag import create_skill