diff --git a/astrbot/core/db/vec_db/faiss_impl/vec_db.py b/astrbot/core/db/vec_db/faiss_impl/vec_db.py index 3fca246ef5..f1b89768e9 100644 --- a/astrbot/core/db/vec_db/faiss_impl/vec_db.py +++ b/astrbot/core/db/vec_db/faiss_impl/vec_db.py @@ -74,6 +74,10 @@ async def insert_batch( metadatas = metadatas or [{} for _ in contents] ids = ids or [str(uuid.uuid4()) for _ in contents] + if not contents: + logger.debug("No contents provided for batch insert; skipping embedding generation.") + return [] + start = time.time() logger.debug(f"Generating embeddings for {len(contents)} contents...") vectors = await self.embedding_provider.get_embeddings_batch( diff --git a/tests/unit/test_faiss_vec_db.py b/tests/unit/test_faiss_vec_db.py new file mode 100644 index 0000000000..ca297886f1 --- /dev/null +++ b/tests/unit/test_faiss_vec_db.py @@ -0,0 +1,20 @@ +from unittest.mock import AsyncMock + +import pytest + +from astrbot.core.db.vec_db.faiss_impl.vec_db import FaissVecDB + + +@pytest.mark.asyncio +async def test_insert_batch_skips_empty_contents() -> None: + vec_db = FaissVecDB.__new__(FaissVecDB) + vec_db.embedding_provider = AsyncMock() + vec_db.document_storage = AsyncMock() + vec_db.embedding_storage = AsyncMock() + + result = await FaissVecDB.insert_batch(vec_db, []) + + assert result == [] + vec_db.embedding_provider.get_embeddings_batch.assert_not_awaited() + vec_db.document_storage.insert_documents_batch.assert_not_awaited() + vec_db.embedding_storage.insert_batch.assert_not_awaited()