From 757d745b5d262975c05f5fe3bb3f410f5c3d72b7 Mon Sep 17 00:00:00 2001 From: Igor Ilic Date: Fri, 10 Oct 2025 17:12:09 +0200 Subject: [PATCH] refactor: Optimize cognification speed --- cognee/api/v1/cognify/cognify.py | 4 ++-- .../databases/vector/embeddings/config.py | 4 ++-- cognee/tasks/storage/index_graph_edges.py | 15 +++++++++++---- 3 files changed, 15 insertions(+), 8 deletions(-) diff --git a/cognee/api/v1/cognify/cognify.py b/cognee/api/v1/cognify/cognify.py index 6a9f68443..30afb269a 100644 --- a/cognee/api/v1/cognify/cognify.py +++ b/cognee/api/v1/cognify/cognify.py @@ -269,11 +269,11 @@ async def get_default_tasks( # TODO: Find out a better way to do this (Boris's graph_model=graph_model, config=config, custom_prompt=custom_prompt, - task_config={"batch_size": 30}, + task_config={"batch_size": 100}, ), # Generate knowledge graphs from the document chunks. Task( summarize_text, - task_config={"batch_size": 30}, + task_config={"batch_size": 100}, ), Task(add_data_points, task_config={"batch_size": 100}), ] diff --git a/cognee/infrastructure/databases/vector/embeddings/config.py b/cognee/infrastructure/databases/vector/embeddings/config.py index 24f724151..dcb55f4a4 100644 --- a/cognee/infrastructure/databases/vector/embeddings/config.py +++ b/cognee/infrastructure/databases/vector/embeddings/config.py @@ -26,9 +26,9 @@ class EmbeddingConfig(BaseSettings): def model_post_init(self, __context) -> None: # If embedding batch size is not defined use 2048 as default for OpenAI and 100 for all other embedding models if not self.embedding_batch_size and self.embedding_provider.lower() == "openai": - self.embedding_batch_size = 2048 + self.embedding_batch_size = 30 elif not self.embedding_batch_size: - self.embedding_batch_size = 100 + self.embedding_batch_size = 10 def to_dict(self) -> dict: """ diff --git a/cognee/tasks/storage/index_graph_edges.py b/cognee/tasks/storage/index_graph_edges.py index b7bf7a2b9..4fa8cfc75 100644 --- a/cognee/tasks/storage/index_graph_edges.py +++ b/cognee/tasks/storage/index_graph_edges.py @@ -1,3 +1,5 @@ +import asyncio + from cognee.modules.engine.utils.generate_edge_id import generate_edge_id from cognee.shared.logging_utils import get_logger from collections import Counter @@ -76,15 +78,20 @@ async def index_graph_edges( indexed_data_point.metadata["index_fields"] = [field_name] index_points[index_name].append(indexed_data_point) + # Get maximum batch size for embedding model + batch_size = vector_engine.embedding_engine.get_batch_size() + tasks: list[asyncio.Task] = [] + for index_name, indexable_points in index_points.items(): index_name, field_name = index_name.split(".") - # Get maximum batch size for embedding model - batch_size = vector_engine.embedding_engine.get_batch_size() - # We save the data in batches of {batch_size} to not put a lot of pressure on the database + # Create embedding tasks to run in parallel later for start in range(0, len(indexable_points), batch_size): batch = indexable_points[start : start + batch_size] - await vector_engine.index_data_points(index_name, field_name, batch) + tasks.append(vector_engine.index_data_points(index_name, field_name, batch)) + + # Start all embedding tasks and wait for completion + await asyncio.gather(*tasks) return None