From 589776ab3fd0e897348b5d70e4b7b9e8666207d1 Mon Sep 17 00:00:00 2001 From: Stable Genius Date: Sat, 21 Mar 2026 05:56:13 -0700 Subject: [PATCH] fix: skip empty knowledge-base embedding batches (#6106) Co-authored-by: stablegenius49 <185121704+stablegenius49@users.noreply.github.com> --- astrbot/core/db/vec_db/faiss_impl/vec_db.py | 4 ++++ tests/unit/test_faiss_vec_db.py | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) create mode 100644 tests/unit/test_faiss_vec_db.py 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 3fca246ef..f1b89768e 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 @@ class FaissVecDB(BaseVecDB): 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 000000000..ca297886f --- /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()