From 219afbce685899557c4110eadd95c82243958605 Mon Sep 17 00:00:00 2001 From: Boris Date: Fri, 3 May 2024 10:35:41 +0200 Subject: [PATCH 1/3] feat: add lancedb vector storage [COG-176] (#90) * feat: integrate lancedb * fix: use futures in weaviate adapter to enable async behaviour --- .gitignore | 2 +- cognee/api/v1/cognify/cognify.py | 29 +- cognee/infrastructure/InfrastructureConfig.py | 32 +- .../embeddings/DefaultEmbeddingEngine.py | 2 - .../vector/embeddings/EmbeddingEngine.py | 4 +- .../vector/lancedb/LanceDBAdapter.py | 187 ++++--- .../databases/vector/models/DataPoint.py | 11 +- .../databases/vector/models/PayloadSchema.py | 3 + .../databases/vector/qdrant/QDrantAdapter.py | 7 +- .../databases/vector/vector_db_interface.py | 62 +-- .../vector/weaviate_db/WeaviateAdapter.py | 53 +- .../graph/add_cognitive_layer_graphs.py | 13 +- .../modules/cognify/graph/add_data_chunks.py | 49 +- .../cognify/graph/add_document_node.py | 14 +- .../modules/cognify/graph/add_label_nodes.py | 16 +- .../extract_knowledge_graph.py | 4 +- cognee/modules/memory/__init__.py | 0 cognee/modules/memory/vector/__init__.py | 1 - .../memory/vector/create_vector_memory.py | 7 - .../search/vector/search_similarity.py | 7 +- notebooks/full_run.ipynb | 54 +- poetry.lock | 469 +++++++----------- pyproject.toml | 24 +- 23 files changed, 498 insertions(+), 552 deletions(-) create mode 100644 cognee/infrastructure/databases/vector/models/PayloadSchema.py delete mode 100644 cognee/modules/memory/__init__.py delete mode 100644 cognee/modules/memory/vector/__init__.py delete mode 100644 cognee/modules/memory/vector/create_vector_memory.py diff --git a/.gitignore b/.gitignore index 86c59647e..558fa4e82 100644 --- a/.gitignore +++ b/.gitignore @@ -160,7 +160,7 @@ cython_debug/ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore # and can be added to the global gitignore or merged into this file. For a more nuclear # option (not recommended) you can uncomment the following to ignore the entire idea folder. -#.idea/ +.idea/ .vscode/ cognee/data/ diff --git a/cognee/api/v1/cognify/cognify.py b/cognee/api/v1/cognify/cognify.py index 32fcd9285..3fd0d902d 100644 --- a/cognee/api/v1/cognify/cognify.py +++ b/cognee/api/v1/cognify/cognify.py @@ -16,7 +16,6 @@ from cognee.modules.cognify.graph.add_node_connections import group_nodes_by_lay graph_ready_output, connect_nodes_in_graph from cognee.modules.cognify.llm.resolve_cross_graph_references import resolve_cross_graph_references from cognee.infrastructure.databases.graph.get_graph_client import get_graph_client -from cognee.modules.cognify.graph.add_label_nodes import add_label_nodes from cognee.modules.cognify.graph.add_cognitive_layers import add_cognitive_layers # from cognee.modules.cognify.graph.initialize_graph import initialize_graph from cognee.infrastructure.files.utils.guess_file_type import guess_file_type, FileTypeException @@ -41,7 +40,7 @@ logger = logging.getLogger("cognify") async def cognify(datasets: Union[str, List[str]] = None): """This function is responsible for the cognitive processing of the content.""" # Has to be loaded in advance, multithreading doesn't work without it. - nltk.download('stopwords', quiet=True) + nltk.download("stopwords", quiet=True) stopwords.ensure_loaded() graph_db_type = infrastructure_config.get_config()["graph_engine"] @@ -84,6 +83,12 @@ async def cognify(datasets: Union[str, List[str]] = None): for file_metadata in files: with open(file_metadata["file_path"], "rb") as file: try: + document_id = await add_document_node( + graph_client, + parent_node_id = f"DefaultGraphModel__{USER_ID}", + document_metadata = file_metadata, + ) + file_type = guess_file_type(file) text = extract_text_from_file(file, file_type) subchunks = chunk_engine.chunk_data(chunk_strategy, text, config.chunk_size, config.chunk_overlap) @@ -92,31 +97,25 @@ async def cognify(datasets: Union[str, List[str]] = None): data_chunks[dataset_name] = [] for subchunk in subchunks: - data_chunks[dataset_name].append(dict(text = subchunk, chunk_id = str(uuid4()), file_metadata = file_metadata)) + data_chunks[dataset_name].append(dict(document_id = document_id, chunk_id = str(uuid4()), text = subchunk)) except FileTypeException: logger.warning("File (%s) has an unknown file type. We are skipping it.", file_metadata["id"]) added_chunks: list[tuple[str, str, dict]] = await add_data_chunks(data_chunks) await asyncio.gather( - *[process_text(chunk["collection"], chunk["chunk_id"], chunk["text"], chunk["file_metadata"]) for chunk in added_chunks] + *[process_text(chunk["document_id"], chunk["chunk_id"], chunk["collection"], chunk["text"]) for chunk in added_chunks] ) return graph_client.graph -async def process_text(chunk_collection: str, chunk_id: str, input_text: str, file_metadata: dict): - print(f"Processing chunk ({chunk_id}) from document ({file_metadata['id']}).") +async def process_text(document_id: str, chunk_id: str, chunk_collection: str, input_text: str): + raw_document_id = document_id.split("__")[-1] + + print(f"Processing chunk ({chunk_id}) from document ({raw_document_id}).") graph_client = await get_graph_client(infrastructure_config.get_config()["graph_engine"]) - document_id = await add_document_node( - graph_client, - parent_node_id = f"DefaultGraphModel__{USER_ID}", #make a param of defaultgraph model to make sure when user passes his stuff, it doesn't break pipeline - document_metadata = file_metadata, - ) - - await add_label_nodes(graph_client, document_id, chunk_id, file_metadata["keywords"].split("|")) - classified_categories = await get_content_categories(input_text) await add_classification_nodes( graph_client, @@ -139,7 +138,7 @@ async def process_text(chunk_collection: str, chunk_id: str, input_text: str, fi if infrastructure_config.get_config()["connect_documents"] is True: db_engine = infrastructure_config.get_config()["database_engine"] - relevant_documents_to_connect = db_engine.fetch_cognify_data(excluded_document_id = file_metadata["id"]) + relevant_documents_to_connect = db_engine.fetch_cognify_data(excluded_document_id = raw_document_id) list_of_nodes = [] diff --git a/cognee/infrastructure/InfrastructureConfig.py b/cognee/infrastructure/InfrastructureConfig.py index 12a21b188..7615b8516 100644 --- a/cognee/infrastructure/InfrastructureConfig.py +++ b/cognee/infrastructure/InfrastructureConfig.py @@ -1,7 +1,6 @@ from cognee.config import Config from .databases.relational import DuckDBAdapter, DatabaseEngine from .databases.vector.vector_db_interface import VectorDBInterface -from .databases.vector.qdrant.QDrantAdapter import QDrantAdapter from .databases.vector.embeddings.DefaultEmbeddingEngine import DefaultEmbeddingEngine from .llm.llm_interface import LLMInterface from .llm.openai.adapter import OpenAIAdapter @@ -81,6 +80,12 @@ class InfrastructureConfig(): if (config_entity is None or config_entity == "llm_engine") and self.llm_engine is None: self.llm_engine = OpenAIAdapter(config.openai_key, config.openai_model) + if (config_entity is None or config_entity == "database_directory_path") and self.database_directory_path is None: + self.database_directory_path = self.system_root_directory + "/" + config.db_path + + if (config_entity is None or config_entity == "database_file_path") and self.database_file_path is None: + self.database_file_path = self.system_root_directory + "/" + config.db_path + "/" + config.db_name + if (config_entity is None or config_entity == "vector_engine") and self.vector_engine is None: try: from .databases.vector.weaviate_db import WeaviateAdapter @@ -94,17 +99,24 @@ class InfrastructureConfig(): embedding_engine = self.embedding_engine ) except (EnvironmentError, ModuleNotFoundError): - self.vector_engine = QDrantAdapter( - qdrant_url = config.qdrant_url, - qdrant_api_key = config.qdrant_api_key, - embedding_engine = self.embedding_engine - ) + if config.qdrant_url and config.qdrant_api_key: + from .databases.vector.qdrant.QDrantAdapter import QDrantAdapter - if (config_entity is None or config_entity == "database_directory_path") and self.database_directory_path is None: - self.database_directory_path = self.system_root_directory + "/" + config.db_path + self.vector_engine = QDrantAdapter( + qdrant_url = config.qdrant_url, + qdrant_api_key = config.qdrant_api_key, + embedding_engine = self.embedding_engine + ) + else: + from .databases.vector.lancedb.LanceDBAdapter import LanceDBAdapter + lance_db_path = self.database_directory_path + "/cognee.lancedb" + LocalStorage.ensure_directory_exists(lance_db_path) - if (config_entity is None or config_entity == "database_file_path") and self.database_file_path is None: - self.database_file_path = self.system_root_directory + "/" + config.db_path + "/" + config.db_name + self.vector_engine = LanceDBAdapter( + uri = lance_db_path, + api_key = None, + embedding_engine = self.embedding_engine, + ) if config_entity is not None: return getattr(self, config_entity) diff --git a/cognee/infrastructure/databases/vector/embeddings/DefaultEmbeddingEngine.py b/cognee/infrastructure/databases/vector/embeddings/DefaultEmbeddingEngine.py index eb23b0509..19d281340 100644 --- a/cognee/infrastructure/databases/vector/embeddings/DefaultEmbeddingEngine.py +++ b/cognee/infrastructure/databases/vector/embeddings/DefaultEmbeddingEngine.py @@ -3,8 +3,6 @@ from typing import List import instructor from openai import AsyncOpenAI from fastembed import TextEmbedding -from fastembed import TextEmbedding -from openai import AsyncOpenAI from cognee.config import Config from cognee.root_dir import get_absolute_path diff --git a/cognee/infrastructure/databases/vector/embeddings/EmbeddingEngine.py b/cognee/infrastructure/databases/vector/embeddings/EmbeddingEngine.py index f28ff4115..bcb99fb07 100644 --- a/cognee/infrastructure/databases/vector/embeddings/EmbeddingEngine.py +++ b/cognee/infrastructure/databases/vector/embeddings/EmbeddingEngine.py @@ -1,7 +1,7 @@ -from typing import List, Protocol +from typing import Protocol class EmbeddingEngine(Protocol): - async def embed_text(self, text: str) -> List[float]: + async def embed_text(self, text: list[str]) -> list[list[float]]: raise NotImplementedError() def get_vector_size(self) -> int: diff --git a/cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py b/cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py index 286706de1..9ffe3d8de 100644 --- a/cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py +++ b/cognee/infrastructure/databases/vector/lancedb/LanceDBAdapter.py @@ -1,74 +1,145 @@ +from typing import List, Optional, get_type_hints, Generic, TypeVar import asyncio +from pydantic import BaseModel, Field import lancedb -from typing import List, Optional +from lancedb.pydantic import Vector, LanceModel +from cognee.infrastructure.files.storage import LocalStorage +from ..models.ScoredResult import ScoredResult +from ..vector_db_interface import VectorDBInterface, DataPoint +from ..embeddings.EmbeddingEngine import EmbeddingEngine -import asyncio -import lancedb -from pathlib import Path -import tempfile +class LanceDBAdapter(VectorDBInterface): + connection: lancedb.AsyncConnection = None -class LanceDBAdapter: - def __init__(self, uri: Optional[str] = None, api_key: Optional[str] = None): - if uri: - self.uri = uri - else: - # Create a temporary directory for the LanceDB 'in-memory' simulation - self.temp_dir = tempfile.mkdtemp(suffix='.lancedb') - self.uri = f"file://{self.temp_dir}" + def __init__( + self, + uri: Optional[str], + api_key: Optional[str], + embedding_engine: EmbeddingEngine, + ): + self.uri = uri self.api_key = api_key - self.db = None + self.embedding_engine = embedding_engine - async def connect(self): - # Asynchronously connect to a LanceDB database, effectively in-memory if no URI is provided - self.db = await lancedb.connect_async(self.uri, api_key=self.api_key) + async def get_connection(self): + if self.connection is None: + self.connection = await lancedb.connect_async(self.uri, api_key = self.api_key) - async def disconnect(self): - # Disconnect and clean up the database if it was set up as temporary - await self.db.close() - if hasattr(self, 'temp_dir'): - Path(self.temp_dir).unlink(missing_ok=True) # Remove the temporary directory + return self.connection - async def create_table(self, table_name: str, schema=None, data=None): - if not await self.table_exists(table_name): - return await self.db.create_table(name=table_name, schema=schema, data=data) - else: - raise ValueError(f"Table {table_name} already exists") + async def embed_data(self, data: list[str]) -> list[list[float]]: + return await self.embedding_engine.embed_text(data) - async def table_exists(self, table_name: str) -> bool: - table_names = await self.db.table_names() - return table_name in table_names + async def collection_exists(self, collection_name: str) -> bool: + connection = await self.get_connection() + collection_names = await connection.table_names() + return collection_name in collection_names - async def insert_data(self, table_name: str, data_points: List[dict]): - table = await self.db.open_table(table_name) - await table.add(data_points) + async def create_collection(self, collection_name: str, payload_schema: BaseModel): + data_point_types = get_type_hints(DataPoint) - async def query_data(self, table_name: str, query=None, limit=10): - # Asynchronously query data from a table - table = await self.db.open_table(table_name) - if query: - query_result = await table.query().where(query).limit(limit).to_pandas() - else: - query_result = await table.query().limit(limit).to_pandas() - return query_result + class LanceDataPoint(LanceModel): + id: data_point_types["id"] = Field(...) + vector: Vector(self.embedding_engine.get_vector_size()) + payload: payload_schema - async def vector_search(self, table_name: str, query_vector: List[float], limit=10): - # Perform an asynchronous vector search - table = await self.db.open_table(table_name) - query_result = await table.vector_search().nearest_to(query_vector).limit(limit).to_pandas() - return query_result + if not await self.collection_exists(collection_name): + connection = await self.get_connection() + return await connection.create_table( + name = collection_name, + schema = LanceDataPoint, + exist_ok = True, + ) + async def create_data_points(self, collection_name: str, data_points: List[DataPoint]): + connection = await self.get_connection() -async def main(): - # Example without providing a URI, simulates in-memory behavior - adapter = LanceDBAdapter() - await adapter.connect() + if not await self.collection_exists(collection_name): + await self.create_collection( + collection_name, + payload_schema = type(data_points[0].payload), + ) - try: - await adapter.create_table("my_table") - data_points = [{"id": 1, "text": "example", "vector": [0.1, 0.2, 0.3]}] - await adapter.insert_data("my_table", data_points) - finally: - await adapter.disconnect() + collection = await connection.open_table(collection_name) -if __name__ == "__main__": - asyncio.run(main()) \ No newline at end of file + data_vectors = await self.embed_data( + [data_point.get_embeddable_data() for data_point in data_points] + ) + + IdType = TypeVar("IdType") + PayloadSchema = TypeVar("PayloadSchema") + + class LanceDataPoint(LanceModel, Generic[IdType, PayloadSchema]): + id: IdType + vector: Vector(self.embedding_engine.get_vector_size()) + payload: PayloadSchema + + lance_data_points = [ + LanceDataPoint[type(data_point.id), type(data_point.payload)]( + id = data_point.id, + vector = data_vectors[data_index], + payload = data_point.payload, + ) for (data_index, data_point) in enumerate(data_points) + ] + + await collection.add(lance_data_points) + + async def retrieve(self, collection_name: str, data_point_id: str): + connection = await self.get_connection() + collection = await connection.open_table(collection_name) + results = await collection.query().where(f"id = '{data_point_id}'").to_pandas() + result = results.to_dict("index")[0] + + return ScoredResult( + id = result["id"], + payload = result["payload"], + score = 1, + ) + + async def search( + self, + collection_name: str, + query_text: str = None, + query_vector: List[float] = None, + limit: int = 10, + with_vector: bool = False, + ): + if query_text is None and query_vector is None: + raise ValueError("One of query_text or query_vector must be provided!") + + if query_text and not query_vector: + query_vector = (await self.embedding_engine.embed_text([query_text]))[0] + + connection = await self.get_connection() + collection = await connection.open_table(collection_name) + + results = await collection.vector_search(query_vector).limit(limit).to_pandas() + + return [ScoredResult( + id = str(result["id"]), + score = float(result["_distance"]), + payload = result["payload"], + ) for result in results.to_dict("index").values()] + + async def batch_search( + self, + collection_name: str, + query_texts: List[str], + limit: int = None, + with_vector: bool = False, + ): + query_vectors = await self.embedding_engine.embed_text(query_texts) + + return asyncio.gather( + *[self.search( + collection_name = collection_name, + query_vector = query_vector, + limit = limit, + with_vector = with_vector, + ) for query_vector in query_vectors] + ) + + async def prune(self): + # Clean up the database if it was set up as temporary + if self.uri.startswith("/"): + LocalStorage.remove_all(self.uri) # Remove the temporary directory and files inside diff --git a/cognee/infrastructure/databases/vector/models/DataPoint.py b/cognee/infrastructure/databases/vector/models/DataPoint.py index bdbba9276..5ad870b65 100644 --- a/cognee/infrastructure/databases/vector/models/DataPoint.py +++ b/cognee/infrastructure/databases/vector/models/DataPoint.py @@ -1,10 +1,13 @@ -from typing import Union +from typing import Generic, TypeVar from pydantic import BaseModel -class DataPoint(BaseModel): +PayloadSchema = TypeVar("PayloadSchema", bound = BaseModel) + +class DataPoint(BaseModel, Generic[PayloadSchema]): id: str - payload: dict[str, Union[str, dict[str, str]]] + payload: PayloadSchema embed_field: str = "value" def get_embeddable_data(self): - return self.payload[self.embed_field] + if hasattr(self.payload, self.embed_field): + return getattr(self.payload, self.embed_field) diff --git a/cognee/infrastructure/databases/vector/models/PayloadSchema.py b/cognee/infrastructure/databases/vector/models/PayloadSchema.py new file mode 100644 index 000000000..1b0f2ed66 --- /dev/null +++ b/cognee/infrastructure/databases/vector/models/PayloadSchema.py @@ -0,0 +1,3 @@ +from typing import TypeVar + +PayloadSchema = TypeVar("PayloadSchema") diff --git a/cognee/infrastructure/databases/vector/qdrant/QDrantAdapter.py b/cognee/infrastructure/databases/vector/qdrant/QDrantAdapter.py index 2d994d3ee..d7ddd51a7 100644 --- a/cognee/infrastructure/databases/vector/qdrant/QDrantAdapter.py +++ b/cognee/infrastructure/databases/vector/qdrant/QDrantAdapter.py @@ -68,6 +68,7 @@ class QDrantAdapter(VectorDBInterface): async def create_collection( self, collection_name: str, + payload_schema = None, ): client = self.get_qdrant_client() @@ -93,7 +94,7 @@ class QDrantAdapter(VectorDBInterface): def convert_to_qdrant_point(data_point: DataPoint): return models.PointStruct( id = data_point.id, - payload = data_point.payload, + payload = data_point.payload.dict(), vector = { "text": data_vectors[data_points.index(data_point)] } @@ -110,9 +111,9 @@ class QDrantAdapter(VectorDBInterface): return result - async def retrieve(self, collection_name: str, data_id: str): + async def retrieve(self, collection_name: str, data_point_id: str): client = self.get_qdrant_client() - results = await client.retrieve(collection_name, [data_id], with_payload = True) + results = await client.retrieve(collection_name, [data_point_id], with_payload = True) await client.close() return results[0] if len(results) > 0 else None diff --git a/cognee/infrastructure/databases/vector/vector_db_interface.py b/cognee/infrastructure/databases/vector/vector_db_interface.py index 53fa1aab9..3960d9269 100644 --- a/cognee/infrastructure/databases/vector/vector_db_interface.py +++ b/cognee/infrastructure/databases/vector/vector_db_interface.py @@ -1,42 +1,21 @@ from typing import List, Protocol, Optional from abc import abstractmethod from .models.DataPoint import DataPoint +from .models.PayloadSchema import PayloadSchema class VectorDBInterface(Protocol): """ Collections """ + @abstractmethod + async def collection_exists(self, collection_name: str) -> bool: + raise NotImplementedError + @abstractmethod async def create_collection( self, - collection_name: str + collection_name: str, + payload_schema: Optional[PayloadSchema] = None, ): raise NotImplementedError - # @abstractmethod - # async def update_collection( - # self, - # collection_name: str, - # collection_config: object - # ): raise NotImplementedError - - # @abstractmethod - # async def delete_collection( - # self, - # collection_name: str - # ): raise NotImplementedError - - # @abstractmethod - # async def create_vector_index( - # self, - # collection_name: str, - # vector_index_config: object - # ): raise NotImplementedError - - # @abstractmethod - # async def create_data_index( - # self, - # collection_name: str, - # vector_index_config: object - # ): raise NotImplementedError - """ Data points """ @abstractmethod async def create_data_points( @@ -45,27 +24,12 @@ class VectorDBInterface(Protocol): data_points: List[DataPoint] ): raise NotImplementedError - # @abstractmethod - # async def get_data_point( - # self, - # collection_name: str, - # data_point_id: str - # ): raise NotImplementedError - - # @abstractmethod - # async def update_data_point( - # self, - # collection_name: str, - # data_point_id: str, - # payload: object - # ): raise NotImplementedError - - # @abstractmethod - # async def delete_data_point( - # self, - # collection_name: str, - # data_point_id: str - # ): raise NotImplementedError + @abstractmethod + async def retrieve( + self, + collection_name: str, + data_point_id: str + ): raise NotImplementedError """ Search """ @abstractmethod diff --git a/cognee/infrastructure/databases/vector/weaviate_db/WeaviateAdapter.py b/cognee/infrastructure/databases/vector/weaviate_db/WeaviateAdapter.py index c0bba0710..861508dff 100644 --- a/cognee/infrastructure/databases/vector/weaviate_db/WeaviateAdapter.py +++ b/cognee/infrastructure/databases/vector/weaviate_db/WeaviateAdapter.py @@ -21,9 +21,6 @@ class WeaviateAdapter(VectorDBInterface): self.client = weaviate.connect_to_wcs( cluster_url=url, auth_credentials=weaviate.auth.AuthApiKey(api_key), - # headers = { - # "X-OpenAI-Api-Key": openai_api_key - # }, additional_config=wvc.init.AdditionalConfig(timeout=wvc.init.Timeout(init=30)) ) @@ -31,20 +28,23 @@ class WeaviateAdapter(VectorDBInterface): return await self.embedding_engine.embed_text(data) async def collection_exists(self, collection_name: str) -> bool: - event_loop = asyncio.get_event_loop() + future = asyncio.Future() - def sync_collection_exists(): - return self.client.collections.exists(collection_name) + future.set_result(self.client.collections.exists(collection_name)) - return await event_loop.run_in_executor(None, sync_collection_exists) + return await future - async def create_collection(self, collection_name: str): + async def create_collection( + self, + collection_name: str, + payload_schema = None, + ): import weaviate.classes.config as wvcc - event_loop = asyncio.get_event_loop() + future = asyncio.Future() - def sync_create_collection(): - return self.client.collections.create( + future.set_result( + self.client.collections.create( name=collection_name, properties=[ wvcc.Property( @@ -54,13 +54,9 @@ class WeaviateAdapter(VectorDBInterface): ) ] ) + ) - # try: - result = await event_loop.run_in_executor(None, sync_create_collection) - # finally: - # event_loop.shutdown_executor() - - return result + return await future def get_collection(self, collection_name: str): return self.client.collections.get(collection_name) @@ -73,30 +69,26 @@ class WeaviateAdapter(VectorDBInterface): def convert_to_weaviate_data_points(data_point: DataPoint): return DataObject( - uuid=data_point.id, - properties=data_point.payload, - vector=data_vectors[data_points.index(data_point)] + uuid = data_point.id, + properties = data_point.payload.dict(), + vector = data_vectors[data_points.index(data_point)] ) objects = list(map(convert_to_weaviate_data_points, data_points)) return self.get_collection(collection_name).data.insert_many(objects) - async def retrieve(self, collection_name: str, data_id: str): - def sync_retrieve(): - return self.get_collection(collection_name).query.fetch_object_by_id(UUID(data_id)) + async def retrieve(self, collection_name: str, data_point_id: str): + future = asyncio.Future() - event_loop = asyncio.get_event_loop() - - # try: - data_point = await event_loop.run_in_executor(None, sync_retrieve) - # finally: - # event_loop.shutdown_executor() + data_point = self.get_collection(collection_name).query.fetch_object_by_id(UUID(data_point_id)) data_point.payload = data_point.properties del data_point.properties - return data_point + future.set_result(data_point) + + return await future async def search( self, @@ -114,7 +106,6 @@ class WeaviateAdapter(VectorDBInterface): if query_vector is None: query_vector = (await self.embed_data([query_text]))[0] - # def sync_search(): search_result = self.get_collection(collection_name).query.hybrid( query = None, vector = query_vector, diff --git a/cognee/modules/cognify/graph/add_cognitive_layer_graphs.py b/cognee/modules/cognify/graph/add_cognitive_layer_graphs.py index 11cc83a19..a2a64bbec 100644 --- a/cognee/modules/cognify/graph/add_cognitive_layer_graphs.py +++ b/cognee/modules/cognify/graph/add_cognitive_layer_graphs.py @@ -1,6 +1,7 @@ from datetime import datetime from uuid import uuid4 from typing import List, Tuple, TypedDict +from pydantic import BaseModel from cognee.infrastructure import infrastructure_config from cognee.infrastructure.databases.vector import DataPoint from cognee.shared.data_models import KnowledgeGraph @@ -106,14 +107,22 @@ async def add_cognitive_layer_graphs( await graph_client.add_edges(graph_edges) + class References(BaseModel): + node_id: str + cognitive_layer: str + + class PayloadSchema(BaseModel): + value: str + references: References + try: - await vector_client.create_collection(layer_id) + await vector_client.create_collection(layer_id, payload_schema = PayloadSchema) except Exception: # It's ok if the collection already exists. pass data_points = [ - DataPoint( + DataPoint[PayloadSchema]( id = str(uuid4()), payload = dict( value = node_data["name"], diff --git a/cognee/modules/cognify/graph/add_data_chunks.py b/cognee/modules/cognify/graph/add_data_chunks.py index a40f6dd52..d4482c651 100644 --- a/cognee/modules/cognify/graph/add_data_chunks.py +++ b/cognee/modules/cognify/graph/add_data_chunks.py @@ -1,5 +1,5 @@ -import logging from typing import TypedDict +from pydantic import BaseModel, Field from cognee.infrastructure import infrastructure_config from cognee.infrastructure.databases.vector import DataPoint @@ -13,12 +13,15 @@ async def add_data_chunks(dataset_data_chunks: dict[str, list[TextChunk]]): identified_chunks = [] + class PayloadSchema(BaseModel): + text: str = Field(...) + for (dataset_name, chunks) in dataset_data_chunks.items(): try: - # if not await vector_client.collection_exists(dataset_name): - # logging.error(f"Creating collection {str(dataset_name)}") - await vector_client.create_collection(dataset_name) - except Exception: + + await vector_client.create_collection(dataset_name, payload_schema = PayloadSchema) + except Exception as error: + print(error) pass dataset_chunks = [ @@ -26,35 +29,21 @@ async def add_data_chunks(dataset_data_chunks: dict[str, list[TextChunk]]): chunk_id = chunk["chunk_id"], collection = dataset_name, text = chunk["text"], - file_metadata = chunk["file_metadata"], + document_id = chunk["document_id"], ) for chunk in chunks ] identified_chunks.extend(dataset_chunks) - # if not await vector_client.collection_exists(dataset_name): - try: - logging.error("Collection still not found. Creating collection again.") - await vector_client.create_collection(dataset_name) - except: - pass - - async def create_collection_retry(dataset_name, dataset_chunks): - await vector_client.create_data_points( - dataset_name, - [ - DataPoint( - id = chunk["chunk_id"], - payload = dict(text = chunk["text"]), - embed_field = "text" - ) for chunk in dataset_chunks - ], - ) - - try: - await create_collection_retry(dataset_name, dataset_chunks) - except Exception: - logging.error("Collection not found in create data points.") - await create_collection_retry(dataset_name, dataset_chunks) + await vector_client.create_data_points( + dataset_name, + [ + DataPoint[PayloadSchema]( + id = chunk["chunk_id"], + payload = PayloadSchema.parse_obj(dict(text = chunk["text"])), + embed_field = "text", + ) for chunk in dataset_chunks + ], + ) return identified_chunks diff --git a/cognee/modules/cognify/graph/add_document_node.py b/cognee/modules/cognify/graph/add_document_node.py index 1e93ae60a..0d85ad1a7 100644 --- a/cognee/modules/cognify/graph/add_document_node.py +++ b/cognee/modules/cognify/graph/add_document_node.py @@ -1,13 +1,10 @@ from cognee.shared.data_models import Document +from cognee.modules.cognify.graph.add_label_nodes import add_label_nodes from cognee.infrastructure.databases.graph.graph_db_interface import GraphDBInterface async def add_document_node(graph_client: GraphDBInterface, parent_node_id, document_metadata): document_id = f"DOCUMENT__{document_metadata['id']}" - - - - document = await graph_client.extract_node(document_id) if not document: @@ -21,6 +18,13 @@ async def add_document_node(graph_client: GraphDBInterface, parent_node_id, docu await graph_client.add_node(document_id, document) - await graph_client.add_edge(parent_node_id, document_id, "has_document", dict(relationship_name = "has_document")) + await graph_client.add_edge( + parent_node_id, + document_id, + "has_document", + dict(relationship_name = "has_document"), + ) + + await add_label_nodes(graph_client, document_id, document_metadata["keywords"].split("|")) return document_id diff --git a/cognee/modules/cognify/graph/add_label_nodes.py b/cognee/modules/cognify/graph/add_label_nodes.py index 572475060..0ff235462 100644 --- a/cognee/modules/cognify/graph/add_label_nodes.py +++ b/cognee/modules/cognify/graph/add_label_nodes.py @@ -1,10 +1,11 @@ from uuid import uuid4 from typing import List from datetime import datetime +from pydantic import BaseModel from cognee.infrastructure import infrastructure_config from cognee.infrastructure.databases.vector import DataPoint -async def add_label_nodes(graph_client, parent_node_id: str, chunk_id: str, keywords: List[str]) -> None: +async def add_label_nodes(graph_client, parent_node_id: str, keywords: List[str]) -> None: vector_client = infrastructure_config.get_config("vector_engine") keyword_nodes = [] @@ -16,7 +17,6 @@ async def add_label_nodes(graph_client, parent_node_id: str, chunk_id: str, keyw keyword_id, dict( id = keyword_id, - chunk_id = chunk_id, name = keyword.lower().capitalize(), keyword = keyword.lower(), entity_type = "Keyword", @@ -36,9 +36,17 @@ async def add_label_nodes(graph_client, parent_node_id: str, chunk_id: str, keyw ) for (keyword_id, __) in keyword_nodes ]) + class References(BaseModel): + node_id: str + cognitive_layer: str + + class PayloadSchema(BaseModel): + value: str + references: References + # Add data to vector keyword_data_points = [ - DataPoint( + DataPoint[PayloadSchema]( id = str(uuid4()), payload = dict( value = keyword_data["keyword"], @@ -52,7 +60,7 @@ async def add_label_nodes(graph_client, parent_node_id: str, chunk_id: str, keyw ] try: - await vector_client.create_collection(parent_node_id) + await vector_client.create_collection(parent_node_id, payload_schema = PayloadSchema) except Exception: # It's ok if the collection already exists. pass diff --git a/cognee/modules/data/extraction/knowledge_graph/extract_knowledge_graph.py b/cognee/modules/data/extraction/knowledge_graph/extract_knowledge_graph.py index 24c57a40e..65c0da228 100644 --- a/cognee/modules/data/extraction/knowledge_graph/extract_knowledge_graph.py +++ b/cognee/modules/data/extraction/knowledge_graph/extract_knowledge_graph.py @@ -19,6 +19,6 @@ async def extract_knowledge_graph(text: str, cognitive_layer, graph_model): return (await event_loop.run_in_executor(None, sync_extract_knowledge_graph)).graph # return compiled_extract_knowledge_graph(text, question = "").graph except Exception as error: - logger.error("Error extracting graph from content: %s", error, exc_info = True) - + # TODO: Log error to Sentry + return await extract_content_graph(text, cognitive_layer, graph_model) diff --git a/cognee/modules/memory/__init__.py b/cognee/modules/memory/__init__.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/cognee/modules/memory/vector/__init__.py b/cognee/modules/memory/vector/__init__.py deleted file mode 100644 index 23a274d96..000000000 --- a/cognee/modules/memory/vector/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from .create_vector_memory import create_vector_memory diff --git a/cognee/modules/memory/vector/create_vector_memory.py b/cognee/modules/memory/vector/create_vector_memory.py deleted file mode 100644 index 46fc2d299..000000000 --- a/cognee/modules/memory/vector/create_vector_memory.py +++ /dev/null @@ -1,7 +0,0 @@ -from cognee.infrastructure.databases.vector.qdrant.adapter import CollectionConfig -from cognee.infrastructure.databases.vector.get_vector_database import get_vector_database - -async def create_vector_memory(memory_name: str, collection_config: CollectionConfig): - vector_db = get_vector_database() - - return await vector_db.create_collection(memory_name, collection_config) diff --git a/cognee/modules/search/vector/search_similarity.py b/cognee/modules/search/vector/search_similarity.py index 0098f7910..2b288996c 100644 --- a/cognee/modules/search/vector/search_similarity.py +++ b/cognee/modules/search/vector/search_similarity.py @@ -25,7 +25,7 @@ async def search_similarity(query: str, graph): layer_id = result.payload["references"]["cognitive_layer"], node_id = result.payload["references"]["node_id"], score = result.score, - ) for result in results if result.score > 0.5 + ) for result in results if result.score > 0.8 ]) if len(graph_nodes) == 0: @@ -39,7 +39,10 @@ async def search_similarity(query: str, graph): if "chunk_collection" not in graph_node and "chunk_id" not in graph_node: continue - vector_point = await vector_engine.retrieve(graph_node["chunk_collection"], graph_node["chunk_id"]) + vector_point = await vector_engine.retrieve( + graph_node["chunk_collection"], + graph_node["chunk_id"], + ) relevant_context.append(vector_point.payload["text"]) diff --git a/notebooks/full_run.ipynb b/notebooks/full_run.ipynb index 878346fdf..06ba70145 100644 --- a/notebooks/full_run.ipynb +++ b/notebooks/full_run.ipynb @@ -47,7 +47,12 @@ "cell_type": "code", "execution_count": null, "id": "44603a2a", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-04-30T16:53:16.917678Z", + "start_time": "2024-04-30T16:53:14.700232Z" + } + }, "outputs": [], "source": [ "from os import path\n", @@ -69,7 +74,12 @@ "cell_type": "code", "execution_count": null, "id": "65bfaf09", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-04-30T16:55:30.886217Z", + "start_time": "2024-04-30T16:53:19.164943Z" + } + }, "outputs": [], "source": [ "from os import path\n", @@ -78,26 +88,29 @@ "\n", "logging.basicConfig(level = logging.INFO)\n", "\n", - "await cognee.prune.prune_system()\n", - "\n", "data_directory_path = path.abspath(\"../.data\")\n", "cognee.config.data_root_directory(data_directory_path)\n", "\n", "cognee_directory_path = path.abspath(\"../.cognee_system\")\n", "cognee.config.system_root_directory(cognee_directory_path)\n", "\n", - "await cognee.cognify('short_stories')" + "await cognee.prune.prune_system()\n", + "\n", + "await cognee.cognify(\"short_stories\")" ] }, { "cell_type": "code", "execution_count": null, "id": "a514cf38", - "metadata": {}, + "metadata": { + "ExecuteTime": { + "end_time": "2024-04-30T16:55:39.819971Z", + "start_time": "2024-04-30T16:55:35.627964Z" + } + }, "outputs": [], "source": [ - "import networkx as nx\n", - "import pandas as pd\n", "import graphistry\n", "from cognee.config import Config\n", "from cognee.utils import render_graph\n", @@ -115,22 +128,7 @@ "graph_client = await get_graph_client(GraphDBType.NETWORKX, \"cognee_graph.pkl\")\n", "graph = graph_client.graph\n", "\n", - "await render_graph(graph)\n", - "\n", - "# edges = nx.to_pandas_edgelist(graph)\n", - "\n", - "# nodes_data = [{\n", - "# \"id\": node_id,\n", - "# \"label\": node[\"name\"] if \"name\" in node else node_id,\n", - "# } for (node_id, node) in graph.nodes(data = True)]\n", - "\n", - "# nodes = pd.DataFrame(nodes_data)\n", - "\n", - "# plotter = graphistry.edges(edges, source = \"source\", destination = \"target\").nodes(nodes, \"id\")\n", - "\n", - "# plotter.bind(edge_title = \"relationship_name\", edge_label = \"relationship_name\", point_title = \"name\", point_label = \"name\")\n", - "# url = plotter.plot(render = False, as_files = True)\n", - "# print(f\"Graph is visualized at: {url}\")\n" + "await render_graph(graph)\n" ] }, { @@ -160,6 +158,14 @@ " print(\"French girls\" in result)\n", " print(result)" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e5e44018878d383f", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/poetry.lock b/poetry.lock index 3711a9966..1355e482a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -374,59 +374,6 @@ files = [ {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, ] -[[package]] -name = "asyncpg" -version = "0.28.0" -description = "An asyncio PostgreSQL driver" -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "asyncpg-0.28.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a6d1b954d2b296292ddff4e0060f494bb4270d87fb3655dd23c5c6096d16d83"}, - {file = "asyncpg-0.28.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0740f836985fd2bd73dca42c50c6074d1d61376e134d7ad3ad7566c4f79f8184"}, - {file = "asyncpg-0.28.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e907cf620a819fab1737f2dd90c0f185e2a796f139ac7de6aa3212a8af96c050"}, - {file = "asyncpg-0.28.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86b339984d55e8202e0c4b252e9573e26e5afa05617ed02252544f7b3e6de3e9"}, - {file = "asyncpg-0.28.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0c402745185414e4c204a02daca3d22d732b37359db4d2e705172324e2d94e85"}, - {file = "asyncpg-0.28.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c88eef5e096296626e9688f00ab627231f709d0e7e3fb84bb4413dff81d996d7"}, - {file = "asyncpg-0.28.0-cp310-cp310-win32.whl", hash = "sha256:90a7bae882a9e65a9e448fdad3e090c2609bb4637d2a9c90bfdcebbfc334bf89"}, - {file = "asyncpg-0.28.0-cp310-cp310-win_amd64.whl", hash = "sha256:76aacdcd5e2e9999e83c8fbcb748208b60925cc714a578925adcb446d709016c"}, - {file = "asyncpg-0.28.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a0e08fe2c9b3618459caaef35979d45f4e4f8d4f79490c9fa3367251366af207"}, - {file = "asyncpg-0.28.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b24e521f6060ff5d35f761a623b0042c84b9c9b9fb82786aadca95a9cb4a893b"}, - {file = "asyncpg-0.28.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99417210461a41891c4ff301490a8713d1ca99b694fef05dabd7139f9d64bd6c"}, - {file = "asyncpg-0.28.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f029c5adf08c47b10bcdc857001bbef551ae51c57b3110964844a9d79ca0f267"}, - {file = "asyncpg-0.28.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ad1d6abf6c2f5152f46fff06b0e74f25800ce8ec6c80967f0bc789974de3c652"}, - {file = "asyncpg-0.28.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d7fa81ada2807bc50fea1dc741b26a4e99258825ba55913b0ddbf199a10d69d8"}, - {file = "asyncpg-0.28.0-cp311-cp311-win32.whl", hash = "sha256:f33c5685e97821533df3ada9384e7784bd1e7865d2b22f153f2e4bd4a083e102"}, - {file = "asyncpg-0.28.0-cp311-cp311-win_amd64.whl", hash = "sha256:5e7337c98fb493079d686a4a6965e8bcb059b8e1b8ec42106322fc6c1c889bb0"}, - {file = "asyncpg-0.28.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:1c56092465e718a9fdcc726cc3d9dcf3a692e4834031c9a9f871d92a75d20d48"}, - {file = "asyncpg-0.28.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4acd6830a7da0eb4426249d71353e8895b350daae2380cb26d11e0d4a01c5472"}, - {file = "asyncpg-0.28.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63861bb4a540fa033a56db3bb58b0c128c56fad5d24e6d0a8c37cb29b17c1c7d"}, - {file = "asyncpg-0.28.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:a93a94ae777c70772073d0512f21c74ac82a8a49be3a1d982e3f259ab5f27307"}, - {file = "asyncpg-0.28.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d14681110e51a9bc9c065c4e7944e8139076a778e56d6f6a306a26e740ed86d2"}, - {file = "asyncpg-0.28.0-cp37-cp37m-win32.whl", hash = "sha256:8aec08e7310f9ab322925ae5c768532e1d78cfb6440f63c078b8392a38aa636a"}, - {file = "asyncpg-0.28.0-cp37-cp37m-win_amd64.whl", hash = "sha256:319f5fa1ab0432bc91fb39b3960b0d591e6b5c7844dafc92c79e3f1bff96abef"}, - {file = "asyncpg-0.28.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b337ededaabc91c26bf577bfcd19b5508d879c0ad009722be5bb0a9dd30b85a0"}, - {file = "asyncpg-0.28.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4d32b680a9b16d2957a0a3cc6b7fa39068baba8e6b728f2e0a148a67644578f4"}, - {file = "asyncpg-0.28.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f4f62f04cdf38441a70f279505ef3b4eadf64479b17e707c950515846a2df197"}, - {file = "asyncpg-0.28.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f20cac332c2576c79c2e8e6464791c1f1628416d1115935a34ddd7121bfc6a4"}, - {file = "asyncpg-0.28.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:59f9712ce01e146ff71d95d561fb68bd2d588a35a187116ef05028675462d5ed"}, - {file = "asyncpg-0.28.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:fc9e9f9ff1aa0eddcc3247a180ac9e9b51a62311e988809ac6152e8fb8097756"}, - {file = "asyncpg-0.28.0-cp38-cp38-win32.whl", hash = "sha256:9e721dccd3838fcff66da98709ed884df1e30a95f6ba19f595a3706b4bc757e3"}, - {file = "asyncpg-0.28.0-cp38-cp38-win_amd64.whl", hash = "sha256:8ba7d06a0bea539e0487234511d4adf81dc8762249858ed2a580534e1720db00"}, - {file = "asyncpg-0.28.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d009b08602b8b18edef3a731f2ce6d3f57d8dac2a0a4140367e194eabd3de457"}, - {file = "asyncpg-0.28.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ec46a58d81446d580fb21b376ec6baecab7288ce5a578943e2fc7ab73bf7eb39"}, - {file = "asyncpg-0.28.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b48ceed606cce9e64fd5480a9b0b9a95cea2b798bb95129687abd8599c8b019"}, - {file = "asyncpg-0.28.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8858f713810f4fe67876728680f42e93b7e7d5c7b61cf2118ef9153ec16b9423"}, - {file = "asyncpg-0.28.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5e18438a0730d1c0c1715016eacda6e9a505fc5aa931b37c97d928d44941b4bf"}, - {file = "asyncpg-0.28.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:e9c433f6fcdd61c21a715ee9128a3ca48be8ac16fa07be69262f016bb0f4dbd2"}, - {file = "asyncpg-0.28.0-cp39-cp39-win32.whl", hash = "sha256:41e97248d9076bc8e4849da9e33e051be7ba37cd507cbd51dfe4b2d99c70e3dc"}, - {file = "asyncpg-0.28.0-cp39-cp39-win_amd64.whl", hash = "sha256:3ed77f00c6aacfe9d79e9eff9e21729ce92a4b38e80ea99a58ed382f42ebd55b"}, - {file = "asyncpg-0.28.0.tar.gz", hash = "sha256:7252cdc3acb2f52feaa3664280d3bcd78a46bd6c10bfd681acfffefa1120e278"}, -] - -[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 (>=5.0,<6.0)", "uvloop (>=0.15.3)"] - [[package]] name = "attrs" version = "23.2.0" @@ -508,33 +455,33 @@ lxml = ["lxml"] [[package]] name = "black" -version = "24.4.1" +version = "24.4.2" description = "The uncompromising code formatter." optional = false python-versions = ">=3.8" files = [ - {file = "black-24.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f7749fd0d97ff9415975a1432fac7df89bf13c3833cea079e55fa004d5f28c0"}, - {file = "black-24.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:859f3cc5d2051adadf8fd504a01e02b0fd866d7549fff54bc9202d524d2e8bd7"}, - {file = "black-24.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59271c9c29dfa97f7fda51f56c7809b3f78e72fd8d2205189bbd23022a0618b6"}, - {file = "black-24.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:5ed9c34cba223149b5a0144951a0f33d65507cf82c5449cb3c35fe4b515fea9a"}, - {file = "black-24.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9dae3ae59d6f2dc93700fd5034a3115434686e66fd6e63d4dcaa48d19880f2b0"}, - {file = "black-24.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5f8698974a81af83283eb47644f2711b5261138d6d9180c863fce673cbe04b13"}, - {file = "black-24.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f404b6e77043b23d0321fb7772522b876b6de737ad3cb97d6b156638d68ce81"}, - {file = "black-24.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:c94e52b766477bdcd010b872ba0714d5458536dc9d0734eff6583ba7266ffd89"}, - {file = "black-24.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:962d9e953872cdb83b97bb737ad47244ce2938054dc946685a4cad98520dab38"}, - {file = "black-24.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1d8e3b2486b7dd522b1ab2ba1ec4907f0aa8f5e10a33c4271fb331d1d10b70c"}, - {file = "black-24.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed77e214b785148f57e43ca425b6e0850165144aa727d66ac604e56a70bb7825"}, - {file = "black-24.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:4ef4764437d7eba8386689cd06e1fb5341ee0ae2e9e22582b21178782de7ed94"}, - {file = "black-24.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:92b183f8eef5baf7b20a513abcf982ad616f544f593f6688bb2850d2982911f1"}, - {file = "black-24.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:945abd7b3572add997757c94295bb3e73c6ffaf3366b1f26cb2356a4bffd1dc3"}, - {file = "black-24.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db5154b9e5b478031371d8bc41ff37b33855fa223a6cfba456c9b73fb96f77d4"}, - {file = "black-24.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:afc84c33c1a9aaf3d73140cee776b4ddf73ff429ffe6b7c56dc1c9c10725856d"}, - {file = "black-24.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0889f4eb8b3bdf8b189e41a71cf0dbb8141a98346cd1a2695dea5995d416e940"}, - {file = "black-24.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5bb0143f175db45a55227eefd63e90849d96c266330ba31719e9667d0d5ec3b9"}, - {file = "black-24.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:713a04a78e78f28ef7e8df7a16fe075670ea164860fcef3885e4f3dffc0184b3"}, - {file = "black-24.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:171959bc879637a8cdbc53dc3fddae2a83e151937a28cf605fd175ce61e0e94a"}, - {file = "black-24.4.1-py3-none-any.whl", hash = "sha256:ecbab810604fe02c70b3a08afd39beb599f7cc9afd13e81f5336014133b4fe35"}, - {file = "black-24.4.1.tar.gz", hash = "sha256:5241612dc8cad5b6fd47432b8bd04db80e07cfbc53bb69e9ae18985063bcb8dd"}, + {file = "black-24.4.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:dd1b5a14e417189db4c7b64a6540f31730713d173f0b63e55fabd52d61d8fdce"}, + {file = "black-24.4.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8e537d281831ad0e71007dcdcbe50a71470b978c453fa41ce77186bbe0ed6021"}, + {file = "black-24.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaea3008c281f1038edb473c1aa8ed8143a5535ff18f978a318f10302b254063"}, + {file = "black-24.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:7768a0dbf16a39aa5e9a3ded568bb545c8c2727396d063bbaf847df05b08cd96"}, + {file = "black-24.4.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:257d724c2c9b1660f353b36c802ccece186a30accc7742c176d29c146df6e474"}, + {file = "black-24.4.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:bdde6f877a18f24844e381d45e9947a49e97933573ac9d4345399be37621e26c"}, + {file = "black-24.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e151054aa00bad1f4e1f04919542885f89f5f7d086b8a59e5000e6c616896ffb"}, + {file = "black-24.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:7e122b1c4fb252fd85df3ca93578732b4749d9be076593076ef4d07a0233c3e1"}, + {file = "black-24.4.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:accf49e151c8ed2c0cdc528691838afd217c50412534e876a19270fea1e28e2d"}, + {file = "black-24.4.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:88c57dc656038f1ab9f92b3eb5335ee9b021412feaa46330d5eba4e51fe49b04"}, + {file = "black-24.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be8bef99eb46d5021bf053114442914baeb3649a89dc5f3a555c88737e5e98fc"}, + {file = "black-24.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:415e686e87dbbe6f4cd5ef0fbf764af7b89f9057b97c908742b6008cc554b9c0"}, + {file = "black-24.4.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:bf10f7310db693bb62692609b397e8d67257c55f949abde4c67f9cc574492cc7"}, + {file = "black-24.4.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:98e123f1d5cfd42f886624d84464f7756f60ff6eab89ae845210631714f6db94"}, + {file = "black-24.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48a85f2cb5e6799a9ef05347b476cce6c182d6c71ee36925a6c194d074336ef8"}, + {file = "black-24.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:b1530ae42e9d6d5b670a34db49a94115a64596bc77710b1d05e9801e62ca0a7c"}, + {file = "black-24.4.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:37aae07b029fa0174d39daf02748b379399b909652a806e5708199bd93899da1"}, + {file = "black-24.4.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da33a1a5e49c4122ccdfd56cd021ff1ebc4a1ec4e2d01594fef9b6f267a9e741"}, + {file = "black-24.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef703f83fc32e131e9bcc0a5094cfe85599e7109f896fe8bc96cc402f3eb4b6e"}, + {file = "black-24.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:b9176b9832e84308818a99a561e90aa479e73c523b3f77afd07913380ae2eab7"}, + {file = "black-24.4.2-py3-none-any.whl", hash = "sha256:d36ed1124bb81b32f8614555b34cc4259c3fbc7eec17870e8ff8ded335b58d8c"}, + {file = "black-24.4.2.tar.gz", hash = "sha256:c872b53057f000085da66a19c55d68f6f8ddcac2642392ad3a355878406fbd4d"}, ] [package.dependencies] @@ -572,17 +519,17 @@ css = ["tinycss2 (>=1.1.0,<1.3)"] [[package]] name = "boto3" -version = "1.34.91" +version = "1.34.94" description = "The AWS SDK for Python" optional = false python-versions = ">=3.8" files = [ - {file = "boto3-1.34.91-py3-none-any.whl", hash = "sha256:97fac686c47647db4b44e4789317e4aeecd38511d71e84f8d20abe33eb630ff1"}, - {file = "boto3-1.34.91.tar.gz", hash = "sha256:5077917041adaaae15eeca340289547ef905ca7e11516e9bd22d394fb5057d2a"}, + {file = "boto3-1.34.94-py3-none-any.whl", hash = "sha256:bbb87d641c73462e53b1777083b55c8f13921618ad08757478a8122985c56c13"}, + {file = "boto3-1.34.94.tar.gz", hash = "sha256:22f65b3c9b7a419f8f39c2dddc421e14fab8cbb3bd8a9d467e874237d39f59b1"}, ] [package.dependencies] -botocore = ">=1.34.91,<1.35.0" +botocore = ">=1.34.94,<1.35.0" jmespath = ">=0.7.1,<2.0.0" s3transfer = ">=0.10.0,<0.11.0" @@ -591,13 +538,13 @@ crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] name = "botocore" -version = "1.34.91" +version = "1.34.94" description = "Low-level, data-driven core of boto 3." optional = false python-versions = ">=3.8" files = [ - {file = "botocore-1.34.91-py3-none-any.whl", hash = "sha256:4d1b13f2b1c28ce1743b1e5895ae62bb7e67f892b51882164ea19c27a130852b"}, - {file = "botocore-1.34.91.tar.gz", hash = "sha256:93ef7071292a1b2b9fc26537f8ae3a8227da1177969241939ea3fbdb1a1a1d0c"}, + {file = "botocore-1.34.94-py3-none-any.whl", hash = "sha256:f00a79002e0cb9d6895ecd0919c506402850177d7b6c4d2634fa2da362d95bcb"}, + {file = "botocore-1.34.94.tar.gz", hash = "sha256:99b11be9a28f9051af4c96fa121e9c3f22a86d499abd773c9e868b2a38961bae"}, ] [package.dependencies] @@ -624,13 +571,13 @@ files = [ [[package]] name = "cairocffi" -version = "1.6.1" +version = "1.7.0" description = "cffi-based cairo bindings for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "cairocffi-1.6.1-py3-none-any.whl", hash = "sha256:aa78ee52b9069d7475eeac457389b6275aa92111895d78fbaa2202a52dac112e"}, - {file = "cairocffi-1.6.1.tar.gz", hash = "sha256:78e6bbe47357640c453d0be929fa49cd05cce2e1286f3d2a1ca9cbda7efdb8b7"}, + {file = "cairocffi-1.7.0-py3-none-any.whl", hash = "sha256:1f29a8d41dbda4090c0aa33bcdea64f3b493e95f74a43ea107c4a8a7b7f632ef"}, + {file = "cairocffi-1.7.0.tar.gz", hash = "sha256:7761863603894305f3160eca68452f373433ca8745ab7dd445bd2c6ce50dcab7"}, ] [package.dependencies] @@ -638,7 +585,7 @@ cffi = ">=1.1.0" [package.extras] doc = ["sphinx", "sphinx_rtd_theme"] -test = ["flake8", "isort", "numpy", "pikepdf", "pytest"] +test = ["numpy", "pikepdf", "pytest", "ruff"] xcb = ["xcffib (>=1.4.0)"] [[package]] @@ -1548,13 +1495,13 @@ devel = ["colorama", "json-spec", "jsonschema", "pylint", "pytest", "pytest-benc [[package]] name = "filelock" -version = "3.13.4" +version = "3.14.0" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.4-py3-none-any.whl", hash = "sha256:404e5e9253aa60ad457cae1be07c0f0ca90a63931200a47d9b6a6af84fd7b45f"}, - {file = "filelock-3.13.4.tar.gz", hash = "sha256:d13f466618bfde72bd2c18255e269f72542c6e70e7bac83a0232d6b1cc5c8cf4"}, + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, ] [package.extras] @@ -1883,22 +1830,6 @@ test = ["flake8 (>=5.0)", "ipython", "mock", "mypy", "pandas-stubs", "pytest", " testai = ["numba (>=0.57.1)"] umap-learn = ["dirty-cat (==0.2.0)", "scikit-learn (>=1.0)", "umap-learn"] -[[package]] -name = "graphviz" -version = "0.20.3" -description = "Simple Python interface for Graphviz" -optional = false -python-versions = ">=3.8" -files = [ - {file = "graphviz-0.20.3-py3-none-any.whl", hash = "sha256:81f848f2904515d8cd359cc611faba817598d2feaac4027b266aa3eda7b3dde5"}, - {file = "graphviz-0.20.3.zip", hash = "sha256:09d6bc81e6a9fa392e7ba52135a9d49f1ed62526f96499325930e87ca1b5925d"}, -] - -[package.extras] -dev = ["flake8", "pep8-naming", "tox (>=3)", "twine", "wheel"] -docs = ["sphinx (>=5,<7)", "sphinx-autodoc-typehints", "sphinx-rtd-theme"] -test = ["coverage", "pytest (>=7,<8.1)", "pytest-cov", "pytest-mock (>=3)"] - [[package]] name = "greenlet" version = "3.0.3" @@ -2804,13 +2735,13 @@ test = ["jupyter-server (>=2.0.0)", "pytest (>=7.0)", "pytest-jupyter[server] (> [[package]] name = "jupyterlab" -version = "4.1.6" +version = "4.1.8" description = "JupyterLab computational environment" optional = false python-versions = ">=3.8" files = [ - {file = "jupyterlab-4.1.6-py3-none-any.whl", hash = "sha256:cf3e862bc10dbf4331e4eb37438634f813c238cfc62c71c640b3b3b2caa089a8"}, - {file = "jupyterlab-4.1.6.tar.gz", hash = "sha256:7935f36ba26eb615183a4f5c2bbca5791b5108ce2a00b5505f8cfd100d53648e"}, + {file = "jupyterlab-4.1.8-py3-none-any.whl", hash = "sha256:c3baf3a2f91f89d110ed5786cd18672b9a357129d4e389d2a0dead15e11a4d2c"}, + {file = "jupyterlab-4.1.8.tar.gz", hash = "sha256:3384aded8680e7ce504fd63b8bb89a39df21c9c7694d9e7dc4a68742cdb30f9b"}, ] [package.dependencies] @@ -2822,7 +2753,7 @@ jinja2 = ">=3.0.3" jupyter-core = "*" jupyter-lsp = ">=2.0.0" jupyter-server = ">=2.4.0,<3" -jupyterlab-server = ">=2.19.0,<3" +jupyterlab-server = ">=2.27.1,<3" notebook-shim = ">=0.2" packaging = "*" tomli = {version = ">=1.2.2", markers = "python_version < \"3.11\""} @@ -3017,17 +2948,17 @@ files = [ [[package]] name = "lancedb" -version = "0.6.10" +version = "0.6.11" description = "lancedb" optional = false python-versions = ">=3.8" files = [ - {file = "lancedb-0.6.10-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:c7e10eb5f5fdb22452d7678e9bf3df14e2463331868607067aba4ba19a0f4022"}, - {file = "lancedb-0.6.10-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:3a1548bf3820ff606e4efce840bd0e979206eb1815915fff9f738c1d8e337293"}, - {file = "lancedb-0.6.10-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3874f8aee55c5b4f41b953f4eac28d69c8a9bc10ad992fc7fd2b699a1f4b88ed"}, - {file = "lancedb-0.6.10-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:73c0909ac7ae95d8128d25936fc0ff670cf6d9ae1b44e06ec48f3a60081d61ca"}, - {file = "lancedb-0.6.10-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:750fb23a6eaa7daea241a124be3970447d45ace1c4f894df197e9869d677b6ba"}, - {file = "lancedb-0.6.10-cp38-abi3-win_amd64.whl", hash = "sha256:06a299d91e1d9d2663fea7086efc784bf8643f51ff1532617c4910ec63cd2004"}, + {file = "lancedb-0.6.11-cp38-abi3-macosx_10_15_x86_64.whl", hash = "sha256:79dbc2a79dac7b843e328a3b7eecb1b42f38ad524742111a38efbeaa1f58ddfe"}, + {file = "lancedb-0.6.11-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:bfc6661e1fe5dd75346b4a1980243b4ccecd2b0ad991f8becc6e506a608c2d8a"}, + {file = "lancedb-0.6.11-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0998c2dae676c24b95d492358f80ef6e5100b86335b96bf402af3f28f7ec4f3b"}, + {file = "lancedb-0.6.11-cp38-abi3-manylinux_2_24_aarch64.whl", hash = "sha256:b6b289599c4c6a61a70da89d4c3201abec7483d0e03573506014af2dcddfe0c4"}, + {file = "lancedb-0.6.11-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:d789d5a181c4bc42650567cb63ce2772ed902046b08e8e401970df284a4df1c1"}, + {file = "lancedb-0.6.11-cp38-abi3-win_amd64.whl", hash = "sha256:ea12fc94545afb03933d080cce593491e593ab95cbfddf05ab7183bce2bc8d62"}, ] [package.dependencies] @@ -3420,13 +3351,13 @@ pygments = ">2.12.0" [[package]] name = "mkdocs-material" -version = "9.5.19" +version = "9.5.20" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.19-py3-none-any.whl", hash = "sha256:ea96e150b6c95f5e4ffe47d78bb712c7bacdd91d2a0bec47f46b6fa0705a86ec"}, - {file = "mkdocs_material-9.5.19.tar.gz", hash = "sha256:7473e06e17e23af608a30ef583fdde8f36389dd3ef56b1d503eed54c89c9618c"}, + {file = "mkdocs_material-9.5.20-py3-none-any.whl", hash = "sha256:ad0094a7597bcb5d0cc3e8e543a10927c2581f7f647b9bb4861600f583180f9b"}, + {file = "mkdocs_material-9.5.20.tar.gz", hash = "sha256:986eef0250d22f70fb06ce0f4eac64cc92bd797a589ec3892ce31fad976fe3da"}, ] [package.dependencies] @@ -3773,13 +3704,13 @@ test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>= [[package]] name = "nbconvert" -version = "7.16.3" +version = "7.16.4" description = "Converting Jupyter Notebooks (.ipynb files) to other formats. Output formats include asciidoc, html, latex, markdown, pdf, py, rst, script. nbconvert can be used both as a Python library (`import nbconvert`) or as a command line tool (invoked as `jupyter nbconvert ...`)." optional = false python-versions = ">=3.8" files = [ - {file = "nbconvert-7.16.3-py3-none-any.whl", hash = "sha256:ddeff14beeeedf3dd0bc506623e41e4507e551736de59df69a91f86700292b3b"}, - {file = "nbconvert-7.16.3.tar.gz", hash = "sha256:a6733b78ce3d47c3f85e504998495b07e6ea9cf9bf6ec1c98dda63ec6ad19142"}, + {file = "nbconvert-7.16.4-py3-none-any.whl", hash = "sha256:05873c620fe520b6322bf8a5ad562692343fe3452abda5765c7a34b7d1aa3eb3"}, + {file = "nbconvert-7.16.4.tar.gz", hash = "sha256:86ca91ba266b0a448dc96fa6c5b9d98affabde2867b363258703536807f9f7f4"}, ] [package.dependencies] @@ -3801,9 +3732,9 @@ tinycss2 = "*" traitlets = ">=5.1" [package.extras] -all = ["nbconvert[docs,qtpdf,serve,test,webpdf]"] +all = ["flaky", "ipykernel", "ipython", "ipywidgets (>=7.5)", "myst-parser", "nbsphinx (>=0.2.12)", "playwright", "pydata-sphinx-theme", "pyqtwebengine (>=5.15)", "pytest (>=7)", "sphinx (==5.0.2)", "sphinxcontrib-spelling", "tornado (>=6.1)"] docs = ["ipykernel", "ipython", "myst-parser", "nbsphinx (>=0.2.12)", "pydata-sphinx-theme", "sphinx (==5.0.2)", "sphinxcontrib-spelling"] -qtpdf = ["nbconvert[qtpng]"] +qtpdf = ["pyqtwebengine (>=5.15)"] qtpng = ["pyqtwebengine (>=5.15)"] serve = ["tornado (>=6.1)"] test = ["flaky", "ipykernel", "ipywidgets (>=7.5)", "pytest (>=7)"] @@ -3832,12 +3763,12 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "neo4j" -version = "5.19.0" +version = "5.20.0" description = "Neo4j Bolt driver for Python" optional = false python-versions = ">=3.7" files = [ - {file = "neo4j-5.19.0.tar.gz", hash = "sha256:23704f604214174f3b7d15a38653a1462809986019dfdaf773ff7ca4e1b9e2de"}, + {file = "neo4j-5.20.0.tar.gz", hash = "sha256:c59e54a0c0fa1f109f1d2fa5293c29c2bb30ba388b4f9dd9656919793c10063a"}, ] [package.dependencies] @@ -4236,7 +4167,6 @@ optional = false python-versions = ">=3.9" files = [ {file = "pandas-2.2.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:90c6fca2acf139569e74e8781709dccb6fe25940488755716d1d354d6bc58bce"}, - {file = "pandas-2.2.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c7adfc142dac335d8c1e0dcbd37eb8617eac386596eb9e1a1b77791cf2498238"}, {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4abfe0be0d7221be4f12552995e58723c7422c80a659da13ca382697de830c08"}, {file = "pandas-2.2.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8635c16bf3d99040fdf3ca3db669a7250ddf49c55dc4aa8fe0ae0fa8d6dcc1f0"}, {file = "pandas-2.2.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:40ae1dffb3967a52203105a077415a86044a2bea011b5f321c6aa64b379a3f51"}, @@ -4257,7 +4187,6 @@ files = [ {file = "pandas-2.2.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:43498c0bdb43d55cb162cdc8c06fac328ccb5d2eabe3cadeb3529ae6f0517c32"}, {file = "pandas-2.2.2-cp312-cp312-win_amd64.whl", hash = "sha256:d187d355ecec3629624fccb01d104da7d7f391db0311145817525281e2804d23"}, {file = "pandas-2.2.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:0ca6377b8fca51815f382bd0b697a0814c8bda55115678cbc94c30aacbb6eff2"}, - {file = "pandas-2.2.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9057e6aa78a584bc93a13f0a9bf7e753a5e9770a30b4d758b8d5f2a62a9433cd"}, {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:001910ad31abc7bf06f49dcc903755d2f7f3a9186c0c040b827e522e9cef0863"}, {file = "pandas-2.2.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66b479b0bd07204e37583c191535505410daa8df638fd8e75ae1b383851fe921"}, {file = "pandas-2.2.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a77e9d1c386196879aa5eb712e77461aaee433e54c68cf253053a73b7e49c33a"}, @@ -4999,13 +4928,13 @@ testutils = ["gitpython (>3)"] [[package]] name = "pymdown-extensions" -version = "10.8" +version = "10.8.1" description = "Extension pack for Python Markdown." optional = false python-versions = ">=3.8" files = [ - {file = "pymdown_extensions-10.8-py3-none-any.whl", hash = "sha256:3539003ff0d5e219ba979d2dc961d18fcad5ac259e66c764482e8347b4c0503c"}, - {file = "pymdown_extensions-10.8.tar.gz", hash = "sha256:91ca336caf414e1e5e0626feca86e145de9f85a3921a7bcbd32890b51738c428"}, + {file = "pymdown_extensions-10.8.1-py3-none-any.whl", hash = "sha256:f938326115884f48c6059c67377c46cf631c733ef3629b6eed1349989d1b30cb"}, + {file = "pymdown_extensions-10.8.1.tar.gz", hash = "sha256:3ab1db5c9e21728dabf75192d71471f8e50f216627e9a1fa9535ecb0231b9940"}, ] [package.dependencies] @@ -5085,13 +5014,13 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no [[package]] name = "pytest-asyncio" -version = "0.21.1" +version = "0.21.2" description = "Pytest support for asyncio" optional = false python-versions = ">=3.7" files = [ - {file = "pytest-asyncio-0.21.1.tar.gz", hash = "sha256:40a7eae6dded22c7b604986855ea48400ab15b069ae38116e8c01238e9eeb64d"}, - {file = "pytest_asyncio-0.21.1-py3-none-any.whl", hash = "sha256:8666c1c8ac02631d7c51ba282e0c69a8a452b211ffedf2599099845da5c5c37b"}, + {file = "pytest_asyncio-0.21.2-py3-none-any.whl", hash = "sha256:ab664c88bb7998f711d8039cacd4884da6430886ae8bbd4eded552ed2004f16b"}, + {file = "pytest_asyncio-0.21.2.tar.gz", hash = "sha256:d67738fc232b94b326b9d060750beb16e0074210b98dd8b58a5239fa2a154f45"}, ] [package.dependencies] @@ -5230,6 +5159,7 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, + {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, @@ -5415,24 +5345,6 @@ files = [ [package.extras] test = ["pytest (>=3.0)", "pytest-asyncio"] -[[package]] -name = "redis" -version = "5.0.4" -description = "Python client for Redis database and key-value store" -optional = false -python-versions = ">=3.7" -files = [ - {file = "redis-5.0.4-py3-none-any.whl", hash = "sha256:7adc2835c7a9b5033b7ad8f8918d09b7344188228809c98df07af226d39dec91"}, - {file = "redis-5.0.4.tar.gz", hash = "sha256:ec31f2ed9675cc54c21ba854cfe0462e6faf1d83c8ce5944709db8a4700b9c61"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} - -[package.extras] -hiredis = ["hiredis (>=1.0.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] - [[package]] name = "referencing" version = "0.35.0" @@ -5450,104 +5362,90 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2024.4.16" +version = "2024.4.28" description = "Alternative regular expression module, to replace re." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fb83cc090eac63c006871fd24db5e30a1f282faa46328572661c0a24a2323a08"}, - {file = "regex-2024.4.16-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8c91e1763696c0eb66340c4df98623c2d4e77d0746b8f8f2bee2c6883fd1fe18"}, - {file = "regex-2024.4.16-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10188fe732dec829c7acca7422cdd1bf57d853c7199d5a9e96bb4d40db239c73"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:956b58d692f235cfbf5b4f3abd6d99bf102f161ccfe20d2fd0904f51c72c4c66"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a70b51f55fd954d1f194271695821dd62054d949efd6368d8be64edd37f55c86"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c02fcd2bf45162280613d2e4a1ca3ac558ff921ae4e308ecb307650d3a6ee51"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c4ed75ea6892a56896d78f11006161eea52c45a14994794bcfa1654430984b22"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd727ad276bb91928879f3aa6396c9a1d34e5e180dce40578421a691eeb77f47"}, - {file = "regex-2024.4.16-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7cbc5d9e8a1781e7be17da67b92580d6ce4dcef5819c1b1b89f49d9678cc278c"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:78fddb22b9ef810b63ef341c9fcf6455232d97cfe03938cbc29e2672c436670e"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:445ca8d3c5a01309633a0c9db57150312a181146315693273e35d936472df912"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:95399831a206211d6bc40224af1c635cb8790ddd5c7493e0bd03b85711076a53"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:7731728b6568fc286d86745f27f07266de49603a6fdc4d19c87e8c247be452af"}, - {file = "regex-2024.4.16-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4facc913e10bdba42ec0aee76d029aedda628161a7ce4116b16680a0413f658a"}, - {file = "regex-2024.4.16-cp310-cp310-win32.whl", hash = "sha256:911742856ce98d879acbea33fcc03c1d8dc1106234c5e7d068932c945db209c0"}, - {file = "regex-2024.4.16-cp310-cp310-win_amd64.whl", hash = "sha256:e0a2df336d1135a0b3a67f3bbf78a75f69562c1199ed9935372b82215cddd6e2"}, - {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1210365faba7c2150451eb78ec5687871c796b0f1fa701bfd2a4a25420482d26"}, - {file = "regex-2024.4.16-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9ab40412f8cd6f615bfedea40c8bf0407d41bf83b96f6fc9ff34976d6b7037fd"}, - {file = "regex-2024.4.16-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fd80d1280d473500d8086d104962a82d77bfbf2b118053824b7be28cd5a79ea5"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bb966fdd9217e53abf824f437a5a2d643a38d4fd5fd0ca711b9da683d452969"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:20b7a68444f536365af42a75ccecb7ab41a896a04acf58432db9e206f4e525d6"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b74586dd0b039c62416034f811d7ee62810174bb70dffcca6439f5236249eb09"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c8290b44d8b0af4e77048646c10c6e3aa583c1ca67f3b5ffb6e06cf0c6f0f89"}, - {file = "regex-2024.4.16-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2d80a6749724b37853ece57988b39c4e79d2b5fe2869a86e8aeae3bbeef9eb0"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:3a1018e97aeb24e4f939afcd88211ace472ba566efc5bdf53fd8fd7f41fa7170"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8d015604ee6204e76569d2f44e5a210728fa917115bef0d102f4107e622b08d5"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:3d5ac5234fb5053850d79dd8eb1015cb0d7d9ed951fa37aa9e6249a19aa4f336"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:0a38d151e2cdd66d16dab550c22f9521ba79761423b87c01dae0a6e9add79c0d"}, - {file = "regex-2024.4.16-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:159dc4e59a159cb8e4e8f8961eb1fa5d58f93cb1acd1701d8aff38d45e1a84a6"}, - {file = "regex-2024.4.16-cp311-cp311-win32.whl", hash = "sha256:ba2336d6548dee3117520545cfe44dc28a250aa091f8281d28804aa8d707d93d"}, - {file = "regex-2024.4.16-cp311-cp311-win_amd64.whl", hash = "sha256:8f83b6fd3dc3ba94d2b22717f9c8b8512354fd95221ac661784df2769ea9bba9"}, - {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:80b696e8972b81edf0af2a259e1b2a4a661f818fae22e5fa4fa1a995fb4a40fd"}, - {file = "regex-2024.4.16-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:d61ae114d2a2311f61d90c2ef1358518e8f05eafda76eaf9c772a077e0b465ec"}, - {file = "regex-2024.4.16-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8ba6745440b9a27336443b0c285d705ce73adb9ec90e2f2004c64d95ab5a7598"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6295004b2dd37b0835ea5c14a33e00e8cfa3c4add4d587b77287825f3418d310"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4aba818dcc7263852aabb172ec27b71d2abca02a593b95fa79351b2774eb1d2b"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d0800631e565c47520aaa04ae38b96abc5196fe8b4aa9bd864445bd2b5848a7a"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08dea89f859c3df48a440dbdcd7b7155bc675f2fa2ec8c521d02dc69e877db70"}, - {file = "regex-2024.4.16-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eeaa0b5328b785abc344acc6241cffde50dc394a0644a968add75fcefe15b9d4"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4e819a806420bc010489f4e741b3036071aba209f2e0989d4750b08b12a9343f"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:c2d0e7cbb6341e830adcbfa2479fdeebbfbb328f11edd6b5675674e7a1e37730"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:91797b98f5e34b6a49f54be33f72e2fb658018ae532be2f79f7c63b4ae225145"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:d2da13568eff02b30fd54fccd1e042a70fe920d816616fda4bf54ec705668d81"}, - {file = "regex-2024.4.16-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:370c68dc5570b394cbaadff50e64d705f64debed30573e5c313c360689b6aadc"}, - {file = "regex-2024.4.16-cp312-cp312-win32.whl", hash = "sha256:904c883cf10a975b02ab3478bce652f0f5346a2c28d0a8521d97bb23c323cc8b"}, - {file = "regex-2024.4.16-cp312-cp312-win_amd64.whl", hash = "sha256:785c071c982dce54d44ea0b79cd6dfafddeccdd98cfa5f7b86ef69b381b457d9"}, - {file = "regex-2024.4.16-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e2f142b45c6fed48166faeb4303b4b58c9fcd827da63f4cf0a123c3480ae11fb"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e87ab229332ceb127a165612d839ab87795972102cb9830e5f12b8c9a5c1b508"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:81500ed5af2090b4a9157a59dbc89873a25c33db1bb9a8cf123837dcc9765047"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b340cccad138ecb363324aa26893963dcabb02bb25e440ebdf42e30963f1a4e0"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c72608e70f053643437bd2be0608f7f1c46d4022e4104d76826f0839199347a"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a01fe2305e6232ef3e8f40bfc0f0f3a04def9aab514910fa4203bafbc0bb4682"}, - {file = "regex-2024.4.16-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:03576e3a423d19dda13e55598f0fd507b5d660d42c51b02df4e0d97824fdcae3"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:549c3584993772e25f02d0656ac48abdda73169fe347263948cf2b1cead622f3"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:34422d5a69a60b7e9a07a690094e824b66f5ddc662a5fc600d65b7c174a05f04"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:5f580c651a72b75c39e311343fe6875d6f58cf51c471a97f15a938d9fe4e0d37"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:3399dd8a7495bbb2bacd59b84840eef9057826c664472e86c91d675d007137f5"}, - {file = "regex-2024.4.16-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d1f86f3f4e2388aa3310b50694ac44daefbd1681def26b4519bd050a398dc5a"}, - {file = "regex-2024.4.16-cp37-cp37m-win32.whl", hash = "sha256:dd5acc0a7d38fdc7a3a6fd3ad14c880819008ecb3379626e56b163165162cc46"}, - {file = "regex-2024.4.16-cp37-cp37m-win_amd64.whl", hash = "sha256:ba8122e3bb94ecda29a8de4cf889f600171424ea586847aa92c334772d200331"}, - {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:743deffdf3b3481da32e8a96887e2aa945ec6685af1cfe2bcc292638c9ba2f48"}, - {file = "regex-2024.4.16-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7571f19f4a3fd00af9341c7801d1ad1967fc9c3f5e62402683047e7166b9f2b4"}, - {file = "regex-2024.4.16-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:df79012ebf6f4efb8d307b1328226aef24ca446b3ff8d0e30202d7ebcb977a8c"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e757d475953269fbf4b441207bb7dbdd1c43180711b6208e129b637792ac0b93"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4313ab9bf6a81206c8ac28fdfcddc0435299dc88cad12cc6305fd0e78b81f9e4"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d83c2bc678453646f1a18f8db1e927a2d3f4935031b9ad8a76e56760461105dd"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9df1bfef97db938469ef0a7354b2d591a2d438bc497b2c489471bec0e6baf7c4"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62120ed0de69b3649cc68e2965376048793f466c5a6c4370fb27c16c1beac22d"}, - {file = "regex-2024.4.16-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c2ef6f7990b6e8758fe48ad08f7e2f66c8f11dc66e24093304b87cae9037bb4a"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8fc6976a3395fe4d1fbeb984adaa8ec652a1e12f36b56ec8c236e5117b585427"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:03e68f44340528111067cecf12721c3df4811c67268b897fbe695c95f860ac42"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:ec7e0043b91115f427998febaa2beb82c82df708168b35ece3accb610b91fac1"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:c21fc21a4c7480479d12fd8e679b699f744f76bb05f53a1d14182b31f55aac76"}, - {file = "regex-2024.4.16-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:12f6a3f2f58bb7344751919a1876ee1b976fe08b9ffccb4bbea66f26af6017b9"}, - {file = "regex-2024.4.16-cp38-cp38-win32.whl", hash = "sha256:479595a4fbe9ed8f8f72c59717e8cf222da2e4c07b6ae5b65411e6302af9708e"}, - {file = "regex-2024.4.16-cp38-cp38-win_amd64.whl", hash = "sha256:0534b034fba6101611968fae8e856c1698da97ce2efb5c2b895fc8b9e23a5834"}, - {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a7ccdd1c4a3472a7533b0a7aa9ee34c9a2bef859ba86deec07aff2ad7e0c3b94"}, - {file = "regex-2024.4.16-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6f2f017c5be19984fbbf55f8af6caba25e62c71293213f044da3ada7091a4455"}, - {file = "regex-2024.4.16-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:803b8905b52de78b173d3c1e83df0efb929621e7b7c5766c0843704d5332682f"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:684008ec44ad275832a5a152f6e764bbe1914bea10968017b6feaecdad5736e0"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:65436dce9fdc0aeeb0a0effe0839cb3d6a05f45aa45a4d9f9c60989beca78b9c"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea355eb43b11764cf799dda62c658c4d2fdb16af41f59bb1ccfec517b60bcb07"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98c1165f3809ce7774f05cb74e5408cd3aa93ee8573ae959a97a53db3ca3180d"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cccc79a9be9b64c881f18305a7c715ba199e471a3973faeb7ba84172abb3f317"}, - {file = "regex-2024.4.16-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00169caa125f35d1bca6045d65a662af0202704489fada95346cfa092ec23f39"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6cc38067209354e16c5609b66285af17a2863a47585bcf75285cab33d4c3b8df"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:23cff1b267038501b179ccbbd74a821ac4a7192a1852d1d558e562b507d46013"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:b9d320b3bf82a39f248769fc7f188e00f93526cc0fe739cfa197868633d44701"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:89ec7f2c08937421bbbb8b48c54096fa4f88347946d4747021ad85f1b3021b3c"}, - {file = "regex-2024.4.16-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4918fd5f8b43aa7ec031e0fef1ee02deb80b6afd49c85f0790be1dc4ce34cb50"}, - {file = "regex-2024.4.16-cp39-cp39-win32.whl", hash = "sha256:684e52023aec43bdf0250e843e1fdd6febbe831bd9d52da72333fa201aaa2335"}, - {file = "regex-2024.4.16-cp39-cp39-win_amd64.whl", hash = "sha256:e697e1c0238133589e00c244a8b676bc2cfc3ab4961318d902040d099fec7483"}, - {file = "regex-2024.4.16.tar.gz", hash = "sha256:fa454d26f2e87ad661c4f0c5a5fe4cf6aab1e307d1b94f16ffdfcb089ba685c0"}, + {file = "regex-2024.4.28-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd196d056b40af073d95a2879678585f0b74ad35190fac04ca67954c582c6b61"}, + {file = "regex-2024.4.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8bb381f777351bd534462f63e1c6afb10a7caa9fa2a421ae22c26e796fe31b1f"}, + {file = "regex-2024.4.28-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:47af45b6153522733aa6e92543938e97a70ce0900649ba626cf5aad290b737b6"}, + {file = "regex-2024.4.28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99d6a550425cc51c656331af0e2b1651e90eaaa23fb4acde577cf15068e2e20f"}, + {file = "regex-2024.4.28-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf29304a8011feb58913c382902fde3395957a47645bf848eea695839aa101b7"}, + {file = "regex-2024.4.28-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:92da587eee39a52c91aebea8b850e4e4f095fe5928d415cb7ed656b3460ae79a"}, + {file = "regex-2024.4.28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6277d426e2f31bdbacb377d17a7475e32b2d7d1f02faaecc48d8e370c6a3ff31"}, + {file = "regex-2024.4.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28e1f28d07220c0f3da0e8fcd5a115bbb53f8b55cecf9bec0c946eb9a059a94c"}, + {file = "regex-2024.4.28-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aaa179975a64790c1f2701ac562b5eeb733946eeb036b5bcca05c8d928a62f10"}, + {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6f435946b7bf7a1b438b4e6b149b947c837cb23c704e780c19ba3e6855dbbdd3"}, + {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:19d6c11bf35a6ad077eb23852827f91c804eeb71ecb85db4ee1386825b9dc4db"}, + {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:fdae0120cddc839eb8e3c15faa8ad541cc6d906d3eb24d82fb041cfe2807bc1e"}, + {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e672cf9caaf669053121f1766d659a8813bd547edef6e009205378faf45c67b8"}, + {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f57515750d07e14743db55d59759893fdb21d2668f39e549a7d6cad5d70f9fea"}, + {file = "regex-2024.4.28-cp310-cp310-win32.whl", hash = "sha256:a1409c4eccb6981c7baabc8888d3550df518add6e06fe74fa1d9312c1838652d"}, + {file = "regex-2024.4.28-cp310-cp310-win_amd64.whl", hash = "sha256:1f687a28640f763f23f8a9801fe9e1b37338bb1ca5d564ddd41619458f1f22d1"}, + {file = "regex-2024.4.28-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:84077821c85f222362b72fdc44f7a3a13587a013a45cf14534df1cbbdc9a6796"}, + {file = "regex-2024.4.28-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b45d4503de8f4f3dc02f1d28a9b039e5504a02cc18906cfe744c11def942e9eb"}, + {file = "regex-2024.4.28-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:457c2cd5a646dd4ed536c92b535d73548fb8e216ebee602aa9f48e068fc393f3"}, + {file = "regex-2024.4.28-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b51739ddfd013c6f657b55a508de8b9ea78b56d22b236052c3a85a675102dc6"}, + {file = "regex-2024.4.28-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:459226445c7d7454981c4c0ce0ad1a72e1e751c3e417f305722bbcee6697e06a"}, + {file = "regex-2024.4.28-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:670fa596984b08a4a769491cbdf22350431970d0112e03d7e4eeaecaafcd0fec"}, + {file = "regex-2024.4.28-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe00f4fe11c8a521b173e6324d862ee7ee3412bf7107570c9b564fe1119b56fb"}, + {file = "regex-2024.4.28-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36f392dc7763fe7924575475736bddf9ab9f7a66b920932d0ea50c2ded2f5636"}, + {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:23a412b7b1a7063f81a742463f38821097b6a37ce1e5b89dd8e871d14dbfd86b"}, + {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f1d6e4b7b2ae3a6a9df53efbf199e4bfcff0959dbdb5fd9ced34d4407348e39a"}, + {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:499334ad139557de97cbc4347ee921c0e2b5e9c0f009859e74f3f77918339257"}, + {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:0940038bec2fe9e26b203d636c44d31dd8766abc1fe66262da6484bd82461ccf"}, + {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:66372c2a01782c5fe8e04bff4a2a0121a9897e19223d9eab30c54c50b2ebeb7f"}, + {file = "regex-2024.4.28-cp311-cp311-win32.whl", hash = "sha256:c77d10ec3c1cf328b2f501ca32583625987ea0f23a0c2a49b37a39ee5c4c4630"}, + {file = "regex-2024.4.28-cp311-cp311-win_amd64.whl", hash = "sha256:fc0916c4295c64d6890a46e02d4482bb5ccf33bf1a824c0eaa9e83b148291f90"}, + {file = "regex-2024.4.28-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:08a1749f04fee2811c7617fdd46d2e46d09106fa8f475c884b65c01326eb15c5"}, + {file = "regex-2024.4.28-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b8eb28995771c087a73338f695a08c9abfdf723d185e57b97f6175c5051ff1ae"}, + {file = "regex-2024.4.28-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dd7ef715ccb8040954d44cfeff17e6b8e9f79c8019daae2fd30a8806ef5435c0"}, + {file = "regex-2024.4.28-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb0315a2b26fde4005a7c401707c5352df274460f2f85b209cf6024271373013"}, + {file = "regex-2024.4.28-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f2fc053228a6bd3a17a9b0a3f15c3ab3cf95727b00557e92e1cfe094b88cc662"}, + {file = "regex-2024.4.28-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fe9739a686dc44733d52d6e4f7b9c77b285e49edf8570754b322bca6b85b4cc"}, + {file = "regex-2024.4.28-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74fcf77d979364f9b69fcf8200849ca29a374973dc193a7317698aa37d8b01c"}, + {file = "regex-2024.4.28-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:965fd0cf4694d76f6564896b422724ec7b959ef927a7cb187fc6b3f4e4f59833"}, + {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2fef0b38c34ae675fcbb1b5db760d40c3fc3612cfa186e9e50df5782cac02bcd"}, + {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bc365ce25f6c7c5ed70e4bc674f9137f52b7dd6a125037f9132a7be52b8a252f"}, + {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ac69b394764bb857429b031d29d9604842bc4cbfd964d764b1af1868eeebc4f0"}, + {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:144a1fc54765f5c5c36d6d4b073299832aa1ec6a746a6452c3ee7b46b3d3b11d"}, + {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2630ca4e152c221072fd4a56d4622b5ada876f668ecd24d5ab62544ae6793ed6"}, + {file = "regex-2024.4.28-cp312-cp312-win32.whl", hash = "sha256:7f3502f03b4da52bbe8ba962621daa846f38489cae5c4a7b5d738f15f6443d17"}, + {file = "regex-2024.4.28-cp312-cp312-win_amd64.whl", hash = "sha256:0dd3f69098511e71880fb00f5815db9ed0ef62c05775395968299cb400aeab82"}, + {file = "regex-2024.4.28-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:374f690e1dd0dbdcddea4a5c9bdd97632cf656c69113f7cd6a361f2a67221cb6"}, + {file = "regex-2024.4.28-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f87ae6b96374db20f180eab083aafe419b194e96e4f282c40191e71980c666"}, + {file = "regex-2024.4.28-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5dbc1bcc7413eebe5f18196e22804a3be1bfdfc7e2afd415e12c068624d48247"}, + {file = "regex-2024.4.28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f85151ec5a232335f1be022b09fbbe459042ea1951d8a48fef251223fc67eee1"}, + {file = "regex-2024.4.28-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57ba112e5530530fd175ed550373eb263db4ca98b5f00694d73b18b9a02e7185"}, + {file = "regex-2024.4.28-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:224803b74aab56aa7be313f92a8d9911dcade37e5f167db62a738d0c85fdac4b"}, + {file = "regex-2024.4.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a54a047b607fd2d2d52a05e6ad294602f1e0dec2291152b745870afc47c1397"}, + {file = "regex-2024.4.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a2a512d623f1f2d01d881513af9fc6a7c46e5cfffb7dc50c38ce959f9246c94"}, + {file = "regex-2024.4.28-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c06bf3f38f0707592898428636cbb75d0a846651b053a1cf748763e3063a6925"}, + {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1031a5e7b048ee371ab3653aad3030ecfad6ee9ecdc85f0242c57751a05b0ac4"}, + {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d7a353ebfa7154c871a35caca7bfd8f9e18666829a1dc187115b80e35a29393e"}, + {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7e76b9cfbf5ced1aca15a0e5b6f229344d9b3123439ffce552b11faab0114a02"}, + {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5ce479ecc068bc2a74cb98dd8dba99e070d1b2f4a8371a7dfe631f85db70fe6e"}, + {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7d77b6f63f806578c604dca209280e4c54f0fa9a8128bb8d2cc5fb6f99da4150"}, + {file = "regex-2024.4.28-cp38-cp38-win32.whl", hash = "sha256:d84308f097d7a513359757c69707ad339da799e53b7393819ec2ea36bc4beb58"}, + {file = "regex-2024.4.28-cp38-cp38-win_amd64.whl", hash = "sha256:2cc1b87bba1dd1a898e664a31012725e48af826bf3971e786c53e32e02adae6c"}, + {file = "regex-2024.4.28-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7413167c507a768eafb5424413c5b2f515c606be5bb4ef8c5dee43925aa5718b"}, + {file = "regex-2024.4.28-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:108e2dcf0b53a7c4ab8986842a8edcb8ab2e59919a74ff51c296772e8e74d0ae"}, + {file = "regex-2024.4.28-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f1c5742c31ba7d72f2dedf7968998730664b45e38827637e0f04a2ac7de2f5f1"}, + {file = "regex-2024.4.28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecc6148228c9ae25ce403eade13a0961de1cb016bdb35c6eafd8e7b87ad028b1"}, + {file = "regex-2024.4.28-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7d893c8cf0e2429b823ef1a1d360a25950ed11f0e2a9df2b5198821832e1947"}, + {file = "regex-2024.4.28-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4290035b169578ffbbfa50d904d26bec16a94526071ebec3dadbebf67a26b25e"}, + {file = "regex-2024.4.28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a22ae1cfd82e4ffa2066eb3390777dc79468f866f0625261a93e44cdf6482b"}, + {file = "regex-2024.4.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd24fd140b69f0b0bcc9165c397e9b2e89ecbeda83303abf2a072609f60239e2"}, + {file = "regex-2024.4.28-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:39fb166d2196413bead229cd64a2ffd6ec78ebab83fff7d2701103cf9f4dfd26"}, + {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9301cc6db4d83d2c0719f7fcda37229691745168bf6ae849bea2e85fc769175d"}, + {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c3d389e8d76a49923683123730c33e9553063d9041658f23897f0b396b2386f"}, + {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:99ef6289b62042500d581170d06e17f5353b111a15aa6b25b05b91c6886df8fc"}, + {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:b91d529b47798c016d4b4c1d06cc826ac40d196da54f0de3c519f5a297c5076a"}, + {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:43548ad74ea50456e1c68d3c67fff3de64c6edb85bcd511d1136f9b5376fc9d1"}, + {file = "regex-2024.4.28-cp39-cp39-win32.whl", hash = "sha256:05d9b6578a22db7dedb4df81451f360395828b04f4513980b6bd7a1412c679cc"}, + {file = "regex-2024.4.28-cp39-cp39-win_amd64.whl", hash = "sha256:3986217ec830c2109875be740531feb8ddafe0dfa49767cdcd072ed7e8927962"}, + {file = "regex-2024.4.28.tar.gz", hash = "sha256:83ab366777ea45d58f72593adf35d36ca911ea8bd838483c1823b883a121b0e4"}, ] [[package]] @@ -6263,6 +6161,44 @@ files = [ [package.extras] widechars = ["wcwidth"] +[[package]] +name = "tantivy" +version = "0.21.0" +description = "" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tantivy-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:1782689425d76f9be571e080b0d62a08c932d9811205c522a835f1e206005af6"}, + {file = "tantivy-0.21.0-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:49a974979cdb0d26c483a18d464fa1e1818aa4e56ec8d2fb14e7e2b7c7df22f6"}, + {file = "tantivy-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6efed2f771eaa3a9ad27540d58236a8357737bc84138269617af317558533a"}, + {file = "tantivy-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd2f9a96ed60aa45ea0b97d553665acc691e994dae6d21a07b0b95b9b0a70be0"}, + {file = "tantivy-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:632f35c083093b964707ef1dac124b006e32a18fce6cd354a28ec5a53275bca8"}, + {file = "tantivy-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:726809ec7bb446d616c9303f9ed5595095f9d738792c98350e3a6ef4128cf189"}, + {file = "tantivy-0.21.0-cp311-cp311-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:f26bf2b192d09d6c1cea4dbed2455689d6800e0e462041b41c66bb228a46d7ba"}, + {file = "tantivy-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7d3bcf082fc5086b228c5cdebb27460338459b50e64f02e212bb3ca919c74f7f"}, + {file = "tantivy-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c73be00cf41556295c5f088c3b5de3feb7539ee2ba62440d244c13b71c3ff3c6"}, + {file = "tantivy-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:8ae347af20c970262d2207b1c122fb0a702c35ee3e052773e31aae80f32a759a"}, + {file = "tantivy-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:4639c2b59a818174ad83f4363d4e48092e348908ac1755970fd5352e22917d37"}, + {file = "tantivy-0.21.0-cp312-cp312-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:c2342b4819a386ff4424bfefee5965f791a91192f367a62071ca1ab29525c381"}, + {file = "tantivy-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:521a61248b97c22adf67c06a02b344bb2b231ecf287d2451a76585fbf52d1225"}, + {file = "tantivy-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1050546130ff92618191477e4dea8a8b3a02fb6db83226b21efd2059b153d9fc"}, + {file = "tantivy-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:7aacd0c96b681e6933e276c81cc822b0259c6414088287a4b62c263d529c7109"}, + {file = "tantivy-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:ddc58a4e85d0df2893570b4ec52cb7737bf5245a2c20257c88e9bd22600949b9"}, + {file = "tantivy-0.21.0-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:e8abe45eb4b2c57254e05ad17386a55b8323e1f23fab4f0f9a9b4618e0251381"}, + {file = "tantivy-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c08784ce7b668b08bc1eaab747da6dddb4f82acd7c1e4e41fa3a4126c3590dfb"}, + {file = "tantivy-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3600c365ddc330d28a129e648187f6623a4cb734f3c4a5f430bdb254e536197b"}, + {file = "tantivy-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:d15d375c480f1db7791306a7d1b32943c2ce25f92cc96cb74137f45264867928"}, + {file = "tantivy-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:2f904b52bb21cc3cda744e7ec6c06f37b2721f8c00a21b76700e94c0a8a3178f"}, + {file = "tantivy-0.21.0-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:2122f0845c84bf34607edbf283840458c7714c0ab2b6973a56aee8820cae642d"}, + {file = "tantivy-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e5290d32459e16b496ff0ae95dcb7e41f569b832ce5abf850042a88173c7ca2"}, + {file = "tantivy-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d274e7828ae7307726ace780019f4ab3c5167e1c31ece1a427983cf2ca1d57bc"}, + {file = "tantivy-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:72fdb53814ee9f60d0d80d028bc1de753f130712b4c611afcd80a0992a7ac8a7"}, + {file = "tantivy-0.21.0.tar.gz", hash = "sha256:fe1ea890b2d924417b93ced6036e5f688e606d7b1af9711a0d8ce826172255c2"}, +] + +[package.extras] +dev = ["nox"] + [[package]] name = "tenacity" version = "8.2.3" @@ -6300,13 +6236,13 @@ typing = ["mypy (>=1.6,<2.0)", "traitlets (>=5.11.1)"] [[package]] name = "threadpoolctl" -version = "3.4.0" +version = "3.5.0" description = "threadpoolctl" optional = false python-versions = ">=3.8" files = [ - {file = "threadpoolctl-3.4.0-py3-none-any.whl", hash = "sha256:8f4c689a65b23e5ed825c8436a92b818aac005e0f3715f6a1664d7c7ee29d262"}, - {file = "threadpoolctl-3.4.0.tar.gz", hash = "sha256:f11b491a03661d6dd7ef692dd422ab34185d982466c49c8f98c8f716b5c93196"}, + {file = "threadpoolctl-3.5.0-py3-none-any.whl", hash = "sha256:56c1e26c150397e58c4926da8eeee87533b1e32bef131bd4bf6a2f45f3185467"}, + {file = "threadpoolctl-3.5.0.tar.gz", hash = "sha256:082433502dd922bf738de0d8bcc4fdcbf0979ff44c42bd40f5af8a282f6fa107"}, ] [[package]] @@ -6970,17 +6906,6 @@ files = [ [package.extras] dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] -[[package]] -name = "xmltodict" -version = "0.13.0" -description = "Makes working with XML feel like you are working with JSON" -optional = false -python-versions = ">=3.4" -files = [ - {file = "xmltodict-0.13.0-py2.py3-none-any.whl", hash = "sha256:aa89e8fd76320154a40d19a0df04a4695fb9dc5ba977cbb68ab3e4eb225e7852"}, - {file = "xmltodict-0.13.0.tar.gz", hash = "sha256:341595a488e3e01a85a9d8911d8912fd922ede5fecc4dce437eb4b6c8d037e56"}, -] - [[package]] name = "xxhash" version = "3.4.1" @@ -7217,31 +7142,17 @@ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.link testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] [extras] -athena = ["pyarrow"] -az = [] -bigquery = ["pyarrow"] cli = [] -databricks = [] -dbt = [] duckdb = ["duckdb"] filesystem = [] -gcp = [] -gs = [] -lancedb = [] motherduck = ["duckdb", "pyarrow"] -mssql = [] neo4j = ["neo4j"] notebook = ["overrides"] parquet = ["pyarrow"] -pinecone = [] -postgres = [] -redshift = [] -s3 = [] -snowflake = [] -synapse = ["pyarrow"] +qdrant = ["qdrant-client"] weaviate = ["weaviate-client"] [metadata] lock-version = "2.0" python-versions = ">=3.9.0,<3.12" -content-hash = "9609dfc41209efd1fd5e53fd1b77353cb5bce3244ffdb65f81eee686a68b6fc5" +content-hash = "a374c7915e291ac7e68fe13c2d340c2f534decaa37f407286dae18a3c94bd759" diff --git a/pyproject.toml b/pyproject.toml index d3d5a2da6..e5a7d4688 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -27,10 +27,8 @@ uvicorn = "0.22.0" boto3 = "^1.26.125" gunicorn = "^20.1.0" sqlalchemy = "^2.0.21" -asyncpg = "^0.28.0" instructor = "1.2.1" networkx = "^3.2.1" -graphviz = "^0.20.1" debugpy = "^1.8.0" pyarrow = "^15.0.0" pylint = "^3.0.3" @@ -53,7 +51,6 @@ scikit-learn = "^1.4.1.post1" fastembed = "^0.2.5" pypdf = "^4.1.0" anthropic = "^0.21.3" -xmltodict = "^0.13.0" neo4j = "^5.18.0" jinja2 = "^3.1.3" matplotlib = "^3.8.3" @@ -63,33 +60,19 @@ tiktoken = "^0.6.0" dspy-ai = "2.4.3" posthog = "^3.5.0" lancedb = "^0.6.10" +tantivy = "^0.21.0" [tool.poetry.extras] -dbt = ["dbt-core", "dbt-redshift", "dbt-bigquery", "dbt-duckdb", "dbt-snowflake", "dbt-athena-community", "dbt-databricks"] -gcp = ["grpcio", "google-cloud-bigquery", "db-dtypes", "gcsfs"] -# bigquery is alias on gcp extras -bigquery = ["grpcio", "google-cloud-bigquery", "pyarrow", "db-dtypes", "gcsfs"] -postgres = ["psycopg2-binary", "psycopg2cffi"] -redshift = ["psycopg2-binary", "psycopg2cffi"] parquet = ["pyarrow"] duckdb = ["duckdb"] filesystem = ["s3fs", "botocore"] -s3 = ["s3fs", "botocore"] -gs = ["gcsfs"] -az = ["adlfs"] -snowflake = ["snowflake-connector-python"] motherduck = ["duckdb", "pyarrow"] cli = ["pipdeptree", "cron-descriptor"] -athena = ["pyathena", "pyarrow", "s3fs", "botocore"] weaviate = ["weaviate-client"] -mssql = ["pyodbc"] -synapse = ["pyodbc", "adlfs", "pyarrow"] -databricks = ["databricks-sql-connector"] -lancedb = ["lancedb"] -pinecone = ["pinecone-client"] +qdrant = ["qdrant-client"] neo4j = ["neo4j", "py2neo"] -notebook =[ "ipykernel","overrides", "ipywidgets", "jupyterlab", "jupyterlab_widgets", "jupyterlab-server", "jupyterlab-git"] +notebook = ["ipykernel","overrides", "ipywidgets", "jupyterlab", "jupyterlab_widgets", "jupyterlab-server", "jupyterlab-git"] [tool.poetry.group.dev.dependencies] pytest = "^7.4.0" @@ -110,7 +93,6 @@ mkdocs-redirects = "^1.2.1" [tool.poetry.group.test-docs.dependencies] fastapi = "^0.109.2" -redis = "^5.0.1" diskcache = "^5.6.3" pandas = "^2.2.0" tabulate = "^0.9.0" From 0f9fac11601e91cee94e1d6edb677c47063191c9 Mon Sep 17 00:00:00 2001 From: Boris Arzentar Date: Fri, 3 May 2024 10:43:21 +0200 Subject: [PATCH 2/3] chore: update version to 0.1.7 --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e5a7d4688..6a17883e0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "cognee" -version = "0.1.6" +version = "0.1.7" description = "Cognee - is a library for enriching LLM context with a semantic layer for better understanding and reasoning." authors = ["Vasilije Markovic", "Boris Arzentar"] readme = "README.md" From a5966a5dc0fc3d49b0b7c3be5f3fc4ca97d053e5 Mon Sep 17 00:00:00 2001 From: Boris Arzentar Date: Fri, 3 May 2024 10:48:03 +0200 Subject: [PATCH 3/3] docs: update install instructions --- README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d991a0095..7aa2f845b 100644 --- a/README.md +++ b/README.md @@ -41,14 +41,24 @@ Join our Discord community ## 📦 Installation -With pip: +### With pip +```bash +pip install cognee +``` + +Use Weaviate vector storage: ```bash pip install "cognee[weaviate]" ``` -With poetry: +### With poetry +```bash +poetry add cognee +``` + +Use Weaviate vector storage: ```bash poetry add "cognee[weaviate]" ```