Merge pull request 'Batch Paperless chunk embeddings during indexing' (#73) from perf/batch-paperless-embeddings into main
This commit was merged in pull request #73.
This commit is contained in:
+20
-7
@@ -67,6 +67,9 @@ def _get_engine():
|
||||
return _get_engine._engine
|
||||
|
||||
|
||||
# Chunks per embedding request when indexing Paperless documents.
|
||||
EMBED_BATCH_SIZE = 32
|
||||
|
||||
text_splitter = RecursiveCharacterTextSplitter(
|
||||
chunk_size=1000, # chunk size (characters)
|
||||
chunk_overlap=200, # chunk overlap (characters)
|
||||
@@ -200,15 +203,25 @@ async def index_documents():
|
||||
splits = _sanitize_documents(splits)
|
||||
logger.info(f"Indexing {len(splits)} chunks from {len(documents)} documents")
|
||||
vector_store = _get_vector_store()
|
||||
for i, split in enumerate(splits):
|
||||
for start in range(0, len(splits), EMBED_BATCH_SIZE):
|
||||
batch = splits[start : start + EMBED_BATCH_SIZE]
|
||||
try:
|
||||
await vector_store.aadd_documents(documents=[split])
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Failed to embed chunk {i} from {split.metadata.get('filename', 'unknown')}: {e}"
|
||||
await vector_store.aadd_documents(documents=batch)
|
||||
except Exception as batch_error:
|
||||
# Embedding fails before anything is inserted; retry the batch one
|
||||
# chunk at a time to name the chunk the embedding server rejects.
|
||||
logger.warning(
|
||||
f"Batch of {len(batch)} chunks failed ({batch_error}); retrying one at a time"
|
||||
)
|
||||
logger.debug(f"Chunk content preview: {split.page_content[:200]!r}")
|
||||
raise
|
||||
for i, split in enumerate(batch, start):
|
||||
try:
|
||||
await vector_store.aadd_documents(documents=[split])
|
||||
except Exception as e:
|
||||
logger.error(
|
||||
f"Failed to embed chunk {i} from {split.metadata.get('filename', 'unknown')}: {e}"
|
||||
)
|
||||
logger.debug(f"Chunk content preview: {split.page_content[:200]!r}")
|
||||
raise
|
||||
|
||||
|
||||
async def fetch_obsidian_documents() -> list[Document]:
|
||||
|
||||
Reference in New Issue
Block a user