fix: add IndexError guard and error handling test
This commit is contained in:
@@ -67,7 +67,12 @@ class SearchEngine:
|
|||||||
k = top_k or self.default_top_k
|
k = top_k or self.default_top_k
|
||||||
|
|
||||||
try:
|
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:
|
except RuntimeError as e:
|
||||||
raise RuntimeError(f"Failed to generate embedding for query: {e}") from e
|
raise RuntimeError(f"Failed to generate embedding for query: {e}") from e
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,8 @@ import tempfile
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from unittest.mock import MagicMock, patch
|
from unittest.mock import MagicMock, patch
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
from companion.rag.search import SearchEngine
|
from companion.rag.search import SearchEngine
|
||||||
from companion.rag.vector_store import VectorStore
|
from companion.rag.vector_store import VectorStore
|
||||||
|
|
||||||
@@ -32,3 +34,24 @@ def test_search_returns_results(mock_embedder_cls):
|
|||||||
results = engine.search("hello")
|
results = engine.search("hello")
|
||||||
assert len(results) == 1
|
assert len(results) == 1
|
||||||
assert results[0]["source_file"] == "a.md"
|
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")
|
||||||
|
|||||||
Reference in New Issue
Block a user