diff --git a/cognee/infrastructure/databases/vector/get_vector_engine.py b/cognee/infrastructure/databases/vector/get_vector_engine.py
index 8056c9e36..079a8903f 100644
--- a/cognee/infrastructure/databases/vector/get_vector_engine.py
+++ b/cognee/infrastructure/databases/vector/get_vector_engine.py
@@ -1,6 +1,8 @@
from .config import get_vectordb_config
from .embeddings import get_embedding_engine
from .create_vector_engine import create_vector_engine
+from functools import lru_cache
+@lru_cache
def get_vector_engine():
return create_vector_engine(get_vectordb_config().to_dict(), get_embedding_engine())
diff --git a/cognee/infrastructure/engine/models/DataPoint.py b/cognee/infrastructure/engine/models/DataPoint.py
index 337306cb6..f8ea1c9f0 100644
--- a/cognee/infrastructure/engine/models/DataPoint.py
+++ b/cognee/infrastructure/engine/models/DataPoint.py
@@ -8,6 +8,7 @@ class MetaData(TypedDict):
index_fields: list[str]
class DataPoint(BaseModel):
+ __tablename__ = "data_point"
id: UUID = Field(default_factory = uuid4)
updated_at: Optional[datetime] = datetime.now(timezone.utc)
_metadata: Optional[MetaData] = {
diff --git a/cognee/infrastructure/llm/prompts/patch_gen_instructions.txt b/cognee/infrastructure/llm/prompts/patch_gen_instructions.txt
new file mode 100644
index 000000000..1553753ab
--- /dev/null
+++ b/cognee/infrastructure/llm/prompts/patch_gen_instructions.txt
@@ -0,0 +1,3 @@
+I need you to solve this issue by looking at the provided knowledge graph and
+generating a single patch file that I can apply directly to this repository using git apply.
+Please respond with a single patch file in the following format.
\ No newline at end of file
diff --git a/cognee/modules/chunking/models/DocumentChunk.py b/cognee/modules/chunking/models/DocumentChunk.py
index 975edb27e..b5b1cef94 100644
--- a/cognee/modules/chunking/models/DocumentChunk.py
+++ b/cognee/modules/chunking/models/DocumentChunk.py
@@ -3,6 +3,7 @@ from cognee.infrastructure.engine import DataPoint
from cognee.modules.data.processing.document_types import Document
class DocumentChunk(DataPoint):
+ __tablename__ = "document_chunk"
text: str
word_count: int
chunk_index: int
diff --git a/cognee/modules/engine/models/Entity.py b/cognee/modules/engine/models/Entity.py
index c43774e38..cf946ceb6 100644
--- a/cognee/modules/engine/models/Entity.py
+++ b/cognee/modules/engine/models/Entity.py
@@ -3,6 +3,7 @@ from cognee.modules.chunking.models.DocumentChunk import DocumentChunk
from .EntityType import EntityType
class Entity(DataPoint):
+ __tablename__ = "entity"
name: str
is_a: EntityType
description: str
diff --git a/cognee/modules/engine/models/EntityType.py b/cognee/modules/engine/models/EntityType.py
index b4f495857..56092f261 100644
--- a/cognee/modules/engine/models/EntityType.py
+++ b/cognee/modules/engine/models/EntityType.py
@@ -2,6 +2,7 @@ from cognee.infrastructure.engine import DataPoint
from cognee.modules.chunking.models.DocumentChunk import DocumentChunk
class EntityType(DataPoint):
+ __tablename__ = "entity_type"
name: str
type: str
description: str
diff --git a/cognee/modules/pipelines/Pipeline.py b/cognee/modules/pipelines/Pipeline.py
deleted file mode 100644
index 610394174..000000000
--- a/cognee/modules/pipelines/Pipeline.py
+++ /dev/null
@@ -1,18 +0,0 @@
-from uuid import UUID, uuid4
-from typing import Optional
-from pydantic import BaseModel
-from .models.Task import Task
-
-class PipelineConfig(BaseModel):
- batch_count: int = 10
- description: Optional[str] = None
-
-class Pipeline():
- id: UUID = uuid4()
- name: str
- description: str
- tasks: list[Task] = []
-
- def __init__(self, name: str, pipeline_config: PipelineConfig):
- self.name = name
- self.description = pipeline_config.description
diff --git a/cognee/tasks/chunks/query_chunks.py b/cognee/tasks/chunks/query_chunks.py
index 93f32a640..399528ee9 100644
--- a/cognee/tasks/chunks/query_chunks.py
+++ b/cognee/tasks/chunks/query_chunks.py
@@ -10,7 +10,7 @@ async def query_chunks(query: str) -> list[dict]:
"""
vector_engine = get_vector_engine()
- found_chunks = await vector_engine.search("DocumentChunk_text", query, limit = 5)
+ found_chunks = await vector_engine.search("document_chunk_text", query, limit = 5)
chunks = [result.payload for result in found_chunks]
diff --git a/cognee/tasks/code/get_local_dependencies_checker.py b/cognee/tasks/code/get_local_dependencies_checker.py
new file mode 100644
index 000000000..5d465254a
--- /dev/null
+++ b/cognee/tasks/code/get_local_dependencies_checker.py
@@ -0,0 +1,20 @@
+import argparse
+import asyncio
+from cognee.tasks.repo_processor.get_local_dependencies import get_local_script_dependencies
+
+if __name__ == "__main__":
+ parser = argparse.ArgumentParser(description="Get local script dependencies.")
+
+ # Suggested path: .../cognee/examples/python/simple_example.py
+ parser.add_argument("script_path", type=str, help="Absolute path to the Python script file")
+
+ # Suggested path: .../cognee
+ parser.add_argument("repo_path", type=str, help="Absolute path to the repository root")
+
+ args = parser.parse_args()
+
+ dependencies = asyncio.run(get_local_script_dependencies(args.script_path, args.repo_path))
+
+ print("Dependencies:")
+ for dependency in dependencies:
+ print(dependency)
diff --git a/cognee/tasks/graph/query_graph_connections.py b/cognee/tasks/graph/query_graph_connections.py
index cd4d76a5e..4020ddd13 100644
--- a/cognee/tasks/graph/query_graph_connections.py
+++ b/cognee/tasks/graph/query_graph_connections.py
@@ -27,8 +27,8 @@ async def query_graph_connections(query: str, exploration_levels = 1) -> list[(s
else:
vector_engine = get_vector_engine()
results = await asyncio.gather(
- vector_engine.search("Entity_name", query_text = query, limit = 5),
- vector_engine.search("EntityType_name", query_text = query, limit = 5),
+ vector_engine.search("entity_name", query_text = query, limit = 5),
+ vector_engine.search("entity_type_name", query_text = query, limit = 5),
)
results = [*results[0], *results[1]]
relevant_results = [result for result in results if result.score < 0.5][:5]
diff --git a/cognee/tasks/repo_processor/__init__.py b/cognee/tasks/repo_processor/__init__.py
new file mode 100644
index 000000000..94dab6b3f
--- /dev/null
+++ b/cognee/tasks/repo_processor/__init__.py
@@ -0,0 +1,3 @@
+import logging
+
+logger = logging.getLogger("task:repo_processor")
diff --git a/cognee/tasks/repo_processor/get_local_dependencies.py b/cognee/tasks/repo_processor/get_local_dependencies.py
new file mode 100644
index 000000000..fb4c68710
--- /dev/null
+++ b/cognee/tasks/repo_processor/get_local_dependencies.py
@@ -0,0 +1,126 @@
+import argparse
+import asyncio
+import sys
+from contextlib import contextmanager
+from pathlib import Path
+from typing import List, Dict, Optional
+
+import aiofiles
+import jedi
+import parso
+from parso.tree import BaseNode
+
+from cognee.tasks.repo_processor import logger
+
+
+@contextmanager
+def add_sys_path(path):
+ original_sys_path = sys.path.copy()
+ sys.path.insert(0, path)
+ try:
+ yield
+ finally:
+ sys.path = original_sys_path
+
+
+def _get_code_entities(node: parso.tree.NodeOrLeaf) -> List[Dict[str, any]]:
+ """
+ Recursively extract code entities using parso.
+ """
+ code_entity_list = []
+
+ if not hasattr(node, 'children'):
+ return code_entity_list
+
+ name_nodes = (child for child in node.children if child.type == 'name')
+ for name_node in name_nodes:
+ code_entity = {
+ 'name': name_node.value,
+ 'line': name_node.start_pos[0],
+ 'column': name_node.start_pos[1]
+ }
+ code_entity_list.append(code_entity)
+
+ # Recursively process child nodes
+ for child in node.children:
+ code_entity_list.extend(_get_code_entities(child))
+
+ return code_entity_list
+
+
+def _update_code_entity(script: jedi.Script, code_entity: Dict[str, any]) -> None:
+ """
+ Update a code_entity with (full_name, module_name, module_path) using Jedi
+ """
+ try:
+ results = script.goto(code_entity["line"], code_entity["column"], follow_imports=True)
+ if results:
+ result = results[0]
+ code_entity["full_name"] = getattr(result, "full_name", None)
+ code_entity["module_name"] = getattr(result, "module_name", None)
+ code_entity["module_path"] = getattr(result, "module_path", None)
+ except Exception as e:
+ # logging.warning(f"Failed to analyze code entity {code_entity['name']}: {e}")
+ logger.error(f"Failed to analyze code entity {code_entity['name']}: {e}")
+
+
+async def _extract_dependencies(script_path: str) -> List[str]:
+ try:
+ async with aiofiles.open(script_path, "r") as file:
+ source_code = await file.read()
+ except IOError as e:
+ logger.error(f"Error opening {script_path}: {e}")
+ return []
+
+ jedi.set_debug_function(lambda color, str_out: None)
+ script = jedi.Script(code=source_code, path=script_path)
+
+ tree = parso.parse(source_code)
+ code_entities = _get_code_entities(tree)
+
+ for code_entity in code_entities:
+ _update_code_entity(script, code_entity)
+
+ module_paths = {
+ entity.get("module_path")
+ for entity in code_entities
+ if entity.get("module_path") is not None
+ }
+
+ str_paths = []
+ for module_path in module_paths:
+ try:
+ str_paths.append(str(module_path))
+ except Exception as e:
+ logger.error(f"Error converting path to string: {e}")
+
+ return sorted(str_paths)
+
+
+async def get_local_script_dependencies(script_path: str, repo_path: Optional[str] = None) -> List[str]:
+ """
+ Extract and return a list of unique module paths that the script depends on.
+ """
+ try:
+ script_path = Path(script_path).resolve(strict=True)
+ except (FileNotFoundError, PermissionError) as e:
+ logger.error(f"Error resolving script path: {e}")
+ return []
+
+ if not repo_path:
+ return await _extract_dependencies(script_path)
+
+ try:
+ repo_path = Path(repo_path).resolve(strict=True)
+ except (FileNotFoundError, PermissionError) as e:
+ logger.warning(f"Error resolving repo path: {e}. Proceeding without repo_path.")
+ return await _extract_dependencies(script_path)
+
+ if not script_path.is_relative_to(repo_path):
+ logger.warning(f"Script {script_path} not in repo {repo_path}. Proceeding without repo_path.")
+ return await _extract_dependencies(script_path)
+
+ with add_sys_path(str(repo_path)):
+ dependencies = await _extract_dependencies(script_path)
+
+ return [path for path in dependencies if path.startswith(str(repo_path))]
diff --git a/cognee/tasks/storage/index_data_points.py b/cognee/tasks/storage/index_data_points.py
index dc74d705d..12903173a 100644
--- a/cognee/tasks/storage/index_data_points.py
+++ b/cognee/tasks/storage/index_data_points.py
@@ -16,10 +16,10 @@ async def index_data_points(data_points: list[DataPoint]):
data_point_type = type(data_point)
for field_name in data_point._metadata["index_fields"]:
- index_name = f"{data_point_type.__name__}.{field_name}"
+ index_name = f"{data_point_type.__tablename__}.{field_name}"
if index_name not in created_indexes:
- await vector_engine.create_vector_index(data_point_type.__name__, field_name)
+ await vector_engine.create_vector_index(data_point_type.__tablename__, field_name)
created_indexes[index_name] = True
if index_name not in index_points:
diff --git a/cognee/tasks/summarization/models.py b/cognee/tasks/summarization/models.py
index c6a932b37..955c0e2fa 100644
--- a/cognee/tasks/summarization/models.py
+++ b/cognee/tasks/summarization/models.py
@@ -3,6 +3,7 @@ from cognee.modules.chunking.models.DocumentChunk import DocumentChunk
from cognee.modules.data.processing.document_types import Document
class TextSummary(DataPoint):
+ __tablename__ = "text_summary"
text: str
made_from: DocumentChunk
diff --git a/cognee/tasks/summarization/query_summaries.py b/cognee/tasks/summarization/query_summaries.py
index 896839143..d9ec0fa00 100644
--- a/cognee/tasks/summarization/query_summaries.py
+++ b/cognee/tasks/summarization/query_summaries.py
@@ -10,7 +10,7 @@ async def query_summaries(query: str) -> list:
"""
vector_engine = get_vector_engine()
- summaries_results = await vector_engine.search("TextSummary_text", query, limit = 5)
+ summaries_results = await vector_engine.search("text_summary_text", query, limit = 5)
summaries = [summary.payload for summary in summaries_results]
diff --git a/cognee/tests/test_library.py b/cognee/tests/test_library.py
index 88c9cdc7b..66d218c3b 100755
--- a/cognee/tests/test_library.py
+++ b/cognee/tests/test_library.py
@@ -32,7 +32,7 @@ async def main():
from cognee.infrastructure.databases.vector import get_vector_engine
vector_engine = get_vector_engine()
- random_node = (await vector_engine.search("Entity_name", "AI"))[0]
+ random_node = (await vector_engine.search("entity_name", "AI"))[0]
random_node_name = random_node.payload["text"]
search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name)
diff --git a/cognee/tests/test_neo4j.py b/cognee/tests/test_neo4j.py
index 44bacd9b5..756b29cc4 100644
--- a/cognee/tests/test_neo4j.py
+++ b/cognee/tests/test_neo4j.py
@@ -36,7 +36,7 @@ async def main():
from cognee.infrastructure.databases.vector import get_vector_engine
vector_engine = get_vector_engine()
- random_node = (await vector_engine.search("Entity_name", "Quantum computer"))[0]
+ random_node = (await vector_engine.search("entity_name", "Quantum computer"))[0]
random_node_name = random_node.payload["text"]
search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name)
diff --git a/cognee/tests/test_pgvector.py b/cognee/tests/test_pgvector.py
index b5a6fc446..1466e195f 100644
--- a/cognee/tests/test_pgvector.py
+++ b/cognee/tests/test_pgvector.py
@@ -65,7 +65,7 @@ async def main():
from cognee.infrastructure.databases.vector import get_vector_engine
vector_engine = get_vector_engine()
- random_node = (await vector_engine.search("Entity_name", "Quantum computer"))[0]
+ random_node = (await vector_engine.search("entity_name", "Quantum computer"))[0]
random_node_name = random_node.payload["text"]
search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name)
diff --git a/cognee/tests/test_qdrant.py b/cognee/tests/test_qdrant.py
index 8ca525f0c..680399e60 100644
--- a/cognee/tests/test_qdrant.py
+++ b/cognee/tests/test_qdrant.py
@@ -37,7 +37,7 @@ async def main():
from cognee.infrastructure.databases.vector import get_vector_engine
vector_engine = get_vector_engine()
- random_node = (await vector_engine.search("Entity_name", "Quantum computer"))[0]
+ random_node = (await vector_engine.search("entity_name", "Quantum computer"))[0]
random_node_name = random_node.payload["text"]
search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name)
diff --git a/cognee/tests/test_weaviate.py b/cognee/tests/test_weaviate.py
index cdb4b9349..c93dc036a 100644
--- a/cognee/tests/test_weaviate.py
+++ b/cognee/tests/test_weaviate.py
@@ -35,7 +35,7 @@ async def main():
from cognee.infrastructure.databases.vector import get_vector_engine
vector_engine = get_vector_engine()
- random_node = (await vector_engine.search("Entity_name", "Quantum computer"))[0]
+ random_node = (await vector_engine.search("entity_name", "Quantum computer"))[0]
random_node_name = random_node.payload["text"]
search_results = await cognee.search(SearchType.INSIGHTS, query_text = random_node_name)
diff --git a/docker-compose.yml b/docker-compose.yml
index 1e13f1924..9c40979bc 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -19,7 +19,7 @@ services:
deploy:
resources:
limits:
- cpus: '4.0'
+ cpus: '2.0'
memory: 8GB
frontend:
diff --git a/evals/eval_swe_bench.py b/evals/eval_swe_bench.py
new file mode 100644
index 000000000..ec93bda07
--- /dev/null
+++ b/evals/eval_swe_bench.py
@@ -0,0 +1,118 @@
+import argparse
+import json
+import subprocess
+from pathlib import Path
+
+from datasets import Dataset
+from swebench.harness.utils import load_swebench_dataset
+from swebench.inference.make_datasets.create_instance import PATCH_EXAMPLE
+
+import cognee
+from cognee.api.v1.cognify.code_graph_pipeline import code_graph_pipeline
+from cognee.api.v1.search import SearchType
+from cognee.infrastructure.databases.graph import get_graph_engine
+from cognee.infrastructure.llm.get_llm_client import get_llm_client
+from cognee.infrastructure.llm.prompts import read_query_prompt
+from evals.eval_utils import download_instances
+
+
+async def generate_patch_with_cognee(instance, search_type=SearchType.CHUNKS):
+
+ await cognee.prune.prune_data()
+ await cognee.prune.prune_system(metadata=True)
+
+ dataset_name = "SWE_test_data"
+ code_text = instance["text"]
+ await cognee.add([code_text], dataset_name)
+ await code_graph_pipeline([dataset_name])
+ graph_engine = await get_graph_engine()
+ with open(graph_engine.filename, "r") as f:
+ graph_str = f.read()
+
+ problem_statement = instance['problem_statement']
+ instructions = read_query_prompt("patch_gen_instructions.txt")
+
+ prompt = "\n".join([
+ instructions,
+ "",
+ PATCH_EXAMPLE,
+ "",
+ "This is the knowledge graph:",
+ graph_str
+ ])
+
+ llm_client = get_llm_client()
+ answer_prediction = await llm_client.acreate_structured_output(
+ text_input=problem_statement,
+ system_prompt=prompt,
+ response_model=str,
+ )
+ return answer_prediction
+
+
+async def generate_patch_without_cognee(instance):
+ problem_statement = instance['problem_statement']
+ prompt = instance["text"]
+
+ llm_client = get_llm_client()
+ answer_prediction = await llm_client.acreate_structured_output(
+ text_input=problem_statement,
+ system_prompt=prompt,
+ response_model=str,
+ )
+ return answer_prediction
+
+
+async def get_preds(dataset, with_cognee=True):
+ if with_cognee:
+ model_name = "with_cognee"
+ pred_func = generate_patch_with_cognee
+ else:
+ model_name = "without_cognee"
+ pred_func = generate_patch_without_cognee
+
+ preds = [{"instance_id": instance["instance_id"],
+ "model_patch": await pred_func(instance),
+ "model_name_or_path": model_name} for instance in dataset]
+
+ return preds
+
+
+async def main():
+ parser = argparse.ArgumentParser(
+ description="Run LLM predictions on SWE-bench dataset")
+ parser.add_argument('--cognee_off', action='store_true')
+ args = parser.parse_args()
+
+ if args.cognee_off:
+ dataset_name = 'princeton-nlp/SWE-bench_Lite_bm25_13K'
+ dataset = load_swebench_dataset(dataset_name, split='test')
+ predictions_path = "preds_nocognee.json"
+ if not Path(predictions_path).exists():
+ preds = await get_preds(dataset, with_cognee=False)
+ with open(predictions_path, "w") as file:
+ json.dump(preds, file)
+ else:
+ dataset_name = 'princeton-nlp/SWE-bench_Lite'
+ swe_dataset = load_swebench_dataset(
+ dataset_name, split='test')[:1]
+ filepath = Path("SWE-bench_testsample")
+ if filepath.exists():
+ dataset = Dataset.load_from_disk(filepath)
+ else:
+ dataset = download_instances(swe_dataset, filepath)
+ predictions_path = "preds.json"
+ preds = await get_preds(dataset, with_cognee=not args.cognee_off)
+ with open(predictions_path, "w") as file:
+ json.dump(preds, file)
+
+ subprocess.run(["python", "-m", "swebench.harness.run_evaluation",
+ "--dataset_name", dataset_name,
+ "--split", "test",
+ "--predictions_path", predictions_path,
+ "--max_workers", "1",
+ "--run_id", "test_run"])
+
+if __name__ == "__main__":
+ import asyncio
+ asyncio.run(main(), debug=True)
diff --git a/evals/eval_utils.py b/evals/eval_utils.py
new file mode 100644
index 000000000..e95a84cec
--- /dev/null
+++ b/evals/eval_utils.py
@@ -0,0 +1,103 @@
+import os
+from copy import deepcopy
+from pathlib import Path
+from tempfile import TemporaryDirectory
+
+from datasets import Dataset
+from swebench.inference.make_datasets.create_instance import make_code_text
+from swebench.inference.make_datasets.utils import (AutoContextManager,
+ ingest_directory_contents)
+from tqdm.auto import tqdm
+
+
+def ingest_files(filenames):
+ files_dict = dict()
+ for filename in filenames:
+ with open(filename) as f:
+ content = f.read()
+ files_dict[filename] = content
+ return files_dict
+
+
+def ingest_repos(input_instances):
+ orig_dir = os.getcwd()
+ with TemporaryDirectory(
+ dir="/scratch" if os.path.exists("/scratch") else "/tmp"
+ ) as root_dir:
+ for instance in tqdm(
+ input_instances.values(),
+ total=len(input_instances),
+ desc="Downloading repos on specific commits",
+ ):
+ try:
+ with AutoContextManager(
+ instance, root_dir
+ ) as cm:
+ readmes = cm.get_readme_files()
+ instance["readmes"] = ingest_files(readmes)
+ instance["file_contents"] = ingest_directory_contents(
+ cm.repo_path
+ )
+ finally:
+ # if AutoContextManager fails to exit properly future exits will return the wrong directory
+ os.chdir(orig_dir)
+
+ return input_instances
+
+
+def extract_fields(instance):
+ readmes_text = make_code_text(instance["readmes"])
+ code_text = make_code_text(
+ instance["file_contents"], add_line_numbers=False)
+
+ text_inputs = "\n".join([readmes_text, code_text])
+ text_inputs = text_inputs.strip() + "\n\n"
+ # text_inputs = code_text
+ patch = "\n".join(["", instance["patch"], ""])
+ return {**instance, "text": text_inputs, "patch": patch}
+
+
+def create_dataset(input_instances):
+ columns = [
+ "instance_id",
+ "text",
+ "repo",
+ "base_commit",
+ "problem_statement",
+ "hints_text",
+ "created_at",
+ "patch",
+ "test_patch",
+ "version",
+ "FAIL_TO_PASS",
+ "PASS_TO_PASS",
+ "environment_setup_commit",
+ ]
+
+ data_table = {key: list() for key in columns}
+ for instance in input_instances.values():
+ datum = extract_fields(instance)
+ for key in columns:
+ data_table[key].append(datum[key] if key in datum else "")
+ dataset = Dataset.from_dict(data_table)
+
+ return dataset
+
+
+def download_instances(
+ input_data,
+ path=Path("SWE-bench_testsample"),
+ verbose=False,
+):
+ """Downloads code from github.
+
+ Args:
+ - input_data: dictionary with unprocessed input instances.
+ - verbose: set ContextManager verbose to True
+ """
+ input_instances = {x["instance_id"]: x for x in input_data}
+ input_instances_copy = deepcopy(input_instances)
+ input_instances_with_text = ingest_repos(input_instances_copy)
+ dataset = create_dataset(input_instances_with_text)
+ dataset.save_to_disk(path)
+ return dataset
diff --git a/notebooks/cognee_demo.ipynb b/notebooks/cognee_demo.ipynb
index 45f5a618c..67bb4e07f 100644
--- a/notebooks/cognee_demo.ipynb
+++ b/notebooks/cognee_demo.ipynb
@@ -758,7 +758,7 @@
"from cognee.infrastructure.databases.vector import get_vector_engine\n",
"\n",
"vector_engine = get_vector_engine()\n",
- "results = await search(vector_engine, \"Entity_name\", \"sarah.nguyen@example.com\")\n",
+ "results = await search(vector_engine, \"entity_name\", \"sarah.nguyen@example.com\")\n",
"for result in results:\n",
" print(result)"
]
@@ -788,7 +788,7 @@
"source": [
"from cognee.api.v1.search import SearchType\n",
"\n",
- "node = (await vector_engine.search(\"Entity_name\", \"sarah.nguyen@example.com\"))[0]\n",
+ "node = (await vector_engine.search(\"entity_name\", \"sarah.nguyen@example.com\"))[0]\n",
"node_name = node.payload[\"text\"]\n",
"\n",
"search_results = await cognee.search(SearchType.SUMMARIES, query_text = node_name)\n",
@@ -881,7 +881,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.8"
+ "version": "3.9.6"
}
},
"nbformat": 4,
diff --git a/notebooks/cognee_llama_index.ipynb b/notebooks/cognee_llama_index.ipynb
index 15e17163d..742c2f51c 100644
--- a/notebooks/cognee_llama_index.ipynb
+++ b/notebooks/cognee_llama_index.ipynb
@@ -52,7 +52,7 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
@@ -71,7 +71,7 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
@@ -174,7 +174,7 @@
"\n",
"# Query cognee for summaries\n",
"search_results = await cognee.search(\n",
- " SearchType.SUMMARIES, query=\"What are the main news discussed in the document?\"\n",
+ " SearchType.SUMMARIES, query_text=\"What are the main news discussed in the document?\"\n",
")\n",
"# Display search results\n",
"print(\"\\n Summary of main news discussed:\\n\")\n",
diff --git a/poetry.lock b/poetry.lock
index 93eb4a4d1..96f9aec27 100644
--- a/poetry.lock
+++ b/poetry.lock
@@ -404,60 +404,69 @@ files = [
[[package]]
name = "asyncpg"
-version = "0.29.0"
+version = "0.30.0"
description = "An asyncio PostgreSQL driver"
optional = false
python-versions = ">=3.8.0"
files = [
- {file = "asyncpg-0.29.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72fd0ef9f00aeed37179c62282a3d14262dbbafb74ec0ba16e1b1864d8a12169"},
- {file = "asyncpg-0.29.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:52e8f8f9ff6e21f9b39ca9f8e3e33a5fcdceaf5667a8c5c32bee158e313be385"},
- {file = "asyncpg-0.29.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e6823a7012be8b68301342ba33b4740e5a166f6bbda0aee32bc01638491a22"},
- {file = "asyncpg-0.29.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:746e80d83ad5d5464cfbf94315eb6744222ab00aa4e522b704322fb182b83610"},
- {file = "asyncpg-0.29.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:ff8e8109cd6a46ff852a5e6bab8b0a047d7ea42fcb7ca5ae6eaae97d8eacf397"},
- {file = "asyncpg-0.29.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:97eb024685b1d7e72b1972863de527c11ff87960837919dac6e34754768098eb"},
- {file = "asyncpg-0.29.0-cp310-cp310-win32.whl", hash = "sha256:5bbb7f2cafd8d1fa3e65431833de2642f4b2124be61a449fa064e1a08d27e449"},
- {file = "asyncpg-0.29.0-cp310-cp310-win_amd64.whl", hash = "sha256:76c3ac6530904838a4b650b2880f8e7af938ee049e769ec2fba7cd66469d7772"},
- {file = "asyncpg-0.29.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d4900ee08e85af01adb207519bb4e14b1cae8fd21e0ccf80fac6aa60b6da37b4"},
- {file = "asyncpg-0.29.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a65c1dcd820d5aea7c7d82a3fdcb70e096f8f70d1a8bf93eb458e49bfad036ac"},
- {file = "asyncpg-0.29.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b52e46f165585fd6af4863f268566668407c76b2c72d366bb8b522fa66f1870"},
- {file = "asyncpg-0.29.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc600ee8ef3dd38b8d67421359779f8ccec30b463e7aec7ed481c8346decf99f"},
- {file = "asyncpg-0.29.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:039a261af4f38f949095e1e780bae84a25ffe3e370175193174eb08d3cecab23"},
- {file = "asyncpg-0.29.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6feaf2d8f9138d190e5ec4390c1715c3e87b37715cd69b2c3dfca616134efd2b"},
- {file = "asyncpg-0.29.0-cp311-cp311-win32.whl", hash = "sha256:1e186427c88225ef730555f5fdda6c1812daa884064bfe6bc462fd3a71c4b675"},
- {file = "asyncpg-0.29.0-cp311-cp311-win_amd64.whl", hash = "sha256:cfe73ffae35f518cfd6e4e5f5abb2618ceb5ef02a2365ce64f132601000587d3"},
- {file = "asyncpg-0.29.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:6011b0dc29886ab424dc042bf9eeb507670a3b40aece3439944006aafe023178"},
- {file = "asyncpg-0.29.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b544ffc66b039d5ec5a7454667f855f7fec08e0dfaf5a5490dfafbb7abbd2cfb"},
- {file = "asyncpg-0.29.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d84156d5fb530b06c493f9e7635aa18f518fa1d1395ef240d211cb563c4e2364"},
- {file = "asyncpg-0.29.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54858bc25b49d1114178d65a88e48ad50cb2b6f3e475caa0f0c092d5f527c106"},
- {file = "asyncpg-0.29.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bde17a1861cf10d5afce80a36fca736a86769ab3579532c03e45f83ba8a09c59"},
- {file = "asyncpg-0.29.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:37a2ec1b9ff88d8773d3eb6d3784dc7e3fee7756a5317b67f923172a4748a175"},
- {file = "asyncpg-0.29.0-cp312-cp312-win32.whl", hash = "sha256:bb1292d9fad43112a85e98ecdc2e051602bce97c199920586be83254d9dafc02"},
- {file = "asyncpg-0.29.0-cp312-cp312-win_amd64.whl", hash = "sha256:2245be8ec5047a605e0b454c894e54bf2ec787ac04b1cb7e0d3c67aa1e32f0fe"},
- {file = "asyncpg-0.29.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0009a300cae37b8c525e5b449233d59cd9868fd35431abc470a3e364d2b85cb9"},
- {file = "asyncpg-0.29.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cad1324dbb33f3ca0cd2074d5114354ed3be2b94d48ddfd88af75ebda7c43cc"},
- {file = "asyncpg-0.29.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:012d01df61e009015944ac7543d6ee30c2dc1eb2f6b10b62a3f598beb6531548"},
- {file = "asyncpg-0.29.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:000c996c53c04770798053e1730d34e30cb645ad95a63265aec82da9093d88e7"},
- {file = "asyncpg-0.29.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:e0bfe9c4d3429706cf70d3249089de14d6a01192d617e9093a8e941fea8ee775"},
- {file = "asyncpg-0.29.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:642a36eb41b6313ffa328e8a5c5c2b5bea6ee138546c9c3cf1bffaad8ee36dd9"},
- {file = "asyncpg-0.29.0-cp38-cp38-win32.whl", hash = "sha256:a921372bbd0aa3a5822dd0409da61b4cd50df89ae85150149f8c119f23e8c408"},
- {file = "asyncpg-0.29.0-cp38-cp38-win_amd64.whl", hash = "sha256:103aad2b92d1506700cbf51cd8bb5441e7e72e87a7b3a2ca4e32c840f051a6a3"},
- {file = "asyncpg-0.29.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5340dd515d7e52f4c11ada32171d87c05570479dc01dc66d03ee3e150fb695da"},
- {file = "asyncpg-0.29.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e17b52c6cf83e170d3d865571ba574577ab8e533e7361a2b8ce6157d02c665d3"},
- {file = "asyncpg-0.29.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f100d23f273555f4b19b74a96840aa27b85e99ba4b1f18d4ebff0734e78dc090"},
- {file = "asyncpg-0.29.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48e7c58b516057126b363cec8ca02b804644fd012ef8e6c7e23386b7d5e6ce83"},
- {file = "asyncpg-0.29.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f9ea3f24eb4c49a615573724d88a48bd1b7821c890c2effe04f05382ed9e8810"},
- {file = "asyncpg-0.29.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8d36c7f14a22ec9e928f15f92a48207546ffe68bc412f3be718eedccdf10dc5c"},
- {file = "asyncpg-0.29.0-cp39-cp39-win32.whl", hash = "sha256:797ab8123ebaed304a1fad4d7576d5376c3a006a4100380fb9d517f0b59c1ab2"},
- {file = "asyncpg-0.29.0-cp39-cp39-win_amd64.whl", hash = "sha256:cce08a178858b426ae1aa8409b5cc171def45d4293626e7aa6510696d46decd8"},
- {file = "asyncpg-0.29.0.tar.gz", hash = "sha256:d1c49e1f44fffafd9a55e1a9b101590859d881d639ea2922516f5d9c512d354e"},
+ {file = "asyncpg-0.30.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfb4dd5ae0699bad2b233672c8fc5ccbd9ad24b89afded02341786887e37927e"},
+ {file = "asyncpg-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:dc1f62c792752a49f88b7e6f774c26077091b44caceb1983509edc18a2222ec0"},
+ {file = "asyncpg-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3152fef2e265c9c24eec4ee3d22b4f4d2703d30614b0b6753e9ed4115c8a146f"},
+ {file = "asyncpg-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c7255812ac85099a0e1ffb81b10dc477b9973345793776b128a23e60148dd1af"},
+ {file = "asyncpg-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:578445f09f45d1ad7abddbff2a3c7f7c291738fdae0abffbeb737d3fc3ab8b75"},
+ {file = "asyncpg-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c42f6bb65a277ce4d93f3fba46b91a265631c8df7250592dd4f11f8b0152150f"},
+ {file = "asyncpg-0.30.0-cp310-cp310-win32.whl", hash = "sha256:aa403147d3e07a267ada2ae34dfc9324e67ccc4cdca35261c8c22792ba2b10cf"},
+ {file = "asyncpg-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:fb622c94db4e13137c4c7f98834185049cc50ee01d8f657ef898b6407c7b9c50"},
+ {file = "asyncpg-0.30.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5e0511ad3dec5f6b4f7a9e063591d407eee66b88c14e2ea636f187da1dcfff6a"},
+ {file = "asyncpg-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:915aeb9f79316b43c3207363af12d0e6fd10776641a7de8a01212afd95bdf0ed"},
+ {file = "asyncpg-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c198a00cce9506fcd0bf219a799f38ac7a237745e1d27f0e1f66d3707c84a5a"},
+ {file = "asyncpg-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3326e6d7381799e9735ca2ec9fd7be4d5fef5dcbc3cb555d8a463d8460607956"},
+ {file = "asyncpg-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:51da377487e249e35bd0859661f6ee2b81db11ad1f4fc036194bc9cb2ead5056"},
+ {file = "asyncpg-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc6d84136f9c4d24d358f3b02be4b6ba358abd09f80737d1ac7c444f36108454"},
+ {file = "asyncpg-0.30.0-cp311-cp311-win32.whl", hash = "sha256:574156480df14f64c2d76450a3f3aaaf26105869cad3865041156b38459e935d"},
+ {file = "asyncpg-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:3356637f0bd830407b5597317b3cb3571387ae52ddc3bca6233682be88bbbc1f"},
+ {file = "asyncpg-0.30.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c902a60b52e506d38d7e80e0dd5399f657220f24635fee368117b8b5fce1142e"},
+ {file = "asyncpg-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aca1548e43bbb9f0f627a04666fedaca23db0a31a84136ad1f868cb15deb6e3a"},
+ {file = "asyncpg-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c2a2ef565400234a633da0eafdce27e843836256d40705d83ab7ec42074efb3"},
+ {file = "asyncpg-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1292b84ee06ac8a2ad8e51c7475aa309245874b61333d97411aab835c4a2f737"},
+ {file = "asyncpg-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0f5712350388d0cd0615caec629ad53c81e506b1abaaf8d14c93f54b35e3595a"},
+ {file = "asyncpg-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:db9891e2d76e6f425746c5d2da01921e9a16b5a71a1c905b13f30e12a257c4af"},
+ {file = "asyncpg-0.30.0-cp312-cp312-win32.whl", hash = "sha256:68d71a1be3d83d0570049cd1654a9bdfe506e794ecc98ad0873304a9f35e411e"},
+ {file = "asyncpg-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:9a0292c6af5c500523949155ec17b7fe01a00ace33b68a476d6b5059f9630305"},
+ {file = "asyncpg-0.30.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:05b185ebb8083c8568ea8a40e896d5f7af4b8554b64d7719c0eaa1eb5a5c3a70"},
+ {file = "asyncpg-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c47806b1a8cbb0a0db896f4cd34d89942effe353a5035c62734ab13b9f938da3"},
+ {file = "asyncpg-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b6fde867a74e8c76c71e2f64f80c64c0f3163e687f1763cfaf21633ec24ec33"},
+ {file = "asyncpg-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46973045b567972128a27d40001124fbc821c87a6cade040cfcd4fa8a30bcdc4"},
+ {file = "asyncpg-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:9110df111cabc2ed81aad2f35394a00cadf4f2e0635603db6ebbd0fc896f46a4"},
+ {file = "asyncpg-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04ff0785ae7eed6cc138e73fc67b8e51d54ee7a3ce9b63666ce55a0bf095f7ba"},
+ {file = "asyncpg-0.30.0-cp313-cp313-win32.whl", hash = "sha256:ae374585f51c2b444510cdf3595b97ece4f233fde739aa14b50e0d64e8a7a590"},
+ {file = "asyncpg-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:f59b430b8e27557c3fb9869222559f7417ced18688375825f8f12302c34e915e"},
+ {file = "asyncpg-0.30.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:29ff1fc8b5bf724273782ff8b4f57b0f8220a1b2324184846b39d1ab4122031d"},
+ {file = "asyncpg-0.30.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:64e899bce0600871b55368b8483e5e3e7f1860c9482e7f12e0a771e747988168"},
+ {file = "asyncpg-0.30.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b290f4726a887f75dcd1b3006f484252db37602313f806e9ffc4e5996cfe5cb"},
+ {file = "asyncpg-0.30.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f86b0e2cd3f1249d6fe6fd6cfe0cd4538ba994e2d8249c0491925629b9104d0f"},
+ {file = "asyncpg-0.30.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:393af4e3214c8fa4c7b86da6364384c0d1b3298d45803375572f415b6f673f38"},
+ {file = "asyncpg-0.30.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:fd4406d09208d5b4a14db9a9dbb311b6d7aeeab57bded7ed2f8ea41aeef39b34"},
+ {file = "asyncpg-0.30.0-cp38-cp38-win32.whl", hash = "sha256:0b448f0150e1c3b96cb0438a0d0aa4871f1472e58de14a3ec320dbb2798fb0d4"},
+ {file = "asyncpg-0.30.0-cp38-cp38-win_amd64.whl", hash = "sha256:f23b836dd90bea21104f69547923a02b167d999ce053f3d502081acea2fba15b"},
+ {file = "asyncpg-0.30.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f4e83f067b35ab5e6371f8a4c93296e0439857b4569850b178a01385e82e9ad"},
+ {file = "asyncpg-0.30.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5df69d55add4efcd25ea2a3b02025b669a285b767bfbf06e356d68dbce4234ff"},
+ {file = "asyncpg-0.30.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3479a0d9a852c7c84e822c073622baca862d1217b10a02dd57ee4a7a081f708"},
+ {file = "asyncpg-0.30.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26683d3b9a62836fad771a18ecf4659a30f348a561279d6227dab96182f46144"},
+ {file = "asyncpg-0.30.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1b982daf2441a0ed314bd10817f1606f1c28b1136abd9e4f11335358c2c631cb"},
+ {file = "asyncpg-0.30.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1c06a3a50d014b303e5f6fc1e5f95eb28d2cee89cf58384b700da621e5d5e547"},
+ {file = "asyncpg-0.30.0-cp39-cp39-win32.whl", hash = "sha256:1b11a555a198b08f5c4baa8f8231c74a366d190755aa4f99aacec5970afe929a"},
+ {file = "asyncpg-0.30.0-cp39-cp39-win_amd64.whl", hash = "sha256:8b684a3c858a83cd876f05958823b68e8d14ec01bb0c0d14a6704c5bf9711773"},
+ {file = "asyncpg-0.30.0.tar.gz", hash = "sha256:c551e9928ab6707602f44811817f82ba3c446e018bfe1d3abecc8ba5f3eac851"},
]
[package.dependencies]
-async-timeout = {version = ">=4.0.3", markers = "python_version < \"3.12.0\""}
+async-timeout = {version = ">=4.0.3", markers = "python_version < \"3.11.0\""}
[package.extras]
-docs = ["Sphinx (>=5.3.0,<5.4.0)", "sphinx-rtd-theme (>=1.2.2)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"]
-test = ["flake8 (>=6.1,<7.0)", "uvloop (>=0.15.3)"]
+docs = ["Sphinx (>=8.1.3,<8.2.0)", "sphinx-rtd-theme (>=1.2.2)"]
+gssauth = ["gssapi", "sspilib"]
+test = ["distro (>=1.9.0,<1.10.0)", "flake8 (>=6.1,<7.0)", "flake8-pyi (>=24.1.0,<24.2.0)", "gssapi", "k5test", "mypy (>=1.8.0,<1.9.0)", "sspilib", "uvloop (>=0.15.3)"]
[[package]]
name = "attrs"
@@ -7632,4 +7641,4 @@ weaviate = ["weaviate-client"]
[metadata]
lock-version = "2.0"
python-versions = ">=3.9.0,<3.12"
-content-hash = "f5874af8364839dd2a362b6b3209c4aae108f30dcc27be43d0d07f7b28160eda"
+content-hash = "474ae44ef721bf9b2d34d1cd139cddf42542ef9167895960784b6e88214dd1e6"
diff --git a/pyproject.toml b/pyproject.toml
index 0bab3f615..92b70db63 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -66,7 +66,7 @@ anthropic = "^0.26.1"
sentry-sdk = {extras = ["fastapi"], version = "^2.9.0"}
fastapi-users = {version = "*", extras = ["sqlalchemy"]}
alembic = "^1.13.3"
-asyncpg = "^0.29.0"
+asyncpg = "0.30.0"
pgvector = "^0.3.5"
psycopg2 = {version = "^2.9.10", optional = true}
llama-index-core = {version = "^0.11.22", optional = true}