From d0a201476e11167b03a46e835785058f238e3c2d Mon Sep 17 00:00:00 2001 From: Santhosh Janardhanan Date: Mon, 13 Apr 2026 14:33:26 -0400 Subject: [PATCH] fix: add IndexError guard and error handling test --- src/companion/rag/search.py | 7 ++++++- tests/test_search.py | 23 +++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/companion/rag/search.py b/src/companion/rag/search.py index dd21d6e..598ceb1 100644 --- a/src/companion/rag/search.py +++ b/src/companion/rag/search.py @@ -67,7 +67,12 @@ class SearchEngine: k = top_k or self.default_top_k try: - query_embedding = self.embedder.embed([query])[0] + embeddings = self.embedder.embed([query]) + if not embeddings: + raise RuntimeError( + "Failed to generate embedding for query: embedder returned empty result" + ) + query_embedding = embeddings[0] except RuntimeError as e: raise RuntimeError(f"Failed to generate embedding for query: {e}") from e diff --git a/tests/test_search.py b/tests/test_search.py index f86bf03..6812c4a 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -2,6 +2,8 @@ import tempfile from pathlib import Path from unittest.mock import MagicMock, patch +import pytest + from companion.rag.search import SearchEngine from companion.rag.vector_store import VectorStore @@ -32,3 +34,24 @@ def test_search_returns_results(mock_embedder_cls): results = engine.search("hello") assert len(results) == 1 assert results[0]["source_file"] == "a.md" + + +@patch("companion.rag.search.OllamaEmbedder") +def test_search_raises_on_embedder_failure(mock_embedder_cls): + mock_embedder = MagicMock() + mock_embedder.embed.side_effect = RuntimeError("Connection failed") + mock_embedder_cls.return_value = mock_embedder + + with tempfile.TemporaryDirectory() as tmp: + store = VectorStore(uri=tmp, dimensions=4) + engine = SearchEngine( + vector_store=store, + embedder_base_url="http://localhost:11434", + embedder_model="dummy", + embedder_batch_size=32, + default_top_k=5, + similarity_threshold=0.0, + hybrid_search_enabled=False, + ) + with pytest.raises(RuntimeError, match="Failed to generate embedding"): + engine.search("hello")