From e28cc025457123c764034fd113da6f3f443004b3 Mon Sep 17 00:00:00 2001 From: Weaviate Git Bot <83967968+weaviate-git-bot@users.noreply.github.com> Date: Tue, 9 Apr 2024 00:45:35 -0500 Subject: [PATCH 001/101] Updated Weaviate Docker image url (auto PR by bot) (#109) * updated the Weaviate Docker image location (automated bot update) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * updated the Weaviate Docker image location (automated bot update) --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- engine/servers/weaviate-single-node/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/servers/weaviate-single-node/docker-compose.yaml b/engine/servers/weaviate-single-node/docker-compose.yaml index 9291687a..e5e9e9ec 100644 --- a/engine/servers/weaviate-single-node/docker-compose.yaml +++ b/engine/servers/weaviate-single-node/docker-compose.yaml @@ -8,7 +8,7 @@ services: - '8090' - --scheme - http - image: semitechnologies/weaviate:1.24.1 + image: cr.weaviate.io/semitechnologies/weaviate:1.24.1 network_mode: host logging: driver: "json-file" From f4436e41f0009be7553f1296c139ca5c9bc00714 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Wed, 10 Apr 2024 23:49:01 -0700 Subject: [PATCH 002/101] pgvector improvements (#98) * pgvector improvements * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Updated Postgres parameters * Use versioned Docker image * Updated pgvector to 0.6.2 --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- engine/clients/pgvector/config.py | 3 +- engine/clients/pgvector/configure.py | 16 ------ engine/clients/pgvector/search.py | 25 ++++------ engine/clients/pgvector/upload.py | 25 +++++++++- .../pgvector-single-node/docker-compose.yaml | 8 ++- .../configurations/pgvector-single-node.json | 50 +++++++------------ 6 files changed, 59 insertions(+), 68 deletions(-) diff --git a/engine/clients/pgvector/config.py b/engine/clients/pgvector/config.py index dc3b8365..5507745c 100644 --- a/engine/clients/pgvector/config.py +++ b/engine/clients/pgvector/config.py @@ -1,6 +1,6 @@ import os -PGVECTOR_PORT = int(os.getenv("PGVECTOR_PORT", 9200)) +PGVECTOR_PORT = int(os.getenv("PGVECTOR_PORT", 5432)) PGVECTOR_DB = os.getenv("PGVECTOR_DB", "postgres") PGVECTOR_USER = os.getenv("PGVECTOR_USER", "postgres") PGVECTOR_PASSWORD = os.getenv("PGVECTOR_PASSWORD", "passwd") @@ -9,6 +9,7 @@ def get_db_config(host, connection_params): return { "host": host or "localhost", + "port": PGVECTOR_PORT, "dbname": PGVECTOR_DB, "user": PGVECTOR_USER, "password": PGVECTOR_PASSWORD, diff --git a/engine/clients/pgvector/configure.py b/engine/clients/pgvector/configure.py index d5587431..0da692b2 100644 --- a/engine/clients/pgvector/configure.py +++ b/engine/clients/pgvector/configure.py @@ -9,11 +9,6 @@ class PgVectorConfigurator(BaseConfigurator): - DISTANCE_MAPPING = { - Distance.L2: "vector_l2_ops", - Distance.COSINE: "vector_cosine_ops", - } - def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) self.conn = psycopg.connect(**get_db_config(host, connection_params)) @@ -38,17 +33,6 @@ def recreate(self, dataset: Dataset, collection_params): ) self.conn.execute("ALTER TABLE items ALTER COLUMN embedding SET STORAGE PLAIN") - try: - hnsw_distance_type = self.DISTANCE_MAPPING[dataset.config.distance] - except KeyError: - raise IncompatibilityError( - f"Unsupported distance metric: {dataset.config.distance}" - ) - - self.conn.execute( - f"CREATE INDEX on items USING hnsw(embedding {hnsw_distance_type}) WITH (m = {collection_params['hnsw_config']['m']}, ef_construction = {collection_params['hnsw_config']['ef_construct']})" - ) - self.conn.close() def delete_client(self): diff --git a/engine/clients/pgvector/search.py b/engine/clients/pgvector/search.py index fa8bde5a..62f53035 100644 --- a/engine/clients/pgvector/search.py +++ b/engine/clients/pgvector/search.py @@ -23,24 +23,19 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.conn = psycopg.connect(**get_db_config(host, connection_params)) register_vector(cls.conn) cls.cur = cls.conn.cursor() - cls.distance = distance - cls.search_params = search_params["search_params"] - - @classmethod - def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: - cls.cur.execute(f"SET hnsw.ef_search = {cls.search_params['hnsw_ef']}") - - if cls.distance == Distance.COSINE: - query = f"SELECT id, embedding <=> %s AS _score FROM items ORDER BY _score LIMIT {top};" - elif cls.distance == Distance.L2: - query = f"SELECT id, embedding <-> %s AS _score FROM items ORDER BY _score LIMIT {top};" + cls.cur.execute( + f"SET hnsw.ef_search = {search_params['search_params']['hnsw_ef']}" + ) + if distance == Distance.COSINE: + cls.query = f"SELECT id, embedding <=> %s AS _score FROM items ORDER BY _score LIMIT %s" + elif distance == Distance.L2: + cls.query = f"SELECT id, embedding <-> %s AS _score FROM items ORDER BY _score LIMIT %s" else: raise NotImplementedError(f"Unsupported distance metric {cls.distance}") - cls.cur.execute( - query, - (np.array(vector),), - ) + @classmethod + def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: + cls.cur.execute(cls.query, (np.array(vector), top), binary=True, prepare=True) return cls.cur.fetchall() @classmethod diff --git a/engine/clients/pgvector/upload.py b/engine/clients/pgvector/upload.py index 8d59ee7f..c3921e95 100644 --- a/engine/clients/pgvector/upload.py +++ b/engine/clients/pgvector/upload.py @@ -4,11 +4,16 @@ import psycopg from pgvector.psycopg import register_vector +from engine.base_client.distances import Distance from engine.base_client.upload import BaseUploader from engine.clients.pgvector.config import get_db_config class PgVectorUploader(BaseUploader): + DISTANCE_MAPPING = { + Distance.L2: "vector_l2_ops", + Distance.COSINE: "vector_cosine_ops", + } conn = None cur = None upload_params = {} @@ -27,10 +32,28 @@ def upload_batch( vectors = np.array(vectors) # Copy is faster than insert - with cls.cur.copy("COPY items (id, embedding) FROM STDIN") as copy: + with cls.cur.copy( + "COPY items (id, embedding) FROM STDIN WITH (FORMAT BINARY)" + ) as copy: + copy.set_types(["integer", "vector"]) for i, embedding in zip(ids, vectors): copy.write_row((i, embedding)) + @classmethod + def post_upload(cls, distance): + try: + hnsw_distance_type = cls.DISTANCE_MAPPING[distance] + except KeyError: + raise IncompatibilityError(f"Unsupported distance metric: {distance}") + + cls.conn.execute("SET max_parallel_workers = 128") + cls.conn.execute("SET max_parallel_maintenance_workers = 128") + cls.conn.execute( + f"CREATE INDEX ON items USING hnsw (embedding {hnsw_distance_type}) WITH (m = {cls.upload_params['hnsw_config']['m']}, ef_construction = {cls.upload_params['hnsw_config']['ef_construct']})" + ) + + return {} + @classmethod def delete_client(cls): if cls.cur: diff --git a/engine/servers/pgvector-single-node/docker-compose.yaml b/engine/servers/pgvector-single-node/docker-compose.yaml index ea554d92..13e8b8e6 100644 --- a/engine/servers/pgvector-single-node/docker-compose.yaml +++ b/engine/servers/pgvector-single-node/docker-compose.yaml @@ -3,13 +3,17 @@ version: '3.7' services: pgvector: container_name: pgvector - image: ankane/pgvector:v0.5.1 + image: pgvector/pgvector:0.6.2-pg16 environment: - POSTGRES_DB=postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=passwd - POSTGRES_HOST_AUTH_METHOD=trust - - POSTGRES_MAX_CONNECTIONS=200 + # shared_buffers should be 25% of memory + # maintenance_work_mem should be ~65% + command: postgres -c shared_buffers=6GB -c maintenance_work_mem=16GB -c max_connections=200 + # shm_size should be shared_buffers + maintenance_work_mem + shm_size: 22g ports: - 5432:5432 logging: diff --git a/experiments/configurations/pgvector-single-node.json b/experiments/configurations/pgvector-single-node.json index e1c8e33a..22ced04d 100644 --- a/experiments/configurations/pgvector-single-node.json +++ b/experiments/configurations/pgvector-single-node.json @@ -3,104 +3,88 @@ "name": "pgvector-default", "engine": "pgvector", "connection_params": {}, - "collection_params": { - "hnsw_config": { "m": 16, "ef_construct": 128 } - }, + "collection_params": {}, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 128 } } + { "parallel": 8, "search_params": { "hnsw_ef": 128 } } ], - "upload_params": { "parallel": 1, "batch_size": 1024 } + "upload_params": { "parallel": 16, "batch_size": 1024, "hnsw_config": { "m": 16, "ef_construct": 128 } } }, { "name": "pgvector-parallel", "engine": "pgvector", "connection_params": {}, - "collection_params": { - "hnsw_config": { "m": 16, "ef_construct": 128 } - }, + "collection_params": {}, "search_params": [ { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 16, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } } ], - "upload_params": { "parallel": 1, "batch_size": 1024 } + "upload_params": { "parallel": 1, "batch_size": 1024, "hnsw_config": { "m": 16, "ef_construct": 128 } } }, { "name": "pgvector-m-16-ef-128", "engine": "pgvector", "connection_params": {}, - "collection_params": { - "hnsw_config": { "m": 16, "ef_construct": 128 } - }, + "collection_params": {}, "search_params": [ { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 16, "hnsw_config": { "m": 16, "ef_construct": 128 } } }, { "name": "pgvector-m-32-ef-128", "engine": "pgvector", "connection_params": {}, - "collection_params": { - "hnsw_config": { "m": 32, "ef_construct": 128 } - }, + "collection_params": {}, "search_params": [ { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 16, "hnsw_config": { "m": 32, "ef_construct": 128 } } }, { "name": "pgvector-m-32-ef-256", "engine": "pgvector", "connection_params": {}, - "collection_params": { - "hnsw_config": { "m": 32, "ef_construct": 256 } - }, + "collection_params": {}, "search_params": [ { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 16, "hnsw_config": { "m": 32, "ef_construct": 256 } } }, { "name": "pgvector-m-32-ef-512", "engine": "pgvector", "connection_params": {}, - "collection_params": { - "hnsw_config": { "m": 32, "ef_construct": 512 } - }, + "collection_params": {}, "search_params": [ { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 16, "hnsw_config": { "m": 32, "ef_construct": 512 } } }, { "name": "pgvector-m-64-ef-256", "engine": "pgvector", "connection_params": {}, - "collection_params": { - "hnsw_config": { "m": 64, "ef_construct": 256 } - }, + "collection_params": {}, "search_params": [ { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 16, "hnsw_config": { "m": 64, "ef_construct": 256 } } }, { "name": "pgvector-m-64-ef-512", "engine": "pgvector", "connection_params": {}, - "collection_params": { - "hnsw_config": { "m": 64, "ef_construct": 512 } - }, + "collection_params": {}, "search_params": [ { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 16, "hnsw_config": { "m": 64, "ef_construct": 512 } } } ] From beaddb35b59e014a647231ca2e7a81007c855e1f Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 11 Apr 2024 13:26:37 +0530 Subject: [PATCH 003/101] [pre-commit.ci] pre-commit suggestions (#47) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v4.4.0 → v4.5.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.4.0...v4.5.0) - [github.com/psf/black: 22.12.0 → 24.3.0](https://github.com/psf/black/compare/22.12.0...24.3.0) - [github.com/PyCQA/isort: 5.12.0 → 5.13.2](https://github.com/PyCQA/isort/compare/5.12.0...5.13.2) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 754906cd..6817ea9d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,19 +11,19 @@ ci: repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v4.5.0 hooks: - id: trailing-whitespace - id: check-added-large-files - repo: https://github.com/psf/black - rev: 22.12.0 + rev: 24.3.0 hooks: - id: black name: "Black: The uncompromising Python code formatter" - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort name: "Sort Imports" From 2ffe5e26858b20a32357231687eb14db7588ab6a Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Mon, 15 Apr 2024 10:49:37 +0200 Subject: [PATCH 004/101] refactoring: Standardize format of search params in engine configs (#122) * refactoring: Standardize format of search params in engine configs * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * address review and rename params to config * address review * fix: upgrade milvusdb image version --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- engine/clients/elasticsearch/search.py | 2 +- engine/clients/milvus/config.py | 1 + engine/clients/milvus/search.py | 2 +- engine/clients/opensearch/search.py | 2 +- engine/clients/pgvector/search.py | 4 +- engine/clients/qdrant/search.py | 4 +- engine/clients/redis/search.py | 2 +- engine/clients/weaviate/search.py | 2 +- .../milvus-limit-ram/docker-compose.yaml | 2 +- .../elasticsearch-single-node.json | 28 +- .../configurations/milvus-on-disk.json | 2 +- .../configurations/milvus-single-node.json | 28 +- .../opensearch-single-node.json | 34 +- .../configurations/pgvector-single-node.json | 32 +- .../configurations/qdrant-on-disk.json | 2 +- .../qdrant-single-node-bq-rps.json | 386 +++++++++--------- .../qdrant-single-node-mmap.json | 24 +- .../qdrant-single-node-rps.json | 32 +- .../qdrant-single-node-sq-rps.json | 386 +++++++++--------- .../configurations/qdrant-single-node.json | 34 +- .../configurations/qdrant-vs-weaviate.json | 114 +++--- .../configurations/redis-single-node.json | 24 +- .../configurations/weaviate-single-node.json | 26 +- 23 files changed, 582 insertions(+), 591 deletions(-) diff --git a/engine/clients/elasticsearch/search.py b/engine/clients/elasticsearch/search.py index 29d20ec5..1c0e435f 100644 --- a/engine/clients/elasticsearch/search.py +++ b/engine/clients/elasticsearch/search.py @@ -51,7 +51,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: "field": "vector", "query_vector": vector, "k": top, - **{"num_candidates": 100, **cls.search_params}, + **cls.search_params["config"], } meta_conditions = cls.parser.parse(meta_conditions) diff --git a/engine/clients/milvus/config.py b/engine/clients/milvus/config.py index 793ecfb7..48d26ed3 100644 --- a/engine/clients/milvus/config.py +++ b/engine/clients/milvus/config.py @@ -23,4 +23,5 @@ DataType.INT64: 0, DataType.VARCHAR: "---MILVUS DOES NOT ACCEPT EMPTY STRINGS---", DataType.FLOAT: 0.0, + DataType.DOUBLE: 0.0, } diff --git a/engine/clients/milvus/search.py b/engine/clients/milvus/search.py index 9b155f7b..f2e56d6f 100644 --- a/engine/clients/milvus/search.py +++ b/engine/clients/milvus/search.py @@ -38,7 +38,7 @@ def get_mp_start_method(cls): @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: - param = {"metric_type": cls.distance, "params": cls.search_params["params"]} + param = {"metric_type": cls.distance, "params": cls.search_params["config"]} try: res = cls.collection.search( data=[vector], diff --git a/engine/clients/opensearch/search.py b/engine/clients/opensearch/search.py index 8f388380..364fc0cc 100644 --- a/engine/clients/opensearch/search.py +++ b/engine/clients/opensearch/search.py @@ -84,5 +84,5 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: def setup_search(cls): if cls.search_params: cls.client.indices.put_settings( - body=cls.search_params, index=OPENSEARCH_INDEX + body=cls.search_params["config"], index=OPENSEARCH_INDEX ) diff --git a/engine/clients/pgvector/search.py b/engine/clients/pgvector/search.py index 62f53035..91bcd5c9 100644 --- a/engine/clients/pgvector/search.py +++ b/engine/clients/pgvector/search.py @@ -23,9 +23,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.conn = psycopg.connect(**get_db_config(host, connection_params)) register_vector(cls.conn) cls.cur = cls.conn.cursor() - cls.cur.execute( - f"SET hnsw.ef_search = {search_params['search_params']['hnsw_ef']}" - ) + cls.cur.execute(f"SET hnsw.ef_search = {search_params['config']['hnsw_ef']}") if distance == Distance.COSINE: cls.query = f"SELECT id, embedding <=> %s AS _score FROM items ORDER BY _score LIMIT %s" elif distance == Distance.L2: diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index 591a91b1..411f889b 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -40,8 +40,6 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: query_vector=vector, query_filter=cls.parser.parse(meta_conditions), limit=top, - search_params=rest.SearchParams( - **cls.search_params.get("search_params", {}) - ), + search_params=rest.SearchParams(**cls.search_params.get("config", {})), ) return [(hit.id, hit.score) for hit in res] diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index dca31919..5d5858df 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -64,7 +64,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: params_dict = { "vec_param": np.array(vector).astype(np.float32).tobytes(), "K": top, - "EF": cls.search_params["search_params"]["ef"], + **cls.search_params["config"], **params, } results = cls._ft.search(q, query_params=params_dict) diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index 4218be92..74fa926e 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -45,7 +45,7 @@ def search_one(self, vector, meta_conditions, top) -> List[Tuple[int, float]]: def setup_search(self): self.collection.config.update( vector_index_config=Reconfigure.VectorIndex.hnsw( - ef=self.search_params["vectorIndexConfig"]["ef"] + ef=self.search_params["config"]["ef"] ) ) diff --git a/engine/servers/milvus-limit-ram/docker-compose.yaml b/engine/servers/milvus-limit-ram/docker-compose.yaml index 5c1aa231..888b9b9c 100644 --- a/engine/servers/milvus-limit-ram/docker-compose.yaml +++ b/engine/servers/milvus-limit-ram/docker-compose.yaml @@ -39,7 +39,7 @@ services: standalone: container_name: milvus-standalone - image: milvusdb/milvus:v2.3.0-beta + image: milvusdb/milvus:v2.3.1 command: ["milvus", "run", "standalone"] environment: ETCD_ENDPOINTS: etcd:2379 diff --git a/experiments/configurations/elasticsearch-single-node.json b/experiments/configurations/elasticsearch-single-node.json index b3f0f609..529b825c 100644 --- a/experiments/configurations/elasticsearch-single-node.json +++ b/experiments/configurations/elasticsearch-single-node.json @@ -7,8 +7,8 @@ }, "collection_params": { "index_options": { "m": 16, "ef_construction": 100 } }, "search_params": [ - { "parallel": 1, "num_candidates": 128 }, { "parallel": 1, "num_candidates": 256 }, { "parallel": 1, "num_candidates": 512 }, - { "parallel": 100, "num_candidates": 128 }, { "parallel": 100, "num_candidates": 256 }, { "parallel": 100, "num_candidates": 512 } + { "parallel": 1, "config": { "num_candidates": 128 } }, { "parallel": 1, "config": { "num_candidates": 256 } }, { "parallel": 1, "config": { "num_candidates": 512 } }, + { "parallel": 100, "config": { "num_candidates": 128 } }, { "parallel": 100, "config": { "num_candidates": 256 } }, { "parallel": 100, "config": { "num_candidates": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -20,8 +20,8 @@ }, "collection_params": { "index_options": { "m": 16, "ef_construction": 128 } }, "search_params": [ - { "parallel": 1, "num_candidates": 128 }, { "parallel": 1, "num_candidates": 256 }, { "parallel": 1, "num_candidates": 512 }, - { "parallel": 100, "num_candidates": 128 }, { "parallel": 100, "num_candidates": 256 }, { "parallel": 100, "num_candidates": 512 } + { "parallel": 1, "config": { "num_candidates": 128 } }, { "parallel": 1, "config": { "num_candidates": 256 } }, { "parallel": 1, "config": { "num_candidates": 512 } }, + { "parallel": 100, "config": { "num_candidates": 128 } }, { "parallel": 100, "config": { "num_candidates": 256 } }, { "parallel": 100, "config": { "num_candidates": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -33,8 +33,8 @@ }, "collection_params": { "index_options": { "m": 32, "ef_construction": 128 } }, "search_params": [ - { "parallel": 1, "num_candidates": 128 }, { "parallel": 1, "num_candidates": 256 }, { "parallel": 1, "num_candidates": 512 }, - { "parallel": 100, "num_candidates": 128 }, { "parallel": 100, "num_candidates": 256 }, { "parallel": 100, "num_candidates": 512 } + { "parallel": 1, "config": { "num_candidates": 128 } }, { "parallel": 1, "config": { "num_candidates": 256 } }, { "parallel": 1, "config": { "num_candidates": 512 } }, + { "parallel": 100, "config": { "num_candidates": 128 } }, { "parallel": 100, "config": { "num_candidates": 256 } }, { "parallel": 100, "config": { "num_candidates": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -46,8 +46,8 @@ }, "collection_params": { "index_options": { "m": 32, "ef_construction": 256 } }, "search_params": [ - { "parallel": 1, "num_candidates": 128 }, { "parallel": 1, "num_candidates": 256 }, { "parallel": 1, "num_candidates": 512 }, - { "parallel": 100, "num_candidates": 128 }, { "parallel": 100, "num_candidates": 256 }, { "parallel": 100, "num_candidates": 512 } + { "parallel": 1, "config": { "num_candidates": 128 } }, { "parallel": 1, "config": { "num_candidates": 256 } }, { "parallel": 1, "config": { "num_candidates": 512 } }, + { "parallel": 100, "config": { "num_candidates": 128 } }, { "parallel": 100, "config": { "num_candidates": 256 } }, { "parallel": 100, "config": { "num_candidates": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -59,8 +59,8 @@ }, "collection_params": { "index_options": { "m": 32, "ef_construction": 512 } }, "search_params": [ - { "parallel": 1, "num_candidates": 128 }, { "parallel": 1, "num_candidates": 256 }, { "parallel": 1, "num_candidates": 512 }, - { "parallel": 100, "num_candidates": 128 }, { "parallel": 100, "num_candidates": 256 }, { "parallel": 100, "num_candidates": 512 } + { "parallel": 1, "config": { "num_candidates": 128 } }, { "parallel": 1, "config": { "num_candidates": 256 } }, { "parallel": 1, "config": { "num_candidates": 512 } }, + { "parallel": 100, "config": { "num_candidates": 128 } }, { "parallel": 100, "config": { "num_candidates": 256 } }, { "parallel": 100, "config": { "num_candidates": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -72,8 +72,8 @@ }, "collection_params": { "index_options": { "m": 64, "ef_construction": 256 } }, "search_params": [ - { "parallel": 1, "num_candidates": 128 }, { "parallel": 1, "num_candidates": 256 }, { "parallel": 1, "num_candidates": 512 }, - { "parallel": 100, "num_candidates": 128 }, { "parallel": 100, "num_candidates": 256 }, { "parallel": 100, "num_candidates": 512 } + { "parallel": 1, "config": { "num_candidates": 128 } }, { "parallel": 1, "config": { "num_candidates": 256 } }, { "parallel": 1, "config": { "num_candidates": 512 } }, + { "parallel": 100, "config": { "num_candidates": 128 } }, { "parallel": 100, "config": { "num_candidates": 256 } }, { "parallel": 100, "config": { "num_candidates": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -85,8 +85,8 @@ }, "collection_params": { "index_options": { "m": 64, "ef_construction": 512 } }, "search_params": [ - { "parallel": 1, "num_candidates": 128 }, { "parallel": 1, "num_candidates": 256 }, { "parallel": 1, "num_candidates": 512 }, - { "parallel": 100, "num_candidates": 128 }, { "parallel": 100, "num_candidates": 256 }, { "parallel": 100, "num_candidates": 512 } + { "parallel": 1, "config": { "num_candidates": 128 } }, { "parallel": 1, "config": { "num_candidates": 256 } }, { "parallel": 1, "config": { "num_candidates": 512 } }, + { "parallel": 100, "config": { "num_candidates": 128 } }, { "parallel": 100, "config": { "num_candidates": 256 } }, { "parallel": 100, "config": { "num_candidates": 512 } } ], "upload_params": { "parallel": 16 } } diff --git a/experiments/configurations/milvus-on-disk.json b/experiments/configurations/milvus-on-disk.json index 971bd0ee..997edcf7 100644 --- a/experiments/configurations/milvus-on-disk.json +++ b/experiments/configurations/milvus-on-disk.json @@ -5,7 +5,7 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 8, "params": { } } + { "parallel": 8, "config": { } } ], "upload_params": { "parallel": 4, "index_type": "DISKANN", "index_params": { } } } diff --git a/experiments/configurations/milvus-single-node.json b/experiments/configurations/milvus-single-node.json index 229cd068..bffc0a1c 100644 --- a/experiments/configurations/milvus-single-node.json +++ b/experiments/configurations/milvus-single-node.json @@ -5,8 +5,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "config": { "ef": 128 } }, { "parallel": 1, "config": { "ef": 256 } }, { "parallel": 1, "config": { "ef": 512 } }, + { "parallel": 100, "config": { "ef": 128 } }, { "parallel": 100, "config": { "ef": 256 } }, { "parallel": 100, "config": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 100, "M": 16 } } }, @@ -16,8 +16,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "config": { "ef": 128 } }, { "parallel": 1, "config": { "ef": 256 } }, { "parallel": 1, "config": { "ef": 512 } }, + { "parallel": 100, "config": { "ef": 128 } }, { "parallel": 100, "config": { "ef": 256 } }, { "parallel": 100, "config": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 16 } } }, @@ -27,8 +27,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "config": { "ef": 128 } }, { "parallel": 1, "config": { "ef": 256 } }, { "parallel": 1, "config": { "ef": 512 } }, + { "parallel": 100, "config": { "ef": 128 } }, { "parallel": 100, "config": { "ef": 256 } }, { "parallel": 100, "config": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 32 } } }, @@ -38,8 +38,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "config": { "ef": 128 } }, { "parallel": 1, "config": { "ef": 256 } }, { "parallel": 1, "config": { "ef": 512 } }, + { "parallel": 100, "config": { "ef": 128 } }, { "parallel": 100, "config": { "ef": 256 } }, { "parallel": 100, "config": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 32 } } }, @@ -49,8 +49,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "config": { "ef": 128 } }, { "parallel": 1, "config": { "ef": 256 } }, { "parallel": 1, "config": { "ef": 512 } }, + { "parallel": 100, "config": { "ef": 128 } }, { "parallel": 100, "config": { "ef": 256 } }, { "parallel": 100, "config": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 32 } } }, @@ -60,8 +60,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "config": { "ef": 128 } }, { "parallel": 1, "config": { "ef": 256 } }, { "parallel": 1, "config": { "ef": 512 } }, + { "parallel": 100, "config": { "ef": 128 } }, { "parallel": 100, "config": { "ef": 256 } }, { "parallel": 100, "config": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 64 } } }, @@ -71,8 +71,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, - { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + { "parallel": 1, "config": { "ef": 128 } }, { "parallel": 1, "config": { "ef": 256 } }, { "parallel": 1, "config": { "ef": 512 } }, + { "parallel": 100, "config": { "ef": 128 } }, { "parallel": 100, "config": { "ef": 256 } }, { "parallel": 100, "config": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 64 } } } diff --git a/experiments/configurations/opensearch-single-node.json b/experiments/configurations/opensearch-single-node.json index 348b850e..dda9314f 100644 --- a/experiments/configurations/opensearch-single-node.json +++ b/experiments/configurations/opensearch-single-node.json @@ -7,8 +7,8 @@ }, "collection_params": { "method": { "parameters": { "m": 16, "ef_construction": 100 } } }, "search_params": [ - { "parallel": 1, "knn.algo_param.ef_search": 128 }, { "parallel": 1, "knn.algo_param.ef_search": 256 }, { "parallel": 1, "knn.algo_param.ef_search": 512 }, - { "parallel": 100, "knn.algo_param.ef_search": 128 }, { "parallel": 100, "knn.algo_param.ef_search": 256 }, { "parallel": 100, "knn.algo_param.ef_search": 512 } + { "parallel": 1, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 512 } }, + { "parallel": 100, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -20,9 +20,8 @@ }, "collection_params": { "method": { "parameters": { "m": 16, "ef_construction": 128 } } }, "search_params": [ - { "parallel": 1, "knn.algo_param.ef_search": 128 }, { "parallel": 1, "knn.algo_param.ef_search": 256 }, { "parallel": 1, "knn.algo_param.ef_search": 512 }, - { "parallel": 100, "knn.algo_param.ef_search": 128 }, { "parallel": 100, "knn.algo_param.ef_search": 256 }, { "parallel": 100, "knn.algo_param.ef_search": 512 } - ], + { "parallel": 1, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 512 } }, + { "parallel": 100, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 512 } } ], "upload_params": { "parallel": 16 } }, { @@ -33,9 +32,8 @@ }, "collection_params": { "method": { "parameters": { "m": 32, "ef_construction": 128 } } }, "search_params": [ - { "parallel": 1, "knn.algo_param.ef_search": 128 }, { "parallel": 1, "knn.algo_param.ef_search": 256 }, { "parallel": 1, "knn.algo_param.ef_search": 512 }, - { "parallel": 100, "knn.algo_param.ef_search": 128 }, { "parallel": 100, "knn.algo_param.ef_search": 256 }, { "parallel": 100, "knn.algo_param.ef_search": 512 } - ], + { "parallel": 1, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 512 } }, + { "parallel": 100, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 512 } } ], "upload_params": { "parallel": 16 } }, { @@ -46,9 +44,8 @@ }, "collection_params": { "method": { "parameters": { "m": 32, "ef_construction": 256 } } }, "search_params": [ - { "parallel": 1, "knn.algo_param.ef_search": 128 }, { "parallel": 1, "knn.algo_param.ef_search": 256 }, { "parallel": 1, "knn.algo_param.ef_search": 512 }, - { "parallel": 100, "knn.algo_param.ef_search": 128 }, { "parallel": 100, "knn.algo_param.ef_search": 256 }, { "parallel": 100, "knn.algo_param.ef_search": 512 } - ], + { "parallel": 1, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 512 } }, + { "parallel": 100, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 512 } } ], "upload_params": { "parallel": 16 } }, { @@ -59,9 +56,8 @@ }, "collection_params": { "method": { "parameters": { "m": 32, "ef_construction": 512 } } }, "search_params": [ - { "parallel": 1, "knn.algo_param.ef_search": 128 }, { "parallel": 1, "knn.algo_param.ef_search": 256 }, { "parallel": 1, "knn.algo_param.ef_search": 512 }, - { "parallel": 100, "knn.algo_param.ef_search": 128 }, { "parallel": 100, "knn.algo_param.ef_search": 256 }, { "parallel": 100, "knn.algo_param.ef_search": 512 } - ], + { "parallel": 1, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 512 } }, + { "parallel": 100, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 512 } } ], "upload_params": { "parallel": 16 } }, { @@ -72,9 +68,8 @@ }, "collection_params": { "method": { "parameters": { "m": 64, "ef_construction": 256 } } }, "search_params": [ - { "parallel": 1, "knn.algo_param.ef_search": 128 }, { "parallel": 1, "knn.algo_param.ef_search": 256 }, { "parallel": 1, "knn.algo_param.ef_search": 512 }, - { "parallel": 100, "knn.algo_param.ef_search": 128 }, { "parallel": 100, "knn.algo_param.ef_search": 256 }, { "parallel": 100, "knn.algo_param.ef_search": 512 } - ], + { "parallel": 1, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 512 } }, + { "parallel": 100, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 512 } } ], "upload_params": { "parallel": 16 } }, { @@ -85,9 +80,8 @@ }, "collection_params": { "method": { "parameters": { "m": 64, "ef_construction": 512 } } }, "search_params": [ - { "parallel": 1, "knn.algo_param.ef_search": 128 }, { "parallel": 1, "knn.algo_param.ef_search": 256 }, { "parallel": 1, "knn.algo_param.ef_search": 512 }, - { "parallel": 100, "knn.algo_param.ef_search": 128 }, { "parallel": 100, "knn.algo_param.ef_search": 256 }, { "parallel": 100, "knn.algo_param.ef_search": 512 } - ], + { "parallel": 1, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 1, "config": { "knn.algo_param.ef_search": 512 } }, + { "parallel": 100, "config": { "knn.algo_param.ef_search": 128 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 256 } }, { "parallel": 100, "config": { "knn.algo_param.ef_search": 512 } } ], "upload_params": { "parallel": 16 } } ] diff --git a/experiments/configurations/pgvector-single-node.json b/experiments/configurations/pgvector-single-node.json index 22ced04d..31b97fca 100644 --- a/experiments/configurations/pgvector-single-node.json +++ b/experiments/configurations/pgvector-single-node.json @@ -5,7 +5,7 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 8, "search_params": { "hnsw_ef": 128 } } + { "parallel": 8, "config": { "hnsw_ef": 128 } } ], "upload_params": { "parallel": 16, "batch_size": 1024, "hnsw_config": { "m": 16, "ef_construct": 128 } } }, @@ -15,9 +15,9 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, - { "parallel": 16, "search_params": { "hnsw_ef": 128 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128 } } + { "parallel": 8, "config": { "hnsw_ef": 128 } }, + { "parallel": 16, "config": { "hnsw_ef": 128 } }, + { "parallel": 100, "config": { "hnsw_ef": 128 } } ], "upload_params": { "parallel": 1, "batch_size": 1024, "hnsw_config": { "m": 16, "ef_construct": 128 } } }, @@ -27,8 +27,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16, "hnsw_config": { "m": 16, "ef_construct": 128 } } }, @@ -38,8 +38,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16, "hnsw_config": { "m": 32, "ef_construct": 128 } } }, @@ -49,8 +49,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16, "hnsw_config": { "m": 32, "ef_construct": 256 } } }, @@ -60,8 +60,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16, "hnsw_config": { "m": 32, "ef_construct": 512 } } }, @@ -71,8 +71,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16, "hnsw_config": { "m": 64, "ef_construct": 256 } } }, @@ -82,8 +82,8 @@ "connection_params": {}, "collection_params": {}, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16, "hnsw_config": { "m": 64, "ef_construct": 512 } } } diff --git a/experiments/configurations/qdrant-on-disk.json b/experiments/configurations/qdrant-on-disk.json index b412557a..36497eef 100644 --- a/experiments/configurations/qdrant-on-disk.json +++ b/experiments/configurations/qdrant-on-disk.json @@ -8,7 +8,7 @@ "hnsw_config": { "on_disk": true } }, "search_params": [ - { "parallel": 8, "search_params": { "hnsw_ef": 128 } } + { "parallel": 8, "config": { "hnsw_ef": 128 } } ], "upload_params": { "parallel": 4 } } diff --git a/experiments/configurations/qdrant-single-node-bq-rps.json b/experiments/configurations/qdrant-single-node-bq-rps.json index 09f95c83..1708bcfc 100644 --- a/experiments/configurations/qdrant-single-node-bq-rps.json +++ b/experiments/configurations/qdrant-single-node-bq-rps.json @@ -7,7 +7,7 @@ "quantization_config": { "binary": {"always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } } ], "upload_params": { "parallel": 1, "batch_size": 1024 } }, @@ -21,38 +21,38 @@ "quantization_config": { "binary": {"always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -66,38 +66,38 @@ "quantization_config": { "binary": {"always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -111,38 +111,38 @@ "quantization_config": { "binary": {"always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -156,38 +156,38 @@ "quantization_config": { "binary": {"always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -201,38 +201,38 @@ "quantization_config": { "binary": {"always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -246,38 +246,38 @@ "quantization_config": { "binary": {"always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } } diff --git a/experiments/configurations/qdrant-single-node-mmap.json b/experiments/configurations/qdrant-single-node-mmap.json index 56bc4dc4..5143cb44 100644 --- a/experiments/configurations/qdrant-single-node-mmap.json +++ b/experiments/configurations/qdrant-single-node-mmap.json @@ -8,8 +8,8 @@ "hnsw_config": { "m": 16, "ef_construct": 128 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -22,8 +22,8 @@ "hnsw_config": { "m": 32, "ef_construct": 128 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -36,8 +36,8 @@ "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -50,8 +50,8 @@ "hnsw_config": { "m": 32, "ef_construct": 512 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -64,8 +64,8 @@ "hnsw_config": { "m": 64, "ef_construct": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -78,8 +78,8 @@ "hnsw_config": { "m": 64, "ef_construct": 512 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } } diff --git a/experiments/configurations/qdrant-single-node-rps.json b/experiments/configurations/qdrant-single-node-rps.json index 405b058b..9f1abc97 100644 --- a/experiments/configurations/qdrant-single-node-rps.json +++ b/experiments/configurations/qdrant-single-node-rps.json @@ -8,7 +8,7 @@ "hnsw_config": { "m": 16, "ef_construct": 128 } }, "search_params": [ - { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "search_params": { "hnsw_ef": 512 } } + { "parallel": 8, "config": { "hnsw_ef": 128 } }, { "parallel": 8, "config": { "hnsw_ef": 256 } }, { "parallel": 8, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -21,9 +21,9 @@ "hnsw_config": { "m": 16, "ef_construct": 128 } }, "search_params": [ - { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, - { "parallel": 16, "search_params": { "hnsw_ef": 256 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 8, "config": { "hnsw_ef": 128 } }, + { "parallel": 16, "config": { "hnsw_ef": 256 } }, + { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -36,8 +36,8 @@ "hnsw_config": { "m": 16, "ef_construct": 128 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -50,8 +50,8 @@ "hnsw_config": { "m": 32, "ef_construct": 128 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -64,8 +64,8 @@ "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -78,8 +78,8 @@ "hnsw_config": { "m": 32, "ef_construct": 512 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -92,8 +92,8 @@ "hnsw_config": { "m": 64, "ef_construct": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -106,8 +106,8 @@ "hnsw_config": { "m": 64, "ef_construct": 512 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } } diff --git a/experiments/configurations/qdrant-single-node-sq-rps.json b/experiments/configurations/qdrant-single-node-sq-rps.json index 8bb83d62..a1d7d1f6 100644 --- a/experiments/configurations/qdrant-single-node-sq-rps.json +++ b/experiments/configurations/qdrant-single-node-sq-rps.json @@ -7,7 +7,7 @@ "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } } ], "upload_params": { "parallel": 1, "batch_size": 1024 } }, @@ -21,38 +21,38 @@ "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -66,38 +66,38 @@ "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -111,38 +111,38 @@ "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -156,38 +156,38 @@ "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -201,38 +201,38 @@ "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -246,38 +246,38 @@ "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": true} } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 1.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 2.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 4.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } } diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index 3b46f9f3..ec75a30e 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -7,7 +7,7 @@ "optimizers_config": { "memmap_threshold": 10000000 } }, "search_params": [ - { "parallel": 8, "search_params": { "hnsw_ef": 128 } } + { "parallel": 8, "config": { "hnsw_ef": 128 } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -35,7 +35,7 @@ "search_params": [ { "parallel": 8, - "search_params": { + "config": { "hnsw_ef": 256, "quantization": { "oversampling": 2.0 @@ -53,9 +53,9 @@ "optimizers_config": { "memmap_threshold": 10000000 } }, "search_params": [ - { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, - { "parallel": 16, "search_params": { "hnsw_ef": 128 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128 } } + { "parallel": 8, "config": { "hnsw_ef": 128 } }, + { "parallel": 16, "config": { "hnsw_ef": 128 } }, + { "parallel": 100, "config": { "hnsw_ef": 128 } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -68,8 +68,8 @@ "hnsw_config": { "m": 16, "ef_construct": 128 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -82,8 +82,8 @@ "hnsw_config": { "m": 32, "ef_construct": 128 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -96,8 +96,8 @@ "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -110,8 +110,8 @@ "hnsw_config": { "m": 32, "ef_construct": 512 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -124,8 +124,8 @@ "hnsw_config": { "m": 64, "ef_construct": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -138,8 +138,8 @@ "hnsw_config": { "m": 64, "ef_construct": 512 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, { "parallel": 100, "search_params": { "hnsw_ef": 512 } } + { "parallel": 1, "config": { "hnsw_ef": 64 } }, { "parallel": 1, "config": { "hnsw_ef": 128 } }, { "parallel": 1, "config": { "hnsw_ef": 256 } }, { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, { "parallel": 100, "config": { "hnsw_ef": 128 } }, { "parallel": 100, "config": { "hnsw_ef": 256 } }, { "parallel": 100, "config": { "hnsw_ef": 512 } } ], "upload_params": { "parallel": 16 } } diff --git a/experiments/configurations/qdrant-vs-weaviate.json b/experiments/configurations/qdrant-vs-weaviate.json index 32bbac6b..12e46258 100644 --- a/experiments/configurations/qdrant-vs-weaviate.json +++ b/experiments/configurations/qdrant-vs-weaviate.json @@ -9,15 +9,15 @@ "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 16.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 32.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 16.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 32.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 16.0 } } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 32.0 } } } + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 32.0 } } } ], "upload_params": { "parallel": 8, "batch_size": 1024 } }, @@ -34,26 +34,26 @@ "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 16.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 32.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 64.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 128.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 16.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 32.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 64.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 128.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 16.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 32.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 64.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 128.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 8.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 16.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 32.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 64.0 } } }, - { "parallel": 100, "search_params": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 128.0 } } } + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 64.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 128.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 64.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 128.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 64.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 128.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 64.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 128.0 } } } ], "upload_params": { "parallel": 8, "batch_size": 1024 } }, @@ -66,13 +66,13 @@ "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "hnsw_ef": 16 } }, - { "parallel": 1, "search_params": { "hnsw_ef": 32 } }, - { "parallel": 1, "search_params": { "hnsw_ef": 64 } }, - { "parallel": 1, "search_params": { "hnsw_ef": 128 } }, - { "parallel": 1, "search_params": { "hnsw_ef": 256 } }, - { "parallel": 1, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 1, "search_params": { "hnsw_ef": 768 } } + { "parallel": 1, "config": { "hnsw_ef": 16 } }, + { "parallel": 1, "config": { "hnsw_ef": 32 } }, + { "parallel": 1, "config": { "hnsw_ef": 64 } }, + { "parallel": 1, "config": { "hnsw_ef": 128 } }, + { "parallel": 1, "config": { "hnsw_ef": 256 } }, + { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 1, "config": { "hnsw_ef": 768 } } ], "upload_params": { "parallel": 8, "batch_size": 1024 } }, @@ -88,13 +88,13 @@ "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ - { "parallel": 100, "search_params": { "hnsw_ef": 16 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 32 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 64 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 128 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 256 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 100, "search_params": { "hnsw_ef": 768 } } + { "parallel": 100, "config": { "hnsw_ef": 16 } }, + { "parallel": 100, "config": { "hnsw_ef": 32 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, + { "parallel": 100, "config": { "hnsw_ef": 128 } }, + { "parallel": 100, "config": { "hnsw_ef": 256 } }, + { "parallel": 100, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 768 } } ], "upload_params": { "parallel": 8, "batch_size": 1024 } }, @@ -112,20 +112,20 @@ }, "search_params": [ - { "parallel": 100, "vectorIndexConfig": { "ef": 16} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 32} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 512} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 768} }, - { "parallel": 1, "vectorIndexConfig": { "ef": 16} }, - { "parallel": 1, "vectorIndexConfig": { "ef": 32} }, - { "parallel": 1, "vectorIndexConfig": { "ef": 64} }, - { "parallel": 1, "vectorIndexConfig": { "ef": 128} }, - { "parallel": 1, "vectorIndexConfig": { "ef": 256} }, - { "parallel": 1, "vectorIndexConfig": { "ef": 512} }, - { "parallel": 1, "vectorIndexConfig": { "ef": 768} } + { "parallel": 100, "config": { "ef": 16} }, + { "parallel": 100, "config": { "ef": 32} }, + { "parallel": 100, "config": { "ef": 64} }, + { "parallel": 100, "config": { "ef": 128} }, + { "parallel": 100, "config": { "ef": 256} }, + { "parallel": 100, "config": { "ef": 512} }, + { "parallel": 100, "config": { "ef": 768} }, + { "parallel": 1, "config": { "ef": 16} }, + { "parallel": 1, "config": { "ef": 32} }, + { "parallel": 1, "config": { "ef": 64} }, + { "parallel": 1, "config": { "ef": 128} }, + { "parallel": 1, "config": { "ef": 256} }, + { "parallel": 1, "config": { "ef": 512} }, + { "parallel": 1, "config": { "ef": 768} } ], "upload_params": { "parallel": 8, "batch_size": 1024 } } diff --git a/experiments/configurations/redis-single-node.json b/experiments/configurations/redis-single-node.json index 3b351edc..e6e58bf5 100644 --- a/experiments/configurations/redis-single-node.json +++ b/experiments/configurations/redis-single-node.json @@ -6,8 +6,8 @@ "collection_params": { }, "search_params": [ - { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, - { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + { "parallel": 1, "config": { "EF": 64 } }, { "parallel": 1, "config": { "EF": 128 } }, { "parallel": 1, "config": { "EF": 256 } }, { "parallel": 1, "config": { "EF": 512 } }, + { "parallel": 100, "config": { "EF": 64 } }, { "parallel": 100, "config": { "EF": 128 } }, { "parallel": 100, "config": { "EF": 256 } }, { "parallel": 100, "config": { "EF": 512 } } ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, @@ -19,8 +19,8 @@ "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 128 } }, "search_params": [ - { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, - { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + { "parallel": 1, "config": { "EF": 64 } }, { "parallel": 1, "config": { "EF": 128 } }, { "parallel": 1, "config": { "EF": 256 } }, { "parallel": 1, "config": { "EF": 512 } }, + { "parallel": 100, "config": { "EF": 64 } }, { "parallel": 100, "config": { "EF": 128 } }, { "parallel": 100, "config": { "EF": 256 } }, { "parallel": 100, "config": { "EF": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -32,8 +32,8 @@ "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, - { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + { "parallel": 1, "config": { "EF": 64 } }, { "parallel": 1, "config": { "EF": 128 } }, { "parallel": 1, "config": { "EF": 256 } }, { "parallel": 1, "config": { "EF": 512 } }, + { "parallel": 100, "config": { "EF": 64 } }, { "parallel": 100, "config": { "EF": 128 } }, { "parallel": 100, "config": { "EF": 256 } }, { "parallel": 100, "config": { "EF": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -45,8 +45,8 @@ "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 512 } }, "search_params": [ - { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, - { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + { "parallel": 1, "config": { "EF": 64 } }, { "parallel": 1, "config": { "EF": 128 } }, { "parallel": 1, "config": { "EF": 256 } }, { "parallel": 1, "config": { "EF": 512 } }, + { "parallel": 100, "config": { "EF": 64 } }, { "parallel": 100, "config": { "EF": 128 } }, { "parallel": 100, "config": { "EF": 256 } }, { "parallel": 100, "config": { "EF": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -58,8 +58,8 @@ "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 256 } }, "search_params": [ - { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, - { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + { "parallel": 1, "config": { "EF": 64 } }, { "parallel": 1, "config": { "EF": 128 } }, { "parallel": 1, "config": { "EF": 256 } }, { "parallel": 1, "config": { "EF": 512 } }, + { "parallel": 100, "config": { "EF": 64 } }, { "parallel": 100, "config": { "EF": 128 } }, { "parallel": 100, "config": { "EF": 256 } }, { "parallel": 100, "config": { "EF": 512 } } ], "upload_params": { "parallel": 16 } }, @@ -71,8 +71,8 @@ "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 512 } }, "search_params": [ - { "parallel": 1, "search_params": { "ef": 64 } }, { "parallel": 1, "search_params": { "ef": 128 } }, { "parallel": 1, "search_params": { "ef": 256 } }, { "parallel": 1, "search_params": { "ef": 512 } }, - { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + { "parallel": 1, "config": { "EF": 64 } }, { "parallel": 1, "config": { "EF": 128 } }, { "parallel": 1, "config": { "EF": 256 } }, { "parallel": 1, "config": { "EF": 512 } }, + { "parallel": 100, "config": { "EF": 64 } }, { "parallel": 100, "config": { "EF": 128 } }, { "parallel": 100, "config": { "EF": 256 } }, { "parallel": 100, "config": { "EF": 512 } } ], "upload_params": { "parallel": 16 } } diff --git a/experiments/configurations/weaviate-single-node.json b/experiments/configurations/weaviate-single-node.json index bf9ab23e..3a4989cf 100644 --- a/experiments/configurations/weaviate-single-node.json +++ b/experiments/configurations/weaviate-single-node.json @@ -7,7 +7,7 @@ }, "collection_params": { "vectorIndexConfig": { "efConstruction": 256, "maxConnections": 16 } }, "search_params": [ - { "parallel": 8, "vectorIndexConfig": { "ef": 128 } } + { "parallel": 8, "config": { "ef": 128 } } ], "upload_params": { "batch_size": 1024, "parallel": 8 } }, @@ -19,8 +19,8 @@ }, "collection_params": { "vectorIndexConfig": { "efConstruction": 128, "maxConnections": 16 } }, "search_params": [ - { "parallel": 1, "vectorIndexConfig": { "ef": 64} }, { "parallel": 1, "vectorIndexConfig": { "ef": 128} }, { "parallel": 1, "vectorIndexConfig": { "ef": 256} }, { "parallel": 1, "vectorIndexConfig": { "ef": 512} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } + { "parallel": 1, "config": { "ef": 64} }, { "parallel": 1, "config": { "ef": 128} }, { "parallel": 1, "config": { "ef": 256} }, { "parallel": 1, "config": { "ef": 512} }, + { "parallel": 100, "config": { "ef": 64} }, { "parallel": 100, "config": { "ef": 128} }, { "parallel": 100, "config": { "ef": 256} }, { "parallel": 100, "config": { "ef": 512} } ], "upload_params": { "batch_size": 1024, "parallel": 8 } }, @@ -32,8 +32,8 @@ }, "collection_params": { "vectorIndexConfig": { "efConstruction": 128, "maxConnections": 32 } }, "search_params": [ - { "parallel": 1, "vectorIndexConfig": { "ef": 64} }, { "parallel": 1, "vectorIndexConfig": { "ef": 128} }, { "parallel": 1, "vectorIndexConfig": { "ef": 256} }, { "parallel": 1, "vectorIndexConfig": { "ef": 512} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } + { "parallel": 1, "config": { "ef": 64} }, { "parallel": 1, "config": { "ef": 128} }, { "parallel": 1, "config": { "ef": 256} }, { "parallel": 1, "config": { "ef": 512} }, + { "parallel": 100, "config": { "ef": 64} }, { "parallel": 100, "config": { "ef": 128} }, { "parallel": 100, "config": { "ef": 256} }, { "parallel": 100, "config": { "ef": 512} } ], "upload_params": { "batch_size": 1024, "parallel": 8 } }, @@ -45,8 +45,8 @@ }, "collection_params": { "vectorIndexConfig": { "efConstruction": 256, "maxConnections": 32 } }, "search_params": [ - { "parallel": 1, "vectorIndexConfig": { "ef": 64} }, { "parallel": 1, "vectorIndexConfig": { "ef": 128} }, { "parallel": 1, "vectorIndexConfig": { "ef": 256} }, { "parallel": 1, "vectorIndexConfig": { "ef": 512} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } + { "parallel": 1, "config": { "ef": 64} }, { "parallel": 1, "config": { "ef": 128} }, { "parallel": 1, "config": { "ef": 256} }, { "parallel": 1, "config": { "ef": 512} }, + { "parallel": 100, "config": { "ef": 64} }, { "parallel": 100, "config": { "ef": 128} }, { "parallel": 100, "config": { "ef": 256} }, { "parallel": 100, "config": { "ef": 512} } ], "upload_params": { "batch_size": 1024, "parallel": 8 } }, @@ -58,8 +58,8 @@ }, "collection_params": { "vectorIndexConfig": { "efConstruction": 512, "maxConnections": 32 } }, "search_params": [ - { "parallel": 1, "vectorIndexConfig": { "ef": 64} }, { "parallel": 1, "vectorIndexConfig": { "ef": 128} }, { "parallel": 1, "vectorIndexConfig": { "ef": 256} }, { "parallel": 1, "vectorIndexConfig": { "ef": 512} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } + { "parallel": 1, "config": { "ef": 64} }, { "parallel": 1, "config": { "ef": 128} }, { "parallel": 1, "config": { "ef": 256} }, { "parallel": 1, "config": { "ef": 512} }, + { "parallel": 100, "config": { "ef": 64} }, { "parallel": 100, "config": { "ef": 128} }, { "parallel": 100, "config": { "ef": 256} }, { "parallel": 100, "config": { "ef": 512} } ], "upload_params": { "batch_size": 1024, "parallel": 8 } }, @@ -71,8 +71,8 @@ }, "collection_params": { "vectorIndexConfig": { "efConstruction": 256, "maxConnections": 64 } }, "search_params": [ - { "parallel": 1, "vectorIndexConfig": { "ef": 64} }, { "parallel": 1, "vectorIndexConfig": { "ef": 128} }, { "parallel": 1, "vectorIndexConfig": { "ef": 256} }, { "parallel": 1, "vectorIndexConfig": { "ef": 512} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } + { "parallel": 1, "config": { "ef": 64} }, { "parallel": 1, "config": { "ef": 128} }, { "parallel": 1, "config": { "ef": 256} }, { "parallel": 1, "config": { "ef": 512} }, + { "parallel": 100, "config": { "ef": 64} }, { "parallel": 100, "config": { "ef": 128} }, { "parallel": 100, "config": { "ef": 256} }, { "parallel": 100, "config": { "ef": 512} } ], "upload_params": { "batch_size": 1024, "parallel": 8 } }, @@ -84,8 +84,8 @@ }, "collection_params": { "vectorIndexConfig": { "efConstruction": 512, "maxConnections": 64 } }, "search_params": [ - { "parallel": 1, "vectorIndexConfig": { "ef": 64} }, { "parallel": 1, "vectorIndexConfig": { "ef": 128} }, { "parallel": 1, "vectorIndexConfig": { "ef": 256} }, { "parallel": 1, "vectorIndexConfig": { "ef": 512} }, - { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } + { "parallel": 1, "config": { "ef": 64} }, { "parallel": 1, "config": { "ef": 128} }, { "parallel": 1, "config": { "ef": 256} }, { "parallel": 1, "config": { "ef": 512} }, + { "parallel": 100, "config": { "ef": 64} }, { "parallel": 100, "config": { "ef": 128} }, { "parallel": 100, "config": { "ef": 256} }, { "parallel": 100, "config": { "ef": 512} } ], "upload_params": { "batch_size": 1024, "parallel": 8 } } From 5f2121e63508d009c9a0fe664406adf18fc15c1d Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Tue, 16 Apr 2024 00:18:29 +0530 Subject: [PATCH 005/101] refactor: Nested search params in ES config (#120) * refactor: Nested search params in ES config Co-authored-by: filipe oliveira * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix: Remove extra config vars * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix: Remove extra comment * feat: Add keyword, text, and float index types in ES --------- Co-authored-by: filipe oliveira Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- engine/clients/elasticsearch/config.py | 28 ++++++++++++++++--- engine/clients/elasticsearch/configure.py | 34 ++++++----------------- engine/clients/elasticsearch/search.py | 23 ++------------- engine/clients/elasticsearch/upload.py | 23 ++------------- 4 files changed, 38 insertions(+), 70 deletions(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 19b59d74..2ecd5ee9 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -1,4 +1,24 @@ -ELASTIC_PORT = 9200 -ELASTIC_INDEX = "bench" -ELASTIC_USER = "elastic" -ELASTIC_PASSWORD = "passwd" +import os + +from elasticsearch import Elasticsearch + +ELASTIC_PORT = int(os.getenv("ELASTIC_PORT", 9200)) +ELASTIC_INDEX = os.getenv("ELASTIC_INDEX", "bench") +ELASTIC_USER = os.getenv("ELASTIC_USER", "elastic") +ELASTIC_PASSWORD = os.getenv("ELASTIC_PASSWORD", "passwd") + + +def get_es_client(host, connection_params): + init_params = { + "verify_certs": False, + "retry_on_timeout": True, + "ssl_show_warn": False, + **connection_params, + } + client = Elasticsearch( + f"http://{host}:{ELASTIC_PORT}", + basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), + **init_params, + ) + assert client.ping() + return client diff --git a/engine/clients/elasticsearch/configure.py b/engine/clients/elasticsearch/configure.py index 76f64eb8..d46166a7 100644 --- a/engine/clients/elasticsearch/configure.py +++ b/engine/clients/elasticsearch/configure.py @@ -4,12 +4,7 @@ from engine.base_client import IncompatibilityError from engine.base_client.configure import BaseConfigurator from engine.base_client.distances import Distance -from engine.clients.elasticsearch.config import ( - ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, -) +from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client class ElasticConfigurator(BaseConfigurator): @@ -20,24 +15,15 @@ class ElasticConfigurator(BaseConfigurator): } INDEX_TYPE_MAPPING = { "int": "long", + "keyword": "keyword", + "text": "text", + "float": "double", "geo": "geo_point", } def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - init_params = { - **{ - "verify_certs": False, - "request_timeout": 90, - "retry_on_timeout": True, - }, - **connection_params, - } - self.client = Elasticsearch( - f"http://{host}:{ELASTIC_PORT}", - basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), - **init_params, - ) + self.client = get_es_client(host, connection_params) def clean(self): try: @@ -60,7 +46,7 @@ def recreate(self, dataset: Dataset, collection_params): "index": { "number_of_shards": 1, "number_of_replicas": 0, - "refresh_interval": -1, + "refresh_interval": -1, # no refresh is required because we index all the data at once } }, mappings={ @@ -72,12 +58,8 @@ def recreate(self, dataset: Dataset, collection_params): "index": True, "similarity": self.DISTANCE_MAPPING[dataset.config.distance], "index_options": { - **{ - "type": "hnsw", - "m": 16, - "ef_construction": 100, - }, - **collection_params.get("index_options"), + "type": "hnsw", + **collection_params["index_options"], }, }, **self._prepare_fields_config(dataset), diff --git a/engine/clients/elasticsearch/search.py b/engine/clients/elasticsearch/search.py index 1c0e435f..3b4fb3f4 100644 --- a/engine/clients/elasticsearch/search.py +++ b/engine/clients/elasticsearch/search.py @@ -5,12 +5,7 @@ from elasticsearch import Elasticsearch from engine.base_client.search import BaseSearcher -from engine.clients.elasticsearch.config import ( - ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, -) +from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client from engine.clients.elasticsearch.parser import ElasticConditionParser @@ -29,20 +24,8 @@ def get_mp_start_method(cls): return "forkserver" if "forkserver" in mp.get_all_start_methods() else "spawn" @classmethod - def init_client(cls, host, distance, connection_params: dict, search_params: dict): - init_params = { - **{ - "verify_certs": False, - "request_timeout": 90, - "retry_on_timeout": True, - }, - **connection_params, - } - cls.client: Elasticsearch = Elasticsearch( - f"http://{host}:{ELASTIC_PORT}", - basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), - **init_params, - ) + def init_client(cls, host, _distance, connection_params: dict, search_params: dict): + cls.client = get_es_client(host, connection_params) cls.search_params = search_params @classmethod diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index 0d5c6f2b..96a18d22 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -5,12 +5,7 @@ from elasticsearch import Elasticsearch from engine.base_client.upload import BaseUploader -from engine.clients.elasticsearch.config import ( - ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, -) +from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client class ClosableElastic(Elasticsearch): @@ -27,20 +22,8 @@ def get_mp_start_method(cls): return "forkserver" if "forkserver" in mp.get_all_start_methods() else "spawn" @classmethod - def init_client(cls, host, distance, connection_params, upload_params): - init_params = { - **{ - "verify_certs": False, - "request_timeout": 90, - "retry_on_timeout": True, - }, - **connection_params, - } - cls.client = Elasticsearch( - f"http://{host}:{ELASTIC_PORT}", - basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), - **init_params, - ) + def init_client(cls, host, _distance, connection_params, upload_params): + cls.client = get_es_client(host, connection_params) cls.upload_params = upload_params @classmethod From b7ec57eae440b0f740db39cca2ab232c78fb0cc8 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Tue, 16 Apr 2024 15:21:03 +0530 Subject: [PATCH 006/101] refactor: Fix and simplify benchmark processing notebook (#125) * feat: Fix process benchmarks notebook * refactor: Fix and simplify benchmark processing notebook * fix: Backward comp for processing script * feat: Add params --- scripts/process-benchmarks.ipynb | 120 ++++++++++++++++--------------- 1 file changed, 63 insertions(+), 57 deletions(-) diff --git a/scripts/process-benchmarks.ipynb b/scripts/process-benchmarks.ipynb index 8419a5f8..f60fba9a 100644 --- a/scripts/process-benchmarks.ipynb +++ b/scripts/process-benchmarks.ipynb @@ -93,19 +93,33 @@ " match = PATH_REGEX.match(path.name)\n", " if match is None:\n", " continue\n", - " \n", + "\n", " experiment = match.groupdict()\n", - " \n", + "\n", " with open(path, \"r\") as fp:\n", " stats = json.load(fp)\n", "\n", - " entry = [match[\"engine\"], match[\"m\"], match[\"ef\"], \n", - " match[\"dataset\"], match[\"search_index\"], match[\"date\"], \n", - " stats[\"params\"], stats[\"results\"]]\n", + " params = stats[\"params\"]\n", + " dataset = params.pop(\"dataset\")\n", + " engine = params.pop(\"engine\")\n", + "\n", + " entry = {\n", + " \"dataset\": dataset,\n", + " \"engine\": engine,\n", + " \"m\": match[\"m\"],\n", + " \"ef\": match[\"ef\"],\n", + " \"date\": match[\"date\"],\n", + " \"params\": params,\n", + " \"results\": stats[\"results\"],\n", + " }\n", + "\n", " if experiment[\"operation\"] == \"search\":\n", + " entry.update({\"search_index\": match[\"search_index\"]})\n", " search_results.append(entry)\n", " elif experiment[\"operation\"] == \"upload\":\n", " upload_results.append(entry)\n", + " else:\n", + " raise Exception(\"Unknown operation\")\n", "\n", "len(upload_results), len(search_results)" ] @@ -113,18 +127,10 @@ { "cell_type": "code", "execution_count": null, - "metadata": { - "ExecuteTime": { - "end_time": "2022-08-05T10:03:54.157465Z", - "start_time": "2022-08-05T10:03:54.153118Z" - }, - "pycharm": { - "name": "#%%\n" - } - }, + "metadata": {}, "outputs": [], "source": [ - "column_names = [\"engine\", \"m\", \"ef\", \"dataset\", \"search_index\", \"date\", \"params\", \"results\"]" + "upload_results, search_results[0]" ] }, { @@ -141,18 +147,15 @@ }, "outputs": [], "source": [ - "upload_df = pd.DataFrame(upload_results, columns=column_names) \\\n", - " .drop(columns=\"search_index\")\n", + "upload_df = pd.DataFrame(upload_results)\n", "upload_df[\"date\"] = pd.to_datetime(upload_df[\"date\"], format=\"%Y-%m-%d-%H-%M-%S\")\n", "upload_df = upload_df.sort_values(\"date\", ascending=False) \\\n", " .groupby([\"engine\", \"m\", \"ef\", \"dataset\"]) \\\n", - " .last()\n", - "upload_df = pd.concat([upload_df, upload_df[\"results\"].apply(pd.Series)], axis=1)\n", - "upload_df = upload_df.drop(columns=\"results\")\n", - "\n", - "print(len(upload_df))\n", + " .first()\n", "\n", - "upload_df.sort_values(\"total_time\", ascending=True).head(n=5)" + "temp_df = upload_df.copy()\n", + "temp_df[\"total_time\"] = temp_df[\"results\"].apply(lambda x: x[\"total_time\"])\n", + "temp_df.sort_values(\"total_time\", ascending=True).head(n=5)" ] }, { @@ -169,18 +172,15 @@ }, "outputs": [], "source": [ - "search_df = pd.DataFrame(search_results, columns=column_names)\n", + "search_df = pd.DataFrame(search_results)\n", "search_df[\"date\"] = pd.to_datetime(search_df[\"date\"], format=\"%Y-%m-%d-%H-%M-%S\")\n", "search_df = search_df.sort_values(\"date\", ascending=False) \\\n", " .groupby([\"engine\", \"m\", \"ef\", \"dataset\", \"search_index\"]) \\\n", " .first()\n", "\n", - "print(len(search_df))\n", - "\n", - "for column_name in [\"params\", \"results\"]:\n", - " search_df = pd.concat([search_df, search_df[column_name].apply(pd.Series)], axis=1)\n", - " search_df = search_df.drop(columns=column_name)\n", - "search_df.sort_values(\"rps\", ascending=False).head(n=10)" + "temp_df = search_df.copy()\n", + "temp_df['rps'] = temp_df['results'].apply(lambda x: x[\"rps\"])\n", + "temp_df.sort_values(\"rps\", ascending=False).head(n=10)" ] }, { @@ -203,50 +203,56 @@ "metadata": {}, "outputs": [], "source": [ - "json_all = []\n", - "json_1_or_100_thread = []\n", + "json_results = []\n", "\n", "for index, row in joined_df.reset_index().iterrows():\n", " engine_params = {}\n", - " if isinstance(row['search_params'], dict):\n", - " engine_params.update(row['search_params'])\n", - " if isinstance(row['params'], dict):\n", - " engine_params.update(row['params'])\n", + " \n", + " if isinstance(row['params_upload'], dict):\n", + " engine_params.update(row['params_upload'])\n", + " if isinstance(row['params_search'], dict):\n", + " search_params = row['params_search']\n", + " engine_params.update(search_params.get('config', {}))\n", + " engine_params.update(search_params.get('params', {}))\n", + " engine_params.update(search_params.get('search_params', {}))\n", + " engine_params.update(search_params.get('vectorIndexConfig', {}))\n", + "\n", + " engine_params.pop('experiment')\n", + " engine_params.pop('parallel')\n", "\n", " engine_name = row['engine']\n", "\n", - " if engine_name == \"qdrant-rps\" or engine_name == \"qdrant-bq-rps\" or engine_name == \"qdrant-sq-rps\":\n", + " if engine_name.startswith(\"qdrant-\"):\n", " engine_name = \"qdrant\"\n", "\n", " json_object = {\n", " \"engine_name\": engine_name,\n", - " \"setup_name\": f\"{row['engine']}-m-{row['m']}-ef-{row['ef']}\",\n", + " \"setup_name\": f\"{row['params_search']['experiment']}\",\n", " \"dataset_name\": row['dataset'],\n", - " # \"search_idx\": row['search_index'],\n", - " \"upload_time\": row['upload_time'],\n", - " \"total_upload_time\": row['total_time_upload'],\n", - " \"p95_time\": row['p95_time'],\n", - " \"rps\": row['rps'],\n", - " \"parallel\": row['parallel'],\n", - " \"p99_time\": row['p99_time'],\n", - " \"mean_time\": row['mean_time'],\n", - " \"mean_precisions\": row['mean_precisions'],\n", + " \"search_idx\": row['search_index'],\n", + " \"upload_time\": row['results_upload']['upload_time'],\n", + " \"total_upload_time\": row['results_upload']['total_time'],\n", + " \"p95_time\": row['results_search']['p95_time'],\n", + " \"rps\": row['results_search']['rps'],\n", + " \"parallel\": row['params_search']['parallel'],\n", + " \"p99_time\": row['results_search']['p99_time'],\n", + " \"mean_time\": row['results_search']['mean_time'],\n", + " \"mean_precisions\": row['results_search']['mean_precisions'],\n", " \"engine_params\": engine_params,\n", " }\n", - " json_all.append(json_object)\n", - " \n", - " parallel = row['parallel']\n", + " json_results.append(json_object)\n", "\n", - " if parallel == 1 or parallel == 100:\n", - " json_1_or_100_thread.append(json_object)\n", - "\n", - "format = '%Y-%M-%d' # T%H:%M:%S\n", + "format = '%Y-%M-%dT%H:%M:%S'\n", "now = datetime.now().replace(tzinfo=timezone.utc).strftime(format)\n", "\n", - "Path(f\"results-{now}.json\").write_text(json.dumps(json_all, indent=2))\n", - "Path(f\"results-1-100-threads-{now}.json\").write_text(json.dumps(json_1_or_100_thread, indent=2))\n", + "Path(f\"results.json\").write_text(json.dumps(json_results, indent=2))\n", + "Path(f\"results-{now}.json\").write_text(json.dumps(json_results, indent=2))\n", + "\n", + "print(json_results[-1], len(json_results))\n", "\n", - "json_1_or_100_thread[-1], len(json_all), len(json_1_or_100_thread)" + "results_df = pd.DataFrame(json_results).sort_values(\"p99_time\", ascending=True)\n", + "# results_df.to_csv('results.csv')\n", + "results_df" ] } ], From 5343849f1d1b6a4fe2180350832244fc633aa198 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 17 Apr 2024 14:14:12 +0530 Subject: [PATCH 007/101] feat: Add sparse vectors benchmark support for Qdrant (#114) * feat: Add sparse vectors benchmark support in Qdrant * fix: Self review * feat: Add sparse dataset for CI benchmarks * feat: Introduce SparseVector class * feat: Disallow sparse vector dataset being run with non sparse vector engine configs * feat: use different engine config to run sparse vector benchmarks * fix: use different engine config to run sparse vector benchmarks * feat: Optimize CI benchmarks workflow * feat: Add 1M sparse dataset * fix: remove scipy, read csr matrix manually (#117) * fix: remove scipy, read csr matrix manually * fix: Dataset query reader should have sparse_vector=None by default * refactor: Changes based on feedback * refactoring: refactor sparse vector support (#118) * refactoring: refactor sparse vector support * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat: Use pydantic construct * refactor: Update all engines to use Query and Record dataclasses (#116) * refactor: Update all engines to use Query and Record dataclasses * feat: Add ruff in pre-commit hooks * fix: Type mismatches * fix: Redis search client types and var names * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix: Type issues detected by linter * fix: iter_batches func type * refactor: knn_conditions should be class level constant --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix: Type issue * fix: Allow python 3.8 since scipy is now removed * fix: Add missing redis-m-16-ef-128 config * fix: redis container port * fix linter --------- Co-authored-by: George Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: generall --- .github/workflows/continuous-benchmark.yaml | 33 ++++-- .pre-commit-config.yaml | 7 ++ benchmark/dataset.py | 14 ++- dataset_reader/ann_compound_reader.py | 1 + dataset_reader/ann_h5_reader.py | 5 +- dataset_reader/base_reader.py | 12 ++- dataset_reader/json_reader.py | 9 +- dataset_reader/sparse_reader.py | 100 ++++++++++++++++++ datasets/datasets.json | 12 +++ engine/base_client/__init__.py | 9 ++ engine/base_client/client.py | 5 +- engine/base_client/configure.py | 1 + engine/base_client/search.py | 8 +- engine/base_client/upload.py | 13 +-- engine/base_client/utils.py | 22 ++-- engine/clients/elasticsearch/__init__.py | 6 ++ engine/clients/elasticsearch/configure.py | 2 +- engine/clients/elasticsearch/search.py | 7 +- engine/clients/elasticsearch/upload.py | 18 ++-- engine/clients/milvus/__init__.py | 6 ++ engine/clients/milvus/search.py | 7 +- engine/clients/milvus/upload.py | 21 ++-- engine/clients/opensearch/__init__.py | 6 ++ engine/clients/opensearch/search.py | 15 +-- engine/clients/opensearch/upload.py | 18 ++-- engine/clients/pgvector/configure.py | 1 - engine/clients/pgvector/search.py | 13 ++- engine/clients/pgvector/upload.py | 14 ++- engine/clients/qdrant/__init__.py | 6 ++ engine/clients/qdrant/configure.py | 27 ++++- engine/clients/qdrant/search.py | 23 +++- engine/clients/qdrant/upload.py | 36 +++++-- engine/clients/redis/__init__.py | 6 ++ engine/clients/redis/configure.py | 14 +-- engine/clients/redis/search.py | 35 +++--- engine/clients/redis/upload.py | 15 ++- engine/clients/weaviate/__init__.py | 6 ++ engine/clients/weaviate/search.py | 10 +- engine/clients/weaviate/upload.py | 17 +-- .../redis-single-node/docker-compose.yaml | 2 +- .../configurations/qdrant-single-node.json | 19 ++++ .../configurations/redis-single-node.json | 13 +++ poetry.lock | 94 +++++++++------- pyproject.toml | 3 +- run.py | 20 ++-- tools/run_ci.sh | 21 ---- tools/run_experiment.sh | 4 +- tools/run_server_container.sh | 12 +-- tools/setup_ci.sh | 22 ++++ 49 files changed, 556 insertions(+), 234 deletions(-) create mode 100644 dataset_reader/sparse_reader.py create mode 100755 tools/setup_ci.sh diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 822a0c52..7fca1cdc 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -15,18 +15,29 @@ jobs: - uses: webfactory/ssh-agent@v0.8.0 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Setup CI + run: bash -x tools/setup_ci.sh - name: Benches run: | - export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} - export GCS_KEY=${{ secrets.GCS_KEY }} - export GCS_SECRET=${{ secrets.GCS_SECRET }} - export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} - export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + export GCS_KEY=${{ secrets.GCS_KEY }} + export GCS_SECRET=${{ secrets.GCS_SECRET }} + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} - # Benchmark the dev branch: - export QDRANT_VERSION=ghcr/dev - bash -x tools/run_ci.sh + declare -A DATASET_TO_ENGINE + DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark" + DATASET_TO_ENGINE["msmarco-sparse-1M"]="qdrant-sparse-vector" - # Benchmark the master branch: - export QDRANT_VERSION=docker/master - bash -x tools/run_ci.sh + for dataset in "${!DATASET_TO_ENGINE[@]}"; do + export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]} + export DATASETS=$dataset + + # Benchmark the dev branch: + export QDRANT_VERSION=ghcr/dev + bash -x tools/run_ci.sh + + # Benchmark the master branch: + export QDRANT_VERSION=docker/master + bash -x tools/run_ci.sh + done diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 6817ea9d..690bcada 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -28,3 +28,10 @@ repos: - id: isort name: "Sort Imports" args: ["--profile", "black"] + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.3.5 + hooks: + # Run the linter. + - id: ruff + args: [ --fix ] diff --git a/benchmark/dataset.py b/benchmark/dataset.py index d2793f04..ef006955 100644 --- a/benchmark/dataset.py +++ b/benchmark/dataset.py @@ -10,20 +10,28 @@ from dataset_reader.ann_h5_reader import AnnH5Reader from dataset_reader.base_reader import BaseReader from dataset_reader.json_reader import JSONReader +from dataset_reader.sparse_reader import SparseReader @dataclass class DatasetConfig: - vector_size: int - distance: str name: str type: str path: str + link: Optional[str] = None schema: Optional[Dict[str, str]] = field(default_factory=dict) + # None in case of sparse vectors: + vector_size: Optional[int] = None + distance: Optional[str] = None -READER_TYPE = {"h5": AnnH5Reader, "jsonl": JSONReader, "tar": AnnCompoundReader} +READER_TYPE = { + "h5": AnnH5Reader, + "jsonl": JSONReader, + "tar": AnnCompoundReader, + "sparse": SparseReader, +} class Dataset: diff --git a/dataset_reader/ann_compound_reader.py b/dataset_reader/ann_compound_reader.py index a2b03301..9d862811 100644 --- a/dataset_reader/ann_compound_reader.py +++ b/dataset_reader/ann_compound_reader.py @@ -33,6 +33,7 @@ def read_queries(self) -> Iterator[Query]: vector /= np.linalg.norm(vector) yield Query( vector=vector.tolist(), + sparse_vector=None, meta_conditions=row_json["conditions"], expected_result=row_json["closest_ids"], expected_scores=row_json["closest_scores"], diff --git a/dataset_reader/ann_h5_reader.py b/dataset_reader/ann_h5_reader.py index 1d47bdd3..f87271a1 100644 --- a/dataset_reader/ann_h5_reader.py +++ b/dataset_reader/ann_h5_reader.py @@ -22,6 +22,7 @@ def read_queries(self) -> Iterator[Query]: vector /= np.linalg.norm(vector) yield Query( vector=vector.tolist(), + sparse_vector=None, meta_conditions=None, expected_result=expected_result.tolist(), expected_scores=expected_scores.tolist(), @@ -33,7 +34,9 @@ def read_data(self) -> Iterator[Record]: for idx, vector in enumerate(data["train"]): if self.normalize: vector /= np.linalg.norm(vector) - yield Record(id=idx, vector=vector.tolist(), metadata=None) + yield Record( + id=idx, vector=vector.tolist(), sparse_vector=None, metadata=None + ) if __name__ == "__main__": diff --git a/dataset_reader/base_reader.py b/dataset_reader/base_reader.py index 0a2617e3..3861c0f3 100644 --- a/dataset_reader/base_reader.py +++ b/dataset_reader/base_reader.py @@ -2,16 +2,24 @@ from typing import Iterator, List, Optional +@dataclass +class SparseVector: + indices: List[int] + values: List[float] + + @dataclass class Record: id: int - vector: List[float] + vector: Optional[List[float]] + sparse_vector: Optional[SparseVector] metadata: Optional[dict] @dataclass class Query: - vector: List[float] + vector: Optional[List[float]] + sparse_vector: Optional[SparseVector] meta_conditions: Optional[dict] expected_result: Optional[List[int]] expected_scores: Optional[List[float]] = None diff --git a/dataset_reader/json_reader.py b/dataset_reader/json_reader.py index 77a2eeb9..3df49a8f 100644 --- a/dataset_reader/json_reader.py +++ b/dataset_reader/json_reader.py @@ -58,13 +58,18 @@ def read_queries(self) -> Iterator[Query]: ): # ToDo: add meta_conditions - yield Query(vector=vector, meta_conditions=None, expected_result=neighbours) + yield Query( + vector=vector, + sparse_vector=None, + meta_conditions=None, + expected_result=neighbours, + ) def read_data(self) -> Iterator[Record]: for idx, (vector, payload) in enumerate( zip(self.read_vectors(), self.read_payloads()) ): - yield Record(id=idx, vector=vector, metadata=payload) + yield Record(id=idx, vector=vector, sparse_vector=None, metadata=payload) if __name__ == "__main__": diff --git a/dataset_reader/sparse_reader.py b/dataset_reader/sparse_reader.py new file mode 100644 index 00000000..fb2af5d9 --- /dev/null +++ b/dataset_reader/sparse_reader.py @@ -0,0 +1,100 @@ +import os +from pathlib import Path +from typing import Iterator, List, Tuple, Union + +import numpy as np + +from dataset_reader.base_reader import BaseReader, Query, Record, SparseVector + + +def read_sparse_matrix_fields( + filename: Union[Path, str] +) -> Tuple[np.array, np.array, np.array]: + """Read the fields of a CSR matrix without instantiating it""" + + with open(filename, "rb") as f: + sizes = np.fromfile(f, dtype="int64", count=3) + n_row, n_col, n_non_zero = sizes + index_pointer = np.fromfile(f, dtype="int64", count=n_row + 1) + assert n_non_zero == index_pointer[-1] + columns = np.fromfile(f, dtype="int32", count=n_non_zero) + assert np.all(columns >= 0) and np.all(columns < n_col) + values = np.fromfile(f, dtype="float32", count=n_non_zero) + return values, columns, index_pointer + + +def csr_to_sparse_vectors( + values: List[float], columns: List[int], index_pointer: List[int] +) -> Iterator[SparseVector]: + num_rows = len(index_pointer) - 1 + + for i in range(num_rows): + start = index_pointer[i] + end = index_pointer[i + 1] + row_values, row_indices = [], [] + for j in range(start, end): + row_values.append(values[j]) + row_indices.append(columns[j]) + yield SparseVector(indices=row_indices, values=row_values) + + +def read_csr_matrix(filename: Union[Path, str]) -> Iterator[SparseVector]: + """Read a CSR matrix in spmat format""" + values, columns, index_pointer = read_sparse_matrix_fields(filename) + values = values.tolist() + columns = columns.tolist() + index_pointer = index_pointer.tolist() + + yield from csr_to_sparse_vectors(values, columns, index_pointer) + + +def knn_result_read( + filename: Union[Path, str] +) -> Tuple[List[List[int]], List[List[float]]]: + n, d = map(int, np.fromfile(filename, dtype="uint32", count=2)) + assert os.stat(filename).st_size == 8 + n * d * (4 + 4) + with open(filename, "rb") as f: + f.seek(4 + 4) + ids = np.fromfile(f, dtype="int32", count=n * d).reshape(n, d).tolist() + scores = np.fromfile(f, dtype="float32", count=n * d).reshape(n, d).tolist() + return ids, scores + + +class SparseReader(BaseReader): + def __init__(self, path, normalize=False): + self.path = path + self.normalize = normalize + + def read_queries(self) -> Iterator[Query]: + queries_path = self.path / "queries.csr" + X = read_csr_matrix(queries_path) + + gt_path = self.path / "results.gt" + gt_indices, _ = knn_result_read(gt_path) + + for i, sparse_vector in enumerate(X): + yield Query( + vector=None, + sparse_vector=sparse_vector, + meta_conditions=None, + expected_result=gt_indices[i], + ) + + def read_data(self) -> Iterator[Record]: + data_path = self.path / "data.csr" + X = read_csr_matrix(data_path) + + for i, sparse_vector in enumerate(X): + yield Record(id=i, vector=None, sparse_vector=sparse_vector, metadata=None) + + +if __name__ == "__main__": + vals = [1, 3, 2, 3, 6, 4, 5] + cols = [0, 2, 2, 1, 3, 0, 2] + pointers = [0, 2, 3, 5, 7] + vecs = [vec for vec in csr_to_sparse_vectors(vals, cols, pointers)] + + assert vecs[0] == SparseVector(indices=[0, 2], values=[1, 3]) + assert vecs[1] == SparseVector(indices=[2], values=[2]) + assert vecs[2] == SparseVector(indices=[1, 3], values=[3, 6]) + assert vecs[3] == SparseVector(indices=[0, 2], values=[4, 5]) diff --git a/datasets/datasets.json b/datasets/datasets.json index 7a165eb6..f2e646de 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -66,6 +66,18 @@ "path": "dbpedia-openai-1M-1536-angular/dbpedia_openai_1M", "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/dbpedia_openai_1M.tgz" }, + { + "name": "msmarco-sparse-100K", + "type": "sparse", + "path": "msmarco-sparse/100K", + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/msmacro-sparse-100K.tar.gz" + }, + { + "name": "msmarco-sparse-1M", + "type": "sparse", + "path": "msmarco-sparse/1M", + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/msmacro-sparse-1M.tar.gz" + }, { "name": "h-and-m-2048-angular-filters", "vector_size": 2048, diff --git a/engine/base_client/__init__.py b/engine/base_client/__init__.py index a5495554..5528bb47 100644 --- a/engine/base_client/__init__.py +++ b/engine/base_client/__init__.py @@ -6,3 +6,12 @@ class IncompatibilityError(Exception): pass + + +__all__ = [ + "BaseClient", + "BaseConfigurator", + "BaseSearcher", + "BaseUploader", + "IncompatibilityError", +] diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 0f262d34..def2f53b 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -1,7 +1,6 @@ import json import os from datetime import datetime -from pathlib import Path from typing import List from benchmark import ROOT_DIR @@ -31,6 +30,10 @@ def __init__( self.searchers = searchers self.engine = engine + @property + def sparse_vector_support(self): + return self.configurator.SPARSE_VECTOR_SUPPORT + def save_search_results( self, dataset_name: str, results: dict, search_id: int, search_params: dict ): diff --git a/engine/base_client/configure.py b/engine/base_client/configure.py index 1a4aaae8..6702f49e 100644 --- a/engine/base_client/configure.py +++ b/engine/base_client/configure.py @@ -4,6 +4,7 @@ class BaseConfigurator: + SPARSE_VECTOR_SUPPORT: bool = False DISTANCE_MAPPING = {} def __init__(self, host, collection_params: dict, connection_params: dict): diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 93368a3f..3626191e 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -30,13 +30,11 @@ def get_mp_start_method(cls): return None @classmethod - def search_one( - cls, vector: List[float], meta_conditions, top: Optional[int] - ) -> List[Tuple[int, float]]: + def search_one(cls, query: Query, top: Optional[int]) -> List[Tuple[int, float]]: raise NotImplementedError() @classmethod - def _search_one(cls, query, top: Optional[int] = None): + def _search_one(cls, query: Query, top: Optional[int] = None): if top is None: top = ( len(query.expected_result) @@ -45,7 +43,7 @@ def _search_one(cls, query, top: Optional[int] = None): ) start = time.perf_counter() - search_res = cls.search_one(query.vector, query.meta_conditions, top) + search_res = cls.search_one(query, top) end = time.perf_counter() precision = 1.0 diff --git a/engine/base_client/upload.py b/engine/base_client/upload.py index d9d53d94..55ee4055 100644 --- a/engine/base_client/upload.py +++ b/engine/base_client/upload.py @@ -1,6 +1,6 @@ import time from multiprocessing import get_context -from typing import Iterable, List, Optional, Tuple +from typing import Iterable, List import tqdm @@ -80,12 +80,9 @@ def upload( } @classmethod - def _upload_batch( - cls, batch: Tuple[List[int], List[list], List[Optional[dict]]] - ) -> float: - ids, vectors, metadata = batch + def _upload_batch(cls, batch: List[Record]) -> float: start = time.perf_counter() - cls.upload_batch(ids, vectors, metadata) + cls.upload_batch(batch) return time.perf_counter() - start @classmethod @@ -93,9 +90,7 @@ def post_upload(cls, distance): return {} @classmethod - def upload_batch( - cls, ids: List[int], vectors: List[list], metadata: List[Optional[dict]] - ): + def upload_batch(cls, batch: List[Record]): raise NotImplementedError() @classmethod diff --git a/engine/base_client/utils.py b/engine/base_client/utils.py index 4b6b8ad5..1b0da967 100644 --- a/engine/base_client/utils.py +++ b/engine/base_client/utils.py @@ -1,20 +1,16 @@ -from typing import Any, Iterable +from typing import Iterable, List from dataset_reader.base_reader import Record -def iter_batches(records: Iterable[Record], n: int) -> Iterable[Any]: - ids = [] - vectors = [] - metadata = [] +def iter_batches(records: Iterable[Record], n: int) -> Iterable[List[Record]]: + batch = [] for record in records: - ids.append(record.id) - vectors.append(record.vector) - metadata.append(record.metadata) + batch.append(record) - if len(vectors) >= n: - yield [ids, vectors, metadata] - ids, vectors, metadata = [], [], [] - if len(ids) > 0: - yield [ids, vectors, metadata] + if len(batch) >= n: + yield batch + batch = [] + if len(batch) > 0: + yield batch diff --git a/engine/clients/elasticsearch/__init__.py b/engine/clients/elasticsearch/__init__.py index 24288e97..c1802087 100644 --- a/engine/clients/elasticsearch/__init__.py +++ b/engine/clients/elasticsearch/__init__.py @@ -1,3 +1,9 @@ from engine.clients.elasticsearch.configure import ElasticConfigurator from engine.clients.elasticsearch.search import ElasticSearcher from engine.clients.elasticsearch.upload import ElasticUploader + +__all__ = [ + "ElasticConfigurator", + "ElasticSearcher", + "ElasticUploader", +] diff --git a/engine/clients/elasticsearch/configure.py b/engine/clients/elasticsearch/configure.py index d46166a7..446fe7c1 100644 --- a/engine/clients/elasticsearch/configure.py +++ b/engine/clients/elasticsearch/configure.py @@ -1,4 +1,4 @@ -from elasticsearch import Elasticsearch, NotFoundError +from elasticsearch import NotFoundError from benchmark.dataset import Dataset from engine.base_client import IncompatibilityError diff --git a/engine/clients/elasticsearch/search.py b/engine/clients/elasticsearch/search.py index 3b4fb3f4..4a1ee981 100644 --- a/engine/clients/elasticsearch/search.py +++ b/engine/clients/elasticsearch/search.py @@ -4,6 +4,7 @@ from elasticsearch import Elasticsearch +from dataset_reader.base_reader import Query from engine.base_client.search import BaseSearcher from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client from engine.clients.elasticsearch.parser import ElasticConditionParser @@ -29,15 +30,15 @@ def init_client(cls, host, _distance, connection_params: dict, search_params: di cls.search_params = search_params @classmethod - def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: + def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: knn = { "field": "vector", - "query_vector": vector, + "query_vector": query.vector, "k": top, **cls.search_params["config"], } - meta_conditions = cls.parser.parse(meta_conditions) + meta_conditions = cls.parser.parse(query.meta_conditions) if meta_conditions: knn["filter"] = meta_conditions diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index 96a18d22..efe249d6 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -1,9 +1,10 @@ import multiprocessing as mp import uuid -from typing import List, Optional +from typing import List from elasticsearch import Elasticsearch +from dataset_reader.base_reader import Record from engine.base_client.upload import BaseUploader from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client @@ -27,19 +28,12 @@ def init_client(cls, host, _distance, connection_params, upload_params): cls.upload_params = upload_params @classmethod - def upload_batch( - cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] - ): - if metadata is None: - metadata = [{}] * len(vectors) + def upload_batch(cls, batch: List[Record]): operations = [] - for idx, vector, payload in zip(ids, vectors, metadata): - vector_id = uuid.UUID(int=idx).hex + for record in batch: + vector_id = uuid.UUID(int=record.id).hex operations.append({"index": {"_id": vector_id}}) - if payload: - operations.append({"vector": vector, **payload}) - else: - operations.append({"vector": vector}) + operations.append({"vector": record.vector, **(record.metadata or {})}) cls.client.bulk( index=ELASTIC_INDEX, diff --git a/engine/clients/milvus/__init__.py b/engine/clients/milvus/__init__.py index ca400c86..31abe17b 100644 --- a/engine/clients/milvus/__init__.py +++ b/engine/clients/milvus/__init__.py @@ -1,3 +1,9 @@ from engine.clients.milvus.configure import MilvusConfigurator from engine.clients.milvus.search import MilvusSearcher from engine.clients.milvus.upload import MilvusUploader + +__all__ = [ + "MilvusConfigurator", + "MilvusSearcher", + "MilvusUploader", +] diff --git a/engine/clients/milvus/search.py b/engine/clients/milvus/search.py index f2e56d6f..1694fc37 100644 --- a/engine/clients/milvus/search.py +++ b/engine/clients/milvus/search.py @@ -3,6 +3,7 @@ from pymilvus import Collection, connections +from dataset_reader.base_reader import Query from engine.base_client.search import BaseSearcher from engine.clients.milvus.config import ( DISTANCE_MAPPING, @@ -37,15 +38,15 @@ def get_mp_start_method(cls): return "forkserver" if "forkserver" in mp.get_all_start_methods() else "spawn" @classmethod - def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: + def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: param = {"metric_type": cls.distance, "params": cls.search_params["config"]} try: res = cls.collection.search( - data=[vector], + data=[query.vector], anns_field="vector", param=param, limit=top, - expr=cls.parser.parse(meta_conditions), + expr=cls.parser.parse(query.meta_conditions), ) except Exception as e: import ipdb diff --git a/engine/clients/milvus/upload.py b/engine/clients/milvus/upload.py index 8f897a45..8c3768e1 100644 --- a/engine/clients/milvus/upload.py +++ b/engine/clients/milvus/upload.py @@ -1,5 +1,5 @@ import multiprocessing as mp -from typing import List, Optional +from typing import List from pymilvus import ( Collection, @@ -8,6 +8,7 @@ wait_for_index_building_complete, ) +from dataset_reader.base_reader import Record from engine.base_client.upload import BaseUploader from engine.clients.milvus.config import ( DISTANCE_MAPPING, @@ -41,20 +42,26 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.distance = DISTANCE_MAPPING[distance] @classmethod - def upload_batch( - cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] - ): - if metadata is not None: + def upload_batch(cls, batch: List[Record]): + has_metadata = any(record.metadata for record in batch) + if has_metadata: field_values = [ [ - payload.get(field_schema.name) or DTYPE_DEFAULT[field_schema.dtype] - for payload in metadata + record.metadata.get(field_schema.name) + or DTYPE_DEFAULT[field_schema.dtype] + for record in batch ] for field_schema in cls.collection.schema.fields if field_schema.name not in ["id", "vector"] ] else: field_values = [] + + ids, vectors = [], [] + for record in batch: + ids.append(record.id) + vectors.append(record.vector) + cls.collection.insert([ids, vectors] + field_values) @classmethod diff --git a/engine/clients/opensearch/__init__.py b/engine/clients/opensearch/__init__.py index 686bfcde..e4c6c59a 100644 --- a/engine/clients/opensearch/__init__.py +++ b/engine/clients/opensearch/__init__.py @@ -1,3 +1,9 @@ from engine.clients.opensearch.configure import OpenSearchConfigurator from engine.clients.opensearch.search import OpenSearchSearcher from engine.clients.opensearch.upload import OpenSearchUploader + +__all__ = [ + "OpenSearchConfigurator", + "OpenSearchSearcher", + "OpenSearchUploader", +] diff --git a/engine/clients/opensearch/search.py b/engine/clients/opensearch/search.py index 364fc0cc..a3e36058 100644 --- a/engine/clients/opensearch/search.py +++ b/engine/clients/opensearch/search.py @@ -4,6 +4,7 @@ from opensearchpy import OpenSearch +from dataset_reader.base_reader import Query from engine.base_client.search import BaseSearcher from engine.clients.opensearch.config import ( OPENSEARCH_INDEX, @@ -46,21 +47,21 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.search_params = search_params @classmethod - def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: - query = { + def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: + opensearch_query = { "knn": { "vector": { - "vector": vector, + "vector": query.vector, "k": top, } } } - meta_conditions = cls.parser.parse(meta_conditions) + meta_conditions = cls.parser.parse(query.meta_conditions) if meta_conditions: - query = { + opensearch_query = { "bool": { - "must": [query], + "must": [opensearch_query], "filter": meta_conditions, } } @@ -68,7 +69,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: res = cls.client.search( index=OPENSEARCH_INDEX, body={ - "query": query, + "query": opensearch_query, "size": top, }, params={ diff --git a/engine/clients/opensearch/upload.py b/engine/clients/opensearch/upload.py index 46a7151d..0bc2427e 100644 --- a/engine/clients/opensearch/upload.py +++ b/engine/clients/opensearch/upload.py @@ -1,9 +1,10 @@ import multiprocessing as mp import uuid -from typing import List, Optional +from typing import List from opensearchpy import OpenSearch +from dataset_reader.base_reader import Record from engine.base_client.upload import BaseUploader from engine.clients.opensearch.config import ( OPENSEARCH_INDEX, @@ -44,19 +45,12 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.upload_params = upload_params @classmethod - def upload_batch( - cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] - ): - if metadata is None: - metadata = [{}] * len(vectors) + def upload_batch(cls, batch: List[Record]): operations = [] - for idx, vector, payload in zip(ids, vectors, metadata): - vector_id = uuid.UUID(int=idx).hex + for record in batch: + vector_id = uuid.UUID(int=record.id).hex operations.append({"index": {"_id": vector_id}}) - if payload: - operations.append({"vector": vector, **payload}) - else: - operations.append({"vector": vector}) + operations.append({"vector": record.vector, **(record.metadata or {})}) cls.client.bulk( index=OPENSEARCH_INDEX, diff --git a/engine/clients/pgvector/configure.py b/engine/clients/pgvector/configure.py index 0da692b2..9f09899d 100644 --- a/engine/clients/pgvector/configure.py +++ b/engine/clients/pgvector/configure.py @@ -32,7 +32,6 @@ def recreate(self, dataset: Dataset, collection_params): );""" ) self.conn.execute("ALTER TABLE items ALTER COLUMN embedding SET STORAGE PLAIN") - self.conn.close() def delete_client(self): diff --git a/engine/clients/pgvector/search.py b/engine/clients/pgvector/search.py index 91bcd5c9..1e26dfc5 100644 --- a/engine/clients/pgvector/search.py +++ b/engine/clients/pgvector/search.py @@ -1,10 +1,10 @@ -import multiprocessing as mp from typing import List, Tuple import numpy as np import psycopg from pgvector.psycopg import register_vector +from dataset_reader.base_reader import Query from engine.base_client.distances import Distance from engine.base_client.search import BaseSearcher from engine.clients.pgvector.config import get_db_config @@ -25,15 +25,18 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.cur = cls.conn.cursor() cls.cur.execute(f"SET hnsw.ef_search = {search_params['config']['hnsw_ef']}") if distance == Distance.COSINE: - cls.query = f"SELECT id, embedding <=> %s AS _score FROM items ORDER BY _score LIMIT %s" + cls.query = "SELECT id, embedding <=> %s AS _score FROM items ORDER BY _score LIMIT %s" elif distance == Distance.L2: - cls.query = f"SELECT id, embedding <-> %s AS _score FROM items ORDER BY _score LIMIT %s" + cls.query = "SELECT id, embedding <-> %s AS _score FROM items ORDER BY _score LIMIT %s" else: raise NotImplementedError(f"Unsupported distance metric {cls.distance}") @classmethod - def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: - cls.cur.execute(cls.query, (np.array(vector), top), binary=True, prepare=True) + def search_one(cls, query: Query, top) -> List[Tuple[int, float]]: + # TODO: Use query.metaconditions for datasets with filtering + cls.cur.execute( + cls.query, (np.array(query.vector), top), binary=True, prepare=True + ) return cls.cur.fetchall() @classmethod diff --git a/engine/clients/pgvector/upload.py b/engine/clients/pgvector/upload.py index c3921e95..fe0027c5 100644 --- a/engine/clients/pgvector/upload.py +++ b/engine/clients/pgvector/upload.py @@ -1,9 +1,11 @@ -from typing import List, Optional +from typing import List import numpy as np import psycopg from pgvector.psycopg import register_vector +from dataset_reader.base_reader import Record +from engine.base_client import IncompatibilityError from engine.base_client.distances import Distance from engine.base_client.upload import BaseUploader from engine.clients.pgvector.config import get_db_config @@ -26,11 +28,13 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.upload_params = upload_params @classmethod - def upload_batch( - cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] - ): - vectors = np.array(vectors) + def upload_batch(cls, batch: List[Record]): + ids, vectors = [], [] + for record in batch: + ids.append(record.id) + vectors.append(record.vector) + vectors = np.array(vectors) # Copy is faster than insert with cls.cur.copy( "COPY items (id, embedding) FROM STDIN WITH (FORMAT BINARY)" diff --git a/engine/clients/qdrant/__init__.py b/engine/clients/qdrant/__init__.py index 03642803..2c95ffc8 100644 --- a/engine/clients/qdrant/__init__.py +++ b/engine/clients/qdrant/__init__.py @@ -1,3 +1,9 @@ from engine.clients.qdrant.configure import QdrantConfigurator from engine.clients.qdrant.search import QdrantSearcher from engine.clients.qdrant.upload import QdrantUploader + +__all__ = [ + "QdrantConfigurator", + "QdrantSearcher", + "QdrantUploader", +] diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index 36e4f007..668914b8 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -8,6 +8,7 @@ class QdrantConfigurator(BaseConfigurator): + SPARSE_VECTOR_SUPPORT = True DISTANCE_MAPPING = { Distance.L2: rest.Distance.EUCLID, Distance.COSINE: rest.Distance.COSINE, @@ -30,12 +31,30 @@ def clean(self): self.client.delete_collection(collection_name=QDRANT_COLLECTION_NAME) def recreate(self, dataset: Dataset, collection_params): + if dataset.config.type == "sparse": + vectors_config = { + "vectors_config": {}, + "sparse_vectors_config": { + "sparse": rest.SparseVectorParams( + index=rest.SparseIndexParams( + on_disk=False, + ) + ) + }, + } + else: + vectors_config = { + "vectors_config": ( + rest.VectorParams( + size=dataset.config.vector_size, + distance=self.DISTANCE_MAPPING.get(dataset.config.distance), + ) + ) + } + self.client.recreate_collection( collection_name=QDRANT_COLLECTION_NAME, - vectors_config=rest.VectorParams( - size=dataset.config.vector_size, - distance=self.DISTANCE_MAPPING.get(dataset.config.distance), - ), + **vectors_config, **self.collection_params ) self.client.update_collection( diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index 411f889b..1c1d2a84 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -1,11 +1,12 @@ -import multiprocessing as mp import os from typing import List, Tuple import httpx from qdrant_client import QdrantClient +from qdrant_client._pydantic_compat import construct from qdrant_client.http import models as rest +from dataset_reader.base_reader import Query from engine.base_client.search import BaseSearcher from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME from engine.clients.qdrant.parser import QdrantConditionParser @@ -34,11 +35,25 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic # return "forkserver" if "forkserver" in mp.get_all_start_methods() else "spawn" @classmethod - def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: + def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: + # Can query only one till we introduce re-ranking in the benchmarks + if query.sparse_vector is None: + query_vector = query.vector + else: + query_vector = construct( + rest.NamedSparseVector, + name="sparse", + vector=construct( + rest.SparseVector, + indices=query.sparse_vector.indices, + values=query.sparse_vector.values, + ), + ) + res = cls.client.search( collection_name=QDRANT_COLLECTION_NAME, - query_vector=vector, - query_filter=cls.parser.parse(meta_conditions), + query_vector=query_vector, + query_filter=cls.parser.parse(query.meta_conditions), limit=top, search_params=rest.SearchParams(**cls.search_params.get("config", {})), ) diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index 32b1a26f..a5c2dbbe 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -1,10 +1,17 @@ import os import time -from typing import List, Optional +from typing import List from qdrant_client import QdrantClient -from qdrant_client.http.models import Batch, CollectionStatus, OptimizersConfigDiff +from qdrant_client._pydantic_compat import construct +from qdrant_client.http.models import ( + Batch, + CollectionStatus, + OptimizersConfigDiff, + SparseVector, +) +from dataset_reader.base_reader import Record from engine.base_client.upload import BaseUploader from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME @@ -21,15 +28,30 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.upload_params = upload_params @classmethod - def upload_batch( - cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] - ): - cls.client.upsert( + def upload_batch(cls, batch: List[Record]): + ids, vectors, payloads = [], [], [] + for point in batch: + if point.sparse_vector is None: + vector = point.vector + else: + vector = { + "sparse": construct( + SparseVector, + indices=point.sparse_vector.indices, + values=point.sparse_vector.values, + ) + } + + ids.append(point.id) + vectors.append(vector) + payloads.append(point.metadata or {}) + + _ = cls.client.upsert( collection_name=QDRANT_COLLECTION_NAME, points=Batch.model_construct( ids=ids, vectors=vectors, - payloads=[payload or {} for payload in metadata], + payloads=payloads, ), wait=False, ) diff --git a/engine/clients/redis/__init__.py b/engine/clients/redis/__init__.py index a1437747..75f3b150 100644 --- a/engine/clients/redis/__init__.py +++ b/engine/clients/redis/__init__.py @@ -1,3 +1,9 @@ from engine.clients.redis.configure import RedisConfigurator from engine.clients.redis.search import RedisSearcher from engine.clients.redis.upload import RedisUploader + +__all__ = [ + "RedisConfigurator", + "RedisSearcher", + "RedisUploader", +] diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index ccf3776c..a5e6fe82 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -36,24 +36,24 @@ class RedisConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) redis_constructor = RedisCluster if REDIS_CLUSTER else Redis - self._is_cluster = True if REDIS_CLUSTER else False + self.is_cluster = REDIS_CLUSTER self.client = redis_constructor( host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) def clean(self): conns = [self.client] - if self._is_cluster: + if self.is_cluster: conns = [ self.client.get_redis_connection(node) for node in self.client.get_primaries() ] for conn in conns: - index = conn.ft() + search_namespace = conn.ft() try: - index.dropindex(delete_documents=True) + search_namespace.dropindex(delete_documents=True) except redis.ResponseError as e: - if "Unknown Index name" not in e.__str__(): + if "Unknown Index name" not in str(e): print(e) def recreate(self, dataset: Dataset, collection_params): @@ -90,7 +90,7 @@ def recreate(self, dataset: Dataset, collection_params): ] + payload_fields conns = [self.client] - if self._is_cluster: + if self.is_cluster: conns = [ self.client.get_redis_connection(node) for node in self.client.get_primaries() @@ -100,7 +100,7 @@ def recreate(self, dataset: Dataset, collection_params): try: search_namespace.create_index(fields=index_fields) except redis.ResponseError as e: - if "Index already exists" not in e.__str__(): + if "Index already exists" not in str(e): raise e diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 5d5858df..1dbb4c66 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -1,10 +1,12 @@ import random -from typing import List, Tuple +from typing import List, Tuple, Union import numpy as np from redis import Redis, RedisCluster -from redis.commands.search.query import Query +from redis.commands.search import Search as RedisSearchIndex +from redis.commands.search.query import Query as RedisQuery +from dataset_reader.base_reader import Query as DatasetQuery from engine.base_client.search import BaseSearcher from engine.clients.redis.config import ( REDIS_AUTH, @@ -18,8 +20,13 @@ class RedisSearcher(BaseSearcher): search_params = {} - client = None + client: Union[RedisCluster, Redis] = None parser = RedisConditionParser() + knn_conditions = "EF_RUNTIME $EF" + + is_cluster: bool + conns: List[Union[RedisCluster, Redis]] + search_namespace: RedisSearchIndex @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): @@ -28,21 +35,23 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) cls.search_params = search_params - cls.knn_conditions = "EF_RUNTIME $EF" - cls._is_cluster = True if REDIS_CLUSTER else False + # In the case of CLUSTER API enabled we randomly select the starting primary shard # when doing the client initialization to evenly distribute the load among the cluster - cls.conns = [cls.client] - if cls._is_cluster: + if REDIS_CLUSTER: cls.conns = [ cls.client.get_redis_connection(node) for node in cls.client.get_primaries() ] - cls._ft = cls.conns[random.randint(0, len(cls.conns)) - 1].ft() + else: + cls.conns = [cls.client] + + cls.is_cluster = REDIS_CLUSTER + cls.search_namespace = random.choice(cls.conns).ft() @classmethod - def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: - conditions = cls.parser.parse(meta_conditions) + def search_one(cls, query: DatasetQuery, top: int) -> List[Tuple[int, float]]: + conditions = cls.parser.parse(query.meta_conditions) if conditions is None: prefilter_condition = "*" params = {} @@ -50,7 +59,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: prefilter_condition, params = conditions q = ( - Query( + RedisQuery( f"{prefilter_condition}=>[KNN $K @vector $vec_param {cls.knn_conditions} AS vector_score]" ) .sort_by("vector_score", asc=True) @@ -62,11 +71,11 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: .timeout(REDIS_QUERY_TIMEOUT) ) params_dict = { - "vec_param": np.array(vector).astype(np.float32).tobytes(), + "vec_param": np.array(query.vector).astype(np.float32).tobytes(), "K": top, **cls.search_params["config"], **params, } - results = cls._ft.search(q, query_params=params_dict) + results = cls.search_namespace.search(q, query_params=params_dict) return [(int(result.id), float(result.vector_score)) for result in results.docs] diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 89bc0a3b..cd4b888b 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -1,8 +1,9 @@ -from typing import List, Optional +from typing import List import numpy as np from redis import Redis, RedisCluster +from dataset_reader.base_reader import Record from engine.base_client.upload import BaseUploader from engine.clients.redis.config import ( REDIS_AUTH, @@ -26,14 +27,12 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.upload_params = upload_params @classmethod - def upload_batch( - cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] - ): + def upload_batch(cls, batch: List[Record]): p = cls.client.pipeline(transaction=False) - for i in range(len(ids)): - idx = ids[i] - vec = vectors[i] - meta = metadata[i] if metadata else {} + for record in batch: + idx = record.id + vec = record.vector + meta = record.metadata or {} geopoints = {} payload = {} if meta is not None: diff --git a/engine/clients/weaviate/__init__.py b/engine/clients/weaviate/__init__.py index d8d90121..2e8abba5 100644 --- a/engine/clients/weaviate/__init__.py +++ b/engine/clients/weaviate/__init__.py @@ -1,3 +1,9 @@ from engine.clients.weaviate.configure import WeaviateConfigurator from engine.clients.weaviate.search import WeaviateSearcher from engine.clients.weaviate.upload import WeaviateUploader + +__all__ = [ + "WeaviateConfigurator", + "WeaviateSearcher", + "WeaviateUploader", +] diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index 74fa926e..aa3ac9ce 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -1,4 +1,3 @@ -import uuid from typing import List, Tuple from weaviate import WeaviateClient @@ -7,6 +6,7 @@ from weaviate.collections import Collection from weaviate.connect import ConnectionParams +from dataset_reader.base_reader import Query from engine.base_client.search import BaseSearcher from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_DEFAULT_PORT from engine.clients.weaviate.parser import WeaviateConditionParser @@ -32,10 +32,10 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.client = client @classmethod - def search_one(self, vector, meta_conditions, top) -> List[Tuple[int, float]]: - res = self.collection.query.near_vector( - near_vector=vector, - filters=self.parser.parse(meta_conditions), + def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: + res = cls.collection.query.near_vector( + near_vector=query.vector, + filters=cls.parser.parse(query.meta_conditions), limit=top, return_metadata=MetadataQuery(distance=True), return_properties=[], diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index ad52f64f..9715ad1d 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -1,10 +1,11 @@ import uuid -from typing import List, Optional +from typing import List from weaviate import WeaviateClient from weaviate.classes.data import DataObject from weaviate.connect import ConnectionParams +from dataset_reader.base_reader import Record from engine.base_client.upload import BaseUploader from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_DEFAULT_PORT @@ -28,14 +29,14 @@ def init_client(cls, host, distance, connection_params, upload_params): ) @classmethod - def upload_batch( - cls, ids: List[int], vectors: List[list], metadata: List[Optional[dict]] - ): + def upload_batch(cls, batch: List[Record]): objects = [] - for i in range(len(ids)): - id = uuid.UUID(int=ids[i]) - property = metadata[i] or {} - objects.append(DataObject(properties=property, vector=vectors[i], uuid=id)) + for record in batch: + _id = uuid.UUID(int=record.id) + _property = record.metadata or {} + objects.append( + DataObject(properties=_property, vector=record.vector, uuid=_id) + ) if len(objects) > 0: cls.collection.data.insert_many(objects) diff --git a/engine/servers/redis-single-node/docker-compose.yaml b/engine/servers/redis-single-node/docker-compose.yaml index 040182e7..5604bb6b 100644 --- a/engine/servers/redis-single-node/docker-compose.yaml +++ b/engine/servers/redis-single-node/docker-compose.yaml @@ -4,7 +4,7 @@ services: redis: image: redislabs/redisearch:2.8.8 ports: - - '6380:6379' + - '6379:6379' logging: driver: "json-file" options: diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index ec75a30e..b30bc0e5 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -45,6 +45,25 @@ ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, + { + "name": "qdrant-sparse-vector", + "engine": "qdrant", + "connection_params": { "timeout": 30 }, + "collection_params": { + "optimizers_config": { + "max_segment_size": 1000000, + "default_segment_number": 3, + "memmap_threshold": 10000000 + } + }, + "search_params": [ + { + "parallel": 8, + "search_params": {} + } + ], + "upload_params": { "parallel": 16, "batch_size": 1024 } + }, { "name": "qdrant-parallel", "engine": "qdrant", diff --git a/experiments/configurations/redis-single-node.json b/experiments/configurations/redis-single-node.json index e6e58bf5..2807e288 100644 --- a/experiments/configurations/redis-single-node.json +++ b/experiments/configurations/redis-single-node.json @@ -11,6 +11,19 @@ ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, + { + "name": "redis-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 128 } + }, + "search_params": [ + { "parallel": 1, "config": { "EF": 64 } }, { "parallel": 1, "config": { "EF": 128 } }, { "parallel": 1, "config": { "EF": 256 } }, { "parallel": 1, "config": { "EF": 512 } }, + { "parallel": 100, "config": { "EF": 64 } }, { "parallel": 100, "config": { "EF": 128 } }, { "parallel": 100, "config": { "EF": 256 } }, { "parallel": 100, "config": { "EF": 512 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "redis-m-32-ef-128", "engine": "redis", diff --git a/poetry.lock b/poetry.lock index a16f1a2c..7ca44280 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "annotated-types" @@ -11,9 +11,6 @@ files = [ {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, ] -[package.dependencies] -typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} - [[package]] name = "anyio" version = "4.3.0" @@ -197,34 +194,6 @@ files = [ {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] -[[package]] -name = "backports-zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" -optional = false -python-versions = ">=3.6" -files = [ - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, - {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, - {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, - {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, - {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, -] - -[package.extras] -tzdata = ["tzdata"] - [[package]] name = "certifi" version = "2024.2.2" @@ -1207,8 +1176,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -1403,7 +1372,6 @@ files = [ ] [package.dependencies] -"backports.zoneinfo" = {version = ">=0.2.0", markers = "python_version < \"3.9\""} psycopg-binary = {version = "3.1.18", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} typing-extensions = ">=4.1" tzdata = {version = "*", markers = "sys_platform == \"win32\""} @@ -1756,7 +1724,6 @@ azure-storage-blob = "*" environs = "<=9.5.0" grpcio = ">=1.49.1,<=1.60.0" minio = ">=7.0.0" -numpy = {version = "<1.25.0", markers = "python_version <= \"3.8\""} pandas = ">=1.2.4" protobuf = ">=3.20.0" pyarrow = ">=12.0.0" @@ -1860,6 +1827,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1867,8 +1835,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {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"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1885,6 +1861,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1892,6 +1869,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1959,6 +1937,48 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "scipy" +version = "1.12.0" +description = "Fundamental algorithms for scientific computing in Python" +optional = false +python-versions = ">=3.9" +files = [ + {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, + {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, + {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, + {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, + {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, + {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, + {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, + {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, + {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, + {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, + {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, + {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, + {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, + {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, + {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, + {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, + {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, + {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, +] + +[package.dependencies] +numpy = ">=1.22.4,<1.29.0" + +[package.extras] +dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] +test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] + [[package]] name = "setuptools" version = "69.2.0" @@ -2294,5 +2314,5 @@ validators = "0.22.0" [metadata] lock-version = "2.0" -python-versions = ">=3.8,<3.12" -content-hash = "66b915f6915c79f83165dc5fb39f363ca53c493668ff87bb5b4953fb712cd4cc" +python-versions = ">=3.9,<3.12" +content-hash = "badb7b46af420d7b474a7b6e2aa8dc926d45ab8631342eee8ab8ab808d86c90c" diff --git a/pyproject.toml b/pyproject.toml index 129a5828..92c7c527 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,7 +2,7 @@ name = "vector-db-benchmark" version = "0.1.0" description = "" -authors = ["Kacper Łukawski "] +authors = ["Qdrant Team "] [tool.poetry.dependencies] python = ">=3.8,<3.12" @@ -21,7 +21,6 @@ tqdm = "^4.66.1" psycopg = {extras = ["binary"], version = "^3.1.17"} pgvector = "^0.2.4" - [tool.poetry.dev-dependencies] pre-commit = "^2.20.0" pytest = "^7.1" diff --git a/run.py b/run.py index 5e947a8d..4446a7e5 100644 --- a/run.py +++ b/run.py @@ -20,13 +20,13 @@ def run( host: str = "localhost", skip_upload: bool = False, skip_search: bool = False, - skip_if_exists: bool = True, + skip_if_exists: bool = False, exit_on_error: bool = True, timeout: float = 86400.0, ): """ Example: - python3 run.py --engines *-m-16-* --engines qdrant-* --datasets glove-* + python3 run.py --engines "*-m-16-*" --engines "qdrant-*" --datasets "glove-*" """ all_engines = read_engine_configs() all_datasets = read_dataset_config() @@ -46,9 +46,15 @@ def run( for dataset_name, dataset_config in selected_datasets.items(): print(f"Running experiment: {engine_name} - {dataset_name}") client = ClientFactory(host).build_client(engine_config) - dataset = Dataset(dataset_config) - dataset.download() try: + + dataset = Dataset(dataset_config) + if dataset.config.type == "sparse" and not client.sparse_vector_support: + raise IncompatibilityError( + f"{client.name} engine does not support sparse vectors" + ) + dataset.download() + with stopit.ThreadingTimeout(timeout) as tt: client.run_experiment( dataset, skip_upload, skip_search, skip_if_exists @@ -66,9 +72,11 @@ def run( ) exit(2) except IncompatibilityError as e: - print(f"Skipping {engine_name} - {dataset_name}, incompatible params") + print( + f"Skipping {engine_name} - {dataset_name}, incompatible params:", e + ) continue - except KeyboardInterrupt as e: + except KeyboardInterrupt: traceback.print_exc() exit(1) except Exception as e: diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 039a6fb4..4bac3bb2 100644 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -7,27 +7,6 @@ set -e SCRIPT=$(realpath "$0") SCRIPT_PATH=$(dirname "$SCRIPT") -# Set up dependencies - -sudo apt update -sudo apt install -y jq - -# Download and install hcloud - -HCVERSION=v1.36.0 - -wget https://github.com/hetznercloud/cli/releases/download/${HCVERSION}/hcloud-linux-amd64.tar.gz - -tar xzf hcloud-linux-amd64.tar.gz - -sudo mv hcloud /usr/local/bin - -# Install mc - -wget https://dl.min.io/client/mc/release/linux-amd64/mc -chmod +x mc -./mc alias set qdrant https://storage.googleapis.com "${GCS_KEY}" "${GCS_SECRET}" - bash -x "${SCRIPT_PATH}/run_remote_benchmark.sh" ./mc cp results/* qdrant/vector-search-engines-benchmark/results/ci/qdrant/ diff --git a/tools/run_experiment.sh b/tools/run_experiment.sh index a1b23d52..6bd13e69 100644 --- a/tools/run_experiment.sh +++ b/tools/run_experiment.sh @@ -1,6 +1,8 @@ #!/bin/bash -ENGINE_NAME=${ENGINE_NAME:-"qdrant-default"} +set -e + +ENGINE_NAME=${ENGINE_NAME:-"qdrant-continuous-benchmark"} DATASETS=${DATASETS:-""} diff --git a/tools/run_server_container.sh b/tools/run_server_container.sh index 98d6e73f..4875e83e 100644 --- a/tools/run_server_container.sh +++ b/tools/run_server_container.sh @@ -2,7 +2,7 @@ set -e -# Examples: qdrant-single-node +# Examples: qdrant-continuous-benchmarks CONTAINER_NAME=$1 CLOUD_NAME=${CLOUD_NAME:-"hetzner"} @@ -20,7 +20,7 @@ IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_public_ip.sh" "$BENCH_ bash -x "${SCRIPT_PATH}/sync_servers.sh" "root@$IP_OF_THE_SERVER" -# if version is dev or if starts with "docker" or "ghcr", use container +# if version is starts with "docker" or "ghcr", use container if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; then if [[ ${QDRANT_VERSION} == docker/* ]]; then @@ -33,11 +33,9 @@ if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; the CONTAINER_REGISTRY='ghcr.io' fi - DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; docker compose down ; pkill qdrant ; docker rmi ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; docker compose up -d" + DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; docker compose down; pkill qdrant ; docker rmi ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; docker compose up -d; docker container ls" ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "cd ./projects/vector-db-benchmark/engine/servers/${CONTAINER_NAME} ; $DOCKER_COMPOSE" else - # else run natively in the server - DOCKER_QDRANT_STOP="docker stop qdrant-continuous || true" - QDRANT_BUILD="source ~/.cargo/env; git fetch --tags; git checkout ${QDRANT_VERSION}; git pull; mold -run cargo run --bin qdrant --release" - ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "cd ./projects/qdrant; ${DOCKER_QDRANT_STOP}; $QDRANT_BUILD" + echo "Error: unknown version ${QDRANT_VERSION}. Version name should start with 'docker/' or 'ghcr/'" + exit 1 fi diff --git a/tools/setup_ci.sh b/tools/setup_ci.sh new file mode 100755 index 00000000..f24321d5 --- /dev/null +++ b/tools/setup_ci.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Set up dependencies + +sudo apt update +sudo apt install -y jq + +# Download and install hcloud + +HCVERSION=v1.36.0 + +wget https://github.com/hetznercloud/cli/releases/download/${HCVERSION}/hcloud-linux-amd64.tar.gz + +tar xzf hcloud-linux-amd64.tar.gz + +sudo mv hcloud /usr/local/bin + +# Install mc + +wget https://dl.min.io/client/mc/release/linux-amd64/mc +chmod +x mc +./mc alias set qdrant https://storage.googleapis.com "${GCS_KEY}" "${GCS_SECRET}" From d3fd49f18db33d62a146bc1454cde85fba46c412 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 17 Apr 2024 14:55:12 +0530 Subject: [PATCH 008/101] fix: Remove mc (#127) * fix: mc setup env vars are not set * fix: Remove mc --- .github/workflows/continuous-benchmark.yaml | 3 +-- tools/run_ci.sh | 2 -- tools/setup_ci.sh | 6 ------ 3 files changed, 1 insertion(+), 10 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 7fca1cdc..989c619b 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -15,8 +15,6 @@ jobs: - uses: webfactory/ssh-agent@v0.8.0 with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - - name: Setup CI - run: bash -x tools/setup_ci.sh - name: Benches run: | export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} @@ -24,6 +22,7 @@ jobs: export GCS_SECRET=${{ secrets.GCS_SECRET }} export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + bash -x tools/setup_ci.sh declare -A DATASET_TO_ENGINE DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark" diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 4bac3bb2..5a9360a6 100644 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -9,8 +9,6 @@ SCRIPT_PATH=$(dirname "$SCRIPT") bash -x "${SCRIPT_PATH}/run_remote_benchmark.sh" -./mc cp results/* qdrant/vector-search-engines-benchmark/results/ci/qdrant/ - # Upload to postgres # -t sorts by modification time export SEARCH_RESULTS_FILE=$(ls -t results/*-search-*.json | head -n 1) diff --git a/tools/setup_ci.sh b/tools/setup_ci.sh index f24321d5..b263f499 100755 --- a/tools/setup_ci.sh +++ b/tools/setup_ci.sh @@ -14,9 +14,3 @@ wget https://github.com/hetznercloud/cli/releases/download/${HCVERSION}/hcloud-l tar xzf hcloud-linux-amd64.tar.gz sudo mv hcloud /usr/local/bin - -# Install mc - -wget https://dl.min.io/client/mc/release/linux-amd64/mc -chmod +x mc -./mc alias set qdrant https://storage.googleapis.com "${GCS_KEY}" "${GCS_SECRET}" From 04bbb7c76070c5d9083d8dadaf78b5cd72f5e3e0 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 17 Apr 2024 15:18:18 +0530 Subject: [PATCH 009/101] fix: Manual benchmarks (#128) * fix: Manual benchmarks * fix: Remove gcs secrets --- .github/workflows/continuous-benchmark.yaml | 2 -- .github/workflows/manual-benchmark.yaml | 3 +-- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 989c619b..8594017b 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -18,8 +18,6 @@ jobs: - name: Benches run: | export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} - export GCS_KEY=${{ secrets.GCS_KEY }} - export GCS_SECRET=${{ secrets.GCS_SECRET }} export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} bash -x tools/setup_ci.sh diff --git a/.github/workflows/manual-benchmark.yaml b/.github/workflows/manual-benchmark.yaml index 4749d9fa..cc708a9c 100644 --- a/.github/workflows/manual-benchmark.yaml +++ b/.github/workflows/manual-benchmark.yaml @@ -23,11 +23,10 @@ jobs: - name: Benches run: | export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} - export GCS_KEY=${{ secrets.GCS_KEY }} - export GCS_SECRET=${{ secrets.GCS_SECRET }} export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} export QDRANT_VERSION=${{ inputs.qdrant_version }} export DATASETS=${{ inputs.dataset }} export POSTGRES_TABLE=benchmark_manual + bash -x tools/setup_ci.sh bash -x tools/run_ci.sh From a8bcf7829f6d7fd245e2f47072591c1aa7c8be28 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 17 Apr 2024 17:32:35 +0530 Subject: [PATCH 010/101] feat: Add mmap support for reading sparse vectors to avoid OOM error in CI (#129) * fix: Manual benchmarks * fix: Remove gcs secrets * feat: Use mmap to read sparse vectors * fix: Format * fix: Make unused var private --- dataset_reader/sparse_reader.py | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/dataset_reader/sparse_reader.py b/dataset_reader/sparse_reader.py index fb2af5d9..94ee4167 100644 --- a/dataset_reader/sparse_reader.py +++ b/dataset_reader/sparse_reader.py @@ -23,9 +23,28 @@ def read_sparse_matrix_fields( return values, columns, index_pointer +def mmap_sparse_matrix_fields(fname): + """mmap the fields of a CSR matrix without instantiating it""" + with open(fname, "rb") as f: + sizes = np.fromfile(f, dtype="int64", count=3) + n_row, _n_col, n_non_zero = sizes + offset = sizes.nbytes + index_pointer = np.memmap( + fname, dtype="int64", mode="r", offset=offset, shape=n_row + 1 + ) + offset += index_pointer.nbytes + columns = np.memmap(fname, dtype="int32", mode="r", offset=offset, shape=n_non_zero) + offset += columns.nbytes + values = np.memmap( + fname, dtype="float32", mode="r", offset=offset, shape=n_non_zero + ) + return values, columns, index_pointer + + def csr_to_sparse_vectors( values: List[float], columns: List[int], index_pointer: List[int] ) -> Iterator[SparseVector]: + """Convert a CSR matrix to a list of SparseVectors""" num_rows = len(index_pointer) - 1 for i in range(num_rows): @@ -38,9 +57,12 @@ def csr_to_sparse_vectors( yield SparseVector(indices=row_indices, values=row_values) -def read_csr_matrix(filename: Union[Path, str]) -> Iterator[SparseVector]: +def read_csr_matrix(filename: Union[Path, str], do_mmap=True) -> Iterator[SparseVector]: """Read a CSR matrix in spmat format""" - values, columns, index_pointer = read_sparse_matrix_fields(filename) + if do_mmap: + values, columns, index_pointer = mmap_sparse_matrix_fields(filename) + else: + values, columns, index_pointer = read_sparse_matrix_fields(filename) values = values.tolist() columns = columns.tolist() index_pointer = index_pointer.tolist() From 73bb7d1965d6a4ce5f8e9f4eae169a5050beb949 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 17 Apr 2024 19:50:14 +0530 Subject: [PATCH 011/101] fix: Avoid reading all mmaped sparse vectors into memory (#130) --- dataset_reader/sparse_reader.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/dataset_reader/sparse_reader.py b/dataset_reader/sparse_reader.py index 94ee4167..51beecaf 100644 --- a/dataset_reader/sparse_reader.py +++ b/dataset_reader/sparse_reader.py @@ -63,9 +63,6 @@ def read_csr_matrix(filename: Union[Path, str], do_mmap=True) -> Iterator[Sparse values, columns, index_pointer = mmap_sparse_matrix_fields(filename) else: values, columns, index_pointer = read_sparse_matrix_fields(filename) - values = values.tolist() - columns = columns.tolist() - index_pointer = index_pointer.tolist() yield from csr_to_sparse_vectors(values, columns, index_pointer) From a294cce7721d41b43005bfc9a1ab5238126f722b Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Thu, 18 Apr 2024 10:21:24 +0530 Subject: [PATCH 012/101] fix: Use smaller sparse dataset for faster iteration (#132) --- .github/workflows/continuous-benchmark.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 8594017b..3c3f4f5a 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -24,7 +24,7 @@ jobs: declare -A DATASET_TO_ENGINE DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark" - DATASET_TO_ENGINE["msmarco-sparse-1M"]="qdrant-sparse-vector" + DATASET_TO_ENGINE["msmarco-sparse-100K"]="qdrant-sparse-vector" for dataset in "${!DATASET_TO_ENGINE[@]}"; do export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]} From 1508944e8839b1d9719af07f602731b1c8cd9699 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Thu, 18 Apr 2024 12:24:57 +0530 Subject: [PATCH 013/101] feat: Force docker image removal (#131) --- tools/run_experiment.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/run_experiment.sh b/tools/run_experiment.sh index 6bd13e69..6179b88b 100644 --- a/tools/run_experiment.sh +++ b/tools/run_experiment.sh @@ -23,7 +23,7 @@ if [[ -z "$PRIVATE_IP_OF_THE_SERVER" ]]; then exit 1 fi -docker rmi qdrant/vector-db-benchmark:latest || true +docker rmi --force qdrant/vector-db-benchmark:latest || true docker run \ --rm \ From e6049a48791fe5c107b1c06a99ea23380aff5698 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Thu, 18 Apr 2024 15:13:46 +0530 Subject: [PATCH 014/101] feat: Use both RssAnon and VmRSS in CI benchmarks (#133) * feat: Use RssAnon instead of VmRSS * feat: Show both RSSAnon and VMRss --- tools/qdrant_collect_stats.sh | 6 ++++-- tools/run_ci.sh | 3 ++- tools/run_client_script.sh | 3 ++- tools/upload_results_postgres.sh | 24 ++++++++++++++++-------- 4 files changed, 24 insertions(+), 12 deletions(-) diff --git a/tools/qdrant_collect_stats.sh b/tools/qdrant_collect_stats.sh index 495f33ec..7ccf9c29 100644 --- a/tools/qdrant_collect_stats.sh +++ b/tools/qdrant_collect_stats.sh @@ -16,11 +16,13 @@ BENCH_SERVER_NAME=${SERVER_NAME:-"benchmark-server-1"} IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_public_ip.sh" "$BENCH_SERVER_NAME") -MEMORY_USAGE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "grep VmRSS /proc/\$(pidof qdrant)/status | awk '{print \$2}'") +VM_RSS_MEMORY_USAGE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "grep VmRSS /proc/\$(pidof qdrant)/status | awk '{print \$2}'") +RSS_ANON_MEMORY_USAGE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "grep RssAnon /proc/\$(pidof qdrant)/status | awk '{print \$2}'") CURRENT_DATE=$(date +%Y-%m-%d-%H-%M-%S) -echo "$MEMORY_USAGE" > results/memory-usage-"${CURRENT_DATE}".txt +echo "$VM_RSS_MEMORY_USAGE" > results/vm-rss-memory-usage-"${CURRENT_DATE}".txt +echo "$RSS_ANON_MEMORY_USAGE" > results/rss-anon-memory-usage-"${CURRENT_DATE}".txt ROOT_API_RESPONSE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "curl -s http://localhost:6333/") diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 5a9360a6..3168bd77 100644 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -13,7 +13,8 @@ bash -x "${SCRIPT_PATH}/run_remote_benchmark.sh" # -t sorts by modification time export SEARCH_RESULTS_FILE=$(ls -t results/*-search-*.json | head -n 1) export UPLOAD_RESULTS_FILE=$(ls -t results/*-upload-*.json | head -n 1) -export MEMORY_USAGE_FILE=$(ls -t results/memory-usage-*.txt | head -n 1) +export VM_RSS_MEMORY_USAGE_FILE=$(ls -t results/vm-rss-memory-usage-*.txt | head -n 1) +export RSS_ANON_MEMORY_USAGE_FILE=$(ls -t results/rss-anon-memory-usage-*.txt | head -n 1) export ROOT_API_RESPONSE_FILE=$(ls -t results/root-api-*.json | head -n 1) bash -x "${SCRIPT_PATH}/upload_results_postgres.sh" diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index c48b87d8..da082ee3 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -27,7 +27,8 @@ ssh -tt "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "${RUN_EXPERIMENT}" SEARCH_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-search-*.json | head -n 1") UPLOAD_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-upload-*.json | head -n 1") -MEMORY_USAGE_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/memory-usage-*.txt | head -n 1") +VM_RSS_MEMORY_USAGE_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/vm-rss-memory-usage-*.txt | head -n 1") +RSS_ANON_MEMORY_USAGE_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/rss-anon-memory-usage-*.txt | head -n 1") mkdir -p results diff --git a/tools/upload_results_postgres.sh b/tools/upload_results_postgres.sh index 4bda52c2..2d6ebd40 100644 --- a/tools/upload_results_postgres.sh +++ b/tools/upload_results_postgres.sh @@ -8,7 +8,7 @@ # id SERIAL PRIMARY key, # engine VARCHAR(255), # branch VARCHAR(255), -# commit CHAR(40), +# commit CHAR(40), # dataset VARCHAR(255), # measure_timestamp TIMESTAMP, # upload_time real, @@ -17,12 +17,14 @@ # mean_precisions real, # p95_time real, # p99_time real, -# memory_usage real +# vm_rss_mem real, +# rss_anon_mem real # ); SEARCH_RESULTS_FILE=${SEARCH_RESULTS_FILE:-""} UPLOAD_RESULTS_FILE=${UPLOAD_RESULTS_FILE:-""} -MEMORY_USAGE_FILE=${MEMORY_USAGE_FILE:-""} +VM_RSS_MEMORY_USAGE_FILE=${VM_RSS_MEMORY_USAGE_FILE:-""} +RSS_ANON_MEMORY_USAGE_FILE=${RSS_ANON_MEMORY_USAGE_FILE:-""} ROOT_API_RESPONSE_FILE=${ROOT_API_RESPONSE_FILE:-""} POSTGRES_TABLE=${POSTGRES_TABLE:-"benchmark"} @@ -41,8 +43,13 @@ if [[ -z "$UPLOAD_RESULTS_FILE" ]]; then fi -if [[ -z "$MEMORY_USAGE_FILE" ]]; then - echo "MEMORY_USAGE_FILE is not set" +if [[ -z "$VM_RSS_MEMORY_USAGE_FILE" ]]; then + echo "VM_RSS_MEMORY_USAGE_FILE is not set" + exit 1 +fi + +if [[ -z "$RSS_ANON_MEMORY_USAGE_FILE" ]]; then + echo "RSS_ANON_MEMORY_USAGE_FILEis not set" exit 1 fi @@ -59,7 +66,8 @@ P99_TIME=$(jq -r '.results.p99_time' "$SEARCH_RESULTS_FILE") UPLOAD_TIME=$(jq -r '.results.upload_time' "$UPLOAD_RESULTS_FILE") INDEXING_TIME=$(jq -r '.results.total_time' "$UPLOAD_RESULTS_FILE") -MEMORY_USAGE=$(cat "$MEMORY_USAGE_FILE") +VM_RSS_MEMORY_USAGE=$(cat "$VM_RSS_MEMORY_USAGE_FILE") +RSS_ANON_MEMORY_USAGE=$(cat "$RSS_ANON_MEMORY_USAGE_FILE") QDRANT_COMMIT=$(jq -r '.commit' "$ROOT_API_RESPONSE_FILE") @@ -67,7 +75,7 @@ MEASURE_TIMESTAMP=${MEASURE_TIMESTAMP:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")} docker run --rm jbergknoff/postgresql-client "postgresql://qdrant:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/postgres" -c " -INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestamp, upload_time, indexing_time, rps, mean_precisions, p95_time, p99_time, memory_usage) -VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${MEMORY_USAGE}); +INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestamp, upload_time, indexing_time, rps, mean_precisions, p95_time, p99_time, vm_rss_mem, rss_anon_mem) +VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${VM_RSS_MEMORY_USAGE}, ${RSS_ANON_MEMORY_USAGE}); " From 455b590b0c839244eea88a85e94b988151724740 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Thu, 18 Apr 2024 16:19:22 +0200 Subject: [PATCH 015/101] Automate running benchmarks for all engines (#134) * ci: Run *-default benchmarks for all engines * Update poetry.lock --- .../actions/run-engine-benchmark/action.yaml | 38 +++++ .../manual-all-engines-benchmark.yaml | 138 ++++++++++++++++++ .../docker-compose.yaml | 23 +++ .../docker-compose.yaml | 21 +++ poetry.lock | 81 +++++----- tools/wait_for_green_status.sh | 34 +++++ 6 files changed, 290 insertions(+), 45 deletions(-) create mode 100644 .github/workflows/actions/run-engine-benchmark/action.yaml create mode 100644 .github/workflows/manual-all-engines-benchmark.yaml create mode 100644 engine/servers/elasticsearch-single-node-ci/docker-compose.yaml create mode 100644 engine/servers/opensearch-single-node-ci/docker-compose.yaml create mode 100755 tools/wait_for_green_status.sh diff --git a/.github/workflows/actions/run-engine-benchmark/action.yaml b/.github/workflows/actions/run-engine-benchmark/action.yaml new file mode 100644 index 00000000..c1152814 --- /dev/null +++ b/.github/workflows/actions/run-engine-benchmark/action.yaml @@ -0,0 +1,38 @@ +name: Run Engine Benchmark +description: "Run benchmark with specified params" +inputs: + engine: + description: "engine (i.e qdrant-default)" + required: true + dataset: + description: "dataset (i.e random-100)" + required: true + compose_file: + description: "path to docker compose" + required: true + +runs: + using: "composite" + steps: + - name: Install poetry + shell: bash + run: pip install poetry + - uses: actions/setup-python@v5 + with: + python-version: "3.10" + cache: "poetry" + - name: Install deps + shell: bash + run: poetry install + - uses: hoverkraft-tech/compose-action@v2.0.0 + with: + compose-file: "${{ inputs.compose_file }}" + - name: Execution + shell: bash + run: | + engine="${{ inputs.engine }}" + if [[ "$engine" == *"elasticsearch"* || "$engine" == *"opensearch"* ]]; then + ./tools/wait_for_green_status.sh + fi + source $(poetry env info -p)/bin/activate + poetry run python3 run.py --engines "${{ inputs.engine }}" --datasets "${{ inputs.dataset }}" \ No newline at end of file diff --git a/.github/workflows/manual-all-engines-benchmark.yaml b/.github/workflows/manual-all-engines-benchmark.yaml new file mode 100644 index 00000000..38737409 --- /dev/null +++ b/.github/workflows/manual-all-engines-benchmark.yaml @@ -0,0 +1,138 @@ +name: Manual All Engines Default Benchmarks + +on: + push: + branches: + - "master" + pull_request: + types: + - opened + - reopened + workflow_dispatch: + +jobs: + elasticsearchBenchmark: + if: > + ( + startsWith(github.event.head_commit.modified, 'engine/clients/elasticsearch') || + startsWith(github.event.head_commit.modified, 'engine/servers/elasticsearch') || + startsWith(github.event.head_commit.modified, 'engine/base_client/') + ) + name: benchmark - elasticsearch-default - random-100 - against elasticsearch-single-node-ci + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/run-engine-benchmark + with: + engine: "elasticsearch-default" + dataset: "random-100" + compose_file: "engine/servers/elasticsearch-single-node-ci/docker-compose.yaml" + + milvusBenchmark: + if: > + ( + startsWith(github.event.head_commit.modified, 'engine/clients/milvus') || + startsWith(github.event.head_commit.modified, 'engine/servers/milvus') || + startsWith(github.event.head_commit.modified, 'engine/base_client/') + ) + name: benchmark - milvus-default - random-100 - against milvus-single-node + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/run-engine-benchmark + with: + engine: "milvus-default" + dataset: "random-100" + compose_file: "engine/servers/milvus-single-node/docker-compose.yaml" + + opensearchBenchmark: + if: > + ( + startsWith(github.event.head_commit.modified, 'engine/clients/opensearch') || + startsWith(github.event.head_commit.modified, 'engine/servers/opensearch') || + startsWith(github.event.head_commit.modified, 'engine/base_client/') + ) + name: benchmark - opensearch-default - glove-25-angular - against opensearch-single-node-ci + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/run-engine-benchmark + with: + engine: "opensearch-default" + dataset: "glove-25-angular" + compose_file: "engine/servers/opensearch-single-node-ci/docker-compose.yaml" + + pgvectorBenchmark: + if: > + ( + startsWith(github.event.head_commit.modified, 'engine/clients/pgvector') || + startsWith(github.event.head_commit.modified, 'engine/servers/pgvector') || + startsWith(github.event.head_commit.modified, 'engine/base_client/') + ) + name: benchmark - pgvector-default - random-100 - against pgvector-single-node + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/run-engine-benchmark + with: + engine: "pgvector-default" + dataset: "random-100" + compose_file: "engine/servers/pgvector-single-node/docker-compose.yaml" + + qdrantBenchmark: + if: > + ( + startsWith(github.event.head_commit.modified, 'engine/clients/qdrant') || + startsWith(github.event.head_commit.modified, 'engine/servers/qdrant') || + startsWith(github.event.head_commit.modified, 'engine/base_client/') + ) + name: benchmark - qdrant-default - random-100 - against qdrant-single-node + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/run-engine-benchmark + with: + engine: "qdrant-default" + dataset: "random-100" + compose_file: "engine/servers/qdrant-single-node/docker-compose.yaml" + + redisBenchmark: + if: > + ( + startsWith(github.event.head_commit.modified, 'engine/clients/redis') || + startsWith(github.event.head_commit.modified, 'engine/servers/redis') || + startsWith(github.event.head_commit.modified, 'engine/base_client/') + ) + name: benchmark - redis-default - random-100 - against redis-single-node + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/run-engine-benchmark + with: + engine: "redis-default" + dataset: "random-100" + compose_file: "engine/servers/redis-single-node/docker-compose.yaml" + + weaviateBenchmark: + if: > + ( + startsWith(github.event.head_commit.modified, 'engine/clients/weaviate') || + startsWith(github.event.head_commit.modified, 'engine/servers/weaviate') || + startsWith(github.event.head_commit.modified, 'engine/base_client/') + ) + name: benchmark - weaviate-default - random-100 - against weaviate-single-node + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v3 + - uses: ./.github/workflows/actions/run-engine-benchmark + with: + engine: "weaviate-default" + dataset: "random-100" + compose_file: "engine/servers/weaviate-single-node/docker-compose.yaml" diff --git a/engine/servers/elasticsearch-single-node-ci/docker-compose.yaml b/engine/servers/elasticsearch-single-node-ci/docker-compose.yaml new file mode 100644 index 00000000..cdac3f65 --- /dev/null +++ b/engine/servers/elasticsearch-single-node-ci/docker-compose.yaml @@ -0,0 +1,23 @@ +version: '3.5' + +services: + es: + image: docker.elastic.co/elasticsearch/elasticsearch:8.10.2 + environment: + ELASTIC_PASSWORD: "passwd" + KIBANA_PASSWORD: "passwd" + SERVER_SSL_ENABLED: "false" + discovery.type: "single-node" + xpack.security.enabled: "false" + ports: + - "9200:9200" + - "9300:9300" + logging: + driver: "json-file" + options: + max-file: 1 + max-size: 10m + deploy: + resources: + limits: + memory: 4Gb diff --git a/engine/servers/opensearch-single-node-ci/docker-compose.yaml b/engine/servers/opensearch-single-node-ci/docker-compose.yaml new file mode 100644 index 00000000..18d97779 --- /dev/null +++ b/engine/servers/opensearch-single-node-ci/docker-compose.yaml @@ -0,0 +1,21 @@ +version: '3.5' + +services: + opensearch: + image: opensearchproject/opensearch:2.10.0 + environment: + discovery.type: "single-node" + plugins.security.disabled: true + OPENSEARCH_JAVA_OPTS: "-Xms2g -Xmx2g" + ports: + - "9200:9200" + - "9300:9300" + logging: + driver: "json-file" + options: + max-file: 1 + max-size: 10m + deploy: + resources: + limits: + memory: 4Gb diff --git a/poetry.lock b/poetry.lock index 7ca44280..d58e98b2 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "annotated-types" @@ -11,6 +11,9 @@ files = [ {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} + [[package]] name = "anyio" version = "4.3.0" @@ -194,6 +197,34 @@ files = [ {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] +[[package]] +name = "backports-zoneinfo" +version = "0.2.1" +description = "Backport of the standard library zoneinfo module" +optional = false +python-versions = ">=3.6" +files = [ + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:1c5742112073a563c81f786e77514969acb58649bcdf6cdf0b4ed31a348d4546"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win32.whl", hash = "sha256:e8236383a20872c0cdf5a62b554b27538db7fa1bbec52429d8d106effbaeca08"}, + {file = "backports.zoneinfo-0.2.1-cp36-cp36m-win_amd64.whl", hash = "sha256:8439c030a11780786a2002261569bdf362264f605dfa4d65090b64b05c9f79a7"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:f04e857b59d9d1ccc39ce2da1021d196e47234873820cbeaad210724b1ee28ac"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:17746bd546106fa389c51dbea67c8b7c8f0d14b5526a579ca6ccf5ed72c526cf"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5c144945a7752ca544b4b78c8c41544cdfaf9786f25fe5ffb10e838e19a27570"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win32.whl", hash = "sha256:e55b384612d93be96506932a786bbcde5a2db7a9e6a4bb4bffe8b733f5b9036b"}, + {file = "backports.zoneinfo-0.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a76b38c52400b762e48131494ba26be363491ac4f9a04c1b7e92483d169f6582"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:8961c0f32cd0336fb8e8ead11a1f8cd99ec07145ec2931122faaac1c8f7fd987"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:e81b76cace8eda1fca50e345242ba977f9be6ae3945af8d46326d776b4cf78d1"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7b0a64cda4145548fed9efc10322770f929b944ce5cee6c0dfe0c87bf4c0c8c9"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win32.whl", hash = "sha256:1b13e654a55cd45672cb54ed12148cd33628f672548f373963b0bff67b217328"}, + {file = "backports.zoneinfo-0.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:4a0f800587060bf8880f954dbef70de6c11bbe59c673c3d818921f042f9954a6"}, + {file = "backports.zoneinfo-0.2.1.tar.gz", hash = "sha256:fadbfe37f74051d024037f223b8e001611eac868b5c5b06144ef4d8b799862f2"}, +] + +[package.extras] +tzdata = ["tzdata"] + [[package]] name = "certifi" version = "2024.2.2" @@ -1372,6 +1403,7 @@ files = [ ] [package.dependencies] +"backports.zoneinfo" = {version = ">=0.2.0", markers = "python_version < \"3.9\""} psycopg-binary = {version = "3.1.18", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} typing-extensions = ">=4.1" tzdata = {version = "*", markers = "sys_platform == \"win32\""} @@ -1724,6 +1756,7 @@ azure-storage-blob = "*" environs = "<=9.5.0" grpcio = ">=1.49.1,<=1.60.0" minio = ">=7.0.0" +numpy = {version = "<1.25.0", markers = "python_version <= \"3.8\""} pandas = ">=1.2.4" protobuf = ">=3.20.0" pyarrow = ">=12.0.0" @@ -1937,48 +1970,6 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] -[[package]] -name = "scipy" -version = "1.12.0" -description = "Fundamental algorithms for scientific computing in Python" -optional = false -python-versions = ">=3.9" -files = [ - {file = "scipy-1.12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:78e4402e140879387187f7f25d91cc592b3501a2e51dfb320f48dfb73565f10b"}, - {file = "scipy-1.12.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:f5f00ebaf8de24d14b8449981a2842d404152774c1a1d880c901bf454cb8e2a1"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e53958531a7c695ff66c2e7bb7b79560ffdc562e2051644c5576c39ff8efb563"}, - {file = "scipy-1.12.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e32847e08da8d895ce09d108a494d9eb78974cf6de23063f93306a3e419960c"}, - {file = "scipy-1.12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4c1020cad92772bf44b8e4cdabc1df5d87376cb219742549ef69fc9fd86282dd"}, - {file = "scipy-1.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:75ea2a144096b5e39402e2ff53a36fecfd3b960d786b7efd3c180e29c39e53f2"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:408c68423f9de16cb9e602528be4ce0d6312b05001f3de61fe9ec8b1263cad08"}, - {file = "scipy-1.12.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:5adfad5dbf0163397beb4aca679187d24aec085343755fcdbdeb32b3679f254c"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3003652496f6e7c387b1cf63f4bb720951cfa18907e998ea551e6de51a04467"}, - {file = "scipy-1.12.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b8066bce124ee5531d12a74b617d9ac0ea59245246410e19bca549656d9a40a"}, - {file = "scipy-1.12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8bee4993817e204d761dba10dbab0774ba5a8612e57e81319ea04d84945375ba"}, - {file = "scipy-1.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:a24024d45ce9a675c1fb8494e8e5244efea1c7a09c60beb1eeb80373d0fecc70"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:e7e76cc48638228212c747ada851ef355c2bb5e7f939e10952bc504c11f4e372"}, - {file = "scipy-1.12.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:f7ce148dffcd64ade37b2df9315541f9adad6efcaa86866ee7dd5db0c8f041c3"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c39f92041f490422924dfdb782527a4abddf4707616e07b021de33467f917bc"}, - {file = "scipy-1.12.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7ebda398f86e56178c2fa94cad15bf457a218a54a35c2a7b4490b9f9cb2676c"}, - {file = "scipy-1.12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:95e5c750d55cf518c398a8240571b0e0782c2d5a703250872f36eaf737751338"}, - {file = "scipy-1.12.0-cp312-cp312-win_amd64.whl", hash = "sha256:e646d8571804a304e1da01040d21577685ce8e2db08ac58e543eaca063453e1c"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:913d6e7956c3a671de3b05ccb66b11bc293f56bfdef040583a7221d9e22a2e35"}, - {file = "scipy-1.12.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:bba1b0c7256ad75401c73e4b3cf09d1f176e9bd4248f0d3112170fb2ec4db067"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:730badef9b827b368f351eacae2e82da414e13cf8bd5051b4bdfd720271a5371"}, - {file = "scipy-1.12.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6546dc2c11a9df6926afcbdd8a3edec28566e4e785b915e849348c6dd9f3f490"}, - {file = "scipy-1.12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:196ebad3a4882081f62a5bf4aeb7326aa34b110e533aab23e4374fcccb0890dc"}, - {file = "scipy-1.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:b360f1b6b2f742781299514e99ff560d1fe9bd1bff2712894b52abe528d1fd1e"}, - {file = "scipy-1.12.0.tar.gz", hash = "sha256:4bf5abab8a36d20193c698b0f1fc282c1d083c94723902c447e5d2f1780936a3"}, -] - -[package.dependencies] -numpy = ">=1.22.4,<1.29.0" - -[package.extras] -dev = ["click", "cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] -doc = ["jupytext", "matplotlib (>2)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (==0.9.0)", "sphinx (!=4.1.0)", "sphinx-design (>=0.2.0)"] -test = ["asv", "gmpy2", "hypothesis", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] - [[package]] name = "setuptools" version = "69.2.0" @@ -2314,5 +2305,5 @@ validators = "0.22.0" [metadata] lock-version = "2.0" -python-versions = ">=3.9,<3.12" -content-hash = "badb7b46af420d7b474a7b6e2aa8dc926d45ab8631342eee8ab8ab808d86c90c" +python-versions = ">=3.8,<3.12" +content-hash = "66b915f6915c79f83165dc5fb39f363ca53c493668ff87bb5b4953fb712cd4cc" diff --git a/tools/wait_for_green_status.sh b/tools/wait_for_green_status.sh new file mode 100755 index 00000000..229a9527 --- /dev/null +++ b/tools/wait_for_green_status.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# This scripts helps to wait for Opensearch|Elasticsearch status to become Green + +set -e + +SEARCH_CLUSTER_HOST=${1:-"localhost:9200"} + +# Wait until the search cluster host is available +until $(curl --output /dev/null --silent --head --fail "$SEARCH_CLUSTER_HOST"); do + printf '.' + sleep 1 # Wait for 1 second +done + +# Wait for ES/OS to start +response=$(curl --write-out %{http_code} --silent --output /dev/null "$SEARCH_CLUSTER_HOST") + +until [ "$response" = "200" ]; do + response=$(curl --write-out %{http_code} --silent --output /dev/null "$SEARCH_CLUSTER_HOST") + >&2 echo "Search cluster is unavailable - sleep 1s" + sleep 1 +done + +# Wait for ES/OS status to turn Green +health="$(curl -fsSL "$SEARCH_CLUSTER_HOST/_cat/health?h=status")" +health="$(echo "$health" | sed -r 's/^[[:space:]]+|[[:space:]]+$//g')" + +until [ "$health" = 'green' ]; do + health="$(curl -fsSL "$SEARCH_CLUSTER_HOST/_cat/health?h=status")" + health="$(echo "$health" | sed -r 's/^[[:space:]]+|[[:space:]]+$//g')" + >&2 echo "Search cluster status is not green yet - sleep 1s" + sleep 1 +done + +>&2 echo "Search cluster is up" \ No newline at end of file From a3a9b6bffbbf3ba0522126b65c244125f67aadee Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Sun, 19 May 2024 23:27:25 +0530 Subject: [PATCH 016/101] feat: Add H&M filter dataset to CI benchmarks (#140) * feat: Add H&M filter dataset to CI benchmarks * fix: Remove extra space * fix: Add ServerAliveInterval and ServerAliveCountMax (#141) * add runner resources monitoring * Revert "add runner resources monitoring" This reverts commit 7e5663e2cff34ecd73c115a763af471884991d42. * add ServerAliveInterval and ServerAliveCountMax --------- Co-authored-by: tellet-q <166374656+tellet-q@users.noreply.github.com> --- .github/workflows/continuous-benchmark.yaml | 1 + tools/run_client_script.sh | 2 +- tools/run_server_container.sh | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 3c3f4f5a..78b22e0a 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -25,6 +25,7 @@ jobs: declare -A DATASET_TO_ENGINE DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark" DATASET_TO_ENGINE["msmarco-sparse-100K"]="qdrant-sparse-vector" + DATASET_TO_ENGINE["h-and-m-2048-angular-filters"]="qdrant-continuous-benchmark" for dataset in "${!DATASET_TO_ENGINE[@]}"; do export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]} diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index da082ee3..783ae793 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -23,7 +23,7 @@ PRIVATE_IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_private_ip.sh" RUN_EXPERIMENT="ENGINE_NAME=${ENGINE_NAME} DATASETS=${DATASETS} PRIVATE_IP_OF_THE_SERVER=${PRIVATE_IP_OF_THE_SERVER} bash ~/run_experiment.sh" -ssh -tt "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "${RUN_EXPERIMENT}" +ssh -tt -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "${RUN_EXPERIMENT}" SEARCH_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-search-*.json | head -n 1") UPLOAD_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-upload-*.json | head -n 1") diff --git a/tools/run_server_container.sh b/tools/run_server_container.sh index 4875e83e..d04f1199 100644 --- a/tools/run_server_container.sh +++ b/tools/run_server_container.sh @@ -34,7 +34,7 @@ if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; the fi DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; docker compose down; pkill qdrant ; docker rmi ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; docker compose up -d; docker container ls" - ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "cd ./projects/vector-db-benchmark/engine/servers/${CONTAINER_NAME} ; $DOCKER_COMPOSE" + ssh -t -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "cd ./projects/vector-db-benchmark/engine/servers/${CONTAINER_NAME} ; $DOCKER_COMPOSE" else echo "Error: unknown version ${QDRANT_VERSION}. Version name should start with 'docker/' or 'ghcr/'" exit 1 From 9598214d77c06e5001bd83888ca824973f6c1df9 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Fri, 31 May 2024 17:35:02 +0530 Subject: [PATCH 017/101] feat: Add BQ to CI benchmarks (#148) * feat: Add BQ to CI benchmarks * feat: Allow manual benchmarks to specify engine config --- .github/workflows/continuous-benchmark.yaml | 1 + .github/workflows/manual-benchmark.yaml | 4 +++ .../configurations/qdrant-single-node.json | 27 +++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 78b22e0a..6e8b6e61 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -26,6 +26,7 @@ jobs: DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark" DATASET_TO_ENGINE["msmarco-sparse-100K"]="qdrant-sparse-vector" DATASET_TO_ENGINE["h-and-m-2048-angular-filters"]="qdrant-continuous-benchmark" + DATASET_TO_ENGINE["dbpedia-openai-1M-1536-angular"]="qdrant-bq-continuous-benchmark" for dataset in "${!DATASET_TO_ENGINE[@]}"; do export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]} diff --git a/.github/workflows/manual-benchmark.yaml b/.github/workflows/manual-benchmark.yaml index cc708a9c..b8fc0483 100644 --- a/.github/workflows/manual-benchmark.yaml +++ b/.github/workflows/manual-benchmark.yaml @@ -10,6 +10,9 @@ on: dataset: description: "Dataset to benchmark" default: laion-small-clip + engine_config: + description: "Engine config to benchmark" + default: qdrant-continuous-benchmark jobs: runManualBenchmark: @@ -27,6 +30,7 @@ jobs: export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} export QDRANT_VERSION=${{ inputs.qdrant_version }} export DATASETS=${{ inputs.dataset }} + export ENGINE_NAME=${{ inputs.engine_config }} export POSTGRES_TABLE=benchmark_manual bash -x tools/setup_ci.sh bash -x tools/run_ci.sh diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index b30bc0e5..81f9326f 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -45,6 +45,33 @@ ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, + { + "name": "qdrant-bq-continuous-benchmark", + "engine": "qdrant", + "connection_params": { "timeout": 30 }, + "collection_params": { + "hnsw_config": { + "m": 32, + "ef_construct": 256 + }, + "quantization_config": { "binary": {"always_ram": true} }, + "optimizers_config": { + "max_segment_size": 1000000, + "default_segment_number": 3, + "memmap_threshold": 10000000 + } + }, + "search_params": [ + { + "parallel": 8, + "config": { + "hnsw_ef": 256, + "quantization": { "rescore": true, "oversampling": 2.0 } + } + } + ], + "upload_params": { "parallel": 16, "batch_size": 1024 } + }, { "name": "qdrant-sparse-vector", "engine": "qdrant", From e026701f13c4a39599310d4e3c9c3784448b06a2 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Tue, 4 Jun 2024 01:26:43 +0530 Subject: [PATCH 018/101] feat: Add DBpedia OpenAI embedding dataset with 100k vectors (#150) --- .github/workflows/continuous-benchmark.yaml | 2 +- datasets/datasets.json | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 6e8b6e61..370b8197 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -26,7 +26,7 @@ jobs: DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark" DATASET_TO_ENGINE["msmarco-sparse-100K"]="qdrant-sparse-vector" DATASET_TO_ENGINE["h-and-m-2048-angular-filters"]="qdrant-continuous-benchmark" - DATASET_TO_ENGINE["dbpedia-openai-1M-1536-angular"]="qdrant-bq-continuous-benchmark" + DATASET_TO_ENGINE["dbpedia-openai-100K-1536-angular"]="qdrant-bq-continuous-benchmark" for dataset in "${!DATASET_TO_ENGINE[@]}"; do export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]} diff --git a/datasets/datasets.json b/datasets/datasets.json index f2e646de..c9111a04 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -66,6 +66,14 @@ "path": "dbpedia-openai-1M-1536-angular/dbpedia_openai_1M", "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/dbpedia_openai_1M.tgz" }, + { + "name": "dbpedia-openai-100K-1536-angular", + "vector_size": 1536, + "distance": "cosine", + "type": "tar", + "path": "dbpedia-openai-100K-1536-angular/dbpedia_openai_100K", + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/dbpedia_openai_100K.tgz" + }, { "name": "msmarco-sparse-100K", "type": "sparse", From df382ae183a7ebbeb5df0ab094863951fd6fe0d6 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Wed, 5 Jun 2024 09:29:16 +0200 Subject: [PATCH 019/101] Fix github triggers (#154) Fix github triggers --- .../manual-all-engines-benchmark.yaml | 114 +++++++++++------- 1 file changed, 71 insertions(+), 43 deletions(-) diff --git a/.github/workflows/manual-all-engines-benchmark.yaml b/.github/workflows/manual-all-engines-benchmark.yaml index 38737409..ccb2a487 100644 --- a/.github/workflows/manual-all-engines-benchmark.yaml +++ b/.github/workflows/manual-all-engines-benchmark.yaml @@ -12,127 +12,155 @@ on: jobs: elasticsearchBenchmark: - if: > - ( - startsWith(github.event.head_commit.modified, 'engine/clients/elasticsearch') || - startsWith(github.event.head_commit.modified, 'engine/servers/elasticsearch') || - startsWith(github.event.head_commit.modified, 'engine/base_client/') - ) name: benchmark - elasticsearch-default - random-100 - against elasticsearch-single-node-ci runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v3 + id: changes + with: + filters: | + elasticsearch: + - 'engine/clients/elasticsearch/**' + - 'engine/servers/elasticsearch-single-node/**' + - 'engine/servers/elasticsearch-single-node-ci/**' + - 'engine/base_client/**' - uses: ./.github/workflows/actions/run-engine-benchmark + if: ${{ steps.changes.outputs.elasticsearch == 'true' || github.event_name == 'workflow_dispatch' }} with: engine: "elasticsearch-default" dataset: "random-100" compose_file: "engine/servers/elasticsearch-single-node-ci/docker-compose.yaml" milvusBenchmark: - if: > - ( - startsWith(github.event.head_commit.modified, 'engine/clients/milvus') || - startsWith(github.event.head_commit.modified, 'engine/servers/milvus') || - startsWith(github.event.head_commit.modified, 'engine/base_client/') - ) name: benchmark - milvus-default - random-100 - against milvus-single-node runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v3 + id: changes + with: + filters: | + milvus: + - 'engine/clients/milvus/**' + - 'engine/servers/milvus-single-node/**' + - 'engine/servers/milvus-limit-ram/**' + - 'engine/base_client/**' - uses: ./.github/workflows/actions/run-engine-benchmark + if: ${{ steps.changes.outputs.milvus == 'true' || github.event_name == 'workflow_dispatch' }} with: engine: "milvus-default" dataset: "random-100" compose_file: "engine/servers/milvus-single-node/docker-compose.yaml" opensearchBenchmark: - if: > - ( - startsWith(github.event.head_commit.modified, 'engine/clients/opensearch') || - startsWith(github.event.head_commit.modified, 'engine/servers/opensearch') || - startsWith(github.event.head_commit.modified, 'engine/base_client/') - ) name: benchmark - opensearch-default - glove-25-angular - against opensearch-single-node-ci runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v3 + id: changes + with: + filters: | + opensearch: + - 'engine/clients/opensearch/**' + - 'engine/servers/opensearch-single-node/**' + - 'engine/servers/opensearch-single-node-ci/**' + - 'engine/base_client/**' - uses: ./.github/workflows/actions/run-engine-benchmark + if: ${{ steps.changes.outputs.opensearch == 'true' || github.event_name == 'workflow_dispatch' }} with: engine: "opensearch-default" dataset: "glove-25-angular" compose_file: "engine/servers/opensearch-single-node-ci/docker-compose.yaml" pgvectorBenchmark: - if: > - ( - startsWith(github.event.head_commit.modified, 'engine/clients/pgvector') || - startsWith(github.event.head_commit.modified, 'engine/servers/pgvector') || - startsWith(github.event.head_commit.modified, 'engine/base_client/') - ) name: benchmark - pgvector-default - random-100 - against pgvector-single-node runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v3 + id: changes + with: + filters: | + pgvector: + - 'engine/clients/pgvector/**' + - 'engine/servers/pgvector-single-node/**' + - 'engine/base_client/**' - uses: ./.github/workflows/actions/run-engine-benchmark + if: ${{ steps.changes.outputs.pgvector == 'true' || github.event_name == 'workflow_dispatch' }} with: engine: "pgvector-default" dataset: "random-100" compose_file: "engine/servers/pgvector-single-node/docker-compose.yaml" qdrantBenchmark: - if: > - ( - startsWith(github.event.head_commit.modified, 'engine/clients/qdrant') || - startsWith(github.event.head_commit.modified, 'engine/servers/qdrant') || - startsWith(github.event.head_commit.modified, 'engine/base_client/') - ) name: benchmark - qdrant-default - random-100 - against qdrant-single-node runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v3 + id: changes + with: + filters: | + qdrant: + - 'engine/clients/qdrant/**' + - 'engine/servers/qdrant-single-node/**' + - 'engine/servers/qdrant-limit-ram/**' + - 'engine/servers/qdrant-billion-scale/**' + - 'engine/servers/qdrant-cluster-mode/**' + - 'engine/servers/qdrant-continuous-benchmarks/**' + - 'engine/base_client/**' - uses: ./.github/workflows/actions/run-engine-benchmark + if: ${{ steps.changes.outputs.qdrant == 'true' || github.event_name == 'workflow_dispatch' }} with: engine: "qdrant-default" dataset: "random-100" compose_file: "engine/servers/qdrant-single-node/docker-compose.yaml" redisBenchmark: - if: > - ( - startsWith(github.event.head_commit.modified, 'engine/clients/redis') || - startsWith(github.event.head_commit.modified, 'engine/servers/redis') || - startsWith(github.event.head_commit.modified, 'engine/base_client/') - ) name: benchmark - redis-default - random-100 - against redis-single-node runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v3 + id: changes + with: + filters: | + redis: + - 'engine/clients/redis/**' + - 'engine/servers/redis-single-node/**' + - 'engine/base_client/**' - uses: ./.github/workflows/actions/run-engine-benchmark + if: ${{ steps.changes.outputs.weaviate == 'true' || github.event_name == 'workflow_dispatch' }} with: engine: "redis-default" dataset: "random-100" compose_file: "engine/servers/redis-single-node/docker-compose.yaml" weaviateBenchmark: - if: > - ( - startsWith(github.event.head_commit.modified, 'engine/clients/weaviate') || - startsWith(github.event.head_commit.modified, 'engine/servers/weaviate') || - startsWith(github.event.head_commit.modified, 'engine/base_client/') - ) name: benchmark - weaviate-default - random-100 - against weaviate-single-node runs-on: ubuntu-latest timeout-minutes: 30 steps: - uses: actions/checkout@v3 + - uses: dorny/paths-filter@v3 + id: changes + with: + filters: | + weaviate: + - 'engine/clients/weaviate/**' + - 'engine/servers/weaviate-single-node/**' + - 'engine/base_client/**' - uses: ./.github/workflows/actions/run-engine-benchmark + if: ${{ steps.changes.outputs.weaviate == 'true' || github.event_name == 'workflow_dispatch' }} with: engine: "weaviate-default" dataset: "random-100" - compose_file: "engine/servers/weaviate-single-node/docker-compose.yaml" + compose_file: "engine/servers/weaviate-single-node/docker-compose.yaml" \ No newline at end of file From 884fda382ccf75c14136f52c7d0d4a5befe32e17 Mon Sep 17 00:00:00 2001 From: "Filipe Oliveira (Personal)" Date: Wed, 5 Jun 2024 08:46:09 +0100 Subject: [PATCH 020/101] Weaviate version 1.25.1 (#143) * Updated weaviate image to 1.25.1 * Updated weaviate image to 1.25.1 --- engine/servers/weaviate-single-node/docker-compose.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/servers/weaviate-single-node/docker-compose.yaml b/engine/servers/weaviate-single-node/docker-compose.yaml index e5e9e9ec..9d6c941d 100644 --- a/engine/servers/weaviate-single-node/docker-compose.yaml +++ b/engine/servers/weaviate-single-node/docker-compose.yaml @@ -8,13 +8,13 @@ services: - '8090' - --scheme - http - image: cr.weaviate.io/semitechnologies/weaviate:1.24.1 + image: cr.weaviate.io/semitechnologies/weaviate:1.25.1 network_mode: host logging: driver: "json-file" options: - max-file: 1 - max-size: 10m + max-file: "1" + max-size: "10m" environment: QUERY_DEFAULTS_LIMIT: 10 AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'true' From b66b4c5da3ec75369d6e6841afd79b8568469451 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Tue, 11 Jun 2024 21:33:37 +0530 Subject: [PATCH 021/101] feat: Add 15m timeout for CI benchmarks (#157) * feat: Add 15m timeout for CI benchmarks * feat: Add Slack alert for CI benchmarks (#158) * feat: Add Slack alert for CI benchmarks * Update continuous-benchmark.yaml * fix: Use quotes on func name to declare they arent commands * feat: Separate failure reasons * fix: YAML error --- .github/workflows/continuous-benchmark.yaml | 32 +++++++++++++++++++-- tools/run_ci.sh | 13 +++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 370b8197..a559d378 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -16,6 +16,7 @@ jobs: with: ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - name: Benches + id: benches run: | export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} @@ -28,15 +29,42 @@ jobs: DATASET_TO_ENGINE["h-and-m-2048-angular-filters"]="qdrant-continuous-benchmark" DATASET_TO_ENGINE["dbpedia-openai-100K-1536-angular"]="qdrant-bq-continuous-benchmark" + set +e + for dataset in "${!DATASET_TO_ENGINE[@]}"; do export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]} export DATASETS=$dataset # Benchmark the dev branch: export QDRANT_VERSION=ghcr/dev - bash -x tools/run_ci.sh + timeout 15m bash -x tools/run_ci.sh # Benchmark the master branch: export QDRANT_VERSION=docker/master - bash -x tools/run_ci.sh + timeout 15m bash -x tools/run_ci.sh done + + set -e + - name: Fail job if any of the benches failed + if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' + run: exit 1 + - name: Send Notification + if: failure() || cancelled() + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "text": "CI benchmarks run status: ${{ job.status }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "CI benchmarks failed because of ${{ steps.benches.outputs.failed }}.\nView the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + } + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 3168bd77..cc054041 100644 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -2,6 +2,19 @@ set -e +function handle_error() { + echo "Error occured ${QDRANT_VERSION@A} ${ENGINE_NAME@A} ${DATASETS@A}" + echo "{failed}={error}" >> $GITHUB_OUTPUT +} + +function handle_term() { + echo "Timeout occured ${QDRANT_VERSION@A} ${ENGINE_NAME@A} ${DATASETS@A}" + echo "{failed}={timeout}" >> $GITHUB_OUTPUT +} + +trap 'handle_err' ERR +trap 'handle_term' TERM + # Script, that runs benchmark within the GitHub Actions CI environment SCRIPT=$(realpath "$0") From 8a1c66482f87f2a3ced36bf1f0e944bab61d3048 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 12 Jun 2024 04:19:00 +0530 Subject: [PATCH 022/101] fix: Rename nodes in cluster mode (#161) --- .../qdrant-cluster-mode/docker-compose.yaml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/engine/servers/qdrant-cluster-mode/docker-compose.yaml b/engine/servers/qdrant-cluster-mode/docker-compose.yaml index 87fb7961..4c5288ef 100644 --- a/engine/servers/qdrant-cluster-mode/docker-compose.yaml +++ b/engine/servers/qdrant-cluster-mode/docker-compose.yaml @@ -1,7 +1,7 @@ version: "3.7" services: - qdrant_node_1: + qdrant-node-0: image: qdrant/qdrant:v1.7.3 environment: - QDRANT__SERVICE__GRPC_PORT=6334 @@ -10,43 +10,43 @@ services: ports: - "6333:6333" - "6334:6334" - command: ./qdrant --uri 'http://qdrant_node_1:6335' + command: ./qdrant --uri 'http://qdrant-node-0:6335' # deploy: # resources: # limits: # cpus: '0.07' - qdrant_node_follower: + qdrant-node-1: image: qdrant/qdrant:v1.7.3 environment: - QDRANT__SERVICE__GRPC_PORT=6334 - QDRANT__CLUSTER__ENABLED=true - QDRANT__CLUSTER__P2P__PORT=6335 depends_on: - - qdrant_node_1 + - qdrant-node-0 ports: - "6433:6333" - "6434:6334" - command: bash -c "sleep 5 && ./qdrant --bootstrap 'http://qdrant_node_1:6335' --uri 'http://qdrant_node_follower:6335'" + command: bash -c "sleep 5 && ./qdrant --bootstrap 'http://qdrant-node-0:6335' --uri 'http://qdrant-node-1:6335'" # deploy: # resources: # limits: # cpus: '0.05' - qdrant_node_follower_2: + qdrant-node-2: image: qdrant/qdrant:v1.7.3 environment: - QDRANT__SERVICE__GRPC_PORT=6334 - QDRANT__CLUSTER__ENABLED=true - QDRANT__CLUSTER__P2P__PORT=6335 depends_on: - - qdrant_node_1 + - qdrant-node-0 ports: - "6533:6333" - "6534:6334" - command: bash -c "sleep 6 && ./qdrant --bootstrap 'http://qdrant_node_1:6335' --uri 'http://qdrant_node_follower_2:6335'" + command: bash -c "sleep 6 && ./qdrant --bootstrap 'http://qdrant-node-0:6335' --uri 'http://qdrant-node-2:6335'" # deploy: # resources: # limits: From 7afc1426f43931a54a6871d04bb2615829e7a289 Mon Sep 17 00:00:00 2001 From: generall Date: Wed, 12 Jun 2024 16:21:57 +0200 Subject: [PATCH 023/101] up qdrant version --- .../qdrant-single-node/docker-compose.yaml | 2 +- poetry.lock | 1374 +++++++---------- pyproject.toml | 2 +- 3 files changed, 586 insertions(+), 792 deletions(-) diff --git a/engine/servers/qdrant-single-node/docker-compose.yaml b/engine/servers/qdrant-single-node/docker-compose.yaml index 8285e9d3..897a9a36 100644 --- a/engine/servers/qdrant-single-node/docker-compose.yaml +++ b/engine/servers/qdrant-single-node/docker-compose.yaml @@ -2,7 +2,7 @@ version: '3.7' services: qdrant_bench: - image: ${CONTAINER_REGISTRY:-docker.io}/qdrant/qdrant:v1.8.2 + image: ${CONTAINER_REGISTRY:-docker.io}/qdrant/qdrant:v1.9.5 network_mode: host logging: driver: "json-file" diff --git a/poetry.lock b/poetry.lock index d58e98b2..e022d87c 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,14 +1,14 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. [[package]] name = "annotated-types" -version = "0.6.0" +version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" files = [ - {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, - {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, + {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, + {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] [package.dependencies] @@ -16,13 +16,13 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} [[package]] name = "anyio" -version = "4.3.0" +version = "4.4.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, - {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, ] [package.dependencies] @@ -47,63 +47,6 @@ files = [ {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, ] -[[package]] -name = "argon2-cffi" -version = "23.1.0" -description = "Argon2 for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "argon2_cffi-23.1.0-py3-none-any.whl", hash = "sha256:c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea"}, - {file = "argon2_cffi-23.1.0.tar.gz", hash = "sha256:879c3e79a2729ce768ebb7d36d4609e3a78a4ca2ec3a9f12286ca057e3d0db08"}, -] - -[package.dependencies] -argon2-cffi-bindings = "*" - -[package.extras] -dev = ["argon2-cffi[tests,typing]", "tox (>4)"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-notfound-page"] -tests = ["hypothesis", "pytest"] -typing = ["mypy"] - -[[package]] -name = "argon2-cffi-bindings" -version = "21.2.0" -description = "Low-level CFFI bindings for Argon2" -optional = false -python-versions = ">=3.6" -files = [ - {file = "argon2-cffi-bindings-21.2.0.tar.gz", hash = "sha256:bb89ceffa6c791807d1305ceb77dbfacc5aa499891d2c55661c6459651fc39e3"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ccb949252cb2ab3a08c02024acb77cfb179492d5701c7cbdbfd776124d4d2367"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9524464572e12979364b7d600abf96181d3541da11e23ddf565a32e70bd4dc0d"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:58ed19212051f49a523abb1dbe954337dc82d947fb6e5a0da60f7c8471a8476c"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:bd46088725ef7f58b5a1ef7ca06647ebaf0eb4baff7d1d0d177c6cc8744abd86"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_i686.whl", hash = "sha256:8cd69c07dd875537a824deec19f978e0f2078fdda07fd5c42ac29668dda5f40f"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:f1152ac548bd5b8bcecfb0b0371f082037e47128653df2e8ba6e914d384f3c3e"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win32.whl", hash = "sha256:603ca0aba86b1349b147cab91ae970c63118a0f30444d4bc80355937c950c082"}, - {file = "argon2_cffi_bindings-21.2.0-cp36-abi3-win_amd64.whl", hash = "sha256:b2ef1c30440dbbcba7a5dc3e319408b59676e2e039e2ae11a8775ecf482b192f"}, - {file = "argon2_cffi_bindings-21.2.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e415e3f62c8d124ee16018e491a009937f8cf7ebf5eb430ffc5de21b900dad93"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3e385d1c39c520c08b53d63300c3ecc28622f076f4c2b0e6d7e796e9f6502194"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3e3cc67fdb7d82c4718f19b4e7a87123caf8a93fde7e23cf66ac0337d3cb3f"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a22ad9800121b71099d0fb0a65323810a15f2e292f2ba450810a7316e128ee5"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f9f8b450ed0547e3d473fdc8612083fd08dd2120d6ac8f73828df9b7d45bb351"}, - {file = "argon2_cffi_bindings-21.2.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:93f9bf70084f97245ba10ee36575f0c3f1e7d7724d67d8e5b08e61787c320ed7"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:3b9ef65804859d335dc6b31582cad2c5166f0c3e7975f324d9ffaa34ee7e6583"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4966ef5848d820776f5f562a7d45fdd70c2f330c961d0d745b784034bd9f48d"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:20ef543a89dee4db46a1a6e206cd015360e5a75822f76df533845c3cbaf72670"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2937d286e2ad0cc79a7087d3c272832865f779430e0cc2b4f3718d3159b0cb"}, - {file = "argon2_cffi_bindings-21.2.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:5e00316dabdaea0b2dd82d141cc66889ced0cdcbfa599e8b471cf22c620c329a"}, -] - -[package.dependencies] -cffi = ">=1.0.1" - -[package.extras] -dev = ["cogapp", "pre-commit", "pytest", "wheel"] -tests = ["pytest"] - [[package]] name = "asttokens" version = "2.4.1" @@ -135,57 +78,18 @@ files = [ [[package]] name = "authlib" -version = "1.3.0" +version = "1.3.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false python-versions = ">=3.8" files = [ - {file = "Authlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:9637e4de1fb498310a56900b3e2043a206b03cb11c05422014b0302cbc814be3"}, - {file = "Authlib-1.3.0.tar.gz", hash = "sha256:959ea62a5b7b5123c5059758296122b57cd2585ae2ed1c0622c21b371ffdae06"}, + {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, + {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, ] [package.dependencies] cryptography = "*" -[[package]] -name = "azure-core" -version = "1.30.1" -description = "Microsoft Azure Core Library for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "azure-core-1.30.1.tar.gz", hash = "sha256:26273a254131f84269e8ea4464f3560c731f29c0c1f69ac99010845f239c1a8f"}, - {file = "azure_core-1.30.1-py3-none-any.whl", hash = "sha256:7c5ee397e48f281ec4dd773d67a0a47a0962ed6fa833036057f9ea067f688e74"}, -] - -[package.dependencies] -requests = ">=2.21.0" -six = ">=1.11.0" -typing-extensions = ">=4.6.0" - -[package.extras] -aio = ["aiohttp (>=3.0)"] - -[[package]] -name = "azure-storage-blob" -version = "12.19.1" -description = "Microsoft Azure Blob Storage Client Library for Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "azure-storage-blob-12.19.1.tar.gz", hash = "sha256:13e16ba42fc54ac2c7e8f976062173a5c82b9ec0594728e134aac372965a11b0"}, - {file = "azure_storage_blob-12.19.1-py3-none-any.whl", hash = "sha256:c5530dc51c21c9564e4eb706cd499befca8819b10dd89716d3fc90d747556243"}, -] - -[package.dependencies] -azure-core = ">=1.28.0,<2.0.0" -cryptography = ">=2.1.4" -isodate = ">=0.6.1" -typing-extensions = ">=4.3.0" - -[package.extras] -aio = ["azure-core[aio] (>=1.28.0,<2.0.0)"] - [[package]] name = "backcall" version = "0.2.0" @@ -227,13 +131,13 @@ tzdata = ["tzdata"] [[package]] name = "certifi" -version = "2024.2.2" +version = "2024.6.2" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, + {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, + {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, ] [[package]] @@ -437,43 +341,43 @@ files = [ [[package]] name = "cryptography" -version = "42.0.5" +version = "42.0.8" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:a30596bae9403a342c978fb47d9b0ee277699fa53bbafad14706af51fe543d16"}, - {file = "cryptography-42.0.5-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:b7ffe927ee6531c78f81aa17e684e2ff617daeba7f189f911065b2ea2d526dec"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2424ff4c4ac7f6b8177b53c17ed5d8fa74ae5955656867f5a8affaca36a27abb"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:329906dcc7b20ff3cad13c069a78124ed8247adcac44b10bea1130e36caae0b4"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:b03c2ae5d2f0fc05f9a2c0c997e1bc18c8229f392234e8a0194f202169ccd278"}, - {file = "cryptography-42.0.5-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f8837fe1d6ac4a8052a9a8ddab256bc006242696f03368a4009be7ee3075cdb7"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:0270572b8bd2c833c3981724b8ee9747b3ec96f699a9665470018594301439ee"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:b8cac287fafc4ad485b8a9b67d0ee80c66bf3574f655d3b97ef2e1082360faf1"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:16a48c23a62a2f4a285699dba2e4ff2d1cff3115b9df052cdd976a18856d8e3d"}, - {file = "cryptography-42.0.5-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2bce03af1ce5a5567ab89bd90d11e7bbdff56b8af3acbbec1faded8f44cb06da"}, - {file = "cryptography-42.0.5-cp37-abi3-win32.whl", hash = "sha256:b6cd2203306b63e41acdf39aa93b86fb566049aeb6dc489b70e34bcd07adca74"}, - {file = "cryptography-42.0.5-cp37-abi3-win_amd64.whl", hash = "sha256:98d8dc6d012b82287f2c3d26ce1d2dd130ec200c8679b6213b3c73c08b2b7940"}, - {file = "cryptography-42.0.5-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:5e6275c09d2badf57aea3afa80d975444f4be8d3bc58f7f80d2a484c6f9485c8"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4985a790f921508f36f81831817cbc03b102d643b5fcb81cd33df3fa291a1a1"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7cde5f38e614f55e28d831754e8a3bacf9ace5d1566235e39d91b35502d6936e"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7367d7b2eca6513681127ebad53b2582911d1736dc2ffc19f2c3ae49997496bc"}, - {file = "cryptography-42.0.5-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cd2030f6650c089aeb304cf093f3244d34745ce0cfcc39f20c6fbfe030102e2a"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:a2913c5375154b6ef2e91c10b5720ea6e21007412f6437504ffea2109b5a33d7"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:c41fb5e6a5fe9ebcd58ca3abfeb51dffb5d83d6775405305bfa8715b76521922"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3eaafe47ec0d0ffcc9349e1708be2aaea4c6dd4978d76bf6eb0cb2c13636c6fc"}, - {file = "cryptography-42.0.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:1b95b98b0d2af784078fa69f637135e3c317091b615cd0905f8b8a087e86fa30"}, - {file = "cryptography-42.0.5-cp39-abi3-win32.whl", hash = "sha256:1f71c10d1e88467126f0efd484bd44bca5e14c664ec2ede64c32f20875c0d413"}, - {file = "cryptography-42.0.5-cp39-abi3-win_amd64.whl", hash = "sha256:a011a644f6d7d03736214d38832e030d8268bcff4a41f728e6030325fea3e400"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:9481ffe3cf013b71b2428b905c4f7a9a4f76ec03065b05ff499bb5682a8d9ad8"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:ba334e6e4b1d92442b75ddacc615c5476d4ad55cc29b15d590cc6b86efa487e2"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:ba3e4a42397c25b7ff88cdec6e2a16c2be18720f317506ee25210f6d31925f9c"}, - {file = "cryptography-42.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:111a0d8553afcf8eb02a4fea6ca4f59d48ddb34497aa8706a6cf536f1a5ec576"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cd65d75953847815962c84a4654a84850b2bb4aed3f26fadcc1c13892e1e29f6"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e807b3188f9eb0eaa7bbb579b462c5ace579f1cedb28107ce8b48a9f7ad3679e"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:f12764b8fffc7a123f641d7d049d382b73f96a34117e0b637b80643169cec8ac"}, - {file = "cryptography-42.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:37dd623507659e08be98eec89323469e8c7b4c1407c85112634ae3dbdb926fdd"}, - {file = "cryptography-42.0.5.tar.gz", hash = "sha256:6fe07eec95dfd477eb9530aef5bead34fec819b3aaf6c5bd6d20565da607bfe1"}, + {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, + {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, + {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, + {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, + {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, + {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, + {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, + {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, + {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, + {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, + {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, + {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, + {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, + {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, ] [package.dependencies] @@ -513,13 +417,13 @@ files = [ [[package]] name = "elastic-transport" -version = "8.12.0" +version = "8.13.1" description = "Transport classes and utilities shared among Python Elastic client libraries" optional = false python-versions = ">=3.7" files = [ - {file = "elastic-transport-8.12.0.tar.gz", hash = "sha256:48839b942fcce199eece1558ecea6272e116c58da87ca8d495ef12eb61effaf7"}, - {file = "elastic_transport-8.12.0-py3-none-any.whl", hash = "sha256:87d9dc9dee64a05235e7624ed7e6ab6e5ca16619aa7a6d22e853273b9f1cfbee"}, + {file = "elastic_transport-8.13.1-py3-none-any.whl", hash = "sha256:5d4bb6b8e9d74a9c16de274e91a5caf65a3a8d12876f1e99152975e15b2746fe"}, + {file = "elastic_transport-8.13.1.tar.gz", hash = "sha256:16339d392b4bbe86ad00b4bdeecff10edf516d32bc6c16053846625f2c6ea250"}, ] [package.dependencies] @@ -527,25 +431,27 @@ certifi = "*" urllib3 = ">=1.26.2,<3" [package.extras] -develop = ["aiohttp", "furo", "mock", "pytest", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "pytest-mock", "requests", "sphinx (>2)", "sphinx-autodoc-typehints", "trustme"] +develop = ["aiohttp", "furo", "httpx", "mock", "opentelemetry-api", "opentelemetry-sdk", "orjson", "pytest", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "pytest-mock", "requests", "respx", "sphinx (>2)", "sphinx-autodoc-typehints", "trustme"] [[package]] name = "elasticsearch" -version = "8.12.1" +version = "8.14.0" description = "Python client for Elasticsearch" optional = false python-versions = ">=3.7" files = [ - {file = "elasticsearch-8.12.1-py3-none-any.whl", hash = "sha256:cc459b7e0fb88dc85b43b9d7d254cffad552b0063a3e0a12290c8fa5f138c038"}, - {file = "elasticsearch-8.12.1.tar.gz", hash = "sha256:00c997720fbd0f2afe5417c8193cf65d116817a0250de0521e30c3e81f00b8ac"}, + {file = "elasticsearch-8.14.0-py3-none-any.whl", hash = "sha256:cef8ef70a81af027f3da74a4f7d9296b390c636903088439087b8262a468c130"}, + {file = "elasticsearch-8.14.0.tar.gz", hash = "sha256:aa2490029dd96f4015b333c1827aa21fd6c0a4d223b00dfb0fe933b8d09a511b"}, ] [package.dependencies] -elastic-transport = ">=8,<9" +elastic-transport = ">=8.13,<9" [package.extras] async = ["aiohttp (>=3,<4)"] -requests = ["requests (>=2.4.0,<3.0.0)"] +orjson = ["orjson (>=3)"] +requests = ["requests (>=2.4.0,!=2.32.2,<3.0.0)"] +vectorstore-mmr = ["numpy (>=1)", "simsimd (>=3)"] [[package]] name = "environs" @@ -568,15 +474,25 @@ django = ["dj-database-url", "dj-email-url", "django-cache-url"] lint = ["flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)"] tests = ["dj-database-url", "dj-email-url", "django-cache-url", "pytest"] +[[package]] +name = "events" +version = "0.5" +description = "Bringing the elegance of C# EventHandler to Python" +optional = false +python-versions = "*" +files = [ + {file = "Events-0.5-py3-none-any.whl", hash = "sha256:a7286af378ba3e46640ac9825156c93bdba7502174dd696090fdfcd4d80a1abd"}, +] + [[package]] name = "exceptiongroup" -version = "1.2.0" +version = "1.2.1" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.0-py3-none-any.whl", hash = "sha256:4bfd3996ac73b41e9b9628b04e079f193850720ea5945fc96a08633c66912f14"}, - {file = "exceptiongroup-1.2.0.tar.gz", hash = "sha256:91f5c769735f051a4290d52edd0858999b57e5876e9f85937691bd4c9fa3ed68"}, + {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, + {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, ] [package.extras] @@ -598,167 +514,151 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "filelock" -version = "3.13.1" +version = "3.14.0" description = "A platform independent file lock." optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.13.1-py3-none-any.whl", hash = "sha256:57dbda9b35157b05fb3e58ee91448612eb674172fab98ee235ccb0b5bee19a1c"}, - {file = "filelock-3.13.1.tar.gz", hash = "sha256:521f5f56c50f8426f5e03ad3b281b490a87ef15bc6c526f168290f0c7148d44e"}, + {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, + {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.24)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] +docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] typing = ["typing-extensions (>=4.8)"] [[package]] name = "grpcio" -version = "1.60.0" +version = "1.63.0" description = "HTTP/2-based RPC framework" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "grpcio-1.60.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:d020cfa595d1f8f5c6b343530cd3ca16ae5aefdd1e832b777f9f0eb105f5b139"}, - {file = "grpcio-1.60.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:b98f43fcdb16172dec5f4b49f2fece4b16a99fd284d81c6bbac1b3b69fcbe0ff"}, - {file = "grpcio-1.60.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:20e7a4f7ded59097c84059d28230907cd97130fa74f4a8bfd1d8e5ba18c81491"}, - {file = "grpcio-1.60.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:452ca5b4afed30e7274445dd9b441a35ece656ec1600b77fff8c216fdf07df43"}, - {file = "grpcio-1.60.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43e636dc2ce9ece583b3e2ca41df5c983f4302eabc6d5f9cd04f0562ee8ec1ae"}, - {file = "grpcio-1.60.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e306b97966369b889985a562ede9d99180def39ad42c8014628dd3cc343f508"}, - {file = "grpcio-1.60.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f897c3b127532e6befdcf961c415c97f320d45614daf84deba0a54e64ea2457b"}, - {file = "grpcio-1.60.0-cp310-cp310-win32.whl", hash = "sha256:b87efe4a380887425bb15f220079aa8336276398dc33fce38c64d278164f963d"}, - {file = "grpcio-1.60.0-cp310-cp310-win_amd64.whl", hash = "sha256:a9c7b71211f066908e518a2ef7a5e211670761651039f0d6a80d8d40054047df"}, - {file = "grpcio-1.60.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:fb464479934778d7cc5baf463d959d361954d6533ad34c3a4f1d267e86ee25fd"}, - {file = "grpcio-1.60.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:4b44d7e39964e808b071714666a812049765b26b3ea48c4434a3b317bac82f14"}, - {file = "grpcio-1.60.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:90bdd76b3f04bdb21de5398b8a7c629676c81dfac290f5f19883857e9371d28c"}, - {file = "grpcio-1.60.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91229d7203f1ef0ab420c9b53fe2ca5c1fbeb34f69b3bc1b5089466237a4a134"}, - {file = "grpcio-1.60.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b36a2c6d4920ba88fa98075fdd58ff94ebeb8acc1215ae07d01a418af4c0253"}, - {file = "grpcio-1.60.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:297eef542156d6b15174a1231c2493ea9ea54af8d016b8ca7d5d9cc65cfcc444"}, - {file = "grpcio-1.60.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:87c9224acba0ad8bacddf427a1c2772e17ce50b3042a789547af27099c5f751d"}, - {file = "grpcio-1.60.0-cp311-cp311-win32.whl", hash = "sha256:95ae3e8e2c1b9bf671817f86f155c5da7d49a2289c5cf27a319458c3e025c320"}, - {file = "grpcio-1.60.0-cp311-cp311-win_amd64.whl", hash = "sha256:467a7d31554892eed2aa6c2d47ded1079fc40ea0b9601d9f79204afa8902274b"}, - {file = "grpcio-1.60.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:a7152fa6e597c20cb97923407cf0934e14224af42c2b8d915f48bc3ad2d9ac18"}, - {file = "grpcio-1.60.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:7db16dd4ea1b05ada504f08d0dca1cd9b926bed3770f50e715d087c6f00ad748"}, - {file = "grpcio-1.60.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:b0571a5aef36ba9177e262dc88a9240c866d903a62799e44fd4aae3f9a2ec17e"}, - {file = "grpcio-1.60.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6fd9584bf1bccdfff1512719316efa77be235469e1e3295dce64538c4773840b"}, - {file = "grpcio-1.60.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6a478581b1a1a8fdf3318ecb5f4d0cda41cacdffe2b527c23707c9c1b8fdb55"}, - {file = "grpcio-1.60.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:77c8a317f0fd5a0a2be8ed5cbe5341537d5c00bb79b3bb27ba7c5378ba77dbca"}, - {file = "grpcio-1.60.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1c30bb23a41df95109db130a6cc1b974844300ae2e5d68dd4947aacba5985aa5"}, - {file = "grpcio-1.60.0-cp312-cp312-win32.whl", hash = "sha256:2aef56e85901c2397bd557c5ba514f84de1f0ae5dd132f5d5fed042858115951"}, - {file = "grpcio-1.60.0-cp312-cp312-win_amd64.whl", hash = "sha256:e381fe0c2aa6c03b056ad8f52f8efca7be29fb4d9ae2f8873520843b6039612a"}, - {file = "grpcio-1.60.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:92f88ca1b956eb8427a11bb8b4a0c0b2b03377235fc5102cb05e533b8693a415"}, - {file = "grpcio-1.60.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:e278eafb406f7e1b1b637c2cf51d3ad45883bb5bd1ca56bc05e4fc135dfdaa65"}, - {file = "grpcio-1.60.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:a48edde788b99214613e440fce495bbe2b1e142a7f214cce9e0832146c41e324"}, - {file = "grpcio-1.60.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de2ad69c9a094bf37c1102b5744c9aec6cf74d2b635558b779085d0263166454"}, - {file = "grpcio-1.60.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:073f959c6f570797272f4ee9464a9997eaf1e98c27cb680225b82b53390d61e6"}, - {file = "grpcio-1.60.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:c826f93050c73e7769806f92e601e0efdb83ec8d7c76ddf45d514fee54e8e619"}, - {file = "grpcio-1.60.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:9e30be89a75ee66aec7f9e60086fadb37ff8c0ba49a022887c28c134341f7179"}, - {file = "grpcio-1.60.0-cp37-cp37m-win_amd64.whl", hash = "sha256:b0fb2d4801546598ac5cd18e3ec79c1a9af8b8f2a86283c55a5337c5aeca4b1b"}, - {file = "grpcio-1.60.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:9073513ec380434eb8d21970e1ab3161041de121f4018bbed3146839451a6d8e"}, - {file = "grpcio-1.60.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:74d7d9fa97809c5b892449b28a65ec2bfa458a4735ddad46074f9f7d9550ad13"}, - {file = "grpcio-1.60.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:1434ca77d6fed4ea312901122dc8da6c4389738bf5788f43efb19a838ac03ead"}, - {file = "grpcio-1.60.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e61e76020e0c332a98290323ecfec721c9544f5b739fab925b6e8cbe1944cf19"}, - {file = "grpcio-1.60.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675997222f2e2f22928fbba640824aebd43791116034f62006e19730715166c0"}, - {file = "grpcio-1.60.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:5208a57eae445ae84a219dfd8b56e04313445d146873117b5fa75f3245bc1390"}, - {file = "grpcio-1.60.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:428d699c8553c27e98f4d29fdc0f0edc50e9a8a7590bfd294d2edb0da7be3629"}, - {file = "grpcio-1.60.0-cp38-cp38-win32.whl", hash = "sha256:83f2292ae292ed5a47cdcb9821039ca8e88902923198f2193f13959360c01860"}, - {file = "grpcio-1.60.0-cp38-cp38-win_amd64.whl", hash = "sha256:705a68a973c4c76db5d369ed573fec3367d7d196673fa86614b33d8c8e9ebb08"}, - {file = "grpcio-1.60.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:c193109ca4070cdcaa6eff00fdb5a56233dc7610216d58fb81638f89f02e4968"}, - {file = "grpcio-1.60.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:676e4a44e740deaba0f4d95ba1d8c5c89a2fcc43d02c39f69450b1fa19d39590"}, - {file = "grpcio-1.60.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:5ff21e000ff2f658430bde5288cb1ac440ff15c0d7d18b5fb222f941b46cb0d2"}, - {file = "grpcio-1.60.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4c86343cf9ff7b2514dd229bdd88ebba760bd8973dac192ae687ff75e39ebfab"}, - {file = "grpcio-1.60.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fd3b3968ffe7643144580f260f04d39d869fcc2cddb745deef078b09fd2b328"}, - {file = "grpcio-1.60.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:30943b9530fe3620e3b195c03130396cd0ee3a0d10a66c1bee715d1819001eaf"}, - {file = "grpcio-1.60.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b10241250cb77657ab315270b064a6c7f1add58af94befa20687e7c8d8603ae6"}, - {file = "grpcio-1.60.0-cp39-cp39-win32.whl", hash = "sha256:79a050889eb8d57a93ed21d9585bb63fca881666fc709f5d9f7f9372f5e7fd03"}, - {file = "grpcio-1.60.0-cp39-cp39-win_amd64.whl", hash = "sha256:8a97a681e82bc11a42d4372fe57898d270a2707f36c45c6676e49ce0d5c41353"}, - {file = "grpcio-1.60.0.tar.gz", hash = "sha256:2199165a1affb666aa24adf0c97436686d0a61bc5fc113c037701fb7c7fceb96"}, + {file = "grpcio-1.63.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c"}, + {file = "grpcio-1.63.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f"}, + {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d"}, + {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f"}, + {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d"}, + {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b"}, + {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357"}, + {file = "grpcio-1.63.0-cp310-cp310-win32.whl", hash = "sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d"}, + {file = "grpcio-1.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a"}, + {file = "grpcio-1.63.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3"}, + {file = "grpcio-1.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5"}, + {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb"}, + {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3"}, + {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2"}, + {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7"}, + {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f"}, + {file = "grpcio-1.63.0-cp311-cp311-win32.whl", hash = "sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c"}, + {file = "grpcio-1.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434"}, + {file = "grpcio-1.63.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57"}, + {file = "grpcio-1.63.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6"}, + {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d"}, + {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172"}, + {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2"}, + {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0"}, + {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9"}, + {file = "grpcio-1.63.0-cp312-cp312-win32.whl", hash = "sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b"}, + {file = "grpcio-1.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434"}, + {file = "grpcio-1.63.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fdf348ae69c6ff484402cfdb14e18c1b0054ac2420079d575c53a60b9b2853ae"}, + {file = "grpcio-1.63.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a3abfe0b0f6798dedd2e9e92e881d9acd0fdb62ae27dcbbfa7654a57e24060c0"}, + {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6ef0ad92873672a2a3767cb827b64741c363ebaa27e7f21659e4e31f4d750280"}, + {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b416252ac5588d9dfb8a30a191451adbf534e9ce5f56bb02cd193f12d8845b7f"}, + {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3b77eaefc74d7eb861d3ffbdf91b50a1bb1639514ebe764c47773b833fa2d91"}, + {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b005292369d9c1f80bf70c1db1c17c6c342da7576f1c689e8eee4fb0c256af85"}, + {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cdcda1156dcc41e042d1e899ba1f5c2e9f3cd7625b3d6ebfa619806a4c1aadda"}, + {file = "grpcio-1.63.0-cp38-cp38-win32.whl", hash = "sha256:01799e8649f9e94ba7db1aeb3452188048b0019dc37696b0f5ce212c87c560c3"}, + {file = "grpcio-1.63.0-cp38-cp38-win_amd64.whl", hash = "sha256:6a1a3642d76f887aa4009d92f71eb37809abceb3b7b5a1eec9c554a246f20e3a"}, + {file = "grpcio-1.63.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:75f701ff645858a2b16bc8c9fc68af215a8bb2d5a9b647448129de6e85d52bce"}, + {file = "grpcio-1.63.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cacdef0348a08e475a721967f48206a2254a1b26ee7637638d9e081761a5ba86"}, + {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:0697563d1d84d6985e40ec5ec596ff41b52abb3fd91ec240e8cb44a63b895094"}, + {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6426e1fb92d006e47476d42b8f240c1d916a6d4423c5258ccc5b105e43438f61"}, + {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48cee31bc5f5a31fb2f3b573764bd563aaa5472342860edcc7039525b53e46a"}, + {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:50344663068041b34a992c19c600236e7abb42d6ec32567916b87b4c8b8833b3"}, + {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:259e11932230d70ef24a21b9fb5bb947eb4703f57865a404054400ee92f42f5d"}, + {file = "grpcio-1.63.0-cp39-cp39-win32.whl", hash = "sha256:a44624aad77bf8ca198c55af811fd28f2b3eaf0a50ec5b57b06c034416ef2d0a"}, + {file = "grpcio-1.63.0-cp39-cp39-win_amd64.whl", hash = "sha256:166e5c460e5d7d4656ff9e63b13e1f6029b122104c1633d5f37eaea348d7356d"}, + {file = "grpcio-1.63.0.tar.gz", hash = "sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.60.0)"] +protobuf = ["grpcio-tools (>=1.63.0)"] [[package]] name = "grpcio-health-checking" -version = "1.60.0" +version = "1.63.0" description = "Standard Health Checking Service for gRPC" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "grpcio-health-checking-1.60.0.tar.gz", hash = "sha256:478b5300778120fed9f6d134d72b157a59f9c06689789218cbff47fafca2f119"}, - {file = "grpcio_health_checking-1.60.0-py3-none-any.whl", hash = "sha256:13caf28bc93795bd6bdb580b21832ebdd1aa3f5b648ea47ed17362d85bed96d3"}, + {file = "grpcio_health_checking-1.63.0-py3-none-any.whl", hash = "sha256:ebd4ea09aeb6ef314da86b784d2423705f378cbbfff7be7091bce29602614a54"}, + {file = "grpcio_health_checking-1.63.0.tar.gz", hash = "sha256:43b90ad740ae6c5655b95fe2a054d1cc05b77a1c50363540963b3b750356ab50"}, ] [package.dependencies] -grpcio = ">=1.60.0" -protobuf = ">=4.21.6" +grpcio = ">=1.63.0" +protobuf = ">=5.26.1,<6.0dev" [[package]] name = "grpcio-tools" -version = "1.60.0" +version = "1.63.0" description = "Protobuf code generator for gRPC" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "grpcio-tools-1.60.0.tar.gz", hash = "sha256:ed30499340228d733ff69fcf4a66590ed7921f94eb5a2bf692258b1280b9dac7"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:6807b7a3f3e6e594566100bd7fe04a2c42ce6d5792652677f1aaf5aa5adaef3d"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:857c5351e9dc33a019700e171163f94fcc7e3ae0f6d2b026b10fda1e3c008ef1"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:ec0e401e9a43d927d216d5169b03c61163fb52b665c5af2fed851357b15aef88"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e68dc4474f30cad11a965f0eb5d37720a032b4720afa0ec19dbcea2de73b5aae"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbf0ed772d2ae7e8e5d7281fcc00123923ab130b94f7a843eee9af405918f924"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c771b19dce2bfe06899247168c077d7ab4e273f6655d8174834f9a6034415096"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e5614cf0960456d21d8a0f4902e3e5e3bcacc4e400bf22f196e5dd8aabb978b7"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-win32.whl", hash = "sha256:87cf439178f3eb45c1a889b2e4a17cbb4c450230d92c18d9c57e11271e239c55"}, - {file = "grpcio_tools-1.60.0-cp310-cp310-win_amd64.whl", hash = "sha256:687f576d7ff6ce483bc9a196d1ceac45144e8733b953620a026daed8e450bc38"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:2a8a758701f3ac07ed85f5a4284c6a9ddefcab7913a8e552497f919349e72438"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-macosx_10_10_universal2.whl", hash = "sha256:7c1cde49631732356cb916ee1710507967f19913565ed5f9991e6c9cb37e3887"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:d941749bd8dc3f8be58fe37183143412a27bec3df8482d5abd6b4ec3f1ac2924"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ee35234f1da8fba7ddbc544856ff588243f1128ea778d7a1da3039be829a134"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8f7a5094adb49e85db13ea3df5d99a976c2bdfd83b0ba26af20ebb742ac6786"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:24c4ead4a03037beaeb8ef2c90d13d70101e35c9fae057337ed1a9144ef10b53"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:811abb9c4fb6679e0058dfa123fb065d97b158b71959c0e048e7972bbb82ba0f"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-win32.whl", hash = "sha256:bd2a17b0193fbe4793c215d63ce1e01ae00a8183d81d7c04e77e1dfafc4b2b8a"}, - {file = "grpcio_tools-1.60.0-cp311-cp311-win_amd64.whl", hash = "sha256:b22b1299b666eebd5752ba7719da536075eae3053abcf2898b65f763c314d9da"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:74025fdd6d1cb7ba4b5d087995339e9a09f0c16cf15dfe56368b23e41ffeaf7a"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-macosx_10_10_universal2.whl", hash = "sha256:5a907a4f1ffba86501b2cdb8682346249ea032b922fc69a92f082ba045cca548"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:1fbb9554466d560472f07d906bfc8dcaf52f365c2a407015185993e30372a886"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f10ef47460ce3c6fd400f05fe757b90df63486c9b84d1ecad42dcc5f80c8ac14"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:321b18f42a70813545e416ddcb8bf20defa407a8114906711c9710a69596ceda"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:081336d8258f1a56542aa8a7a5dec99a2b38d902e19fbdd744594783301b0210"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:addc9b23d6ff729d9f83d4a2846292d4c84f5eb2ec38f08489a6a0d66ac2b91e"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-win32.whl", hash = "sha256:e87cabac7969bdde309575edc2456357667a1b28262b2c1f12580ef48315b19d"}, - {file = "grpcio_tools-1.60.0-cp312-cp312-win_amd64.whl", hash = "sha256:e70d867c120d9849093b0ac24d861e378bc88af2552e743d83b9f642d2caa7c2"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-linux_armv7l.whl", hash = "sha256:559ce714fe212aaf4abbe1493c5bb8920def00cc77ce0d45266f4fd9d8b3166f"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-macosx_10_10_universal2.whl", hash = "sha256:7a5263a0f2ddb7b1cfb2349e392cfc4f318722e0f48f886393e06946875d40f3"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-manylinux_2_17_aarch64.whl", hash = "sha256:18976684a931ca4bcba65c78afa778683aefaae310f353e198b1823bf09775a0"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5c519a0d4ba1ab44a004fa144089738c59278233e2010b2cf4527dc667ff297"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6170873b1e5b6580ebb99e87fb6e4ea4c48785b910bd7af838cc6e44b2bccb04"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:fb4df80868b3e397d5fbccc004c789d2668b622b51a9d2387b4c89c80d31e2c5"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dba6e32c87b4af29b5f475fb2f470f7ee3140bfc128644f17c6c59ddeb670680"}, - {file = "grpcio_tools-1.60.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f610384dee4b1ca705e8da66c5b5fe89a2de3d165c5282c3d1ddf40cb18924e4"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:4041538f55aad5b3ae7e25ab314d7995d689e968bfc8aa169d939a3160b1e4c6"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-macosx_10_10_universal2.whl", hash = "sha256:2fb4cf74bfe1e707cf10bc9dd38a1ebaa145179453d150febb121c7e9cd749bf"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:2fd1671c52f96e79a2302c8b1c1f78b8a561664b8b3d6946f20d8f1cc6b4225a"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd1e68c232fe01dd5312a8dbe52c50ecd2b5991d517d7f7446af4ba6334ba872"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:17a32b3da4fc0798cdcec0a9c974ac2a1e98298f151517bf9148294a3b1a5742"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:9970d384fb0c084b00945ef57d98d57a8d32be106d8f0bd31387f7cbfe411b5b"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5ce6bbd4936977ec1114f2903eb4342781960d521b0d82f73afedb9335251f6f"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-win32.whl", hash = "sha256:2e00de389729ca8d8d1a63c2038703078a887ff738dc31be640b7da9c26d0d4f"}, - {file = "grpcio_tools-1.60.0-cp38-cp38-win_amd64.whl", hash = "sha256:6192184b1f99372ff1d9594bd4b12264e3ff26440daba7eb043726785200ff77"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:eae27f9b16238e2aaee84c77b5923c6924d6dccb0bdd18435bf42acc8473ae1a"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-macosx_10_10_universal2.whl", hash = "sha256:b96981f3a31b85074b73d97c8234a5ed9053d65a36b18f4a9c45a2120a5b7a0a"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:1748893efd05cf4a59a175d7fa1e4fbb652f4d84ccaa2109f7869a2be48ed25e"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7a6fe752205caae534f29fba907e2f59ff79aa42c6205ce9a467e9406cbac68c"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3456df087ea61a0972a5bc165aed132ed6ddcc63f5749e572f9fff84540bdbad"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f3d916606dcf5610d4367918245b3d9d8cd0d2ec0b7043d1bbb8c50fe9815c3a"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:fc01bc1079279ec342f0f1b6a107b3f5dc3169c33369cf96ada6e2e171f74e86"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-win32.whl", hash = "sha256:2dd01257e4feff986d256fa0bac9f56de59dc735eceeeb83de1c126e2e91f653"}, - {file = "grpcio_tools-1.60.0-cp39-cp39-win_amd64.whl", hash = "sha256:1b93ae8ffd18e9af9a965ebca5fa521e89066267de7abdde20721edc04e42721"}, + {file = "grpcio_tools-1.63.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:1ab17460a2dfd3433af3120598bc18e705e3092d4d8396d3c06fe93deab19bbb"}, + {file = "grpcio_tools-1.63.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cb9a0f61cabff426eaf5c0a506de599c9f006b31947ba1159254cc291c1dbdd1"}, + {file = "grpcio_tools-1.63.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:711d9f038c18c2f637b89af70c485018ae437dff5f7d2c631ca6a1eee7563038"}, + {file = "grpcio_tools-1.63.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:847ca8d75090d66e787576049500eb7c230a9997146d5d433da7928baf914273"}, + {file = "grpcio_tools-1.63.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49404876ec70bdae431eac5b1591c32c0bba4047dfd96dc6add03dbcdad5a5fc"}, + {file = "grpcio_tools-1.63.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:376136b9bbd16304a2e550ea0bb2b3340b720a0f623856124987845ef071d479"}, + {file = "grpcio_tools-1.63.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e197d5de49bb024f3d0b9e1ee1a0cce9e39955e17738bfbed72b0cc506a4824c"}, + {file = "grpcio_tools-1.63.0-cp310-cp310-win32.whl", hash = "sha256:acb5cc845942dc0f020eefbe10ad8ac6fe2f96b99c035da738c5d3026d3a5324"}, + {file = "grpcio_tools-1.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:f74a6da9db48296c3e7e34820e96744a0ea9cd58c3fa075ed206f7bb75229324"}, + {file = "grpcio_tools-1.63.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:4374c8beefec84f682c799b8df5ac4b217c09de6d69038ce16fc12dcd862fff8"}, + {file = "grpcio_tools-1.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d58a5aacee102858e49b1cc89b1ba1a020bb04f001df057e2b03fa11e6c636d1"}, + {file = "grpcio_tools-1.63.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:744952a560fdb060a5f9d467d130fde6dbfee2abb07143c87e9b17aae3c19d5a"}, + {file = "grpcio_tools-1.63.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c305274aa111412f5b8858242853e56c16ebcedc25d6a49ad615fd1b3ecd5971"}, + {file = "grpcio_tools-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e952835e7b8f40204bceb2a96fc7bcb8b07ff45ca9d07266774bc429db1efead"}, + {file = "grpcio_tools-1.63.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:409613bb694308a1945256d1d05c3ef3497f9fbf7fd68bd8bed86d80d97df334"}, + {file = "grpcio_tools-1.63.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b2d246eee3b2a6afe65362c22a98b0e6d805c227c2569c5616ad3bec619621dd"}, + {file = "grpcio_tools-1.63.0-cp311-cp311-win32.whl", hash = "sha256:bc0e6af05f66b36186ad3467d46ecc0f51dc9fa366005e095f4aa7739c7bfcba"}, + {file = "grpcio_tools-1.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:3f138c822090e7c87ef6a5dce0a6c4fdf68a9472e6a936b70ac7be2371184abe"}, + {file = "grpcio_tools-1.63.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:63a975d0457b2db1ee19fe99806091c71ad22f6f3664adc8f4c95943684dc0fd"}, + {file = "grpcio_tools-1.63.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:517ed2b405793e55c527f332296ae92a3e17fdd83772f1569709f2c228acaf54"}, + {file = "grpcio_tools-1.63.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:49af114fed0075025fe243cb3c8405c7a99f0b87f4eb7ccdaaf33ce1f55d8318"}, + {file = "grpcio_tools-1.63.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ef50fa15689f46a2c903f1c9687aa40687d67dcb0469903fff37a63e55f11cd"}, + {file = "grpcio_tools-1.63.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e68d9df9134906cbab1b225b625e11a368ab01b9ff24a4546bddec705ec7fd66"}, + {file = "grpcio_tools-1.63.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7cbf570f7b9badd3bd27be5e057ca466d447c1047bf80c87a53d8bcb2e87bbbe"}, + {file = "grpcio_tools-1.63.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f2cc0b3098ff48811ca821440e03763dcabd11158a11d9ea819c58938a9ea276"}, + {file = "grpcio_tools-1.63.0-cp312-cp312-win32.whl", hash = "sha256:0ca6d5623dadce66fabbd8b04d0572e35fd63b31f1ae7ea1555d662864852d33"}, + {file = "grpcio_tools-1.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:94b52c0dfb6026f69858a10ee3eadf15c343667647b5846cace82f61fe809c88"}, + {file = "grpcio_tools-1.63.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:c759306c04e3d0b3da3bd576e3de8bcbccc31a243a85ad256fd46d3a3ed93402"}, + {file = "grpcio_tools-1.63.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f305a5d61613e7ea3510eab62d65d47dff5206fcbe3b2347a7c1ebc9eff23dc6"}, + {file = "grpcio_tools-1.63.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:b5d74a30409eda2a0cdaa700da23fe3cad5d7ac47ac2d52644abe13a84047aa0"}, + {file = "grpcio_tools-1.63.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:632f78d8730d39363fc5afaf7cb5cf2f56b4e346ca11f550af74cff85e702f79"}, + {file = "grpcio_tools-1.63.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54136ac94eabc45b1b72d5ca379e5a2753f21a654f562838c5a9b706482bc1f0"}, + {file = "grpcio_tools-1.63.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b61682c06f0bcf2c576537819c42d5fb8eec1a0a9c05c905005200a57ff54c1f"}, + {file = "grpcio_tools-1.63.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0f8ce3fc598886a5370f28c86f94d06ddb0d3a251101a5bb8ed9576d9f86a519"}, + {file = "grpcio_tools-1.63.0-cp38-cp38-win32.whl", hash = "sha256:27684446c81bffcd4f20f13bf672ac7cbeaefbd270b3d867cdb58132e4b866bc"}, + {file = "grpcio_tools-1.63.0-cp38-cp38-win_amd64.whl", hash = "sha256:8341846604df00cf1c0a822476d27f4c481f678601a2f0b190e3b9936f857ded"}, + {file = "grpcio_tools-1.63.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:2924747142ebcbbd62acf65936fbc9694afbdfc2c6ae721461015370e27b8d6f"}, + {file = "grpcio_tools-1.63.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1b88be61eaa41eb4deb6b91a1e21d2a789d8567f0a973694fa27c09196f39a9a"}, + {file = "grpcio_tools-1.63.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:b87750347cb024bb74d5139da01ffba9f099ad2e43ba45893dc627ec920d57ab"}, + {file = "grpcio_tools-1.63.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49435413548e019921e125b178f3fd30543aa348c70775669b5ed80f0b39b393"}, + {file = "grpcio_tools-1.63.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df4dc9db9763594ae6ae04b42d6fcf7f163897a072f8fc946b864c9c3f0fbab1"}, + {file = "grpcio_tools-1.63.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6bbf51f334452fcac422509979635f97e2c2c3e71f21480891f2ba280b4b6867"}, + {file = "grpcio_tools-1.63.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c63a0f37b6b64dc31b2f1a0e5f889ae8b6bb7b7b20fe2406c1285321a7c54fdd"}, + {file = "grpcio_tools-1.63.0-cp39-cp39-win32.whl", hash = "sha256:d7142b0162834d3a67df532744a733b0757b11056373bd489a70dc07a3f65829"}, + {file = "grpcio_tools-1.63.0-cp39-cp39-win_amd64.whl", hash = "sha256:32247ac2d575a633aea2536840fd232d56f309bd940081d772081bd71e0626c6"}, + {file = "grpcio_tools-1.63.0.tar.gz", hash = "sha256:2474cffbc8f29404f0e3a2109c0a0423211ba93fe048b144e734f601ff391fc7"}, ] [package.dependencies] -grpcio = ">=1.60.0" -protobuf = ">=4.21.6,<5.0dev" +grpcio = ">=1.63.0" +protobuf = ">=5.26.1,<6.0dev" setuptools = "*" [[package]] @@ -789,36 +689,32 @@ hyperframe = ">=6.0,<7" [[package]] name = "h5py" -version = "3.10.0" +version = "3.11.0" description = "Read and write HDF5 files from Python" optional = false python-versions = ">=3.8" files = [ - {file = "h5py-3.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b963fb772964fc1d1563c57e4e2e874022ce11f75ddc6df1a626f42bd49ab99f"}, - {file = "h5py-3.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:012ab448590e3c4f5a8dd0f3533255bc57f80629bf7c5054cf4c87b30085063c"}, - {file = "h5py-3.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:781a24263c1270a62cd67be59f293e62b76acfcc207afa6384961762bb88ea03"}, - {file = "h5py-3.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f42e6c30698b520f0295d70157c4e202a9e402406f50dc08f5a7bc416b24e52d"}, - {file = "h5py-3.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:93dd840bd675787fc0b016f7a05fc6efe37312a08849d9dd4053fd0377b1357f"}, - {file = "h5py-3.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2381e98af081b6df7f6db300cd88f88e740649d77736e4b53db522d8874bf2dc"}, - {file = "h5py-3.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:667fe23ab33d5a8a6b77970b229e14ae3bb84e4ea3382cc08567a02e1499eedd"}, - {file = "h5py-3.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90286b79abd085e4e65e07c1bd7ee65a0f15818ea107f44b175d2dfe1a4674b7"}, - {file = "h5py-3.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c013d2e79c00f28ffd0cc24e68665ea03ae9069e167087b2adb5727d2736a52"}, - {file = "h5py-3.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:92273ce69ae4983dadb898fd4d3bea5eb90820df953b401282ee69ad648df684"}, - {file = "h5py-3.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c97d03f87f215e7759a354460fb4b0d0f27001450b18b23e556e7856a0b21c3"}, - {file = "h5py-3.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:86df4c2de68257b8539a18646ceccdcf2c1ce6b1768ada16c8dcfb489eafae20"}, - {file = "h5py-3.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba9ab36be991119a3ff32d0c7cbe5faf9b8d2375b5278b2aea64effbeba66039"}, - {file = "h5py-3.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:2c8e4fda19eb769e9a678592e67eaec3a2f069f7570c82d2da909c077aa94339"}, - {file = "h5py-3.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:492305a074327e8d2513011fa9fffeb54ecb28a04ca4c4227d7e1e9616d35641"}, - {file = "h5py-3.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:9450464b458cca2c86252b624279115dcaa7260a40d3cb1594bf2b410a2bd1a3"}, - {file = "h5py-3.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fd6f6d1384a9f491732cee233b99cd4bfd6e838a8815cc86722f9d2ee64032af"}, - {file = "h5py-3.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3074ec45d3dc6e178c6f96834cf8108bf4a60ccb5ab044e16909580352010a97"}, - {file = "h5py-3.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:212bb997a91e6a895ce5e2f365ba764debeaef5d2dca5c6fb7098d66607adf99"}, - {file = "h5py-3.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5dfc65ac21fa2f630323c92453cadbe8d4f504726ec42f6a56cf80c2f90d6c52"}, - {file = "h5py-3.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d4682b94fd36ab217352be438abd44c8f357c5449b8995e63886b431d260f3d3"}, - {file = "h5py-3.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aece0e2e1ed2aab076c41802e50a0c3e5ef8816d60ece39107d68717d4559824"}, - {file = "h5py-3.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43a61b2c2ad65b1fabc28802d133eed34debcc2c8b420cb213d3d4ef4d3e2229"}, - {file = "h5py-3.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:ae2f0201c950059676455daf92700eeb57dcf5caaf71b9e1328e6e6593601770"}, - {file = "h5py-3.10.0.tar.gz", hash = "sha256:d93adc48ceeb33347eb24a634fb787efc7ae4644e6ea4ba733d099605045c049"}, + {file = "h5py-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1625fd24ad6cfc9c1ccd44a66dac2396e7ee74940776792772819fc69f3a3731"}, + {file = "h5py-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c072655ad1d5fe9ef462445d3e77a8166cbfa5e599045f8aa3c19b75315f10e5"}, + {file = "h5py-3.11.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77b19a40788e3e362b54af4dcf9e6fde59ca016db2c61360aa30b47c7b7cef00"}, + {file = "h5py-3.11.0-cp310-cp310-win_amd64.whl", hash = "sha256:ef4e2f338fc763f50a8113890f455e1a70acd42a4d083370ceb80c463d803972"}, + {file = "h5py-3.11.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bbd732a08187a9e2a6ecf9e8af713f1d68256ee0f7c8b652a32795670fb481ba"}, + {file = "h5py-3.11.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75bd7b3d93fbeee40860fd70cdc88df4464e06b70a5ad9ce1446f5f32eb84007"}, + {file = "h5py-3.11.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:52c416f8eb0daae39dabe71415cb531f95dce2d81e1f61a74537a50c63b28ab3"}, + {file = "h5py-3.11.0-cp311-cp311-win_amd64.whl", hash = "sha256:083e0329ae534a264940d6513f47f5ada617da536d8dccbafc3026aefc33c90e"}, + {file = "h5py-3.11.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a76cae64080210389a571c7d13c94a1a6cf8cb75153044fd1f822a962c97aeab"}, + {file = "h5py-3.11.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f3736fe21da2b7d8a13fe8fe415f1272d2a1ccdeff4849c1421d2fb30fd533bc"}, + {file = "h5py-3.11.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6ae84a14103e8dc19266ef4c3e5d7c00b68f21d07f2966f0ca7bdb6c2761fb"}, + {file = "h5py-3.11.0-cp312-cp312-win_amd64.whl", hash = "sha256:21dbdc5343f53b2e25404673c4f00a3335aef25521bd5fa8c707ec3833934892"}, + {file = "h5py-3.11.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:754c0c2e373d13d6309f408325343b642eb0f40f1a6ad21779cfa9502209e150"}, + {file = "h5py-3.11.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:731839240c59ba219d4cb3bc5880d438248533366f102402cfa0621b71796b62"}, + {file = "h5py-3.11.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ec9df3dd2018904c4cc06331951e274f3f3fd091e6d6cc350aaa90fa9b42a76"}, + {file = "h5py-3.11.0-cp38-cp38-win_amd64.whl", hash = "sha256:55106b04e2c83dfb73dc8732e9abad69d83a436b5b82b773481d95d17b9685e1"}, + {file = "h5py-3.11.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f4e025e852754ca833401777c25888acb96889ee2c27e7e629a19aee288833f0"}, + {file = "h5py-3.11.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6c4b760082626120031d7902cd983d8c1f424cdba2809f1067511ef283629d4b"}, + {file = "h5py-3.11.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67462d0669f8f5459529de179f7771bd697389fcb3faab54d63bf788599a48ea"}, + {file = "h5py-3.11.0-cp39-cp39-win_amd64.whl", hash = "sha256:d9c944d364688f827dc889cf83f1fca311caf4fa50b19f009d1f2b525edd33a3"}, + {file = "h5py-3.11.0.tar.gz", hash = "sha256:7b7e8f78072a2edec87c9836f25f34203fd492a4475709a18b417a33cfb21fa9"}, ] [package.dependencies] @@ -837,13 +733,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.4" +version = "1.0.5" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.4-py3-none-any.whl", hash = "sha256:ac418c1db41bade2ad53ae2f3834a3a0f5ae76b56cf5aa497d2d033384fc7d73"}, - {file = "httpcore-1.0.4.tar.gz", hash = "sha256:cb2839ccfcba0d2d3c1131d3c3e26dfc327326fbe7a5dc0dbfe9f6c9151bb022"}, + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, ] [package.dependencies] @@ -854,7 +750,7 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.25.0)"] +trio = ["trio (>=0.22.0,<0.26.0)"] [[package]] name = "httpx" @@ -894,13 +790,13 @@ files = [ [[package]] name = "identify" -version = "2.5.35" +version = "2.5.36" description = "File identification library for Python" optional = false python-versions = ">=3.8" files = [ - {file = "identify-2.5.35-py2.py3-none-any.whl", hash = "sha256:c4de0081837b211594f8e877a6b4fad7ca32bbfc1a9307fdd61c28bfe923f13e"}, - {file = "identify-2.5.35.tar.gz", hash = "sha256:10a7ca245cfcd756a554a7288159f72ff105ad233c7c4b9c6f0f4d108f5f6791"}, + {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, + {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, ] [package.extras] @@ -908,13 +804,13 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.6" +version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.5" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, ] [[package]] @@ -983,20 +879,6 @@ qtconsole = ["qtconsole"] test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] -[[package]] -name = "isodate" -version = "0.6.1" -description = "An ISO 8601 date/time/duration parser and formatter" -optional = false -python-versions = "*" -files = [ - {file = "isodate-0.6.1-py2.py3-none-any.whl", hash = "sha256:0751eece944162659049d35f4f549ed815792b38793f07cf73381c1c87cbed96"}, - {file = "isodate-0.6.1.tar.gz", hash = "sha256:48c5881de7e8b0a0d648cb024c8062dc84e7b840ed81e864c7614fd3c127bde9"}, -] - -[package.dependencies] -six = "*" - [[package]] name = "jedi" version = "0.19.1" @@ -1035,13 +917,13 @@ test = ["attrs", "codecov", "coverage", "dataclasses", "pytest", "scons", "tzdat [[package]] name = "marshmallow" -version = "3.21.1" +version = "3.21.3" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.8" files = [ - {file = "marshmallow-3.21.1-py3-none-any.whl", hash = "sha256:f085493f79efb0644f270a9bf2892843142d80d7174bbbd2f3713f2a589dc633"}, - {file = "marshmallow-3.21.1.tar.gz", hash = "sha256:4e65e9e0d80fc9e609574b9983cf32579f305c718afb30d7233ab818571768c3"}, + {file = "marshmallow-3.21.3-py3-none-any.whl", hash = "sha256:86ce7fb914aa865001a4b2092c4c2872d13bc347f3d42673272cabfdbad386f1"}, + {file = "marshmallow-3.21.3.tar.gz", hash = "sha256:4f57c5e050a54d66361e826f94fba213eb10b67b2fdb02c3e0343ce207ba1662"}, ] [package.dependencies] @@ -1049,55 +931,46 @@ packaging = ">=17.0" [package.extras] dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] -docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.2.6)", "sphinx-issues (==4.0.0)", "sphinx-version-warning (==1.1.2)"] +docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.3.7)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] tests = ["pytest", "pytz", "simplejson"] [[package]] name = "matplotlib-inline" -version = "0.1.6" +version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "matplotlib-inline-0.1.6.tar.gz", hash = "sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304"}, - {file = "matplotlib_inline-0.1.6-py3-none-any.whl", hash = "sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311"}, + {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, + {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, ] [package.dependencies] traitlets = "*" [[package]] -name = "minio" -version = "7.2.5" -description = "MinIO Python SDK for Amazon S3 Compatible Cloud Storage" +name = "milvus-lite" +version = "2.4.7" +description = "A lightweight version of Milvus wrapped with Python." optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "minio-7.2.5-py3-none-any.whl", hash = "sha256:ed9176c96d4271cb1022b9ecb8a538b1e55b32ae06add6de16425cab99ef2304"}, - {file = "minio-7.2.5.tar.gz", hash = "sha256:59d8906e2da248a9caac34d4958a859cc3a44abbe6447910c82b5abfa9d6a2e1"}, + {file = "milvus_lite-2.4.7-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:c828190118b104b05b8c8e0b5a4147811c86b54b8fb67bc2e726ad10fc0b544e"}, + {file = "milvus_lite-2.4.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e1537633c39879714fb15082be56a4b97f74c905a6e98e302ec01320561081af"}, + {file = "milvus_lite-2.4.7-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f016474d663045787dddf1c3aad13b7d8b61fd329220318f858184918143dcbf"}, ] -[package.dependencies] -argon2-cffi = "*" -certifi = "*" -pycryptodome = "*" -typing-extensions = "*" -urllib3 = "*" - [[package]] name = "nodeenv" -version = "1.8.0" +version = "1.9.1" description = "Node.js virtual environment builder" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ - {file = "nodeenv-1.8.0-py2.py3-none-any.whl", hash = "sha256:df865724bb3c3adc86b3876fa209771517b0cfe596beff01a92700e0e8be4cec"}, - {file = "nodeenv-1.8.0.tar.gz", hash = "sha256:d51e0c37e64fbf47d017feac3145cdbb58836d7eee8c6f6d3b6880c5456227d2"}, + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, ] -[package.dependencies] -setuptools = "*" - [[package]] name = "numpy" version = "1.24.4" @@ -1137,37 +1010,41 @@ files = [ [[package]] name = "opensearch-py" -version = "2.4.2" +version = "2.6.0" description = "Python client for OpenSearch" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" +python-versions = "<4,>=3.8" files = [ - {file = "opensearch-py-2.4.2.tar.gz", hash = "sha256:564f175af134aa885f4ced6846eb4532e08b414fff0a7976f76b276fe0e69158"}, - {file = "opensearch_py-2.4.2-py2.py3-none-any.whl", hash = "sha256:7867319132133e2974c09f76a54eb1d502b989229be52da583d93ddc743ea111"}, + {file = "opensearch_py-2.6.0-py2.py3-none-any.whl", hash = "sha256:b6e78b685dd4e9c016d7a4299cf1de69e299c88322e3f81c716e6e23fe5683c1"}, + {file = "opensearch_py-2.6.0.tar.gz", hash = "sha256:0b7c27e8ed84c03c99558406927b6161f186a72502ca6d0325413d8e5523ba96"}, ] [package.dependencies] certifi = ">=2022.12.07" +Events = "*" python-dateutil = "*" requests = ">=2.4.0,<3.0.0" six = "*" -urllib3 = ">=1.26.18" +urllib3 = [ + {version = ">=1.26.18,<1.27", markers = "python_version < \"3.10\""}, + {version = ">=1.26.18,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, +] [package.extras] -async = ["aiohttp (>=3,<4)"] -develop = ["black", "botocore", "coverage (<8.0.0)", "jinja2", "mock", "myst-parser", "pytest (>=3.0.0)", "pytest-cov", "pytest-mock (<4.0.0)", "pytz", "pyyaml", "requests (>=2.0.0,<3.0.0)", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] -docs = ["aiohttp (>=3,<4)", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] +async = ["aiohttp (>=3.9.4,<4)"] +develop = ["black (>=24.3.0)", "botocore", "coverage (<8.0.0)", "jinja2", "mock", "myst-parser", "pytest (>=3.0.0)", "pytest-cov", "pytest-mock (<4.0.0)", "pytz", "pyyaml", "requests (>=2.0.0,<3.0.0)", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] +docs = ["aiohttp (>=3.9.4,<4)", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] kerberos = ["requests-kerberos"] [[package]] name = "packaging" -version = "24.0" +version = "24.1" description = "Core utilities for Python packages" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "packaging-24.0-py3-none-any.whl", hash = "sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5"}, - {file = "packaging-24.0.tar.gz", hash = "sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9"}, + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, ] [[package]] @@ -1207,8 +1084,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -1239,18 +1116,18 @@ xml = ["lxml (>=4.6.3)"] [[package]] name = "parso" -version = "0.8.3" +version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" files = [ - {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, - {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, + {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, + {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, ] [package.extras] -qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] -testing = ["docopt", "pytest (<6.0.0)"] +qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] +testing = ["docopt", "pytest"] [[package]] name = "pexpect" @@ -1292,28 +1169,29 @@ files = [ [[package]] name = "platformdirs" -version = "4.2.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" files = [ - {file = "platformdirs-4.2.0-py3-none-any.whl", hash = "sha256:0614df2a2f37e1a662acbd8e2b25b92ccf8632929bc6d43467e17fe89c75e068"}, - {file = "platformdirs-4.2.0.tar.gz", hash = "sha256:ef0cc731df711022c174543cb70a9b5bd22e5a9337c8624ef2c2ceb8ddad8768"}, + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, ] [package.extras] docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] [[package]] name = "pluggy" -version = "1.4.0" +version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" files = [ - {file = "pluggy-1.4.0-py3-none-any.whl", hash = "sha256:7db9f7b503d67d1c5b95f59773ebb58a8c1c288129a88665838012cfb07b8981"}, - {file = "pluggy-1.4.0.tar.gz", hash = "sha256:8c85c2876142a764e5b7548e7d9a0e0ddb46f5185161049a79b7e974454223be"}, + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, ] [package.extras] @@ -1359,13 +1237,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prompt-toolkit" -version = "3.0.43" +version = "3.0.47" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.43-py3-none-any.whl", hash = "sha256:a11a29cb3bf0a28a387fe5122cdb649816a957cd9261dcedf8c9f1fef33eacf6"}, - {file = "prompt_toolkit-3.0.43.tar.gz", hash = "sha256:3527b7af26106cbc65a040bcc84839a3566ec1b051bb0bfe953631e704b0ff7d"}, + {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, + {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, ] [package.dependencies] @@ -1373,44 +1251,44 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "4.25.3" +version = "5.27.1" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-4.25.3-cp310-abi3-win32.whl", hash = "sha256:d4198877797a83cbfe9bffa3803602bbe1625dc30d8a097365dbc762e5790faa"}, - {file = "protobuf-4.25.3-cp310-abi3-win_amd64.whl", hash = "sha256:209ba4cc916bab46f64e56b85b090607a676f66b473e6b762e6f1d9d591eb2e8"}, - {file = "protobuf-4.25.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:f1279ab38ecbfae7e456a108c5c0681e4956d5b1090027c1de0f934dfdb4b35c"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_aarch64.whl", hash = "sha256:e7cb0ae90dd83727f0c0718634ed56837bfeeee29a5f82a7514c03ee1364c019"}, - {file = "protobuf-4.25.3-cp37-abi3-manylinux2014_x86_64.whl", hash = "sha256:7c8daa26095f82482307bc717364e7c13f4f1c99659be82890dcfc215194554d"}, - {file = "protobuf-4.25.3-cp38-cp38-win32.whl", hash = "sha256:f4f118245c4a087776e0a8408be33cf09f6c547442c00395fbfb116fac2f8ac2"}, - {file = "protobuf-4.25.3-cp38-cp38-win_amd64.whl", hash = "sha256:c053062984e61144385022e53678fbded7aea14ebb3e0305ae3592fb219ccfa4"}, - {file = "protobuf-4.25.3-cp39-cp39-win32.whl", hash = "sha256:19b270aeaa0099f16d3ca02628546b8baefe2955bbe23224aaf856134eccf1e4"}, - {file = "protobuf-4.25.3-cp39-cp39-win_amd64.whl", hash = "sha256:e3c97a1555fd6388f857770ff8b9703083de6bf1f9274a002a332d65fbb56c8c"}, - {file = "protobuf-4.25.3-py3-none-any.whl", hash = "sha256:f0700d54bcf45424477e46a9f0944155b46fb0639d69728739c0e47bab83f2b9"}, - {file = "protobuf-4.25.3.tar.gz", hash = "sha256:25b5d0b42fd000320bd7830b349e3b696435f3b329810427a6bcce6a5492cc5c"}, + {file = "protobuf-5.27.1-cp310-abi3-win32.whl", hash = "sha256:3adc15ec0ff35c5b2d0992f9345b04a540c1e73bfee3ff1643db43cc1d734333"}, + {file = "protobuf-5.27.1-cp310-abi3-win_amd64.whl", hash = "sha256:25236b69ab4ce1bec413fd4b68a15ef8141794427e0b4dc173e9d5d9dffc3bcd"}, + {file = "protobuf-5.27.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:4e38fc29d7df32e01a41cf118b5a968b1efd46b9c41ff515234e794011c78b17"}, + {file = "protobuf-5.27.1-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:917ed03c3eb8a2d51c3496359f5b53b4e4b7e40edfbdd3d3f34336e0eef6825a"}, + {file = "protobuf-5.27.1-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:ee52874a9e69a30271649be88ecbe69d374232e8fd0b4e4b0aaaa87f429f1631"}, + {file = "protobuf-5.27.1-cp38-cp38-win32.whl", hash = "sha256:7a97b9c5aed86b9ca289eb5148df6c208ab5bb6906930590961e08f097258107"}, + {file = "protobuf-5.27.1-cp38-cp38-win_amd64.whl", hash = "sha256:f6abd0f69968792da7460d3c2cfa7d94fd74e1c21df321eb6345b963f9ec3d8d"}, + {file = "protobuf-5.27.1-cp39-cp39-win32.whl", hash = "sha256:dfddb7537f789002cc4eb00752c92e67885badcc7005566f2c5de9d969d3282d"}, + {file = "protobuf-5.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:39309898b912ca6febb0084ea912e976482834f401be35840a008da12d189340"}, + {file = "protobuf-5.27.1-py3-none-any.whl", hash = "sha256:4ac7249a1530a2ed50e24201d6630125ced04b30619262f06224616e0030b6cf"}, + {file = "protobuf-5.27.1.tar.gz", hash = "sha256:df5e5b8e39b7d1c25b186ffdf9f44f40f810bbcc9d2b71d9d3156fee5a9adf15"}, ] [[package]] name = "psycopg" -version = "3.1.18" +version = "3.1.19" description = "PostgreSQL database adapter for Python" optional = false python-versions = ">=3.7" files = [ - {file = "psycopg-3.1.18-py3-none-any.whl", hash = "sha256:4d5a0a5a8590906daa58ebd5f3cfc34091377354a1acced269dd10faf55da60e"}, - {file = "psycopg-3.1.18.tar.gz", hash = "sha256:31144d3fb4c17d78094d9e579826f047d4af1da6a10427d91dfcfb6ecdf6f12b"}, + {file = "psycopg-3.1.19-py3-none-any.whl", hash = "sha256:dca5e5521c859f6606686432ae1c94e8766d29cc91f2ee595378c510cc5b0731"}, + {file = "psycopg-3.1.19.tar.gz", hash = "sha256:92d7b78ad82426cdcf1a0440678209faa890c6e1721361c2f8901f0dccd62961"}, ] [package.dependencies] "backports.zoneinfo" = {version = ">=0.2.0", markers = "python_version < \"3.9\""} -psycopg-binary = {version = "3.1.18", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} +psycopg-binary = {version = "3.1.19", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} typing-extensions = ">=4.1" tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] -binary = ["psycopg-binary (==3.1.18)"] -c = ["psycopg-c (==3.1.18)"] +binary = ["psycopg-binary (==3.1.19)"] +c = ["psycopg-c (==3.1.19)"] dev = ["black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "mypy (>=1.4.1)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] docs = ["Sphinx (>=5.0)", "furo (==2022.6.21)", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints (>=1.12)"] pool = ["psycopg-pool"] @@ -1418,76 +1296,74 @@ test = ["anyio (>=3.6.2,<4.0)", "mypy (>=1.4.1)", "pproxy (>=2.7)", "pytest (>=6 [[package]] name = "psycopg-binary" -version = "3.1.18" +version = "3.1.19" description = "PostgreSQL database adapter for Python -- C optimisation distribution" optional = false python-versions = ">=3.7" files = [ - {file = "psycopg_binary-3.1.18-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5c323103dfa663b88204cf5f028e83c77d7a715f9b6f51d2bbc8184b99ddd90a"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:887f8d856c91510148be942c7acd702ccf761a05f59f8abc123c22ab77b5a16c"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d322ba72cde4ca2eefc2196dad9ad7e52451acd2f04e3688d590290625d0c970"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:489aa4fe5a0b653b68341e9e44af247dedbbc655326854aa34c163ef1bcb3143"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55ff0948457bfa8c0d35c46e3a75193906d1c275538877ba65907fd67aa059ad"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b15e3653c82384b043d820fc637199b5c6a36b37fa4a4943e0652785bb2bad5d"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f8ff3bc08b43f36fdc24fedb86d42749298a458c4724fb588c4d76823ac39f54"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:1729d0e3dfe2546d823841eb7a3d003144189d6f5e138ee63e5227f8b75276a5"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:13bcd3742112446037d15e360b27a03af4b5afcf767f5ee374ef8f5dd7571b31"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:320047e3d3554b857e16c2b6b615a85e0db6a02426f4d203a4594a2f125dfe57"}, - {file = "psycopg_binary-3.1.18-cp310-cp310-win_amd64.whl", hash = "sha256:888a72c2aca4316ca6d4a619291b805677bae99bba2f6e31a3c18424a48c7e4d"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4e4de16a637ec190cbee82e0c2dc4860fed17a23a35f7a1e6dc479a5c6876722"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6432047b8b24ef97e3fbee1d1593a0faaa9544c7a41a2c67d1f10e7621374c83"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d684227ef8212e27da5f2aff9d4d303cc30b27ac1702d4f6881935549486dd5"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:67284e2e450dc7a9e4d76e78c0bd357dc946334a3d410defaeb2635607f632cd"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c9b6bd7fb5c6638cb32469674707649b526acfe786ba6d5a78ca4293d87bae4"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7121acc783c4e86d2d320a7fb803460fab158a7f0a04c5e8c5d49065118c1e73"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e28ff8f3de7b56588c2a398dc135fd9f157d12c612bd3daa7e6ba9872337f6f5"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c84a0174109f329eeda169004c7b7ca2e884a6305acab4a39600be67f915ed38"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:531381f6647fc267383dca88dbe8a70d0feff433a8e3d0c4939201fea7ae1b82"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b293e01057e63c3ac0002aa132a1071ce0fdb13b9ee2b6b45d3abdb3525c597d"}, - {file = "psycopg_binary-3.1.18-cp311-cp311-win_amd64.whl", hash = "sha256:780a90bcb69bf27a8b08bc35b958e974cb6ea7a04cdec69e737f66378a344d68"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:87dd9154b757a5fbf6d590f6f6ea75f4ad7b764a813ae04b1d91a70713f414a1"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f876ebbf92db70125f6375f91ab4bc6b27648aa68f90d661b1fc5affb4c9731c"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d2f0cb45e4574f8b2fe7c6d0a0e2eb58903a4fd1fbaf60954fba82d595ab7"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bd27f713f2e5ef3fd6796e66c1a5203a27a30ecb847be27a78e1df8a9a5ae68c"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c38a4796abf7380f83b1653c2711cb2449dd0b2e5aca1caa75447d6fa5179c69"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2f7f95746efd1be2dc240248cc157f4315db3fd09fef2adfcc2a76e24aa5741"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:4085f56a8d4fc8b455e8f44380705c7795be5317419aa5f8214f315e4205d804"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2e2484ae835dedc80cdc7f1b1a939377dc967fed862262cfd097aa9f50cade46"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:3c2b039ae0c45eee4cd85300ef802c0f97d0afc78350946a5d0ec77dd2d7e834"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8f54978c4b646dec77fefd8485fa82ec1a87807f334004372af1aaa6de9539a5"}, - {file = "psycopg_binary-3.1.18-cp312-cp312-win_amd64.whl", hash = "sha256:9ffcbbd389e486d3fd83d30107bbf8b27845a295051ccabde240f235d04ed921"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c76659ae29a84f2c14f56aad305dd00eb685bd88f8c0a3281a9a4bc6bd7d2aa7"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c7afcd6f1d55992f26d9ff7b0bd4ee6b475eb43aa3f054d67d32e09f18b0065"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:639dd78ac09b144b0119076783cb64e1128cc8612243e9701d1503c816750b2e"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e1cf59e0bb12e031a48bb628aae32df3d0c98fd6c759cb89f464b1047f0ca9c8"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e262398e5d51563093edf30612cd1e20fedd932ad0994697d7781ca4880cdc3d"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:59701118c7d8842e451f1e562d08e8708b3f5d14974eefbce9374badd723c4ae"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dea4a59da7850192fdead9da888e6b96166e90608cf39e17b503f45826b16f84"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:4575da95fc441244a0e2ebaf33a2b2f74164603341d2046b5cde0a9aa86aa7e2"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:812726266ab96de681f2c7dbd6b734d327f493a78357fcc16b2ac86ff4f4e080"}, - {file = "psycopg_binary-3.1.18-cp37-cp37m-win_amd64.whl", hash = "sha256:3e7ce4d988112ca6c75765c7f24c83bdc476a6a5ce00878df6c140ca32c3e16d"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:02bd4da45d5ee9941432e2e9bf36fa71a3ac21c6536fe7366d1bd3dd70d6b1e7"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:39242546383f6b97032de7af30edb483d237a0616f6050512eee7b218a2aa8ee"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d46ae44d66bf6058a812467f6ae84e4e157dee281bfb1cfaeca07dee07452e85"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad35ac7fd989184bf4d38a87decfb5a262b419e8ba8dcaeec97848817412c64a"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:247474af262bdd5559ee6e669926c4f23e9cf53dae2d34c4d991723c72196404"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ebecbf2406cd6875bdd2453e31067d1bd8efe96705a9489ef37e93b50dc6f09"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1859aeb2133f5ecdd9cbcee155f5e38699afc06a365f903b1512c765fd8d457e"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:da917f6df8c6b2002043193cb0d74cc173b3af7eb5800ad69c4e1fbac2a71c30"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:9e24e7b6a68a51cc3b162d0339ae4e1263b253e887987d5c759652f5692b5efe"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e252d66276c992319ed6cd69a3ffa17538943954075051e992143ccbf6dc3d3e"}, - {file = "psycopg_binary-3.1.18-cp38-cp38-win_amd64.whl", hash = "sha256:5d6e860edf877d4413e4a807e837d55e3a7c7df701e9d6943c06e460fa6c058f"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:eea5f14933177ffe5c40b200f04f814258cc14b14a71024ad109f308e8bad414"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:824a1bfd0db96cc6bef2d1e52d9e0963f5bf653dd5bc3ab519a38f5e6f21c299"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a87e9eeb80ce8ec8c2783f29bce9a50bbcd2e2342a340f159c3326bf4697afa1"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:91074f78a9f890af5f2c786691575b6b93a4967ad6b8c5a90101f7b8c1a91d9c"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e05f6825f8db4428782135e6986fec79b139210398f3710ed4aa6ef41473c008"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f68ac2364a50d4cf9bb803b4341e83678668f1881a253e1224574921c69868c"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7ac1785d67241d5074f8086705fa68e046becea27964267ab3abd392481d7773"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:cd2a9f7f0d4dacc5b9ce7f0e767ae6cc64153264151f50698898c42cabffec0c"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:3e4b0bb91da6f2238dbd4fbb4afc40dfb4f045bb611b92fce4d381b26413c686"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:74e498586b72fb819ca8ea82107747d0cb6e00ae685ea6d1ab3f929318a8ce2d"}, - {file = "psycopg_binary-3.1.18-cp39-cp39-win_amd64.whl", hash = "sha256:d4422af5232699f14b7266a754da49dc9bcd45eba244cf3812307934cd5d6679"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7204818f05151dd08f8f851defb01972ec9d2cc925608eb0de232563f203f354"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d4e67fd86758dbeac85641419a54f84d74495a8683b58ad5dfad08b7fc37a8f"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12173e34b176e93ad2da913de30f774d5119c2d4d4640c6858d2d77dfa6c9bf"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:052f5193304066318853b4b2e248f523c8f52b371fc4e95d4ef63baee3f30955"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29008f3f8977f600b8a7fb07c2e041b01645b08121760609cc45e861a0364dc9"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c6a9a651a08d876303ed059c9553df18b3c13c3406584a70a8f37f1a1fe2709"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:91a645e6468c4f064b7f4f3b81074bdd68fe5aa2b8c5107de15dcd85ba6141be"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5c6956808fd5cf0576de5a602243af8e04594b25b9a28675feddc71c5526410a"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:1622ca27d5a7a98f7d8f35e8b146dc7efda4a4b6241d2edf7e076bd6bcecbeb4"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a100482950a55228f648bd382bb71bfaff520002f29845274fccbbf02e28bd52"}, + {file = "psycopg_binary-3.1.19-cp310-cp310-win_amd64.whl", hash = "sha256:955ca8905c0251fc4af7ce0a20999e824a25652f53a558ab548b60969f1f368e"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cf49e91dcf699b8a449944ed898ef1466b39b92720613838791a551bc8f587a"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:964c307e400c5f33fa762ba1e19853e048814fcfbd9679cc923431adb7a2ead2"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3433924e1b14074798331dc2bfae2af452ed7888067f2fc145835704d8981b15"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00879d4c6be4b3afc510073f48a5e960f797200e261ab3d9bd9b7746a08c669d"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34a6997c80f86d3dd80a4f078bb3b200079c47eeda4fd409d8899b883c90d2ac"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0106e42b481677c41caa69474fe530f786dcef88b11b70000f0e45a03534bc8f"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81efe09ba27533e35709905c3061db4dc9fb814f637360578d065e2061fbb116"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d312d6dddc18d9c164e1893706269c293cba1923118349d375962b1188dafb01"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:bfd2c734da9950f7afaad5f132088e0e1478f32f042881fca6651bb0c8d14206"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8a732610a5a6b4f06dadcf9288688a8ff202fd556d971436a123b7adb85596e2"}, + {file = "psycopg_binary-3.1.19-cp311-cp311-win_amd64.whl", hash = "sha256:321814a9a3ad785855a821b842aba08ca1b7de7dfb2979a2f0492dca9ec4ae70"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4aa0ca13bb8a725bb6d12c13999217fd5bc8b86a12589f28a74b93e076fbb959"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:469424e354ebcec949aa6aa30e5a9edc352a899d9a68ad7a48f97df83cc914cf"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b04f5349313529ae1f1c42fe1aa0443faaf50fdf12d13866c2cc49683bfa53d0"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959feabddc7fffac89b054d6f23f3b3c62d7d3c90cd414a02e3747495597f150"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e9da624a6ca4bc5f7fa1f03f8485446b5b81d5787b6beea2b4f8d9dbef878ad7"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1823221a6b96e38b15686170d4fc5b36073efcb87cce7d3da660440b50077f6"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:866db42f986298f0cf15d805225eb8df2228bf19f7997d7f1cb5f388cbfc6a0f"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:738c34657305b5973af6dbb6711b07b179dfdd21196d60039ca30a74bafe9648"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb9758473200384a04374d0e0cac6f451218ff6945a024f65a1526802c34e56e"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0e991632777e217953ac960726158987da684086dd813ac85038c595e7382c91"}, + {file = "psycopg_binary-3.1.19-cp312-cp312-win_amd64.whl", hash = "sha256:1d87484dd42c8783c44a30400949efb3d81ef2487eaa7d64d1c54df90cf8b97a"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d1d1723d7449c12bb61aca7eb6e0c6ab2863cd8dc0019273cc4d4a1982f84bdb"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e538a8671005641fa195eab962f85cf0504defbd3b548c4c8fc27102a59f687b"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c50592bc8517092f40979e4a5d934f96a1737a77724bb1d121eb78b614b30fc8"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95f16ae82bc242b76cd3c3e5156441e2bd85ff9ec3a9869d750aad443e46073c"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aebd1e98e865e9a28ce0cb2c25b7dfd752f0d1f0a423165b55cd32a431dcc0f4"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:49cd7af7d49e438a39593d1dd8cab106a1912536c2b78a4d814ebdff2786094e"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:affebd61aa3b7a8880fd4ac3ee94722940125ff83ff485e1a7c76be9adaabb38"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d1bac282f140fa092f2bbb6c36ed82270b4a21a6fc55d4b16748ed9f55e50fdb"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1285aa54449e362b1d30d92b2dc042ad3ee80f479cc4e323448d0a0a8a1641fa"}, + {file = "psycopg_binary-3.1.19-cp37-cp37m-win_amd64.whl", hash = "sha256:6cff31af8155dc9ee364098a328bab688c887c732c66b8d027e5b03818ca0287"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9b689c4a17dd3130791dcbb8c30dbf05602f7c2d56c792e193fb49adc7bf5f8"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:017518bd2de4851adc826a224fb105411e148ad845e11355edd6786ba3dfedf5"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c35fd811f339a3cbe7f9b54b2d9a5e592e57426c6cc1051632a62c59c4810208"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38ed45ec9673709bfa5bc17f140e71dd4cca56d4e58ef7fd50d5a5043a4f55c6"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:433f1c256108f9e26f480a8cd6ddb0fb37dbc87d7f5a97e4540a9da9b881f23f"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ed61e43bf5dc8d0936daf03a19fef3168d64191dbe66483f7ad08c4cea0bc36b"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ae8109ff9fdf1fa0cb87ab6645298693fdd2666a7f5f85660df88f6965e0bb7"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a53809ee02e3952fae7977c19b30fd828bd117b8f5edf17a3a94212feb57faaf"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9d39d5ffc151fb33bcd55b99b0e8957299c0b1b3e5a1a5f4399c1287ef0051a9"}, + {file = "psycopg_binary-3.1.19-cp38-cp38-win_amd64.whl", hash = "sha256:e14bc8250000921fcccd53722f86b3b3d1b57db901e206e49e2ab2afc5919c2d"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd88c5cea4efe614d5004fb5f5dcdea3d7d59422be796689e779e03363102d24"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:621a814e60825162d38760c66351b4df679fd422c848b7c2f86ad399bff27145"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46e50c05952b59a214e27d3606f6d510aaa429daed898e16b8a37bfbacc81acc"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03354a9db667c27946e70162cb0042c3929154167f3678a30d23cebfe0ad55b5"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c2f3b79037581afec7baa2bdbcb0a1787f1758744a7662099b0eca2d721cb"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6469ebd9e93327e9f5f36dcf8692fb1e7aeaf70087c1c15d4f2c020e0be3a891"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:85bca9765c04b6be90cb46e7566ffe0faa2d7480ff5c8d5e055ac427f039fd24"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:a836610d5c75e9cff98b9fdb3559c007c785c09eaa84a60d5d10ef6f85f671e8"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8de7a1d9fb3518cc6b58e3c80b75a824209ad52b90c542686c912db8553dad"}, + {file = "psycopg_binary-3.1.19-cp39-cp39-win_amd64.whl", hash = "sha256:76fcd33342f38e35cd6b5408f1bc117d55ab8b16e5019d99b6d3ce0356c51717"}, ] [[package]] @@ -1515,120 +1391,31 @@ files = [ [package.extras] tests = ["pytest"] -[[package]] -name = "pyarrow" -version = "15.0.1" -description = "Python library for Apache Arrow" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pyarrow-15.0.1-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:c2ddb3be5ea938c329a84171694fc230b241ce1b6b0ff1a0280509af51c375fa"}, - {file = "pyarrow-15.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7543ea88a0ff72f8e6baaf9bfdbec2c62aeabdbede9e4a571c71cc3bc43b6302"}, - {file = "pyarrow-15.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1519e218a6941fc074e4501088d891afcb2adf77c236e03c34babcf3d6a0d1c7"}, - {file = "pyarrow-15.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28cafa86e1944761970d3b3fc0411b14ff9b5c2b73cd22aaf470d7a3976335f5"}, - {file = "pyarrow-15.0.1-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:be5c3d463e33d03eab496e1af7916b1d44001c08f0f458ad27dc16093a020638"}, - {file = "pyarrow-15.0.1-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:47b1eda15d3aa3f49a07b1808648e1397e5dc6a80a30bf87faa8e2d02dad7ac3"}, - {file = "pyarrow-15.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e524a31be7db22deebbbcf242b189063ab9a7652c62471d296b31bc6e3cae77b"}, - {file = "pyarrow-15.0.1-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:a476fefe8bdd56122fb0d4881b785413e025858803cc1302d0d788d3522b374d"}, - {file = "pyarrow-15.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:309e6191be385f2e220586bfdb643f9bb21d7e1bc6dd0a6963dc538e347b2431"}, - {file = "pyarrow-15.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:83bc586903dbeb4365cbc72b602f99f70b96c5882e5dfac5278813c7d624ca3c"}, - {file = "pyarrow-15.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07e652daac6d8b05280cd2af31c0fb61a4490ec6a53dc01588014d9fa3fdbee9"}, - {file = "pyarrow-15.0.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:abad2e08652df153a72177ce20c897d083b0c4ebeec051239e2654ddf4d3c996"}, - {file = "pyarrow-15.0.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:cde663352bc83ad75ba7b3206e049ca1a69809223942362a8649e37bd22f9e3b"}, - {file = "pyarrow-15.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:1b6e237dd7a08482a8b8f3f6512d258d2460f182931832a8c6ef3953203d31e1"}, - {file = "pyarrow-15.0.1-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:7bd167536ee23192760b8c731d39b7cfd37914c27fd4582335ffd08450ff799d"}, - {file = "pyarrow-15.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7c08bb31eb2984ba5c3747d375bb522e7e536b8b25b149c9cb5e1c49b0ccb736"}, - {file = "pyarrow-15.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c0f9c1d630ed2524bd1ddf28ec92780a7b599fd54704cd653519f7ff5aec177a"}, - {file = "pyarrow-15.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5186048493395220550bca7b524420471aac2d77af831f584ce132680f55c3df"}, - {file = "pyarrow-15.0.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:31dc30c7ec8958da3a3d9f31d6c3630429b2091ede0ecd0d989fd6bec129f0e4"}, - {file = "pyarrow-15.0.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3f111a014fb8ac2297b43a74bf4495cc479a332908f7ee49cb7cbd50714cb0c1"}, - {file = "pyarrow-15.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:a6d1f7c15d7f68f08490d0cb34611497c74285b8a6bbeab4ef3fc20117310983"}, - {file = "pyarrow-15.0.1-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:9ad931b996f51c2f978ed517b55cb3c6078272fb4ec579e3da5a8c14873b698d"}, - {file = "pyarrow-15.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:738f6b53ab1c2f66b2bde8a1d77e186aeaab702d849e0dfa1158c9e2c030add3"}, - {file = "pyarrow-15.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c1c3fc16bc74e33bf8f1e5a212938ed8d88e902f372c4dac6b5bad328567d2f"}, - {file = "pyarrow-15.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1fa92512128f6c1b8dde0468c1454dd70f3bff623970e370d52efd4d24fd0be"}, - {file = "pyarrow-15.0.1-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:b4157f307c202cbbdac147d9b07447a281fa8e63494f7fc85081da351ec6ace9"}, - {file = "pyarrow-15.0.1-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:b75e7da26f383787f80ad76143b44844ffa28648fcc7099a83df1538c078d2f2"}, - {file = "pyarrow-15.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:3a99eac76ae14096c209850935057b9e8ce97a78397c5cde8724674774f34e5d"}, - {file = "pyarrow-15.0.1-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:dd532d3177e031e9b2d2df19fd003d0cc0520d1747659fcabbd4d9bb87de508c"}, - {file = "pyarrow-15.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ce8c89848fd37e5313fc2ce601483038ee5566db96ba0808d5883b2e2e55dc53"}, - {file = "pyarrow-15.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:862eac5e5f3b6477f7a92b2f27e560e1f4e5e9edfca9ea9da8a7478bb4abd5ce"}, - {file = "pyarrow-15.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f0ea3a29cd5cb99bf14c1c4533eceaa00ea8fb580950fb5a89a5c771a994a4e"}, - {file = "pyarrow-15.0.1-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:bb902f780cfd624b2e8fd8501fadab17618fdb548532620ef3d91312aaf0888a"}, - {file = "pyarrow-15.0.1-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:4f87757f02735a6bb4ad2e1b98279ac45d53b748d5baf52401516413007c6999"}, - {file = "pyarrow-15.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:efd3816c7fbfcbd406ac0f69873cebb052effd7cdc153ae5836d1b00845845d7"}, - {file = "pyarrow-15.0.1.tar.gz", hash = "sha256:21d812548d39d490e0c6928a7c663f37b96bf764034123d4b4ab4530ecc757a9"}, -] - -[package.dependencies] -numpy = ">=1.16.6,<2" - [[package]] name = "pycparser" -version = "2.21" +version = "2.22" description = "C parser in Python" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.8" files = [ - {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, - {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, -] - -[[package]] -name = "pycryptodome" -version = "3.20.0" -description = "Cryptographic library for Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "pycryptodome-3.20.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:f0e6d631bae3f231d3634f91ae4da7a960f7ff87f2865b2d2b831af1dfb04e9a"}, - {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:baee115a9ba6c5d2709a1e88ffe62b73ecc044852a925dcb67713a288c4ec70f"}, - {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:417a276aaa9cb3be91f9014e9d18d10e840a7a9b9a9be64a42f553c5b50b4d1d"}, - {file = "pycryptodome-3.20.0-cp27-cp27m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a1250b7ea809f752b68e3e6f3fd946b5939a52eaeea18c73bdab53e9ba3c2dd"}, - {file = "pycryptodome-3.20.0-cp27-cp27m-musllinux_1_1_aarch64.whl", hash = "sha256:d5954acfe9e00bc83ed9f5cb082ed22c592fbbef86dc48b907238be64ead5c33"}, - {file = "pycryptodome-3.20.0-cp27-cp27m-win32.whl", hash = "sha256:06d6de87c19f967f03b4cf9b34e538ef46e99a337e9a61a77dbe44b2cbcf0690"}, - {file = "pycryptodome-3.20.0-cp27-cp27m-win_amd64.whl", hash = "sha256:ec0bb1188c1d13426039af8ffcb4dbe3aad1d7680c35a62d8eaf2a529b5d3d4f"}, - {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:5601c934c498cd267640b57569e73793cb9a83506f7c73a8ec57a516f5b0b091"}, - {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:d29daa681517f4bc318cd8a23af87e1f2a7bad2fe361e8aa29c77d652a065de4"}, - {file = "pycryptodome-3.20.0-cp27-cp27mu-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3427d9e5310af6680678f4cce149f54e0bb4af60101c7f2c16fdf878b39ccccc"}, - {file = "pycryptodome-3.20.0-cp27-cp27mu-musllinux_1_1_aarch64.whl", hash = "sha256:3cd3ef3aee1079ae44afaeee13393cf68b1058f70576b11439483e34f93cf818"}, - {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_universal2.whl", hash = "sha256:ac1c7c0624a862f2e53438a15c9259d1655325fc2ec4392e66dc46cdae24d044"}, - {file = "pycryptodome-3.20.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:76658f0d942051d12a9bd08ca1b6b34fd762a8ee4240984f7c06ddfb55eaf15a"}, - {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f35d6cee81fa145333137009d9c8ba90951d7d77b67c79cbe5f03c7eb74d8fe2"}, - {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76cb39afede7055127e35a444c1c041d2e8d2f1f9c121ecef573757ba4cd2c3c"}, - {file = "pycryptodome-3.20.0-cp35-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a4c4dc60b78ec41d2afa392491d788c2e06edf48580fbfb0dd0f828af49d25"}, - {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fb3b87461fa35afa19c971b0a2b7456a7b1db7b4eba9a8424666104925b78128"}, - {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_i686.whl", hash = "sha256:acc2614e2e5346a4a4eab6e199203034924313626f9620b7b4b38e9ad74b7e0c"}, - {file = "pycryptodome-3.20.0-cp35-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:210ba1b647837bfc42dd5a813cdecb5b86193ae11a3f5d972b9a0ae2c7e9e4b4"}, - {file = "pycryptodome-3.20.0-cp35-abi3-win32.whl", hash = "sha256:8d6b98d0d83d21fb757a182d52940d028564efe8147baa9ce0f38d057104ae72"}, - {file = "pycryptodome-3.20.0-cp35-abi3-win_amd64.whl", hash = "sha256:9b3ae153c89a480a0ec402e23db8d8d84a3833b65fa4b15b81b83be9d637aab9"}, - {file = "pycryptodome-3.20.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:4401564ebf37dfde45d096974c7a159b52eeabd9969135f0426907db367a652a"}, - {file = "pycryptodome-3.20.0-pp27-pypy_73-win32.whl", hash = "sha256:ec1f93feb3bb93380ab0ebf8b859e8e5678c0f010d2d78367cf6bc30bfeb148e"}, - {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:acae12b9ede49f38eb0ef76fdec2df2e94aad85ae46ec85be3648a57f0a7db04"}, - {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f47888542a0633baff535a04726948e876bf1ed880fddb7c10a736fa99146ab3"}, - {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e0e4a987d38cfc2e71b4a1b591bae4891eeabe5fa0f56154f576e26287bfdea"}, - {file = "pycryptodome-3.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c18b381553638414b38705f07d1ef0a7cf301bc78a5f9bc17a957eb19446834b"}, - {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a60fedd2b37b4cb11ccb5d0399efe26db9e0dd149016c1cc6c8161974ceac2d6"}, - {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:405002eafad114a2f9a930f5db65feef7b53c4784495dd8758069b89baf68eab"}, - {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2ab6ab0cb755154ad14e507d1df72de9897e99fd2d4922851a276ccc14f4f1a5"}, - {file = "pycryptodome-3.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:acf6e43fa75aca2d33e93409f2dafe386fe051818ee79ee8a3e21de9caa2ac9e"}, - {file = "pycryptodome-3.20.0.tar.gz", hash = "sha256:09609209ed7de61c2b560cc5c8c4fbf892f8b15b1faf7e4cbffac97db1fffda7"}, + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, ] [[package]] name = "pydantic" -version = "2.6.4" +version = "2.7.4" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.6.4-py3-none-any.whl", hash = "sha256:cc46fce86607580867bdc3361ad462bab9c222ef042d3da86f2fb333e1d916c5"}, - {file = "pydantic-2.6.4.tar.gz", hash = "sha256:b1704e0847db01817624a6b86766967f552dd9dbf3afba4004409f908dcc84e6"}, + {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"}, + {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"}, ] [package.dependencies] annotated-types = ">=0.4.0" -pydantic-core = "2.16.3" +pydantic-core = "2.18.4" typing-extensions = ">=4.6.1" [package.extras] @@ -1636,90 +1423,90 @@ email = ["email-validator (>=2.0.0)"] [[package]] name = "pydantic-core" -version = "2.16.3" -description = "" +version = "2.18.4" +description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:75b81e678d1c1ede0785c7f46690621e4c6e63ccd9192af1f0bd9d504bbb6bf4"}, - {file = "pydantic_core-2.16.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9c865a7ee6f93783bd5d781af5a4c43dadc37053a5b42f7d18dc019f8c9d2bd1"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:162e498303d2b1c036b957a1278fa0899d02b2842f1ff901b6395104c5554a45"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f583bd01bbfbff4eaee0868e6fc607efdfcc2b03c1c766b06a707abbc856187"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b926dd38db1519ed3043a4de50214e0d600d404099c3392f098a7f9d75029ff8"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:716b542728d4c742353448765aa7cdaa519a7b82f9564130e2b3f6766018c9ec"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc4ad7f7ee1a13d9cb49d8198cd7d7e3aa93e425f371a68235f784e99741561f"}, - {file = "pydantic_core-2.16.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bd87f48924f360e5d1c5f770d6155ce0e7d83f7b4e10c2f9ec001c73cf475c99"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0df446663464884297c793874573549229f9eca73b59360878f382a0fc085979"}, - {file = "pydantic_core-2.16.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4df8a199d9f6afc5ae9a65f8f95ee52cae389a8c6b20163762bde0426275b7db"}, - {file = "pydantic_core-2.16.3-cp310-none-win32.whl", hash = "sha256:456855f57b413f077dff513a5a28ed838dbbb15082ba00f80750377eed23d132"}, - {file = "pydantic_core-2.16.3-cp310-none-win_amd64.whl", hash = "sha256:732da3243e1b8d3eab8c6ae23ae6a58548849d2e4a4e03a1924c8ddf71a387cb"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:519ae0312616026bf4cedc0fe459e982734f3ca82ee8c7246c19b650b60a5ee4"}, - {file = "pydantic_core-2.16.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b3992a322a5617ded0a9f23fd06dbc1e4bd7cf39bc4ccf344b10f80af58beacd"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d62da299c6ecb04df729e4b5c52dc0d53f4f8430b4492b93aa8de1f541c4aac"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2acca2be4bb2f2147ada8cac612f8a98fc09f41c89f87add7256ad27332c2fda"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1b662180108c55dfbf1280d865b2d116633d436cfc0bba82323554873967b340"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e7c6ed0dc9d8e65f24f5824291550139fe6f37fac03788d4580da0d33bc00c97"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6b1bb0827f56654b4437955555dc3aeeebeddc47c2d7ed575477f082622c49e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e56f8186d6210ac7ece503193ec84104da7ceb98f68ce18c07282fcc2452e76f"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:936e5db01dd49476fa8f4383c259b8b1303d5dd5fb34c97de194560698cc2c5e"}, - {file = "pydantic_core-2.16.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:33809aebac276089b78db106ee692bdc9044710e26f24a9a2eaa35a0f9fa70ba"}, - {file = "pydantic_core-2.16.3-cp311-none-win32.whl", hash = "sha256:ded1c35f15c9dea16ead9bffcde9bb5c7c031bff076355dc58dcb1cb436c4721"}, - {file = "pydantic_core-2.16.3-cp311-none-win_amd64.whl", hash = "sha256:d89ca19cdd0dd5f31606a9329e309d4fcbb3df860960acec32630297d61820df"}, - {file = "pydantic_core-2.16.3-cp311-none-win_arm64.whl", hash = "sha256:6162f8d2dc27ba21027f261e4fa26f8bcb3cf9784b7f9499466a311ac284b5b9"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:0f56ae86b60ea987ae8bcd6654a887238fd53d1384f9b222ac457070b7ac4cff"}, - {file = "pydantic_core-2.16.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9bd22a2a639e26171068f8ebb5400ce2c1bc7d17959f60a3b753ae13c632975"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4204e773b4b408062960e65468d5346bdfe139247ee5f1ca2a378983e11388a2"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f651dd19363c632f4abe3480a7c87a9773be27cfe1341aef06e8759599454120"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf09e615a0bf98d406657e0008e4a8701b11481840be7d31755dc9f97c44053"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8e47755d8152c1ab5b55928ab422a76e2e7b22b5ed8e90a7d584268dd49e9c6b"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:500960cb3a0543a724a81ba859da816e8cf01b0e6aaeedf2c3775d12ee49cade"}, - {file = "pydantic_core-2.16.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cf6204fe865da605285c34cf1172879d0314ff267b1c35ff59de7154f35fdc2e"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d33dd21f572545649f90c38c227cc8631268ba25c460b5569abebdd0ec5974ca"}, - {file = "pydantic_core-2.16.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:49d5d58abd4b83fb8ce763be7794d09b2f50f10aa65c0f0c1696c677edeb7cbf"}, - {file = "pydantic_core-2.16.3-cp312-none-win32.whl", hash = "sha256:f53aace168a2a10582e570b7736cc5bef12cae9cf21775e3eafac597e8551fbe"}, - {file = "pydantic_core-2.16.3-cp312-none-win_amd64.whl", hash = "sha256:0d32576b1de5a30d9a97f300cc6a3f4694c428d956adbc7e6e2f9cad279e45ed"}, - {file = "pydantic_core-2.16.3-cp312-none-win_arm64.whl", hash = "sha256:ec08be75bb268473677edb83ba71e7e74b43c008e4a7b1907c6d57e940bf34b6"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:b1f6f5938d63c6139860f044e2538baeee6f0b251a1816e7adb6cbce106a1f01"}, - {file = "pydantic_core-2.16.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:2a1ef6a36fdbf71538142ed604ad19b82f67b05749512e47f247a6ddd06afdc7"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:704d35ecc7e9c31d48926150afada60401c55efa3b46cd1ded5a01bdffaf1d48"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d937653a696465677ed583124b94a4b2d79f5e30b2c46115a68e482c6a591c8a"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c9803edf8e29bd825f43481f19c37f50d2b01899448273b3a7758441b512acf8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72282ad4892a9fb2da25defeac8c2e84352c108705c972db82ab121d15f14e6d"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7f752826b5b8361193df55afcdf8ca6a57d0232653494ba473630a83ba50d8c9"}, - {file = "pydantic_core-2.16.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4384a8f68ddb31a0b0c3deae88765f5868a1b9148939c3f4121233314ad5532c"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:a4b2bf78342c40b3dc830880106f54328928ff03e357935ad26c7128bbd66ce8"}, - {file = "pydantic_core-2.16.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:13dcc4802961b5f843a9385fc821a0b0135e8c07fc3d9949fd49627c1a5e6ae5"}, - {file = "pydantic_core-2.16.3-cp38-none-win32.whl", hash = "sha256:e3e70c94a0c3841e6aa831edab1619ad5c511199be94d0c11ba75fe06efe107a"}, - {file = "pydantic_core-2.16.3-cp38-none-win_amd64.whl", hash = "sha256:ecdf6bf5f578615f2e985a5e1f6572e23aa632c4bd1dc67f8f406d445ac115ed"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:bda1ee3e08252b8d41fa5537413ffdddd58fa73107171a126d3b9ff001b9b820"}, - {file = "pydantic_core-2.16.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:21b888c973e4f26b7a96491c0965a8a312e13be108022ee510248fe379a5fa23"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be0ec334369316fa73448cc8c982c01e5d2a81c95969d58b8f6e272884df0074"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b5b6079cc452a7c53dd378c6f881ac528246b3ac9aae0f8eef98498a75657805"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee8d5f878dccb6d499ba4d30d757111847b6849ae07acdd1205fffa1fc1253c"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7233d65d9d651242a68801159763d09e9ec96e8a158dbf118dc090cd77a104c9"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c6119dc90483a5cb50a1306adb8d52c66e447da88ea44f323e0ae1a5fcb14256"}, - {file = "pydantic_core-2.16.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:578114bc803a4c1ff9946d977c221e4376620a46cf78da267d946397dc9514a8"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d8f99b147ff3fcf6b3cc60cb0c39ea443884d5559a30b1481e92495f2310ff2b"}, - {file = "pydantic_core-2.16.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:4ac6b4ce1e7283d715c4b729d8f9dab9627586dafce81d9eaa009dd7f25dd972"}, - {file = "pydantic_core-2.16.3-cp39-none-win32.whl", hash = "sha256:e7774b570e61cb998490c5235740d475413a1f6de823169b4cf94e2fe9e9f6b2"}, - {file = "pydantic_core-2.16.3-cp39-none-win_amd64.whl", hash = "sha256:9091632a25b8b87b9a605ec0e61f241c456e9248bfdcf7abdf344fdb169c81cf"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:36fa178aacbc277bc6b62a2c3da95226520da4f4e9e206fdf076484363895d2c"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:dcca5d2bf65c6fb591fff92da03f94cd4f315972f97c21975398bd4bd046854a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2a72fb9963cba4cd5793854fd12f4cfee731e86df140f59ff52a49b3552db241"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b60cc1a081f80a2105a59385b92d82278b15d80ebb3adb200542ae165cd7d183"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:cbcc558401de90a746d02ef330c528f2e668c83350f045833543cd57ecead1ad"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fee427241c2d9fb7192b658190f9f5fd6dfe41e02f3c1489d2ec1e6a5ab1e04a"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f4cb85f693044e0f71f394ff76c98ddc1bc0953e48c061725e540396d5c8a2e1"}, - {file = "pydantic_core-2.16.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:b29eeb887aa931c2fcef5aa515d9d176d25006794610c264ddc114c053bf96fe"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a425479ee40ff021f8216c9d07a6a3b54b31c8267c6e17aa88b70d7ebd0e5e5b"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:5c5cbc703168d1b7a838668998308018a2718c2130595e8e190220238addc96f"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99b6add4c0b39a513d323d3b93bc173dac663c27b99860dd5bf491b240d26137"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75f76ee558751746d6a38f89d60b6228fa174e5172d143886af0f85aa306fd89"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:00ee1c97b5364b84cb0bd82e9bbf645d5e2871fb8c58059d158412fee2d33d8a"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:287073c66748f624be4cef893ef9174e3eb88fe0b8a78dc22e88eca4bc357ca6"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ed25e1835c00a332cb10c683cd39da96a719ab1dfc08427d476bce41b92531fc"}, - {file = "pydantic_core-2.16.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:86b3d0033580bd6bbe07590152007275bd7af95f98eaa5bd36f3da219dcd93da"}, - {file = "pydantic_core-2.16.3.tar.gz", hash = "sha256:1cac689f80a3abab2d3c0048b29eea5751114054f032a941a32de4c852c59cad"}, + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"}, + {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"}, + {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"}, + {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"}, + {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"}, + {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"}, + {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"}, + {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"}, + {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"}, + {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"}, + {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"}, + {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"}, + {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"}, + {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"}, + {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"}, + {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"}, + {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"}, + {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"}, + {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"}, + {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"}, + {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"}, + {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"}, + {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"}, + {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"}, + {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"}, + {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"}, + {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"}, + {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"}, + {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"}, + {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"}, ] [package.dependencies] @@ -1727,43 +1514,44 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pygments" -version = "2.17.2" +version = "2.18.0" description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "pygments-2.17.2-py3-none-any.whl", hash = "sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c"}, - {file = "pygments-2.17.2.tar.gz", hash = "sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367"}, + {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, + {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, ] [package.extras] -plugins = ["importlib-metadata"] windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymilvus" -version = "2.3.7" +version = "2.4.3" description = "Python Sdk for Milvus" optional = false python-versions = ">=3.8" files = [ - {file = "pymilvus-2.3.7-py3-none-any.whl", hash = "sha256:37d5a360d671c6fe23fe1dd4e6b41af6e4b6d6488ad8e43a06afe23d02f98272"}, - {file = "pymilvus-2.3.7.tar.gz", hash = "sha256:b8df5b8db3a82209c33b7211e0b9ef4a63ee00cb2976ccb1e9f5b92a2c2d5b82"}, + {file = "pymilvus-2.4.3-py3-none-any.whl", hash = "sha256:38239e89f8d739f665141d0b80908990b5f59681e889e135c234a4a45669a5c8"}, + {file = "pymilvus-2.4.3.tar.gz", hash = "sha256:703ac29296cdce03d6dc2aaebbe959e57745c141a94150e371dc36c61c226cc1"}, ] [package.dependencies] -azure-storage-blob = "*" environs = "<=9.5.0" -grpcio = ">=1.49.1,<=1.60.0" -minio = ">=7.0.0" +grpcio = ">=1.49.1,<=1.63.0" +milvus-lite = ">=2.4.0,<2.5.0" numpy = {version = "<1.25.0", markers = "python_version <= \"3.8\""} pandas = ">=1.2.4" protobuf = ">=3.20.0" -pyarrow = ">=12.0.0" -requests = "*" setuptools = ">=67" ujson = ">=2.0.0" +[package.extras] +bulk-writer = ["azure-storage-blob", "minio (>=7.0.0)", "pyarrow (>=12.0.0)", "requests"] +dev = ["black", "grpcio (==1.62.2)", "grpcio-testing (==1.62.2)", "grpcio-tools (==1.62.2)", "pytest (>=5.3.4)", "pytest-cov (>=2.8.1)", "pytest-timeout (>=1.3.4)", "ruff (>0.4.0)"] +model = ["milvus-model (>=0.1.0)"] + [[package]] name = "pytest" version = "7.4.4" @@ -1860,7 +1648,6 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1868,16 +1655,8 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {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"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1894,7 +1673,6 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1902,7 +1680,6 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -1910,36 +1687,36 @@ files = [ [[package]] name = "qdrant-client" -version = "1.8.0" +version = "1.9.1" description = "Client library for the Qdrant vector search engine" optional = false python-versions = ">=3.8" files = [ - {file = "qdrant_client-1.8.0-py3-none-any.whl", hash = "sha256:fa28d3eb64c0c57ec029c7c85c71f6c72c197f92502022655741f3632c518e29"}, - {file = "qdrant_client-1.8.0.tar.gz", hash = "sha256:2a1a3f2cbacc7adba85644cf6cfdee20401cf25764b32da479c81fb63e178d15"}, + {file = "qdrant_client-1.9.1-py3-none-any.whl", hash = "sha256:b9b7e0e5c1a51410d8bb5106a869a51e12f92ab45a99030f27aba790553bd2c8"}, + {file = "qdrant_client-1.9.1.tar.gz", hash = "sha256:186b9c31d95aefe8f2db84b7746402d7365bd63b305550e530e31bde2002ce79"}, ] [package.dependencies] grpcio = ">=1.41.0" grpcio-tools = ">=1.41.0" -httpx = {version = ">=0.14.0", extras = ["http2"]} +httpx = {version = ">=0.20.0", extras = ["http2"]} numpy = {version = ">=1.21", markers = "python_version >= \"3.8\" and python_version < \"3.12\""} portalocker = ">=2.7.0,<3.0.0" pydantic = ">=1.10.8" urllib3 = ">=1.26.14,<3" [package.extras] -fastembed = ["fastembed (==0.2.2)"] +fastembed = ["fastembed (==0.2.6)"] [[package]] name = "redis" -version = "5.0.3" +version = "5.0.5" description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.7" files = [ - {file = "redis-5.0.3-py3-none-any.whl", hash = "sha256:5da9b8fe9e1254293756c16c008e8620b3d15fcc6dde6babde9541850e72a32d"}, - {file = "redis-5.0.3.tar.gz", hash = "sha256:4973bae7444c0fbed64a06b87446f79361cb7e4ec1538c022d696ed7a5015580"}, + {file = "redis-5.0.5-py3-none-any.whl", hash = "sha256:30b47d4ebb6b7a0b9b40c1275a19b87bb6f46b3bed82a89012cf56dea4024ada"}, + {file = "redis-5.0.5.tar.gz", hash = "sha256:3417688621acf6ee368dec4a04dd95881be24efd34c79f00d31f62bb528800ae"}, ] [package.dependencies] @@ -1951,13 +1728,13 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" [[package]] name = "requests" -version = "2.31.0" +version = "2.32.3" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, ] [package.dependencies] @@ -1972,19 +1749,18 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "setuptools" -version = "69.2.0" +version = "70.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "setuptools-69.2.0-py3-none-any.whl", hash = "sha256:c21c49fb1042386df081cb5d86759792ab89efca84cf114889191cd09aacc80c"}, - {file = "setuptools-69.2.0.tar.gz", hash = "sha256:0ff4183f8f42cd8fa3acea16c45205521a4ef28f73c6391d8a25e92893134f2e"}, + {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, + {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, ] [package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] +docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "six" @@ -2050,13 +1826,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.2" +version = "4.66.4" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, - {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, + {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, + {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, ] [package.dependencies] @@ -2070,18 +1846,18 @@ telegram = ["requests"] [[package]] name = "traitlets" -version = "5.14.2" +version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" files = [ - {file = "traitlets-5.14.2-py3-none-any.whl", hash = "sha256:fcdf85684a772ddeba87db2f398ce00b40ff550d1528c03c14dbf6a02003cd80"}, - {file = "traitlets-5.14.2.tar.gz", hash = "sha256:8cdd83c040dab7d1dee822678e5f5d100b514f7b72b01615b26fc5718916fdf9"}, + {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, + {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, ] [package.extras] docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.1)", "pytest-mock", "pytest-mypy-testing"] +test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] [[package]] name = "typer" @@ -2105,13 +1881,13 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6. [[package]] name = "typing-extensions" -version = "4.10.0" +version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.10.0-py3-none-any.whl", hash = "sha256:69b1a937c3a517342112fb4c6df7e72fc39a38e7891a5730ed4985b5214b5475"}, - {file = "typing_extensions-4.10.0.tar.gz", hash = "sha256:b0abd7c89e8fb96f98db18d86106ff1d90ab692004eb746cf6eda2682f91b3cb"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] @@ -2140,78 +1916,107 @@ files = [ [[package]] name = "ujson" -version = "5.9.0" +version = "5.10.0" description = "Ultra fast JSON encoder and decoder for Python" optional = false python-versions = ">=3.8" files = [ - {file = "ujson-5.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ab71bf27b002eaf7d047c54a68e60230fbd5cd9da60de7ca0aa87d0bccead8fa"}, - {file = "ujson-5.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7a365eac66f5aa7a7fdf57e5066ada6226700884fc7dce2ba5483538bc16c8c5"}, - {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e015122b337858dba5a3dc3533af2a8fc0410ee9e2374092f6a5b88b182e9fcc"}, - {file = "ujson-5.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:779a2a88c53039bebfbccca934430dabb5c62cc179e09a9c27a322023f363e0d"}, - {file = "ujson-5.9.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:10ca3c41e80509fd9805f7c149068fa8dbee18872bbdc03d7cca928926a358d5"}, - {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4a566e465cb2fcfdf040c2447b7dd9718799d0d90134b37a20dff1e27c0e9096"}, - {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f833c529e922577226a05bc25b6a8b3eb6c4fb155b72dd88d33de99d53113124"}, - {file = "ujson-5.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b68a0caab33f359b4cbbc10065c88e3758c9f73a11a65a91f024b2e7a1257106"}, - {file = "ujson-5.9.0-cp310-cp310-win32.whl", hash = "sha256:7cc7e605d2aa6ae6b7321c3ae250d2e050f06082e71ab1a4200b4ae64d25863c"}, - {file = "ujson-5.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:a6d3f10eb8ccba4316a6b5465b705ed70a06011c6f82418b59278fbc919bef6f"}, - {file = "ujson-5.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b23bbb46334ce51ddb5dded60c662fbf7bb74a37b8f87221c5b0fec1ec6454b"}, - {file = "ujson-5.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6974b3a7c17bbf829e6c3bfdc5823c67922e44ff169851a755eab79a3dd31ec0"}, - {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5964ea916edfe24af1f4cc68488448fbb1ec27a3ddcddc2b236da575c12c8ae"}, - {file = "ujson-5.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ba7cac47dd65ff88571eceeff48bf30ed5eb9c67b34b88cb22869b7aa19600d"}, - {file = "ujson-5.9.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bbd91a151a8f3358c29355a491e915eb203f607267a25e6ab10531b3b157c5e"}, - {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:829a69d451a49c0de14a9fecb2a2d544a9b2c884c2b542adb243b683a6f15908"}, - {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:a807ae73c46ad5db161a7e883eec0fbe1bebc6a54890152ccc63072c4884823b"}, - {file = "ujson-5.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8fc2aa18b13d97b3c8ccecdf1a3c405f411a6e96adeee94233058c44ff92617d"}, - {file = "ujson-5.9.0-cp311-cp311-win32.whl", hash = "sha256:70e06849dfeb2548be48fdd3ceb53300640bc8100c379d6e19d78045e9c26120"}, - {file = "ujson-5.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:7309d063cd392811acc49b5016728a5e1b46ab9907d321ebbe1c2156bc3c0b99"}, - {file = "ujson-5.9.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:20509a8c9f775b3a511e308bbe0b72897ba6b800767a7c90c5cca59d20d7c42c"}, - {file = "ujson-5.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b28407cfe315bd1b34f1ebe65d3bd735d6b36d409b334100be8cdffae2177b2f"}, - {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d302bd17989b6bd90d49bade66943c78f9e3670407dbc53ebcf61271cadc399"}, - {file = "ujson-5.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f21315f51e0db8ee245e33a649dd2d9dce0594522de6f278d62f15f998e050e"}, - {file = "ujson-5.9.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5635b78b636a54a86fdbf6f027e461aa6c6b948363bdf8d4fbb56a42b7388320"}, - {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:82b5a56609f1235d72835ee109163c7041b30920d70fe7dac9176c64df87c164"}, - {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:5ca35f484622fd208f55041b042d9d94f3b2c9c5add4e9af5ee9946d2d30db01"}, - {file = "ujson-5.9.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:829b824953ebad76d46e4ae709e940bb229e8999e40881338b3cc94c771b876c"}, - {file = "ujson-5.9.0-cp312-cp312-win32.whl", hash = "sha256:25fa46e4ff0a2deecbcf7100af3a5d70090b461906f2299506485ff31d9ec437"}, - {file = "ujson-5.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:60718f1720a61560618eff3b56fd517d107518d3c0160ca7a5a66ac949c6cf1c"}, - {file = "ujson-5.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d581db9db9e41d8ea0b2705c90518ba623cbdc74f8d644d7eb0d107be0d85d9c"}, - {file = "ujson-5.9.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ff741a5b4be2d08fceaab681c9d4bc89abf3c9db600ab435e20b9b6d4dfef12e"}, - {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdcb02cabcb1e44381221840a7af04433c1dc3297af76fde924a50c3054c708c"}, - {file = "ujson-5.9.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e208d3bf02c6963e6ef7324dadf1d73239fb7008491fdf523208f60be6437402"}, - {file = "ujson-5.9.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f4b3917296630a075e04d3d07601ce2a176479c23af838b6cf90a2d6b39b0d95"}, - {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0c4d6adb2c7bb9eb7c71ad6f6f612e13b264942e841f8cc3314a21a289a76c4e"}, - {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:0b159efece9ab5c01f70b9d10bbb77241ce111a45bc8d21a44c219a2aec8ddfd"}, - {file = "ujson-5.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0cb4a7814940ddd6619bdce6be637a4b37a8c4760de9373bac54bb7b229698b"}, - {file = "ujson-5.9.0-cp38-cp38-win32.whl", hash = "sha256:dc80f0f5abf33bd7099f7ac94ab1206730a3c0a2d17549911ed2cb6b7aa36d2d"}, - {file = "ujson-5.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:506a45e5fcbb2d46f1a51fead991c39529fc3737c0f5d47c9b4a1d762578fc30"}, - {file = "ujson-5.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d0fd2eba664a22447102062814bd13e63c6130540222c0aa620701dd01f4be81"}, - {file = "ujson-5.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:bdf7fc21a03bafe4ba208dafa84ae38e04e5d36c0e1c746726edf5392e9f9f36"}, - {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2f909bc08ce01f122fd9c24bc6f9876aa087188dfaf3c4116fe6e4daf7e194f"}, - {file = "ujson-5.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd4ea86c2afd41429751d22a3ccd03311c067bd6aeee2d054f83f97e41e11d8f"}, - {file = "ujson-5.9.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:63fb2e6599d96fdffdb553af0ed3f76b85fda63281063f1cb5b1141a6fcd0617"}, - {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:32bba5870c8fa2a97f4a68f6401038d3f1922e66c34280d710af00b14a3ca562"}, - {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:37ef92e42535a81bf72179d0e252c9af42a4ed966dc6be6967ebfb929a87bc60"}, - {file = "ujson-5.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f69f16b8f1c69da00e38dc5f2d08a86b0e781d0ad3e4cc6a13ea033a439c4844"}, - {file = "ujson-5.9.0-cp39-cp39-win32.whl", hash = "sha256:3382a3ce0ccc0558b1c1668950008cece9bf463ebb17463ebf6a8bfc060dae34"}, - {file = "ujson-5.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:6adef377ed583477cf005b58c3025051b5faa6b8cc25876e594afbb772578f21"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ffdfebd819f492e48e4f31c97cb593b9c1a8251933d8f8972e81697f00326ff1"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4eec2ddc046360d087cf35659c7ba0cbd101f32035e19047013162274e71fcf"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbb90aa5c23cb3d4b803c12aa220d26778c31b6e4b7a13a1f49971f6c7d088e"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba0823cb70866f0d6a4ad48d998dd338dce7314598721bc1b7986d054d782dfd"}, - {file = "ujson-5.9.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:4e35d7885ed612feb6b3dd1b7de28e89baaba4011ecdf995e88be9ac614765e9"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:b048aa93eace8571eedbd67b3766623e7f0acbf08ee291bef7d8106210432427"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:323279e68c195110ef85cbe5edce885219e3d4a48705448720ad925d88c9f851"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9ac92d86ff34296f881e12aa955f7014d276895e0e4e868ba7fddebbde38e378"}, - {file = "ujson-5.9.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6eecbd09b316cea1fd929b1e25f70382917542ab11b692cb46ec9b0a26c7427f"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:473fb8dff1d58f49912323d7cb0859df5585cfc932e4b9c053bf8cf7f2d7c5c4"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f91719c6abafe429c1a144cfe27883eace9fb1c09a9c5ef1bcb3ae80a3076a4e"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b1c0991c4fe256f5fdb19758f7eac7f47caac29a6c57d0de16a19048eb86bad"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a8ea0f55a1396708e564595aaa6696c0d8af532340f477162ff6927ecc46e21"}, - {file = "ujson-5.9.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:07e0cfdde5fd91f54cd2d7ffb3482c8ff1bf558abf32a8b953a5d169575ae1cd"}, - {file = "ujson-5.9.0.tar.gz", hash = "sha256:89cc92e73d5501b8a7f48575eeb14ad27156ad092c2e9fc7e3cf949f07e75532"}, + {file = "ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd"}, + {file = "ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22cffecf73391e8abd65ef5f4e4dd523162a3399d5e84faa6aebbf9583df86d6"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26b0e2d2366543c1bb4fbd457446f00b0187a2bddf93148ac2da07a53fe51569"}, + {file = "ujson-5.10.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:caf270c6dba1be7a41125cd1e4fc7ba384bf564650beef0df2dd21a00b7f5770"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a245d59f2ffe750446292b0094244df163c3dc96b3ce152a2c837a44e7cda9d1"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:94a87f6e151c5f483d7d54ceef83b45d3a9cca7a9cb453dbdbb3f5a6f64033f5"}, + {file = "ujson-5.10.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:29b443c4c0a113bcbb792c88bea67b675c7ca3ca80c3474784e08bba01c18d51"}, + {file = "ujson-5.10.0-cp310-cp310-win32.whl", hash = "sha256:c18610b9ccd2874950faf474692deee4223a994251bc0a083c114671b64e6518"}, + {file = "ujson-5.10.0-cp310-cp310-win_amd64.whl", hash = "sha256:924f7318c31874d6bb44d9ee1900167ca32aa9b69389b98ecbde34c1698a250f"}, + {file = "ujson-5.10.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a5b366812c90e69d0f379a53648be10a5db38f9d4ad212b60af00bd4048d0f00"}, + {file = "ujson-5.10.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:502bf475781e8167f0f9d0e41cd32879d120a524b22358e7f205294224c71126"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b91b5d0d9d283e085e821651184a647699430705b15bf274c7896f23fe9c9d8"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:129e39af3a6d85b9c26d5577169c21d53821d8cf68e079060602e861c6e5da1b"}, + {file = "ujson-5.10.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f77b74475c462cb8b88680471193064d3e715c7c6074b1c8c412cb526466efe9"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7ec0ca8c415e81aa4123501fee7f761abf4b7f386aad348501a26940beb1860f"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ab13a2a9e0b2865a6c6db9271f4b46af1c7476bfd51af1f64585e919b7c07fd4"}, + {file = "ujson-5.10.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:57aaf98b92d72fc70886b5a0e1a1ca52c2320377360341715dd3933a18e827b1"}, + {file = "ujson-5.10.0-cp311-cp311-win32.whl", hash = "sha256:2987713a490ceb27edff77fb184ed09acdc565db700ee852823c3dc3cffe455f"}, + {file = "ujson-5.10.0-cp311-cp311-win_amd64.whl", hash = "sha256:f00ea7e00447918ee0eff2422c4add4c5752b1b60e88fcb3c067d4a21049a720"}, + {file = "ujson-5.10.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:98ba15d8cbc481ce55695beee9f063189dce91a4b08bc1d03e7f0152cd4bbdd5"}, + {file = "ujson-5.10.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a9d2edbf1556e4f56e50fab7d8ff993dbad7f54bac68eacdd27a8f55f433578e"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6627029ae4f52d0e1a2451768c2c37c0c814ffc04f796eb36244cf16b8e57043"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8ccb77b3e40b151e20519c6ae6d89bfe3f4c14e8e210d910287f778368bb3d1"}, + {file = "ujson-5.10.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3caf9cd64abfeb11a3b661329085c5e167abbe15256b3b68cb5d914ba7396f3"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6e32abdce572e3a8c3d02c886c704a38a1b015a1fb858004e03d20ca7cecbb21"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a65b6af4d903103ee7b6f4f5b85f1bfd0c90ba4eeac6421aae436c9988aa64a2"}, + {file = "ujson-5.10.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:604a046d966457b6cdcacc5aa2ec5314f0e8c42bae52842c1e6fa02ea4bda42e"}, + {file = "ujson-5.10.0-cp312-cp312-win32.whl", hash = "sha256:6dea1c8b4fc921bf78a8ff00bbd2bfe166345f5536c510671bccececb187c80e"}, + {file = "ujson-5.10.0-cp312-cp312-win_amd64.whl", hash = "sha256:38665e7d8290188b1e0d57d584eb8110951a9591363316dd41cf8686ab1d0abc"}, + {file = "ujson-5.10.0-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:618efd84dc1acbd6bff8eaa736bb6c074bfa8b8a98f55b61c38d4ca2c1f7f287"}, + {file = "ujson-5.10.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:38d5d36b4aedfe81dfe251f76c0467399d575d1395a1755de391e58985ab1c2e"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67079b1f9fb29ed9a2914acf4ef6c02844b3153913eb735d4bf287ee1db6e557"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7d0e0ceeb8fe2468c70ec0c37b439dd554e2aa539a8a56365fd761edb418988"}, + {file = "ujson-5.10.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59e02cd37bc7c44d587a0ba45347cc815fb7a5fe48de16bf05caa5f7d0d2e816"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a890b706b64e0065f02577bf6d8ca3b66c11a5e81fb75d757233a38c07a1f20"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:621e34b4632c740ecb491efc7f1fcb4f74b48ddb55e65221995e74e2d00bbff0"}, + {file = "ujson-5.10.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b9500e61fce0cfc86168b248104e954fead61f9be213087153d272e817ec7b4f"}, + {file = "ujson-5.10.0-cp313-cp313-win32.whl", hash = "sha256:4c4fc16f11ac1612f05b6f5781b384716719547e142cfd67b65d035bd85af165"}, + {file = "ujson-5.10.0-cp313-cp313-win_amd64.whl", hash = "sha256:4573fd1695932d4f619928fd09d5d03d917274381649ade4328091ceca175539"}, + {file = "ujson-5.10.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a984a3131da7f07563057db1c3020b1350a3e27a8ec46ccbfbf21e5928a43050"}, + {file = "ujson-5.10.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:73814cd1b9db6fc3270e9d8fe3b19f9f89e78ee9d71e8bd6c9a626aeaeaf16bd"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:61e1591ed9376e5eddda202ec229eddc56c612b61ac6ad07f96b91460bb6c2fb"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2c75269f8205b2690db4572a4a36fe47cd1338e4368bc73a7a0e48789e2e35a"}, + {file = "ujson-5.10.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7223f41e5bf1f919cd8d073e35b229295aa8e0f7b5de07ed1c8fddac63a6bc5d"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d4dc2fd6b3067c0782e7002ac3b38cf48608ee6366ff176bbd02cf969c9c20fe"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:232cc85f8ee3c454c115455195a205074a56ff42608fd6b942aa4c378ac14dd7"}, + {file = "ujson-5.10.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:cc6139531f13148055d691e442e4bc6601f6dba1e6d521b1585d4788ab0bfad4"}, + {file = "ujson-5.10.0-cp38-cp38-win32.whl", hash = "sha256:e7ce306a42b6b93ca47ac4a3b96683ca554f6d35dd8adc5acfcd55096c8dfcb8"}, + {file = "ujson-5.10.0-cp38-cp38-win_amd64.whl", hash = "sha256:e82d4bb2138ab05e18f089a83b6564fee28048771eb63cdecf4b9b549de8a2cc"}, + {file = "ujson-5.10.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dfef2814c6b3291c3c5f10065f745a1307d86019dbd7ea50e83504950136ed5b"}, + {file = "ujson-5.10.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4734ee0745d5928d0ba3a213647f1c4a74a2a28edc6d27b2d6d5bd9fa4319e27"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d47ebb01bd865fdea43da56254a3930a413f0c5590372a1241514abae8aa7c76"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dee5e97c2496874acbf1d3e37b521dd1f307349ed955e62d1d2f05382bc36dd5"}, + {file = "ujson-5.10.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7490655a2272a2d0b072ef16b0b58ee462f4973a8f6bbe64917ce5e0a256f9c0"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ba17799fcddaddf5c1f75a4ba3fd6441f6a4f1e9173f8a786b42450851bd74f1"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2aff2985cef314f21d0fecc56027505804bc78802c0121343874741650a4d3d1"}, + {file = "ujson-5.10.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ad88ac75c432674d05b61184178635d44901eb749786c8eb08c102330e6e8996"}, + {file = "ujson-5.10.0-cp39-cp39-win32.whl", hash = "sha256:2544912a71da4ff8c4f7ab5606f947d7299971bdd25a45e008e467ca638d13c9"}, + {file = "ujson-5.10.0-cp39-cp39-win_amd64.whl", hash = "sha256:3ff201d62b1b177a46f113bb43ad300b424b7847f9c5d38b1b4ad8f75d4a282a"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:5b6fee72fa77dc172a28f21693f64d93166534c263adb3f96c413ccc85ef6e64"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:61d0af13a9af01d9f26d2331ce49bb5ac1fb9c814964018ac8df605b5422dcb3"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecb24f0bdd899d368b715c9e6664166cf694d1e57be73f17759573a6986dd95a"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbd8fd427f57a03cff3ad6574b5e299131585d9727c8c366da4624a9069ed746"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:beeaf1c48e32f07d8820c705ff8e645f8afa690cca1544adba4ebfa067efdc88"}, + {file = "ujson-5.10.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:baed37ea46d756aca2955e99525cc02d9181de67f25515c468856c38d52b5f3b"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7663960f08cd5a2bb152f5ee3992e1af7690a64c0e26d31ba7b3ff5b2ee66337"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:d8640fb4072d36b08e95a3a380ba65779d356b2fee8696afeb7794cf0902d0a1"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78778a3aa7aafb11e7ddca4e29f46bc5139131037ad628cc10936764282d6753"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0111b27f2d5c820e7f2dbad7d48e3338c824e7ac4d2a12da3dc6061cc39c8e6"}, + {file = "ujson-5.10.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:c66962ca7565605b355a9ed478292da628b8f18c0f2793021ca4425abf8b01e5"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ba43cc34cce49cf2d4bc76401a754a81202d8aa926d0e2b79f0ee258cb15d3a4"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:ac56eb983edce27e7f51d05bc8dd820586c6e6be1c5216a6809b0c668bb312b8"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44bd4b23a0e723bf8b10628288c2c7c335161d6840013d4d5de20e48551773b"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c10f4654e5326ec14a46bcdeb2b685d4ada6911050aa8baaf3501e57024b804"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0de4971a89a762398006e844ae394bd46991f7c385d7a6a3b93ba229e6dac17e"}, + {file = "ujson-5.10.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e1402f0564a97d2a52310ae10a64d25bcef94f8dd643fcf5d310219d915484f7"}, + {file = "ujson-5.10.0.tar.gz", hash = "sha256:b3cd8f3c5d8c7738257f1018880444f7b7d9b66232c64649f562d7ba86ad4bc1"}, ] +[[package]] +name = "urllib3" +version = "1.26.18" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +files = [ + {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, + {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, +] + +[package.extras] +brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + [[package]] name = "urllib3" version = "2.2.1" @@ -2231,35 +2036,24 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "validators" -version = "0.22.0" +version = "0.28.3" description = "Python Data Validation for Humans™" optional = false python-versions = ">=3.8" files = [ - {file = "validators-0.22.0-py3-none-any.whl", hash = "sha256:61cf7d4a62bbae559f2e54aed3b000cea9ff3e2fdbe463f51179b92c58c9585a"}, - {file = "validators-0.22.0.tar.gz", hash = "sha256:77b2689b172eeeb600d9605ab86194641670cdb73b60afd577142a9397873370"}, + {file = "validators-0.28.3-py3-none-any.whl", hash = "sha256:53cafa854f13850156259d9cc479b864ee901f6a96e6b109e6fc33f98f37d99f"}, + {file = "validators-0.28.3.tar.gz", hash = "sha256:c6c79840bcde9ba77b19f6218f7738188115e27830cbaff43264bc4ed24c429d"}, ] -[package.extras] -docs-offline = ["myst-parser (>=2.0.0)", "pypandoc-binary (>=1.11)", "sphinx (>=7.1.1)"] -docs-online = ["mkdocs (>=1.5.2)", "mkdocs-git-revision-date-localized-plugin (>=1.2.0)", "mkdocs-material (>=9.2.6)", "mkdocstrings[python] (>=0.22.0)", "pyaml (>=23.7.0)"] -hooks = ["pre-commit (>=3.3.3)"] -package = ["build (>=1.0.0)", "twine (>=4.0.2)"] -runner = ["tox (>=4.11.1)"] -sast = ["bandit[toml] (>=1.7.5)"] -testing = ["pytest (>=7.4.0)"] -tooling = ["black (>=23.7.0)", "pyright (>=1.1.325)", "ruff (>=0.0.287)"] -tooling-extras = ["pyaml (>=23.7.0)", "pypandoc-binary (>=1.11)", "pytest (>=7.4.0)"] - [[package]] name = "virtualenv" -version = "20.25.1" +version = "20.26.2" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.7" files = [ - {file = "virtualenv-20.25.1-py3-none-any.whl", hash = "sha256:961c026ac520bac5f69acb8ea063e8a4f071bcc9457b9c1f28f6b085c511583a"}, - {file = "virtualenv-20.25.1.tar.gz", hash = "sha256:e08e13ecdca7a0bd53798f356d5831434afa5b07b93f0abdf0797b7a06ffe197"}, + {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, + {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, ] [package.dependencies] @@ -2268,7 +2062,7 @@ filelock = ">=3.12.2,<4" platformdirs = ">=3.9.1,<5" [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] [[package]] @@ -2284,13 +2078,13 @@ files = [ [[package]] name = "weaviate-client" -version = "4.5.3" +version = "4.6.4" description = "A python native Weaviate client" optional = false python-versions = ">=3.8" files = [ - {file = "weaviate-client-4.5.3.tar.gz", hash = "sha256:56578f6ed84278851a3a3abb7b578367d5e7e66dfad2b114e0dc1caa4a26b141"}, - {file = "weaviate_client-4.5.3-py3-none-any.whl", hash = "sha256:fdd317c860c5cc2a428e954b6196c15ab96a4b545557eda970f8ba3fdd662b8c"}, + {file = "weaviate_client-4.6.4-py3-none-any.whl", hash = "sha256:19b76fb923a5f0b6fcb7471ef3cd990d2791ede71731e53429e1066a9dbf2af2"}, + {file = "weaviate_client-4.6.4.tar.gz", hash = "sha256:5378db8a33bf1d48adff3f9efa572d9fb04eaeb36444817cab56f1ba3c595500"}, ] [package.dependencies] @@ -2298,12 +2092,12 @@ authlib = ">=1.2.1,<2.0.0" grpcio = ">=1.57.0,<2.0.0" grpcio-health-checking = ">=1.57.0,<2.0.0" grpcio-tools = ">=1.57.0,<2.0.0" -httpx = "0.27.0" +httpx = ">=0.25.0,<=0.27.0" pydantic = ">=2.5.0,<3.0.0" requests = ">=2.30.0,<3.0.0" -validators = "0.22.0" +validators = "0.28.3" [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "66b915f6915c79f83165dc5fb39f363ca53c493668ff87bb5b4953fb712cd4cc" +content-hash = "ffc0bfbf695bbc2771fd29828e8a76270b5eb01501be717f2464aa573f4a2d5e" diff --git a/pyproject.toml b/pyproject.toml index 92c7c527..bc8b5c82 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = ["Qdrant Team "] [tool.poetry.dependencies] python = ">=3.8,<3.12" -qdrant-client = "^1.8.0" +qdrant-client = "^1.9.0" typer = "^0.6.1" jsons = "^1.6.3" h5py = "^3.7.0" From a7d5d68e4e953f53f5c65be4240e100ef60af54e Mon Sep 17 00:00:00 2001 From: generall Date: Wed, 12 Jun 2024 16:50:47 +0200 Subject: [PATCH 024/101] more configs --- .../qdrant-vs-weaviate-m32.json | 132 ++++++++++++++++++ ...viate.json => qdrant-vs-weaviate-m64.json} | 12 +- 2 files changed, 138 insertions(+), 6 deletions(-) create mode 100644 experiments/configurations/qdrant-vs-weaviate-m32.json rename experiments/configurations/{qdrant-vs-weaviate.json => qdrant-vs-weaviate-m64.json} (96%) diff --git a/experiments/configurations/qdrant-vs-weaviate-m32.json b/experiments/configurations/qdrant-vs-weaviate-m32.json new file mode 100644 index 00000000..a3680ece --- /dev/null +++ b/experiments/configurations/qdrant-vs-weaviate-m32.json @@ -0,0 +1,132 @@ +[ + { + "name": "latest-qdrant-bq-latency-m-32", + "engine": "qdrant", + "connection_params": { "timeout": 60 }, + "collection_params": { + "quantization_config": { "binary": { "always_ram": true } }, + "optimizers_config": { }, + "hnsw_config": { "m": 64, "ef_construct": 512 } + }, + "search_params": [ + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 1, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 32.0 } } } + ], + "upload_params": { "parallel": 8, "batch_size": 1024 } + }, + { + "name": "latest-qdrant-bq-rps-m-32", + "engine": "qdrant", + "connection_params": { "timeout": 60 }, + "collection_params": { + "quantization_config": { "binary": { "always_ram": true } }, + "optimizers_config": { + "max_segment_size": 100000000, + "default_segment_number": 2 + }, + "hnsw_config": { "m": 64, "ef_construct": 512 } + }, + "search_params": [ + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 64.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 64, "quantization": { "rescore": true, "oversampling": 128.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 64.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 256, "quantization": { "rescore": true, "oversampling": 128.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 64.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 512, "quantization": { "rescore": true, "oversampling": 128.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 8.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 16.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 32.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 64.0 } } }, + { "parallel": 100, "config": { "hnsw_ef": 768, "quantization": { "rescore": true, "oversampling": 128.0 } } } + ], + "upload_params": { "parallel": 8, "batch_size": 1024 } + }, + { + "name": "latest-qdrant-rps-m-32", + "engine": "qdrant", + "connection_params": { "timeout": 60 }, + "collection_params": { + "optimizers_config": { }, + "hnsw_config": { "m": 64, "ef_construct": 512 } + }, + "search_params": [ + { "parallel": 1, "config": { "hnsw_ef": 16 } }, + { "parallel": 1, "config": { "hnsw_ef": 32 } }, + { "parallel": 1, "config": { "hnsw_ef": 64 } }, + { "parallel": 1, "config": { "hnsw_ef": 128 } }, + { "parallel": 1, "config": { "hnsw_ef": 256 } }, + { "parallel": 1, "config": { "hnsw_ef": 512 } }, + { "parallel": 1, "config": { "hnsw_ef": 768 } } + ], + "upload_params": { "parallel": 8, "batch_size": 1024 } + }, + { + "name": "latest-qdrant-rps-m32", + "engine": "qdrant", + "connection_params": { "timeout": 60 }, + "collection_params": { + "optimizers_config": { + "max_segment_size": 100000000, + "default_segment_number":2 + }, + "hnsw_config": { "m": 64, "ef_construct": 512 } + }, + "search_params": [ + { "parallel": 100, "config": { "hnsw_ef": 16 } }, + { "parallel": 100, "config": { "hnsw_ef": 32 } }, + { "parallel": 100, "config": { "hnsw_ef": 64 } }, + { "parallel": 100, "config": { "hnsw_ef": 128 } }, + { "parallel": 100, "config": { "hnsw_ef": 256 } }, + { "parallel": 100, "config": { "hnsw_ef": 512 } }, + { "parallel": 100, "config": { "hnsw_ef": 768 } } + ], + "upload_params": { "parallel": 8, "batch_size": 1024 } + }, + { + "name": "latest-weaviate-m32", + "engine": "weaviate", + "connection_params": { + "timeout_config": 60 + }, + "collection_params": { + "vectorIndexConfig": { + "efConstruction": 512, + "maxConnections": 64 + } + }, + "search_params": [ + + { "parallel": 100, "config": { "ef": 16} }, + { "parallel": 100, "config": { "ef": 32} }, + { "parallel": 100, "config": { "ef": 64} }, + { "parallel": 100, "config": { "ef": 128} }, + { "parallel": 100, "config": { "ef": 256} }, + { "parallel": 100, "config": { "ef": 512} }, + { "parallel": 100, "config": { "ef": 768} }, + { "parallel": 1, "config": { "ef": 16} }, + { "parallel": 1, "config": { "ef": 32} }, + { "parallel": 1, "config": { "ef": 64} }, + { "parallel": 1, "config": { "ef": 128} }, + { "parallel": 1, "config": { "ef": 256} }, + { "parallel": 1, "config": { "ef": 512} }, + { "parallel": 1, "config": { "ef": 768} } + ], + "upload_params": { "parallel": 8, "batch_size": 1024 } + } +] \ No newline at end of file diff --git a/experiments/configurations/qdrant-vs-weaviate.json b/experiments/configurations/qdrant-vs-weaviate-m64.json similarity index 96% rename from experiments/configurations/qdrant-vs-weaviate.json rename to experiments/configurations/qdrant-vs-weaviate-m64.json index 12e46258..c4be46aa 100644 --- a/experiments/configurations/qdrant-vs-weaviate.json +++ b/experiments/configurations/qdrant-vs-weaviate-m64.json @@ -1,6 +1,6 @@ [ { - "name": "proposed-config-qdrant-bq-latency", + "name": "latest-qdrant-bq-latency-m-32", "engine": "qdrant", "connection_params": { "timeout": 60 }, "collection_params": { @@ -22,14 +22,14 @@ "upload_params": { "parallel": 8, "batch_size": 1024 } }, { - "name": "proposed-config-qdrant-bq-rps", + "name": "latest-qdrant-bq-rps-m-32", "engine": "qdrant", "connection_params": { "timeout": 60 }, "collection_params": { "quantization_config": { "binary": { "always_ram": true } }, "optimizers_config": { "max_segment_size": 100000000, - "default_segment_number":2 + "default_segment_number": 2 }, "hnsw_config": { "m": 32, "ef_construct": 256 } }, @@ -58,7 +58,7 @@ "upload_params": { "parallel": 8, "batch_size": 1024 } }, { - "name": "proposed-config-qdrant-latency", + "name": "latest-qdrant-rps-m-32", "engine": "qdrant", "connection_params": { "timeout": 60 }, "collection_params": { @@ -77,7 +77,7 @@ "upload_params": { "parallel": 8, "batch_size": 1024 } }, { - "name": "proposed-config-qdrant-rps", + "name": "latest-qdrant-rps-m32", "engine": "qdrant", "connection_params": { "timeout": 60 }, "collection_params": { @@ -99,7 +99,7 @@ "upload_params": { "parallel": 8, "batch_size": 1024 } }, { - "name": "proposed-config-weaviate", + "name": "latest-weaviate-m32", "engine": "weaviate", "connection_params": { "timeout_config": 60 From bdedf0c69cae4c361c15d6a551f2efb1b5c6c042 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Mon, 17 Jun 2024 16:03:15 +0530 Subject: [PATCH 025/101] fix: Typo in func name (#164) --- tools/run_ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/run_ci.sh b/tools/run_ci.sh index cc054041..f470da0c 100644 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -2,7 +2,7 @@ set -e -function handle_error() { +function handle_err() { echo "Error occured ${QDRANT_VERSION@A} ${ENGINE_NAME@A} ${DATASETS@A}" echo "{failed}={error}" >> $GITHUB_OUTPUT } From 2f4a1436c0b6aaaa2c6d91f2abee0d4fbcfba51a Mon Sep 17 00:00:00 2001 From: generall Date: Fri, 21 Jun 2024 23:02:11 +0200 Subject: [PATCH 026/101] add convertor --- benchmark/convert.py | 91 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 benchmark/convert.py diff --git a/benchmark/convert.py b/benchmark/convert.py new file mode 100644 index 00000000..815d01c2 --- /dev/null +++ b/benchmark/convert.py @@ -0,0 +1,91 @@ +import argparse +import glob +import json +import os + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("--input-dir", type=str, required=True) + parser.add_argument("--output-file", type=str, required=True) + args = parser.parse_args() + + input_dir = args.input_dir + output_file = args.output_file + + searches = glob.glob(os.path.join(input_dir, "*-search-*.json")) + uploads = glob.glob(os.path.join(input_dir, "*-upload-*.json")) + + """ + Target data structure: + + { + "engine_name": "qdrant", + "setup_name": "qdrant-bq-rps-m-64-ef-256", + "dataset_name": "dbpedia-openai-1M-1536-angular", + "upload_time": 222.45490989403334, + "total_upload_time": 593.0384756129934, + "p95_time": 0.0025094749056734146, + "rps": 1230.5984500596446, + "parallel": 100.0, + "p99_time": 0.014029250466264838, + "mean_time": 0.00227582405093126, + "mean_precisions": 0.95258, + "engine_params": { + "hnsw_ef": 64, + "quantization": { + "rescore": true, + "oversampling": 4.0 + } + } + } + """ + + print(f"input_dir: {input_dir}") + print(f"output_file: {output_file}") + + print(f"searches: {len(searches)}") + print(f"uploads: {len(uploads)}") + + upload_data = {} + + for upload_file in uploads: + data = json.load(open(upload_file)) + experiment_name = data["params"]["experiment"] + upload_data[experiment_name] = data + + result_data = [] + + for search_file in searches: + data = json.load(open(search_file)) + experiment_name = data["params"]["experiment"] + dataset_name = data["params"]["dataset"] + engine_params = data["params"]["config"] + parallel = data["params"]["parallel"] + engine_name = data["params"]["engine"] + + upload_time = upload_data[experiment_name]["results"]["upload_time"] + total_upload_time = upload_data[experiment_name]["results"]["total_time"] + + search_results = data["results"] + search_results.pop("total_time") + + result_data.append( + { + "engine_name": engine_name, + "setup_name": experiment_name, + "dataset_name": dataset_name, + "upload_time": upload_time, + "total_upload_time": total_upload_time, + "parallel": parallel, + "engine_params": engine_params, + **search_results, + } + ) + + with open(output_file, "w") as f: + json.dump(result_data, f, indent=2) + + +if __name__ == "__main__": + main() From 2a8a8ed29ad7671f17f5177f038b652651160cf2 Mon Sep 17 00:00:00 2001 From: generall Date: Fri, 21 Jun 2024 23:29:13 +0200 Subject: [PATCH 027/101] timeout at 30 mins --- .github/workflows/continuous-benchmark.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index a559d378..21b06f89 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -37,11 +37,11 @@ jobs: # Benchmark the dev branch: export QDRANT_VERSION=ghcr/dev - timeout 15m bash -x tools/run_ci.sh + timeout 30m bash -x tools/run_ci.sh # Benchmark the master branch: export QDRANT_VERSION=docker/master - timeout 15m bash -x tools/run_ci.sh + timeout 30m bash -x tools/run_ci.sh done set -e From fd6bea474a679252c42cdfded6478259ea69a04d Mon Sep 17 00:00:00 2001 From: "Eric O. Korman" Date: Mon, 8 Jul 2024 07:56:25 -0500 Subject: [PATCH 028/101] set ports instead of network_mode (#145) * set ports instead of network_mode * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * set ports for weaviate --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Kumar Shivendu --- engine/servers/qdrant-billion-scale/docker-compose.yaml | 4 +++- .../servers/qdrant-continuous-benchmarks/docker-compose.yaml | 4 +++- engine/servers/qdrant-limit-ram/docker-compose.yaml | 4 +++- engine/servers/qdrant-single-node/docker-compose.yaml | 4 +++- engine/servers/weaviate-single-node/docker-compose.yaml | 4 +++- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/engine/servers/qdrant-billion-scale/docker-compose.yaml b/engine/servers/qdrant-billion-scale/docker-compose.yaml index 36330f63..765d36da 100644 --- a/engine/servers/qdrant-billion-scale/docker-compose.yaml +++ b/engine/servers/qdrant-billion-scale/docker-compose.yaml @@ -3,7 +3,9 @@ version: '3.7' services: qdrant_bench: image: qdrant/qdrant:v1.7.3 - network_mode: host + ports: + - "6333:6333" + - "6334:6334" volumes: - ./storage:/qdrant/storage environment: diff --git a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml index a73071a8..ada808d6 100644 --- a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml @@ -4,7 +4,9 @@ services: qdrant_bench: image: ${CONTAINER_REGISTRY:-docker.io}/qdrant/qdrant:${QDRANT_VERSION} container_name: qdrant-continuous - network_mode: host + ports: + - "6333:6333" + - "6334:6334" logging: driver: "json-file" options: diff --git a/engine/servers/qdrant-limit-ram/docker-compose.yaml b/engine/servers/qdrant-limit-ram/docker-compose.yaml index 69236a8f..733f3ace 100644 --- a/engine/servers/qdrant-limit-ram/docker-compose.yaml +++ b/engine/servers/qdrant-limit-ram/docker-compose.yaml @@ -3,7 +3,9 @@ version: '3.7' services: qdrant_bench: image: qdrant/qdrant:v1.7.3 - network_mode: host + ports: + - "6333:6333" + - "6334:6334" logging: driver: "json-file" options: diff --git a/engine/servers/qdrant-single-node/docker-compose.yaml b/engine/servers/qdrant-single-node/docker-compose.yaml index 897a9a36..bcea21de 100644 --- a/engine/servers/qdrant-single-node/docker-compose.yaml +++ b/engine/servers/qdrant-single-node/docker-compose.yaml @@ -3,7 +3,9 @@ version: '3.7' services: qdrant_bench: image: ${CONTAINER_REGISTRY:-docker.io}/qdrant/qdrant:v1.9.5 - network_mode: host + ports: + - "6333:6333" + - "6334:6334" logging: driver: "json-file" options: diff --git a/engine/servers/weaviate-single-node/docker-compose.yaml b/engine/servers/weaviate-single-node/docker-compose.yaml index 9d6c941d..adb9c54e 100644 --- a/engine/servers/weaviate-single-node/docker-compose.yaml +++ b/engine/servers/weaviate-single-node/docker-compose.yaml @@ -9,7 +9,9 @@ services: - --scheme - http image: cr.weaviate.io/semitechnologies/weaviate:1.25.1 - network_mode: host + ports: + - "8090:8090" + - "50051:50051" logging: driver: "json-file" options: From dd9a4c07573efb36a06d30eda837109c1890adcd Mon Sep 17 00:00:00 2001 From: Anshu Avinash Date: Mon, 29 Jul 2024 16:42:33 +0530 Subject: [PATCH 029/101] Use efficient filtering for opensearch (#167) Current filtering query does post-filtering which is not ideal and resulted in low precision. Results with post filtering: ``` { "params": { "dataset": "arxiv-titles-384-angular-filters", "experiment": "opensearch-default", "engine": "opensearch", "parallel": 1, "config": { "knn.algo_param.ef_search": 128 } }, "results": { "total_time": 708.6168032020068, "mean_time": 0.07045893384491791, "mean_precisions": 0.11399200000000001, "std_time": 0.06840096039381999, "min_time": 0.008397486002650112, "max_time": 3.3753458530118223, "rps": 14.111999538838594, "p95_time": 0.18164870390755816, "p99_time": 0.20864198897208555 } } ``` Results with new efficient filtering: ``` { "params": { "dataset": "arxiv-titles-384-angular-filters", "experiment": "opensearch-default", "engine": "opensearch", "parallel": 1, "config": { "knn.algo_param.ef_search": 128 } }, "results": { "total_time": 394.4290532110026, "mean_time": 0.03913764159695711, "mean_precisions": 0.610144, "std_time": 0.05352479065894972, "min_time": 0.0009066620114026591, "max_time": 2.1307434440095676, "rps": 25.35310195481576, "p95_time": 0.1274049270534305, "p99_time": 0.2078282342318563 } } ``` --- engine/clients/opensearch/search.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/engine/clients/opensearch/search.py b/engine/clients/opensearch/search.py index a3e36058..fc7b5cbf 100644 --- a/engine/clients/opensearch/search.py +++ b/engine/clients/opensearch/search.py @@ -59,12 +59,7 @@ def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: meta_conditions = cls.parser.parse(query.meta_conditions) if meta_conditions: - opensearch_query = { - "bool": { - "must": [opensearch_query], - "filter": meta_conditions, - } - } + opensearch_query["knn"]["vector"]["filter"] = meta_conditions res = cls.client.search( index=OPENSEARCH_INDEX, From 9db1d83b747bd4563ff75aec63abe1c58f819df0 Mon Sep 17 00:00:00 2001 From: Anshu Avinash Date: Mon, 5 Aug 2024 13:54:51 +0530 Subject: [PATCH 030/101] Fix opensearch query parser (#172) * Fix opensearch query parser Also specify schema for id in arxiv-titles-384-angular filters dataset. This is needed as default mapping created by opensearch takes the type as float, but in the dataset we also have string. This leads to 99% precision on the test dataset with opensearch. ``` { "params": { "dataset": "arxiv-titles-384-angular-filters", "experiment": "opensearch-default", "engine": "opensearch", "parallel": 10, "config": { "knn.algo_param.ef_search": 128 } }, "results": { "total_time": 391.3466711850051, "mean_time": 0.37053632343088827, "mean_precisions": 0.98962, "std_time": 0.3485163122349799, "min_time": 0.04950378900684882, "max_time": 3.548553360000369, "rps": 25.552791773390613, "p95_time": 1.0473700279486362, "p99_time": 1.4396829416653787 } } ``` Fixes #171 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- datasets/datasets.json | 3 ++- engine/clients/opensearch/parser.py | 7 ++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/datasets/datasets.json b/datasets/datasets.json index c9111a04..b3622777 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -138,7 +138,8 @@ "schema": { "update_date_ts": "int", "labels": "keyword", - "submitter": "keyword" + "submitter": "keyword", + "id": "keyword" } }, { diff --git a/engine/clients/opensearch/parser.py b/engine/clients/opensearch/parser.py index 31eccd8f..527dc5ab 100644 --- a/engine/clients/opensearch/parser.py +++ b/engine/clients/opensearch/parser.py @@ -25,7 +25,12 @@ def build_range_filter( lte: Optional[FieldValue], gte: Optional[FieldValue], ) -> Any: - return {"range": {field_name: {"lt": lt, "gt": gt, "lte": lte, "gte": gte}}} + field_filters = { + k: v + for k, v in {"lt": lt, "gt": gt, "lte": lte, "gte": gte}.items() + if v is not None + } + return {"range": {field_name: field_filters}} def build_geo_filter( self, field_name: str, lat: float, lon: float, radius: float From 7140d3ca1c5e359b0c2d2674b848b94c58e1a737 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 13:56:23 +0530 Subject: [PATCH 031/101] [pre-commit.ci] pre-commit suggestions (#169) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit updates: - [github.com/pre-commit/pre-commit-hooks: v4.5.0 → v4.6.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.5.0...v4.6.0) - [github.com/psf/black: 24.3.0 → 24.4.2](https://github.com/psf/black/compare/24.3.0...24.4.2) - [github.com/astral-sh/ruff-pre-commit: v0.3.5 → v0.5.0](https://github.com/astral-sh/ruff-pre-commit/compare/v0.3.5...v0.5.0) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 690bcada..f443a9fd 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,13 +11,13 @@ ci: repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.5.0 + rev: v4.6.0 hooks: - id: trailing-whitespace - id: check-added-large-files - repo: https://github.com/psf/black - rev: 24.3.0 + rev: 24.4.2 hooks: - id: black name: "Black: The uncompromising Python code formatter" @@ -30,7 +30,7 @@ repos: args: ["--profile", "black"] - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.3.5 + rev: v0.5.0 hooks: # Run the linter. - id: ruff From d82c2dc2ebca1b85618585c6dc83f1062faa0116 Mon Sep 17 00:00:00 2001 From: "Filipe Oliveira (Personal)" Date: Mon, 5 Aug 2024 11:28:26 +0300 Subject: [PATCH 032/101] Updated milvus from 2.3.1 to 2.4.1 (#144) * updated milvus from 2.3.1 to 2.4.1 * Fixed json logging numeric/text issue on docker composes of milvus --- .../servers/milvus-limit-ram/docker-compose.yaml | 2 +- .../servers/milvus-single-node/docker-compose.yaml | 14 +++++++------- pyproject.toml | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/engine/servers/milvus-limit-ram/docker-compose.yaml b/engine/servers/milvus-limit-ram/docker-compose.yaml index 888b9b9c..948b868b 100644 --- a/engine/servers/milvus-limit-ram/docker-compose.yaml +++ b/engine/servers/milvus-limit-ram/docker-compose.yaml @@ -39,7 +39,7 @@ services: standalone: container_name: milvus-standalone - image: milvusdb/milvus:v2.3.1 + image: milvusdb/milvus:v2.4.1 command: ["milvus", "run", "standalone"] environment: ETCD_ENDPOINTS: etcd:2379 diff --git a/engine/servers/milvus-single-node/docker-compose.yaml b/engine/servers/milvus-single-node/docker-compose.yaml index 7fe7a56d..02fe4d0b 100644 --- a/engine/servers/milvus-single-node/docker-compose.yaml +++ b/engine/servers/milvus-single-node/docker-compose.yaml @@ -14,8 +14,8 @@ services: logging: driver: "json-file" options: - max-file: 1 - max-size: 10m + max-file: "1" + max-size: "10m" command: etcd -advertise-client-urls=http://127.0.0.1:2379 -listen-client-urls http://0.0.0.0:2379 --data-dir /etcd minio: @@ -29,8 +29,8 @@ services: logging: driver: "json-file" options: - max-file: 1 - max-size: 10m + max-file: "1" + max-size: "10m" command: minio server /minio_data healthcheck: test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"] @@ -40,7 +40,7 @@ services: standalone: container_name: milvus-standalone - image: milvusdb/milvus:v2.3.1 + image: milvusdb/milvus:v2.4.1 command: ["milvus", "run", "standalone"] environment: ETCD_ENDPOINTS: etcd:2379 @@ -48,8 +48,8 @@ services: logging: driver: "json-file" options: - max-file: 1 - max-size: 10m + max-file: "1" + max-size: "10m" ports: - "19530:19530" depends_on: diff --git a/pyproject.toml b/pyproject.toml index bc8b5c82..5bc02a5f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,7 +12,7 @@ jsons = "^1.6.3" h5py = "^3.7.0" weaviate-client = "^4.5.0" elasticsearch = "^8.10.0" -pymilvus = "^2.3.1" +pymilvus = "^2.4.1" redis = "^5.0.1" ipdb = "^0.13.9" stopit = "^1.1.2" From 239744472a935d5a4df726f3175db6585a1dfe3c Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Mon, 5 Aug 2024 14:20:51 +0530 Subject: [PATCH 033/101] feat: Add debug logs (#166) * feat: Add debug logs * feat: Add file and func name in logs * fix: Remove funcname --- tools/qdrant_collect_stats.sh | 3 ++- tools/run_ci.sh | 7 ++++--- tools/run_client_script.sh | 3 ++- tools/run_experiment.sh | 3 ++- tools/run_remote_benchmark.sh | 5 +++-- tools/run_server_container.sh | 3 ++- 6 files changed, 15 insertions(+), 9 deletions(-) diff --git a/tools/qdrant_collect_stats.sh b/tools/qdrant_collect_stats.sh index 7ccf9c29..8b81c9ad 100644 --- a/tools/qdrant_collect_stats.sh +++ b/tools/qdrant_collect_stats.sh @@ -1,6 +1,7 @@ #!/bin/bash -set -e +PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' +set -euo pipefail # Examples: qdrant-single-node, qdrant-single-node-rps CONTAINER_NAME=$1 diff --git a/tools/run_ci.sh b/tools/run_ci.sh index f470da0c..b9b1113a 100644 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -1,14 +1,15 @@ #!/bin/bash -set -e +PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' +set -euo pipefail function handle_err() { - echo "Error occured ${QDRANT_VERSION@A} ${ENGINE_NAME@A} ${DATASETS@A}" + echo "Error occured qdrant_version=${QDRANT_VERSION} engine_name=${ENGINE_NAME} dataset=${DATASETS}" echo "{failed}={error}" >> $GITHUB_OUTPUT } function handle_term() { - echo "Timeout occured ${QDRANT_VERSION@A} ${ENGINE_NAME@A} ${DATASETS@A}" + echo "Timeout occured qdrant_version=${QDRANT_VERSION} engine_name=${ENGINE_NAME} dataset=${DATASETS}" echo "{failed}={timeout}" >> $GITHUB_OUTPUT } diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index 783ae793..da95da32 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -1,6 +1,7 @@ #!/bin/bash -set -e +PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' +set -euo pipefail CLOUD_NAME=${CLOUD_NAME:-"hetzner"} SERVER_USERNAME=${SERVER_USERNAME:-"root"} diff --git a/tools/run_experiment.sh b/tools/run_experiment.sh index 6179b88b..0ee29375 100644 --- a/tools/run_experiment.sh +++ b/tools/run_experiment.sh @@ -1,6 +1,7 @@ #!/bin/bash -set -e +PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' +set -euo pipefail ENGINE_NAME=${ENGINE_NAME:-"qdrant-continuous-benchmark"} diff --git a/tools/run_remote_benchmark.sh b/tools/run_remote_benchmark.sh index bcba6a23..26ae75da 100644 --- a/tools/run_remote_benchmark.sh +++ b/tools/run_remote_benchmark.sh @@ -1,12 +1,13 @@ #!/bin/bash -set -e +PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' +set -euo pipefail # Setup 2 machines in Hetzner Cloud # One machine will be used as a server, another one as a client cleanup() { - echo "cleaning up..." + echo "cleaning up file=$BASH_SOURCE" # bash -x "${SCRIPT_PATH}/tear_down.sh" } diff --git a/tools/run_server_container.sh b/tools/run_server_container.sh index d04f1199..c28e145c 100644 --- a/tools/run_server_container.sh +++ b/tools/run_server_container.sh @@ -1,6 +1,7 @@ #!/bin/bash -set -e +PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' +set -euo pipefail # Examples: qdrant-continuous-benchmarks CONTAINER_NAME=$1 From 9ed570c511e66bef976be1bc14d2a1d49e884fa5 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Mon, 5 Aug 2024 14:30:49 +0530 Subject: [PATCH 034/101] fix after upgrading milvus (#175) --- poetry.lock | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index e022d87c..3513ab95 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "annotated-types" @@ -957,6 +957,7 @@ python-versions = ">=3.7" files = [ {file = "milvus_lite-2.4.7-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:c828190118b104b05b8c8e0b5a4147811c86b54b8fb67bc2e726ad10fc0b544e"}, {file = "milvus_lite-2.4.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e1537633c39879714fb15082be56a4b97f74c905a6e98e302ec01320561081af"}, + {file = "milvus_lite-2.4.7-py3-none-manylinux2014_aarch64.whl", hash = "sha256:fcb909d38c83f21478ca9cb500c84264f988c69f62715ae9462e966767fb76dd"}, {file = "milvus_lite-2.4.7-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f016474d663045787dddf1c3aad13b7d8b61fd329220318f858184918143dcbf"}, ] @@ -1084,8 +1085,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\""}, {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -1648,6 +1649,7 @@ files = [ {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, + {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, @@ -1655,8 +1657,16 @@ files = [ {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, + {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, {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"}, + {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, @@ -1673,6 +1683,7 @@ files = [ {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, + {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, @@ -1680,6 +1691,7 @@ files = [ {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, + {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, @@ -2100,4 +2112,4 @@ validators = "0.28.3" [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "ffc0bfbf695bbc2771fd29828e8a76270b5eb01501be717f2464aa573f4a2d5e" +content-hash = "b354f2ab7b16d4de0d6fb4a80bcc24392ea5fa15a4a1f58bbdaeb8c7f0c0b5c5" From d0f2b1866e70024a121230f7c05722ee16f962a3 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Tue, 6 Aug 2024 15:36:20 +0530 Subject: [PATCH 035/101] fix: Unbound variable error (#178) --- tools/run_client_script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index da95da32..dc81cc9c 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -33,7 +33,7 @@ RSS_ANON_MEMORY_USAGE_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t mkdir -p results -for RESULT_FILE in $SEARCH_RESULT_FILE $UPLOAD_RESULT_FILE $MEMORY_USAGE_FILE; do +for RESULT_FILE in $SEARCH_RESULT_FILE $UPLOAD_RESULT_FILE $VM_RSS_MEMORY_USAGE_FILE $RSS_ANON_MEMORY_USAGE_FILE; do # -p preseves modification time, access time, and modes (but not change time) scp -p "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/${RESULT_FILE}" "./results" done From 940c206ba7f136a3b92c8788471b6606724be029 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Tue, 6 Aug 2024 16:04:39 +0530 Subject: [PATCH 036/101] Only copy search and upload in first step (#179) Memory will be collected by qdrant_collect_stats.sh --- tools/run_client_script.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index dc81cc9c..c20270b9 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -28,12 +28,10 @@ ssh -tt -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@$ SEARCH_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-search-*.json | head -n 1") UPLOAD_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-upload-*.json | head -n 1") -VM_RSS_MEMORY_USAGE_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/vm-rss-memory-usage-*.txt | head -n 1") -RSS_ANON_MEMORY_USAGE_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/rss-anon-memory-usage-*.txt | head -n 1") mkdir -p results -for RESULT_FILE in $SEARCH_RESULT_FILE $UPLOAD_RESULT_FILE $VM_RSS_MEMORY_USAGE_FILE $RSS_ANON_MEMORY_USAGE_FILE; do +for RESULT_FILE in $SEARCH_RESULT_FILE $UPLOAD_RESULT_FILE; do # -p preseves modification time, access time, and modes (but not change time) scp -p "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/${RESULT_FILE}" "./results" done From 5cfdb0b9a307837ba08921397a6db2a281691f15 Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 7 Aug 2024 14:34:29 +0530 Subject: [PATCH 037/101] Fail CI if any benches fail (#180) * Fail CI if any benches fail * More types of traps * remove intentional exit --- tools/run_ci.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) mode change 100644 => 100755 tools/run_ci.sh diff --git a/tools/run_ci.sh b/tools/run_ci.sh old mode 100644 new mode 100755 index b9b1113a..35cde4dc --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -5,15 +5,15 @@ set -euo pipefail function handle_err() { echo "Error occured qdrant_version=${QDRANT_VERSION} engine_name=${ENGINE_NAME} dataset=${DATASETS}" - echo "{failed}={error}" >> $GITHUB_OUTPUT + echo "failed=error" >> $GITHUB_OUTPUT } function handle_term() { echo "Timeout occured qdrant_version=${QDRANT_VERSION} engine_name=${ENGINE_NAME} dataset=${DATASETS}" - echo "{failed}={timeout}" >> $GITHUB_OUTPUT + echo "failed=timeout" >> $GITHUB_OUTPUT } -trap 'handle_err' ERR +trap 'handle_err' ERR INT EXIT trap 'handle_term' TERM # Script, that runs benchmark within the GitHub Actions CI environment From d14e6e819c0f160bd14eac13c1827fadba352dcd Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 7 Aug 2024 21:21:01 +0530 Subject: [PATCH 038/101] fix CI (#181) --- tools/run_ci.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 35cde4dc..717ef5e0 100755 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -13,7 +13,7 @@ function handle_term() { echo "failed=timeout" >> $GITHUB_OUTPUT } -trap 'handle_err' ERR INT EXIT +trap 'handle_err' ERR trap 'handle_term' TERM # Script, that runs benchmark within the GitHub Actions CI environment From a4ffca48d37ff19364b695d4850fb1c0777bc68a Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 7 Aug 2024 22:58:32 +0530 Subject: [PATCH 039/101] Allow CI to force clear previously running resources if required (#182) * Allow CI to force clear previously running resources if required * Remove running vector-db-benchmark instances --- tools/run_experiment.sh | 5 +++++ tools/run_server_container.sh | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/run_experiment.sh b/tools/run_experiment.sh index 0ee29375..50d92262 100644 --- a/tools/run_experiment.sh +++ b/tools/run_experiment.sh @@ -24,11 +24,15 @@ if [[ -z "$PRIVATE_IP_OF_THE_SERVER" ]]; then exit 1 fi +docker container rm -f ci-benchmark-upload || true +docker container rm -f ci-benchmark-search || true + docker rmi --force qdrant/vector-db-benchmark:latest || true docker run \ --rm \ -it \ + --name ci-benchmark-upload \ -v "$HOME/results:/code/results" \ qdrant/vector-db-benchmark:latest \ python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-search @@ -36,6 +40,7 @@ docker run \ docker run \ --rm \ -it \ + --name ci-benchmark-search \ -v "$HOME/results:/code/results" \ qdrant/vector-db-benchmark:latest \ python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-upload diff --git a/tools/run_server_container.sh b/tools/run_server_container.sh index c28e145c..79648605 100644 --- a/tools/run_server_container.sh +++ b/tools/run_server_container.sh @@ -34,7 +34,7 @@ if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; the CONTAINER_REGISTRY='ghcr.io' fi - DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; docker compose down; pkill qdrant ; docker rmi ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; docker compose up -d; docker container ls" + DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; docker compose up -d; docker container ls -a" ssh -t -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "cd ./projects/vector-db-benchmark/engine/servers/${CONTAINER_NAME} ; $DOCKER_COMPOSE" else echo "Error: unknown version ${QDRANT_VERSION}. Version name should start with 'docker/' or 'ghcr/'" From 4ffc3ce0a2a4204470a887b42c8436b5eb7b4f8d Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:36:00 +0200 Subject: [PATCH 040/101] Bump qdrant versions to 1.11.0 (#184) * Update qdrant-client version to 1.11 * Run all engines if poetry changed * Bump qdrant docker image version --- .../manual-all-engines-benchmark.yaml | 21 +++++++++++++++++++ .../qdrant-billion-scale/docker-compose.yaml | 2 +- .../qdrant-cluster-mode/docker-compose.yaml | 6 +++--- .../qdrant-limit-ram/docker-compose.yaml | 2 +- .../docker-compose-limit-cpu.yaml.yml | 2 +- .../qdrant-single-node/docker-compose.yaml | 2 +- poetry.lock | 13 ++++++------ pyproject.toml | 2 +- 8 files changed, 36 insertions(+), 14 deletions(-) diff --git a/.github/workflows/manual-all-engines-benchmark.yaml b/.github/workflows/manual-all-engines-benchmark.yaml index ccb2a487..d1a7ab43 100644 --- a/.github/workflows/manual-all-engines-benchmark.yaml +++ b/.github/workflows/manual-all-engines-benchmark.yaml @@ -26,6 +26,9 @@ jobs: - 'engine/servers/elasticsearch-single-node/**' - 'engine/servers/elasticsearch-single-node-ci/**' - 'engine/base_client/**' + poetry: + - 'poetry.lock' + - 'pyproject.toml' - uses: ./.github/workflows/actions/run-engine-benchmark if: ${{ steps.changes.outputs.elasticsearch == 'true' || github.event_name == 'workflow_dispatch' }} with: @@ -48,6 +51,9 @@ jobs: - 'engine/servers/milvus-single-node/**' - 'engine/servers/milvus-limit-ram/**' - 'engine/base_client/**' + poetry: + - 'poetry.lock' + - 'pyproject.toml' - uses: ./.github/workflows/actions/run-engine-benchmark if: ${{ steps.changes.outputs.milvus == 'true' || github.event_name == 'workflow_dispatch' }} with: @@ -70,6 +76,9 @@ jobs: - 'engine/servers/opensearch-single-node/**' - 'engine/servers/opensearch-single-node-ci/**' - 'engine/base_client/**' + poetry: + - 'poetry.lock' + - 'pyproject.toml' - uses: ./.github/workflows/actions/run-engine-benchmark if: ${{ steps.changes.outputs.opensearch == 'true' || github.event_name == 'workflow_dispatch' }} with: @@ -91,6 +100,9 @@ jobs: - 'engine/clients/pgvector/**' - 'engine/servers/pgvector-single-node/**' - 'engine/base_client/**' + poetry: + - 'poetry.lock' + - 'pyproject.toml' - uses: ./.github/workflows/actions/run-engine-benchmark if: ${{ steps.changes.outputs.pgvector == 'true' || github.event_name == 'workflow_dispatch' }} with: @@ -116,6 +128,9 @@ jobs: - 'engine/servers/qdrant-cluster-mode/**' - 'engine/servers/qdrant-continuous-benchmarks/**' - 'engine/base_client/**' + poetry: + - 'poetry.lock' + - 'pyproject.toml' - uses: ./.github/workflows/actions/run-engine-benchmark if: ${{ steps.changes.outputs.qdrant == 'true' || github.event_name == 'workflow_dispatch' }} with: @@ -137,6 +152,9 @@ jobs: - 'engine/clients/redis/**' - 'engine/servers/redis-single-node/**' - 'engine/base_client/**' + poetry: + - 'poetry.lock' + - 'pyproject.toml' - uses: ./.github/workflows/actions/run-engine-benchmark if: ${{ steps.changes.outputs.weaviate == 'true' || github.event_name == 'workflow_dispatch' }} with: @@ -158,6 +176,9 @@ jobs: - 'engine/clients/weaviate/**' - 'engine/servers/weaviate-single-node/**' - 'engine/base_client/**' + poetry: + - 'poetry.lock' + - 'pyproject.toml' - uses: ./.github/workflows/actions/run-engine-benchmark if: ${{ steps.changes.outputs.weaviate == 'true' || github.event_name == 'workflow_dispatch' }} with: diff --git a/engine/servers/qdrant-billion-scale/docker-compose.yaml b/engine/servers/qdrant-billion-scale/docker-compose.yaml index 765d36da..723a76b6 100644 --- a/engine/servers/qdrant-billion-scale/docker-compose.yaml +++ b/engine/servers/qdrant-billion-scale/docker-compose.yaml @@ -2,7 +2,7 @@ version: '3.7' services: qdrant_bench: - image: qdrant/qdrant:v1.7.3 + image: qdrant/qdrant:${QDRANT_VERSION:-v1.11.0} ports: - "6333:6333" - "6334:6334" diff --git a/engine/servers/qdrant-cluster-mode/docker-compose.yaml b/engine/servers/qdrant-cluster-mode/docker-compose.yaml index 4c5288ef..cd3adf26 100644 --- a/engine/servers/qdrant-cluster-mode/docker-compose.yaml +++ b/engine/servers/qdrant-cluster-mode/docker-compose.yaml @@ -2,7 +2,7 @@ version: "3.7" services: qdrant-node-0: - image: qdrant/qdrant:v1.7.3 + image: qdrant/qdrant:${QDRANT_VERSION:-v1.11.0} environment: - QDRANT__SERVICE__GRPC_PORT=6334 - QDRANT__CLUSTER__ENABLED=true @@ -18,7 +18,7 @@ services: qdrant-node-1: - image: qdrant/qdrant:v1.7.3 + image: qdrant/qdrant:${QDRANT_VERSION:-v1.11.0} environment: - QDRANT__SERVICE__GRPC_PORT=6334 - QDRANT__CLUSTER__ENABLED=true @@ -36,7 +36,7 @@ services: qdrant-node-2: - image: qdrant/qdrant:v1.7.3 + image: qdrant/qdrant:${QDRANT_VERSION:-v1.11.0} environment: - QDRANT__SERVICE__GRPC_PORT=6334 - QDRANT__CLUSTER__ENABLED=true diff --git a/engine/servers/qdrant-limit-ram/docker-compose.yaml b/engine/servers/qdrant-limit-ram/docker-compose.yaml index 733f3ace..c839d59c 100644 --- a/engine/servers/qdrant-limit-ram/docker-compose.yaml +++ b/engine/servers/qdrant-limit-ram/docker-compose.yaml @@ -2,7 +2,7 @@ version: '3.7' services: qdrant_bench: - image: qdrant/qdrant:v1.7.3 + image: qdrant/qdrant:${QDRANT_VERSION:-v1.11.0} ports: - "6333:6333" - "6334:6334" diff --git a/engine/servers/qdrant-single-node/docker-compose-limit-cpu.yaml.yml b/engine/servers/qdrant-single-node/docker-compose-limit-cpu.yaml.yml index b957bbe2..9c19bb06 100644 --- a/engine/servers/qdrant-single-node/docker-compose-limit-cpu.yaml.yml +++ b/engine/servers/qdrant-single-node/docker-compose-limit-cpu.yaml.yml @@ -2,7 +2,7 @@ version: '3.7' services: qdrant_bench: - image: qdrant/qdrant:${QDRANT_VERSION:-v1.7.3} + image: qdrant/qdrant:${QDRANT_VERSION:-v1.11.0} network_mode: host logging: driver: "json-file" diff --git a/engine/servers/qdrant-single-node/docker-compose.yaml b/engine/servers/qdrant-single-node/docker-compose.yaml index bcea21de..3264127b 100644 --- a/engine/servers/qdrant-single-node/docker-compose.yaml +++ b/engine/servers/qdrant-single-node/docker-compose.yaml @@ -2,7 +2,7 @@ version: '3.7' services: qdrant_bench: - image: ${CONTAINER_REGISTRY:-docker.io}/qdrant/qdrant:v1.9.5 + image: ${CONTAINER_REGISTRY:-docker.io}/qdrant/qdrant:${QDRANT_VERSION:-v1.11.0} ports: - "6333:6333" - "6334:6334" diff --git a/poetry.lock b/poetry.lock index 3513ab95..ae96c371 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "annotated-types" @@ -1699,13 +1699,13 @@ files = [ [[package]] name = "qdrant-client" -version = "1.9.1" +version = "1.11.0" description = "Client library for the Qdrant vector search engine" optional = false python-versions = ">=3.8" files = [ - {file = "qdrant_client-1.9.1-py3-none-any.whl", hash = "sha256:b9b7e0e5c1a51410d8bb5106a869a51e12f92ab45a99030f27aba790553bd2c8"}, - {file = "qdrant_client-1.9.1.tar.gz", hash = "sha256:186b9c31d95aefe8f2db84b7746402d7365bd63b305550e530e31bde2002ce79"}, + {file = "qdrant_client-1.11.0-py3-none-any.whl", hash = "sha256:1f574ccebb91c0bc8a620c9a41a5a010084fbc4d8c6f1cd0ab7b2eeb97336fc0"}, + {file = "qdrant_client-1.11.0.tar.gz", hash = "sha256:7c1d4d7a96cfd1ee0cde2a21c607e9df86bcca795ad8d1fd274d295ab64b8458"}, ] [package.dependencies] @@ -1718,7 +1718,8 @@ pydantic = ">=1.10.8" urllib3 = ">=1.26.14,<3" [package.extras] -fastembed = ["fastembed (==0.2.6)"] +fastembed = ["fastembed (==0.3.4)"] +fastembed-gpu = ["fastembed-gpu (==0.3.4)"] [[package]] name = "redis" @@ -2112,4 +2113,4 @@ validators = "0.28.3" [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "b354f2ab7b16d4de0d6fb4a80bcc24392ea5fa15a4a1f58bbdaeb8c7f0c0b5c5" +content-hash = "6ee9362c67da4efa3dc4943e8a9e7245ea32a263422bad1ea5cea21d8a19734e" diff --git a/pyproject.toml b/pyproject.toml index 5bc02a5f..fb921b58 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = ["Qdrant Team "] [tool.poetry.dependencies] python = ">=3.8,<3.12" -qdrant-client = "^1.9.0" +qdrant-client = "^1.11.0" typer = "^0.6.1" jsons = "^1.6.3" h5py = "^3.7.0" From a11ebc0c249e0f8fc7aaf9fcecf0725187ea247d Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:10:02 +0200 Subject: [PATCH 041/101] Add continuous benchmark for tenants (#183) --- .github/workflows/continuous-benchmark.yaml | 16 +++++- datasets/datasets.json | 11 ++++ engine/clients/qdrant/configure.py | 43 +++++++++++++-- .../docker-compose.yaml | 29 ++++++++++ .../configurations/qdrant-on-disk.json | 19 +++++++ tools/run_client_script.sh | 21 ++++++-- tools/run_experiment.sh | 49 +++++++++++------ tools/run_remote_benchmark.sh | 28 ++++++++-- tools/run_server_container_with_volume.sh | 53 +++++++++++++++++++ 9 files changed, 240 insertions(+), 29 deletions(-) create mode 100644 engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml mode change 100644 => 100755 tools/run_remote_benchmark.sh create mode 100644 tools/run_server_container_with_volume.sh diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 21b06f89..d9c7d321 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -44,6 +44,20 @@ jobs: timeout 30m bash -x tools/run_ci.sh done + # Benchmark filtered search by tenants with mem limitation + + export ENGINE_NAME="qdrant-all-on-disk-scalar-q" + export DATASETS="random-768-100-tenants" + export CONTAINER_MEM_LIMIT=150mb + + # Benchmark the dev branch: + export QDRANT_VERSION=ghcr/dev + timeout 30m bash -x tools/run_ci.sh + + # Benchmark the master branch: + export QDRANT_VERSION=docker/master + timeout 30m bash -x tools/run_ci.sh + set -e - name: Fail job if any of the benches failed if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' @@ -67,4 +81,4 @@ jobs: } env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} - SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK \ No newline at end of file diff --git a/datasets/datasets.json b/datasets/datasets.json index b3622777..1eafda14 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -336,6 +336,17 @@ "b": "keyword" } }, + { + "name": "random-768-100-tenants", + "vector_size": 768, + "distance": "cosine", + "type": "tar", + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_keywords_1m_768_vocab_100.tgz", + "path": "random-768-100-tenants/random_keywords_1m_768_vocab_100", + "schema": { + "a": "keyword" + } + }, { "name": "random-100-match-kw-small-vocab-no-filters", "vector_size": 256, diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index 668914b8..50afab5a 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -21,6 +21,13 @@ class QdrantConfigurator(BaseConfigurator): "float": rest.PayloadSchemaType.FLOAT, "geo": rest.PayloadSchemaType.GEO, } + INDEX_PARAMS_TYPE_MAPPING = { + "int": rest.IntegerIndexParams, + "keyword": rest.KeywordIndexParams, + "text": rest.TextIndexParams, + "float": rest.FloatIndexParams, + "geo": rest.GeoIndexParams, + } def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) @@ -43,15 +50,25 @@ def recreate(self, dataset: Dataset, collection_params): }, } else: + is_vectors_on_disk = self.collection_params.get("vectors_config", {}).get( + "on_disk", False + ) + self.collection_params.pop("vectors_config", None) + vectors_config = { "vectors_config": ( rest.VectorParams( size=dataset.config.vector_size, distance=self.DISTANCE_MAPPING.get(dataset.config.distance), + on_disk=is_vectors_on_disk, ) ) } + payload_index_params = self.collection_params.pop("payload_index_params", {}) + if not set(payload_index_params.keys()).issubset(dataset.config.schema.keys()): + raise ValueError("payload_index_params are not found in dataset schema") + self.client.recreate_collection( collection_name=QDRANT_COLLECTION_NAME, **vectors_config, @@ -65,8 +82,24 @@ def recreate(self, dataset: Dataset, collection_params): ), ) for field_name, field_type in dataset.config.schema.items(): - self.client.create_payload_index( - collection_name=QDRANT_COLLECTION_NAME, - field_name=field_name, - field_schema=self.INDEX_TYPE_MAPPING.get(field_type), - ) + if field_type in ["keyword", "uuid"]: + is_tenant = payload_index_params.get(field_name, {}).get( + "is_tenant", None + ) + on_disk = payload_index_params.get(field_name, {}).get("on_disk", None) + + self.client.create_payload_index( + collection_name=QDRANT_COLLECTION_NAME, + field_name=field_name, + field_schema=self.INDEX_PARAMS_TYPE_MAPPING.get(field_type)( + type=self.INDEX_TYPE_MAPPING.get(field_type), + is_tenant=is_tenant, + on_disk=on_disk, + ), + ) + else: + self.client.create_payload_index( + collection_name=QDRANT_COLLECTION_NAME, + field_name=field_name, + field_schema=self.INDEX_TYPE_MAPPING.get(field_type), + ) diff --git a/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml new file mode 100644 index 00000000..7dc241b4 --- /dev/null +++ b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml @@ -0,0 +1,29 @@ +version: '3.7' + +services: + qdrant_bench: + image: ${CONTAINER_REGISTRY:-docker.io}/qdrant/qdrant:${QDRANT_VERSION} + container_name: qdrant-continuous + ports: + - "6333:6333" + - "6334:6334" + volumes: + - qdrant_storage:/qdrant/storage + logging: + driver: "json-file" + options: + max-file: 1 + max-size: 10m + deploy: + resources: + limits: + memory: ${CONTAINER_MEM_LIMIT:-25Gb} + +volumes: + qdrant_storage: + name: "qdrant_storage" + driver: local + driver_opts: + type: none + device: ${PWD}/qdrant_storage + o: bind diff --git a/experiments/configurations/qdrant-on-disk.json b/experiments/configurations/qdrant-on-disk.json index 36497eef..e8e188f3 100644 --- a/experiments/configurations/qdrant-on-disk.json +++ b/experiments/configurations/qdrant-on-disk.json @@ -11,5 +11,24 @@ { "parallel": 8, "config": { "hnsw_ef": 128 } } ], "upload_params": { "parallel": 4 } + }, + { + "name": "qdrant-all-on-disk-scalar-q", + "engine": "qdrant", + "connection_params": {}, + "collection_params": { + "optimizers_config": { "default_segment_number": 17 }, + "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": false} }, + "vectors_config": { "on_disk": true }, + "hnsw_config": { "on_disk": true, "m": 0, "payload_m": 16 }, + "on_disk_payload": true, + "payload_index_params": { + "a": { "is_tenant": true, "on_disk": true } + } + }, + "search_params": [ + { "parallel": 8 } + ], + "upload_params": { "parallel": 4 } } ] \ No newline at end of file diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index c20270b9..77ea7470 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -3,6 +3,9 @@ PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' set -euo pipefail +# Possible values are: full|upload|search +EXPERIMENT_MODE=${1:-"full"} + CLOUD_NAME=${CLOUD_NAME:-"hetzner"} SERVER_USERNAME=${SERVER_USERNAME:-"root"} @@ -22,16 +25,26 @@ DATASETS=${DATASETS:-"laion-small-clip"} PRIVATE_IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_private_ip.sh" "$BENCH_SERVER_NAME") -RUN_EXPERIMENT="ENGINE_NAME=${ENGINE_NAME} DATASETS=${DATASETS} PRIVATE_IP_OF_THE_SERVER=${PRIVATE_IP_OF_THE_SERVER} bash ~/run_experiment.sh" +RUN_EXPERIMENT="ENGINE_NAME=${ENGINE_NAME} DATASETS=${DATASETS} PRIVATE_IP_OF_THE_SERVER=${PRIVATE_IP_OF_THE_SERVER} EXPERIMENT_MODE=${EXPERIMENT_MODE} bash ~/run_experiment.sh" ssh -tt -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "${RUN_EXPERIMENT}" -SEARCH_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-search-*.json | head -n 1") -UPLOAD_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-upload-*.json | head -n 1") +echo "Gather experiment results..." +result_files_arr=() + +if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; then + UPLOAD_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-upload-*.json | head -n 1") + result_files_arr+=("$UPLOAD_RESULT_FILE") +fi + +if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "search" ]]; then + SEARCH_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-search-*.json | head -n 1") + result_files_arr+=("$SEARCH_RESULT_FILE") +fi mkdir -p results -for RESULT_FILE in $SEARCH_RESULT_FILE $UPLOAD_RESULT_FILE; do +for RESULT_FILE in "${result_files_arr[@]}"; do # -p preseves modification time, access time, and modes (but not change time) scp -p "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/${RESULT_FILE}" "./results" done diff --git a/tools/run_experiment.sh b/tools/run_experiment.sh index 50d92262..fc72a41d 100644 --- a/tools/run_experiment.sh +++ b/tools/run_experiment.sh @@ -9,6 +9,8 @@ DATASETS=${DATASETS:-""} PRIVATE_IP_OF_THE_SERVER=${PRIVATE_IP_OF_THE_SERVER:-""} +EXPERIMENT_MODE=${EXPERIMENT_MODE:-"full"} + if [[ -z "$ENGINE_NAME" ]]; then echo "ENGINE_NAME is not set" exit 1 @@ -24,23 +26,40 @@ if [[ -z "$PRIVATE_IP_OF_THE_SERVER" ]]; then exit 1 fi +if [[ -z "$EXPERIMENT_MODE" ]]; then + echo "EXPERIMENT_MODE is not set, possible values are: full | upload | search" + exit 1 +fi docker container rm -f ci-benchmark-upload || true docker container rm -f ci-benchmark-search || true docker rmi --force qdrant/vector-db-benchmark:latest || true -docker run \ - --rm \ - -it \ - --name ci-benchmark-upload \ - -v "$HOME/results:/code/results" \ - qdrant/vector-db-benchmark:latest \ - python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-search - -docker run \ - --rm \ - -it \ - --name ci-benchmark-search \ - -v "$HOME/results:/code/results" \ - qdrant/vector-db-benchmark:latest \ - python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-upload +if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; then + echo "EXPERIMENT_MODE=$EXPERIMENT_MODE" + docker run \ + --rm \ + -it \ + --name ci-benchmark-upload \ + -v "$HOME/results:/code/results" \ + qdrant/vector-db-benchmark:latest \ + python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-search +fi + + +if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "search" ]]; then + echo "EXPERIMENT_MODE=$EXPERIMENT_MODE" + + if [[ "$EXPERIMENT_MODE" == "search" ]]; then + echo "Drop caches before running the experiment" + sudo bash -c 'sync; echo 1 > /proc/sys/vm/drop_caches' + fi + + docker run \ + --rm \ + -it \ + --name ci-benchmark-search \ + -v "$HOME/results:/code/results" \ + qdrant/vector-db-benchmark:latest \ + python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-upload +fi diff --git a/tools/run_remote_benchmark.sh b/tools/run_remote_benchmark.sh old mode 100644 new mode 100755 index 26ae75da..e5438572 --- a/tools/run_remote_benchmark.sh +++ b/tools/run_remote_benchmark.sh @@ -34,11 +34,31 @@ trap 'cleanup' EXIT SERVER_NAME=$BENCH_SERVER_NAME bash -x "${SCRIPT_PATH}/${CLOUD_NAME}/check_ssh_connection.sh" SERVER_NAME=$BENCH_CLIENT_NAME bash -x "${SCRIPT_PATH}/${CLOUD_NAME}/check_ssh_connection.sh" +if [[ -z "${CONTAINER_MEM_LIMIT:-}" ]]; then + echo "CONTAINER_MEM_LIMIT is not set, run without memory limit" -SERVER_CONTAINER_NAME=${SERVER_CONTAINER_NAME:-"qdrant-continuous-benchmarks"} + SERVER_CONTAINER_NAME=${SERVER_CONTAINER_NAME:-"qdrant-continuous-benchmarks"} -bash -x "${SCRIPT_PATH}/run_server_container.sh" "$SERVER_CONTAINER_NAME" + bash -x "${SCRIPT_PATH}/run_server_container.sh" "$SERVER_CONTAINER_NAME" -bash -x "${SCRIPT_PATH}/run_client_script.sh" + bash -x "${SCRIPT_PATH}/run_client_script.sh" + + bash -x "${SCRIPT_PATH}/qdrant_collect_stats.sh" "$SERVER_CONTAINER_NAME" + +else + echo "CONTAINER_MEM_LIMIT is set, run search with memory limit: ${CONTAINER_MEM_LIMIT}" + + SERVER_CONTAINER_NAME=${SERVER_CONTAINER_NAME:-"qdrant-continuous-benchmarks-with-volume"} + + bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" + + bash -x "${SCRIPT_PATH}/run_client_script.sh" "upload" + + bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" "$CONTAINER_MEM_LIMIT" "continue" + + bash -x "${SCRIPT_PATH}/run_client_script.sh" "search" + + bash -x "${SCRIPT_PATH}/qdrant_collect_stats.sh" "$SERVER_CONTAINER_NAME" + +fi -bash -x "${SCRIPT_PATH}/qdrant_collect_stats.sh" "$SERVER_CONTAINER_NAME" diff --git a/tools/run_server_container_with_volume.sh b/tools/run_server_container_with_volume.sh new file mode 100644 index 00000000..5629c845 --- /dev/null +++ b/tools/run_server_container_with_volume.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +set -e + +# Examples: qdrant-continuous-benchmarks-with-volume +CONTAINER_NAME=$1 +CONTAINER_MEM_LIMIT=${2:-"25Gb"} +EXECUTION_MODE=${3:-"init"} + +CLOUD_NAME=${CLOUD_NAME:-"hetzner"} +SERVER_USERNAME=${SERVER_USERNAME:-"root"} + + +SCRIPT=$(realpath "$0") +SCRIPT_PATH=$(dirname "$SCRIPT") + +BENCH_SERVER_NAME=${SERVER_NAME:-"benchmark-server-1"} + +QDRANT_VERSION=${QDRANT_VERSION:-"dev"} + +IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_public_ip.sh" "$BENCH_SERVER_NAME") + +bash -x "${SCRIPT_PATH}/sync_servers.sh" "root@$IP_OF_THE_SERVER" + +# if version is starts with "docker" or "ghcr", use container +if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; then + + if [[ ${QDRANT_VERSION} == docker/* ]]; then + # pull from docker hub + QDRANT_VERSION=${QDRANT_VERSION#docker/} + CONTAINER_REGISTRY='docker.io' + elif [[ ${QDRANT_VERSION} == ghcr/* ]]; then + # pull from github container registry + QDRANT_VERSION=${QDRANT_VERSION#ghcr/} + CONTAINER_REGISTRY='ghcr.io' + fi + + if [[ "$EXECUTION_MODE" == "init" ]]; then + # create volume qdrant_storage + echo "Initialize qdrant from scratch" + DOCKER_VOLUME_SET_UP="docker volume rm -f qdrant_storage; sudo rm -rf qdrant_storage; mkdir qdrant_storage" + DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; ${DOCKER_VOLUME_SET_UP}; docker compose up -d; docker container ls -a" + else + # suggest that volume qdrant_storage exist and start qdrant + echo "Reload qdrant with existing data" + DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; sudo bash -c 'sync; echo 1 > /proc/sys/vm/drop_caches'; docker compose up -d; docker container ls -a" + fi + + ssh -t -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "cd ./projects/vector-db-benchmark/engine/servers/${CONTAINER_NAME} ; $DOCKER_COMPOSE" +else + echo "Error: unknown version ${QDRANT_VERSION}. Version name should start with 'docker/' or 'ghcr/'" + exit 1 +fi From 82ec5a857ccec0bd7c4b95a83ab966d2e5d2f4c9 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Tue, 27 Aug 2024 15:51:05 +0200 Subject: [PATCH 042/101] Split Ci benchmarks into 2 jobs (#186) --- .github/workflows/continuous-benchmark.yaml | 47 ++++++++++++++++++++- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index d9c7d321..c81412d2 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -44,6 +44,49 @@ jobs: timeout 30m bash -x tools/run_ci.sh done + set -e + - name: Fail job if any of the benches failed + if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' + run: exit 1 + - name: Send Notification + if: failure() || cancelled() + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "text": "CI benchmarks run status: ${{ job.status }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "CI benchmarks failed because of ${{ steps.benches.outputs.failed }}.\nView the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + } + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + runTenantsBenchmark: + runs-on: ubuntu-latest + needs: runBenchmark + if: ${{ always() }} + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Benches + id: benches + run: | + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + bash -x tools/setup_ci.sh + + set +e + # Benchmark filtered search by tenants with mem limitation export ENGINE_NAME="qdrant-all-on-disk-scalar-q" @@ -68,13 +111,13 @@ jobs: with: payload: | { - "text": "CI benchmarks run status: ${{ job.status }}", + "text": "CI tenants benchmarks run status: ${{ job.status }}", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", - "text": "CI benchmarks failed because of ${{ steps.benches.outputs.failed }}.\nView the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + "text": "CI tenants benchmarks failed because of ${{ steps.benches.outputs.failed }}.\nView the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" } } ] From 868caedb10d360db23acb7ab6936266e34bb6b90 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Wed, 4 Sep 2024 12:26:13 +0200 Subject: [PATCH 043/101] Increase CONTAINER_MEM_LIMIT to 160mb (#191) --- .github/workflows/continuous-benchmark.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index c81412d2..2a04fa73 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -91,7 +91,7 @@ jobs: export ENGINE_NAME="qdrant-all-on-disk-scalar-q" export DATASETS="random-768-100-tenants" - export CONTAINER_MEM_LIMIT=150mb + export CONTAINER_MEM_LIMIT=160mb # Benchmark the dev branch: export QDRANT_VERSION=ghcr/dev From d3113bd9c17c130e109f849e520f5e08502f3598 Mon Sep 17 00:00:00 2001 From: Dan <38852336+SebanDan@users.noreply.github.com> Date: Tue, 17 Sep 2024 16:15:06 +0200 Subject: [PATCH 044/101] fix: pgvector and_subfilter (#193) * fix: pgvector and_subfilter * fix: exact match filter raise error instead of return value --- engine/clients/pgvector/parser.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/clients/pgvector/parser.py b/engine/clients/pgvector/parser.py index 159b8b80..938f39ba 100644 --- a/engine/clients/pgvector/parser.py +++ b/engine/clients/pgvector/parser.py @@ -13,12 +13,12 @@ def build_condition( if or_subfilters is not None and len(or_subfilters) > 0: clauses.append(f"( {' OR '.join(or_subfilters)} )") if and_subfilters is not None and len(and_subfilters) > 0: - clauses.append(f"( {' AND '.join(or_subfilters)} )") + clauses.append(f"( {' AND '.join(and_subfilters)} )") return " AND ".join(clauses) def build_exact_match_filter(self, field_name: str, value: FieldValue) -> Any: - raise f"{field_name} == {json.dumps(value)}" + return f"{field_name} == {json.dumps(value)}" def build_range_filter( self, From 66ef7609365903fb763991bff0428ca1bfe2908f Mon Sep 17 00:00:00 2001 From: Ikko Eltociear Ashimine Date: Tue, 17 Sep 2024 23:17:12 +0900 Subject: [PATCH 045/101] docs: update process-benchmarks.ipynb (#185) benchmar -> benchmark --- scripts/process-benchmarks.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/process-benchmarks.ipynb b/scripts/process-benchmarks.ipynb index f60fba9a..77accf29 100644 --- a/scripts/process-benchmarks.ipynb +++ b/scripts/process-benchmarks.ipynb @@ -4,7 +4,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Notebook to process benchmar results\n", + "### Notebook to process benchmark results\n", "\n", "Please run this notebook after running all the benchmarks and storing them in the `results` dir. This will export them in the desired format for the single node benchmark plots of [qdrant.tech/benchmarks](https://qdrant.tech/benchmarks)" ] From bad876f7405c9b7d47c73bcc78794ebd225ee047 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Wed, 18 Sep 2024 09:31:38 +0200 Subject: [PATCH 046/101] Disable workflow for investigation (#197) --- .github/workflows/continuous-benchmark.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 2a04fa73..6333b543 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -3,9 +3,10 @@ name: Continuous Benchmark on: repository_dispatch: workflow_dispatch: - schedule: - # Run every 4 hours - - cron: "0 */4 * * *" +# disable for now +# schedule: +# # Run every 4 hours +# - cron: "0 */4 * * *" jobs: runBenchmark: From c33451651a70deb1d72bedb1b03a246d0d50c2e5 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Wed, 18 Sep 2024 09:50:43 +0200 Subject: [PATCH 047/101] Enable workflow again --- .github/workflows/continuous-benchmark.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 6333b543..2a04fa73 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -3,10 +3,9 @@ name: Continuous Benchmark on: repository_dispatch: workflow_dispatch: -# disable for now -# schedule: -# # Run every 4 hours -# - cron: "0 */4 * * *" + schedule: + # Run every 4 hours + - cron: "0 */4 * * *" jobs: runBenchmark: From 794cfa0ca3dd3cbfd5a5c77bc2c3998489346a40 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Thu, 19 Sep 2024 09:27:26 +0200 Subject: [PATCH 048/101] Disable cron (#201) --- .github/workflows/continuous-benchmark.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 2a04fa73..39c87ae5 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -3,9 +3,9 @@ name: Continuous Benchmark on: repository_dispatch: workflow_dispatch: - schedule: - # Run every 4 hours - - cron: "0 */4 * * *" +# schedule: +# # Run every 4 hours +# - cron: "0 */4 * * *" jobs: runBenchmark: From 6e0f4b3adb580eb766aaa231effae95e4cb5f7ca Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Fri, 20 Sep 2024 08:38:09 +0200 Subject: [PATCH 049/101] Enable cron (#203) --- .github/workflows/continuous-benchmark.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 39c87ae5..2a04fa73 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -3,9 +3,9 @@ name: Continuous Benchmark on: repository_dispatch: workflow_dispatch: -# schedule: -# # Run every 4 hours -# - cron: "0 */4 * * *" + schedule: + # Run every 4 hours + - cron: "0 */4 * * *" jobs: runBenchmark: From 6bab477777de1896d75f342a5b4aea9be5438b4a Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Tue, 24 Sep 2024 09:12:04 +0200 Subject: [PATCH 050/101] Improve volumes and logging (#202) * Add logging to search requests * Use default volumes instead of bind * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- engine/clients/qdrant/search.py | 20 +++++++++++-------- .../docker-compose.yaml | 5 ----- tools/run_server_container_with_volume.sh | 6 ++---- 3 files changed, 14 insertions(+), 17 deletions(-) diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index 1c1d2a84..613212cd 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -25,7 +25,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic host, prefer_grpc=True, limits=httpx.Limits(max_connections=None, max_keepalive_connections=0), - **connection_params + **connection_params, ) cls.search_params = search_params @@ -50,11 +50,15 @@ def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: ), ) - res = cls.client.search( - collection_name=QDRANT_COLLECTION_NAME, - query_vector=query_vector, - query_filter=cls.parser.parse(query.meta_conditions), - limit=top, - search_params=rest.SearchParams(**cls.search_params.get("config", {})), - ) + try: + res = cls.client.search( + collection_name=QDRANT_COLLECTION_NAME, + query_vector=query_vector, + query_filter=cls.parser.parse(query.meta_conditions), + limit=top, + search_params=rest.SearchParams(**cls.search_params.get("config", {})), + ) + except Exception as ex: + print(f"Something went wrong during search: {ex}") + raise ex return [(hit.id, hit.score) for hit in res] diff --git a/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml index 7dc241b4..cccc9b1c 100644 --- a/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml @@ -22,8 +22,3 @@ services: volumes: qdrant_storage: name: "qdrant_storage" - driver: local - driver_opts: - type: none - device: ${PWD}/qdrant_storage - o: bind diff --git a/tools/run_server_container_with_volume.sh b/tools/run_server_container_with_volume.sh index 5629c845..ad6172f9 100644 --- a/tools/run_server_container_with_volume.sh +++ b/tools/run_server_container_with_volume.sh @@ -36,10 +36,8 @@ if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; the fi if [[ "$EXECUTION_MODE" == "init" ]]; then - # create volume qdrant_storage - echo "Initialize qdrant from scratch" - DOCKER_VOLUME_SET_UP="docker volume rm -f qdrant_storage; sudo rm -rf qdrant_storage; mkdir qdrant_storage" - DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; ${DOCKER_VOLUME_SET_UP}; docker compose up -d; docker container ls -a" + echo "Initialize qdrant from scratch, with qdrant_storage volume" + DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true; docker volume rm -f qdrant_storage || true; docker compose up -d; docker container ls -a" else # suggest that volume qdrant_storage exist and start qdrant echo "Reload qdrant with existing data" From 5cea6f1cf12476f2f1b46aa2ccc075c5b94adfd4 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Fri, 27 Sep 2024 13:22:15 +0200 Subject: [PATCH 051/101] Add benchmark on collection load time (#204) * Recover collection from a snapshot * Push init_time_ms values into postgres * Collect telemetry separately * Add dedicated benchmark strategy * Use new benchmark-server-3 * Run in parallel --- .github/workflows/continuous-benchmark.yaml | 77 +++++++++++++++++++ .../docker-compose.yaml | 26 +++++++ tools/qdrant_collect_stats.sh | 4 + tools/run_ci.sh | 12 ++- tools/run_client_script.sh | 29 ++++++- tools/run_experiment.sh | 43 ++++++++++- tools/run_remote_benchmark.sh | 38 +++++++-- tools/upload_results_postgres.sh | 63 ++++++++++----- 8 files changed, 257 insertions(+), 35 deletions(-) create mode 100644 engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 2a04fa73..e011e8d3 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -91,6 +91,7 @@ jobs: export ENGINE_NAME="qdrant-all-on-disk-scalar-q" export DATASETS="random-768-100-tenants" + export BENCHMARK_STRATEGY="tenants" export CONTAINER_MEM_LIMIT=160mb # Benchmark the dev branch: @@ -105,6 +106,82 @@ jobs: - name: Fail job if any of the benches failed if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' run: exit 1 + - name: Send Notification + if: failure() || cancelled() + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "text": "CI tenants benchmarks run status: ${{ job.status }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "CI tenants benchmarks failed because of ${{ steps.benches.outputs.failed }}.\nView the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + } + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + runLoadTimeBenchmark: + runs-on: ubuntu-latest + needs: runBenchmark + if: ${{ always() }} + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Benches + id: benches + run: | + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + export SERVER_NAME="benchmark-server-3" + bash -x tools/setup_ci.sh + + set +e + + # Benchmark collection load time + export BENCHMARK_STRATEGY="collection-reload" + + declare -A DATASET_TO_ENGINE + declare -A DATASET_TO_URL + DATASET_TO_ENGINE["all-payloads-default"]="qdrant-continuous-benchmark-snapshot" + DATASET_TO_ENGINE["all-payloads-on-disk"]="qdrant-continuous-benchmark-snapshot" + DATASET_TO_ENGINE["all-payloads-default-sparse"]="qdrant-continuous-benchmark-snapshot" + DATASET_TO_ENGINE["all-payloads-on-disk-sparse"]="qdrant-continuous-benchmark-snapshot" + + export STORAGE_URL="https://storage.googleapis.com/qdrant-benchmark-snapshots/all-payloads" + DATASET_TO_URL["all-payloads-default"]="${STORAGE_URL}/benchmark-all-payloads-500k-768-default.snapshot" + DATASET_TO_URL["all-payloads-on-disk"]="${STORAGE_URL}/benchmark-all-payloads-500k-768-on-disk.snapshot" + DATASET_TO_URL["all-payloads-default-sparse"]="${STORAGE_URL}/benchmark-all-payloads-500k-sparse-default.snapshot" + DATASET_TO_URL["all-payloads-on-disk-sparse"]="${STORAGE_URL}/benchmark-all-payloads-500k-sparse-on-disk.snapshot" + + set +e + + for dataset in "${!DATASET_TO_ENGINE[@]}"; do + export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]} + export DATASETS=$dataset + export SNAPSHOT_URL=${DATASET_TO_URL[$dataset]} + + # Benchmark the dev branch: + export QDRANT_VERSION=ghcr/dev + timeout 30m bash -x tools/run_ci.sh + + # Benchmark the master branch: + export QDRANT_VERSION=docker/master + timeout 30m bash -x tools/run_ci.sh + done + + set -e + - name: Fail job if any of the benches failed + if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' + run: exit 1 - name: Send Notification if: failure() || cancelled() uses: slackapi/slack-github-action@v1.26.0 diff --git a/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml new file mode 100644 index 00000000..a1b0c4a9 --- /dev/null +++ b/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml @@ -0,0 +1,26 @@ +version: '3.7' + +services: + qdrant_bench: + image: ${CONTAINER_REGISTRY:-docker.io}/qdrant/qdrant:${QDRANT_VERSION} + container_name: qdrant-continuous + environment: + QDRANT_NUM_CPUS: 4 + ports: + - "6333:6333" + - "6334:6334" + volumes: + - qdrant_storage:/qdrant/storage + logging: + driver: "json-file" + options: + max-file: 1 + max-size: 10m + deploy: + resources: + limits: + memory: ${CONTAINER_MEM_LIMIT:-25Gb} + +volumes: + qdrant_storage: + name: "qdrant_storage" diff --git a/tools/qdrant_collect_stats.sh b/tools/qdrant_collect_stats.sh index 8b81c9ad..ef72caba 100644 --- a/tools/qdrant_collect_stats.sh +++ b/tools/qdrant_collect_stats.sh @@ -28,3 +28,7 @@ echo "$RSS_ANON_MEMORY_USAGE" > results/rss-anon-memory-usage-"${CURRENT_DATE}". ROOT_API_RESPONSE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "curl -s http://localhost:6333/") echo "$ROOT_API_RESPONSE" > results/root-api-"${CURRENT_DATE}".json + +TELEMETRY_API_RESPONSE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "curl -s http://localhost:6333/telemetry?details_level=10") + +echo "$TELEMETRY_API_RESPONSE" > results/telemetry-api-"${CURRENT_DATE}".json diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 717ef5e0..9f5eec6b 100755 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -18,6 +18,8 @@ trap 'handle_term' TERM # Script, that runs benchmark within the GitHub Actions CI environment +BENCHMARK_STRATEGY=${BENCHMARK_STRATEGY:-"default"} + SCRIPT=$(realpath "$0") SCRIPT_PATH=$(dirname "$SCRIPT") @@ -25,8 +27,14 @@ bash -x "${SCRIPT_PATH}/run_remote_benchmark.sh" # Upload to postgres # -t sorts by modification time -export SEARCH_RESULTS_FILE=$(ls -t results/*-search-*.json | head -n 1) -export UPLOAD_RESULTS_FILE=$(ls -t results/*-upload-*.json | head -n 1) +if [[ "$BENCHMARK_STRATEGY" == "collection-reload" ]]; then + export TELEMETRY_API_RESPONSE_FILE=$(ls -t results/telemetry-api-*.json | head -n 1) +else + # any other strategies are considered to have search & upload results + export SEARCH_RESULTS_FILE=$(ls -t results/*-search-*.json | head -n 1) + export UPLOAD_RESULTS_FILE=$(ls -t results/*-upload-*.json | head -n 1) +fi + export VM_RSS_MEMORY_USAGE_FILE=$(ls -t results/vm-rss-memory-usage-*.txt | head -n 1) export RSS_ANON_MEMORY_USAGE_FILE=$(ls -t results/rss-anon-memory-usage-*.txt | head -n 1) export ROOT_API_RESPONSE_FILE=$(ls -t results/root-api-*.json | head -n 1) diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index 77ea7470..7ec886da 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -17,17 +17,38 @@ BENCH_CLIENT_NAME=${CLIENT_NAME:-"benchmark-client-1"} IP_OF_THE_CLIENT=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_public_ip.sh" "$BENCH_CLIENT_NAME") -scp "${SCRIPT_PATH}/run_experiment.sh" "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/run_experiment.sh" - ENGINE_NAME=${ENGINE_NAME:-"qdrant-continuous-benchmark"} DATASETS=${DATASETS:-"laion-small-clip"} +SNAPSHOT_URL=${SNAPSHOT_URL:-""} + PRIVATE_IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_private_ip.sh" "$BENCH_SERVER_NAME") -RUN_EXPERIMENT="ENGINE_NAME=${ENGINE_NAME} DATASETS=${DATASETS} PRIVATE_IP_OF_THE_SERVER=${PRIVATE_IP_OF_THE_SERVER} EXPERIMENT_MODE=${EXPERIMENT_MODE} bash ~/run_experiment.sh" +if [[ "$EXPERIMENT_MODE" == "snapshot" ]]; then + scp "${SCRIPT_PATH}/run_experiment.sh" "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/run_experiment_snapshot.sh" + + RUN_EXPERIMENT="ENGINE_NAME=${ENGINE_NAME} \ + DATASETS=${DATASETS} \ + PRIVATE_IP_OF_THE_SERVER=${PRIVATE_IP_OF_THE_SERVER} \ + EXPERIMENT_MODE=${EXPERIMENT_MODE} \ + SNAPSHOT_URL=${SNAPSHOT_URL} \ + bash ~/run_experiment_snapshot.sh" + + ssh -tt -o ServerAliveInterval=120 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "${RUN_EXPERIMENT}" -ssh -tt -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "${RUN_EXPERIMENT}" +else + scp "${SCRIPT_PATH}/run_experiment.sh" "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/run_experiment.sh" + + RUN_EXPERIMENT="ENGINE_NAME=${ENGINE_NAME} \ + DATASETS=${DATASETS} \ + PRIVATE_IP_OF_THE_SERVER=${PRIVATE_IP_OF_THE_SERVER} \ + EXPERIMENT_MODE=${EXPERIMENT_MODE} \ + bash ~/run_experiment.sh" + + ssh -tt -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "${RUN_EXPERIMENT}" + +fi echo "Gather experiment results..." result_files_arr=() diff --git a/tools/run_experiment.sh b/tools/run_experiment.sh index fc72a41d..3cc25b8c 100644 --- a/tools/run_experiment.sh +++ b/tools/run_experiment.sh @@ -11,6 +11,8 @@ PRIVATE_IP_OF_THE_SERVER=${PRIVATE_IP_OF_THE_SERVER:-""} EXPERIMENT_MODE=${EXPERIMENT_MODE:-"full"} +SNAPSHOT_URL=${SNAPSHOT_URL:-""} + if [[ -z "$ENGINE_NAME" ]]; then echo "ENGINE_NAME is not set" exit 1 @@ -27,13 +29,21 @@ if [[ -z "$PRIVATE_IP_OF_THE_SERVER" ]]; then fi if [[ -z "$EXPERIMENT_MODE" ]]; then - echo "EXPERIMENT_MODE is not set, possible values are: full | upload | search" + echo "EXPERIMENT_MODE is not set, possible values are: full | upload | search | snapshot" + exit 1 +fi + +if [[ "$EXPERIMENT_MODE" == "snapshot" ]] && [[ -z "$SNAPSHOT_URL" ]]; then + echo "EXPERIMENT_MODE is 'snapshot' but SNAPSHOT_URL is not set" exit 1 fi -docker container rm -f ci-benchmark-upload || true -docker container rm -f ci-benchmark-search || true -docker rmi --force qdrant/vector-db-benchmark:latest || true +if [[ "$EXPERIMENT_MODE" != "snapshot" ]]; then + docker container rm -f ci-benchmark-upload || true + docker container rm -f ci-benchmark-search || true + + docker rmi --force qdrant/vector-db-benchmark:latest || true +fi if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; then echo "EXPERIMENT_MODE=$EXPERIMENT_MODE" @@ -63,3 +73,28 @@ if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "search" ]]; t qdrant/vector-db-benchmark:latest \ python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-upload fi + + +if [[ "$EXPERIMENT_MODE" == "snapshot" ]]; then + echo "EXPERIMENT_MODE=$EXPERIMENT_MODE" + + curl -X PUT \ + "http://${PRIVATE_IP_OF_THE_SERVER}:6333/collections/benchmark/snapshots/recover" \ + --data-raw "{\"location\": \"${SNAPSHOT_URL}\"}" + + collection_url="http://${PRIVATE_IP_OF_THE_SERVER}:6333/collections/benchmark" + collection_status=$(curl -s "$collection_url" | jq -r '.result.status') + counter=0 + while [[ "$collection_status" != "green" && "$counter" -lt 5 ]]; do + collection_status=$(curl -s "$collection_url" | jq -r '.result.status') + counter=$(expr $counter + 1) + sleep 1 + done + + if [[ "$collection_status" == "green" ]]; then + echo "Experiment stage: Done" + else + echo "Experiment interrupted: collection is not ready." + exit 1 + fi +fi diff --git a/tools/run_remote_benchmark.sh b/tools/run_remote_benchmark.sh index e5438572..af06329a 100755 --- a/tools/run_remote_benchmark.sh +++ b/tools/run_remote_benchmark.sh @@ -31,11 +31,14 @@ trap 'cleanup' EXIT #SERVER_NAME=$BENCH_CLIENT_NAME SERVER_TYPE='cpx11' bash -x "${SCRIPT_PATH}/${CLOUD_NAME}/create_and_install.sh" #wait $SERVER_CREATION_PID +BENCHMARK_STRATEGY=${BENCHMARK_STRATEGY:-"default"} + SERVER_NAME=$BENCH_SERVER_NAME bash -x "${SCRIPT_PATH}/${CLOUD_NAME}/check_ssh_connection.sh" SERVER_NAME=$BENCH_CLIENT_NAME bash -x "${SCRIPT_PATH}/${CLOUD_NAME}/check_ssh_connection.sh" -if [[ -z "${CONTAINER_MEM_LIMIT:-}" ]]; then - echo "CONTAINER_MEM_LIMIT is not set, run without memory limit" +case "$BENCHMARK_STRATEGY" in + "default") + echo "Default benchmark, no volume, no memory limit" SERVER_CONTAINER_NAME=${SERVER_CONTAINER_NAME:-"qdrant-continuous-benchmarks"} @@ -44,9 +47,14 @@ if [[ -z "${CONTAINER_MEM_LIMIT:-}" ]]; then bash -x "${SCRIPT_PATH}/run_client_script.sh" bash -x "${SCRIPT_PATH}/qdrant_collect_stats.sh" "$SERVER_CONTAINER_NAME" + ;; + "tenants") + if [[ -z "${CONTAINER_MEM_LIMIT:-}" ]]; then + echo "Tenants benchmark, but CONTAINER_MEM_LIMIT is not set!" + exit 2 + fi -else - echo "CONTAINER_MEM_LIMIT is set, run search with memory limit: ${CONTAINER_MEM_LIMIT}" + echo "Tenants benchmark, run search with memory limit: ${CONTAINER_MEM_LIMIT}" SERVER_CONTAINER_NAME=${SERVER_CONTAINER_NAME:-"qdrant-continuous-benchmarks-with-volume"} @@ -59,6 +67,26 @@ else bash -x "${SCRIPT_PATH}/run_client_script.sh" "search" bash -x "${SCRIPT_PATH}/qdrant_collect_stats.sh" "$SERVER_CONTAINER_NAME" + ;; + + "collection-reload") + echo "Collection load time benchmark" + + SERVER_CONTAINER_NAME=${SERVER_CONTAINER_NAME:-"qdrant-continuous-benchmarks-snapshot"} + + bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" -fi + bash -x "${SCRIPT_PATH}/run_client_script.sh" "snapshot" + + bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" "25Gb" "continue" + + sleep 10 + + bash -x "${SCRIPT_PATH}/qdrant_collect_stats.sh" "$SERVER_CONTAINER_NAME" + ;; + *) + echo "Invalid BENCHMARK_STRATEGY value: $BENCHMARK_STRATEGY" + exit 1 + ;; +esac diff --git a/tools/upload_results_postgres.sh b/tools/upload_results_postgres.sh index 2d6ebd40..41ab81dc 100644 --- a/tools/upload_results_postgres.sh +++ b/tools/upload_results_postgres.sh @@ -19,6 +19,7 @@ # p99_time real, # vm_rss_mem real, # rss_anon_mem real +# collection_load_time_ms real # ); SEARCH_RESULTS_FILE=${SEARCH_RESULTS_FILE:-""} @@ -26,23 +27,31 @@ UPLOAD_RESULTS_FILE=${UPLOAD_RESULTS_FILE:-""} VM_RSS_MEMORY_USAGE_FILE=${VM_RSS_MEMORY_USAGE_FILE:-""} RSS_ANON_MEMORY_USAGE_FILE=${RSS_ANON_MEMORY_USAGE_FILE:-""} ROOT_API_RESPONSE_FILE=${ROOT_API_RESPONSE_FILE:-""} +TELEMETRY_API_RESPONSE_FILE=${TELEMETRY_API_RESPONSE_FILE:-""} POSTGRES_TABLE=${POSTGRES_TABLE:-"benchmark"} QDRANT_VERSION=${QDRANT_VERSION:-"dev"} DATASETS=${DATASETS:-"laion-small-clip"} -if [[ -z "$SEARCH_RESULTS_FILE" ]]; then - echo "SEARCH_RESULTS_FILE is not set" - exit 1 -fi - - -if [[ -z "$UPLOAD_RESULTS_FILE" ]]; then - echo "UPLOAD_RESULTS_FILE is not set" - exit 1 +if [[ "$BENCHMARK_STRATEGY" == "collection-reload" ]]; then + if [[ -z "$TELEMETRY_API_RESPONSE_FILE" ]]; then + echo "TELEMETRY_API_RESPONSE_FILE is not set" + exit 1 + fi +else + # any other strategies are considered to have search & upload results + if [[ -z "$SEARCH_RESULTS_FILE" ]]; then + echo "SEARCH_RESULTS_FILE is not set" + exit 1 + fi + + + if [[ -z "$UPLOAD_RESULTS_FILE" ]]; then + echo "UPLOAD_RESULTS_FILE is not set" + exit 1 + fi fi - if [[ -z "$VM_RSS_MEMORY_USAGE_FILE" ]]; then echo "VM_RSS_MEMORY_USAGE_FILE is not set" exit 1 @@ -58,13 +67,27 @@ if [[ -z "$ROOT_API_RESPONSE_FILE" ]]; then exit 1 fi -RPS=$(jq -r '.results.rps' "$SEARCH_RESULTS_FILE") -MEAN_PRECISIONS=$(jq -r '.results.mean_precisions' "$SEARCH_RESULTS_FILE") -P95_TIME=$(jq -r '.results.p95_time' "$SEARCH_RESULTS_FILE") -P99_TIME=$(jq -r '.results.p99_time' "$SEARCH_RESULTS_FILE") - -UPLOAD_TIME=$(jq -r '.results.upload_time' "$UPLOAD_RESULTS_FILE") -INDEXING_TIME=$(jq -r '.results.total_time' "$UPLOAD_RESULTS_FILE") +COLLECTION_LOAD_TIME=NULL +RPS=NULL +MEAN_PRECISIONS=NULL +P95_TIME=NULL +P99_TIME=NULL +UPLOAD_TIME=NULL +INDEXING_TIME=NULL + +if [[ "$BENCHMARK_STRATEGY" == "collection-reload" ]]; then + echo "BENCHMARK_STRATEGY is $BENCHMARK_STRATEGY, upload telemetry" + COLLECTION_LOAD_TIME=$(jq -r '.result.collections.collections[] | select(.id == "benchmark") | .init_time_ms' "$TELEMETRY_API_RESPONSE_FILE") +else + # any other strategies are considered to have search & upload results + RPS=$(jq -r '.results.rps' "$SEARCH_RESULTS_FILE") + MEAN_PRECISIONS=$(jq -r '.results.mean_precisions' "$SEARCH_RESULTS_FILE") + P95_TIME=$(jq -r '.results.p95_time' "$SEARCH_RESULTS_FILE") + P99_TIME=$(jq -r '.results.p99_time' "$SEARCH_RESULTS_FILE") + + UPLOAD_TIME=$(jq -r '.results.upload_time' "$UPLOAD_RESULTS_FILE") + INDEXING_TIME=$(jq -r '.results.total_time' "$UPLOAD_RESULTS_FILE") +fi VM_RSS_MEMORY_USAGE=$(cat "$VM_RSS_MEMORY_USAGE_FILE") RSS_ANON_MEMORY_USAGE=$(cat "$RSS_ANON_MEMORY_USAGE_FILE") @@ -74,8 +97,8 @@ QDRANT_COMMIT=$(jq -r '.commit' "$ROOT_API_RESPONSE_FILE") MEASURE_TIMESTAMP=${MEASURE_TIMESTAMP:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")} -docker run --rm jbergknoff/postgresql-client "postgresql://qdrant:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/postgres" -c " -INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestamp, upload_time, indexing_time, rps, mean_precisions, p95_time, p99_time, vm_rss_mem, rss_anon_mem) -VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${VM_RSS_MEMORY_USAGE}, ${RSS_ANON_MEMORY_USAGE}); +docker run --name "vector-db" --rm jbergknoff/postgresql-client "postgresql://qdrant:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/postgres" -c " +INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestamp, upload_time, indexing_time, rps, mean_precisions, p95_time, p99_time, vm_rss_mem, rss_anon_mem, collection_load_time_ms) +VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${VM_RSS_MEMORY_USAGE}, ${RSS_ANON_MEMORY_USAGE}, ${COLLECTION_LOAD_TIME}); " From 793f3d0d3bf3b310fb46abd10cfc3b6c6866c078 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Wed, 9 Oct 2024 09:57:05 +0200 Subject: [PATCH 052/101] Report dataset's info in slack (#211) * Add job name into slack message * Add reason into slack message * Debug * Revert "Debug" This reverts commit 27f0b5c0d16a12f4b0d4d6af39927c69e904a023. * Debug * Debug * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Debug * Debug * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Debug * Debug * Debug * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Format the message * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/workflows/continuous-benchmark.yaml | 96 +++++++++++++++++++-- tools/run_ci.sh | 10 ++- 2 files changed, 98 insertions(+), 8 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index e011e8d3..e1fb30d8 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -54,13 +54,41 @@ jobs: with: payload: | { - "text": "CI benchmarks run status: ${{ job.status }}", + "text": "CI benchmarks (runBenchmark) run status: ${{ job.status }}", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", - "text": "CI benchmarks failed because of ${{ steps.benches.outputs.failed }}.\nView the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + "text": "CI benchmarks (testSlack) failed because of *${{ steps.benches.outputs.failed }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" } } ] @@ -112,13 +140,41 @@ jobs: with: payload: | { - "text": "CI tenants benchmarks run status: ${{ job.status }}", + "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", - "text": "CI tenants benchmarks failed because of ${{ steps.benches.outputs.failed }}.\nView the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + "text": "CI benchmarks (testSlack) failed because of *${{ steps.benches.outputs.failed }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" } } ] @@ -188,13 +244,41 @@ jobs: with: payload: | { - "text": "CI tenants benchmarks run status: ${{ job.status }}", + "text": "CI benchmarks (runLoadTimeBenchmark) run status: ${{ job.status }}", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", - "text": "CI tenants benchmarks failed because of ${{ steps.benches.outputs.failed }}.\nView the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + "text": "CI benchmarks (testSlack) failed because of *${{ steps.benches.outputs.failed }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" } } ] diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 9f5eec6b..5405723c 100755 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -4,12 +4,18 @@ PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE set -euo pipefail function handle_err() { - echo "Error occured qdrant_version=${QDRANT_VERSION} engine_name=${ENGINE_NAME} dataset=${DATASETS}" + echo "qdrant_version=${QDRANT_VERSION}" >> $GITHUB_OUTPUT + echo "engine_name=${ENGINE_NAME}" >> $GITHUB_OUTPUT + echo "dataset=${DATASETS}" >> $GITHUB_OUTPUT + echo "failed=error" >> $GITHUB_OUTPUT } function handle_term() { - echo "Timeout occured qdrant_version=${QDRANT_VERSION} engine_name=${ENGINE_NAME} dataset=${DATASETS}" + echo "qdrant_version=${QDRANT_VERSION}" >> $GITHUB_OUTPUT + echo "engine_name=${ENGINE_NAME}" >> $GITHUB_OUTPUT + echo "dataset=${DATASETS}" >> $GITHUB_OUTPUT + echo "failed=timeout" >> $GITHUB_OUTPUT } From ea53db4f1ac62babe6d6fd08c86f98cd9211abc2 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Wed, 9 Oct 2024 11:28:32 +0200 Subject: [PATCH 053/101] Update text (#212) --- .github/workflows/continuous-benchmark.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index e1fb30d8..9df42538 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -60,7 +60,7 @@ jobs: "type": "section", "text": { "type": "mrkdwn", - "text": "CI benchmarks (testSlack) failed because of *${{ steps.benches.outputs.failed }}*." + "text": "CI benchmarks (runBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." } }, { @@ -146,7 +146,7 @@ jobs: "type": "section", "text": { "type": "mrkdwn", - "text": "CI benchmarks (testSlack) failed because of *${{ steps.benches.outputs.failed }}*." + "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." } }, { @@ -250,7 +250,7 @@ jobs: "type": "section", "text": { "type": "mrkdwn", - "text": "CI benchmarks (testSlack) failed because of *${{ steps.benches.outputs.failed }}*." + "text": "CI benchmarks (runLoadTimeBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." } }, { From a0d672cf5e13744854727b0df7ce784357c1b67e Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Mon, 2 Dec 2024 15:24:08 +0100 Subject: [PATCH 054/101] Add benchmark on parallel upload and search (#215) * Add parallel upload&search workflow * Introduce new step: search without upsert * Update tools/upload_parallel_results_postgres.sh Co-authored-by: Kumar Shivendu * Update tools/run_ci.sh Co-authored-by: Kumar Shivendu * Fix indent * Explicit mode check * Provide CONTAINER_MEM_LIMIT explicitly * Store parallel results in separate folder --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Kumar Shivendu --- .github/workflows/continuous-benchmark.yaml | 87 +++++++++++++++++++ engine/base_client/client.py | 8 +- run.py | 9 +- tools/run_ci.sh | 12 ++- tools/run_client_script.sh | 16 +++- tools/run_experiment.sh | 33 +++++++- tools/run_remote_benchmark.sh | 24 +++++- tools/run_server_container_with_volume.sh | 5 +- tools/upload_parallel_results_postgres.sh | 92 +++++++++++++++++++++ 9 files changed, 275 insertions(+), 11 deletions(-) create mode 100644 tools/upload_parallel_results_postgres.sh diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 9df42538..8a25bf69 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -283,6 +283,93 @@ jobs: } ] } + env: + SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + + runParallelBenchmark: + runs-on: ubuntu-latest + needs: [ runLoadTimeBenchmark, runTenantsBenchmark ] + if: ${{ always() }} + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Benches + id: benches + run: | + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + bash -x tools/setup_ci.sh + + set +e + + # Benchmark parallel search&upload + + export ENGINE_NAME="qdrant-continuous-benchmark" + export DATASETS="laion-small-clip" + export BENCHMARK_STRATEGY="parallel" + export POSTGRES_TABLE="benchmark_parallel_search_upload" + + # Benchmark the dev branch: + export QDRANT_VERSION=ghcr/dev + timeout 30m bash -x tools/run_ci.sh + + # Benchmark the master branch: + export QDRANT_VERSION=docker/master + timeout 30m bash -x tools/run_ci.sh + + set -e + - name: Fail job if any of the benches failed + if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' + run: exit 1 + - name: Send Notification + if: failure() || cancelled() + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + } + } + ] + } env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK \ No newline at end of file diff --git a/engine/base_client/client.py b/engine/base_client/client.py index def2f53b..670768a9 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -1,7 +1,7 @@ import json import os from datetime import datetime -from typing import List +from typing import List, Optional from benchmark import ROOT_DIR from benchmark.dataset import Dataset @@ -84,6 +84,7 @@ def run_experiment( skip_upload: bool = False, skip_search: bool = False, skip_if_exists: bool = True, + skip_configure: Optional[bool] = False, ): execution_params = self.configurator.execution_params( distance=dataset.config.distance, vector_size=dataset.config.vector_size @@ -101,8 +102,9 @@ def run_experiment( return if not skip_upload: - print("Experiment stage: Configure") - self.configurator.configure(dataset) + if not skip_configure: + print("Experiment stage: Configure") + self.configurator.configure(dataset) print("Experiment stage: Upload") upload_stats = self.uploader.upload( diff --git a/run.py b/run.py index 4446a7e5..518fbab6 100644 --- a/run.py +++ b/run.py @@ -1,6 +1,6 @@ import fnmatch import traceback -from typing import List +from typing import List, Optional import stopit import typer @@ -23,6 +23,7 @@ def run( skip_if_exists: bool = False, exit_on_error: bool = True, timeout: float = 86400.0, + skip_configure: Optional[bool] = False, ): """ Example: @@ -57,7 +58,11 @@ def run( with stopit.ThreadingTimeout(timeout) as tt: client.run_experiment( - dataset, skip_upload, skip_search, skip_if_exists + dataset, + skip_upload, + skip_search, + skip_if_exists, + skip_configure, ) client.delete_client() diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 5405723c..6b3bcbb1 100755 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -39,10 +39,20 @@ else # any other strategies are considered to have search & upload results export SEARCH_RESULTS_FILE=$(ls -t results/*-search-*.json | head -n 1) export UPLOAD_RESULTS_FILE=$(ls -t results/*-upload-*.json | head -n 1) + + if [[ "$BENCHMARK_STRATEGY" == "parallel" ]]; then + export PARALLEL_UPLOAD_RESULTS_FILE=$(ls -t results/parallel/*-upload-*.json | head -n 1) + export PARALLEL_SEARCH_RESULTS_FILE=$(ls -t results/parallel/*-search-*.json | head -n 1) + fi fi export VM_RSS_MEMORY_USAGE_FILE=$(ls -t results/vm-rss-memory-usage-*.txt | head -n 1) export RSS_ANON_MEMORY_USAGE_FILE=$(ls -t results/rss-anon-memory-usage-*.txt | head -n 1) export ROOT_API_RESPONSE_FILE=$(ls -t results/root-api-*.json | head -n 1) -bash -x "${SCRIPT_PATH}/upload_results_postgres.sh" +if [[ "$BENCHMARK_STRATEGY" == "parallel" ]]; then + bash -x "${SCRIPT_PATH}/upload_parallel_results_postgres.sh" +else + bash -x "${SCRIPT_PATH}/upload_results_postgres.sh" +fi + diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index 7ec886da..1ca6a9f9 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -3,7 +3,7 @@ PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' set -euo pipefail -# Possible values are: full|upload|search +# Possible values are: full|upload|search|parallel|snapshot EXPERIMENT_MODE=${1:-"full"} CLOUD_NAME=${CLOUD_NAME:-"hetzner"} @@ -52,6 +52,7 @@ fi echo "Gather experiment results..." result_files_arr=() +result_parallel_files_arr=() if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; then UPLOAD_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-upload-*.json | head -n 1") @@ -63,9 +64,22 @@ if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "search" ]]; t result_files_arr+=("$SEARCH_RESULT_FILE") fi +if [[ "$EXPERIMENT_MODE" == "parallel" ]]; then + UPLOAD_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/parallel/*-upload-*.json | head -n 1") + result_parallel_files_arr+=("$UPLOAD_RESULT_FILE") + + SEARCH_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/parallel/*-search-*.json | head -n 1") + result_parallel_files_arr+=("$SEARCH_RESULT_FILE") +fi + mkdir -p results +mkdir -p results/parallel for RESULT_FILE in "${result_files_arr[@]}"; do # -p preseves modification time, access time, and modes (but not change time) scp -p "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/${RESULT_FILE}" "./results" done + +for RESULT_FILE in "${result_parallel_files_arr[@]}"; do + scp -p "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/${RESULT_FILE}" "./results/parallel" +done diff --git a/tools/run_experiment.sh b/tools/run_experiment.sh index 3cc25b8c..ee23bbba 100644 --- a/tools/run_experiment.sh +++ b/tools/run_experiment.sh @@ -29,7 +29,7 @@ if [[ -z "$PRIVATE_IP_OF_THE_SERVER" ]]; then fi if [[ -z "$EXPERIMENT_MODE" ]]; then - echo "EXPERIMENT_MODE is not set, possible values are: full | upload | search | snapshot" + echo "EXPERIMENT_MODE is not set, possible values are: full | upload | search | snapshot | parallel" exit 1 fi @@ -75,6 +75,37 @@ if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "search" ]]; t fi +if [[ "$EXPERIMENT_MODE" == "parallel" ]]; then + echo "EXPERIMENT_MODE=$EXPERIMENT_MODE" + + docker pull qdrant/vector-db-benchmark:latest + + echo "Starting ci-benchmark-upload container" + docker run \ + --rm \ + --name ci-benchmark-upload \ + -v "$HOME/results/parallel:/code/results" \ + qdrant/vector-db-benchmark:latest \ + python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-search --skip-configure & + UPLOAD_PID=$! + + echo "Starting ci-benchmark-search container" + docker run \ + --rm \ + --name ci-benchmark-search \ + -v "$HOME/results/parallel:/code/results" \ + qdrant/vector-db-benchmark:latest \ + python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-upload & + SEARCH_PID=$! + + echo "Waiting for both containers to finish" + wait $UPLOAD_PID + wait $SEARCH_PID + + echo "EXPERIMENT_MODE=$EXPERIMENT_MODE DONE" +fi + + if [[ "$EXPERIMENT_MODE" == "snapshot" ]]; then echo "EXPERIMENT_MODE=$EXPERIMENT_MODE" diff --git a/tools/run_remote_benchmark.sh b/tools/run_remote_benchmark.sh index af06329a..e3f3d8ee 100755 --- a/tools/run_remote_benchmark.sh +++ b/tools/run_remote_benchmark.sh @@ -58,7 +58,7 @@ case "$BENCHMARK_STRATEGY" in SERVER_CONTAINER_NAME=${SERVER_CONTAINER_NAME:-"qdrant-continuous-benchmarks-with-volume"} - bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" + bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" "25Gb" bash -x "${SCRIPT_PATH}/run_client_script.sh" "upload" @@ -74,7 +74,7 @@ case "$BENCHMARK_STRATEGY" in SERVER_CONTAINER_NAME=${SERVER_CONTAINER_NAME:-"qdrant-continuous-benchmarks-snapshot"} - bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" + bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" "25Gb" bash -x "${SCRIPT_PATH}/run_client_script.sh" "snapshot" @@ -85,6 +85,26 @@ case "$BENCHMARK_STRATEGY" in bash -x "${SCRIPT_PATH}/qdrant_collect_stats.sh" "$SERVER_CONTAINER_NAME" ;; + "parallel") + echo "Parallel benchmark, run upload&search at the same time" + + SERVER_CONTAINER_NAME=${SERVER_CONTAINER_NAME:-"qdrant-continuous-benchmarks-with-volume"} + + bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" "25Gb" + + bash -x "${SCRIPT_PATH}/run_client_script.sh" "upload" + + bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" "25Gb" "continue" + + bash -x "${SCRIPT_PATH}/run_client_script.sh" "search" + + bash -x "${SCRIPT_PATH}/run_server_container_with_volume.sh" "$SERVER_CONTAINER_NAME" "25Gb" "continue" + + bash -x "${SCRIPT_PATH}/run_client_script.sh" "parallel" + + bash -x "${SCRIPT_PATH}/qdrant_collect_stats.sh" "$SERVER_CONTAINER_NAME" + ;; + *) echo "Invalid BENCHMARK_STRATEGY value: $BENCHMARK_STRATEGY" exit 1 diff --git a/tools/run_server_container_with_volume.sh b/tools/run_server_container_with_volume.sh index ad6172f9..294db760 100644 --- a/tools/run_server_container_with_volume.sh +++ b/tools/run_server_container_with_volume.sh @@ -38,10 +38,13 @@ if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; the if [[ "$EXECUTION_MODE" == "init" ]]; then echo "Initialize qdrant from scratch, with qdrant_storage volume" DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true; docker volume rm -f qdrant_storage || true; docker compose up -d; docker container ls -a" - else + elif [[ "$EXECUTION_MODE" == "continue" ]]; then # suggest that volume qdrant_storage exist and start qdrant echo "Reload qdrant with existing data" DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; sudo bash -c 'sync; echo 1 > /proc/sys/vm/drop_caches'; docker compose up -d; docker container ls -a" + else + echo "Error: unknown execution mode ${EXECUTION_MODE}. Execution mode should be 'init' or 'continue'" + exit 1 fi ssh -t -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "cd ./projects/vector-db-benchmark/engine/servers/${CONTAINER_NAME} ; $DOCKER_COMPOSE" diff --git a/tools/upload_parallel_results_postgres.sh b/tools/upload_parallel_results_postgres.sh new file mode 100644 index 00000000..3a894862 --- /dev/null +++ b/tools/upload_parallel_results_postgres.sh @@ -0,0 +1,92 @@ +#!/bin/bash + + +# Read search results from json file and upload it to postgres +# +# Assume table: +# create table benchmark_parallel_search_upload ( +# id SERIAL PRIMARY key, +# engine VARCHAR(255), +# branch VARCHAR(255), +# commit CHAR(40), +# dataset VARCHAR(255), +# measure_timestamp TIMESTAMP, +# upload_time real, +# indexing_time real, +# rps real, +# mean_precisions real, +# p95_time real, +# p99_time real, +# search_time real, +# no_upsert_search_time real, +# ); + +PARALLEL_SEARCH_RESULTS_FILE=${PARALLEL_SEARCH_RESULTS_FILE:-""} +SEARCH_RESULT_FILE=${SEARCH_RESULTS_FILE:-""} +PARALLEL_UPLOAD_RESULTS_FILE=${PARALLEL_UPLOAD_RESULTS_FILE:-""} +UPLOAD_RESULTS_FILE=${UPLOAD_RESULTS_FILE:-""} +ROOT_API_RESPONSE_FILE=${ROOT_API_RESPONSE_FILE:-""} +POSTGRES_TABLE=${POSTGRES_TABLE:-"benchmark_parallel_search_upload"} + +QDRANT_VERSION=${QDRANT_VERSION:-"dev"} +DATASETS=${DATASETS:-"laion-small-clip"} + +if [[ "$BENCHMARK_STRATEGY" != "parallel" ]]; then + echo "BENCHMARK_STRATEGY is not parallel" + exit 1 +else + if [[ -z "$PARALLEL_SEARCH_RESULTS_FILE" ]]; then + echo "PARALLEL_SEARCH_RESULTS_FILE is not set" + exit 1 + fi + + if [[ -z "$SEARCH_RESULT_FILE" ]]; then + echo "SEARCH_RESULT_FILE is not set" + exit 1 + fi + + if [[ -z "$PARALLEL_UPLOAD_RESULTS_FILE" ]]; then + echo "PARALLEL_UPLOAD_RESULTS_FILE is not set" + exit 1 + fi + + if [[ -z "$UPLOAD_RESULTS_FILE" ]]; then + echo "UPLOAD_RESULTS_FILE is not set" + exit 1 + fi +fi + +if [[ -z "$ROOT_API_RESPONSE_FILE" ]]; then + echo "ROOT_API_RESPONSE_FILE is not set" + exit 1 +fi + +RPS=NULL +MEAN_PRECISIONS=NULL +P95_TIME=NULL +P99_TIME=NULL +UPLOAD_TIME=NULL +INDEXING_TIME=NULL +SEARCH_TIME=NULL +NO_UPSERT_SEARCH_TIME=NULL + +RPS=$(jq -r '.results.rps' "$PARALLEL_SEARCH_RESULTS_FILE") +MEAN_PRECISIONS=$(jq -r '.results.mean_precisions' "$PARALLEL_SEARCH_RESULTS_FILE") +P95_TIME=$(jq -r '.results.p95_time' "$PARALLEL_SEARCH_RESULTS_FILE") +P99_TIME=$(jq -r '.results.p99_time' "$PARALLEL_SEARCH_RESULTS_FILE") +SEARCH_TIME=$(jq -r '.results.total_time' "$PARALLEL_SEARCH_RESULTS_FILE") +NO_UPSERT_SEARCH_TIME=$(jq -r '.results.total_time' "$SEARCH_RESULT_FILE") + +UPLOAD_TIME=$(jq -r '.results.upload_time' "$PARALLEL_UPLOAD_RESULTS_FILE") +INDEXING_TIME=$(jq -r '.results.total_time' "$PARALLEL_UPLOAD_RESULTS_FILE") + +QDRANT_COMMIT=$(jq -r '.commit' "$ROOT_API_RESPONSE_FILE") + +MEASURE_TIMESTAMP=${MEASURE_TIMESTAMP:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")} + + +docker run --name "vector-db" --rm jbergknoff/postgresql-client "postgresql://qdrant:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/postgres" -c " +INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestamp, upload_time, indexing_time, rps, mean_precisions, p95_time, p99_time, search_time, no_upsert_search_time) +VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${SEARCH_TIME}, ${NO_UPSERT_SEARCH_TIME}); +" + From a26483bbd90e37c0775591e2b265ace464fb3f12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Vis=C3=A9e?= Date: Thu, 2 Jan 2025 19:30:49 +0100 Subject: [PATCH 055/101] Allow parallel optimizations in Qdrant after uploading (#208) --- engine/clients/qdrant/upload.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index a5c2dbbe..d6f19c2b 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -62,7 +62,8 @@ def post_upload(cls, _distance): collection_name=QDRANT_COLLECTION_NAME, optimizer_config=OptimizersConfigDiff( # indexing_threshold=10_000, - max_optimization_threads=1, + # Set to a high number to not apply limits, already limited by CPU budget + max_optimization_threads=100_000, ), ) From 8c37878853b23f9a70fc54beae196309b25cc2fd Mon Sep 17 00:00:00 2001 From: tellet-q Date: Fri, 3 Jan 2025 12:49:32 +0100 Subject: [PATCH 056/101] Only run runLoadTimeBenchmark once per day --- .github/workflows/continuous-benchmark.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 8a25bf69..095f3abb 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -185,7 +185,7 @@ jobs: runLoadTimeBenchmark: runs-on: ubuntu-latest needs: runBenchmark - if: ${{ always() }} + if: ${{ always() && (github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event.schedule == '0 0 * * *') }} steps: - uses: actions/checkout@v3 - uses: webfactory/ssh-agent@v0.8.0 From bb482e18ffb8b214ff64fa83581a62bbdf289bc2 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Fri, 3 Jan 2025 12:57:15 +0100 Subject: [PATCH 057/101] Add comment --- .github/workflows/continuous-benchmark.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 095f3abb..f604010f 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -182,6 +182,7 @@ jobs: env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + # Schedule this benchmark to run once a day for the sake of saving on S3 costs. runLoadTimeBenchmark: runs-on: ubuntu-latest needs: runBenchmark From f4cb7919f7ae5ef50f425fbe653f43d1a1f17127 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Fri, 3 Jan 2025 13:46:43 +0100 Subject: [PATCH 058/101] Split into 2 and introduce concurrency groups --- .github/workflows/continuous-benchmark-2.yaml | 119 ++++++++++++++++++ .github/workflows/continuous-benchmark.yaml | 114 ++--------------- 2 files changed, 126 insertions(+), 107 deletions(-) create mode 100644 .github/workflows/continuous-benchmark-2.yaml diff --git a/.github/workflows/continuous-benchmark-2.yaml b/.github/workflows/continuous-benchmark-2.yaml new file mode 100644 index 00000000..92ac8748 --- /dev/null +++ b/.github/workflows/continuous-benchmark-2.yaml @@ -0,0 +1,119 @@ +name: Continuous Benchmark + +on: + repository_dispatch: + workflow_dispatch: + schedule: + # Run every day at midnight + - cron: "0 0 * * *" + +# Restrict to only running this workflow one at a time. +# Any new runs will be queued until the previous run is complete. +# Any existing pending runs will be cancelled and replaced with current run. +concurrency: + group: continuous-benchmark + +jobs: + # Schedule this benchmark to run once a day for the sake of saving on S3 costs. + runLoadTimeBenchmark: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Benches + id: benches + run: | + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + export SERVER_NAME="benchmark-server-3" + bash -x tools/setup_ci.sh + + set +e + + # Benchmark collection load time + export BENCHMARK_STRATEGY="collection-reload" + + declare -A DATASET_TO_ENGINE + declare -A DATASET_TO_URL + DATASET_TO_ENGINE["all-payloads-default"]="qdrant-continuous-benchmark-snapshot" + DATASET_TO_ENGINE["all-payloads-on-disk"]="qdrant-continuous-benchmark-snapshot" + DATASET_TO_ENGINE["all-payloads-default-sparse"]="qdrant-continuous-benchmark-snapshot" + DATASET_TO_ENGINE["all-payloads-on-disk-sparse"]="qdrant-continuous-benchmark-snapshot" + + export STORAGE_URL="https://storage.googleapis.com/qdrant-benchmark-snapshots/all-payloads" + DATASET_TO_URL["all-payloads-default"]="${STORAGE_URL}/benchmark-all-payloads-500k-768-default.snapshot" + DATASET_TO_URL["all-payloads-on-disk"]="${STORAGE_URL}/benchmark-all-payloads-500k-768-on-disk.snapshot" + DATASET_TO_URL["all-payloads-default-sparse"]="${STORAGE_URL}/benchmark-all-payloads-500k-sparse-default.snapshot" + DATASET_TO_URL["all-payloads-on-disk-sparse"]="${STORAGE_URL}/benchmark-all-payloads-500k-sparse-on-disk.snapshot" + + set +e + + for dataset in "${!DATASET_TO_ENGINE[@]}"; do + export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]} + export DATASETS=$dataset + export SNAPSHOT_URL=${DATASET_TO_URL[$dataset]} + + # Benchmark the dev branch: + export QDRANT_VERSION=ghcr/dev + timeout 30m bash -x tools/run_ci.sh + + # Benchmark the master branch: + export QDRANT_VERSION=docker/master + timeout 30m bash -x tools/run_ci.sh + done + + set -e + - name: Fail job if any of the benches failed + if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' + run: exit 1 + - name: Send Notification + if: failure() || cancelled() + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "text": "CI benchmarks (runLoadTimeBenchmark) run status: ${{ job.status }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "CI benchmarks (runLoadTimeBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + } + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index f604010f..2cc1b5cd 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -7,6 +7,12 @@ on: # Run every 4 hours - cron: "0 */4 * * *" +# Restrict to only running this workflow one at a time. +# Any new runs will be queued until the previous run is complete. +# Any existing pending runs will be cancelled and replaced with current run. +concurrency: + group: continuous-benchmark + jobs: runBenchmark: runs-on: ubuntu-latest @@ -182,115 +188,9 @@ jobs: env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK - # Schedule this benchmark to run once a day for the sake of saving on S3 costs. - runLoadTimeBenchmark: - runs-on: ubuntu-latest - needs: runBenchmark - if: ${{ always() && (github.event_name == 'workflow_dispatch' || github.event_name == 'repository_dispatch' || github.event.schedule == '0 0 * * *') }} - steps: - - uses: actions/checkout@v3 - - uses: webfactory/ssh-agent@v0.8.0 - with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - - name: Benches - id: benches - run: | - export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} - export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} - export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} - export SERVER_NAME="benchmark-server-3" - bash -x tools/setup_ci.sh - - set +e - - # Benchmark collection load time - export BENCHMARK_STRATEGY="collection-reload" - - declare -A DATASET_TO_ENGINE - declare -A DATASET_TO_URL - DATASET_TO_ENGINE["all-payloads-default"]="qdrant-continuous-benchmark-snapshot" - DATASET_TO_ENGINE["all-payloads-on-disk"]="qdrant-continuous-benchmark-snapshot" - DATASET_TO_ENGINE["all-payloads-default-sparse"]="qdrant-continuous-benchmark-snapshot" - DATASET_TO_ENGINE["all-payloads-on-disk-sparse"]="qdrant-continuous-benchmark-snapshot" - - export STORAGE_URL="https://storage.googleapis.com/qdrant-benchmark-snapshots/all-payloads" - DATASET_TO_URL["all-payloads-default"]="${STORAGE_URL}/benchmark-all-payloads-500k-768-default.snapshot" - DATASET_TO_URL["all-payloads-on-disk"]="${STORAGE_URL}/benchmark-all-payloads-500k-768-on-disk.snapshot" - DATASET_TO_URL["all-payloads-default-sparse"]="${STORAGE_URL}/benchmark-all-payloads-500k-sparse-default.snapshot" - DATASET_TO_URL["all-payloads-on-disk-sparse"]="${STORAGE_URL}/benchmark-all-payloads-500k-sparse-on-disk.snapshot" - - set +e - - for dataset in "${!DATASET_TO_ENGINE[@]}"; do - export ENGINE_NAME=${DATASET_TO_ENGINE[$dataset]} - export DATASETS=$dataset - export SNAPSHOT_URL=${DATASET_TO_URL[$dataset]} - - # Benchmark the dev branch: - export QDRANT_VERSION=ghcr/dev - timeout 30m bash -x tools/run_ci.sh - - # Benchmark the master branch: - export QDRANT_VERSION=docker/master - timeout 30m bash -x tools/run_ci.sh - done - - set -e - - name: Fail job if any of the benches failed - if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' - run: exit 1 - - name: Send Notification - if: failure() || cancelled() - uses: slackapi/slack-github-action@v1.26.0 - with: - payload: | - { - "text": "CI benchmarks (runLoadTimeBenchmark) run status: ${{ job.status }}", - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "CI benchmarks (runLoadTimeBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" - } - } - ] - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} - SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK - runParallelBenchmark: runs-on: ubuntu-latest - needs: [ runLoadTimeBenchmark, runTenantsBenchmark ] + needs: runTenantsBenchmark if: ${{ always() }} steps: - uses: actions/checkout@v3 From 6bc2439893d23c86ce102b0f249f4e77309e8d0f Mon Sep 17 00:00:00 2001 From: tellet-q Date: Fri, 3 Jan 2025 13:52:31 +0100 Subject: [PATCH 059/101] Update name --- .github/workflows/continuous-benchmark-2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/continuous-benchmark-2.yaml b/.github/workflows/continuous-benchmark-2.yaml index 92ac8748..1ae63e31 100644 --- a/.github/workflows/continuous-benchmark-2.yaml +++ b/.github/workflows/continuous-benchmark-2.yaml @@ -1,4 +1,4 @@ -name: Continuous Benchmark +name: Continuous Benchmark 2 on: repository_dispatch: From 781e2f6333074362d0694bfda17995e8c0f637b3 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Thu, 9 Jan 2025 11:30:22 +0100 Subject: [PATCH 060/101] Add volume to persist datasets --- .../docker-compose.yaml | 3 +++ .../docker-compose.yaml | 3 +++ .../qdrant-continuous-benchmarks/docker-compose.yaml | 6 ++++++ 3 files changed, 12 insertions(+) diff --git a/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml index a1b0c4a9..a1956db2 100644 --- a/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml @@ -11,6 +11,7 @@ services: - "6334:6334" volumes: - qdrant_storage:/qdrant/storage + - ci_datasets:/code/datasets logging: driver: "json-file" options: @@ -24,3 +25,5 @@ services: volumes: qdrant_storage: name: "qdrant_storage" + ci_datasets: + name: "ci_datasets" \ No newline at end of file diff --git a/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml index cccc9b1c..31b97033 100644 --- a/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml @@ -9,6 +9,7 @@ services: - "6334:6334" volumes: - qdrant_storage:/qdrant/storage + - ci_datasets:/code/datasets logging: driver: "json-file" options: @@ -22,3 +23,5 @@ services: volumes: qdrant_storage: name: "qdrant_storage" + ci_datasets: + name: "ci_datasets" \ No newline at end of file diff --git a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml index ada808d6..5c4e0b8c 100644 --- a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml @@ -7,6 +7,8 @@ services: ports: - "6333:6333" - "6334:6334" + volumes: + - ci_datasets:/code/datasets logging: driver: "json-file" options: @@ -16,3 +18,7 @@ services: resources: limits: memory: 25Gb + +volumes: + ci_datasets: + name: "ci_datasets" From f562af5a8674aa6db257f5c5cc303ca24f2ffed9 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Thu, 9 Jan 2025 12:04:03 +0100 Subject: [PATCH 061/101] Add volume to persist datasets --- .../docker-compose.yaml | 5 +---- .../docker-compose.yaml | 5 +---- .../qdrant-continuous-benchmarks/docker-compose.yaml | 8 +------- tools/run_experiment.sh | 6 ++++++ 4 files changed, 9 insertions(+), 15 deletions(-) diff --git a/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml index a1956db2..d43c9db3 100644 --- a/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml @@ -11,7 +11,6 @@ services: - "6334:6334" volumes: - qdrant_storage:/qdrant/storage - - ci_datasets:/code/datasets logging: driver: "json-file" options: @@ -24,6 +23,4 @@ services: volumes: qdrant_storage: - name: "qdrant_storage" - ci_datasets: - name: "ci_datasets" \ No newline at end of file + name: "qdrant_storage" \ No newline at end of file diff --git a/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml index 31b97033..41d33504 100644 --- a/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml @@ -9,7 +9,6 @@ services: - "6334:6334" volumes: - qdrant_storage:/qdrant/storage - - ci_datasets:/code/datasets logging: driver: "json-file" options: @@ -22,6 +21,4 @@ services: volumes: qdrant_storage: - name: "qdrant_storage" - ci_datasets: - name: "ci_datasets" \ No newline at end of file + name: "qdrant_storage" \ No newline at end of file diff --git a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml index 5c4e0b8c..92cad39d 100644 --- a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml @@ -7,8 +7,6 @@ services: ports: - "6333:6333" - "6334:6334" - volumes: - - ci_datasets:/code/datasets logging: driver: "json-file" options: @@ -17,8 +15,4 @@ services: deploy: resources: limits: - memory: 25Gb - -volumes: - ci_datasets: - name: "ci_datasets" + memory: 25Gb \ No newline at end of file diff --git a/tools/run_experiment.sh b/tools/run_experiment.sh index ee23bbba..77458707 100644 --- a/tools/run_experiment.sh +++ b/tools/run_experiment.sh @@ -45,6 +45,8 @@ if [[ "$EXPERIMENT_MODE" != "snapshot" ]]; then docker rmi --force qdrant/vector-db-benchmark:latest || true fi +docker volume create ci-datasets + if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; then echo "EXPERIMENT_MODE=$EXPERIMENT_MODE" docker run \ @@ -52,6 +54,7 @@ if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; t -it \ --name ci-benchmark-upload \ -v "$HOME/results:/code/results" \ + -v "ci-datasets:/code/datasets" \ qdrant/vector-db-benchmark:latest \ python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-search fi @@ -70,6 +73,7 @@ if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "search" ]]; t -it \ --name ci-benchmark-search \ -v "$HOME/results:/code/results" \ + -v "ci-datasets:/code/datasets" \ qdrant/vector-db-benchmark:latest \ python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-upload fi @@ -85,6 +89,7 @@ if [[ "$EXPERIMENT_MODE" == "parallel" ]]; then --rm \ --name ci-benchmark-upload \ -v "$HOME/results/parallel:/code/results" \ + -v "ci-datasets:/code/datasets" \ qdrant/vector-db-benchmark:latest \ python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-search --skip-configure & UPLOAD_PID=$! @@ -94,6 +99,7 @@ if [[ "$EXPERIMENT_MODE" == "parallel" ]]; then --rm \ --name ci-benchmark-search \ -v "$HOME/results/parallel:/code/results" \ + -v "ci-datasets:/code/datasets" \ qdrant/vector-db-benchmark:latest \ python run.py --engines "${ENGINE_NAME}" --datasets "${DATASETS}" --host "${PRIVATE_IP_OF_THE_SERVER}" --no-skip-if-exists --skip-upload & SEARCH_PID=$! From 740f178adff8236b8f6b55ffafd07d498cc84f6d Mon Sep 17 00:00:00 2001 From: tellet-q Date: Thu, 9 Jan 2025 12:04:15 +0100 Subject: [PATCH 062/101] Debug --- .github/workflows/continuous-benchmark.yaml | 344 ++++++++++---------- 1 file changed, 172 insertions(+), 172 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 2cc1b5cd..982c5762 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -102,175 +102,175 @@ jobs: env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK - runTenantsBenchmark: - runs-on: ubuntu-latest - needs: runBenchmark - if: ${{ always() }} - steps: - - uses: actions/checkout@v3 - - uses: webfactory/ssh-agent@v0.8.0 - with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - - name: Benches - id: benches - run: | - export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} - export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} - export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} - bash -x tools/setup_ci.sh - - set +e - - # Benchmark filtered search by tenants with mem limitation - - export ENGINE_NAME="qdrant-all-on-disk-scalar-q" - export DATASETS="random-768-100-tenants" - export BENCHMARK_STRATEGY="tenants" - export CONTAINER_MEM_LIMIT=160mb - - # Benchmark the dev branch: - export QDRANT_VERSION=ghcr/dev - timeout 30m bash -x tools/run_ci.sh - - # Benchmark the master branch: - export QDRANT_VERSION=docker/master - timeout 30m bash -x tools/run_ci.sh - - set -e - - name: Fail job if any of the benches failed - if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' - run: exit 1 - - name: Send Notification - if: failure() || cancelled() - uses: slackapi/slack-github-action@v1.26.0 - with: - payload: | - { - "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" - } - } - ] - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} - SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK - runParallelBenchmark: - runs-on: ubuntu-latest - needs: runTenantsBenchmark - if: ${{ always() }} - steps: - - uses: actions/checkout@v3 - - uses: webfactory/ssh-agent@v0.8.0 - with: - ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} - - name: Benches - id: benches - run: | - export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} - export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} - export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} - bash -x tools/setup_ci.sh - - set +e - - # Benchmark parallel search&upload - - export ENGINE_NAME="qdrant-continuous-benchmark" - export DATASETS="laion-small-clip" - export BENCHMARK_STRATEGY="parallel" - export POSTGRES_TABLE="benchmark_parallel_search_upload" - - # Benchmark the dev branch: - export QDRANT_VERSION=ghcr/dev - timeout 30m bash -x tools/run_ci.sh - - # Benchmark the master branch: - export QDRANT_VERSION=docker/master - timeout 30m bash -x tools/run_ci.sh - - set -e - - name: Fail job if any of the benches failed - if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' - run: exit 1 - - name: Send Notification - if: failure() || cancelled() - uses: slackapi/slack-github-action@v1.26.0 - with: - payload: | - { - "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" - } - } - ] - } - env: - SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} - SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK \ No newline at end of file +# runTenantsBenchmark: +# runs-on: ubuntu-latest +# needs: runBenchmark +# if: ${{ always() }} +# steps: +# - uses: actions/checkout@v3 +# - uses: webfactory/ssh-agent@v0.8.0 +# with: +# ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} +# - name: Benches +# id: benches +# run: | +# export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} +# export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} +# export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} +# bash -x tools/setup_ci.sh +# +# set +e +# +# # Benchmark filtered search by tenants with mem limitation +# +# export ENGINE_NAME="qdrant-all-on-disk-scalar-q" +# export DATASETS="random-768-100-tenants" +# export BENCHMARK_STRATEGY="tenants" +# export CONTAINER_MEM_LIMIT=160mb +# +# # Benchmark the dev branch: +# export QDRANT_VERSION=ghcr/dev +# timeout 30m bash -x tools/run_ci.sh +# +# # Benchmark the master branch: +# export QDRANT_VERSION=docker/master +# timeout 30m bash -x tools/run_ci.sh +# +# set -e +# - name: Fail job if any of the benches failed +# if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' +# run: exit 1 +# - name: Send Notification +# if: failure() || cancelled() +# uses: slackapi/slack-github-action@v1.26.0 +# with: +# payload: | +# { +# "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", +# "blocks": [ +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." +# } +# }, +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." +# } +# }, +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." +# } +# }, +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." +# } +# }, +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" +# } +# } +# ] +# } +# env: +# SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} +# SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK +# runParallelBenchmark: +# runs-on: ubuntu-latest +# needs: runTenantsBenchmark +# if: ${{ always() }} +# steps: +# - uses: actions/checkout@v3 +# - uses: webfactory/ssh-agent@v0.8.0 +# with: +# ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} +# - name: Benches +# id: benches +# run: | +# export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} +# export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} +# export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} +# bash -x tools/setup_ci.sh +# +# set +e +# +# # Benchmark parallel search&upload +# +# export ENGINE_NAME="qdrant-continuous-benchmark" +# export DATASETS="laion-small-clip" +# export BENCHMARK_STRATEGY="parallel" +# export POSTGRES_TABLE="benchmark_parallel_search_upload" +# +# # Benchmark the dev branch: +# export QDRANT_VERSION=ghcr/dev +# timeout 30m bash -x tools/run_ci.sh +# +# # Benchmark the master branch: +# export QDRANT_VERSION=docker/master +# timeout 30m bash -x tools/run_ci.sh +# +# set -e +# - name: Fail job if any of the benches failed +# if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' +# run: exit 1 +# - name: Send Notification +# if: failure() || cancelled() +# uses: slackapi/slack-github-action@v1.26.0 +# with: +# payload: | +# { +# "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", +# "blocks": [ +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." +# } +# }, +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." +# } +# }, +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." +# } +# }, +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." +# } +# }, +# { +# "type": "section", +# "text": { +# "type": "mrkdwn", +# "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" +# } +# } +# ] +# } +# env: +# SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} +# SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK \ No newline at end of file From b889ca3a74eb07cf6f7cc220574f9d64a43f0841 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Thu, 9 Jan 2025 13:59:23 +0100 Subject: [PATCH 063/101] Update datasets.json during benches --- tools/run_client_script.sh | 1 + tools/run_experiment.sh | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index 1ca6a9f9..13c810f0 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -39,6 +39,7 @@ if [[ "$EXPERIMENT_MODE" == "snapshot" ]]; then else scp "${SCRIPT_PATH}/run_experiment.sh" "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/run_experiment.sh" + scp "${SCRIPT_PATH}/../datasets/datasets.json" "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/datasets.json" RUN_EXPERIMENT="ENGINE_NAME=${ENGINE_NAME} \ DATASETS=${DATASETS} \ diff --git a/tools/run_experiment.sh b/tools/run_experiment.sh index 77458707..b01be1e7 100644 --- a/tools/run_experiment.sh +++ b/tools/run_experiment.sh @@ -45,7 +45,14 @@ if [[ "$EXPERIMENT_MODE" != "snapshot" ]]; then docker rmi --force qdrant/vector-db-benchmark:latest || true fi +echo "Ensure datasets volume exists and contains latest datasets.json" docker volume create ci-datasets +if [[ -f "$HOME/datasets.json" ]]; then + echo "Found datasets.json, update the volume" + mv ~/datasets.json "$(docker volume inspect ci-datasets -f '{{ .Mountpoint }}')" +else + echo "datasets.json is missing, do not update the volume" +fi if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; then echo "EXPERIMENT_MODE=$EXPERIMENT_MODE" From 6ac0f4960e79a245d13065c1ab7a51329b64c5b3 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Thu, 9 Jan 2025 15:02:33 +0100 Subject: [PATCH 064/101] Revert debug --- .github/workflows/continuous-benchmark.yaml | 344 ++++++++++---------- 1 file changed, 172 insertions(+), 172 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 982c5762..2cc1b5cd 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -102,175 +102,175 @@ jobs: env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK -# runTenantsBenchmark: -# runs-on: ubuntu-latest -# needs: runBenchmark -# if: ${{ always() }} -# steps: -# - uses: actions/checkout@v3 -# - uses: webfactory/ssh-agent@v0.8.0 -# with: -# ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} -# - name: Benches -# id: benches -# run: | -# export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} -# export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} -# export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} -# bash -x tools/setup_ci.sh -# -# set +e -# -# # Benchmark filtered search by tenants with mem limitation -# -# export ENGINE_NAME="qdrant-all-on-disk-scalar-q" -# export DATASETS="random-768-100-tenants" -# export BENCHMARK_STRATEGY="tenants" -# export CONTAINER_MEM_LIMIT=160mb -# -# # Benchmark the dev branch: -# export QDRANT_VERSION=ghcr/dev -# timeout 30m bash -x tools/run_ci.sh -# -# # Benchmark the master branch: -# export QDRANT_VERSION=docker/master -# timeout 30m bash -x tools/run_ci.sh -# -# set -e -# - name: Fail job if any of the benches failed -# if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' -# run: exit 1 -# - name: Send Notification -# if: failure() || cancelled() -# uses: slackapi/slack-github-action@v1.26.0 -# with: -# payload: | -# { -# "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", -# "blocks": [ -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." -# } -# }, -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." -# } -# }, -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." -# } -# }, -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." -# } -# }, -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" -# } -# } -# ] -# } -# env: -# SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} -# SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK -# runParallelBenchmark: -# runs-on: ubuntu-latest -# needs: runTenantsBenchmark -# if: ${{ always() }} -# steps: -# - uses: actions/checkout@v3 -# - uses: webfactory/ssh-agent@v0.8.0 -# with: -# ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} -# - name: Benches -# id: benches -# run: | -# export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} -# export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} -# export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} -# bash -x tools/setup_ci.sh -# -# set +e -# -# # Benchmark parallel search&upload -# -# export ENGINE_NAME="qdrant-continuous-benchmark" -# export DATASETS="laion-small-clip" -# export BENCHMARK_STRATEGY="parallel" -# export POSTGRES_TABLE="benchmark_parallel_search_upload" -# -# # Benchmark the dev branch: -# export QDRANT_VERSION=ghcr/dev -# timeout 30m bash -x tools/run_ci.sh -# -# # Benchmark the master branch: -# export QDRANT_VERSION=docker/master -# timeout 30m bash -x tools/run_ci.sh -# -# set -e -# - name: Fail job if any of the benches failed -# if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' -# run: exit 1 -# - name: Send Notification -# if: failure() || cancelled() -# uses: slackapi/slack-github-action@v1.26.0 -# with: -# payload: | -# { -# "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", -# "blocks": [ -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." -# } -# }, -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." -# } -# }, -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." -# } -# }, -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." -# } -# }, -# { -# "type": "section", -# "text": { -# "type": "mrkdwn", -# "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" -# } -# } -# ] -# } -# env: -# SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} -# SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK \ No newline at end of file + runTenantsBenchmark: + runs-on: ubuntu-latest + needs: runBenchmark + if: ${{ always() }} + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Benches + id: benches + run: | + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + bash -x tools/setup_ci.sh + + set +e + + # Benchmark filtered search by tenants with mem limitation + + export ENGINE_NAME="qdrant-all-on-disk-scalar-q" + export DATASETS="random-768-100-tenants" + export BENCHMARK_STRATEGY="tenants" + export CONTAINER_MEM_LIMIT=160mb + + # Benchmark the dev branch: + export QDRANT_VERSION=ghcr/dev + timeout 30m bash -x tools/run_ci.sh + + # Benchmark the master branch: + export QDRANT_VERSION=docker/master + timeout 30m bash -x tools/run_ci.sh + + set -e + - name: Fail job if any of the benches failed + if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' + run: exit 1 + - name: Send Notification + if: failure() || cancelled() + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + } + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK + runParallelBenchmark: + runs-on: ubuntu-latest + needs: runTenantsBenchmark + if: ${{ always() }} + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Benches + id: benches + run: | + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + bash -x tools/setup_ci.sh + + set +e + + # Benchmark parallel search&upload + + export ENGINE_NAME="qdrant-continuous-benchmark" + export DATASETS="laion-small-clip" + export BENCHMARK_STRATEGY="parallel" + export POSTGRES_TABLE="benchmark_parallel_search_upload" + + # Benchmark the dev branch: + export QDRANT_VERSION=ghcr/dev + timeout 30m bash -x tools/run_ci.sh + + # Benchmark the master branch: + export QDRANT_VERSION=docker/master + timeout 30m bash -x tools/run_ci.sh + + set -e + - name: Fail job if any of the benches failed + if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' + run: exit 1 + - name: Send Notification + if: failure() || cancelled() + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + } + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK \ No newline at end of file From 53c23d0fb0f1d3223ff48ddc88dad421b2d8fa34 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Thu, 9 Jan 2025 15:03:01 +0100 Subject: [PATCH 065/101] Add a workflow to remove datasets volume --- .github/workflows/update-datasets.yaml | 52 ++++++++++++++++++++++++++ tools/run_client_remove_volume.sh | 19 ++++++++++ 2 files changed, 71 insertions(+) create mode 100644 .github/workflows/update-datasets.yaml create mode 100755 tools/run_client_remove_volume.sh diff --git a/.github/workflows/update-datasets.yaml b/.github/workflows/update-datasets.yaml new file mode 100644 index 00000000..587145f1 --- /dev/null +++ b/.github/workflows/update-datasets.yaml @@ -0,0 +1,52 @@ +name: Clean Datasets + +on: + repository_dispatch: + workflow_dispatch: + schedule: + # Run every month on the 1st day at 3 am + - cron: "0 3 1 * *" + +concurrency: + group: continuous-benchmark + +# This removes the ci-datasets volume from client machine. +# The next run of Continuous Benchmark will create the volume again and download all the datasets. +jobs: + removeDatasetsVolume: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Benches + id: benches + run: | + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + + set +e + + timeout 10m bash -x tools/run_client_remove_volume.sh + + set -e + - name: Send Notification + if: failure() + uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "text": "Failed to remove the datasets volume (removeDatasetsVolume), run status: ${{ job.status }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + } + } + ] + } + env: + SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK diff --git a/tools/run_client_remove_volume.sh b/tools/run_client_remove_volume.sh new file mode 100755 index 00000000..94947327 --- /dev/null +++ b/tools/run_client_remove_volume.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' +set -euo pipefail + +CLOUD_NAME=${CLOUD_NAME:-"hetzner"} +SERVER_USERNAME=${SERVER_USERNAME:-"root"} + +SCRIPT=$(realpath "$0") +SCRIPT_PATH=$(dirname "$SCRIPT") + +BENCH_CLIENT_NAME=${CLIENT_NAME:-"benchmark-client-1"} + +IP_OF_THE_CLIENT=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_public_ip.sh" "$BENCH_CLIENT_NAME") + +echo "Remove ci-datasets volume from client" +RUN_CMD="docker volume rm -f ci-datasets || true" + +ssh -tt -o ServerAliveInterval=120 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "${RUN_CMD}" From ffe5c4b469fb6369294b2cda5c71e80dd0482a55 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Thu, 9 Jan 2025 15:05:57 +0100 Subject: [PATCH 066/101] Revert debug --- .../qdrant-continuous-benchmarks-snapshot/docker-compose.yaml | 2 +- .../docker-compose.yaml | 2 +- engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml index d43c9db3..a1b0c4a9 100644 --- a/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks-snapshot/docker-compose.yaml @@ -23,4 +23,4 @@ services: volumes: qdrant_storage: - name: "qdrant_storage" \ No newline at end of file + name: "qdrant_storage" diff --git a/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml index 41d33504..cccc9b1c 100644 --- a/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks-with-volume/docker-compose.yaml @@ -21,4 +21,4 @@ services: volumes: qdrant_storage: - name: "qdrant_storage" \ No newline at end of file + name: "qdrant_storage" diff --git a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml index 92cad39d..ada808d6 100644 --- a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml @@ -15,4 +15,4 @@ services: deploy: resources: limits: - memory: 25Gb \ No newline at end of file + memory: 25Gb From 2b45d53b8350423c284745da9a1ba0c8adc5f5b9 Mon Sep 17 00:00:00 2001 From: tellet-q Date: Thu, 9 Jan 2025 15:21:11 +0100 Subject: [PATCH 067/101] Rename file --- .github/workflows/{update-datasets.yaml => clean-datasets.yaml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{update-datasets.yaml => clean-datasets.yaml} (100%) diff --git a/.github/workflows/update-datasets.yaml b/.github/workflows/clean-datasets.yaml similarity index 100% rename from .github/workflows/update-datasets.yaml rename to .github/workflows/clean-datasets.yaml From c805233e3026e0d96f5a2bcfd510ad3188684f32 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Mon, 13 Jan 2025 16:25:10 +0100 Subject: [PATCH 068/101] Add ServerAliveInterval and ServerAliveCountMax to rsync and more (#220) --- tools/qdrant_collect_stats.sh | 8 ++++---- tools/run_client_script.sh | 12 ++++++------ tools/sync_servers.sh | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tools/qdrant_collect_stats.sh b/tools/qdrant_collect_stats.sh index ef72caba..67ae2c9a 100644 --- a/tools/qdrant_collect_stats.sh +++ b/tools/qdrant_collect_stats.sh @@ -17,18 +17,18 @@ BENCH_SERVER_NAME=${SERVER_NAME:-"benchmark-server-1"} IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_public_ip.sh" "$BENCH_SERVER_NAME") -VM_RSS_MEMORY_USAGE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "grep VmRSS /proc/\$(pidof qdrant)/status | awk '{print \$2}'") -RSS_ANON_MEMORY_USAGE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "grep RssAnon /proc/\$(pidof qdrant)/status | awk '{print \$2}'") +VM_RSS_MEMORY_USAGE=$(ssh -tt -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "grep VmRSS /proc/\$(pidof qdrant)/status | awk '{print \$2}'") +RSS_ANON_MEMORY_USAGE=$(ssh -tt -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "grep RssAnon /proc/\$(pidof qdrant)/status | awk '{print \$2}'") CURRENT_DATE=$(date +%Y-%m-%d-%H-%M-%S) echo "$VM_RSS_MEMORY_USAGE" > results/vm-rss-memory-usage-"${CURRENT_DATE}".txt echo "$RSS_ANON_MEMORY_USAGE" > results/rss-anon-memory-usage-"${CURRENT_DATE}".txt -ROOT_API_RESPONSE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "curl -s http://localhost:6333/") +ROOT_API_RESPONSE=$(ssh -tt -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "curl -s http://localhost:6333/") echo "$ROOT_API_RESPONSE" > results/root-api-"${CURRENT_DATE}".json -TELEMETRY_API_RESPONSE=$(ssh -t "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "curl -s http://localhost:6333/telemetry?details_level=10") +TELEMETRY_API_RESPONSE=$(ssh -tt -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "curl -s http://localhost:6333/telemetry?details_level=10") echo "$TELEMETRY_API_RESPONSE" > results/telemetry-api-"${CURRENT_DATE}".json diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index 13c810f0..3f9210aa 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -56,20 +56,20 @@ result_files_arr=() result_parallel_files_arr=() if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; then - UPLOAD_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-upload-*.json | head -n 1") + UPLOAD_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-upload-*.json | head -n 1") result_files_arr+=("$UPLOAD_RESULT_FILE") fi if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "search" ]]; then - SEARCH_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-search-*.json | head -n 1") + SEARCH_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-search-*.json | head -n 1") result_files_arr+=("$SEARCH_RESULT_FILE") fi if [[ "$EXPERIMENT_MODE" == "parallel" ]]; then - UPLOAD_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/parallel/*-upload-*.json | head -n 1") + UPLOAD_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/parallel/*-upload-*.json | head -n 1") result_parallel_files_arr+=("$UPLOAD_RESULT_FILE") - SEARCH_RESULT_FILE=$(ssh "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/parallel/*-search-*.json | head -n 1") + SEARCH_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/parallel/*-search-*.json | head -n 1") result_parallel_files_arr+=("$SEARCH_RESULT_FILE") fi @@ -78,9 +78,9 @@ mkdir -p results/parallel for RESULT_FILE in "${result_files_arr[@]}"; do # -p preseves modification time, access time, and modes (but not change time) - scp -p "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/${RESULT_FILE}" "./results" + scp -o ServerAliveInterval=10 -o ServerAliveCountMax=10 -p "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/${RESULT_FILE}" "./results" done for RESULT_FILE in "${result_parallel_files_arr[@]}"; do - scp -p "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/${RESULT_FILE}" "./results/parallel" + scp -o ServerAliveInterval=10 -o ServerAliveCountMax=10 -p "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}:~/${RESULT_FILE}" "./results/parallel" done diff --git a/tools/sync_servers.sh b/tools/sync_servers.sh index 7304cbb7..15bf2835 100755 --- a/tools/sync_servers.sh +++ b/tools/sync_servers.sh @@ -2,5 +2,5 @@ PROJECT_PATH=$(realpath "$(dirname "$0")/..") -rsync -avP --mkpath\ +rsync -e "ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10" -avP --mkpath\ "$PROJECT_PATH/engine/servers/" $1:./projects/vector-db-benchmark/engine/servers/ From eba0f518684ac9871db7d74880db88523acebea1 Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 09:33:43 +0100 Subject: [PATCH 069/101] [pre-commit.ci] pre-commit suggestions (#210) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [pre-commit.ci] pre-commit suggestions updates: - [github.com/pre-commit/pre-commit-hooks: v4.6.0 → v5.0.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.6.0...v5.0.0) - [github.com/psf/black: 24.4.2 → 24.10.0](https://github.com/psf/black/compare/24.4.2...24.10.0) - [github.com/astral-sh/ruff-pre-commit: v0.5.0 → v0.8.6](https://github.com/astral-sh/ruff-pre-commit/compare/v0.5.0...v0.8.6) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .pre-commit-config.yaml | 6 +++--- scripts/process-benchmarks.ipynb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f443a9fd..99c8a8e6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -11,13 +11,13 @@ ci: repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.6.0 + rev: v5.0.0 hooks: - id: trailing-whitespace - id: check-added-large-files - repo: https://github.com/psf/black - rev: 24.4.2 + rev: 24.10.0 hooks: - id: black name: "Black: The uncompromising Python code formatter" @@ -30,7 +30,7 @@ repos: args: ["--profile", "black"] - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.5.0 + rev: v0.8.6 hooks: # Run the linter. - id: ruff diff --git a/scripts/process-benchmarks.ipynb b/scripts/process-benchmarks.ipynb index 77accf29..50a9393e 100644 --- a/scripts/process-benchmarks.ipynb +++ b/scripts/process-benchmarks.ipynb @@ -245,7 +245,7 @@ "format = '%Y-%M-%dT%H:%M:%S'\n", "now = datetime.now().replace(tzinfo=timezone.utc).strftime(format)\n", "\n", - "Path(f\"results.json\").write_text(json.dumps(json_results, indent=2))\n", + "Path(\"results.json\").write_text(json.dumps(json_results, indent=2))\n", "Path(f\"results-{now}.json\").write_text(json.dumps(json_results, indent=2))\n", "\n", "print(json_results[-1], len(json_results))\n", From c8afe7db478a9ab7de23601f67655bff7a237be4 Mon Sep 17 00:00:00 2001 From: LukasWestholt Date: Wed, 15 Jan 2025 08:57:03 +0100 Subject: [PATCH 070/101] fix: weaviate-client version constraint (#199) (#200) --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fb921b58..e59c5cd8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ qdrant-client = "^1.11.0" typer = "^0.6.1" jsons = "^1.6.3" h5py = "^3.7.0" -weaviate-client = "^4.5.0" +weaviate-client = ">= 4.5, < 4.7" elasticsearch = "^8.10.0" pymilvus = "^2.4.1" redis = "^5.0.1" From 532c948799e074cc5d2164c8fdba18cd0da29040 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Wed, 15 Jan 2025 10:13:44 +0100 Subject: [PATCH 071/101] ci/fix-poetry-install (#221) * Fix package-mode * Update deps --- poetry.lock | 1598 ++++++++++++++++++++++-------------------------- pyproject.toml | 3 +- 2 files changed, 722 insertions(+), 879 deletions(-) diff --git a/poetry.lock b/poetry.lock index ae96c371..aa62066d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -16,13 +16,13 @@ typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.9\""} [[package]] name = "anyio" -version = "4.4.0" +version = "4.5.2" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" files = [ - {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, - {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, + {file = "anyio-4.5.2-py3-none-any.whl", hash = "sha256:c011ee36bc1e8ba40e5a81cb9df91925c218fe9b778554e0b56a21e1b5d4716f"}, + {file = "anyio-4.5.2.tar.gz", hash = "sha256:23009af4ed04ce05991845451e11ef02fc7c5ed29179ac9a420e5ad0ac7ddc5b"}, ] [package.dependencies] @@ -32,9 +32,9 @@ sniffio = ">=1.1" typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +trio = ["trio (>=0.26.1)"] [[package]] name = "appnope" @@ -49,42 +49,39 @@ files = [ [[package]] name = "asttokens" -version = "2.4.1" +version = "3.0.0" description = "Annotate AST trees with source code positions" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, - {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, ] -[package.dependencies] -six = ">=1.12.0" - [package.extras] -astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] -test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "async-timeout" -version = "4.0.3" +version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] [[package]] name = "authlib" -version = "1.3.1" +version = "1.3.2" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false python-versions = ">=3.8" files = [ - {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, - {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, + {file = "Authlib-1.3.2-py2.py3-none-any.whl", hash = "sha256:ede026a95e9f5cdc2d4364a52103f5405e75aa156357e831ef2bfd0bc5094dfc"}, + {file = "authlib-1.3.2.tar.gz", hash = "sha256:4b16130117f9eb82aa6eec97f6dd4673c3f960ac0283ccdae2897ee4bc030ba2"}, ] [package.dependencies] @@ -131,198 +128,204 @@ tzdata = ["tzdata"] [[package]] name = "certifi" -version = "2024.6.2" +version = "2024.12.14" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.6.2-py3-none-any.whl", hash = "sha256:ddc6c8ce995e6987e7faf5e3f1b02b302836a0e5d98ece18392cb1a36c72ad56"}, - {file = "certifi-2024.6.2.tar.gz", hash = "sha256:3cd43f1c6fa7dedc5899d69d3ad0398fd018ad1a17fba83ddaf78aa46c747516"}, + {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, + {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, ] [[package]] name = "cffi" -version = "1.16.0" +version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" files = [ - {file = "cffi-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6b3d6606d369fc1da4fd8c357d026317fbb9c9b75d36dc16e90e84c26854b088"}, - {file = "cffi-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ac0f5edd2360eea2f1daa9e26a41db02dd4b0451b48f7c318e217ee092a213e9"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e61e3e4fa664a8588aa25c883eab612a188c725755afff6289454d6362b9673"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72e8961a86d19bdb45851d8f1f08b041ea37d2bd8d4fd19903bc3083d80c896"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b50bf3f55561dac5438f8e70bfcdfd74543fd60df5fa5f62d94e5867deca684"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7651c50c8c5ef7bdb41108b7b8c5a83013bfaa8a935590c5d74627c047a583c7"}, - {file = "cffi-1.16.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e4108df7fe9b707191e55f33efbcb2d81928e10cea45527879a4749cbe472614"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:32c68ef735dbe5857c810328cb2481e24722a59a2003018885514d4c09af9743"}, - {file = "cffi-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:673739cb539f8cdaa07d92d02efa93c9ccf87e345b9a0b556e3ecc666718468d"}, - {file = "cffi-1.16.0-cp310-cp310-win32.whl", hash = "sha256:9f90389693731ff1f659e55c7d1640e2ec43ff725cc61b04b2f9c6d8d017df6a"}, - {file = "cffi-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:e6024675e67af929088fda399b2094574609396b1decb609c55fa58b028a32a1"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b84834d0cf97e7d27dd5b7f3aca7b6e9263c56308ab9dc8aae9784abb774d404"}, - {file = "cffi-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b8ebc27c014c59692bb2664c7d13ce7a6e9a629be20e54e7271fa696ff2b417"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee07e47c12890ef248766a6e55bd38ebfb2bb8edd4142d56db91b21ea68b7627"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8a9d3ebe49f084ad71f9269834ceccbf398253c9fac910c4fd7053ff1386936"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e70f54f1796669ef691ca07d046cd81a29cb4deb1e5f942003f401c0c4a2695d"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5bf44d66cdf9e893637896c7faa22298baebcd18d1ddb6d2626a6e39793a1d56"}, - {file = "cffi-1.16.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b78010e7b97fef4bee1e896df8a4bbb6712b7f05b7ef630f9d1da00f6444d2e"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c6a164aa47843fb1b01e941d385aab7215563bb8816d80ff3a363a9f8448a8dc"}, - {file = "cffi-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e09f3ff613345df5e8c3667da1d918f9149bd623cd9070c983c013792a9a62eb"}, - {file = "cffi-1.16.0-cp311-cp311-win32.whl", hash = "sha256:2c56b361916f390cd758a57f2e16233eb4f64bcbeee88a4881ea90fca14dc6ab"}, - {file = "cffi-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:db8e577c19c0fda0beb7e0d4e09e0ba74b1e4c092e0e40bfa12fe05b6f6d75ba"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fa3a0128b152627161ce47201262d3140edb5a5c3da88d73a1b790a959126956"}, - {file = "cffi-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:68e7c44931cc171c54ccb702482e9fc723192e88d25a0e133edd7aff8fcd1f6e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abd808f9c129ba2beda4cfc53bde801e5bcf9d6e0f22f095e45327c038bfe68e"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88e2b3c14bdb32e440be531ade29d3c50a1a59cd4e51b1dd8b0865c54ea5d2e2"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcc8eb6d5902bb1cf6dc4f187ee3ea80a1eba0a89aba40a5cb20a5087d961357"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b7be2d771cdba2942e13215c4e340bfd76398e9227ad10402a8767ab1865d2e6"}, - {file = "cffi-1.16.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e715596e683d2ce000574bae5d07bd522c781a822866c20495e52520564f0969"}, - {file = "cffi-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2d92b25dbf6cae33f65005baf472d2c245c050b1ce709cc4588cdcdd5495b520"}, - {file = "cffi-1.16.0-cp312-cp312-win32.whl", hash = "sha256:b2ca4e77f9f47c55c194982e10f058db063937845bb2b7a86c84a6cfe0aefa8b"}, - {file = "cffi-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:68678abf380b42ce21a5f2abde8efee05c114c2fdb2e9eef2efdb0257fba1235"}, - {file = "cffi-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0c9ef6ff37e974b73c25eecc13952c55bceed9112be2d9d938ded8e856138bcc"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a09582f178759ee8128d9270cd1344154fd473bb77d94ce0aeb2a93ebf0feaf0"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e760191dd42581e023a68b758769e2da259b5d52e3103c6060ddc02c9edb8d7b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80876338e19c951fdfed6198e70bc88f1c9758b94578d5a7c4c91a87af3cf31c"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6a14b17d7e17fa0d207ac08642c8820f84f25ce17a442fd15e27ea18d67c59b"}, - {file = "cffi-1.16.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6602bc8dc6f3a9e02b6c22c4fc1e47aa50f8f8e6d3f78a5e16ac33ef5fefa324"}, - {file = "cffi-1.16.0-cp38-cp38-win32.whl", hash = "sha256:131fd094d1065b19540c3d72594260f118b231090295d8c34e19a7bbcf2e860a"}, - {file = "cffi-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:31d13b0f99e0836b7ff893d37af07366ebc90b678b6664c955b54561fc36ef36"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:582215a0e9adbe0e379761260553ba11c58943e4bbe9c36430c4ca6ac74b15ed"}, - {file = "cffi-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b29ebffcf550f9da55bec9e02ad430c992a87e5f512cd63388abb76f1036d8d2"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dc9b18bf40cc75f66f40a7379f6a9513244fe33c0e8aa72e2d56b0196a7ef872"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cb4a35b3642fc5c005a6755a5d17c6c8b6bcb6981baf81cea8bfbc8903e8ba8"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b86851a328eedc692acf81fb05444bdf1891747c25af7529e39ddafaf68a4f3f"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c0f31130ebc2d37cdd8e44605fb5fa7ad59049298b3f745c74fa74c62fbfcfc4"}, - {file = "cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:748dcd1e3d3d7cd5443ef03ce8685043294ad6bd7c02a38d1bd367cfd968e000"}, - {file = "cffi-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8895613bcc094d4a1b2dbe179d88d7fb4a15cee43c052e8885783fac397d91fe"}, - {file = "cffi-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed86a35631f7bfbb28e108dd96773b9d5a6ce4811cf6ea468bb6a359b256b1e4"}, - {file = "cffi-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:3686dffb02459559c74dd3d81748269ffb0eb027c39a6fc99502de37d501faa8"}, - {file = "cffi-1.16.0.tar.gz", hash = "sha256:bcb3ef43e58665bbda2fb198698fcae6776483e0c4a631aa5647806c25e02cc0"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, + {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:edae79245293e15384b51f88b00613ba9f7198016a5948b5dddf4917d4d26382"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45398b671ac6d70e67da8e4224a065cec6a93541bb7aebe1b198a61b58c7b702"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad9413ccdeda48c5afdae7e4fa2192157e991ff761e7ab8fdd8926f40b160cc3"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5da5719280082ac6bd9aa7becb3938dc9f9cbd57fac7d2871717b1feb0902ab6"}, + {file = "cffi-1.17.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bb1a08b8008b281856e5971307cc386a8e9c5b625ac297e853d36da6efe9c17"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:045d61c734659cc045141be4bae381a41d89b741f795af1dd018bfb532fd0df8"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6883e737d7d9e4899a8a695e00ec36bd4e5e4f18fabe0aca0efe0a4b44cdb13e"}, + {file = "cffi-1.17.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6b8b4a92e1c65048ff98cfe1f735ef8f1ceb72e3d5f0c25fdb12087a23da22be"}, + {file = "cffi-1.17.1-cp310-cp310-win32.whl", hash = "sha256:c9c3d058ebabb74db66e431095118094d06abf53284d9c81f27300d0e0d8bc7c"}, + {file = "cffi-1.17.1-cp310-cp310-win_amd64.whl", hash = "sha256:0f048dcf80db46f0098ccac01132761580d28e28bc0f78ae0d58048063317e15"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401"}, + {file = "cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6"}, + {file = "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f"}, + {file = "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b"}, + {file = "cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655"}, + {file = "cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4"}, + {file = "cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99"}, + {file = "cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3"}, + {file = "cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8"}, + {file = "cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65"}, + {file = "cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e"}, + {file = "cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4"}, + {file = "cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed"}, + {file = "cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9"}, + {file = "cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d"}, + {file = "cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a"}, + {file = "cffi-1.17.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:636062ea65bd0195bc012fea9321aca499c0504409f413dc88af450b57ffd03b"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c7eac2ef9b63c79431bc4b25f1cd649d7f061a28808cbc6c47b534bd789ef964"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e221cf152cff04059d011ee126477f0d9588303eb57e88923578ace7baad17f9"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:31000ec67d4221a71bd3f67df918b1f88f676f1c3b535a7eb473255fdc0b83fc"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6f17be4345073b0a7b8ea599688f692ac3ef23ce28e5df79c04de519dbc4912c"}, + {file = "cffi-1.17.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2b1fac190ae3ebfe37b979cc1ce69c81f4e4fe5746bb401dca63a9062cdaf1"}, + {file = "cffi-1.17.1-cp38-cp38-win32.whl", hash = "sha256:7596d6620d3fa590f677e9ee430df2958d2d6d6de2feeae5b20e82c00b76fbf8"}, + {file = "cffi-1.17.1-cp38-cp38-win_amd64.whl", hash = "sha256:78122be759c3f8a014ce010908ae03364d00a1f81ab5c7f4a7a5120607ea56e1"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b2ab587605f4ba0bf81dc0cb08a41bd1c0a5906bd59243d56bad7668a6fc6c16"}, + {file = "cffi-1.17.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:28b16024becceed8c6dfbc75629e27788d8a3f9030691a1dbf9821a128b22c36"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d599671f396c4723d016dbddb72fe8e0397082b0a77a4fab8028923bec050e8"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca74b8dbe6e8e8263c0ffd60277de77dcee6c837a3d0881d8c1ead7268c9e576"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7f5baafcc48261359e14bcd6d9bff6d4b28d9103847c9e136694cb0501aef87"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98e3969bcff97cae1b2def8ba499ea3d6f31ddfdb7635374834cf89a1a08ecf0"}, + {file = "cffi-1.17.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdf5ce3acdfd1661132f2a9c19cac174758dc2352bfe37d98aa7512c6b7178b3"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9755e4345d1ec879e3849e62222a18c7174d65a6a92d5b346b1863912168b595"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:f1e22e8c4419538cb197e4dd60acc919d7696e5ef98ee4da4e01d3f8cfa4cc5a"}, + {file = "cffi-1.17.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c03e868a0b3bc35839ba98e74211ed2b05d2119be4e8a0f224fba9384f1fe02e"}, + {file = "cffi-1.17.1-cp39-cp39-win32.whl", hash = "sha256:e31ae45bc2e29f6b2abd0de1cc3b9d5205aa847cafaecb8af1476a609a2f6eb7"}, + {file = "cffi-1.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:d016c76bdd850f3c626af19b0542c9677ba156e4ee4fccfdd7848803533ef662"}, + {file = "cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824"}, ] [package.dependencies] pycparser = "*" -[[package]] -name = "cfgv" -version = "3.4.0" -description = "Validate configuration and produce human readable error messages." -optional = false -python-versions = ">=3.8" -files = [ - {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, - {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, -] - [[package]] name = "charset-normalizer" -version = "3.3.2" +version = "3.4.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.7" files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, + {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, + {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, + {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, + {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, + {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, + {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, + {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, + {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, + {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, ] [[package]] name = "click" -version = "8.1.7" +version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, + {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, + {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, ] [package.dependencies] @@ -341,43 +344,38 @@ files = [ [[package]] name = "cryptography" -version = "42.0.8" +version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" files = [ - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:81d8a521705787afe7a18d5bfb47ea9d9cc068206270aad0b96a725022e18d2e"}, - {file = "cryptography-42.0.8-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:961e61cefdcb06e0c6d7e3a1b22ebe8b996eb2bf50614e89384be54c48c6b63d"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3ec3672626e1b9e55afd0df6d774ff0e953452886e06e0f1eb7eb0c832e8902"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e599b53fd95357d92304510fb7bda8523ed1f79ca98dce2f43c115950aa78801"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:5226d5d21ab681f432a9c1cf8b658c0cb02533eece706b155e5fbd8a0cdd3949"}, - {file = "cryptography-42.0.8-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:6b7c4f03ce01afd3b76cf69a5455caa9cfa3de8c8f493e0d3ab7d20611c8dae9"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:2346b911eb349ab547076f47f2e035fc8ff2c02380a7cbbf8d87114fa0f1c583"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:ad803773e9df0b92e0a817d22fd8a3675493f690b96130a5e24f1b8fabbea9c7"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2f66d9cd9147ee495a8374a45ca445819f8929a3efcd2e3df6428e46c3cbb10b"}, - {file = "cryptography-42.0.8-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:d45b940883a03e19e944456a558b67a41160e367a719833c53de6911cabba2b7"}, - {file = "cryptography-42.0.8-cp37-abi3-win32.whl", hash = "sha256:a0c5b2b0585b6af82d7e385f55a8bc568abff8923af147ee3c07bd8b42cda8b2"}, - {file = "cryptography-42.0.8-cp37-abi3-win_amd64.whl", hash = "sha256:57080dee41209e556a9a4ce60d229244f7a66ef52750f813bfbe18959770cfba"}, - {file = "cryptography-42.0.8-cp39-abi3-macosx_10_12_universal2.whl", hash = "sha256:dea567d1b0e8bc5764b9443858b673b734100c2871dc93163f58c46a97a83d28"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4783183f7cb757b73b2ae9aed6599b96338eb957233c58ca8f49a49cc32fd5e"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a0608251135d0e03111152e41f0cc2392d1e74e35703960d4190b2e0f4ca9c70"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:dc0fdf6787f37b1c6b08e6dfc892d9d068b5bdb671198c72072828b80bd5fe4c"}, - {file = "cryptography-42.0.8-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9c0c1716c8447ee7dbf08d6db2e5c41c688544c61074b54fc4564196f55c25a7"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:fff12c88a672ab9c9c1cf7b0c80e3ad9e2ebd9d828d955c126be4fd3e5578c9e"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:cafb92b2bc622cd1aa6a1dce4b93307792633f4c5fe1f46c6b97cf67073ec961"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:31f721658a29331f895a5a54e7e82075554ccfb8b163a18719d342f5ffe5ecb1"}, - {file = "cryptography-42.0.8-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b297f90c5723d04bcc8265fc2a0f86d4ea2e0f7ab4b6994459548d3a6b992a14"}, - {file = "cryptography-42.0.8-cp39-abi3-win32.whl", hash = "sha256:2f88d197e66c65be5e42cd72e5c18afbfae3f741742070e3019ac8f4ac57262c"}, - {file = "cryptography-42.0.8-cp39-abi3-win_amd64.whl", hash = "sha256:fa76fbb7596cc5839320000cdd5d0955313696d9511debab7ee7278fc8b5c84a"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ba4f0a211697362e89ad822e667d8d340b4d8d55fae72cdd619389fb5912eefe"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:81884c4d096c272f00aeb1f11cf62ccd39763581645b0812e99a91505fa48e0c"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c9bb2ae11bfbab395bdd072985abde58ea9860ed84e59dbc0463a5d0159f5b71"}, - {file = "cryptography-42.0.8-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7016f837e15b0a1c119d27ecd89b3515f01f90a8615ed5e9427e30d9cdbfed3d"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5a94eccb2a81a309806027e1670a358b99b8fe8bfe9f8d329f27d72c094dde8c"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:dec9b018df185f08483f294cae6ccac29e7a6e0678996587363dc352dc65c842"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:343728aac38decfdeecf55ecab3264b015be68fc2816ca800db649607aeee648"}, - {file = "cryptography-42.0.8-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:013629ae70b40af70c9a7a5db40abe5d9054e6f4380e50ce769947b73bf3caad"}, - {file = "cryptography-42.0.8.tar.gz", hash = "sha256:8d09d05439ce7baa8e9e95b07ec5b6c886f548deb7e0f69ef25f64b3bce842f2"}, + {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e1ce50266f4f70bf41a2c6dc4358afadae90e2a1e5342d3c08883df1675374f"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:443c4a81bb10daed9a8f334365fe52542771f25aedaf889fd323a853ce7377d6"}, + {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:74f57f24754fe349223792466a709f8e0c093205ff0dca557af51072ff47ab18"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9762ea51a8fc2a88b70cf2995e5675b38d93bf36bd67d91721c309df184f49bd"}, + {file = "cryptography-43.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:81ef806b1fef6b06dcebad789f988d3b37ccaee225695cf3e07648eee0fc6b73"}, + {file = "cryptography-43.0.3-cp37-abi3-win32.whl", hash = "sha256:cbeb489927bd7af4aa98d4b261af9a5bc025bd87f0e3547e11584be9e9427be2"}, + {file = "cryptography-43.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:f46304d6f0c6ab8e52770addfa2fc41e6629495548862279641972b6215451cd"}, + {file = "cryptography-43.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:8ac43ae87929a5982f5948ceda07001ee5e83227fd69cf55b109144938d96984"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7"}, + {file = "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16"}, + {file = "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73"}, + {file = "cryptography-43.0.3-cp39-abi3-win32.whl", hash = "sha256:d56e96520b1020449bbace2b78b603442e7e378a9b3bd68de65c782db1507995"}, + {file = "cryptography-43.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:0c580952eef9bf68c4747774cde7ec1d85a6e61de97281f2dba83c7d2c806362"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:d03b5621a135bffecad2c73e9f4deb1a0f977b9a8ffe6f8e002bf6c9d07b918c"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a2a431ee15799d6db9fe80c82b055bae5a752bef645bba795e8e52687c69efe3"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:281c945d0e28c92ca5e5930664c1cefd85efe80e5c0d2bc58dd63383fda29f83"}, + {file = "cryptography-43.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f18c716be16bc1fea8e95def49edf46b82fccaa88587a45f8dc0ff6ab5d8e0a7"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:4a02ded6cd4f0a5562a8887df8b3bd14e822a90f97ac5e544c162899bc467664"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:53a583b6637ab4c4e3591a15bc9db855b8d9dee9a669b550f311480acab6eb08"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1ec0bcf7e17c0c5669d881b1cd38c4972fade441b27bda1051665faaa89bdcaa"}, + {file = "cryptography-43.0.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2ce6fae5bdad59577b44e4dfed356944fbf1d925269114c28be377692643b4ff"}, + {file = "cryptography-43.0.3.tar.gz", hash = "sha256:315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805"}, ] [package.dependencies] @@ -390,7 +388,7 @@ nox = ["nox"] pep8test = ["check-sdist", "click", "mypy", "ruff"] sdist = ["build"] ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] [[package]] @@ -404,26 +402,15 @@ files = [ {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, ] -[[package]] -name = "distlib" -version = "0.3.8" -description = "Distribution utilities" -optional = false -python-versions = "*" -files = [ - {file = "distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784"}, - {file = "distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64"}, -] - [[package]] name = "elastic-transport" -version = "8.13.1" +version = "8.17.0" description = "Transport classes and utilities shared among Python Elastic client libraries" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "elastic_transport-8.13.1-py3-none-any.whl", hash = "sha256:5d4bb6b8e9d74a9c16de274e91a5caf65a3a8d12876f1e99152975e15b2746fe"}, - {file = "elastic_transport-8.13.1.tar.gz", hash = "sha256:16339d392b4bbe86ad00b4bdeecff10edf516d32bc6c16053846625f2c6ea250"}, + {file = "elastic_transport-8.17.0-py3-none-any.whl", hash = "sha256:59f553300866750e67a38828fede000576562a0e66930c641adb75249e0c95af"}, + {file = "elastic_transport-8.17.0.tar.gz", hash = "sha256:e755f38f99fa6ec5456e236b8e58f0eb18873ac8fe710f74b91a16dd562de2a5"}, ] [package.dependencies] @@ -431,49 +418,31 @@ certifi = "*" urllib3 = ">=1.26.2,<3" [package.extras] -develop = ["aiohttp", "furo", "httpx", "mock", "opentelemetry-api", "opentelemetry-sdk", "orjson", "pytest", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "pytest-mock", "requests", "respx", "sphinx (>2)", "sphinx-autodoc-typehints", "trustme"] +develop = ["aiohttp", "furo", "httpcore (<1.0.6)", "httpx", "opentelemetry-api", "opentelemetry-sdk", "orjson", "pytest", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "pytest-mock", "requests", "respx", "sphinx (>2)", "sphinx-autodoc-typehints", "trustme"] [[package]] name = "elasticsearch" -version = "8.14.0" +version = "8.17.0" description = "Python client for Elasticsearch" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "elasticsearch-8.14.0-py3-none-any.whl", hash = "sha256:cef8ef70a81af027f3da74a4f7d9296b390c636903088439087b8262a468c130"}, - {file = "elasticsearch-8.14.0.tar.gz", hash = "sha256:aa2490029dd96f4015b333c1827aa21fd6c0a4d223b00dfb0fe933b8d09a511b"}, + {file = "elasticsearch-8.17.0-py3-none-any.whl", hash = "sha256:15965240fe297279f0e68b260936d9ced9606aa7ef8910b9b56727f96ef00d5b"}, + {file = "elasticsearch-8.17.0.tar.gz", hash = "sha256:c1069bf2204ba8fab29ff00b2ce6b37324b2cc6ff593283b97df43426ec13053"}, ] [package.dependencies] -elastic-transport = ">=8.13,<9" +elastic-transport = ">=8.15.1,<9" [package.extras] async = ["aiohttp (>=3,<4)"] +dev = ["aiohttp", "black", "build", "coverage", "isort", "jinja2", "mapbox-vector-tile", "nox", "numpy", "orjson", "pandas", "pyarrow", "pytest", "pytest-asyncio", "pytest-cov", "python-dateutil", "pyyaml (>=5.4)", "requests (>=2,<3)", "simsimd", "twine", "unasync"] +docs = ["sphinx", "sphinx-autodoc-typehints", "sphinx-rtd-theme (>=2.0)"] orjson = ["orjson (>=3)"] +pyarrow = ["pyarrow (>=1)"] requests = ["requests (>=2.4.0,!=2.32.2,<3.0.0)"] vectorstore-mmr = ["numpy (>=1)", "simsimd (>=3)"] -[[package]] -name = "environs" -version = "9.5.0" -description = "simplified environment variable parsing" -optional = false -python-versions = ">=3.6" -files = [ - {file = "environs-9.5.0-py2.py3-none-any.whl", hash = "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124"}, - {file = "environs-9.5.0.tar.gz", hash = "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9"}, -] - -[package.dependencies] -marshmallow = ">=3.0.0" -python-dotenv = "*" - -[package.extras] -dev = ["dj-database-url", "dj-email-url", "django-cache-url", "flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)", "pytest", "tox"] -django = ["dj-database-url", "dj-email-url", "django-cache-url"] -lint = ["flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)"] -tests = ["dj-database-url", "dj-email-url", "django-cache-url", "pytest"] - [[package]] name = "events" version = "0.5" @@ -486,13 +455,13 @@ files = [ [[package]] name = "exceptiongroup" -version = "1.2.1" +version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, + {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, + {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, ] [package.extras] @@ -500,164 +469,166 @@ test = ["pytest (>=6)"] [[package]] name = "executing" -version = "2.0.1" +version = "2.1.0" description = "Get the currently executing AST node of a frame, and other information" optional = false -python-versions = ">=3.5" -files = [ - {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, - {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, -] - -[package.extras] -tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] - -[[package]] -name = "filelock" -version = "3.14.0" -description = "A platform independent file lock." -optional = false python-versions = ">=3.8" files = [ - {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, - {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, + {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, + {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, ] [package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] [[package]] name = "grpcio" -version = "1.63.0" +version = "1.67.1" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" files = [ - {file = "grpcio-1.63.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:2e93aca840c29d4ab5db93f94ed0a0ca899e241f2e8aec6334ab3575dc46125c"}, - {file = "grpcio-1.63.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:91b73d3f1340fefa1e1716c8c1ec9930c676d6b10a3513ab6c26004cb02d8b3f"}, - {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:b3afbd9d6827fa6f475a4f91db55e441113f6d3eb9b7ebb8fb806e5bb6d6bd0d"}, - {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8f3f6883ce54a7a5f47db43289a0a4c776487912de1a0e2cc83fdaec9685cc9f"}, - {file = "grpcio-1.63.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf8dae9cc0412cb86c8de5a8f3be395c5119a370f3ce2e69c8b7d46bb9872c8d"}, - {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:08e1559fd3b3b4468486b26b0af64a3904a8dbc78d8d936af9c1cf9636eb3e8b"}, - {file = "grpcio-1.63.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5c039ef01516039fa39da8a8a43a95b64e288f79f42a17e6c2904a02a319b357"}, - {file = "grpcio-1.63.0-cp310-cp310-win32.whl", hash = "sha256:ad2ac8903b2eae071055a927ef74121ed52d69468e91d9bcbd028bd0e554be6d"}, - {file = "grpcio-1.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2e44f59316716532a993ca2966636df6fbe7be4ab6f099de6815570ebe4383a"}, - {file = "grpcio-1.63.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:f28f8b2db7b86c77916829d64ab21ff49a9d8289ea1564a2b2a3a8ed9ffcccd3"}, - {file = "grpcio-1.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:65bf975639a1f93bee63ca60d2e4951f1b543f498d581869922910a476ead2f5"}, - {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:b5194775fec7dc3dbd6a935102bb156cd2c35efe1685b0a46c67b927c74f0cfb"}, - {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4cbb2100ee46d024c45920d16e888ee5d3cf47c66e316210bc236d5bebc42b3"}, - {file = "grpcio-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff737cf29b5b801619f10e59b581869e32f400159e8b12d7a97e7e3bdeee6a2"}, - {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:cd1e68776262dd44dedd7381b1a0ad09d9930ffb405f737d64f505eb7f77d6c7"}, - {file = "grpcio-1.63.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:93f45f27f516548e23e4ec3fbab21b060416007dbe768a111fc4611464cc773f"}, - {file = "grpcio-1.63.0-cp311-cp311-win32.whl", hash = "sha256:878b1d88d0137df60e6b09b74cdb73db123f9579232c8456f53e9abc4f62eb3c"}, - {file = "grpcio-1.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:756fed02dacd24e8f488f295a913f250b56b98fb793f41d5b2de6c44fb762434"}, - {file = "grpcio-1.63.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:93a46794cc96c3a674cdfb59ef9ce84d46185fe9421baf2268ccb556f8f81f57"}, - {file = "grpcio-1.63.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:a7b19dfc74d0be7032ca1eda0ed545e582ee46cd65c162f9e9fc6b26ef827dc6"}, - {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:8064d986d3a64ba21e498b9a376cbc5d6ab2e8ab0e288d39f266f0fca169b90d"}, - {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:219bb1848cd2c90348c79ed0a6b0ea51866bc7e72fa6e205e459fedab5770172"}, - {file = "grpcio-1.63.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2d60cd1d58817bc5985fae6168d8b5655c4981d448d0f5b6194bbcc038090d2"}, - {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:9e350cb096e5c67832e9b6e018cf8a0d2a53b2a958f6251615173165269a91b0"}, - {file = "grpcio-1.63.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:56cdf96ff82e3cc90dbe8bac260352993f23e8e256e063c327b6cf9c88daf7a9"}, - {file = "grpcio-1.63.0-cp312-cp312-win32.whl", hash = "sha256:3a6d1f9ea965e750db7b4ee6f9fdef5fdf135abe8a249e75d84b0a3e0c668a1b"}, - {file = "grpcio-1.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:d2497769895bb03efe3187fb1888fc20e98a5f18b3d14b606167dacda5789434"}, - {file = "grpcio-1.63.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:fdf348ae69c6ff484402cfdb14e18c1b0054ac2420079d575c53a60b9b2853ae"}, - {file = "grpcio-1.63.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a3abfe0b0f6798dedd2e9e92e881d9acd0fdb62ae27dcbbfa7654a57e24060c0"}, - {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:6ef0ad92873672a2a3767cb827b64741c363ebaa27e7f21659e4e31f4d750280"}, - {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b416252ac5588d9dfb8a30a191451adbf534e9ce5f56bb02cd193f12d8845b7f"}, - {file = "grpcio-1.63.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3b77eaefc74d7eb861d3ffbdf91b50a1bb1639514ebe764c47773b833fa2d91"}, - {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b005292369d9c1f80bf70c1db1c17c6c342da7576f1c689e8eee4fb0c256af85"}, - {file = "grpcio-1.63.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cdcda1156dcc41e042d1e899ba1f5c2e9f3cd7625b3d6ebfa619806a4c1aadda"}, - {file = "grpcio-1.63.0-cp38-cp38-win32.whl", hash = "sha256:01799e8649f9e94ba7db1aeb3452188048b0019dc37696b0f5ce212c87c560c3"}, - {file = "grpcio-1.63.0-cp38-cp38-win_amd64.whl", hash = "sha256:6a1a3642d76f887aa4009d92f71eb37809abceb3b7b5a1eec9c554a246f20e3a"}, - {file = "grpcio-1.63.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:75f701ff645858a2b16bc8c9fc68af215a8bb2d5a9b647448129de6e85d52bce"}, - {file = "grpcio-1.63.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cacdef0348a08e475a721967f48206a2254a1b26ee7637638d9e081761a5ba86"}, - {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:0697563d1d84d6985e40ec5ec596ff41b52abb3fd91ec240e8cb44a63b895094"}, - {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6426e1fb92d006e47476d42b8f240c1d916a6d4423c5258ccc5b105e43438f61"}, - {file = "grpcio-1.63.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e48cee31bc5f5a31fb2f3b573764bd563aaa5472342860edcc7039525b53e46a"}, - {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:50344663068041b34a992c19c600236e7abb42d6ec32567916b87b4c8b8833b3"}, - {file = "grpcio-1.63.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:259e11932230d70ef24a21b9fb5bb947eb4703f57865a404054400ee92f42f5d"}, - {file = "grpcio-1.63.0-cp39-cp39-win32.whl", hash = "sha256:a44624aad77bf8ca198c55af811fd28f2b3eaf0a50ec5b57b06c034416ef2d0a"}, - {file = "grpcio-1.63.0-cp39-cp39-win_amd64.whl", hash = "sha256:166e5c460e5d7d4656ff9e63b13e1f6029b122104c1633d5f37eaea348d7356d"}, - {file = "grpcio-1.63.0.tar.gz", hash = "sha256:f3023e14805c61bc439fb40ca545ac3d5740ce66120a678a3c6c2c55b70343d1"}, + {file = "grpcio-1.67.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:8b0341d66a57f8a3119b77ab32207072be60c9bf79760fa609c5609f2deb1f3f"}, + {file = "grpcio-1.67.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:f5a27dddefe0e2357d3e617b9079b4bfdc91341a91565111a21ed6ebbc51b22d"}, + {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:43112046864317498a33bdc4797ae6a268c36345a910de9b9c17159d8346602f"}, + {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9b929f13677b10f63124c1a410994a401cdd85214ad83ab67cc077fc7e480f0"}, + {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7d1797a8a3845437d327145959a2c0c47c05947c9eef5ff1a4c80e499dcc6fa"}, + {file = "grpcio-1.67.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0489063974d1452436139501bf6b180f63d4977223ee87488fe36858c5725292"}, + {file = "grpcio-1.67.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9fd042de4a82e3e7aca44008ee2fb5da01b3e5adb316348c21980f7f58adc311"}, + {file = "grpcio-1.67.1-cp310-cp310-win32.whl", hash = "sha256:638354e698fd0c6c76b04540a850bf1db27b4d2515a19fcd5cf645c48d3eb1ed"}, + {file = "grpcio-1.67.1-cp310-cp310-win_amd64.whl", hash = "sha256:608d87d1bdabf9e2868b12338cd38a79969eaf920c89d698ead08f48de9c0f9e"}, + {file = "grpcio-1.67.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:7818c0454027ae3384235a65210bbf5464bd715450e30a3d40385453a85a70cb"}, + {file = "grpcio-1.67.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ea33986b70f83844cd00814cee4451055cd8cab36f00ac64a31f5bb09b31919e"}, + {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c7a01337407dd89005527623a4a72c5c8e2894d22bead0895306b23c6695698f"}, + {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b866f73224b0634f4312a4674c1be21b2b4afa73cb20953cbbb73a6b36c3cc"}, + {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fff78ba10d4250bfc07a01bd6254a6d87dc67f9627adece85c0b2ed754fa96"}, + {file = "grpcio-1.67.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8a23cbcc5bb11ea7dc6163078be36c065db68d915c24f5faa4f872c573bb400f"}, + {file = "grpcio-1.67.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1a65b503d008f066e994f34f456e0647e5ceb34cfcec5ad180b1b44020ad4970"}, + {file = "grpcio-1.67.1-cp311-cp311-win32.whl", hash = "sha256:e29ca27bec8e163dca0c98084040edec3bc49afd10f18b412f483cc68c712744"}, + {file = "grpcio-1.67.1-cp311-cp311-win_amd64.whl", hash = "sha256:786a5b18544622bfb1e25cc08402bd44ea83edfb04b93798d85dca4d1a0b5be5"}, + {file = "grpcio-1.67.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:267d1745894200e4c604958da5f856da6293f063327cb049a51fe67348e4f953"}, + {file = "grpcio-1.67.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:85f69fdc1d28ce7cff8de3f9c67db2b0ca9ba4449644488c1e0303c146135ddb"}, + {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f26b0b547eb8d00e195274cdfc63ce64c8fc2d3e2d00b12bf468ece41a0423a0"}, + {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4422581cdc628f77302270ff839a44f4c24fdc57887dc2a45b7e53d8fc2376af"}, + {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7616d2ded471231c701489190379e0c311ee0a6c756f3c03e6a62b95a7146e"}, + {file = "grpcio-1.67.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8a00efecde9d6fcc3ab00c13f816313c040a28450e5e25739c24f432fc6d3c75"}, + {file = "grpcio-1.67.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:699e964923b70f3101393710793289e42845791ea07565654ada0969522d0a38"}, + {file = "grpcio-1.67.1-cp312-cp312-win32.whl", hash = "sha256:4e7b904484a634a0fff132958dabdb10d63e0927398273917da3ee103e8d1f78"}, + {file = "grpcio-1.67.1-cp312-cp312-win_amd64.whl", hash = "sha256:5721e66a594a6c4204458004852719b38f3d5522082be9061d6510b455c90afc"}, + {file = "grpcio-1.67.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:aa0162e56fd10a5547fac8774c4899fc3e18c1aa4a4759d0ce2cd00d3696ea6b"}, + {file = "grpcio-1.67.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:beee96c8c0b1a75d556fe57b92b58b4347c77a65781ee2ac749d550f2a365dc1"}, + {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:a93deda571a1bf94ec1f6fcda2872dad3ae538700d94dc283c672a3b508ba3af"}, + {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e6f255980afef598a9e64a24efce87b625e3e3c80a45162d111a461a9f92955"}, + {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e838cad2176ebd5d4a8bb03955138d6589ce9e2ce5d51c3ada34396dbd2dba8"}, + {file = "grpcio-1.67.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a6703916c43b1d468d0756c8077b12017a9fcb6a1ef13faf49e67d20d7ebda62"}, + {file = "grpcio-1.67.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:917e8d8994eed1d86b907ba2a61b9f0aef27a2155bca6cbb322430fc7135b7bb"}, + {file = "grpcio-1.67.1-cp313-cp313-win32.whl", hash = "sha256:e279330bef1744040db8fc432becc8a727b84f456ab62b744d3fdb83f327e121"}, + {file = "grpcio-1.67.1-cp313-cp313-win_amd64.whl", hash = "sha256:fa0c739ad8b1996bd24823950e3cb5152ae91fca1c09cc791190bf1627ffefba"}, + {file = "grpcio-1.67.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:178f5db771c4f9a9facb2ab37a434c46cb9be1a75e820f187ee3d1e7805c4f65"}, + {file = "grpcio-1.67.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f3e49c738396e93b7ba9016e153eb09e0778e776df6090c1b8c91877cc1c426"}, + {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:24e8a26dbfc5274d7474c27759b54486b8de23c709d76695237515bc8b5baeab"}, + {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b6c16489326d79ead41689c4b84bc40d522c9a7617219f4ad94bc7f448c5085"}, + {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e6a4dcf5af7bbc36fd9f81c9f372e8ae580870a9e4b6eafe948cd334b81cf3"}, + {file = "grpcio-1.67.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:95b5f2b857856ed78d72da93cd7d09b6db8ef30102e5e7fe0961fe4d9f7d48e8"}, + {file = "grpcio-1.67.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b49359977c6ec9f5d0573ea4e0071ad278ef905aa74e420acc73fd28ce39e9ce"}, + {file = "grpcio-1.67.1-cp38-cp38-win32.whl", hash = "sha256:f5b76ff64aaac53fede0cc93abf57894ab2a7362986ba22243d06218b93efe46"}, + {file = "grpcio-1.67.1-cp38-cp38-win_amd64.whl", hash = "sha256:804c6457c3cd3ec04fe6006c739579b8d35c86ae3298ffca8de57b493524b771"}, + {file = "grpcio-1.67.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:a25bdea92b13ff4d7790962190bf6bf5c4639876e01c0f3dda70fc2769616335"}, + {file = "grpcio-1.67.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cdc491ae35a13535fd9196acb5afe1af37c8237df2e54427be3eecda3653127e"}, + {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:85f862069b86a305497e74d0dc43c02de3d1d184fc2c180993aa8aa86fbd19b8"}, + {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec74ef02010186185de82cc594058a3ccd8d86821842bbac9873fd4a2cf8be8d"}, + {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01f616a964e540638af5130469451cf580ba8c7329f45ca998ab66e0c7dcdb04"}, + {file = "grpcio-1.67.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:299b3d8c4f790c6bcca485f9963b4846dd92cf6f1b65d3697145d005c80f9fe8"}, + {file = "grpcio-1.67.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:60336bff760fbb47d7e86165408126f1dded184448e9a4c892189eb7c9d3f90f"}, + {file = "grpcio-1.67.1-cp39-cp39-win32.whl", hash = "sha256:5ed601c4c6008429e3d247ddb367fe8c7259c355757448d7c1ef7bd4a6739e8e"}, + {file = "grpcio-1.67.1-cp39-cp39-win_amd64.whl", hash = "sha256:5db70d32d6703b89912af16d6d45d78406374a8b8ef0d28140351dd0ec610e98"}, + {file = "grpcio-1.67.1.tar.gz", hash = "sha256:3dc2ed4cabea4dc14d5e708c2b426205956077cc5de419b4d4079315017e9732"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.63.0)"] +protobuf = ["grpcio-tools (>=1.67.1)"] [[package]] name = "grpcio-health-checking" -version = "1.63.0" +version = "1.67.1" description = "Standard Health Checking Service for gRPC" optional = false python-versions = ">=3.8" files = [ - {file = "grpcio_health_checking-1.63.0-py3-none-any.whl", hash = "sha256:ebd4ea09aeb6ef314da86b784d2423705f378cbbfff7be7091bce29602614a54"}, - {file = "grpcio_health_checking-1.63.0.tar.gz", hash = "sha256:43b90ad740ae6c5655b95fe2a054d1cc05b77a1c50363540963b3b750356ab50"}, + {file = "grpcio_health_checking-1.67.1-py3-none-any.whl", hash = "sha256:93753da5062152660aef2286c9b261e07dd87124a65e4dc9fbd47d1ce966b39d"}, + {file = "grpcio_health_checking-1.67.1.tar.gz", hash = "sha256:ca90fa76a6afbb4fda71d734cb9767819bba14928b91e308cffbb0c311eb941e"}, ] [package.dependencies] -grpcio = ">=1.63.0" +grpcio = ">=1.67.1" protobuf = ">=5.26.1,<6.0dev" [[package]] name = "grpcio-tools" -version = "1.63.0" +version = "1.67.1" description = "Protobuf code generator for gRPC" optional = false python-versions = ">=3.8" files = [ - {file = "grpcio_tools-1.63.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:1ab17460a2dfd3433af3120598bc18e705e3092d4d8396d3c06fe93deab19bbb"}, - {file = "grpcio_tools-1.63.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:cb9a0f61cabff426eaf5c0a506de599c9f006b31947ba1159254cc291c1dbdd1"}, - {file = "grpcio_tools-1.63.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:711d9f038c18c2f637b89af70c485018ae437dff5f7d2c631ca6a1eee7563038"}, - {file = "grpcio_tools-1.63.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:847ca8d75090d66e787576049500eb7c230a9997146d5d433da7928baf914273"}, - {file = "grpcio_tools-1.63.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:49404876ec70bdae431eac5b1591c32c0bba4047dfd96dc6add03dbcdad5a5fc"}, - {file = "grpcio_tools-1.63.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:376136b9bbd16304a2e550ea0bb2b3340b720a0f623856124987845ef071d479"}, - {file = "grpcio_tools-1.63.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e197d5de49bb024f3d0b9e1ee1a0cce9e39955e17738bfbed72b0cc506a4824c"}, - {file = "grpcio_tools-1.63.0-cp310-cp310-win32.whl", hash = "sha256:acb5cc845942dc0f020eefbe10ad8ac6fe2f96b99c035da738c5d3026d3a5324"}, - {file = "grpcio_tools-1.63.0-cp310-cp310-win_amd64.whl", hash = "sha256:f74a6da9db48296c3e7e34820e96744a0ea9cd58c3fa075ed206f7bb75229324"}, - {file = "grpcio_tools-1.63.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:4374c8beefec84f682c799b8df5ac4b217c09de6d69038ce16fc12dcd862fff8"}, - {file = "grpcio_tools-1.63.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d58a5aacee102858e49b1cc89b1ba1a020bb04f001df057e2b03fa11e6c636d1"}, - {file = "grpcio_tools-1.63.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:744952a560fdb060a5f9d467d130fde6dbfee2abb07143c87e9b17aae3c19d5a"}, - {file = "grpcio_tools-1.63.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c305274aa111412f5b8858242853e56c16ebcedc25d6a49ad615fd1b3ecd5971"}, - {file = "grpcio_tools-1.63.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e952835e7b8f40204bceb2a96fc7bcb8b07ff45ca9d07266774bc429db1efead"}, - {file = "grpcio_tools-1.63.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:409613bb694308a1945256d1d05c3ef3497f9fbf7fd68bd8bed86d80d97df334"}, - {file = "grpcio_tools-1.63.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b2d246eee3b2a6afe65362c22a98b0e6d805c227c2569c5616ad3bec619621dd"}, - {file = "grpcio_tools-1.63.0-cp311-cp311-win32.whl", hash = "sha256:bc0e6af05f66b36186ad3467d46ecc0f51dc9fa366005e095f4aa7739c7bfcba"}, - {file = "grpcio_tools-1.63.0-cp311-cp311-win_amd64.whl", hash = "sha256:3f138c822090e7c87ef6a5dce0a6c4fdf68a9472e6a936b70ac7be2371184abe"}, - {file = "grpcio_tools-1.63.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:63a975d0457b2db1ee19fe99806091c71ad22f6f3664adc8f4c95943684dc0fd"}, - {file = "grpcio_tools-1.63.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:517ed2b405793e55c527f332296ae92a3e17fdd83772f1569709f2c228acaf54"}, - {file = "grpcio_tools-1.63.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:49af114fed0075025fe243cb3c8405c7a99f0b87f4eb7ccdaaf33ce1f55d8318"}, - {file = "grpcio_tools-1.63.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3ef50fa15689f46a2c903f1c9687aa40687d67dcb0469903fff37a63e55f11cd"}, - {file = "grpcio_tools-1.63.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e68d9df9134906cbab1b225b625e11a368ab01b9ff24a4546bddec705ec7fd66"}, - {file = "grpcio_tools-1.63.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7cbf570f7b9badd3bd27be5e057ca466d447c1047bf80c87a53d8bcb2e87bbbe"}, - {file = "grpcio_tools-1.63.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f2cc0b3098ff48811ca821440e03763dcabd11158a11d9ea819c58938a9ea276"}, - {file = "grpcio_tools-1.63.0-cp312-cp312-win32.whl", hash = "sha256:0ca6d5623dadce66fabbd8b04d0572e35fd63b31f1ae7ea1555d662864852d33"}, - {file = "grpcio_tools-1.63.0-cp312-cp312-win_amd64.whl", hash = "sha256:94b52c0dfb6026f69858a10ee3eadf15c343667647b5846cace82f61fe809c88"}, - {file = "grpcio_tools-1.63.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:c759306c04e3d0b3da3bd576e3de8bcbccc31a243a85ad256fd46d3a3ed93402"}, - {file = "grpcio_tools-1.63.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:f305a5d61613e7ea3510eab62d65d47dff5206fcbe3b2347a7c1ebc9eff23dc6"}, - {file = "grpcio_tools-1.63.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:b5d74a30409eda2a0cdaa700da23fe3cad5d7ac47ac2d52644abe13a84047aa0"}, - {file = "grpcio_tools-1.63.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:632f78d8730d39363fc5afaf7cb5cf2f56b4e346ca11f550af74cff85e702f79"}, - {file = "grpcio_tools-1.63.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:54136ac94eabc45b1b72d5ca379e5a2753f21a654f562838c5a9b706482bc1f0"}, - {file = "grpcio_tools-1.63.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:b61682c06f0bcf2c576537819c42d5fb8eec1a0a9c05c905005200a57ff54c1f"}, - {file = "grpcio_tools-1.63.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0f8ce3fc598886a5370f28c86f94d06ddb0d3a251101a5bb8ed9576d9f86a519"}, - {file = "grpcio_tools-1.63.0-cp38-cp38-win32.whl", hash = "sha256:27684446c81bffcd4f20f13bf672ac7cbeaefbd270b3d867cdb58132e4b866bc"}, - {file = "grpcio_tools-1.63.0-cp38-cp38-win_amd64.whl", hash = "sha256:8341846604df00cf1c0a822476d27f4c481f678601a2f0b190e3b9936f857ded"}, - {file = "grpcio_tools-1.63.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:2924747142ebcbbd62acf65936fbc9694afbdfc2c6ae721461015370e27b8d6f"}, - {file = "grpcio_tools-1.63.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1b88be61eaa41eb4deb6b91a1e21d2a789d8567f0a973694fa27c09196f39a9a"}, - {file = "grpcio_tools-1.63.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:b87750347cb024bb74d5139da01ffba9f099ad2e43ba45893dc627ec920d57ab"}, - {file = "grpcio_tools-1.63.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49435413548e019921e125b178f3fd30543aa348c70775669b5ed80f0b39b393"}, - {file = "grpcio_tools-1.63.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df4dc9db9763594ae6ae04b42d6fcf7f163897a072f8fc946b864c9c3f0fbab1"}, - {file = "grpcio_tools-1.63.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6bbf51f334452fcac422509979635f97e2c2c3e71f21480891f2ba280b4b6867"}, - {file = "grpcio_tools-1.63.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c63a0f37b6b64dc31b2f1a0e5f889ae8b6bb7b7b20fe2406c1285321a7c54fdd"}, - {file = "grpcio_tools-1.63.0-cp39-cp39-win32.whl", hash = "sha256:d7142b0162834d3a67df532744a733b0757b11056373bd489a70dc07a3f65829"}, - {file = "grpcio_tools-1.63.0-cp39-cp39-win_amd64.whl", hash = "sha256:32247ac2d575a633aea2536840fd232d56f309bd940081d772081bd71e0626c6"}, - {file = "grpcio_tools-1.63.0.tar.gz", hash = "sha256:2474cffbc8f29404f0e3a2109c0a0423211ba93fe048b144e734f601ff391fc7"}, + {file = "grpcio_tools-1.67.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:c701aaa51fde1f2644bd94941aa94c337adb86f25cd03cf05e37387aaea25800"}, + {file = "grpcio_tools-1.67.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:6a722bba714392de2386569c40942566b83725fa5c5450b8910e3832a5379469"}, + {file = "grpcio_tools-1.67.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:0c7415235cb154e40b5ae90e2a172a0eb8c774b6876f53947cf0af05c983d549"}, + {file = "grpcio_tools-1.67.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6a4c459098c4934f9470280baf9ff8b38c365e147f33c8abc26039a948a664a5"}, + {file = "grpcio_tools-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e89bf53a268f55c16989dab1cf0b32a5bff910762f138136ffad4146129b7a10"}, + {file = "grpcio_tools-1.67.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:f09cb3e6bcb140f57b878580cf3b848976f67faaf53d850a7da9bfac12437068"}, + {file = "grpcio_tools-1.67.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:616dd0c6686212ca90ff899bb37eb774798677e43dc6f78c6954470782d37399"}, + {file = "grpcio_tools-1.67.1-cp310-cp310-win32.whl", hash = "sha256:58a66dbb3f0fef0396737ac09d6571a7f8d96a544ce3ed04c161f3d4fa8d51cc"}, + {file = "grpcio_tools-1.67.1-cp310-cp310-win_amd64.whl", hash = "sha256:89ee7c505bdf152e67c2cced6055aed4c2d4170f53a2b46a7e543d3b90e7b977"}, + {file = "grpcio_tools-1.67.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:6d80ddd87a2fb7131d242f7d720222ef4f0f86f53ec87b0a6198c343d8e4a86e"}, + {file = "grpcio_tools-1.67.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b655425b82df51f3bd9fd3ba1a6282d5c9ce1937709f059cb3d419b224532d89"}, + {file = "grpcio_tools-1.67.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:250241e6f9d20d0910a46887dfcbf2ec9108efd3b48f3fb95bb42d50d09d03f8"}, + {file = "grpcio_tools-1.67.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6008f5a5add0b6f03082edb597acf20d5a9e4e7c55ea1edac8296c19e6a0ec8d"}, + {file = "grpcio_tools-1.67.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5eff9818c3831fa23735db1fa39aeff65e790044d0a312260a0c41ae29cc2d9e"}, + {file = "grpcio_tools-1.67.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:262ab7c40113f8c3c246e28e369661ddf616a351cb34169b8ba470c9a9c3b56f"}, + {file = "grpcio_tools-1.67.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1eebd8c746adf5786fa4c3056258c21cc470e1eca51d3ed23a7fb6a697fe4e81"}, + {file = "grpcio_tools-1.67.1-cp311-cp311-win32.whl", hash = "sha256:3eff92fb8ca1dd55e3af0ef02236c648921fb7d0e8ca206b889585804b3659ae"}, + {file = "grpcio_tools-1.67.1-cp311-cp311-win_amd64.whl", hash = "sha256:1ed18281ee17e5e0f9f6ce0c6eb3825ca9b5a0866fc1db2e17fab8aca28b8d9f"}, + {file = "grpcio_tools-1.67.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:bd5caef3a484e226d05a3f72b2d69af500dca972cf434bf6b08b150880166f0b"}, + {file = "grpcio_tools-1.67.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:48a2d63d1010e5b218e8e758ecb2a8d63c0c6016434e9f973df1c3558917020a"}, + {file = "grpcio_tools-1.67.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:baa64a6aa009bffe86309e236c81b02cd4a88c1ebd66f2d92e84e9b97a9ae857"}, + {file = "grpcio_tools-1.67.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4ab318c40b5e3c097a159035fc3e4ecfbe9b3d2c9de189e55468b2c27639a6ab"}, + {file = "grpcio_tools-1.67.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50eba3e31f9ac1149463ad9182a37349850904f142cffbd957cd7f54ec320b8e"}, + {file = "grpcio_tools-1.67.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:de6fbc071ecc4fe6e354a7939202191c1f1abffe37fbce9b08e7e9a5b93eba3d"}, + {file = "grpcio_tools-1.67.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:db9e87f6ea4b0ce99b2651203480585fd9e8dd0dd122a19e46836e93e3a1b749"}, + {file = "grpcio_tools-1.67.1-cp312-cp312-win32.whl", hash = "sha256:6a595a872fb720dde924c4e8200f41d5418dd6baab8cc1a3c1e540f8f4596351"}, + {file = "grpcio_tools-1.67.1-cp312-cp312-win_amd64.whl", hash = "sha256:92eebb9b31031604ae97ea7657ae2e43149b0394af7117ad7e15894b6cc136dc"}, + {file = "grpcio_tools-1.67.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:9a3b9510cc87b6458b05ad49a6dee38df6af37f9ee6aa027aa086537798c3d4a"}, + {file = "grpcio_tools-1.67.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9e4c9b9fa9b905f15d414cb7bd007ba7499f8907bdd21231ab287a86b27da81a"}, + {file = "grpcio_tools-1.67.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:e11a98b41af4bc88b7a738232b8fa0306ad82c79fa5d7090bb607f183a57856f"}, + {file = "grpcio_tools-1.67.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:de0fcfe61c26679d64b1710746f2891f359593f76894fcf492c37148d5694f00"}, + {file = "grpcio_tools-1.67.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ae3b3e2ee5aad59dece65a613624c46a84c9582fc3642686537c6dfae8e47dc"}, + {file = "grpcio_tools-1.67.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:9a630f83505b6471a3094a7a372a1240de18d0cd3e64f4fbf46b361bac2be65b"}, + {file = "grpcio_tools-1.67.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d85a1fcbacd3e08dc2b3d1d46b749351a9a50899fa35cf2ff040e1faf7d405ad"}, + {file = "grpcio_tools-1.67.1-cp313-cp313-win32.whl", hash = "sha256:778470f025f25a1fca5a48c93c0a18af395b46b12dd8df7fca63736b85181f41"}, + {file = "grpcio_tools-1.67.1-cp313-cp313-win_amd64.whl", hash = "sha256:6961da86e9856b4ddee0bf51ef6636b4bf9c29c0715aa71f3c8f027c45d42654"}, + {file = "grpcio_tools-1.67.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:c088dfbbe289bb171ca9c98fabbf7ecc8c1c51af2ba384ef32a4fdcb784b17e9"}, + {file = "grpcio_tools-1.67.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:11ce546daf8f8c04ee8d4a1673b4754cda4a0a9d505d820efd636e37f46b50c5"}, + {file = "grpcio_tools-1.67.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:83fecb2f6119ef0eea68a091964898418c1969375d399956ff8d1741beb7b081"}, + {file = "grpcio_tools-1.67.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d39c1aa6b26e2602d815b9cfa37faba48b2889680ae6baa002560cf0f0c69fac"}, + {file = "grpcio_tools-1.67.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e975dc9fb61a77d88e739eb17b3361f369d03cc754217f02dd83ec7cfac32e38"}, + {file = "grpcio_tools-1.67.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6c6e5c5b15f2eedc2a81268d588d14a79a52020383bf87b3c7595df7b571504a"}, + {file = "grpcio_tools-1.67.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a974e0ce01806adba718e6eb8c385defe6805b18969b6914da7db55fb055ae45"}, + {file = "grpcio_tools-1.67.1-cp38-cp38-win32.whl", hash = "sha256:35e9b0a82be9f425aa67ee1dc69ba02cf135aeee3f22c0455c5d1b01769bbdb4"}, + {file = "grpcio_tools-1.67.1-cp38-cp38-win_amd64.whl", hash = "sha256:0436c97f29e654d2eccd7419907ee019caf7eea6bdc6ae91d98011f6c5f44f17"}, + {file = "grpcio_tools-1.67.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:718fbb6d68a3d000cb3cf381642660eade0e8c1b0bf7472b84b3367f5b56171d"}, + {file = "grpcio_tools-1.67.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:062887d2e9cb8bc261c21a2b8da714092893ce62b4e072775eaa9b24dcbf3b31"}, + {file = "grpcio_tools-1.67.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:59dbf14a1ce928bf03a58fa157034374411159ab5d32ad83cf146d9400eed618"}, + {file = "grpcio_tools-1.67.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ac552fc9c76d50408d7141e1fd1eae69d85fbf7ae71da4d8877eaa07127fbe74"}, + {file = "grpcio_tools-1.67.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c6583773400e441dc62d08b5a32357babef1a9f9f73c3ac328a75af550815a9"}, + {file = "grpcio_tools-1.67.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:862108f90f2f6408908e5ea4584c5104f7caf419c6d73aa3ff36bf8284cca224"}, + {file = "grpcio_tools-1.67.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:587c6326425f37dca2291f46b93e446c07ee781cea27725865b806b7a049ec56"}, + {file = "grpcio_tools-1.67.1-cp39-cp39-win32.whl", hash = "sha256:d7d46a4405bd763525215b6e073888386587aef9b4a5ec125bf97ba897ac757d"}, + {file = "grpcio_tools-1.67.1-cp39-cp39-win_amd64.whl", hash = "sha256:e2fc7980e8bab3ee5ab98b6fdc2a8fbaa4785f196d897531346176fda49a605c"}, + {file = "grpcio_tools-1.67.1.tar.gz", hash = "sha256:d9657f5ddc62b52f58904e6054b7d8a8909ed08a1e28b734be3a707087bcf004"}, ] [package.dependencies] -grpcio = ">=1.63.0" +grpcio = ">=1.67.1" protobuf = ">=5.26.1,<6.0dev" setuptools = "*" @@ -733,13 +704,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.5" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -750,7 +721,7 @@ h11 = ">=0.13,<0.15" asyncio = ["anyio (>=4.0,<5.0)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] +trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" @@ -788,41 +759,19 @@ files = [ {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, ] -[[package]] -name = "identify" -version = "2.5.36" -description = "File identification library for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "identify-2.5.36-py2.py3-none-any.whl", hash = "sha256:37d93f380f4de590500d9dba7db359d0d3da95ffe7f9de1753faa159e71e7dfa"}, - {file = "identify-2.5.36.tar.gz", hash = "sha256:e5e00f54165f9047fbebeb4a560f9acfb8af4c88232be60a488e9b68d122745d"}, -] - -[package.extras] -license = ["ukkonen"] - [[package]] name = "idna" -version = "3.7" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "ipdb" @@ -881,22 +830,22 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa [[package]] name = "jedi" -version = "0.19.1" +version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, - {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, ] [package.dependencies] -parso = ">=0.8.3,<0.9.0" +parso = ">=0.8.4,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jsons" @@ -915,25 +864,6 @@ typish = ">=1.9.2" [package.extras] test = ["attrs", "codecov", "coverage", "dataclasses", "pytest", "scons", "tzdata"] -[[package]] -name = "marshmallow" -version = "3.21.3" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -optional = false -python-versions = ">=3.8" -files = [ - {file = "marshmallow-3.21.3-py3-none-any.whl", hash = "sha256:86ce7fb914aa865001a4b2092c4c2872d13bc347f3d42673272cabfdbad386f1"}, - {file = "marshmallow-3.21.3.tar.gz", hash = "sha256:4f57c5e050a54d66361e826f94fba213eb10b67b2fdb02c3e0343ce207ba1662"}, -] - -[package.dependencies] -packaging = ">=17.0" - -[package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<4.0)", "tox"] -docs = ["alabaster (==0.7.16)", "autodocsumm (==0.2.12)", "sphinx (==7.3.7)", "sphinx-issues (==4.1.0)", "sphinx-version-warning (==1.1.2)"] -tests = ["pytest", "pytz", "simplejson"] - [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -950,27 +880,18 @@ traitlets = "*" [[package]] name = "milvus-lite" -version = "2.4.7" +version = "2.4.11" description = "A lightweight version of Milvus wrapped with Python." optional = false python-versions = ">=3.7" files = [ - {file = "milvus_lite-2.4.7-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:c828190118b104b05b8c8e0b5a4147811c86b54b8fb67bc2e726ad10fc0b544e"}, - {file = "milvus_lite-2.4.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:e1537633c39879714fb15082be56a4b97f74c905a6e98e302ec01320561081af"}, - {file = "milvus_lite-2.4.7-py3-none-manylinux2014_aarch64.whl", hash = "sha256:fcb909d38c83f21478ca9cb500c84264f988c69f62715ae9462e966767fb76dd"}, - {file = "milvus_lite-2.4.7-py3-none-manylinux2014_x86_64.whl", hash = "sha256:f016474d663045787dddf1c3aad13b7d8b61fd329220318f858184918143dcbf"}, + {file = "milvus_lite-2.4.11-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9e563ae0dca1b41bfd76b90f06b2bcc474460fe4eba142c9bab18d2747ff843b"}, + {file = "milvus_lite-2.4.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d21472bd24eb327542817829ce7cb51878318e6173c4d62353c77421aecf98d6"}, + {file = "milvus_lite-2.4.11-py3-none-manylinux2014_x86_64.whl", hash = "sha256:551f56b49fcfbb330b658b4a3c56ed29ba9b692ec201edd1f2dade7f5e39957d"}, ] -[[package]] -name = "nodeenv" -version = "1.9.1" -description = "Node.js virtual environment builder" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, - {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, -] +[package.dependencies] +tqdm = "*" [[package]] name = "numpy" @@ -1011,42 +932,30 @@ files = [ [[package]] name = "opensearch-py" -version = "2.6.0" +version = "2.8.0" description = "Python client for OpenSearch" optional = false python-versions = "<4,>=3.8" files = [ - {file = "opensearch_py-2.6.0-py2.py3-none-any.whl", hash = "sha256:b6e78b685dd4e9c016d7a4299cf1de69e299c88322e3f81c716e6e23fe5683c1"}, - {file = "opensearch_py-2.6.0.tar.gz", hash = "sha256:0b7c27e8ed84c03c99558406927b6161f186a72502ca6d0325413d8e5523ba96"}, + {file = "opensearch_py-2.8.0-py3-none-any.whl", hash = "sha256:52c60fdb5d4dcf6cce3ee746c13b194529b0161e0f41268b98ab8f1624abe2fa"}, + {file = "opensearch_py-2.8.0.tar.gz", hash = "sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda"}, ] [package.dependencies] -certifi = ">=2022.12.07" +certifi = ">=2024.07.04" Events = "*" python-dateutil = "*" -requests = ">=2.4.0,<3.0.0" -six = "*" +requests = ">=2.32.0,<3.0.0" urllib3 = [ - {version = ">=1.26.18,<1.27", markers = "python_version < \"3.10\""}, - {version = ">=1.26.18,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, + {version = ">=1.26.19,<1.27", markers = "python_version < \"3.10\""}, + {version = ">=1.26.19,<2.2.0 || >2.2.0,<2.2.1 || >2.2.1,<3", markers = "python_version >= \"3.10\""}, ] [package.extras] async = ["aiohttp (>=3.9.4,<4)"] -develop = ["black (>=24.3.0)", "botocore", "coverage (<8.0.0)", "jinja2", "mock", "myst-parser", "pytest (>=3.0.0)", "pytest-cov", "pytest-mock (<4.0.0)", "pytz", "pyyaml", "requests (>=2.0.0,<3.0.0)", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] -docs = ["aiohttp (>=3.9.4,<4)", "myst-parser", "sphinx", "sphinx-copybutton", "sphinx-rtd-theme"] -kerberos = ["requests-kerberos"] - -[[package]] -name = "packaging" -version = "24.1" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, -] +develop = ["black (>=24.3.0)", "botocore", "coverage (<8.0.0)", "jinja2", "myst_parser", "pytest (>=3.0.0)", "pytest-cov", "pytest-mock (<4.0.0)", "pytz", "pyyaml", "requests (>=2.0.0,<3.0.0)", "sphinx", "sphinx_copybutton", "sphinx_rtd_theme"] +docs = ["aiohttp (>=3.9.4,<4)", "myst_parser", "sphinx", "sphinx_copybutton", "sphinx_rtd_theme"] +kerberos = ["requests_kerberos"] [[package]] name = "pandas" @@ -1085,8 +994,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -1168,46 +1077,15 @@ files = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] -[[package]] -name = "platformdirs" -version = "4.2.2" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.8" -files = [ - {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, - {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] -type = ["mypy (>=1.8)"] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - [[package]] name = "portalocker" -version = "2.8.2" +version = "2.10.1" description = "Wraps the portalocker recipe for easy usage" optional = false python-versions = ">=3.8" files = [ - {file = "portalocker-2.8.2-py3-none-any.whl", hash = "sha256:cfb86acc09b9aa7c3b43594e19be1345b9d16af3feb08bf92f23d4dce513a28e"}, - {file = "portalocker-2.8.2.tar.gz", hash = "sha256:2b035aa7828e46c58e9b31390ee1f169b98e1066ab10b9a6a861fe7e25ee4f33"}, + {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, + {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, ] [package.dependencies] @@ -1218,33 +1096,15 @@ docs = ["sphinx (>=1.7.1)"] redis = ["redis"] tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] -[[package]] -name = "pre-commit" -version = "2.21.0" -description = "A framework for managing and maintaining multi-language pre-commit hooks." -optional = false -python-versions = ">=3.7" -files = [ - {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, - {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, -] - -[package.dependencies] -cfgv = ">=2.0.0" -identify = ">=1.0.0" -nodeenv = ">=0.11.1" -pyyaml = ">=5.1" -virtualenv = ">=20.10.0" - [[package]] name = "prompt-toolkit" -version = "3.0.47" +version = "3.0.48" description = "Library for building powerful interactive command lines in Python" optional = false python-versions = ">=3.7.0" files = [ - {file = "prompt_toolkit-3.0.47-py3-none-any.whl", hash = "sha256:0d7bfa67001d5e39d02c224b663abc33687405033a8c422d0d675a5a13361d10"}, - {file = "prompt_toolkit-3.0.47.tar.gz", hash = "sha256:1e1b29cb58080b1e69f207c893a1a7bf16d127a5c30c9d17a25a5d77792e5360"}, + {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, + {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, ] [package.dependencies] @@ -1252,119 +1112,120 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "5.27.1" +version = "5.29.3" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-5.27.1-cp310-abi3-win32.whl", hash = "sha256:3adc15ec0ff35c5b2d0992f9345b04a540c1e73bfee3ff1643db43cc1d734333"}, - {file = "protobuf-5.27.1-cp310-abi3-win_amd64.whl", hash = "sha256:25236b69ab4ce1bec413fd4b68a15ef8141794427e0b4dc173e9d5d9dffc3bcd"}, - {file = "protobuf-5.27.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:4e38fc29d7df32e01a41cf118b5a968b1efd46b9c41ff515234e794011c78b17"}, - {file = "protobuf-5.27.1-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:917ed03c3eb8a2d51c3496359f5b53b4e4b7e40edfbdd3d3f34336e0eef6825a"}, - {file = "protobuf-5.27.1-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:ee52874a9e69a30271649be88ecbe69d374232e8fd0b4e4b0aaaa87f429f1631"}, - {file = "protobuf-5.27.1-cp38-cp38-win32.whl", hash = "sha256:7a97b9c5aed86b9ca289eb5148df6c208ab5bb6906930590961e08f097258107"}, - {file = "protobuf-5.27.1-cp38-cp38-win_amd64.whl", hash = "sha256:f6abd0f69968792da7460d3c2cfa7d94fd74e1c21df321eb6345b963f9ec3d8d"}, - {file = "protobuf-5.27.1-cp39-cp39-win32.whl", hash = "sha256:dfddb7537f789002cc4eb00752c92e67885badcc7005566f2c5de9d969d3282d"}, - {file = "protobuf-5.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:39309898b912ca6febb0084ea912e976482834f401be35840a008da12d189340"}, - {file = "protobuf-5.27.1-py3-none-any.whl", hash = "sha256:4ac7249a1530a2ed50e24201d6630125ced04b30619262f06224616e0030b6cf"}, - {file = "protobuf-5.27.1.tar.gz", hash = "sha256:df5e5b8e39b7d1c25b186ffdf9f44f40f810bbcc9d2b71d9d3156fee5a9adf15"}, + {file = "protobuf-5.29.3-cp310-abi3-win32.whl", hash = "sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888"}, + {file = "protobuf-5.29.3-cp310-abi3-win_amd64.whl", hash = "sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a"}, + {file = "protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e"}, + {file = "protobuf-5.29.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:daaf63f70f25e8689c072cfad4334ca0ac1d1e05a92fc15c54eb9cf23c3efd84"}, + {file = "protobuf-5.29.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:c027e08a08be10b67c06bf2370b99c811c466398c357e615ca88c91c07f0910f"}, + {file = "protobuf-5.29.3-cp38-cp38-win32.whl", hash = "sha256:84a57163a0ccef3f96e4b6a20516cedcf5bb3a95a657131c5c3ac62200d23252"}, + {file = "protobuf-5.29.3-cp38-cp38-win_amd64.whl", hash = "sha256:b89c115d877892a512f79a8114564fb435943b59067615894c3b13cd3e1fa107"}, + {file = "protobuf-5.29.3-cp39-cp39-win32.whl", hash = "sha256:0eb32bfa5219fc8d4111803e9a690658aa2e6366384fd0851064b963b6d1f2a7"}, + {file = "protobuf-5.29.3-cp39-cp39-win_amd64.whl", hash = "sha256:6ce8cc3389a20693bfde6c6562e03474c40851b44975c9b2bf6df7d8c4f864da"}, + {file = "protobuf-5.29.3-py3-none-any.whl", hash = "sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f"}, + {file = "protobuf-5.29.3.tar.gz", hash = "sha256:5da0f41edaf117bde316404bad1a486cb4ededf8e4a54891296f648e8e076620"}, ] [[package]] name = "psycopg" -version = "3.1.19" +version = "3.2.3" description = "PostgreSQL database adapter for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "psycopg-3.1.19-py3-none-any.whl", hash = "sha256:dca5e5521c859f6606686432ae1c94e8766d29cc91f2ee595378c510cc5b0731"}, - {file = "psycopg-3.1.19.tar.gz", hash = "sha256:92d7b78ad82426cdcf1a0440678209faa890c6e1721361c2f8901f0dccd62961"}, + {file = "psycopg-3.2.3-py3-none-any.whl", hash = "sha256:644d3973fe26908c73d4be746074f6e5224b03c1101d302d9a53bf565ad64907"}, + {file = "psycopg-3.2.3.tar.gz", hash = "sha256:a5764f67c27bec8bfac85764d23c534af2c27b893550377e37ce59c12aac47a2"}, ] [package.dependencies] "backports.zoneinfo" = {version = ">=0.2.0", markers = "python_version < \"3.9\""} -psycopg-binary = {version = "3.1.19", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} -typing-extensions = ">=4.1" +psycopg-binary = {version = "3.2.3", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} +typing-extensions = {version = ">=4.6", markers = "python_version < \"3.13\""} tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] -binary = ["psycopg-binary (==3.1.19)"] -c = ["psycopg-c (==3.1.19)"] -dev = ["black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "mypy (>=1.4.1)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] +binary = ["psycopg-binary (==3.2.3)"] +c = ["psycopg-c (==3.2.3)"] +dev = ["ast-comments (>=1.1.2)", "black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "mypy (>=1.11)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] docs = ["Sphinx (>=5.0)", "furo (==2022.6.21)", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints (>=1.12)"] pool = ["psycopg-pool"] -test = ["anyio (>=3.6.2,<4.0)", "mypy (>=1.4.1)", "pproxy (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0)", "pytest-randomly (>=3.5)"] +test = ["anyio (>=4.0)", "mypy (>=1.11)", "pproxy (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0)", "pytest-randomly (>=3.5)"] [[package]] name = "psycopg-binary" -version = "3.1.19" +version = "3.2.3" description = "PostgreSQL database adapter for Python -- C optimisation distribution" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "psycopg_binary-3.1.19-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7204818f05151dd08f8f851defb01972ec9d2cc925608eb0de232563f203f354"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6d4e67fd86758dbeac85641419a54f84d74495a8683b58ad5dfad08b7fc37a8f"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e12173e34b176e93ad2da913de30f774d5119c2d4d4640c6858d2d77dfa6c9bf"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:052f5193304066318853b4b2e248f523c8f52b371fc4e95d4ef63baee3f30955"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29008f3f8977f600b8a7fb07c2e041b01645b08121760609cc45e861a0364dc9"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c6a9a651a08d876303ed059c9553df18b3c13c3406584a70a8f37f1a1fe2709"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:91a645e6468c4f064b7f4f3b81074bdd68fe5aa2b8c5107de15dcd85ba6141be"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5c6956808fd5cf0576de5a602243af8e04594b25b9a28675feddc71c5526410a"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:1622ca27d5a7a98f7d8f35e8b146dc7efda4a4b6241d2edf7e076bd6bcecbeb4"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a100482950a55228f648bd382bb71bfaff520002f29845274fccbbf02e28bd52"}, - {file = "psycopg_binary-3.1.19-cp310-cp310-win_amd64.whl", hash = "sha256:955ca8905c0251fc4af7ce0a20999e824a25652f53a558ab548b60969f1f368e"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cf49e91dcf699b8a449944ed898ef1466b39b92720613838791a551bc8f587a"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:964c307e400c5f33fa762ba1e19853e048814fcfbd9679cc923431adb7a2ead2"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3433924e1b14074798331dc2bfae2af452ed7888067f2fc145835704d8981b15"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00879d4c6be4b3afc510073f48a5e960f797200e261ab3d9bd9b7746a08c669d"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34a6997c80f86d3dd80a4f078bb3b200079c47eeda4fd409d8899b883c90d2ac"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0106e42b481677c41caa69474fe530f786dcef88b11b70000f0e45a03534bc8f"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81efe09ba27533e35709905c3061db4dc9fb814f637360578d065e2061fbb116"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:d312d6dddc18d9c164e1893706269c293cba1923118349d375962b1188dafb01"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:bfd2c734da9950f7afaad5f132088e0e1478f32f042881fca6651bb0c8d14206"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:8a732610a5a6b4f06dadcf9288688a8ff202fd556d971436a123b7adb85596e2"}, - {file = "psycopg_binary-3.1.19-cp311-cp311-win_amd64.whl", hash = "sha256:321814a9a3ad785855a821b842aba08ca1b7de7dfb2979a2f0492dca9ec4ae70"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:4aa0ca13bb8a725bb6d12c13999217fd5bc8b86a12589f28a74b93e076fbb959"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:469424e354ebcec949aa6aa30e5a9edc352a899d9a68ad7a48f97df83cc914cf"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b04f5349313529ae1f1c42fe1aa0443faaf50fdf12d13866c2cc49683bfa53d0"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:959feabddc7fffac89b054d6f23f3b3c62d7d3c90cd414a02e3747495597f150"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e9da624a6ca4bc5f7fa1f03f8485446b5b81d5787b6beea2b4f8d9dbef878ad7"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c1823221a6b96e38b15686170d4fc5b36073efcb87cce7d3da660440b50077f6"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:866db42f986298f0cf15d805225eb8df2228bf19f7997d7f1cb5f388cbfc6a0f"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:738c34657305b5973af6dbb6711b07b179dfdd21196d60039ca30a74bafe9648"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb9758473200384a04374d0e0cac6f451218ff6945a024f65a1526802c34e56e"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0e991632777e217953ac960726158987da684086dd813ac85038c595e7382c91"}, - {file = "psycopg_binary-3.1.19-cp312-cp312-win_amd64.whl", hash = "sha256:1d87484dd42c8783c44a30400949efb3d81ef2487eaa7d64d1c54df90cf8b97a"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d1d1723d7449c12bb61aca7eb6e0c6ab2863cd8dc0019273cc4d4a1982f84bdb"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e538a8671005641fa195eab962f85cf0504defbd3b548c4c8fc27102a59f687b"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c50592bc8517092f40979e4a5d934f96a1737a77724bb1d121eb78b614b30fc8"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:95f16ae82bc242b76cd3c3e5156441e2bd85ff9ec3a9869d750aad443e46073c"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aebd1e98e865e9a28ce0cb2c25b7dfd752f0d1f0a423165b55cd32a431dcc0f4"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:49cd7af7d49e438a39593d1dd8cab106a1912536c2b78a4d814ebdff2786094e"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:affebd61aa3b7a8880fd4ac3ee94722940125ff83ff485e1a7c76be9adaabb38"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:d1bac282f140fa092f2bbb6c36ed82270b4a21a6fc55d4b16748ed9f55e50fdb"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:1285aa54449e362b1d30d92b2dc042ad3ee80f479cc4e323448d0a0a8a1641fa"}, - {file = "psycopg_binary-3.1.19-cp37-cp37m-win_amd64.whl", hash = "sha256:6cff31af8155dc9ee364098a328bab688c887c732c66b8d027e5b03818ca0287"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d9b689c4a17dd3130791dcbb8c30dbf05602f7c2d56c792e193fb49adc7bf5f8"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:017518bd2de4851adc826a224fb105411e148ad845e11355edd6786ba3dfedf5"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c35fd811f339a3cbe7f9b54b2d9a5e592e57426c6cc1051632a62c59c4810208"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:38ed45ec9673709bfa5bc17f140e71dd4cca56d4e58ef7fd50d5a5043a4f55c6"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:433f1c256108f9e26f480a8cd6ddb0fb37dbc87d7f5a97e4540a9da9b881f23f"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:ed61e43bf5dc8d0936daf03a19fef3168d64191dbe66483f7ad08c4cea0bc36b"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:4ae8109ff9fdf1fa0cb87ab6645298693fdd2666a7f5f85660df88f6965e0bb7"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:a53809ee02e3952fae7977c19b30fd828bd117b8f5edf17a3a94212feb57faaf"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:9d39d5ffc151fb33bcd55b99b0e8957299c0b1b3e5a1a5f4399c1287ef0051a9"}, - {file = "psycopg_binary-3.1.19-cp38-cp38-win_amd64.whl", hash = "sha256:e14bc8250000921fcccd53722f86b3b3d1b57db901e206e49e2ab2afc5919c2d"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:cd88c5cea4efe614d5004fb5f5dcdea3d7d59422be796689e779e03363102d24"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:621a814e60825162d38760c66351b4df679fd422c848b7c2f86ad399bff27145"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46e50c05952b59a214e27d3606f6d510aaa429daed898e16b8a37bfbacc81acc"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03354a9db667c27946e70162cb0042c3929154167f3678a30d23cebfe0ad55b5"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c2f3b79037581afec7baa2bdbcb0a1787f1758744a7662099b0eca2d721cb"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:6469ebd9e93327e9f5f36dcf8692fb1e7aeaf70087c1c15d4f2c020e0be3a891"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:85bca9765c04b6be90cb46e7566ffe0faa2d7480ff5c8d5e055ac427f039fd24"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:a836610d5c75e9cff98b9fdb3559c007c785c09eaa84a60d5d10ef6f85f671e8"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ef8de7a1d9fb3518cc6b58e3c80b75a824209ad52b90c542686c912db8553dad"}, - {file = "psycopg_binary-3.1.19-cp39-cp39-win_amd64.whl", hash = "sha256:76fcd33342f38e35cd6b5408f1bc117d55ab8b16e5019d99b6d3ce0356c51717"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:965455eac8547f32b3181d5ec9ad8b9be500c10fe06193543efaaebe3e4ce70c"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:71adcc8bc80a65b776510bc39992edf942ace35b153ed7a9c6c573a6849ce308"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f73adc05452fb85e7a12ed3f69c81540a8875960739082e6ea5e28c373a30774"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8630943143c6d6ca9aefc88bbe5e76c90553f4e1a3b2dc339e67dc34aa86f7e"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bffb61e198a91f712cc3d7f2d176a697cb05b284b2ad150fb8edb308eba9002"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4fa2240c9fceddaa815a58f29212826fafe43ce80ff666d38c4a03fb036955"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:192a5f8496e6e1243fdd9ac20e117e667c0712f148c5f9343483b84435854c78"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64dc6e9ec64f592f19dc01a784e87267a64a743d34f68488924251253da3c818"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:79498df398970abcee3d326edd1d4655de7d77aa9aecd578154f8af35ce7bbd2"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:949551752930d5e478817e0b49956350d866b26578ced0042a61967e3fcccdea"}, + {file = "psycopg_binary-3.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:80a2337e2dfb26950894c8301358961430a0304f7bfe729d34cc036474e9c9b1"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:6d8f2144e0d5808c2e2aed40fbebe13869cd00c2ae745aca4b3b16a435edb056"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:94253be2b57ef2fea7ffe08996067aabf56a1eb9648342c9e3bad9e10c46e045"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fda0162b0dbfa5eaed6cdc708179fa27e148cb8490c7d62e5cf30713909658ea"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c0419cdad8c70eaeb3116bb28e7b42d546f91baf5179d7556f230d40942dc78"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74fbf5dd3ef09beafd3557631e282f00f8af4e7a78fbfce8ab06d9cd5a789aae"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d784f614e4d53050cbe8abf2ae9d1aaacf8ed31ce57b42ce3bf2a48a66c3a5c"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4e76ce2475ed4885fe13b8254058be710ec0de74ebd8ef8224cf44a9a3358e5f"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5938b257b04c851c2d1e6cb2f8c18318f06017f35be9a5fe761ee1e2e344dfb7"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:257c4aea6f70a9aef39b2a77d0658a41bf05c243e2bf41895eb02220ac6306f3"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:06b5cc915e57621eebf2393f4173793ed7e3387295f07fed93ed3fb6a6ccf585"}, + {file = "psycopg_binary-3.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:09baa041856b35598d335b1a74e19a49da8500acedf78164600694c0ba8ce21b"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:48f8ca6ee8939bab760225b2ab82934d54330eec10afe4394a92d3f2a0c37dd6"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5361ea13c241d4f0ec3f95e0bf976c15e2e451e9cc7ef2e5ccfc9d170b197a40"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb987f14af7da7c24f803111dbc7392f5070fd350146af3345103f76ea82e339"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0463a11b1cace5a6aeffaf167920707b912b8986a9c7920341c75e3686277920"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b7be9a6c06518967b641fb15032b1ed682fd3b0443f64078899c61034a0bca6"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64a607e630d9f4b2797f641884e52b9f8e239d35943f51bef817a384ec1678fe"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fa33ead69ed133210d96af0c63448b1385df48b9c0247eda735c5896b9e6dbbf"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1f8b0d0e99d8e19923e6e07379fa00570be5182c201a8c0b5aaa9a4d4a4ea20b"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:709447bd7203b0b2debab1acec23123eb80b386f6c29e7604a5d4326a11e5bd6"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5e37d5027e297a627da3551a1e962316d0f88ee4ada74c768f6c9234e26346d9"}, + {file = "psycopg_binary-3.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:261f0031ee6074765096a19b27ed0f75498a8338c3dcd7f4f0d831e38adf12d1"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:41fdec0182efac66b27478ac15ef54c9ebcecf0e26ed467eb7d6f262a913318b"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:07d019a786eb020c0f984691aa1b994cb79430061065a694cf6f94056c603d26"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c57615791a337378fe5381143259a6c432cdcbb1d3e6428bfb7ce59fff3fb5c"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8eb9a4e394926b93ad919cad1b0a918e9b4c846609e8c1cfb6b743683f64da0"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5905729668ef1418bd36fbe876322dcb0f90b46811bba96d505af89e6fbdce2f"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd65774ed7d65101b314808b6893e1a75b7664f680c3ef18d2e5c84d570fa393"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:700679c02f9348a0d0a2adcd33a0275717cd0d0aee9d4482b47d935023629505"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:96334bb64d054e36fed346c50c4190bad9d7c586376204f50bede21a913bf942"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9099e443d4cc24ac6872e6a05f93205ba1a231b1a8917317b07c9ef2b955f1f4"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1985ab05e9abebfbdf3163a16ebb37fbc5d49aff2bf5b3d7375ff0920bbb54cd"}, + {file = "psycopg_binary-3.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:e90352d7b610b4693fad0feea48549d4315d10f1eba5605421c92bb834e90170"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:69320f05de8cdf4077ecd7fefdec223890eea232af0d58f2530cbda2871244a0"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4926ea5c46da30bec4a85907aa3f7e4ea6313145b2aa9469fdb861798daf1502"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c64c4cd0d50d5b2288ab1bcb26c7126c772bbdebdfadcd77225a77df01c4a57e"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05a1bdce30356e70a05428928717765f4a9229999421013f41338d9680d03a63"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad357e426b0ea5c3043b8ec905546fa44b734bf11d33b3da3959f6e4447d350"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:967b47a0fd237aa17c2748fdb7425015c394a6fb57cdad1562e46a6eb070f96d"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:71db8896b942770ed7ab4efa59b22eee5203be2dfdee3c5258d60e57605d688c"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:2773f850a778575dd7158a6dd072f7925b67f3ba305e2003538e8831fec77a1d"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aeddf7b3b3f6e24ccf7d0edfe2d94094ea76b40e831c16eff5230e040ce3b76b"}, + {file = "psycopg_binary-3.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:824c867a38521d61d62b60aca7db7ca013a2b479e428a0db47d25d8ca5067410"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:9994f7db390c17fc2bd4c09dca722fd792ff8a49bb3bdace0c50a83f22f1767d"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1303bf8347d6be7ad26d1362af2c38b3a90b8293e8d56244296488ee8591058e"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:842da42a63ecb32612bb7f5b9e9f8617eab9bc23bd58679a441f4150fcc51c96"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2bb342a01c76f38a12432848e6013c57eb630103e7556cf79b705b53814c3949"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd40af959173ea0d087b6b232b855cfeaa6738f47cb2a0fd10a7f4fa8b74293f"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9b60b465773a52c7d4705b0a751f7f1cdccf81dd12aee3b921b31a6e76b07b0e"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fc6d87a1c44df8d493ef44988a3ded751e284e02cdf785f746c2d357e99782a6"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:f0b018e37608c3bfc6039a1dc4eb461e89334465a19916be0153c757a78ea426"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2a29f5294b0b6360bfda69653697eff70aaf2908f58d1073b0acd6f6ab5b5a4f"}, + {file = "psycopg_binary-3.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:e56b1fd529e5dde2d1452a7d72907b37ed1b4f07fdced5d8fb1e963acfff6749"}, ] [[package]] @@ -1380,13 +1241,13 @@ files = [ [[package]] name = "pure-eval" -version = "0.2.2" +version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" files = [ - {file = "pure_eval-0.2.2-py3-none-any.whl", hash = "sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350"}, - {file = "pure_eval-0.2.2.tar.gz", hash = "sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3"}, + {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, + {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, ] [package.extras] @@ -1405,109 +1266,131 @@ files = [ [[package]] name = "pydantic" -version = "2.7.4" +version = "2.10.5" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.7.4-py3-none-any.whl", hash = "sha256:ee8538d41ccb9c0a9ad3e0e5f07bf15ed8015b481ced539a1759d8cc89ae90d0"}, - {file = "pydantic-2.7.4.tar.gz", hash = "sha256:0c84efd9548d545f63ac0060c1e4d39bb9b14db8b3c0652338aecc07b5adec52"}, + {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, + {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.18.4" -typing-extensions = ">=4.6.1" +annotated-types = ">=0.6.0" +pydantic-core = "2.27.2" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.18.4" +version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.18.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:f76d0ad001edd426b92233d45c746fd08f467d56100fd8f30e9ace4b005266e4"}, - {file = "pydantic_core-2.18.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:59ff3e89f4eaf14050c8022011862df275b552caef8082e37b542b066ce1ff26"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a55b5b16c839df1070bc113c1f7f94a0af4433fcfa1b41799ce7606e5c79ce0a"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4d0dcc59664fcb8974b356fe0a18a672d6d7cf9f54746c05f43275fc48636851"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8951eee36c57cd128f779e641e21eb40bc5073eb28b2d23f33eb0ef14ffb3f5d"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4701b19f7e3a06ea655513f7938de6f108123bf7c86bbebb1196eb9bd35cf724"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e00a3f196329e08e43d99b79b286d60ce46bed10f2280d25a1718399457e06be"}, - {file = "pydantic_core-2.18.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:97736815b9cc893b2b7f663628e63f436018b75f44854c8027040e05230eeddb"}, - {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6891a2ae0e8692679c07728819b6e2b822fb30ca7445f67bbf6509b25a96332c"}, - {file = "pydantic_core-2.18.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bc4ff9805858bd54d1a20efff925ccd89c9d2e7cf4986144b30802bf78091c3e"}, - {file = "pydantic_core-2.18.4-cp310-none-win32.whl", hash = "sha256:1b4de2e51bbcb61fdebd0ab86ef28062704f62c82bbf4addc4e37fa4b00b7cbc"}, - {file = "pydantic_core-2.18.4-cp310-none-win_amd64.whl", hash = "sha256:6a750aec7bf431517a9fd78cb93c97b9b0c496090fee84a47a0d23668976b4b0"}, - {file = "pydantic_core-2.18.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:942ba11e7dfb66dc70f9ae66b33452f51ac7bb90676da39a7345e99ffb55402d"}, - {file = "pydantic_core-2.18.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2ebef0e0b4454320274f5e83a41844c63438fdc874ea40a8b5b4ecb7693f1c4"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a642295cd0c8df1b86fc3dced1d067874c353a188dc8e0f744626d49e9aa51c4"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f09baa656c904807e832cf9cce799c6460c450c4ad80803517032da0cd062e2"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98906207f29bc2c459ff64fa007afd10a8c8ac080f7e4d5beff4c97086a3dabd"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19894b95aacfa98e7cb093cd7881a0c76f55731efad31073db4521e2b6ff5b7d"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0fbbdc827fe5e42e4d196c746b890b3d72876bdbf160b0eafe9f0334525119c8"}, - {file = "pydantic_core-2.18.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f85d05aa0918283cf29a30b547b4df2fbb56b45b135f9e35b6807cb28bc47951"}, - {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e85637bc8fe81ddb73fda9e56bab24560bdddfa98aa64f87aaa4e4b6730c23d2"}, - {file = "pydantic_core-2.18.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2f5966897e5461f818e136b8451d0551a2e77259eb0f73a837027b47dc95dab9"}, - {file = "pydantic_core-2.18.4-cp311-none-win32.whl", hash = "sha256:44c7486a4228413c317952e9d89598bcdfb06399735e49e0f8df643e1ccd0558"}, - {file = "pydantic_core-2.18.4-cp311-none-win_amd64.whl", hash = "sha256:8a7164fe2005d03c64fd3b85649891cd4953a8de53107940bf272500ba8a788b"}, - {file = "pydantic_core-2.18.4-cp311-none-win_arm64.whl", hash = "sha256:4e99bc050fe65c450344421017f98298a97cefc18c53bb2f7b3531eb39bc7805"}, - {file = "pydantic_core-2.18.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:6f5c4d41b2771c730ea1c34e458e781b18cc668d194958e0112455fff4e402b2"}, - {file = "pydantic_core-2.18.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2fdf2156aa3d017fddf8aea5adfba9f777db1d6022d392b682d2a8329e087cef"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4748321b5078216070b151d5271ef3e7cc905ab170bbfd27d5c83ee3ec436695"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:847a35c4d58721c5dc3dba599878ebbdfd96784f3fb8bb2c356e123bdcd73f34"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c40d4eaad41f78e3bbda31b89edc46a3f3dc6e171bf0ecf097ff7a0ffff7cb1"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:21a5e440dbe315ab9825fcd459b8814bb92b27c974cbc23c3e8baa2b76890077"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01dd777215e2aa86dfd664daed5957704b769e726626393438f9c87690ce78c3"}, - {file = "pydantic_core-2.18.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b06beb3b3f1479d32befd1f3079cc47b34fa2da62457cdf6c963393340b56e9"}, - {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:564d7922e4b13a16b98772441879fcdcbe82ff50daa622d681dd682175ea918c"}, - {file = "pydantic_core-2.18.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:0eb2a4f660fcd8e2b1c90ad566db2b98d7f3f4717c64fe0a83e0adb39766d5b8"}, - {file = "pydantic_core-2.18.4-cp312-none-win32.whl", hash = "sha256:8b8bab4c97248095ae0c4455b5a1cd1cdd96e4e4769306ab19dda135ea4cdb07"}, - {file = "pydantic_core-2.18.4-cp312-none-win_amd64.whl", hash = "sha256:14601cdb733d741b8958224030e2bfe21a4a881fb3dd6fbb21f071cabd48fa0a"}, - {file = "pydantic_core-2.18.4-cp312-none-win_arm64.whl", hash = "sha256:c1322d7dd74713dcc157a2b7898a564ab091ca6c58302d5c7b4c07296e3fd00f"}, - {file = "pydantic_core-2.18.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:823be1deb01793da05ecb0484d6c9e20baebb39bd42b5d72636ae9cf8350dbd2"}, - {file = "pydantic_core-2.18.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ebef0dd9bf9b812bf75bda96743f2a6c5734a02092ae7f721c048d156d5fabae"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ae1d6df168efb88d7d522664693607b80b4080be6750c913eefb77e34c12c71a"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9899c94762343f2cc2fc64c13e7cae4c3cc65cdfc87dd810a31654c9b7358cc"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99457f184ad90235cfe8461c4d70ab7dd2680e28821c29eca00252ba90308c78"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18f469a3d2a2fdafe99296a87e8a4c37748b5080a26b806a707f25a902c040a8"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7cdf28938ac6b8b49ae5e92f2735056a7ba99c9b110a474473fd71185c1af5d"}, - {file = "pydantic_core-2.18.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:938cb21650855054dc54dfd9120a851c974f95450f00683399006aa6e8abb057"}, - {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:44cd83ab6a51da80fb5adbd9560e26018e2ac7826f9626bc06ca3dc074cd198b"}, - {file = "pydantic_core-2.18.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:972658f4a72d02b8abfa2581d92d59f59897d2e9f7e708fdabe922f9087773af"}, - {file = "pydantic_core-2.18.4-cp38-none-win32.whl", hash = "sha256:1d886dc848e60cb7666f771e406acae54ab279b9f1e4143babc9c2258213daa2"}, - {file = "pydantic_core-2.18.4-cp38-none-win_amd64.whl", hash = "sha256:bb4462bd43c2460774914b8525f79b00f8f407c945d50881568f294c1d9b4443"}, - {file = "pydantic_core-2.18.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:44a688331d4a4e2129140a8118479443bd6f1905231138971372fcde37e43528"}, - {file = "pydantic_core-2.18.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a2fdd81edd64342c85ac7cf2753ccae0b79bf2dfa063785503cb85a7d3593223"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:86110d7e1907ab36691f80b33eb2da87d780f4739ae773e5fc83fb272f88825f"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:46387e38bd641b3ee5ce247563b60c5ca098da9c56c75c157a05eaa0933ed154"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:123c3cec203e3f5ac7b000bd82235f1a3eced8665b63d18be751f115588fea30"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dc1803ac5c32ec324c5261c7209e8f8ce88e83254c4e1aebdc8b0a39f9ddb443"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53db086f9f6ab2b4061958d9c276d1dbe3690e8dd727d6abf2321d6cce37fa94"}, - {file = "pydantic_core-2.18.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abc267fa9837245cc28ea6929f19fa335f3dc330a35d2e45509b6566dc18be23"}, - {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:a0d829524aaefdebccb869eed855e2d04c21d2d7479b6cada7ace5448416597b"}, - {file = "pydantic_core-2.18.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:509daade3b8649f80d4e5ff21aa5673e4ebe58590b25fe42fac5f0f52c6f034a"}, - {file = "pydantic_core-2.18.4-cp39-none-win32.whl", hash = "sha256:ca26a1e73c48cfc54c4a76ff78df3727b9d9f4ccc8dbee4ae3f73306a591676d"}, - {file = "pydantic_core-2.18.4-cp39-none-win_amd64.whl", hash = "sha256:c67598100338d5d985db1b3d21f3619ef392e185e71b8d52bceacc4a7771ea7e"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:574d92eac874f7f4db0ca653514d823a0d22e2354359d0759e3f6a406db5d55d"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1f4d26ceb5eb9eed4af91bebeae4b06c3fb28966ca3a8fb765208cf6b51102ab"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77450e6d20016ec41f43ca4a6c63e9fdde03f0ae3fe90e7c27bdbeaece8b1ed4"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d323a01da91851a4f17bf592faf46149c9169d68430b3146dcba2bb5e5719abc"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43d447dd2ae072a0065389092a231283f62d960030ecd27565672bd40746c507"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:578e24f761f3b425834f297b9935e1ce2e30f51400964ce4801002435a1b41ef"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:81b5efb2f126454586d0f40c4d834010979cb80785173d1586df845a632e4e6d"}, - {file = "pydantic_core-2.18.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ab86ce7c8f9bea87b9d12c7f0af71102acbf5ecbc66c17796cff45dae54ef9a5"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:90afc12421df2b1b4dcc975f814e21bc1754640d502a2fbcc6d41e77af5ec312"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:51991a89639a912c17bef4b45c87bd83593aee0437d8102556af4885811d59f5"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:293afe532740370aba8c060882f7d26cfd00c94cae32fd2e212a3a6e3b7bc15e"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b48ece5bde2e768197a2d0f6e925f9d7e3e826f0ad2271120f8144a9db18d5c8"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:eae237477a873ab46e8dd748e515c72c0c804fb380fbe6c85533c7de51f23a8f"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:834b5230b5dfc0c1ec37b2fda433b271cbbc0e507560b5d1588e2cc1148cf1ce"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e858ac0a25074ba4bce653f9b5d0a85b7456eaddadc0ce82d3878c22489fa4ee"}, - {file = "pydantic_core-2.18.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2fd41f6eff4c20778d717af1cc50eca52f5afe7805ee530a4fbd0bae284f16e9"}, - {file = "pydantic_core-2.18.4.tar.gz", hash = "sha256:ec3beeada09ff865c344ff3bc2f427f5e6c26401cc6113d77e372c3fdac73864"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, + {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7969e133a6f183be60e9f6f56bfae753585680f3b7307a8e555a948d443cc05a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3de9961f2a346257caf0aa508a4da705467f53778e9ef6fe744c038119737ef5"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2bb4d3e5873c37bb3dd58714d4cd0b0e6238cebc4177ac8fe878f8b3aa8e74c"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:280d219beebb0752699480fe8f1dc61ab6615c2046d76b7ab7ee38858de0a4e7"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47956ae78b6422cbd46f772f1746799cbb862de838fd8d1fbd34a82e05b0983a"}, + {file = "pydantic_core-2.27.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:14d4a5c49d2f009d62a2a7140d3064f686d17a5d1a268bc641954ba181880236"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:337b443af21d488716f8d0b6164de833e788aa6bd7e3a39c005febc1284f4962"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:03d0f86ea3184a12f41a2d23f7ccb79cdb5a18e06993f8a45baa8dfec746f0e9"}, + {file = "pydantic_core-2.27.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7041c36f5680c6e0f08d922aed302e98b3745d97fe1589db0a3eebf6624523af"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win32.whl", hash = "sha256:50a68f3e3819077be2c98110c1f9dcb3817e93f267ba80a2c05bb4f8799e2ff4"}, + {file = "pydantic_core-2.27.2-cp310-cp310-win_amd64.whl", hash = "sha256:e0fd26b16394ead34a424eecf8a31a1f5137094cabe84a1bcb10fa6ba39d3d31"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:8e10c99ef58cfdf2a66fc15d66b16c4a04f62bca39db589ae8cba08bc55331bc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:26f32e0adf166a84d0cb63be85c562ca8a6fa8de28e5f0d92250c6b7e9e2aff7"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c19d1ea0673cd13cc2f872f6c9ab42acc4e4f492a7ca9d3795ce2b112dd7e15"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5e68c4446fe0810e959cdff46ab0a41ce2f2c86d227d96dc3847af0ba7def306"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9640b0059ff4f14d1f37321b94061c6db164fbe49b334b31643e0528d100d99"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40d02e7d45c9f8af700f3452f329ead92da4c5f4317ca9b896de7ce7199ea459"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c1fd185014191700554795c99b347d64f2bb637966c4cfc16998a0ca700d048"}, + {file = "pydantic_core-2.27.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d81d2068e1c1228a565af076598f9e7451712700b673de8f502f0334f281387d"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1a4207639fb02ec2dbb76227d7c751a20b1a6b4bc52850568e52260cae64ca3b"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3de3ce3c9ddc8bbd88f6e0e304dea0e66d843ec9de1b0042b0911c1663ffd474"}, + {file = "pydantic_core-2.27.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:30c5f68ded0c36466acede341551106821043e9afaad516adfb6e8fa80a4e6a6"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win32.whl", hash = "sha256:c70c26d2c99f78b125a3459f8afe1aed4d9687c24fd677c6a4436bc042e50d6c"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_amd64.whl", hash = "sha256:08e125dbdc505fa69ca7d9c499639ab6407cfa909214d500897d02afb816e7cc"}, + {file = "pydantic_core-2.27.2-cp311-cp311-win_arm64.whl", hash = "sha256:26f0d68d4b235a2bae0c3fc585c585b4ecc51382db0e3ba402a22cbc440915e4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9e0c8cfefa0ef83b4da9588448b6d8d2a2bf1a53c3f1ae5fca39eb3061e2f0b0"}, + {file = "pydantic_core-2.27.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:83097677b8e3bd7eaa6775720ec8e0405f1575015a463285a92bfdfe254529ef"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:172fce187655fece0c90d90a678424b013f8fbb0ca8b036ac266749c09438cb7"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:519f29f5213271eeeeb3093f662ba2fd512b91c5f188f3bb7b27bc5973816934"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05e3a55d124407fffba0dd6b0c0cd056d10e983ceb4e5dbd10dda135c31071d6"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9c3ed807c7b91de05e63930188f19e921d1fe90de6b4f5cd43ee7fcc3525cb8c"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6fb4aadc0b9a0c063206846d603b92030eb6f03069151a625667f982887153e2"}, + {file = "pydantic_core-2.27.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28ccb213807e037460326424ceb8b5245acb88f32f3d2777427476e1b32c48c4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:de3cd1899e2c279b140adde9357c4495ed9d47131b4a4eaff9052f23398076b3"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:220f892729375e2d736b97d0e51466252ad84c51857d4d15f5e9692f9ef12be4"}, + {file = "pydantic_core-2.27.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a0fcd29cd6b4e74fe8ddd2c90330fd8edf2e30cb52acda47f06dd615ae72da57"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win32.whl", hash = "sha256:1e2cb691ed9834cd6a8be61228471d0a503731abfb42f82458ff27be7b2186fc"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_amd64.whl", hash = "sha256:cc3f1a99a4f4f9dd1de4fe0312c114e740b5ddead65bb4102884b384c15d8bc9"}, + {file = "pydantic_core-2.27.2-cp312-cp312-win_arm64.whl", hash = "sha256:3911ac9284cd8a1792d3cb26a2da18f3ca26c6908cc434a18f730dc0db7bfa3b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7d14bd329640e63852364c306f4d23eb744e0f8193148d4044dd3dacdaacbd8b"}, + {file = "pydantic_core-2.27.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:82f91663004eb8ed30ff478d77c4d1179b3563df6cdb15c0817cd1cdaf34d154"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:71b24c7d61131bb83df10cc7e687433609963a944ccf45190cfc21e0887b08c9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fa8e459d4954f608fa26116118bb67f56b93b209c39b008277ace29937453dc9"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce8918cbebc8da707ba805b7fd0b382816858728ae7fe19a942080c24e5b7cd1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eda3f5c2a021bbc5d976107bb302e0131351c2ba54343f8a496dc8783d3d3a6a"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bd8086fa684c4775c27f03f062cbb9eaa6e17f064307e86b21b9e0abc9c0f02e"}, + {file = "pydantic_core-2.27.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8d9b3388db186ba0c099a6d20f0604a44eabdeef1777ddd94786cdae158729e4"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7a66efda2387de898c8f38c0cf7f14fca0b51a8ef0b24bfea5849f1b3c95af27"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:18a101c168e4e092ab40dbc2503bdc0f62010e95d292b27827871dc85450d7ee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ba5dd002f88b78a4215ed2f8ddbdf85e8513382820ba15ad5ad8955ce0ca19a1"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win32.whl", hash = "sha256:1ebaf1d0481914d004a573394f4be3a7616334be70261007e47c2a6fe7e50130"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_amd64.whl", hash = "sha256:953101387ecf2f5652883208769a79e48db18c6df442568a0b5ccd8c2723abee"}, + {file = "pydantic_core-2.27.2-cp313-cp313-win_arm64.whl", hash = "sha256:ac4dbfd1691affb8f48c2c13241a2e3b60ff23247cbcf981759c768b6633cf8b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d3e8d504bdd3f10835468f29008d72fc8359d95c9c415ce6e767203db6127506"}, + {file = "pydantic_core-2.27.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:521eb9b7f036c9b6187f0b47318ab0d7ca14bd87f776240b90b21c1f4f149320"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:85210c4d99a0114f5a9481b44560d7d1e35e32cc5634c656bc48e590b669b145"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d716e2e30c6f140d7560ef1538953a5cd1a87264c737643d481f2779fc247fe1"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f66d89ba397d92f840f8654756196d93804278457b5fbede59598a1f9f90b228"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:669e193c1c576a58f132e3158f9dfa9662969edb1a250c54d8fa52590045f046"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdbe7629b996647b99c01b37f11170a57ae675375b14b8c13b8518b8320ced5"}, + {file = "pydantic_core-2.27.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d262606bf386a5ba0b0af3b97f37c83d7011439e3dc1a9298f21efb292e42f1a"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:cabb9bcb7e0d97f74df8646f34fc76fbf793b7f6dc2438517d7a9e50eee4f14d"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:d2d63f1215638d28221f664596b1ccb3944f6e25dd18cd3b86b0a4c408d5ebb9"}, + {file = "pydantic_core-2.27.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bca101c00bff0adb45a833f8451b9105d9df18accb8743b08107d7ada14bd7da"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win32.whl", hash = "sha256:f6f8e111843bbb0dee4cb6594cdc73e79b3329b526037ec242a3e49012495b3b"}, + {file = "pydantic_core-2.27.2-cp38-cp38-win_amd64.whl", hash = "sha256:fd1aea04935a508f62e0d0ef1f5ae968774a32afc306fb8545e06f5ff5cdf3ad"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c10eb4f1659290b523af58fa7cffb452a61ad6ae5613404519aee4bfbf1df993"}, + {file = "pydantic_core-2.27.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef592d4bad47296fb11f96cd7dc898b92e795032b4894dfb4076cfccd43a9308"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c61709a844acc6bf0b7dce7daae75195a10aac96a596ea1b776996414791ede4"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c5f762659e47fdb7b16956c71598292f60a03aa92f8b6351504359dbdba6cf"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c9775e339e42e79ec99c441d9730fccf07414af63eac2f0e48e08fd38a64d76"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57762139821c31847cfb2df63c12f725788bd9f04bc2fb392790959b8f70f118"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d1e85068e818c73e048fe28cfc769040bb1f475524f4745a5dc621f75ac7630"}, + {file = "pydantic_core-2.27.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:097830ed52fd9e427942ff3b9bc17fab52913b2f50f2880dc4a5611446606a54"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:044a50963a614ecfae59bb1eaf7ea7efc4bc62f49ed594e18fa1e5d953c40e9f"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:4e0b4220ba5b40d727c7f879eac379b822eee5d8fff418e9d3381ee45b3b0362"}, + {file = "pydantic_core-2.27.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5e4f4bb20d75e9325cc9696c6802657b58bc1dbbe3022f32cc2b2b632c3fbb96"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win32.whl", hash = "sha256:cca63613e90d001b9f2f9a9ceb276c308bfa2a43fafb75c8031c4f66039e8c6e"}, + {file = "pydantic_core-2.27.2-cp39-cp39-win_amd64.whl", hash = "sha256:77d1bca19b0f7021b3a982e6f903dcd5b2b06076def36a652e3907f596e29f67"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:2bf14caea37e91198329b828eae1618c068dfb8ef17bb33287a7ad4b61ac314e"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b0cb791f5b45307caae8810c2023a184c74605ec3bcbb67d13846c28ff731ff8"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688d3fd9fcb71f41c4c015c023d12a79d1c4c0732ec9eb35d96e3388a120dcf3"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d591580c34f4d731592f0e9fe40f9cc1b430d297eecc70b962e93c5c668f15f"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:82f986faf4e644ffc189a7f1aafc86e46ef70372bb153e7001e8afccc6e54133"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:bec317a27290e2537f922639cafd54990551725fc844249e64c523301d0822fc"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:0296abcb83a797db256b773f45773da397da75a08f5fcaef41f2044adec05f50"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0d75070718e369e452075a6017fbf187f788e17ed67a3abd47fa934d001863d9"}, + {file = "pydantic_core-2.27.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7e17b560be3c98a8e3aa66ce828bdebb9e9ac6ad5466fba92eb74c4c95cb1151"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c33939a82924da9ed65dab5a65d427205a73181d8098e79b6b426bdf8ad4e656"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:00bad2484fa6bda1e216e7345a798bd37c68fb2d97558edd584942aa41b7d278"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c817e2b40aba42bac6f457498dacabc568c3b7a986fc9ba7c8d9d260b71485fb"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:251136cdad0cb722e93732cb45ca5299fb56e1344a833640bf93b2803f8d1bfd"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d2088237af596f0a524d3afc39ab3b036e8adb054ee57cbb1dcf8e09da5b29cc"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d4041c0b966a84b4ae7a09832eb691a35aec90910cd2dbe7a208de59be77965b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:8083d4e875ebe0b864ffef72a4304827015cff328a1be6e22cc850753bfb122b"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f141ee28a0ad2123b6611b6ceff018039df17f32ada8b534e6aa039545a3efb2"}, + {file = "pydantic_core-2.27.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7d0c8399fcc1848491f00e0314bd59fb34a9c008761bcb422a057670c3f65e35"}, + {file = "pydantic_core-2.27.2.tar.gz", hash = "sha256:eb026e5a4c1fee05726072337ff51d1efb6f59090b7da90d30ea58625b1ffb39"}, ] [package.dependencies] @@ -1515,13 +1398,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pygments" -version = "2.18.0" +version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" files = [ - {file = "pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a"}, - {file = "pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199"}, + {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, + {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, ] [package.extras] @@ -1529,23 +1412,26 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymilvus" -version = "2.4.3" +version = "2.5.3" description = "Python Sdk for Milvus" optional = false python-versions = ">=3.8" files = [ - {file = "pymilvus-2.4.3-py3-none-any.whl", hash = "sha256:38239e89f8d739f665141d0b80908990b5f59681e889e135c234a4a45669a5c8"}, - {file = "pymilvus-2.4.3.tar.gz", hash = "sha256:703ac29296cdce03d6dc2aaebbe959e57745c141a94150e371dc36c61c226cc1"}, + {file = "pymilvus-2.5.3-py3-none-any.whl", hash = "sha256:64ca63594284586937274800be27a402f3be2d078130bf81d94ab8d7798ac9c8"}, + {file = "pymilvus-2.5.3.tar.gz", hash = "sha256:68bc3797b7a14c494caf116cee888894ffd6eba7b96a3ac841be85d60694cc5d"}, ] [package.dependencies] -environs = "<=9.5.0" -grpcio = ">=1.49.1,<=1.63.0" -milvus-lite = ">=2.4.0,<2.5.0" +grpcio = ">=1.49.1,<=1.67.1" +milvus-lite = {version = ">=2.4.0", markers = "sys_platform != \"win32\""} numpy = {version = "<1.25.0", markers = "python_version <= \"3.8\""} pandas = ">=1.2.4" protobuf = ">=3.20.0" -setuptools = ">=67" +python-dotenv = ">=1.0.1,<2.0.0" +setuptools = [ + {version = ">69,<70.1", markers = "python_version <= \"3.8\""}, + {version = ">69", markers = "python_version > \"3.8\""}, +] ujson = ">=2.0.0" [package.extras] @@ -1553,28 +1439,6 @@ bulk-writer = ["azure-storage-blob", "minio (>=7.0.0)", "pyarrow (>=12.0.0)", "r dev = ["black", "grpcio (==1.62.2)", "grpcio-testing (==1.62.2)", "grpcio-tools (==1.62.2)", "pytest (>=5.3.4)", "pytest-cov (>=2.8.1)", "pytest-timeout (>=1.3.4)", "ruff (>0.4.0)"] model = ["milvus-model (>=0.1.0)"] -[[package]] -name = "pytest" -version = "7.4.4" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - [[package]] name = "python-dateutil" version = "2.9.0.post0" @@ -1605,107 +1469,51 @@ cli = ["click (>=5.0)"] [[package]] name = "pytz" -version = "2024.1" +version = "2024.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2024.1-py2.py3-none-any.whl", hash = "sha256:328171f4e3623139da4983451950b28e95ac706e13f3f2630a879749e7a8b319"}, - {file = "pytz-2024.1.tar.gz", hash = "sha256:2a29735ea9c18baf14b448846bde5a48030ed267578472d8955cd0e7443a9812"}, + {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, + {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, ] [[package]] name = "pywin32" -version = "306" +version = "308" description = "Python for Window Extensions" optional = false python-versions = "*" files = [ - {file = "pywin32-306-cp310-cp310-win32.whl", hash = "sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d"}, - {file = "pywin32-306-cp310-cp310-win_amd64.whl", hash = "sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8"}, - {file = "pywin32-306-cp311-cp311-win32.whl", hash = "sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407"}, - {file = "pywin32-306-cp311-cp311-win_amd64.whl", hash = "sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e"}, - {file = "pywin32-306-cp311-cp311-win_arm64.whl", hash = "sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a"}, - {file = "pywin32-306-cp312-cp312-win32.whl", hash = "sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b"}, - {file = "pywin32-306-cp312-cp312-win_amd64.whl", hash = "sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e"}, - {file = "pywin32-306-cp312-cp312-win_arm64.whl", hash = "sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040"}, - {file = "pywin32-306-cp37-cp37m-win32.whl", hash = "sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65"}, - {file = "pywin32-306-cp37-cp37m-win_amd64.whl", hash = "sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36"}, - {file = "pywin32-306-cp38-cp38-win32.whl", hash = "sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a"}, - {file = "pywin32-306-cp38-cp38-win_amd64.whl", hash = "sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0"}, - {file = "pywin32-306-cp39-cp39-win32.whl", hash = "sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802"}, - {file = "pywin32-306-cp39-cp39-win_amd64.whl", hash = "sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {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"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, + {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, + {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, + {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, + {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, + {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, + {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, + {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, + {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, + {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, + {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, + {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, + {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, + {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, + {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, + {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, + {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, + {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, + {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, ] [[package]] name = "qdrant-client" -version = "1.11.0" +version = "1.12.1" description = "Client library for the Qdrant vector search engine" optional = false python-versions = ">=3.8" files = [ - {file = "qdrant_client-1.11.0-py3-none-any.whl", hash = "sha256:1f574ccebb91c0bc8a620c9a41a5a010084fbc4d8c6f1cd0ab7b2eeb97336fc0"}, - {file = "qdrant_client-1.11.0.tar.gz", hash = "sha256:7c1d4d7a96cfd1ee0cde2a21c607e9df86bcca795ad8d1fd274d295ab64b8458"}, + {file = "qdrant_client-1.12.1-py3-none-any.whl", hash = "sha256:b2d17ce18e9e767471368380dd3bbc4a0e3a0e2061fedc9af3542084b48451e0"}, + {file = "qdrant_client-1.12.1.tar.gz", hash = "sha256:35e8e646f75b7b883b3d2d0ee4c69c5301000bba41c82aa546e985db0f1aeb72"}, ] [package.dependencies] @@ -1718,26 +1526,26 @@ pydantic = ">=1.10.8" urllib3 = ">=1.26.14,<3" [package.extras] -fastembed = ["fastembed (==0.3.4)"] -fastembed-gpu = ["fastembed-gpu (==0.3.4)"] +fastembed = ["fastembed (==0.3.6)"] +fastembed-gpu = ["fastembed-gpu (==0.3.6)"] [[package]] name = "redis" -version = "5.0.5" +version = "5.2.1" description = "Python client for Redis database and key-value store" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "redis-5.0.5-py3-none-any.whl", hash = "sha256:30b47d4ebb6b7a0b9b40c1275a19b87bb6f46b3bed82a89012cf56dea4024ada"}, - {file = "redis-5.0.5.tar.gz", hash = "sha256:3417688621acf6ee368dec4a04dd95881be24efd34c79f00d31f62bb528800ae"}, + {file = "redis-5.2.1-py3-none-any.whl", hash = "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"}, + {file = "redis-5.2.1.tar.gz", hash = "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f"}, ] [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)"] +hiredis = ["hiredis (>=3.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==23.2.1)", "requests (>=2.31.0)"] [[package]] name = "requests" @@ -1775,15 +1583,35 @@ files = [ docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +[[package]] +name = "setuptools" +version = "75.8.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +optional = false +python-versions = ">=3.9" +files = [ + {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, + {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, +] + +[package.extras] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +cover = ["pytest-cov"] +doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] +enabler = ["pytest-enabler (>=2.2)"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] + [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] @@ -1828,31 +1656,62 @@ files = [ [[package]] name = "tomli" -version = "2.0.1" +version = "2.2.1" description = "A lil' TOML parser" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] name = "tqdm" -version = "4.66.4" +version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.4-py3-none-any.whl", hash = "sha256:b75ca56b413b030bc3f00af51fd2c1a1a5eac6a0c1cca83cbb37a5c52abce644"}, - {file = "tqdm-4.66.4.tar.gz", hash = "sha256:e4d936c9de8727928f3be6079590e97d9abfe8d39a590be678eb5919ffc186bb"}, + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -1918,13 +1777,13 @@ test = ["codecov", "coverage", "mypy", "nptyping (>=1.3.0)", "numpy", "pycodesty [[package]] name = "tzdata" -version = "2024.1" +version = "2024.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2024.1-py2.py3-none-any.whl", hash = "sha256:9068bc196136463f5245e51efda838afa15aaeca9903f49050dfa2679db4d252"}, - {file = "tzdata-2024.1.tar.gz", hash = "sha256:2674120f8d891909751c38abcdfd386ac0a5a1127954fbc332af6b5ceae07efd"}, + {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, + {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, ] [[package]] @@ -2016,13 +1875,13 @@ files = [ [[package]] name = "urllib3" -version = "1.26.18" +version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ - {file = "urllib3-1.26.18-py2.py3-none-any.whl", hash = "sha256:34b97092d7e0a3a8cf7cd10e386f401b3737364026c45e622aa02903dffe0f07"}, - {file = "urllib3-1.26.18.tar.gz", hash = "sha256:f8ecc1bba5667413457c529ab955bf8c67b45db799d159066261719e328580a0"}, + {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, + {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, ] [package.extras] @@ -2032,13 +1891,13 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "urllib3" -version = "2.2.1" +version = "2.3.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, + {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, + {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, ] [package.extras] @@ -2049,34 +1908,17 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "validators" -version = "0.28.3" +version = "0.33.0" description = "Python Data Validation for Humans™" optional = false python-versions = ">=3.8" files = [ - {file = "validators-0.28.3-py3-none-any.whl", hash = "sha256:53cafa854f13850156259d9cc479b864ee901f6a96e6b109e6fc33f98f37d99f"}, - {file = "validators-0.28.3.tar.gz", hash = "sha256:c6c79840bcde9ba77b19f6218f7738188115e27830cbaff43264bc4ed24c429d"}, + {file = "validators-0.33.0-py3-none-any.whl", hash = "sha256:134b586a98894f8139865953899fc2daeb3d0c35569552c5518f089ae43ed075"}, + {file = "validators-0.33.0.tar.gz", hash = "sha256:535867e9617f0100e676a1257ba1e206b9bfd847ddc171e4d44811f07ff0bfbf"}, ] -[[package]] -name = "virtualenv" -version = "20.26.2" -description = "Virtual Python Environment builder" -optional = false -python-versions = ">=3.7" -files = [ - {file = "virtualenv-20.26.2-py3-none-any.whl", hash = "sha256:a624db5e94f01ad993d476b9ee5346fdf7b9de43ccaee0e0197012dc838a0e9b"}, - {file = "virtualenv-20.26.2.tar.gz", hash = "sha256:82bf0f4eebbb78d36ddaee0283d43fe5736b53880b8a8cdcd37390a07ac3741c"}, -] - -[package.dependencies] -distlib = ">=0.3.7,<1" -filelock = ">=3.12.2,<4" -platformdirs = ">=3.9.1,<5" - [package.extras] -docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] [[package]] name = "wcwidth" @@ -2091,13 +1933,13 @@ files = [ [[package]] name = "weaviate-client" -version = "4.6.4" +version = "4.6.7" description = "A python native Weaviate client" optional = false python-versions = ">=3.8" files = [ - {file = "weaviate_client-4.6.4-py3-none-any.whl", hash = "sha256:19b76fb923a5f0b6fcb7471ef3cd990d2791ede71731e53429e1066a9dbf2af2"}, - {file = "weaviate_client-4.6.4.tar.gz", hash = "sha256:5378db8a33bf1d48adff3f9efa572d9fb04eaeb36444817cab56f1ba3c595500"}, + {file = "weaviate_client-4.6.7-py3-none-any.whl", hash = "sha256:8793de35264cab33a84fe8cb8c422a257fe4d8334657aaddd8ead853da3fb34a"}, + {file = "weaviate_client-4.6.7.tar.gz", hash = "sha256:202b32e160536f5f44e4a635d30c3d3a0790b1a7ff997f5e243919d1ac5b68a1"}, ] [package.dependencies] @@ -2108,9 +1950,9 @@ grpcio-tools = ">=1.57.0,<2.0.0" httpx = ">=0.25.0,<=0.27.0" pydantic = ">=2.5.0,<3.0.0" requests = ">=2.30.0,<3.0.0" -validators = "0.28.3" +validators = "0.33.0" [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "6ee9362c67da4efa3dc4943e8a9e7245ea32a263422bad1ea5cea21d8a19734e" +content-hash = "55e7ff1c333124978a58eb149e137858e0db6121b8092938e42c4549faa5e7f6" diff --git a/pyproject.toml b/pyproject.toml index e59c5cd8..d9e4c72b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,6 +3,7 @@ name = "vector-db-benchmark" version = "0.1.0" description = "" authors = ["Qdrant Team "] +package-mode = false [tool.poetry.dependencies] python = ">=3.8,<3.12" @@ -21,7 +22,7 @@ tqdm = "^4.66.1" psycopg = {extras = ["binary"], version = "^3.1.17"} pgvector = "^0.2.4" -[tool.poetry.dev-dependencies] +[poetry.group.dev.dependencies] pre-commit = "^2.20.0" pytest = "^7.1" From d12429fcf030a00572142862d50902e4fd10f4f5 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:03:51 +0100 Subject: [PATCH 072/101] Fix 403 (#222) --- benchmark/dataset.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/benchmark/dataset.py b/benchmark/dataset.py index ef006955..76bdad99 100644 --- a/benchmark/dataset.py +++ b/benchmark/dataset.py @@ -4,6 +4,7 @@ import urllib.request from dataclasses import dataclass, field from typing import Dict, Optional +from urllib.request import build_opener, install_opener from benchmark import DATASETS_DIR from dataset_reader.ann_compound_reader import AnnCompoundReader @@ -12,6 +13,12 @@ from dataset_reader.json_reader import JSONReader from dataset_reader.sparse_reader import SparseReader +# Needed for Cloudflare's firewall in ann-benchmarks +# See https://github.com/erikbern/ann-benchmarks/pull/561 +opener = build_opener() +opener.addheaders = [("User-agent", "Mozilla/5.0")] +install_opener(opener) + @dataclass class DatasetConfig: From 71ba85a0069e51471f3b341191d58cdca1eff593 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Fri, 17 Jan 2025 10:44:36 +0100 Subject: [PATCH 073/101] Fix job's name in notification (#224) --- .github/workflows/continuous-benchmark.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 2cc1b5cd..caf661e6 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -232,13 +232,13 @@ jobs: with: payload: | { - "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", + "text": "CI benchmarks (runParallelBenchmark) run status: ${{ job.status }}", "blocks": [ { "type": "section", "text": { "type": "mrkdwn", - "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." + "text": "CI benchmarks (runParallelBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." } }, { From d6ba3abc08b3eb1159f48a8835f1380693d02553 Mon Sep 17 00:00:00 2001 From: Andrey Vasnetsov Date: Fri, 17 Jan 2025 15:34:52 +0100 Subject: [PATCH 074/101] Update qdrant-single-node-bq-rps.json --- experiments/configurations/qdrant-single-node-bq-rps.json | 1 + 1 file changed, 1 insertion(+) diff --git a/experiments/configurations/qdrant-single-node-bq-rps.json b/experiments/configurations/qdrant-single-node-bq-rps.json index 1708bcfc..353e1a41 100644 --- a/experiments/configurations/qdrant-single-node-bq-rps.json +++ b/experiments/configurations/qdrant-single-node-bq-rps.json @@ -4,6 +4,7 @@ "engine": "qdrant", "connection_params": { "timeout": 30 }, "collection_params": { + "optimizers_config": { "max_segment_size": 1000000, "memmap_threshold":10000000, "default_segment_number":2 }, "quantization_config": { "binary": {"always_ram": true} } }, "search_params": [ From 099079e40f8e613475812865af0533c04e1a291f Mon Sep 17 00:00:00 2001 From: Andrey Vasnetsov Date: Fri, 17 Jan 2025 15:35:45 +0100 Subject: [PATCH 075/101] Update qdrant-single-node-bq-rps.json --- experiments/configurations/qdrant-single-node-bq-rps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiments/configurations/qdrant-single-node-bq-rps.json b/experiments/configurations/qdrant-single-node-bq-rps.json index 353e1a41..8c36d10e 100644 --- a/experiments/configurations/qdrant-single-node-bq-rps.json +++ b/experiments/configurations/qdrant-single-node-bq-rps.json @@ -10,7 +10,7 @@ "search_params": [ { "parallel": 1, "config": { "hnsw_ef": 128, "quantization": { "rescore": true, "oversampling": 2.0 } } } ], - "upload_params": { "parallel": 1, "batch_size": 1024 } + "upload_params": { "parallel": 4, "batch_size": 1024 } }, { "name": "qdrant-bq-rps-m-16-ef-128", From d406db7ca7d59991fb81da29f0e92fadebed2b78 Mon Sep 17 00:00:00 2001 From: Andrey Vasnetsov Date: Fri, 17 Jan 2025 15:36:18 +0100 Subject: [PATCH 076/101] Update qdrant-single-node-bq-rps.json --- experiments/configurations/qdrant-single-node-bq-rps.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiments/configurations/qdrant-single-node-bq-rps.json b/experiments/configurations/qdrant-single-node-bq-rps.json index 8c36d10e..c6d64630 100644 --- a/experiments/configurations/qdrant-single-node-bq-rps.json +++ b/experiments/configurations/qdrant-single-node-bq-rps.json @@ -4,7 +4,7 @@ "engine": "qdrant", "connection_params": { "timeout": 30 }, "collection_params": { - "optimizers_config": { "max_segment_size": 1000000, "memmap_threshold":10000000, "default_segment_number":2 }, + "optimizers_config": { "max_segment_size": 100000000, "memmap_threshold":10000000, "default_segment_number":2 }, "quantization_config": { "binary": {"always_ram": true} } }, "search_params": [ From 493fb5ba61c753af92c9efe239cff7a920dc4980 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Tue, 25 Feb 2025 13:14:40 +0100 Subject: [PATCH 077/101] Add Compare Versions Workflow (#225) * Update deps * Add workflow: check image existence and trigger image build * [pre-commit.ci] auto fixes from pre-commit.com hooks, for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../manual-compare-versions-benchmark.yaml | 92 ++++++++ poetry.lock | 205 +++++++++--------- tools/compare_versions/prepare_image.sh | 70 ++++++ 3 files changed, 265 insertions(+), 102 deletions(-) create mode 100644 .github/workflows/manual-compare-versions-benchmark.yaml create mode 100755 tools/compare_versions/prepare_image.sh diff --git a/.github/workflows/manual-compare-versions-benchmark.yaml b/.github/workflows/manual-compare-versions-benchmark.yaml new file mode 100644 index 00000000..ca9a5b4a --- /dev/null +++ b/.github/workflows/manual-compare-versions-benchmark.yaml @@ -0,0 +1,92 @@ +name: Manual Benchmark to compare versions + +on: + workflow_dispatch: + inputs: + qdrant_version_1: + description: "Version of qdrant to benchmark (ghcr/, ghcr/my-branch, docker/v1.5.1, ghcr/dev)" + default: ghcr/dev + qdrant_version_2: + description: "Version of qdrant to benchmark (ghcr/, ghcr/my-branch, docker/v1.5.1, ghcr/dev)" + default: docker/master + dataset: + description: "Dataset to benchmark" + default: laion-small-clip + engine_config: + description: "Engine config to benchmark" + default: qdrant-continuous-benchmark + +jobs: + prepareImage1: + name: Prepare image ${{ inputs.qdrant_version_1 }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Image for ${{ inputs.qdrant_version_1 }} + run: | + # The branch, tag or SHA to checkout. + export QDRANT_VERSION=${{ inputs.qdrant_version_1 }} + export BEARER_TOKEN="${{ secrets.GITHUB_TOKEN }}" + bash -x tools/compare_versions/prepare_image.sh + + prepareImage2: + name: Prepare image ${{ inputs.qdrant_version_1 }} + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Image for ${{ inputs.qdrant_version_2 }} + run: | + export QDRANT_VERSION=${{ inputs.qdrant_version_2 }} + export BEARER_TOKEN="${{ secrets.GITHUB_TOKEN }}" + bash -x tools/compare_versions/prepare_image.sh + +# runBenchmarkForVersion1: +# name: compare - ${{ inputs.qdrant_version_1 }} vs ${{ inputs.qdrant_version_2 }} - ${{ inputs.dataset }} +# needs: +# - prepareImage1 +# - prepareImage2 +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v3 +# - uses: webfactory/ssh-agent@v0.8.0 +# with: +# ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} +# - name: Bench ${{ inputs.qdrant_version_1 }} +# run: | +# export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} +# export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} +# export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} +# export QDRANT_VERSION=${{ inputs.qdrant_version_1 }} +# export DATASETS=${{ inputs.dataset }} +# export ENGINE_NAME=${{ inputs.engine_config }} +# export POSTGRES_TABLE=benchmark_manual +# bash -x tools/setup_ci.sh +# bash -x tools/run_ci.sh +# +# runBenchmarkForVersion2: +# name: compare - ${{ inputs.qdrant_version_1 }} vs ${{ inputs.qdrant_version_2 }} - ${{ inputs.dataset }} +# needs: +# - runBenchmarkForVersion1 +# runs-on: ubuntu-latest +# steps: +# - uses: actions/checkout@v3 +# - uses: webfactory/ssh-agent@v0.8.0 +# with: +# ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} +# - name: Bench ${{ inputs.qdrant_version_2 }} +# run: | +# export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} +# export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} +# export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} +# export QDRANT_VERSION=${{ inputs.qdrant_version_2 }} +# export DATASETS=${{ inputs.dataset }} +# export ENGINE_NAME=${{ inputs.engine_config }} +# export POSTGRES_TABLE=benchmark_manual +# bash -x tools/setup_ci.sh +# bash -x tools/run_ci.sh diff --git a/poetry.lock b/poetry.lock index aa62066d..5ae48166 100644 --- a/poetry.lock +++ b/poetry.lock @@ -128,13 +128,13 @@ tzdata = ["tzdata"] [[package]] name = "certifi" -version = "2024.12.14" +version = "2025.1.31" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" files = [ - {file = "certifi-2024.12.14-py3-none-any.whl", hash = "sha256:1275f7a45be9464efc1173084eaa30f866fe2e47d389406136d332ed4967ec56"}, - {file = "certifi-2024.12.14.tar.gz", hash = "sha256:b650d30f370c2b724812bee08008be0c4163b163ddaec3f2546c1caf65f191db"}, + {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, + {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, ] [[package]] @@ -393,13 +393,13 @@ test-randomorder = ["pytest-randomly"] [[package]] name = "decorator" -version = "5.1.1" +version = "5.2.1" description = "Decorators for Humans" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, - {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, + {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, + {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, ] [[package]] @@ -422,13 +422,13 @@ develop = ["aiohttp", "furo", "httpcore (<1.0.6)", "httpx", "opentelemetry-api", [[package]] name = "elasticsearch" -version = "8.17.0" +version = "8.17.1" description = "Python client for Elasticsearch" optional = false python-versions = ">=3.8" files = [ - {file = "elasticsearch-8.17.0-py3-none-any.whl", hash = "sha256:15965240fe297279f0e68b260936d9ced9606aa7ef8910b9b56727f96ef00d5b"}, - {file = "elasticsearch-8.17.0.tar.gz", hash = "sha256:c1069bf2204ba8fab29ff00b2ce6b37324b2cc6ff593283b97df43426ec13053"}, + {file = "elasticsearch-8.17.1-py3-none-any.whl", hash = "sha256:f1de0a075f12cc0fa377668eb4fb2ce02185c060ebb50cf2c3889242f9a5130e"}, + {file = "elasticsearch-8.17.1.tar.gz", hash = "sha256:057ab44cae8b3acffbf826a31678e46eafc38f26fcffa91015352d973299cdf0"}, ] [package.dependencies] @@ -469,13 +469,13 @@ test = ["pytest (>=6)"] [[package]] name = "executing" -version = "2.1.0" +version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" files = [ - {file = "executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf"}, - {file = "executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab"}, + {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, + {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, ] [package.extras] @@ -1098,13 +1098,13 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p [[package]] name = "prompt-toolkit" -version = "3.0.48" +version = "3.0.50" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8.0" files = [ - {file = "prompt_toolkit-3.0.48-py3-none-any.whl", hash = "sha256:f49a827f90062e411f1ce1f854f2aedb3c23353244f8108b89283587397ac10e"}, - {file = "prompt_toolkit-3.0.48.tar.gz", hash = "sha256:d6623ab0477a80df74e646bdbc93621143f5caf104206aa29294d53de1a03d90"}, + {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, + {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, ] [package.dependencies] @@ -1132,100 +1132,101 @@ files = [ [[package]] name = "psycopg" -version = "3.2.3" +version = "3.2.5" description = "PostgreSQL database adapter for Python" optional = false python-versions = ">=3.8" files = [ - {file = "psycopg-3.2.3-py3-none-any.whl", hash = "sha256:644d3973fe26908c73d4be746074f6e5224b03c1101d302d9a53bf565ad64907"}, - {file = "psycopg-3.2.3.tar.gz", hash = "sha256:a5764f67c27bec8bfac85764d23c534af2c27b893550377e37ce59c12aac47a2"}, + {file = "psycopg-3.2.5-py3-none-any.whl", hash = "sha256:b782130983e5b3de30b4c529623d3687033b4dafa05bb661fc6bf45837ca5879"}, + {file = "psycopg-3.2.5.tar.gz", hash = "sha256:f5f750611c67cb200e85b408882f29265c66d1de7f813add4f8125978bfd70e8"}, ] [package.dependencies] "backports.zoneinfo" = {version = ">=0.2.0", markers = "python_version < \"3.9\""} -psycopg-binary = {version = "3.2.3", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} +psycopg-binary = {version = "3.2.5", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} typing-extensions = {version = ">=4.6", markers = "python_version < \"3.13\""} tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] -binary = ["psycopg-binary (==3.2.3)"] -c = ["psycopg-c (==3.2.3)"] -dev = ["ast-comments (>=1.1.2)", "black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "mypy (>=1.11)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] +binary = ["psycopg-binary (==3.2.5)"] +c = ["psycopg-c (==3.2.5)"] +dev = ["ast-comments (>=1.1.2)", "black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "isort-psycopg", "isort[colors] (>=6.0)", "mypy (>=1.14)", "pre-commit (>=4.0.1)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] docs = ["Sphinx (>=5.0)", "furo (==2022.6.21)", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints (>=1.12)"] pool = ["psycopg-pool"] -test = ["anyio (>=4.0)", "mypy (>=1.11)", "pproxy (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0)", "pytest-randomly (>=3.5)"] +test = ["anyio (>=4.0)", "mypy (>=1.14)", "pproxy (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0)", "pytest-randomly (>=3.5)"] [[package]] name = "psycopg-binary" -version = "3.2.3" +version = "3.2.5" description = "PostgreSQL database adapter for Python -- C optimisation distribution" optional = false python-versions = ">=3.8" files = [ - {file = "psycopg_binary-3.2.3-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:965455eac8547f32b3181d5ec9ad8b9be500c10fe06193543efaaebe3e4ce70c"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:71adcc8bc80a65b776510bc39992edf942ace35b153ed7a9c6c573a6849ce308"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f73adc05452fb85e7a12ed3f69c81540a8875960739082e6ea5e28c373a30774"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8630943143c6d6ca9aefc88bbe5e76c90553f4e1a3b2dc339e67dc34aa86f7e"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bffb61e198a91f712cc3d7f2d176a697cb05b284b2ad150fb8edb308eba9002"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc4fa2240c9fceddaa815a58f29212826fafe43ce80ff666d38c4a03fb036955"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:192a5f8496e6e1243fdd9ac20e117e667c0712f148c5f9343483b84435854c78"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:64dc6e9ec64f592f19dc01a784e87267a64a743d34f68488924251253da3c818"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:79498df398970abcee3d326edd1d4655de7d77aa9aecd578154f8af35ce7bbd2"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:949551752930d5e478817e0b49956350d866b26578ced0042a61967e3fcccdea"}, - {file = "psycopg_binary-3.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:80a2337e2dfb26950894c8301358961430a0304f7bfe729d34cc036474e9c9b1"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:6d8f2144e0d5808c2e2aed40fbebe13869cd00c2ae745aca4b3b16a435edb056"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:94253be2b57ef2fea7ffe08996067aabf56a1eb9648342c9e3bad9e10c46e045"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fda0162b0dbfa5eaed6cdc708179fa27e148cb8490c7d62e5cf30713909658ea"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c0419cdad8c70eaeb3116bb28e7b42d546f91baf5179d7556f230d40942dc78"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:74fbf5dd3ef09beafd3557631e282f00f8af4e7a78fbfce8ab06d9cd5a789aae"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d784f614e4d53050cbe8abf2ae9d1aaacf8ed31ce57b42ce3bf2a48a66c3a5c"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4e76ce2475ed4885fe13b8254058be710ec0de74ebd8ef8224cf44a9a3358e5f"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5938b257b04c851c2d1e6cb2f8c18318f06017f35be9a5fe761ee1e2e344dfb7"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:257c4aea6f70a9aef39b2a77d0658a41bf05c243e2bf41895eb02220ac6306f3"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:06b5cc915e57621eebf2393f4173793ed7e3387295f07fed93ed3fb6a6ccf585"}, - {file = "psycopg_binary-3.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:09baa041856b35598d335b1a74e19a49da8500acedf78164600694c0ba8ce21b"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:48f8ca6ee8939bab760225b2ab82934d54330eec10afe4394a92d3f2a0c37dd6"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:5361ea13c241d4f0ec3f95e0bf976c15e2e451e9cc7ef2e5ccfc9d170b197a40"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cb987f14af7da7c24f803111dbc7392f5070fd350146af3345103f76ea82e339"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0463a11b1cace5a6aeffaf167920707b912b8986a9c7920341c75e3686277920"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8b7be9a6c06518967b641fb15032b1ed682fd3b0443f64078899c61034a0bca6"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64a607e630d9f4b2797f641884e52b9f8e239d35943f51bef817a384ec1678fe"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fa33ead69ed133210d96af0c63448b1385df48b9c0247eda735c5896b9e6dbbf"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1f8b0d0e99d8e19923e6e07379fa00570be5182c201a8c0b5aaa9a4d4a4ea20b"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:709447bd7203b0b2debab1acec23123eb80b386f6c29e7604a5d4326a11e5bd6"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5e37d5027e297a627da3551a1e962316d0f88ee4ada74c768f6c9234e26346d9"}, - {file = "psycopg_binary-3.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:261f0031ee6074765096a19b27ed0f75498a8338c3dcd7f4f0d831e38adf12d1"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:41fdec0182efac66b27478ac15ef54c9ebcecf0e26ed467eb7d6f262a913318b"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:07d019a786eb020c0f984691aa1b994cb79430061065a694cf6f94056c603d26"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c57615791a337378fe5381143259a6c432cdcbb1d3e6428bfb7ce59fff3fb5c"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8eb9a4e394926b93ad919cad1b0a918e9b4c846609e8c1cfb6b743683f64da0"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5905729668ef1418bd36fbe876322dcb0f90b46811bba96d505af89e6fbdce2f"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd65774ed7d65101b314808b6893e1a75b7664f680c3ef18d2e5c84d570fa393"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:700679c02f9348a0d0a2adcd33a0275717cd0d0aee9d4482b47d935023629505"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:96334bb64d054e36fed346c50c4190bad9d7c586376204f50bede21a913bf942"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:9099e443d4cc24ac6872e6a05f93205ba1a231b1a8917317b07c9ef2b955f1f4"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1985ab05e9abebfbdf3163a16ebb37fbc5d49aff2bf5b3d7375ff0920bbb54cd"}, - {file = "psycopg_binary-3.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:e90352d7b610b4693fad0feea48549d4315d10f1eba5605421c92bb834e90170"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-macosx_12_0_x86_64.whl", hash = "sha256:69320f05de8cdf4077ecd7fefdec223890eea232af0d58f2530cbda2871244a0"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4926ea5c46da30bec4a85907aa3f7e4ea6313145b2aa9469fdb861798daf1502"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c64c4cd0d50d5b2288ab1bcb26c7126c772bbdebdfadcd77225a77df01c4a57e"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05a1bdce30356e70a05428928717765f4a9229999421013f41338d9680d03a63"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ad357e426b0ea5c3043b8ec905546fa44b734bf11d33b3da3959f6e4447d350"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:967b47a0fd237aa17c2748fdb7425015c394a6fb57cdad1562e46a6eb070f96d"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:71db8896b942770ed7ab4efa59b22eee5203be2dfdee3c5258d60e57605d688c"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:2773f850a778575dd7158a6dd072f7925b67f3ba305e2003538e8831fec77a1d"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:aeddf7b3b3f6e24ccf7d0edfe2d94094ea76b40e831c16eff5230e040ce3b76b"}, - {file = "psycopg_binary-3.2.3-cp38-cp38-win_amd64.whl", hash = "sha256:824c867a38521d61d62b60aca7db7ca013a2b479e428a0db47d25d8ca5067410"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:9994f7db390c17fc2bd4c09dca722fd792ff8a49bb3bdace0c50a83f22f1767d"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1303bf8347d6be7ad26d1362af2c38b3a90b8293e8d56244296488ee8591058e"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:842da42a63ecb32612bb7f5b9e9f8617eab9bc23bd58679a441f4150fcc51c96"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2bb342a01c76f38a12432848e6013c57eb630103e7556cf79b705b53814c3949"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd40af959173ea0d087b6b232b855cfeaa6738f47cb2a0fd10a7f4fa8b74293f"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9b60b465773a52c7d4705b0a751f7f1cdccf81dd12aee3b921b31a6e76b07b0e"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:fc6d87a1c44df8d493ef44988a3ded751e284e02cdf785f746c2d357e99782a6"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:f0b018e37608c3bfc6039a1dc4eb461e89334465a19916be0153c757a78ea426"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2a29f5294b0b6360bfda69653697eff70aaf2908f58d1073b0acd6f6ab5b5a4f"}, - {file = "psycopg_binary-3.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:e56b1fd529e5dde2d1452a7d72907b37ed1b4f07fdced5d8fb1e963acfff6749"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a82211a43372cba9b1555a110e84e679deec2dc9463ae4c736977dad99dca5ed"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7d215a43343d91ba08301865f059d9518818d66a222a85fb425e4156716f5a6"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f893c0ed3d5c7b83b76b1f8f7d3ca5a03e38bcd3cab5d65b5c25a0d1064aca4"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d10ce4c39eb9631381a0c3792727946a4391e843625a7ee9579ac6bb11495a5"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a602d9fdb567cca090ca19ac3ebf10219065be2a4f8cf9eb8356cffb5a7ab1d"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c37eb3be7a6be93f4925ccf52bbfa60244da6c63201770a709dd81a3d2d08534"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7d5f1bfc848a94e0d63fe693adee4f88bd9e5c415ecb4c9c17d2d44eba6795a6"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b5e0acbc991472188c9df40eb56d8a97ad3ad00d4de560b8b74bdc2d94041a8f"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d4e0c1b1aa5283f6d9a384ffc7a8400d25386bb98fdb9bddae446e4ef4da7366"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c3c5fa3d4fa0a651cefab391b783f89bc5e331afa0a4e93c9b16141993fa05c8"}, + {file = "psycopg_binary-3.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:7efe6c732fd2d7e22d72dc4f7cf9b644020adacfff61b0a8a151343da8e661c0"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:393ab353196d364858b47317d27804ecc58ab56dbde32217bd67f0f2f2980662"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71d82dbc7c6c7f5746468e7992e5483aa45b12250d78d220a2431ab88795825c"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39e2cd10bf15442d95c3f48376b25dc33360418ea6c3c05884d8bf42407768c0"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7623659d44a6aa032be4a066c658ba45009d768c2481526fbef7c609702af116"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cd9ebf335262e864d740f9dad3f672f61162cc0d4825a5eb5cf50df334a688f"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc8bc40d82d1ee8dec136e10707c7f3147a6322fd8014e174a0f3446fb793649"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:11e3ed8b94c750d54fc3e4502dd930fb0fd041629845b6a7ce089873ac9756b0"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:48fcb12a0a72fdfe4102bdb1252a7366e8d73a2c89fe6ce5923be890de367c2f"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:51a96d9fe51f718912b4a0089784f1f32d800217499fd0f0095b888506aba4c5"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eb8293d66c6a4ddc72fceb7ad0e111cb196cc394954ae0f9b63c251d97f1b00e"}, + {file = "psycopg_binary-3.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:5b81342e139ddccfa417832089cd213bd4beacd7a1462ca4019cafe71682d177"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a4321ee8180982d70458d3e8378e31448901bf0ee40fe0d410a87413578f4098"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2cc86657c05e09c701e97f87132cd58e0d55381dd568520081ac1fe7580a9bbb"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5244bebaa9734a236b7157fb57c065b6c0f2344281916187bd73f951df1899e0"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21b839f9bfd77ed074f7f71464a43f453400c57d038a0ba0716329a28e335897"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7376b13504396da9678b646f5338462347da01286b2a688a0d8493ec764683a2"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:473f6827cf1faf3924eb77146d1e85126a1b5e48a88053b8d8b78dd29e971d78"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:28bd5cb2324567e5e70f07fe1d646398d6b0e210e28b49be0e69593590a59980"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:48f97936145cb7de18b95d85670b2d3e2c257277263272be05815b74fb0ef195"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e6f2bef5aed021fbdf46323d3cd8847bf960efb56394698644a8ee2306f8892"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d2e57a1d06f3968e49e948ba374f21a7d8dcf44f37d582a4aeddeb7c85ce239"}, + {file = "psycopg_binary-3.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:2cbb8649cfdacbd14e17f5ab78edc52d33350013888518c73e90c5d17d7bea55"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2dbaf32c18c0d11c4480016b89c9c5cadb7b64c55de7f181d222b189bd13a558"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ca5e36a3e7480a5c09aed99ecdb8e6554b21485c3b064297fe77f7b1b5806106"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9abe093a303e25ac58774a11241150e2fe2947358d1ca12521ad03c90b131060"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a91b0e096fdfeb52d86bb8f5ee25dc22483d6960af9b968e6b381a8ec5bfbf82"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3eb71cfc35116e4a8e336b7e785f1fe06ca23b4516a48ea91facd577d1a1fdf6"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98efaedf2bf79f4d563ca039a57a025b72847bd80568f54709cc39fc1404772c"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba4a610882171bdaae0779f14e0ff45f3ee271fd2dbf16cdadfc81bd67323232"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1494827c43265820d5dcdc6f8086521bc7dd04b9da8831310978a788cdcd2e62"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7a94020821723a6a210206ddb458001f3ed27e1e6a0555b9422bebf7ead8ff37"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:659f2c675d478b1bc01b95a8d3ded74fa939b370e71ffbecd496f617b215eb05"}, + {file = "psycopg_binary-3.2.5-cp313-cp313-win_amd64.whl", hash = "sha256:6b581da13126b8715c0c0585cd37ce934c9864d44b2a4019f5487c0b943275e6"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:02fb96091e2fb3ea1470b113fef08953baaedbca1d39a3f72d82cb615177846c"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9639289b72f9339721982e156527c296693236d6192ccc31412ab36fccd1683c"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee6d8f489a9b116ea8dc797664a50671585a4ca20573359f067858e1231cc217"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de576c49d7deab2b78088feb24e1f6ae3e16a0020e8496cdd3b8543f5e350e87"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93221d5a759bd39b1face1d7d887d2b9ede3e55aefaff8eacf1b663ccdcd204b"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:274e852f9e61252bc8e80a0a43d300ba352d40219e856733054023a3bb960eb4"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bc5bd9bf5f5894923b78a41c5becd52d6bced1e1e43744855bd85cb341376ca6"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:32b5673736f04c36ccbf8012800fe5bc01b46dac22c5d59e41b043bebaad9d3d"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65162a9cc3f86d70b1d895dbda506e3c079f80d082eb41c54d3f6d33a00b3965"}, + {file = "psycopg_binary-3.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:5fd017d7ed71c58f19b0f614e7bfb8f01ec862bacb67ae584f494d090956102e"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d2253189aa4cca0a425e2ca896d1a29760cd3a2b10ab12194e4e827a566505c"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4914dc60f2fddf0884464985e31d775aa865b665471fa156ec2f56fa72a1a097"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efb878d08dd49d7d9d18512e791b418a1171d08f935475eec98305f0886b7c14"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62965045cc0fe3dc5dd55d39779620b225ef75962825c7b1b533033cb91810bd"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d22a15e45f43d36ed35aed4d5261f8ef6ab7d9b84ee075576ca56ae03b9e0aa"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375149006e21d58ed8aba640e0295d8e636043064c433af94eb58057f9b96877"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:60d0f36a42a822e43c4c7472df8a0c980c0f32e5d74ed871333c423a4e942f11"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:b6b5a4542aca4095ab35e184517cb0d18895ba4b6661c92865b431fa7b7974d8"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:605f70e267222d567fc40de7813ee3fb29f8145a1a20aa6fd3dc62baba9312f1"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2b053eae21dd3a6828b516a1171e1274d1af5f7c07d2d9a8f597f2e19c732168"}, + {file = "psycopg_binary-3.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:23a1dc61abb8f7cc702472ab29554167a9421842f976c201ceb3b722c0299769"}, ] [[package]] @@ -1266,13 +1267,13 @@ files = [ [[package]] name = "pydantic" -version = "2.10.5" +version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.10.5-py3-none-any.whl", hash = "sha256:4dd4e322dbe55472cb7ca7e73f4b63574eecccf2835ffa2af9021ce113c83c53"}, - {file = "pydantic-2.10.5.tar.gz", hash = "sha256:278b38dbbaec562011d659ee05f63346951b3a248a6f3642e1bc68894ea2b4ff"}, + {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, + {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, ] [package.dependencies] @@ -1412,13 +1413,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymilvus" -version = "2.5.3" +version = "2.5.4" description = "Python Sdk for Milvus" optional = false python-versions = ">=3.8" files = [ - {file = "pymilvus-2.5.3-py3-none-any.whl", hash = "sha256:64ca63594284586937274800be27a402f3be2d078130bf81d94ab8d7798ac9c8"}, - {file = "pymilvus-2.5.3.tar.gz", hash = "sha256:68bc3797b7a14c494caf116cee888894ffd6eba7b96a3ac841be85d60694cc5d"}, + {file = "pymilvus-2.5.4-py3-none-any.whl", hash = "sha256:3f7ddaeae0c8f63554b8e316b73f265d022e05a457d47c366ce47293434a3aea"}, + {file = "pymilvus-2.5.4.tar.gz", hash = "sha256:611732428ff669d57ded3d1f823bdeb10febf233d0251cce8498b287e5a10ce8"}, ] [package.dependencies] @@ -1469,13 +1470,13 @@ cli = ["click (>=5.0)"] [[package]] name = "pytz" -version = "2024.2" +version = "2025.1" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725"}, - {file = "pytz-2024.2.tar.gz", hash = "sha256:2aa355083c50a0f93fa581709deac0c9ad65cca8a9e9beac660adcbd493c798a"}, + {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"}, + {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"}, ] [[package]] @@ -1777,13 +1778,13 @@ test = ["codecov", "coverage", "mypy", "nptyping (>=1.3.0)", "numpy", "pycodesty [[package]] name = "tzdata" -version = "2024.2" +version = "2025.1" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd"}, - {file = "tzdata-2024.2.tar.gz", hash = "sha256:7d85cc416e9382e69095b7bdf4afd9e3880418a2413feec7069d533d6b4e31cc"}, + {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"}, + {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"}, ] [[package]] diff --git a/tools/compare_versions/prepare_image.sh b/tools/compare_versions/prepare_image.sh new file mode 100755 index 00000000..e127f59c --- /dev/null +++ b/tools/compare_versions/prepare_image.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +QDRANT_VERSION=${QDRANT_VERSION:-"ghcr/dev"} + +#MAX_RETRIES=12 +MAX_RETRIES=1 + +EVENT_TYPE="benchmark-trigger-image-build" + +if [[ -z "${BEARER_TOKEN}" ]]; then + echo "BEARER_TOKEN is not set. Exiting." + exit 1 +fi + +# check if version starts with "docker" or "ghcr" +if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; then + + if [[ ${QDRANT_VERSION} == docker/* ]]; then + # pull from docker hub + QDRANT_VERSION=${QDRANT_VERSION#docker/} + CONTAINER_REGISTRY='docker.io' + elif [[ ${QDRANT_VERSION} == ghcr/* ]]; then + # pull from github container registry + QDRANT_VERSION=${QDRANT_VERSION#ghcr/} + CONTAINER_REGISTRY='ghcr.io' + fi +else + echo "Error: unknown version ${QDRANT_VERSION}. Version name should start with 'docker/' or 'ghcr/'" + exit 1 +fi + +IMAGE="${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION}" + +if docker manifest inspect "$IMAGE" > /dev/null 2>&1; then + echo "Image $IMAGE exists in the remote repository." + exit 0 +else + echo "Image $IMAGE does not exist in the remote repository." +fi + +if [[ "${CONTAINER_REGISTRY}" == "docker.io" ]]; then + echo "Impossible to push the image to Docker Container Registry in this workflow." + exit 1 +fi + +echo "Trigger image build for $IMAGE..." +curl -L \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${BEARER_TOKEN}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/qdrant/qdrant/dispatches \ + -d "{\"event_type\": \"$EVENT_TYPE\", \"client_payload\": {\"version\": \"$QDRANT_VERSION\"}}" + +echo "Wait for the image to appear in the remote repository..." +counter=0 +while ! docker manifest inspect "$IMAGE" > /dev/null 2>&1; do + if [ $counter -ge $MAX_RETRIES ]; then + echo "Reached maximum retries. Exiting." + exit 2 + fi + # sleep for 10 minutes, in seconds + # together with the MAX_RETRIES it + # will wait for 120 minutes +# sleep 600 + sleep 60 + ((counter++)) +done + +echo "Image $IMAGE is now available in the remote repository." \ No newline at end of file From 8564a25eec7f169c91db434f72aaa3118abfa383 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Thu, 13 Mar 2025 08:41:18 +0100 Subject: [PATCH 078/101] Complete compare versions' workflow (#226) * Compare versions * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Use GITHUB_STEP_SUMMARY * Add doc strings --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../manual-compare-versions-benchmark.yaml | 176 +++++++++++++----- poetry.lock | 6 +- tools/compare_versions/prepare_image.sh | 21 ++- tools/run_ci.sh | 2 + tools/upload_parallel_results_postgres.sh | 14 ++ tools/upload_results_postgres.sh | 20 +- 6 files changed, 180 insertions(+), 59 deletions(-) diff --git a/.github/workflows/manual-compare-versions-benchmark.yaml b/.github/workflows/manual-compare-versions-benchmark.yaml index ca9a5b4a..854395f5 100644 --- a/.github/workflows/manual-compare-versions-benchmark.yaml +++ b/.github/workflows/manual-compare-versions-benchmark.yaml @@ -1,4 +1,8 @@ name: Manual Benchmark to compare versions +description: | + This workflow is used to compare two versions of qdrant using the same dataset and engine config. + It is triggered manually and requires the user to provide the versions of qdrant to compare, dataset and engine config. + The workflow will prepare the images for the provided versions (if needed), run the benchmark for each version and compare the results. on: workflow_dispatch: @@ -20,6 +24,7 @@ jobs: prepareImage1: name: Prepare image ${{ inputs.qdrant_version_1 }} runs-on: ubuntu-latest + timeout-minutes: 180 steps: - uses: actions/checkout@v3 - uses: webfactory/ssh-agent@v0.8.0 @@ -29,12 +34,13 @@ jobs: run: | # The branch, tag or SHA to checkout. export QDRANT_VERSION=${{ inputs.qdrant_version_1 }} - export BEARER_TOKEN="${{ secrets.GITHUB_TOKEN }}" + export BEARER_TOKEN="${{ secrets.TRIGGER_GH_TOKEN }}" bash -x tools/compare_versions/prepare_image.sh prepareImage2: - name: Prepare image ${{ inputs.qdrant_version_1 }} + name: Prepare image ${{ inputs.qdrant_version_2 }} runs-on: ubuntu-latest + timeout-minutes: 180 steps: - uses: actions/checkout@v3 - uses: webfactory/ssh-agent@v0.8.0 @@ -43,50 +49,126 @@ jobs: - name: Image for ${{ inputs.qdrant_version_2 }} run: | export QDRANT_VERSION=${{ inputs.qdrant_version_2 }} - export BEARER_TOKEN="${{ secrets.GITHUB_TOKEN }}" + export BEARER_TOKEN="${{ secrets.TRIGGER_GH_TOKEN }}" bash -x tools/compare_versions/prepare_image.sh -# runBenchmarkForVersion1: -# name: compare - ${{ inputs.qdrant_version_1 }} vs ${{ inputs.qdrant_version_2 }} - ${{ inputs.dataset }} -# needs: -# - prepareImage1 -# - prepareImage2 -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v3 -# - uses: webfactory/ssh-agent@v0.8.0 -# with: -# ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} -# - name: Bench ${{ inputs.qdrant_version_1 }} -# run: | -# export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} -# export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} -# export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} -# export QDRANT_VERSION=${{ inputs.qdrant_version_1 }} -# export DATASETS=${{ inputs.dataset }} -# export ENGINE_NAME=${{ inputs.engine_config }} -# export POSTGRES_TABLE=benchmark_manual -# bash -x tools/setup_ci.sh -# bash -x tools/run_ci.sh -# -# runBenchmarkForVersion2: -# name: compare - ${{ inputs.qdrant_version_1 }} vs ${{ inputs.qdrant_version_2 }} - ${{ inputs.dataset }} -# needs: -# - runBenchmarkForVersion1 -# runs-on: ubuntu-latest -# steps: -# - uses: actions/checkout@v3 -# - uses: webfactory/ssh-agent@v0.8.0 -# with: -# ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} -# - name: Bench ${{ inputs.qdrant_version_2 }} -# run: | -# export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} -# export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} -# export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} -# export QDRANT_VERSION=${{ inputs.qdrant_version_2 }} -# export DATASETS=${{ inputs.dataset }} -# export ENGINE_NAME=${{ inputs.engine_config }} -# export POSTGRES_TABLE=benchmark_manual -# bash -x tools/setup_ci.sh -# bash -x tools/run_ci.sh + runBenchmarkForVersion1: + name: execute - ${{ inputs.qdrant_version_1 }} - ${{ inputs.dataset }} + needs: + - prepareImage1 + runs-on: ubuntu-latest + concurrency: + group: continuous-benchmark + outputs: + collection_load_time: ${{ steps.bench.outputs.collection_load_time }} + rps: ${{ steps.bench.outputs.rps }} + mean_precisions: ${{ steps.bench.outputs.mean_precisions }} + p95_time: ${{ steps.bench.outputs.p95_time }} + p99_time: ${{ steps.bench.outputs.p99_time }} + vm_rss_memory_usage: ${{ steps.bench.outputs.vm_rss_memory_usage }} + rss_anon_memory_usage: ${{ steps.bench.outputs.rss_anon_memory_usage }} + upload_time: ${{ steps.bench.outputs.upload_time }} + indexing_time: ${{ steps.bench.outputs.indexing_time }} + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Bench ${{ inputs.qdrant_version_1 }} + id: bench + run: | + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + export QDRANT_VERSION=${{ inputs.qdrant_version_1 }} + export DATASETS=${{ inputs.dataset }} + export ENGINE_NAME=${{ inputs.engine_config }} + export POSTGRES_TABLE=benchmark_manual + bash -x tools/setup_ci.sh + bash -x tools/run_ci.sh + + runBenchmarkForVersion2: + name: execute - ${{ inputs.qdrant_version_2 }} - ${{ inputs.dataset }} + needs: + - prepareImage2 + - runBenchmarkForVersion1 + runs-on: ubuntu-latest + concurrency: + group: continuous-benchmark + outputs: + collection_load_time: ${{ steps.bench.outputs.collection_load_time }} + rps: ${{ steps.bench.outputs.rps }} + mean_precisions: ${{ steps.bench.outputs.mean_precisions }} + p95_time: ${{ steps.bench.outputs.p95_time }} + p99_time: ${{ steps.bench.outputs.p99_time }} + vm_rss_memory_usage: ${{ steps.bench.outputs.vm_rss_memory_usage }} + rss_anon_memory_usage: ${{ steps.bench.outputs.rss_anon_memory_usage }} + upload_time: ${{ steps.bench.outputs.upload_time }} + indexing_time: ${{ steps.bench.outputs.indexing_time }} + steps: + - uses: actions/checkout@v3 + - uses: webfactory/ssh-agent@v0.8.0 + with: + ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }} + - name: Bench ${{ inputs.qdrant_version_2 }} + id: bench + run: | + export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} + export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + export QDRANT_VERSION=${{ inputs.qdrant_version_2 }} + export DATASETS=${{ inputs.dataset }} + export ENGINE_NAME=${{ inputs.engine_config }} + export POSTGRES_TABLE=benchmark_manual + bash -x tools/setup_ci.sh + bash -x tools/run_ci.sh + + compareVersions: + name: compare - ${{ inputs.qdrant_version_1 }} vs ${{ inputs.qdrant_version_2 }} + needs: + - runBenchmarkForVersion1 + - runBenchmarkForVersion2 + runs-on: ubuntu-latest + steps: + - name: compare + run: | + compare() { + local var_name=$1 + local value_v1=$2 + local value_v2=$3 + + if (( $(echo "$value_v1 > $value_v2" | bc -l) )); then + local diff=$(echo "$value_v1 - $value_v2" | bc -l) + local percentage=$(echo "($diff / $value_v1) * 100" | bc -l) + echo -e "${{ inputs.qdrant_version_1 }} > ${{ inputs.qdrant_version_2 }} by $diff ($percentage% greater)" + elif (( $(echo "$value_v1 < $value_v2" | bc -l) )); then + local diff=$(echo "$value_v2 - $value_v1" | bc -l) + local percentage=$(echo "($diff / $value_v2) * 100" | bc -l) + echo -e "${{ inputs.qdrant_version_1 }} < ${{ inputs.qdrant_version_2 }} by $diff ($percentage% less)" + else + echo -e "equal" + fi + } + + res_collection_load_time=$(compare "collection_load_time" "${{ needs.runBenchmarkForVersion1.outputs.collection_load_time }}" "${{ needs.runBenchmarkForVersion2.outputs.collection_load_time }}") + res_rps=$(compare "rps" "${{ needs.runBenchmarkForVersion1.outputs.rps }}" "${{ needs.runBenchmarkForVersion2.outputs.rps }}") + res_mean_precisions=$(compare "mean_precisions" "${{ needs.runBenchmarkForVersion1.outputs.mean_precisions }}" "${{ needs.runBenchmarkForVersion2.outputs.mean_precisions }}") + res_p95_time=$(compare "p95_time" "${{ needs.runBenchmarkForVersion1.outputs.p95_time }}" "${{ needs.runBenchmarkForVersion2.outputs.p95_time }}") + res_p99_time=$(compare "p99_time" "${{ needs.runBenchmarkForVersion1.outputs.p99_time }}" "${{ needs.runBenchmarkForVersion2.outputs.p99_time }}") + res_vm_rss_memory_usage=$(compare "vm_rss_memory_usage" "${{ needs.runBenchmarkForVersion1.outputs.vm_rss_memory_usage }}" "${{ needs.runBenchmarkForVersion2.outputs.vm_rss_memory_usage }}") + res_rss_anon_memory_usage=$(compare "rss_anon_memory_usage" "${{ needs.runBenchmarkForVersion1.outputs.rss_anon_memory_usage }}" "${{ needs.runBenchmarkForVersion2.outputs.rss_anon_memory_usage }}") + res_upload_time=$(compare "upload_time" "${{ needs.runBenchmarkForVersion1.outputs.upload_time }}" "${{ needs.runBenchmarkForVersion2.outputs.upload_time }}") + res_indexing_time=$(compare "indexing_time" "${{ needs.runBenchmarkForVersion1.outputs.indexing_time }}" "${{ needs.runBenchmarkForVersion2.outputs.indexing_time }}") + + echo "# Comparison results" >> $GITHUB_STEP_SUMMARY + echo "| Name | ${{ inputs.qdrant_version_1 }} | ${{ inputs.qdrant_version_2 }} | Result |" >> $GITHUB_STEP_SUMMARY + echo "| --------------------- | ------------ | ------------ | ------------ |" >> $GITHUB_STEP_SUMMARY + echo "| collection_load_time | ${{ needs.runBenchmarkForVersion1.outputs.collection_load_time }} | ${{ needs.runBenchmarkForVersion2.outputs.collection_load_time }} | ${res_collection_load_time} |" >> $GITHUB_STEP_SUMMARY + echo "| rps | ${{ needs.runBenchmarkForVersion1.outputs.rps }} | ${{ needs.runBenchmarkForVersion2.outputs.rps }} | ${res_rps} |" >> $GITHUB_STEP_SUMMARY + echo "| mean_precisions | ${{ needs.runBenchmarkForVersion1.outputs.mean_precisions }} | ${{ needs.runBenchmarkForVersion2.outputs.mean_precisions }} | ${res_mean_precisions} |" >> $GITHUB_STEP_SUMMARY + echo "| p95_time | ${{ needs.runBenchmarkForVersion1.outputs.p95_time }} | ${{ needs.runBenchmarkForVersion2.outputs.p95_time }} | ${res_p95_time} |" >> $GITHUB_STEP_SUMMARY + echo "| p99_time | ${{ needs.runBenchmarkForVersion1.outputs.p99_time }} | ${{ needs.runBenchmarkForVersion2.outputs.p99_time }} | ${res_p99_time} |" >> $GITHUB_STEP_SUMMARY + echo "| vm_rss_memory_usage | ${{ needs.runBenchmarkForVersion1.outputs.vm_rss_memory_usage }} | ${{ needs.runBenchmarkForVersion2.outputs.vm_rss_memory_usage }} | ${res_vm_rss_memory_usage} |" >> $GITHUB_STEP_SUMMARY + echo "| rss_anon_memory_usage | ${{ needs.runBenchmarkForVersion1.outputs.rss_anon_memory_usage }} | ${{ needs.runBenchmarkForVersion2.outputs.rss_anon_memory_usage }} | ${res_rss_anon_memory_usage} |" >> $GITHUB_STEP_SUMMARY + echo "| upload_time | ${{ needs.runBenchmarkForVersion1.outputs.upload_time }} | ${{ needs.runBenchmarkForVersion2.outputs.upload_time }} | ${res_upload_time} |" >> $GITHUB_STEP_SUMMARY + echo "| indexing_time | ${{ needs.runBenchmarkForVersion1.outputs.indexing_time }} | ${{ needs.runBenchmarkForVersion2.outputs.indexing_time }} | ${res_indexing_time} |" >> $GITHUB_STEP_SUMMARY diff --git a/poetry.lock b/poetry.lock index 5ae48166..edeb53fc 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1586,13 +1586,13 @@ testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metad [[package]] name = "setuptools" -version = "75.8.0" +version = "75.8.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" files = [ - {file = "setuptools-75.8.0-py3-none-any.whl", hash = "sha256:e3982f444617239225d675215d51f6ba05f845d4eec313da4418fdbb56fb27e3"}, - {file = "setuptools-75.8.0.tar.gz", hash = "sha256:c5afc8f407c626b8313a86e10311dd3f661c6cd9c09d4bf8c15c0e11f9f2b0e6"}, + {file = "setuptools-75.8.2-py3-none-any.whl", hash = "sha256:558e47c15f1811c1fa7adbd0096669bf76c1d3f433f58324df69f3f5ecac4e8f"}, + {file = "setuptools-75.8.2.tar.gz", hash = "sha256:4880473a969e5f23f2a2be3646b2dfd84af9028716d398e46192f84bc36900d2"}, ] [package.extras] diff --git a/tools/compare_versions/prepare_image.sh b/tools/compare_versions/prepare_image.sh index e127f59c..04df6a13 100755 --- a/tools/compare_versions/prepare_image.sh +++ b/tools/compare_versions/prepare_image.sh @@ -1,9 +1,15 @@ #!/bin/bash +# This script checks for the image in the remote repo +# and if it is not there triggers the image build in the +# main Qdrant repo for the specified version and waits +# until the image is available in the remote repository. +# +# Usage: export QDRANT_VERSION="ghcr/dev" && ./prepare_image.sh + QDRANT_VERSION=${QDRANT_VERSION:-"ghcr/dev"} -#MAX_RETRIES=12 -MAX_RETRIES=1 +MAX_RETRIES=15 EVENT_TYPE="benchmark-trigger-image-build" @@ -18,10 +24,12 @@ if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; the if [[ ${QDRANT_VERSION} == docker/* ]]; then # pull from docker hub QDRANT_VERSION=${QDRANT_VERSION#docker/} + QDRANT_VERSION_IMG=${QDRANT_VERSION//\//-} # replace all / with - CONTAINER_REGISTRY='docker.io' elif [[ ${QDRANT_VERSION} == ghcr/* ]]; then # pull from github container registry QDRANT_VERSION=${QDRANT_VERSION#ghcr/} + QDRANT_VERSION_IMG=${QDRANT_VERSION//\//-} # replace all / with - CONTAINER_REGISTRY='ghcr.io' fi else @@ -29,7 +37,7 @@ else exit 1 fi -IMAGE="${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION}" +IMAGE="${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION_IMG}" if docker manifest inspect "$IMAGE" > /dev/null 2>&1; then echo "Image $IMAGE exists in the remote repository." @@ -50,7 +58,7 @@ curl -L \ -H "Authorization: Bearer ${BEARER_TOKEN}" \ -H "X-GitHub-Api-Version: 2022-11-28" \ https://api.github.com/repos/qdrant/qdrant/dispatches \ - -d "{\"event_type\": \"$EVENT_TYPE\", \"client_payload\": {\"version\": \"$QDRANT_VERSION\"}}" + -d "{\"event_type\": \"$EVENT_TYPE\", \"client_payload\": {\"version\": \"$QDRANT_VERSION\", \"triggered\": true}}" echo "Wait for the image to appear in the remote repository..." counter=0 @@ -61,9 +69,8 @@ while ! docker manifest inspect "$IMAGE" > /dev/null 2>&1; do fi # sleep for 10 minutes, in seconds # together with the MAX_RETRIES it - # will wait for 120 minutes -# sleep 600 - sleep 60 + # will wait for 150 minutes + sleep 600 ((counter++)) done diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 6b3bcbb1..120f54aa 100755 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -50,6 +50,8 @@ export VM_RSS_MEMORY_USAGE_FILE=$(ls -t results/vm-rss-memory-usage-*.txt | head export RSS_ANON_MEMORY_USAGE_FILE=$(ls -t results/rss-anon-memory-usage-*.txt | head -n 1) export ROOT_API_RESPONSE_FILE=$(ls -t results/root-api-*.json | head -n 1) +export IS_CI_RUN="true" + if [[ "$BENCHMARK_STRATEGY" == "parallel" ]]; then bash -x "${SCRIPT_PATH}/upload_parallel_results_postgres.sh" else diff --git a/tools/upload_parallel_results_postgres.sh b/tools/upload_parallel_results_postgres.sh index 3a894862..06294b3b 100644 --- a/tools/upload_parallel_results_postgres.sh +++ b/tools/upload_parallel_results_postgres.sh @@ -31,6 +31,8 @@ POSTGRES_TABLE=${POSTGRES_TABLE:-"benchmark_parallel_search_upload"} QDRANT_VERSION=${QDRANT_VERSION:-"dev"} DATASETS=${DATASETS:-"laion-small-clip"} +IS_CI_RUN=${IS_CI_RUN:-"false"} + if [[ "$BENCHMARK_STRATEGY" != "parallel" ]]; then echo "BENCHMARK_STRATEGY is not parallel" exit 1 @@ -90,3 +92,15 @@ INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestam VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${SEARCH_TIME}, ${NO_UPSERT_SEARCH_TIME}); " +if [[ "$IS_CI_RUN" == "true" ]]; then + echo "rps=${RPS}" >> "$GITHUB_OUTPUT" + echo "mean_precisions=${MEAN_PRECISIONS}" >> "$GITHUB_OUTPUT" + echo "p95_time=${P95_TIME}" >> "$GITHUB_OUTPUT" + echo "p99_time=${P99_TIME}" >> "$GITHUB_OUTPUT" + + echo "search_time=${SEARCH_TIME}" >> "$GITHUB_OUTPUT" + echo "no_upsert_search_time=${NO_UPSERT_SEARCH_TIME}" >> "$GITHUB_OUTPUT" + + echo "upload_time=${UPLOAD_TIME}" >> "$GITHUB_OUTPUT" + echo "indexing_time=${INDEXING_TIME}" >> "$GITHUB_OUTPUT" +fi diff --git a/tools/upload_results_postgres.sh b/tools/upload_results_postgres.sh index 41ab81dc..f05e7d7a 100644 --- a/tools/upload_results_postgres.sh +++ b/tools/upload_results_postgres.sh @@ -33,6 +33,8 @@ POSTGRES_TABLE=${POSTGRES_TABLE:-"benchmark"} QDRANT_VERSION=${QDRANT_VERSION:-"dev"} DATASETS=${DATASETS:-"laion-small-clip"} +IS_CI_RUN=${IS_CI_RUN:-"false"} + if [[ "$BENCHMARK_STRATEGY" == "collection-reload" ]]; then if [[ -z "$TELEMETRY_API_RESPONSE_FILE" ]]; then echo "TELEMETRY_API_RESPONSE_FILE is not set" @@ -89,8 +91,8 @@ else INDEXING_TIME=$(jq -r '.results.total_time' "$UPLOAD_RESULTS_FILE") fi -VM_RSS_MEMORY_USAGE=$(cat "$VM_RSS_MEMORY_USAGE_FILE") -RSS_ANON_MEMORY_USAGE=$(cat "$RSS_ANON_MEMORY_USAGE_FILE") +VM_RSS_MEMORY_USAGE=$(cat "$VM_RSS_MEMORY_USAGE_FILE" | tr -d '[:space:]') +RSS_ANON_MEMORY_USAGE=$(cat "$RSS_ANON_MEMORY_USAGE_FILE" | tr -d '[:space:]') QDRANT_COMMIT=$(jq -r '.commit' "$ROOT_API_RESPONSE_FILE") @@ -102,3 +104,17 @@ INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestam VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${VM_RSS_MEMORY_USAGE}, ${RSS_ANON_MEMORY_USAGE}, ${COLLECTION_LOAD_TIME}); " +if [[ "$IS_CI_RUN" == "true" ]]; then + echo "collection_load_time=${COLLECTION_LOAD_TIME}" >> "$GITHUB_OUTPUT" + + echo "rps=${RPS}" >> "$GITHUB_OUTPUT" + echo "mean_precisions=${MEAN_PRECISIONS}" >> "$GITHUB_OUTPUT" + echo "p95_time=${P95_TIME}" >> "$GITHUB_OUTPUT" + echo "p99_time=${P99_TIME}" >> "$GITHUB_OUTPUT" + + echo "vm_rss_memory_usage=${VM_RSS_MEMORY_USAGE}" >> "$GITHUB_OUTPUT" + echo "rss_anon_memory_usage=${RSS_ANON_MEMORY_USAGE}" >> "$GITHUB_OUTPUT" + + echo "upload_time=${UPLOAD_TIME}" >> "$GITHUB_OUTPUT" + echo "indexing_time=${INDEXING_TIME}" >> "$GITHUB_OUTPUT" +fi From 475a39fd56ccaa1f1dbed99730aee82075da1075 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Thu, 13 Mar 2025 12:40:39 +0100 Subject: [PATCH 079/101] Cancel manual workflow early (#227) * Cancel run if prepareImage fails --- tools/compare_versions/prepare_image.sh | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tools/compare_versions/prepare_image.sh b/tools/compare_versions/prepare_image.sh index 04df6a13..e93a7313 100755 --- a/tools/compare_versions/prepare_image.sh +++ b/tools/compare_versions/prepare_image.sh @@ -6,6 +6,22 @@ # # Usage: export QDRANT_VERSION="ghcr/dev" && ./prepare_image.sh +cancel_github_workflow() { + echo "Canceling the current GH workflow run..." + + RUN_ID=$(curl -s \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${BEARER_TOKEN}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + "https://api.github.com/repos/${GITHUB_REPOSITORY}/actions/runs" \ + | jq '.workflow_runs[] | select(.head_branch=="'${GITHUB_REF#refs/heads/}'") | .id' | head -n 1) + + curl -s \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${BEARER_TOKEN}" \ + "https://api.github.com/repos/${GITHUB_REPOSITORY}/actions/runs/${RUN_ID}/cancel" +} QDRANT_VERSION=${QDRANT_VERSION:-"ghcr/dev"} @@ -15,6 +31,7 @@ EVENT_TYPE="benchmark-trigger-image-build" if [[ -z "${BEARER_TOKEN}" ]]; then echo "BEARER_TOKEN is not set. Exiting." + cancel_github_workflow exit 1 fi @@ -34,6 +51,7 @@ if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; the fi else echo "Error: unknown version ${QDRANT_VERSION}. Version name should start with 'docker/' or 'ghcr/'" + cancel_github_workflow exit 1 fi @@ -48,6 +66,7 @@ fi if [[ "${CONTAINER_REGISTRY}" == "docker.io" ]]; then echo "Impossible to push the image to Docker Container Registry in this workflow." + cancel_github_workflow exit 1 fi @@ -65,6 +84,7 @@ counter=0 while ! docker manifest inspect "$IMAGE" > /dev/null 2>&1; do if [ $counter -ge $MAX_RETRIES ]; then echo "Reached maximum retries. Exiting." + cancel_github_workflow exit 2 fi # sleep for 10 minutes, in seconds From 6a73ea1db689c2454f1d30dc3b1c26f963d202f5 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Tue, 1 Apr 2025 08:08:53 +0200 Subject: [PATCH 080/101] Use query_points (#230) * Use query_points * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- engine/clients/qdrant/search.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index 613212cd..7f94de78 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -51,9 +51,9 @@ def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: ) try: - res = cls.client.search( + res = cls.client.query_points( collection_name=QDRANT_COLLECTION_NAME, - query_vector=query_vector, + query=query_vector, query_filter=cls.parser.parse(query.meta_conditions), limit=top, search_params=rest.SearchParams(**cls.search_params.get("config", {})), @@ -61,4 +61,4 @@ def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: except Exception as ex: print(f"Something went wrong during search: {ex}") raise ex - return [(hit.id, hit.score) for hit in res] + return [(hit.id, hit.score) for hit in res.points] From a7e51fa68e1eae509f42de97a7600e1bbe13ec9d Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Tue, 1 Apr 2025 12:31:09 +0200 Subject: [PATCH 081/101] Fix sparse vector name in query (#232) * Fix sparce vector name * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- engine/clients/qdrant/search.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index 7f94de78..a7d9c877 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -41,17 +41,14 @@ def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: query_vector = query.vector else: query_vector = construct( - rest.NamedSparseVector, - name="sparse", - vector=construct( - rest.SparseVector, - indices=query.sparse_vector.indices, - values=query.sparse_vector.values, - ), + rest.SparseVector, + indices=query.sparse_vector.indices, + values=query.sparse_vector.values, ) try: res = cls.client.query_points( + using="sparse" if query.sparse_vector else None, collection_name=QDRANT_COLLECTION_NAME, query=query_vector, query_filter=cls.parser.parse(query.meta_conditions), From 9849594c2fc97956944910ff490f9dcffd5189f7 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Tue, 1 Apr 2025 13:50:23 +0200 Subject: [PATCH 082/101] Run ci with payload (#231) * Add with_payload param * Update poetry * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/workflows/continuous-benchmark.yaml | 25 +- Dockerfile | 4 +- engine/clients/qdrant/search.py | 1 + .../configurations/qdrant-on-disk.json | 19 + .../configurations/qdrant-single-node.json | 83 +++ poetry.lock | 501 +++++++++++++----- pyproject.toml | 2 +- 7 files changed, 494 insertions(+), 141 deletions(-) diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index caf661e6..07a5f2cf 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -3,6 +3,10 @@ name: Continuous Benchmark on: repository_dispatch: workflow_dispatch: + inputs: + with_payload: + description: 'Flag that controls whether to search with or without payload (false or true)' + default: false schedule: # Run every 4 hours - cron: "0 */4 * * *" @@ -27,13 +31,16 @@ jobs: export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + export WITH_PAYLOAD=${{ inputs.with_payload }} + export SUFFIX=$([ "${WITH_PAYLOAD}" = "true" ] && echo "-with-payload" || echo "") + bash -x tools/setup_ci.sh declare -A DATASET_TO_ENGINE - DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark" - DATASET_TO_ENGINE["msmarco-sparse-100K"]="qdrant-sparse-vector" - DATASET_TO_ENGINE["h-and-m-2048-angular-filters"]="qdrant-continuous-benchmark" - DATASET_TO_ENGINE["dbpedia-openai-100K-1536-angular"]="qdrant-bq-continuous-benchmark" + DATASET_TO_ENGINE["laion-small-clip"]="qdrant-continuous-benchmark${SUFFIX}" + DATASET_TO_ENGINE["msmarco-sparse-100K"]="qdrant-sparse-vector${SUFFIX}" + DATASET_TO_ENGINE["h-and-m-2048-angular-filters"]="qdrant-continuous-benchmark${SUFFIX}" + DATASET_TO_ENGINE["dbpedia-openai-100K-1536-angular"]="qdrant-bq-continuous-benchmark${SUFFIX}" set +e @@ -117,13 +124,16 @@ jobs: export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + export WITH_PAYLOAD=${{ inputs.with_payload }} + export SUFFIX=$([ "${WITH_PAYLOAD}" = "true" ] && echo "-with-payload" || echo "") + bash -x tools/setup_ci.sh set +e # Benchmark filtered search by tenants with mem limitation - export ENGINE_NAME="qdrant-all-on-disk-scalar-q" + export ENGINE_NAME="qdrant-all-on-disk-scalar-q${SUFFIX}" export DATASETS="random-768-100-tenants" export BENCHMARK_STRATEGY="tenants" export CONTAINER_MEM_LIMIT=160mb @@ -203,13 +213,16 @@ jobs: export HCLOUD_TOKEN=${{ secrets.HCLOUD_TOKEN }} export POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} export POSTGRES_HOST=${{ secrets.POSTGRES_HOST }} + export WITH_PAYLOAD=${{ inputs.with_payload }} + export SUFFIX=$([ "${WITH_PAYLOAD}" = "true" ] && echo "-with-payload" || echo "") + bash -x tools/setup_ci.sh set +e # Benchmark parallel search&upload - export ENGINE_NAME="qdrant-continuous-benchmark" + export ENGINE_NAME="qdrant-continuous-benchmark${SUFFIX}" export DATASETS="laion-small-clip" export BENCHMARK_STRATEGY="parallel" export POSTGRES_TABLE="benchmark_parallel_search_upload" diff --git a/Dockerfile b/Dockerfile index 53f5bcc5..227ed436 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ ENV PYTHONFAULTHANDLER=1 \ PIP_NO_CACHE_DIR=off \ PIP_DISABLE_PIP_VERSION_CHECK=on \ PIP_DEFAULT_TIMEOUT=100 \ - POETRY_VERSION=1.5.1 + POETRY_VERSION=2.1.2 RUN pip install "poetry==$POETRY_VERSION" @@ -16,7 +16,7 @@ COPY poetry.lock pyproject.toml /code/ # Project initialization: RUN poetry config virtualenvs.create false \ - && poetry install --no-dev --no-interaction --no-ansi + && poetry --no-interaction --no-ansi install --without dev # Creating folders, and files for a project: COPY . /code diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index a7d9c877..3638c65b 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -54,6 +54,7 @@ def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: query_filter=cls.parser.parse(query.meta_conditions), limit=top, search_params=rest.SearchParams(**cls.search_params.get("config", {})), + with_payload=cls.search_params.get("with_payload", False), ) except Exception as ex: print(f"Something went wrong during search: {ex}") diff --git a/experiments/configurations/qdrant-on-disk.json b/experiments/configurations/qdrant-on-disk.json index e8e188f3..9eb60869 100644 --- a/experiments/configurations/qdrant-on-disk.json +++ b/experiments/configurations/qdrant-on-disk.json @@ -30,5 +30,24 @@ { "parallel": 8 } ], "upload_params": { "parallel": 4 } + }, + { + "name": "qdrant-all-on-disk-scalar-q-with-payload", + "engine": "qdrant", + "connection_params": {}, + "collection_params": { + "optimizers_config": { "default_segment_number": 17 }, + "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": false} }, + "vectors_config": { "on_disk": true }, + "hnsw_config": { "on_disk": true, "m": 0, "payload_m": 16 }, + "on_disk_payload": true, + "payload_index_params": { + "a": { "is_tenant": true, "on_disk": true } + } + }, + "search_params": [ + { "parallel": 8, "with_payload": true } + ], + "upload_params": { "parallel": 4 } } ] \ No newline at end of file diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index 81f9326f..8beb2c10 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -45,6 +45,41 @@ ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, + { + "name": "qdrant-continuous-benchmark-with-payload", + "engine": "qdrant", + "connection_params": { "timeout": 30 }, + "collection_params": { + "hnsw_config": { + "m": 32, + "ef_construct": 256 + }, + "quantization_config": { + "scalar": { + "type": "int8", + "quantile": 0.99 + } + }, + "optimizers_config": { + "max_segment_size": 1000000, + "default_segment_number": 3, + "memmap_threshold": 10000000 + } + }, + "search_params": [ + { + "parallel": 8, + "config": { + "hnsw_ef": 256, + "quantization": { + "oversampling": 2.0 + } + }, + "with_payload": true + } + ], + "upload_params": { "parallel": 16, "batch_size": 1024 } + }, { "name": "qdrant-bq-continuous-benchmark", "engine": "qdrant", @@ -72,6 +107,34 @@ ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, + { + "name": "qdrant-bq-continuous-benchmark-with-payload", + "engine": "qdrant", + "connection_params": { "timeout": 30 }, + "collection_params": { + "hnsw_config": { + "m": 32, + "ef_construct": 256 + }, + "quantization_config": { "binary": {"always_ram": true} }, + "optimizers_config": { + "max_segment_size": 1000000, + "default_segment_number": 3, + "memmap_threshold": 10000000 + } + }, + "search_params": [ + { + "parallel": 8, + "config": { + "hnsw_ef": 256, + "quantization": { "rescore": true, "oversampling": 2.0 } + }, + "with_payload": true + } + ], + "upload_params": { "parallel": 16, "batch_size": 1024 } + }, { "name": "qdrant-sparse-vector", "engine": "qdrant", @@ -91,6 +154,26 @@ ], "upload_params": { "parallel": 16, "batch_size": 1024 } }, + { + "name": "qdrant-sparse-vector-with-payload", + "engine": "qdrant", + "connection_params": { "timeout": 30 }, + "collection_params": { + "optimizers_config": { + "max_segment_size": 1000000, + "default_segment_number": 3, + "memmap_threshold": 10000000 + } + }, + "search_params": [ + { + "parallel": 8, + "search_params": {}, + "with_payload": true + } + ], + "upload_params": { "parallel": 16, "batch_size": 1024 } + }, { "name": "qdrant-parallel", "engine": "qdrant", diff --git a/poetry.lock b/poetry.lock index edeb53fc..65267b4f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -216,6 +216,17 @@ files = [ [package.dependencies] pycparser = "*" +[[package]] +name = "cfgv" +version = "3.4.0" +description = "Validate configuration and produce human readable error messages." +optional = false +python-versions = ">=3.8" +files = [ + {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, + {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, +] + [[package]] name = "charset-normalizer" version = "3.4.1" @@ -402,15 +413,26 @@ files = [ {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, ] +[[package]] +name = "distlib" +version = "0.3.9" +description = "Distribution utilities" +optional = false +python-versions = "*" +files = [ + {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, + {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, +] + [[package]] name = "elastic-transport" -version = "8.17.0" +version = "8.17.1" description = "Transport classes and utilities shared among Python Elastic client libraries" optional = false python-versions = ">=3.8" files = [ - {file = "elastic_transport-8.17.0-py3-none-any.whl", hash = "sha256:59f553300866750e67a38828fede000576562a0e66930c641adb75249e0c95af"}, - {file = "elastic_transport-8.17.0.tar.gz", hash = "sha256:e755f38f99fa6ec5456e236b8e58f0eb18873ac8fe710f74b91a16dd562de2a5"}, + {file = "elastic_transport-8.17.1-py3-none-any.whl", hash = "sha256:192718f498f1d10c5e9aa8b9cf32aed405e469a7f0e9d6a8923431dbb2c59fb8"}, + {file = "elastic_transport-8.17.1.tar.gz", hash = "sha256:5edef32ac864dca8e2f0a613ef63491ee8d6b8cfb52881fa7313ba9290cac6d2"}, ] [package.dependencies] @@ -418,17 +440,17 @@ certifi = "*" urllib3 = ">=1.26.2,<3" [package.extras] -develop = ["aiohttp", "furo", "httpcore (<1.0.6)", "httpx", "opentelemetry-api", "opentelemetry-sdk", "orjson", "pytest", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "pytest-mock", "requests", "respx", "sphinx (>2)", "sphinx-autodoc-typehints", "trustme"] +develop = ["aiohttp", "furo", "httpx", "opentelemetry-api", "opentelemetry-sdk", "orjson", "pytest", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "pytest-mock", "requests", "respx", "sphinx (>2)", "sphinx-autodoc-typehints", "trustme"] [[package]] name = "elasticsearch" -version = "8.17.1" +version = "8.17.2" description = "Python client for Elasticsearch" optional = false python-versions = ">=3.8" files = [ - {file = "elasticsearch-8.17.1-py3-none-any.whl", hash = "sha256:f1de0a075f12cc0fa377668eb4fb2ce02185c060ebb50cf2c3889242f9a5130e"}, - {file = "elasticsearch-8.17.1.tar.gz", hash = "sha256:057ab44cae8b3acffbf826a31678e46eafc38f26fcffa91015352d973299cdf0"}, + {file = "elasticsearch-8.17.2-py3-none-any.whl", hash = "sha256:2d058dcddd8f2686cd431a916cdf983f9fb7d211d902834f564ab7df05ba6478"}, + {file = "elasticsearch-8.17.2.tar.gz", hash = "sha256:ff7f1db8aeefd87ceba4edce3aa4070994582e6cf029d2e67b74e66d634509db"}, ] [package.dependencies] @@ -481,6 +503,22 @@ files = [ [package.extras] tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] +[[package]] +name = "filelock" +version = "3.16.1" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.8" +files = [ + {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, + {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] +typing = ["typing-extensions (>=4.12.2)"] + [[package]] name = "grpcio" version = "1.67.1" @@ -759,6 +797,20 @@ files = [ {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, ] +[[package]] +name = "identify" +version = "2.6.1" +description = "File identification library for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, + {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, +] + +[package.extras] +license = ["ukkonen"] + [[package]] name = "idna" version = "3.10" @@ -773,6 +825,17 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +[[package]] +name = "iniconfig" +version = "2.1.0" +description = "brain-dead simple config-ini parsing" +optional = false +python-versions = ">=3.8" +files = [ + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, +] + [[package]] name = "ipdb" version = "0.13.13" @@ -880,19 +943,31 @@ traitlets = "*" [[package]] name = "milvus-lite" -version = "2.4.11" +version = "2.4.12" description = "A lightweight version of Milvus wrapped with Python." optional = false python-versions = ">=3.7" files = [ - {file = "milvus_lite-2.4.11-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:9e563ae0dca1b41bfd76b90f06b2bcc474460fe4eba142c9bab18d2747ff843b"}, - {file = "milvus_lite-2.4.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d21472bd24eb327542817829ce7cb51878318e6173c4d62353c77421aecf98d6"}, - {file = "milvus_lite-2.4.11-py3-none-manylinux2014_x86_64.whl", hash = "sha256:551f56b49fcfbb330b658b4a3c56ed29ba9b692ec201edd1f2dade7f5e39957d"}, + {file = "milvus_lite-2.4.12-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:e8d4f7cdd5f731efd6faeee3715d280fd91a5f9b4d89312664d56401f65b1473"}, + {file = "milvus_lite-2.4.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:20087663e7b4385050b7ad08f1f03404426d4c87b1ff91d5a8723eee7fd49e88"}, + {file = "milvus_lite-2.4.12-py3-none-manylinux2014_aarch64.whl", hash = "sha256:a0f3a5ddbfd19f4a6b842b2fd3445693c796cde272b701a1646a94c1ac45d3d7"}, + {file = "milvus_lite-2.4.12-py3-none-manylinux2014_x86_64.whl", hash = "sha256:334037ebbab60243b5d8b43d54ca2f835d81d48c3cda0c6a462605e588deb05d"}, ] [package.dependencies] tqdm = "*" +[[package]] +name = "nodeenv" +version = "1.9.1" +description = "Node.js virtual environment builder" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, + {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, +] + [[package]] name = "numpy" version = "1.24.4" @@ -957,6 +1032,17 @@ develop = ["black (>=24.3.0)", "botocore", "coverage (<8.0.0)", "jinja2", "myst_ docs = ["aiohttp (>=3.9.4,<4)", "myst_parser", "sphinx", "sphinx_copybutton", "sphinx_rtd_theme"] kerberos = ["requests_kerberos"] +[[package]] +name = "packaging" +version = "24.2" +description = "Core utilities for Python packages" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, +] + [[package]] name = "pandas" version = "2.0.3" @@ -1077,6 +1163,37 @@ files = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] +[[package]] +name = "platformdirs" +version = "4.3.6" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, + {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.11.2)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + [[package]] name = "portalocker" version = "2.10.1" @@ -1096,6 +1213,24 @@ docs = ["sphinx (>=1.7.1)"] redis = ["redis"] tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "pytest-timeout (>=2.1.0)", "redis", "sphinx (>=6.0.0)", "types-redis"] +[[package]] +name = "pre-commit" +version = "2.21.0" +description = "A framework for managing and maintaining multi-language pre-commit hooks." +optional = false +python-versions = ">=3.7" +files = [ + {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, + {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, +] + +[package.dependencies] +cfgv = ">=2.0.0" +identify = ">=1.0.0" +nodeenv = ">=0.11.1" +pyyaml = ">=5.1" +virtualenv = ">=20.10.0" + [[package]] name = "prompt-toolkit" version = "3.0.50" @@ -1112,44 +1247,44 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "5.29.3" +version = "5.29.4" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-5.29.3-cp310-abi3-win32.whl", hash = "sha256:3ea51771449e1035f26069c4c7fd51fba990d07bc55ba80701c78f886bf9c888"}, - {file = "protobuf-5.29.3-cp310-abi3-win_amd64.whl", hash = "sha256:a4fa6f80816a9a0678429e84973f2f98cbc218cca434abe8db2ad0bffc98503a"}, - {file = "protobuf-5.29.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a8434404bbf139aa9e1300dbf989667a83d42ddda9153d8ab76e0d5dcaca484e"}, - {file = "protobuf-5.29.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:daaf63f70f25e8689c072cfad4334ca0ac1d1e05a92fc15c54eb9cf23c3efd84"}, - {file = "protobuf-5.29.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:c027e08a08be10b67c06bf2370b99c811c466398c357e615ca88c91c07f0910f"}, - {file = "protobuf-5.29.3-cp38-cp38-win32.whl", hash = "sha256:84a57163a0ccef3f96e4b6a20516cedcf5bb3a95a657131c5c3ac62200d23252"}, - {file = "protobuf-5.29.3-cp38-cp38-win_amd64.whl", hash = "sha256:b89c115d877892a512f79a8114564fb435943b59067615894c3b13cd3e1fa107"}, - {file = "protobuf-5.29.3-cp39-cp39-win32.whl", hash = "sha256:0eb32bfa5219fc8d4111803e9a690658aa2e6366384fd0851064b963b6d1f2a7"}, - {file = "protobuf-5.29.3-cp39-cp39-win_amd64.whl", hash = "sha256:6ce8cc3389a20693bfde6c6562e03474c40851b44975c9b2bf6df7d8c4f864da"}, - {file = "protobuf-5.29.3-py3-none-any.whl", hash = "sha256:0a18ed4a24198528f2333802eb075e59dea9d679ab7a6c5efb017a59004d849f"}, - {file = "protobuf-5.29.3.tar.gz", hash = "sha256:5da0f41edaf117bde316404bad1a486cb4ededf8e4a54891296f648e8e076620"}, + {file = "protobuf-5.29.4-cp310-abi3-win32.whl", hash = "sha256:13eb236f8eb9ec34e63fc8b1d6efd2777d062fa6aaa68268fb67cf77f6839ad7"}, + {file = "protobuf-5.29.4-cp310-abi3-win_amd64.whl", hash = "sha256:bcefcdf3976233f8a502d265eb65ea740c989bacc6c30a58290ed0e519eb4b8d"}, + {file = "protobuf-5.29.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:307ecba1d852ec237e9ba668e087326a67564ef83e45a0189a772ede9e854dd0"}, + {file = "protobuf-5.29.4-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:aec4962f9ea93c431d5714ed1be1c93f13e1a8618e70035ba2b0564d9e633f2e"}, + {file = "protobuf-5.29.4-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:d7d3f7d1d5a66ed4942d4fefb12ac4b14a29028b209d4bfb25c68ae172059922"}, + {file = "protobuf-5.29.4-cp38-cp38-win32.whl", hash = "sha256:1832f0515b62d12d8e6ffc078d7e9eb06969aa6dc13c13e1036e39d73bebc2de"}, + {file = "protobuf-5.29.4-cp38-cp38-win_amd64.whl", hash = "sha256:476cb7b14914c780605a8cf62e38c2a85f8caff2e28a6a0bad827ec7d6c85d68"}, + {file = "protobuf-5.29.4-cp39-cp39-win32.whl", hash = "sha256:fd32223020cb25a2cc100366f1dedc904e2d71d9322403224cdde5fdced0dabe"}, + {file = "protobuf-5.29.4-cp39-cp39-win_amd64.whl", hash = "sha256:678974e1e3a9b975b8bc2447fca458db5f93a2fb6b0c8db46b6675b5b5346812"}, + {file = "protobuf-5.29.4-py3-none-any.whl", hash = "sha256:3fde11b505e1597f71b875ef2fc52062b6a9740e5f7c8997ce878b6009145862"}, + {file = "protobuf-5.29.4.tar.gz", hash = "sha256:4f1dfcd7997b31ef8f53ec82781ff434a28bf71d9102ddde14d076adcfc78c99"}, ] [[package]] name = "psycopg" -version = "3.2.5" +version = "3.2.6" description = "PostgreSQL database adapter for Python" optional = false python-versions = ">=3.8" files = [ - {file = "psycopg-3.2.5-py3-none-any.whl", hash = "sha256:b782130983e5b3de30b4c529623d3687033b4dafa05bb661fc6bf45837ca5879"}, - {file = "psycopg-3.2.5.tar.gz", hash = "sha256:f5f750611c67cb200e85b408882f29265c66d1de7f813add4f8125978bfd70e8"}, + {file = "psycopg-3.2.6-py3-none-any.whl", hash = "sha256:f3ff5488525890abb0566c429146add66b329e20d6d4835662b920cbbf90ac58"}, + {file = "psycopg-3.2.6.tar.gz", hash = "sha256:16fa094efa2698f260f2af74f3710f781e4a6f226efe9d1fd0c37f384639ed8a"}, ] [package.dependencies] "backports.zoneinfo" = {version = ">=0.2.0", markers = "python_version < \"3.9\""} -psycopg-binary = {version = "3.2.5", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} +psycopg-binary = {version = "3.2.6", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} typing-extensions = {version = ">=4.6", markers = "python_version < \"3.13\""} tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] -binary = ["psycopg-binary (==3.2.5)"] -c = ["psycopg-c (==3.2.5)"] +binary = ["psycopg-binary (==3.2.6)"] +c = ["psycopg-c (==3.2.6)"] dev = ["ast-comments (>=1.1.2)", "black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "isort-psycopg", "isort[colors] (>=6.0)", "mypy (>=1.14)", "pre-commit (>=4.0.1)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] docs = ["Sphinx (>=5.0)", "furo (==2022.6.21)", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints (>=1.12)"] pool = ["psycopg-pool"] @@ -1157,76 +1292,76 @@ test = ["anyio (>=4.0)", "mypy (>=1.14)", "pproxy (>=2.7)", "pytest (>=6.2.5)", [[package]] name = "psycopg-binary" -version = "3.2.5" +version = "3.2.6" description = "PostgreSQL database adapter for Python -- C optimisation distribution" optional = false python-versions = ">=3.8" files = [ - {file = "psycopg_binary-3.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a82211a43372cba9b1555a110e84e679deec2dc9463ae4c736977dad99dca5ed"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e7d215a43343d91ba08301865f059d9518818d66a222a85fb425e4156716f5a6"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f893c0ed3d5c7b83b76b1f8f7d3ca5a03e38bcd3cab5d65b5c25a0d1064aca4"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d10ce4c39eb9631381a0c3792727946a4391e843625a7ee9579ac6bb11495a5"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a602d9fdb567cca090ca19ac3ebf10219065be2a4f8cf9eb8356cffb5a7ab1d"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c37eb3be7a6be93f4925ccf52bbfa60244da6c63201770a709dd81a3d2d08534"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7d5f1bfc848a94e0d63fe693adee4f88bd9e5c415ecb4c9c17d2d44eba6795a6"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b5e0acbc991472188c9df40eb56d8a97ad3ad00d4de560b8b74bdc2d94041a8f"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d4e0c1b1aa5283f6d9a384ffc7a8400d25386bb98fdb9bddae446e4ef4da7366"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:c3c5fa3d4fa0a651cefab391b783f89bc5e331afa0a4e93c9b16141993fa05c8"}, - {file = "psycopg_binary-3.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:7efe6c732fd2d7e22d72dc4f7cf9b644020adacfff61b0a8a151343da8e661c0"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:393ab353196d364858b47317d27804ecc58ab56dbde32217bd67f0f2f2980662"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:71d82dbc7c6c7f5746468e7992e5483aa45b12250d78d220a2431ab88795825c"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39e2cd10bf15442d95c3f48376b25dc33360418ea6c3c05884d8bf42407768c0"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7623659d44a6aa032be4a066c658ba45009d768c2481526fbef7c609702af116"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8cd9ebf335262e864d740f9dad3f672f61162cc0d4825a5eb5cf50df334a688f"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dc8bc40d82d1ee8dec136e10707c7f3147a6322fd8014e174a0f3446fb793649"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:11e3ed8b94c750d54fc3e4502dd930fb0fd041629845b6a7ce089873ac9756b0"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:48fcb12a0a72fdfe4102bdb1252a7366e8d73a2c89fe6ce5923be890de367c2f"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:51a96d9fe51f718912b4a0089784f1f32d800217499fd0f0095b888506aba4c5"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:eb8293d66c6a4ddc72fceb7ad0e111cb196cc394954ae0f9b63c251d97f1b00e"}, - {file = "psycopg_binary-3.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:5b81342e139ddccfa417832089cd213bd4beacd7a1462ca4019cafe71682d177"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a4321ee8180982d70458d3e8378e31448901bf0ee40fe0d410a87413578f4098"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2cc86657c05e09c701e97f87132cd58e0d55381dd568520081ac1fe7580a9bbb"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5244bebaa9734a236b7157fb57c065b6c0f2344281916187bd73f951df1899e0"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:21b839f9bfd77ed074f7f71464a43f453400c57d038a0ba0716329a28e335897"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7376b13504396da9678b646f5338462347da01286b2a688a0d8493ec764683a2"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:473f6827cf1faf3924eb77146d1e85126a1b5e48a88053b8d8b78dd29e971d78"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:28bd5cb2324567e5e70f07fe1d646398d6b0e210e28b49be0e69593590a59980"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:48f97936145cb7de18b95d85670b2d3e2c257277263272be05815b74fb0ef195"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e6f2bef5aed021fbdf46323d3cd8847bf960efb56394698644a8ee2306f8892"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:3d2e57a1d06f3968e49e948ba374f21a7d8dcf44f37d582a4aeddeb7c85ce239"}, - {file = "psycopg_binary-3.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:2cbb8649cfdacbd14e17f5ab78edc52d33350013888518c73e90c5d17d7bea55"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2dbaf32c18c0d11c4480016b89c9c5cadb7b64c55de7f181d222b189bd13a558"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ca5e36a3e7480a5c09aed99ecdb8e6554b21485c3b064297fe77f7b1b5806106"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9abe093a303e25ac58774a11241150e2fe2947358d1ca12521ad03c90b131060"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a91b0e096fdfeb52d86bb8f5ee25dc22483d6960af9b968e6b381a8ec5bfbf82"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3eb71cfc35116e4a8e336b7e785f1fe06ca23b4516a48ea91facd577d1a1fdf6"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98efaedf2bf79f4d563ca039a57a025b72847bd80568f54709cc39fc1404772c"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba4a610882171bdaae0779f14e0ff45f3ee271fd2dbf16cdadfc81bd67323232"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1494827c43265820d5dcdc6f8086521bc7dd04b9da8831310978a788cdcd2e62"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:7a94020821723a6a210206ddb458001f3ed27e1e6a0555b9422bebf7ead8ff37"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:659f2c675d478b1bc01b95a8d3ded74fa939b370e71ffbecd496f617b215eb05"}, - {file = "psycopg_binary-3.2.5-cp313-cp313-win_amd64.whl", hash = "sha256:6b581da13126b8715c0c0585cd37ce934c9864d44b2a4019f5487c0b943275e6"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:02fb96091e2fb3ea1470b113fef08953baaedbca1d39a3f72d82cb615177846c"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9639289b72f9339721982e156527c296693236d6192ccc31412ab36fccd1683c"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee6d8f489a9b116ea8dc797664a50671585a4ca20573359f067858e1231cc217"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de576c49d7deab2b78088feb24e1f6ae3e16a0020e8496cdd3b8543f5e350e87"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93221d5a759bd39b1face1d7d887d2b9ede3e55aefaff8eacf1b663ccdcd204b"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:274e852f9e61252bc8e80a0a43d300ba352d40219e856733054023a3bb960eb4"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:bc5bd9bf5f5894923b78a41c5becd52d6bced1e1e43744855bd85cb341376ca6"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:32b5673736f04c36ccbf8012800fe5bc01b46dac22c5d59e41b043bebaad9d3d"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:65162a9cc3f86d70b1d895dbda506e3c079f80d082eb41c54d3f6d33a00b3965"}, - {file = "psycopg_binary-3.2.5-cp38-cp38-win_amd64.whl", hash = "sha256:5fd017d7ed71c58f19b0f614e7bfb8f01ec862bacb67ae584f494d090956102e"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5d2253189aa4cca0a425e2ca896d1a29760cd3a2b10ab12194e4e827a566505c"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4914dc60f2fddf0884464985e31d775aa865b665471fa156ec2f56fa72a1a097"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:efb878d08dd49d7d9d18512e791b418a1171d08f935475eec98305f0886b7c14"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62965045cc0fe3dc5dd55d39779620b225ef75962825c7b1b533033cb91810bd"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2d22a15e45f43d36ed35aed4d5261f8ef6ab7d9b84ee075576ca56ae03b9e0aa"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:375149006e21d58ed8aba640e0295d8e636043064c433af94eb58057f9b96877"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:60d0f36a42a822e43c4c7472df8a0c980c0f32e5d74ed871333c423a4e942f11"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:b6b5a4542aca4095ab35e184517cb0d18895ba4b6661c92865b431fa7b7974d8"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:605f70e267222d567fc40de7813ee3fb29f8145a1a20aa6fd3dc62baba9312f1"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2b053eae21dd3a6828b516a1171e1274d1af5f7c07d2d9a8f597f2e19c732168"}, - {file = "psycopg_binary-3.2.5-cp39-cp39-win_amd64.whl", hash = "sha256:23a1dc61abb8f7cc702472ab29554167a9421842f976c201ceb3b722c0299769"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1b639acb3e24243c23f75700bf6e3af7b76da92523ec7c3196a13aaf0b578453"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1b5c359173726b38d7acbb9f73270f269591d8031d099c1a70dd3f3d22b0e8a8"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3434efe7c00f505f4c1e531519dac6c701df738ba7a1328eac81118d80019132"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bca8d9643191b13193940bbf84d51ac5a747e965c230177258fb02b8043fb7a"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55fa40f11d37e6e5149a282a5fd7e0734ce55c623673bfba638480914fd1414c"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0690ac1061c655b1bcbe9284d07bf5276bc9c0d788a6c74aaf3b042e64984b83"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e9a4a9967ff650d2821d5fad6bec7b15f4c2072603e9fa3f89a39f351ade1fd3"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d6f2894cc7aee8a15fe591e8536911d9c015cb404432cf7bdac2797e54cb2ba8"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:05560c81312d7c2bee95a9860cd25198677f2320fb4a3527bc04e8cae7fcfb64"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4269cd23a485d6dd6eb6b10841c94551a53091cf0b1b6d5247a6a341f53f0d95"}, + {file = "psycopg_binary-3.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:7942f35a6f314608720116bcd9de240110ceadffd2ac5c34f68f74a31e52e46a"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7afe181f6b3eb714362e9b6a2dc2a589bff60471a1d8639fd231a4e426e01523"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34bb0fceba0773dc0bfb53224bb2c0b19dc97ea0a997a223615484cf02cae55c"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54120122d2779dcd307f49e1f921d757fe5dacdced27deab37f277eef0c52a5b"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:816aa556f63b2303e66ba6c8888a8b3f3e6e4e47049ec7a4d62c84ac60b091ca"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d19a0ba351eda9a59babf8c7c9d89c7bbc5b26bf096bc349b096bd0dd2482088"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6e197e01290ef818a092c877025fc28096adbb6d0743e313491a21aab31bd96"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:274794b4b29ef426e09086404446b61a146f5e756da71366c5a6d57abec31f7d"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:69845bdc0db519e1dfc27932cd3d5b1ecb3f72950af52a1987508ab0b52b3b55"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:66c3bed2caf0d1cabcb9365064de183b5209a7cbeaa131e79e68f350c9c963c2"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e3ae3201fe85c7f901349a2cf52f02ceca4cb97a5e2e2ac8b8a1c9a6eb747bed"}, + {file = "psycopg_binary-3.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:58f443b4df2adb59937c96775fadf4967f93d952fbcc82394446985faec11041"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f27a46ff0497e882e8c0286e8833c785b4d1a80f23e1bf606f4c90e5f9f3ce75"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b30ee4821ded7de48b8048b14952512588e7c5477b0a5965221e1798afba61a1"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e57edf3b1f5427f39660225b01f8e7b97f5cfab132092f014bf1638bc85d81d2"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c5172ce3e4ae7a4fd450070210f801e2ce6bc0f11d1208d29268deb0cda34de"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcfab3804c43571a6615e559cdc4c4115785d258a4dd71a721be033f5f5f378d"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fa1c920cce16f1205f37b20c685c58b9656b170b8b4c93629100d342d0d118e"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2e118d818101c1608c6b5ba52a6c977614d8f05aa89467501172ba4d10588e11"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:763319a8bfeca77d31512da71f5a33459b9568a7621c481c3828c62f9c38f351"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:2fbc05819560389dbece046966bc88e0f2ea77673497e274c4293b8b4c1d0703"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a57f99bb953b4bd6f32d0a9844664e7f6ca5ead9ba40e96635be3cd30794813"}, + {file = "psycopg_binary-3.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:5de6809e19a465dcb9c269675bded46a135f2d600cd99f0735afbb21ddad2af4"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54af3fbf871baa2eb19df96fd7dc0cbd88e628a692063c3d1ab5cdd00aa04322"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ad5da1e4636776c21eaeacdec42f25fa4612631a12f25cd9ab34ddf2c346ffb9"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7956b9ea56f79cd86eddcfbfc65ae2af1e4fe7932fa400755005d903c709370"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e2efb763188008cf2914820dcb9fb23c10fe2be0d2c97ef0fac7cec28e281d8"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b3aab3451679f1e7932270e950259ed48c3b79390022d3f660491c0e65e4838"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:849a370ac4e125f55f2ad37f928e588291a67ccf91fa33d0b1e042bb3ee1f986"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:566d4ace928419d91f1eb3227fc9ef7b41cf0ad22e93dd2c3368d693cf144408"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f1981f13b10de2f11cfa2f99a8738b35b3f0a0f3075861446894a8d3042430c0"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:36f598300b55b3c983ae8df06473ad27333d2fd9f3e2cfdb913b3a5aaa3a8bcf"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0f4699fa5fe1fffb0d6b2d14b31fd8c29b7ea7375f89d5989f002aaf21728b21"}, + {file = "psycopg_binary-3.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:afe697b8b0071f497c5d4c0f41df9e038391534f5614f7fb3a8c1ca32d66e860"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:da5554553b8d9fb7ab6bb1a37cc53f20ada9024916c60f40c09ab1a675323f2f"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b7e3ccc43c395edba8039c9e407b01ed1844304c7f2f4aa99d34d04ed067c83"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d55405efc8a96aa0ecb2d5d6af552d35c744f160b133fa690814a68d9a952c8"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:58d5cfb1687b69b3484a034d1aa6e5c11f0c1d46757e978ed59fab59ce83fd37"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3761c4107dab218c32ce4b10b1ae5ed686d41b882bfcb05f5bebc2be9488442f"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:45f1526e12cb480586c74670f46563d3090fc2a93e859ccf71efae61f04cef4b"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b4d4fd4415d5219785fb082e28d84be4fbd90c3bff3d861877db0aa6b0edd70b"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:eb8a1e6b8130fee0b48107739e09553d50c6f031d0b3fcc33f885bb64fa01105"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7adf1460c05f7366f0fe9cf2d24e46abca9eb621705322bbd0c3f3e3a5edb2b4"}, + {file = "psycopg_binary-3.2.6-cp38-cp38-win_amd64.whl", hash = "sha256:28505f52ceef60554b5ab3289bf5aed2e7e57fa8e9a59a979d82db944e256a6c"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:260c43c329e668606388cee78ec0dab083a25c2c6e6f9cf74a130fd5a27b0f87"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9870e51fad4684dbdec057fa757d65e61cb2acb16236836e9360044c2a1ec880"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:030e9c3082a931e972b029b3cef085784a3bf7f8e18367ae50d5b809aa6e1d87"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60c9ed291fbd5e777c2c630dcfd10b7a87d68512b0757d5e7406d9c4895a82a"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e0f4a17a9c376c195e403b4826c18f325bd28f425231d36d1036258bf893e23"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac46da609624b16d961f604b3cbc3233ef43211ef1456a188f8c427109c9c3e1"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e77949b8e7014b85cee0bf6e9e041bcae7719b2693ebf59236368fb0b2a08814"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:532322d9ef6e7d178a4f344970b017110633bcc3dc1c3403efcef55aad612517"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:880c5fd76dcb50bdcc8f87359e5a6c7eb416697cc9aa02854c91223bd999c045"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3c0cddc7458b8416d77cd8829d0192466502f31d1fb853d58613cf13ac64f41c"}, + {file = "psycopg_binary-3.2.6-cp39-cp39-win_amd64.whl", hash = "sha256:ea158665676f42b19585dfe948071d3c5f28276f84a97522fb2e82c1d9194563"}, ] [[package]] @@ -1413,13 +1548,13 @@ windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pymilvus" -version = "2.5.4" +version = "2.5.6" description = "Python Sdk for Milvus" optional = false python-versions = ">=3.8" files = [ - {file = "pymilvus-2.5.4-py3-none-any.whl", hash = "sha256:3f7ddaeae0c8f63554b8e316b73f265d022e05a457d47c366ce47293434a3aea"}, - {file = "pymilvus-2.5.4.tar.gz", hash = "sha256:611732428ff669d57ded3d1f823bdeb10febf233d0251cce8498b287e5a10ce8"}, + {file = "pymilvus-2.5.6-py3-none-any.whl", hash = "sha256:19796f328278974f04632a1531e602070614f6ab0865cc97e27755f622e50a6d"}, + {file = "pymilvus-2.5.6.tar.gz", hash = "sha256:2bea0b03ed9ac3daadb1b2df8e38aa5c8f4aabd00b23a4999abb4adaebf54f59"}, ] [package.dependencies] @@ -1438,7 +1573,29 @@ ujson = ">=2.0.0" [package.extras] bulk-writer = ["azure-storage-blob", "minio (>=7.0.0)", "pyarrow (>=12.0.0)", "requests"] dev = ["black", "grpcio (==1.62.2)", "grpcio-testing (==1.62.2)", "grpcio-tools (==1.62.2)", "pytest (>=5.3.4)", "pytest-cov (>=2.8.1)", "pytest-timeout (>=1.3.4)", "ruff (>0.4.0)"] -model = ["milvus-model (>=0.1.0)"] +model = ["pymilvus.model (>=0.3.0)"] + +[[package]] +name = "pytest" +version = "7.4.4" +description = "pytest: simple powerful testing with Python" +optional = false +python-versions = ">=3.7" +files = [ + {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, + {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] [[package]] name = "python-dateutil" @@ -1470,40 +1627,100 @@ cli = ["click (>=5.0)"] [[package]] name = "pytz" -version = "2025.1" +version = "2025.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" files = [ - {file = "pytz-2025.1-py2.py3-none-any.whl", hash = "sha256:89dd22dca55b46eac6eda23b2d72721bf1bdfef212645d81513ef5d03038de57"}, - {file = "pytz-2025.1.tar.gz", hash = "sha256:c2db42be2a2518b28e65f9207c4d05e6ff547d1efa4086469ef855e4ab70178e"}, + {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, + {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, ] [[package]] name = "pywin32" -version = "308" +version = "310" description = "Python for Window Extensions" optional = false python-versions = "*" files = [ - {file = "pywin32-308-cp310-cp310-win32.whl", hash = "sha256:796ff4426437896550d2981b9c2ac0ffd75238ad9ea2d3bfa67a1abd546d262e"}, - {file = "pywin32-308-cp310-cp310-win_amd64.whl", hash = "sha256:4fc888c59b3c0bef905ce7eb7e2106a07712015ea1c8234b703a088d46110e8e"}, - {file = "pywin32-308-cp310-cp310-win_arm64.whl", hash = "sha256:a5ab5381813b40f264fa3495b98af850098f814a25a63589a8e9eb12560f450c"}, - {file = "pywin32-308-cp311-cp311-win32.whl", hash = "sha256:5d8c8015b24a7d6855b1550d8e660d8daa09983c80e5daf89a273e5c6fb5095a"}, - {file = "pywin32-308-cp311-cp311-win_amd64.whl", hash = "sha256:575621b90f0dc2695fec346b2d6302faebd4f0f45c05ea29404cefe35d89442b"}, - {file = "pywin32-308-cp311-cp311-win_arm64.whl", hash = "sha256:100a5442b7332070983c4cd03f2e906a5648a5104b8a7f50175f7906efd16bb6"}, - {file = "pywin32-308-cp312-cp312-win32.whl", hash = "sha256:587f3e19696f4bf96fde9d8a57cec74a57021ad5f204c9e627e15c33ff568897"}, - {file = "pywin32-308-cp312-cp312-win_amd64.whl", hash = "sha256:00b3e11ef09ede56c6a43c71f2d31857cf7c54b0ab6e78ac659497abd2834f47"}, - {file = "pywin32-308-cp312-cp312-win_arm64.whl", hash = "sha256:9b4de86c8d909aed15b7011182c8cab38c8850de36e6afb1f0db22b8959e3091"}, - {file = "pywin32-308-cp313-cp313-win32.whl", hash = "sha256:1c44539a37a5b7b21d02ab34e6a4d314e0788f1690d65b48e9b0b89f31abbbed"}, - {file = "pywin32-308-cp313-cp313-win_amd64.whl", hash = "sha256:fd380990e792eaf6827fcb7e187b2b4b1cede0585e3d0c9e84201ec27b9905e4"}, - {file = "pywin32-308-cp313-cp313-win_arm64.whl", hash = "sha256:ef313c46d4c18dfb82a2431e3051ac8f112ccee1a34f29c263c583c568db63cd"}, - {file = "pywin32-308-cp37-cp37m-win32.whl", hash = "sha256:1f696ab352a2ddd63bd07430080dd598e6369152ea13a25ebcdd2f503a38f1ff"}, - {file = "pywin32-308-cp37-cp37m-win_amd64.whl", hash = "sha256:13dcb914ed4347019fbec6697a01a0aec61019c1046c2b905410d197856326a6"}, - {file = "pywin32-308-cp38-cp38-win32.whl", hash = "sha256:5794e764ebcabf4ff08c555b31bd348c9025929371763b2183172ff4708152f0"}, - {file = "pywin32-308-cp38-cp38-win_amd64.whl", hash = "sha256:3b92622e29d651c6b783e368ba7d6722b1634b8e70bd376fd7610fe1992e19de"}, - {file = "pywin32-308-cp39-cp39-win32.whl", hash = "sha256:7873ca4dc60ab3287919881a7d4f88baee4a6e639aa6962de25a98ba6b193341"}, - {file = "pywin32-308-cp39-cp39-win_amd64.whl", hash = "sha256:71b3322d949b4cc20776436a9c9ba0eeedcbc9c650daa536df63f0ff111bb920"}, + {file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"}, + {file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"}, + {file = "pywin32-310-cp310-cp310-win_arm64.whl", hash = "sha256:33babed0cf0c92a6f94cc6cc13546ab24ee13e3e800e61ed87609ab91e4c8213"}, + {file = "pywin32-310-cp311-cp311-win32.whl", hash = "sha256:1e765f9564e83011a63321bb9d27ec456a0ed90d3732c4b2e312b855365ed8bd"}, + {file = "pywin32-310-cp311-cp311-win_amd64.whl", hash = "sha256:126298077a9d7c95c53823934f000599f66ec9296b09167810eb24875f32689c"}, + {file = "pywin32-310-cp311-cp311-win_arm64.whl", hash = "sha256:19ec5fc9b1d51c4350be7bb00760ffce46e6c95eaf2f0b2f1150657b1a43c582"}, + {file = "pywin32-310-cp312-cp312-win32.whl", hash = "sha256:8a75a5cc3893e83a108c05d82198880704c44bbaee4d06e442e471d3c9ea4f3d"}, + {file = "pywin32-310-cp312-cp312-win_amd64.whl", hash = "sha256:bf5c397c9a9a19a6f62f3fb821fbf36cac08f03770056711f765ec1503972060"}, + {file = "pywin32-310-cp312-cp312-win_arm64.whl", hash = "sha256:2349cc906eae872d0663d4d6290d13b90621eaf78964bb1578632ff20e152966"}, + {file = "pywin32-310-cp313-cp313-win32.whl", hash = "sha256:5d241a659c496ada3253cd01cfaa779b048e90ce4b2b38cd44168ad555ce74ab"}, + {file = "pywin32-310-cp313-cp313-win_amd64.whl", hash = "sha256:667827eb3a90208ddbdcc9e860c81bde63a135710e21e4cb3348968e4bd5249e"}, + {file = "pywin32-310-cp313-cp313-win_arm64.whl", hash = "sha256:e308f831de771482b7cf692a1f308f8fca701b2d8f9dde6cc440c7da17e47b33"}, + {file = "pywin32-310-cp38-cp38-win32.whl", hash = "sha256:0867beb8addefa2e3979d4084352e4ac6e991ca45373390775f7084cc0209b9c"}, + {file = "pywin32-310-cp38-cp38-win_amd64.whl", hash = "sha256:30f0a9b3138fb5e07eb4973b7077e1883f558e40c578c6925acc7a94c34eaa36"}, + {file = "pywin32-310-cp39-cp39-win32.whl", hash = "sha256:851c8d927af0d879221e616ae1f66145253537bbdd321a77e8ef701b443a9a1a"}, + {file = "pywin32-310-cp39-cp39-win_amd64.whl", hash = "sha256:96867217335559ac619f00ad70e513c0fcf84b8a3af9fc2bba3b59b97da70475"}, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +description = "YAML parser and emitter for Python" +optional = false +python-versions = ">=3.8" +files = [ + {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, + {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8824b5a04a04a047e72eea5cec3bc266db09e35de6bdfe34c9436ac5ee27d237"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c36280e6fb8385e520936c3cb3b8042851904eba0e58d277dca80a5cfed590b"}, + {file = "PyYAML-6.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ec031d5d2feb36d1d1a24380e4db6d43695f3748343d99434e6f5f9156aaa2ed"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:936d68689298c36b53b29f23c6dbb74de12b4ac12ca6cfe0e047bedceea56180"}, + {file = "PyYAML-6.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:23502f431948090f597378482b4812b0caae32c22213aecf3b55325e049a6c68"}, + {file = "PyYAML-6.0.2-cp310-cp310-win32.whl", hash = "sha256:2e99c6826ffa974fe6e27cdb5ed0021786b03fc98e5ee3c5bfe1fd5015f42b99"}, + {file = "PyYAML-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:a4d3091415f010369ae4ed1fc6b79def9416358877534caf6a0fdd2146c87a3e"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774"}, + {file = "PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317"}, + {file = "PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4"}, + {file = "PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e"}, + {file = "PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5"}, + {file = "PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab"}, + {file = "PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425"}, + {file = "PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48"}, + {file = "PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b"}, + {file = "PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4"}, + {file = "PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba"}, + {file = "PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484"}, + {file = "PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc"}, + {file = "PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652"}, + {file = "PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183"}, + {file = "PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563"}, + {file = "PyYAML-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:24471b829b3bf607e04e88d79542a9d48bb037c2267d7927a874e6c205ca7e9a"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fded462629cfa4b685c5416b949ebad6cec74af5e2d42905d41e257e0869f5"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d84a1718ee396f54f3a086ea0a66d8e552b2ab2017ef8b420e92edbc841c352d"}, + {file = "PyYAML-6.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9056c1ecd25795207ad294bcf39f2db3d845767be0ea6e6a34d856f006006083"}, + {file = "PyYAML-6.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:82d09873e40955485746739bcb8b4586983670466c23382c19cffecbf1fd8706"}, + {file = "PyYAML-6.0.2-cp38-cp38-win32.whl", hash = "sha256:43fa96a3ca0d6b1812e01ced1044a003533c47f6ee8aca31724f78e93ccc089a"}, + {file = "PyYAML-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:01179a4a8559ab5de078078f37e5c1a30d76bb88519906844fd7bdea1b7729ff"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:688ba32a1cffef67fd2e9398a2efebaea461578b0923624778664cc1c914db5d"}, + {file = "PyYAML-6.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a8786accb172bd8afb8be14490a16625cbc387036876ab6ba70912730faf8e1f"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d8e03406cac8513435335dbab54c0d385e4a49e4945d2909a581c83647ca0290"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f753120cb8181e736c57ef7636e83f31b9c0d1722c516f7e86cf15b7aa57ff12"}, + {file = "PyYAML-6.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3b1fdb9dc17f5a7677423d508ab4f243a726dea51fa5e70992e59a7411c89d19"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0b69e4ce7a131fe56b7e4d770c67429700908fc0752af059838b1cfb41960e4e"}, + {file = "PyYAML-6.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a9f8c2e67970f13b16084e04f134610fd1d374bf477b17ec1599185cf611d725"}, + {file = "PyYAML-6.0.2-cp39-cp39-win32.whl", hash = "sha256:6395c297d42274772abc367baaa79683958044e5d3835486c16da75d2a694631"}, + {file = "PyYAML-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:39693e1f8320ae4f43943590b49779ffb98acb81f788220ea932a6b6c51004d8"}, + {file = "pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e"}, ] [[package]] @@ -1586,18 +1803,18 @@ testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metad [[package]] name = "setuptools" -version = "75.8.2" +version = "78.1.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" files = [ - {file = "setuptools-75.8.2-py3-none-any.whl", hash = "sha256:558e47c15f1811c1fa7adbd0096669bf76c1d3f433f58324df69f3f5ecac4e8f"}, - {file = "setuptools-75.8.2.tar.gz", hash = "sha256:4880473a969e5f23f2a2be3646b2dfd84af9028716d398e46192f84bc36900d2"}, + {file = "setuptools-78.1.0-py3-none-any.whl", hash = "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8"}, + {file = "setuptools-78.1.0.tar.gz", hash = "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] -core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib_metadata (>=6)", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] @@ -1754,13 +1971,13 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6. [[package]] name = "typing-extensions" -version = "4.12.2" +version = "4.13.0" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" files = [ - {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, - {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, + {file = "typing_extensions-4.13.0-py3-none-any.whl", hash = "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5"}, + {file = "typing_extensions-4.13.0.tar.gz", hash = "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b"}, ] [[package]] @@ -1778,13 +1995,13 @@ test = ["codecov", "coverage", "mypy", "nptyping (>=1.3.0)", "numpy", "pycodesty [[package]] name = "tzdata" -version = "2025.1" +version = "2025.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" files = [ - {file = "tzdata-2025.1-py2.py3-none-any.whl", hash = "sha256:7e127113816800496f027041c570f50bcd464a020098a3b6b199517772303639"}, - {file = "tzdata-2025.1.tar.gz", hash = "sha256:24894909e88cdb28bd1636c6887801df64cb485bd593f2fd83ef29075a81d694"}, + {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, + {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, ] [[package]] @@ -1921,6 +2138,26 @@ files = [ [package.extras] crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] +[[package]] +name = "virtualenv" +version = "20.30.0" +description = "Virtual Python Environment builder" +optional = false +python-versions = ">=3.8" +files = [ + {file = "virtualenv-20.30.0-py3-none-any.whl", hash = "sha256:e34302959180fca3af42d1800df014b35019490b119eba981af27f2fa486e5d6"}, + {file = "virtualenv-20.30.0.tar.gz", hash = "sha256:800863162bcaa5450a6e4d721049730e7f2dae07720e0902b0e4040bd6f9ada8"}, +] + +[package.dependencies] +distlib = ">=0.3.7,<1" +filelock = ">=3.12.2,<4" +platformdirs = ">=3.9.1,<5" + +[package.extras] +docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] + [[package]] name = "wcwidth" version = "0.2.13" @@ -1956,4 +2193,4 @@ validators = "0.33.0" [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "55e7ff1c333124978a58eb149e137858e0db6121b8092938e42c4549faa5e7f6" +content-hash = "d32a1f687bc36b705e59cb7aec1062a3ddd4f8ec314c93f3a8a3cbb952cb62d3" diff --git a/pyproject.toml b/pyproject.toml index d9e4c72b..07588cda 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ tqdm = "^4.66.1" psycopg = {extras = ["binary"], version = "^3.1.17"} pgvector = "^0.2.4" -[poetry.group.dev.dependencies] +[tool.poetry.group.dev.dependencies] pre-commit = "^2.20.0" pytest = "^7.1" From 4c2e17b468f365d56502d94eb49c974275ffd8dd Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Mon, 7 Apr 2025 09:21:05 +0200 Subject: [PATCH 083/101] Use find instead of ls to search files (#234) --- tools/run_client_script.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index 3f9210aa..4be400ff 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -61,7 +61,7 @@ if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; t fi if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "search" ]]; then - SEARCH_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-search-*.json | head -n 1") + SEARCH_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "find results/ -type f -name '*-search-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-") result_files_arr+=("$SEARCH_RESULT_FILE") fi From a4eff0e518cd0aed7a53011b33042758f176b959 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Thu, 10 Apr 2025 11:20:54 +0200 Subject: [PATCH 084/101] Run benchmarks with feature flags for dev (#237) * Run benchmarks with QRANT__FEATURE_FLAGS__ALL=true for dev only * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/workflows/continuous-benchmark-2.yaml | 2 ++ .github/workflows/continuous-benchmark.yaml | 6 ++++++ .../qdrant-continuous-benchmarks/docker-compose.yaml | 2 ++ tools/run_server_container.sh | 3 ++- tools/run_server_container_with_volume.sh | 5 +++-- 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/continuous-benchmark-2.yaml b/.github/workflows/continuous-benchmark-2.yaml index 1ae63e31..d7f9dcae 100644 --- a/.github/workflows/continuous-benchmark-2.yaml +++ b/.github/workflows/continuous-benchmark-2.yaml @@ -58,10 +58,12 @@ jobs: # Benchmark the dev branch: export QDRANT_VERSION=ghcr/dev + export QDRANT__FEATURE_FLAGS__ALL=true timeout 30m bash -x tools/run_ci.sh # Benchmark the master branch: export QDRANT_VERSION=docker/master + export QDRANT__FEATURE_FLAGS__ALL=false timeout 30m bash -x tools/run_ci.sh done diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 07a5f2cf..0056b6ab 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -50,10 +50,12 @@ jobs: # Benchmark the dev branch: export QDRANT_VERSION=ghcr/dev + export QDRANT__FEATURE_FLAGS__ALL=true timeout 30m bash -x tools/run_ci.sh # Benchmark the master branch: export QDRANT_VERSION=docker/master + export QDRANT__FEATURE_FLAGS__ALL=false timeout 30m bash -x tools/run_ci.sh done @@ -140,10 +142,12 @@ jobs: # Benchmark the dev branch: export QDRANT_VERSION=ghcr/dev + export QDRANT__FEATURE_FLAGS__ALL=true timeout 30m bash -x tools/run_ci.sh # Benchmark the master branch: export QDRANT_VERSION=docker/master + export QDRANT__FEATURE_FLAGS__ALL=false timeout 30m bash -x tools/run_ci.sh set -e @@ -229,10 +233,12 @@ jobs: # Benchmark the dev branch: export QDRANT_VERSION=ghcr/dev + export QDRANT__FEATURE_FLAGS__ALL=true timeout 30m bash -x tools/run_ci.sh # Benchmark the master branch: export QDRANT_VERSION=docker/master + export QDRANT__FEATURE_FLAGS__ALL=false timeout 30m bash -x tools/run_ci.sh set -e diff --git a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml index ada808d6..83a5c900 100644 --- a/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml +++ b/engine/servers/qdrant-continuous-benchmarks/docker-compose.yaml @@ -16,3 +16,5 @@ services: resources: limits: memory: 25Gb + environment: + - QDRANT__FEATURE_FLAGS__ALL=${QDRANT__FEATURE_FLAGS__ALL:-false} diff --git a/tools/run_server_container.sh b/tools/run_server_container.sh index 79648605..249ad92a 100644 --- a/tools/run_server_container.sh +++ b/tools/run_server_container.sh @@ -16,6 +16,7 @@ SCRIPT_PATH=$(dirname "$SCRIPT") BENCH_SERVER_NAME=${SERVER_NAME:-"benchmark-server-1"} QDRANT_VERSION=${QDRANT_VERSION:-"dev"} +QDRANT__FEATURE_FLAGS__ALL=${QDRANT__FEATURE_FLAGS__ALL:-"false"} IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_public_ip.sh" "$BENCH_SERVER_NAME") @@ -34,7 +35,7 @@ if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; the CONTAINER_REGISTRY='ghcr.io' fi - DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; docker compose up -d; docker container ls -a" + DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export QDRANT__FEATURE_FLAGS__ALL=${QDRANT__FEATURE_FLAGS__ALL}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; docker compose up -d; docker container ls -a" ssh -t -o ServerAliveInterval=60 -o ServerAliveCountMax=3 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "cd ./projects/vector-db-benchmark/engine/servers/${CONTAINER_NAME} ; $DOCKER_COMPOSE" else echo "Error: unknown version ${QDRANT_VERSION}. Version name should start with 'docker/' or 'ghcr/'" diff --git a/tools/run_server_container_with_volume.sh b/tools/run_server_container_with_volume.sh index 294db760..fb1f3ade 100644 --- a/tools/run_server_container_with_volume.sh +++ b/tools/run_server_container_with_volume.sh @@ -17,6 +17,7 @@ SCRIPT_PATH=$(dirname "$SCRIPT") BENCH_SERVER_NAME=${SERVER_NAME:-"benchmark-server-1"} QDRANT_VERSION=${QDRANT_VERSION:-"dev"} +QDRANT__FEATURE_FLAGS__ALL=${QDRANT__FEATURE_FLAGS__ALL:-"false"} IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_public_ip.sh" "$BENCH_SERVER_NAME") @@ -37,11 +38,11 @@ if [[ ${QDRANT_VERSION} == docker/* ]] || [[ ${QDRANT_VERSION} == ghcr/* ]]; the if [[ "$EXECUTION_MODE" == "init" ]]; then echo "Initialize qdrant from scratch, with qdrant_storage volume" - DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true; docker volume rm -f qdrant_storage || true; docker compose up -d; docker container ls -a" + DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; export QDRANT__FEATURE_FLAGS__ALL=${QDRANT__FEATURE_FLAGS__ALL}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true; docker volume rm -f qdrant_storage || true; docker compose up -d; docker container ls -a" elif [[ "$EXECUTION_MODE" == "continue" ]]; then # suggest that volume qdrant_storage exist and start qdrant echo "Reload qdrant with existing data" - DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; sudo bash -c 'sync; echo 1 > /proc/sys/vm/drop_caches'; docker compose up -d; docker container ls -a" + DOCKER_COMPOSE="export QDRANT_VERSION=${QDRANT_VERSION}; export CONTAINER_REGISTRY=${CONTAINER_REGISTRY}; export CONTAINER_MEM_LIMIT=${CONTAINER_MEM_LIMIT}; export QDRANT__FEATURE_FLAGS__ALL=${QDRANT__FEATURE_FLAGS__ALL}; docker compose down; pkill qdrant; docker rm -f qdrant-continuous || true; docker rmi -f ${CONTAINER_REGISTRY}/qdrant/qdrant:${QDRANT_VERSION} || true ; sudo bash -c 'sync; echo 1 > /proc/sys/vm/drop_caches'; docker compose up -d; docker container ls -a" else echo "Error: unknown execution mode ${EXECUTION_MODE}. Execution mode should be 'init' or 'continue'" exit 1 From 0b5393eccef646bb8ecd5d862869afda90e2ac3e Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Thu, 10 Apr 2025 13:00:43 +0200 Subject: [PATCH 085/101] Fix fetching upload results (#239) --- tools/run_ci.sh | 4 ++-- tools/run_client_script.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 120f54aa..10a7e49c 100755 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -37,8 +37,8 @@ if [[ "$BENCHMARK_STRATEGY" == "collection-reload" ]]; then export TELEMETRY_API_RESPONSE_FILE=$(ls -t results/telemetry-api-*.json | head -n 1) else # any other strategies are considered to have search & upload results - export SEARCH_RESULTS_FILE=$(ls -t results/*-search-*.json | head -n 1) - export UPLOAD_RESULTS_FILE=$(ls -t results/*-upload-*.json | head -n 1) + export SEARCH_RESULTS_FILE=$(find results/ -type f -name '*-search-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-) + export UPLOAD_RESULTS_FILE=$(find results/ -type f -name '*-upload-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-) if [[ "$BENCHMARK_STRATEGY" == "parallel" ]]; then export PARALLEL_UPLOAD_RESULTS_FILE=$(ls -t results/parallel/*-upload-*.json | head -n 1) diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index 4be400ff..2aa2b0bf 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -56,7 +56,7 @@ result_files_arr=() result_parallel_files_arr=() if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; then - UPLOAD_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "ls -t results/*-upload-*.json | head -n 1") + UPLOAD_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "find results/ -type f -name '*-upload-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-") result_files_arr+=("$UPLOAD_RESULT_FILE") fi From 61a1bf5194889c474889f4f20298877537cd062d Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Mon, 14 Apr 2025 10:58:26 +0200 Subject: [PATCH 086/101] Ensure search in current dir only (#240) * Ensure search in current dir only * Fix --- tools/run_ci.sh | 4 ++-- tools/run_client_script.sh | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 10a7e49c..2d211a4a 100755 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -37,8 +37,8 @@ if [[ "$BENCHMARK_STRATEGY" == "collection-reload" ]]; then export TELEMETRY_API_RESPONSE_FILE=$(ls -t results/telemetry-api-*.json | head -n 1) else # any other strategies are considered to have search & upload results - export SEARCH_RESULTS_FILE=$(find results/ -type f -name '*-search-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-) - export UPLOAD_RESULTS_FILE=$(find results/ -type f -name '*-upload-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-) + export SEARCH_RESULTS_FILE=$(find results/ -maxdepth 1 -type f -name '*-search-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-) + export UPLOAD_RESULTS_FILE=$(find results/ -maxdepth 1 -type f -name '*-upload-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-) if [[ "$BENCHMARK_STRATEGY" == "parallel" ]]; then export PARALLEL_UPLOAD_RESULTS_FILE=$(ls -t results/parallel/*-upload-*.json | head -n 1) diff --git a/tools/run_client_script.sh b/tools/run_client_script.sh index 2aa2b0bf..1eb9c201 100644 --- a/tools/run_client_script.sh +++ b/tools/run_client_script.sh @@ -56,12 +56,12 @@ result_files_arr=() result_parallel_files_arr=() if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "upload" ]]; then - UPLOAD_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "find results/ -type f -name '*-upload-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-") + UPLOAD_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "find results/ -maxdepth 1 -type f -name '*-upload-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-") result_files_arr+=("$UPLOAD_RESULT_FILE") fi if [[ "$EXPERIMENT_MODE" == "full" ]] || [[ "$EXPERIMENT_MODE" == "search" ]]; then - SEARCH_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "find results/ -type f -name '*-search-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-") + SEARCH_RESULT_FILE=$(ssh -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_CLIENT}" "find results/ -maxdepth 1 -type f -name '*-search-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-") result_files_arr+=("$SEARCH_RESULT_FILE") fi From 000073b7febb0c02ec77510c9873e901fc04e787 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Mon, 14 Apr 2025 12:52:22 +0200 Subject: [PATCH 087/101] Introduce workflow input `feature_flags_all` for manual benchmarks (#241) --- .github/workflows/manual-benchmark.yaml | 5 +++++ .github/workflows/manual-compare-versions-benchmark.yaml | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/.github/workflows/manual-benchmark.yaml b/.github/workflows/manual-benchmark.yaml index b8fc0483..efba761c 100644 --- a/.github/workflows/manual-benchmark.yaml +++ b/.github/workflows/manual-benchmark.yaml @@ -13,6 +13,10 @@ on: engine_config: description: "Engine config to benchmark" default: qdrant-continuous-benchmark + feature_flags_all: + description: "Enable all feature flags (true|false, false by default)" + default: false + jobs: runManualBenchmark: @@ -32,5 +36,6 @@ jobs: export DATASETS=${{ inputs.dataset }} export ENGINE_NAME=${{ inputs.engine_config }} export POSTGRES_TABLE=benchmark_manual + export QDRANT__FEATURE_FLAGS__ALL=${{ inputs.feature_flags_all }} bash -x tools/setup_ci.sh bash -x tools/run_ci.sh diff --git a/.github/workflows/manual-compare-versions-benchmark.yaml b/.github/workflows/manual-compare-versions-benchmark.yaml index 854395f5..025a3ef4 100644 --- a/.github/workflows/manual-compare-versions-benchmark.yaml +++ b/.github/workflows/manual-compare-versions-benchmark.yaml @@ -19,6 +19,12 @@ on: engine_config: description: "Engine config to benchmark" default: qdrant-continuous-benchmark + feature_flags_all_version_1: + description: "Enable all feature flags (true|false, false by default)" + default: false + feature_flags_all_version_2: + description: "Enable all feature flags (true|false, false by default)" + default: false jobs: prepareImage1: @@ -84,6 +90,7 @@ jobs: export DATASETS=${{ inputs.dataset }} export ENGINE_NAME=${{ inputs.engine_config }} export POSTGRES_TABLE=benchmark_manual + export QDRANT__FEATURE_FLAGS__ALL=${{ inputs.feature_flags_all_version_1 }} bash -x tools/setup_ci.sh bash -x tools/run_ci.sh @@ -120,6 +127,7 @@ jobs: export DATASETS=${{ inputs.dataset }} export ENGINE_NAME=${{ inputs.engine_config }} export POSTGRES_TABLE=benchmark_manual + export QDRANT__FEATURE_FLAGS__ALL=${{ inputs.feature_flags_all_version_2 }} bash -x tools/setup_ci.sh bash -x tools/run_ci.sh From 74c756edea728ffa81e3786b30e8d0153ffcc37c Mon Sep 17 00:00:00 2001 From: tellet-q Date: Mon, 14 Apr 2025 13:17:37 +0200 Subject: [PATCH 088/101] Fix descriptions --- .github/workflows/manual-compare-versions-benchmark.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/manual-compare-versions-benchmark.yaml b/.github/workflows/manual-compare-versions-benchmark.yaml index 025a3ef4..c658b98a 100644 --- a/.github/workflows/manual-compare-versions-benchmark.yaml +++ b/.github/workflows/manual-compare-versions-benchmark.yaml @@ -8,10 +8,10 @@ on: workflow_dispatch: inputs: qdrant_version_1: - description: "Version of qdrant to benchmark (ghcr/, ghcr/my-branch, docker/v1.5.1, ghcr/dev)" + description: "Version of qdrant to benchmark (ghcr/, ghcr/my-branch, docker/v1.5.1, ghcr/dev), version 1" default: ghcr/dev qdrant_version_2: - description: "Version of qdrant to benchmark (ghcr/, ghcr/my-branch, docker/v1.5.1, ghcr/dev)" + description: "Version of qdrant to benchmark (ghcr/, ghcr/my-branch, docker/v1.5.1, ghcr/dev), version 2" default: docker/master dataset: description: "Dataset to benchmark" @@ -20,10 +20,10 @@ on: description: "Engine config to benchmark" default: qdrant-continuous-benchmark feature_flags_all_version_1: - description: "Enable all feature flags (true|false, false by default)" + description: "Enable all feature flags (true|false, false by default) for version 1" default: false feature_flags_all_version_2: - description: "Enable all feature flags (true|false, false by default)" + description: "Enable all feature flags (true|false, false by default) version 2" default: false jobs: From 1fe9d865c1bff806504cc2156d9974f857484793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Vis=C3=A9e?= Date: Mon, 14 Apr 2025 13:54:53 +0200 Subject: [PATCH 089/101] Apply suggestions from code review --- .github/workflows/manual-compare-versions-benchmark.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/manual-compare-versions-benchmark.yaml b/.github/workflows/manual-compare-versions-benchmark.yaml index c658b98a..fb1e486a 100644 --- a/.github/workflows/manual-compare-versions-benchmark.yaml +++ b/.github/workflows/manual-compare-versions-benchmark.yaml @@ -20,10 +20,10 @@ on: description: "Engine config to benchmark" default: qdrant-continuous-benchmark feature_flags_all_version_1: - description: "Enable all feature flags (true|false, false by default) for version 1" + description: "Enable all feature flags (true|false, false by default), version 1" default: false feature_flags_all_version_2: - description: "Enable all feature flags (true|false, false by default) version 2" + description: "Enable all feature flags (true|false, false by default), version 2" default: false jobs: From 799aa4f00c19a17fa3458b5268b02c440ebec1b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim=20Vis=C3=A9e?= Date: Mon, 14 Apr 2025 14:57:03 +0200 Subject: [PATCH 090/101] Use boolean input type in workflow input for toggling all feature flags (#242) --- .github/workflows/manual-benchmark.yaml | 3 ++- .github/workflows/manual-compare-versions-benchmark.yaml | 6 ++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/manual-benchmark.yaml b/.github/workflows/manual-benchmark.yaml index efba761c..19be097a 100644 --- a/.github/workflows/manual-benchmark.yaml +++ b/.github/workflows/manual-benchmark.yaml @@ -14,7 +14,8 @@ on: description: "Engine config to benchmark" default: qdrant-continuous-benchmark feature_flags_all: - description: "Enable all feature flags (true|false, false by default)" + type: boolean + description: "Enable all feature flags (false by default)" default: false diff --git a/.github/workflows/manual-compare-versions-benchmark.yaml b/.github/workflows/manual-compare-versions-benchmark.yaml index fb1e486a..ea208c20 100644 --- a/.github/workflows/manual-compare-versions-benchmark.yaml +++ b/.github/workflows/manual-compare-versions-benchmark.yaml @@ -20,10 +20,12 @@ on: description: "Engine config to benchmark" default: qdrant-continuous-benchmark feature_flags_all_version_1: - description: "Enable all feature flags (true|false, false by default), version 1" + type: boolean + description: "Enable all feature flags (false by default), version 1" default: false feature_flags_all_version_2: - description: "Enable all feature flags (true|false, false by default), version 2" + type: boolean + description: "Enable all feature flags (false by default), version 2" default: false jobs: From b0b5e52c1f06662e5e90db6b0943fc2c0202a9fe Mon Sep 17 00:00:00 2001 From: xzfc Date: Wed, 9 Apr 2025 19:48:57 +0000 Subject: [PATCH 091/101] Enable indexing while uploading --- engine/clients/qdrant/configure.py | 12 +++++------- engine/clients/qdrant/upload.py | 19 +++++++++++-------- .../configurations/qdrant-on-disk.json | 10 ++++++++-- .../configurations/qdrant-single-node.json | 12 ++++++++---- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index 50afab5a..efcf37c4 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -69,18 +69,16 @@ def recreate(self, dataset: Dataset, collection_params): if not set(payload_index_params.keys()).issubset(dataset.config.schema.keys()): raise ValueError("payload_index_params are not found in dataset schema") + optimizers_config = self.collection_params.setdefault("optimizers_config", {}) + # By default, disable index building while uploading + optimizers_config.setdefault("max_optimization_threads", 0) + self.client.recreate_collection( collection_name=QDRANT_COLLECTION_NAME, **vectors_config, **self.collection_params ) - self.client.update_collection( - collection_name=QDRANT_COLLECTION_NAME, - optimizer_config=rest.OptimizersConfigDiff( - # indexing_threshold=10000000, - max_optimization_threads=0, - ), - ) + for field_name, field_type in dataset.config.schema.items(): if field_type in ["keyword", "uuid"]: is_tenant = payload_index_params.get(field_name, {}).get( diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index d6f19c2b..b4b09f85 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -58,14 +58,17 @@ def upload_batch(cls, batch: List[Record]): @classmethod def post_upload(cls, _distance): - cls.client.update_collection( - collection_name=QDRANT_COLLECTION_NAME, - optimizer_config=OptimizersConfigDiff( - # indexing_threshold=10_000, - # Set to a high number to not apply limits, already limited by CPU budget - max_optimization_threads=100_000, - ), - ) + # If index building is disabled through the collection settings, enable it + collection = cls.client.get_collection(collection_name=QDRANT_COLLECTION_NAME) + if collection.config.optimizer_config.max_optimization_threads == 0: + cls.client.update_collection( + collection_name=QDRANT_COLLECTION_NAME, + optimizer_config=OptimizersConfigDiff( + # indexing_threshold=10_000, + # Set to a high number to not apply limits, already limited by CPU budget + max_optimization_threads=100_000, + ), + ) cls.wait_collection_green() return {} diff --git a/experiments/configurations/qdrant-on-disk.json b/experiments/configurations/qdrant-on-disk.json index 9eb60869..ee5717d2 100644 --- a/experiments/configurations/qdrant-on-disk.json +++ b/experiments/configurations/qdrant-on-disk.json @@ -17,7 +17,10 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizers_config": { "default_segment_number": 17 }, + "optimizers_config": { + "default_segment_number": 17, + "max_optimization_threads": null + }, "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": false} }, "vectors_config": { "on_disk": true }, "hnsw_config": { "on_disk": true, "m": 0, "payload_m": 16 }, @@ -36,7 +39,10 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizers_config": { "default_segment_number": 17 }, + "optimizers_config": { + "default_segment_number": 17, + "max_optimization_threads": null + }, "quantization_config": { "scalar": {"type": "int8", "quantile": 0.99, "always_ram": false} }, "vectors_config": { "on_disk": true }, "hnsw_config": { "on_disk": true, "m": 0, "payload_m": 16 }, diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index 8beb2c10..d324840e 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -29,7 +29,8 @@ "optimizers_config": { "max_segment_size": 1000000, "default_segment_number": 3, - "memmap_threshold": 10000000 + "memmap_threshold": 10000000, + "max_optimization_threads": null } }, "search_params": [ @@ -63,7 +64,8 @@ "optimizers_config": { "max_segment_size": 1000000, "default_segment_number": 3, - "memmap_threshold": 10000000 + "memmap_threshold": 10000000, + "max_optimization_threads": null } }, "search_params": [ @@ -93,7 +95,8 @@ "optimizers_config": { "max_segment_size": 1000000, "default_segment_number": 3, - "memmap_threshold": 10000000 + "memmap_threshold": 10000000, + "max_optimization_threads": null } }, "search_params": [ @@ -120,7 +123,8 @@ "optimizers_config": { "max_segment_size": 1000000, "default_segment_number": 3, - "memmap_threshold": 10000000 + "memmap_threshold": 10000000, + "max_optimization_threads": null } }, "search_params": [ From 74b6d89b15bffcc1ec9d017e56baad8cf6a38a21 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Tue, 29 Apr 2025 10:29:52 +0200 Subject: [PATCH 092/101] Reduce ci code duplication (#245) * Add gh action to send slack message * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .../actions/send-slack-msg/action.yaml | 72 ++++++++ .github/workflows/continuous-benchmark-2.yaml | 51 +----- .github/workflows/continuous-benchmark.yaml | 155 +++--------------- 3 files changed, 105 insertions(+), 173 deletions(-) create mode 100644 .github/workflows/actions/send-slack-msg/action.yaml diff --git a/.github/workflows/actions/send-slack-msg/action.yaml b/.github/workflows/actions/send-slack-msg/action.yaml new file mode 100644 index 00000000..c8af884e --- /dev/null +++ b/.github/workflows/actions/send-slack-msg/action.yaml @@ -0,0 +1,72 @@ +name: Send Notification +description: "Send a notification to Slack" +inputs: + bench_name: + description: "name of the failed job (i.e runBenchmark)" + required: true + job_status: + description: "status of the job (i.e failed)" + required: true + failed_outputs: + description: "details of the failed job" + required: false + default: "{}" + qdrant_version: + description: "version of Qdrant used in the benchmark" + required: false + default: "unknown" + engine_name: + description: "name of the engine used in the benchmark" + required: false + default: "unknown" + dataset: + description: "name of the dataset used in the benchmark" + required: false + default: "unknown" + +runs: + using: "composite" + steps: + - uses: slackapi/slack-github-action@v1.26.0 + with: + payload: | + { + "text": "CI benchmarks (${{ inputs.bench_name }}) run status: ${{ inputs.status }}", + "blocks": [ + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "CI benchmarks (${{ inputs.bench_name }}) failed because of *${{ inputs.failed_outputs }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Qdrant version: *${{ inputs.qdrant_version }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Engine: *${{ inputs.engine_name }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "Dataset: *${{ inputs.dataset }}*." + } + }, + { + "type": "section", + "text": { + "type": "mrkdwn", + "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" + } + } + ] + } diff --git a/.github/workflows/continuous-benchmark-2.yaml b/.github/workflows/continuous-benchmark-2.yaml index d7f9dcae..3ec6d6d8 100644 --- a/.github/workflows/continuous-benchmark-2.yaml +++ b/.github/workflows/continuous-benchmark-2.yaml @@ -71,51 +71,16 @@ jobs: - name: Fail job if any of the benches failed if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' run: exit 1 - - name: Send Notification + - name: Send slack message + uses: ./.github/workflows/actions/send-slack-msg if: failure() || cancelled() - uses: slackapi/slack-github-action@v1.26.0 with: - payload: | - { - "text": "CI benchmarks (runLoadTimeBenchmark) run status: ${{ job.status }}", - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "CI benchmarks (runLoadTimeBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" - } - } - ] - } + bench_name: "runLoadTimeBenchmark" + job_status: ${{ job.status }} + failed_outputs: ${{ steps.benches.outputs.failed }} + qdrant_version: ${{ steps.benches.outputs.qdrant_version }} + engine_name: ${{ steps.benches.outputs.engine_name }} + dataset: ${{ steps.benches.outputs.dataset }} env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml index 0056b6ab..f36b7745 100644 --- a/.github/workflows/continuous-benchmark.yaml +++ b/.github/workflows/continuous-benchmark.yaml @@ -63,51 +63,16 @@ jobs: - name: Fail job if any of the benches failed if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' run: exit 1 - - name: Send Notification + - name: Send slack message + uses: ./.github/workflows/actions/send-slack-msg if: failure() || cancelled() - uses: slackapi/slack-github-action@v1.26.0 with: - payload: | - { - "text": "CI benchmarks (runBenchmark) run status: ${{ job.status }}", - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "CI benchmarks (runBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" - } - } - ] - } + bench_name: "runBenchmark" + job_status: ${{ job.status }} + failed_outputs: ${{ steps.benches.outputs.failed }} + qdrant_version: ${{ steps.benches.outputs.qdrant_version }} + engine_name: ${{ steps.benches.outputs.engine_name }} + dataset: ${{ steps.benches.outputs.dataset }} env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK @@ -154,51 +119,16 @@ jobs: - name: Fail job if any of the benches failed if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' run: exit 1 - - name: Send Notification + - name: Send slack message + uses: ./.github/workflows/actions/send-slack-msg if: failure() || cancelled() - uses: slackapi/slack-github-action@v1.26.0 with: - payload: | - { - "text": "CI benchmarks (runTenantsBenchmark) run status: ${{ job.status }}", - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "CI benchmarks (runTenantsBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" - } - } - ] - } + source_name: "runTenantsBenchmark" + job_status: ${{ job.status }} + failed_outputs: ${{ steps.benches.outputs.failed }} + qdrant_version: ${{ steps.benches.outputs.qdrant_version }} + engine_name: ${{ steps.benches.outputs.engine_name }} + dataset: ${{ steps.benches.outputs.dataset }} env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK @@ -245,51 +175,16 @@ jobs: - name: Fail job if any of the benches failed if: steps.benches.outputs.failed == 'error' || steps.benches.outputs.failed == 'timeout' run: exit 1 - - name: Send Notification + - name: Send slack message + uses: ./.github/workflows/actions/send-slack-msg if: failure() || cancelled() - uses: slackapi/slack-github-action@v1.26.0 with: - payload: | - { - "text": "CI benchmarks (runParallelBenchmark) run status: ${{ job.status }}", - "blocks": [ - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "CI benchmarks (runParallelBenchmark) failed because of *${{ steps.benches.outputs.failed }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Qdrant version: *${{ steps.benches.outputs.qdrant_version }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Engine: *${{ steps.benches.outputs.engine_name }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "Dataset: *${{ steps.benches.outputs.dataset }}*." - } - }, - { - "type": "section", - "text": { - "type": "mrkdwn", - "text": "View the results <${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|here>" - } - } - ] - } + source_name: "runParallelBenchmark" + job_status: ${{ job.status }} + failed_outputs: ${{ steps.benches.outputs.failed }} + qdrant_version: ${{ steps.benches.outputs.qdrant_version }} + engine_name: ${{ steps.benches.outputs.engine_name }} + dataset: ${{ steps.benches.outputs.dataset }} env: SLACK_WEBHOOK_URL: ${{ secrets.CI_ALERTS_CHANNEL_WEBHOOK_URL }} - SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK \ No newline at end of file + SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK From ce8fe713029520ee9886a655d0329210e45551f7 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Tue, 29 Apr 2025 14:46:26 +0200 Subject: [PATCH 093/101] Add CPU stats into monitoring (#244) * Add comment line * Store cpu and telemetry cpu values for default bench --- .../manual-compare-versions-benchmark.yaml | 4 +- tools/qdrant_collect_cpu_usage.sh | 40 +++++++++++++++++++ tools/run_ci.sh | 8 +++- tools/run_remote_benchmark.sh | 4 ++ tools/upload_parallel_results_postgres.sh | 24 ++++++++++- tools/upload_results_postgres.sh | 30 +++++++++++--- 6 files changed, 101 insertions(+), 9 deletions(-) create mode 100755 tools/qdrant_collect_cpu_usage.sh diff --git a/.github/workflows/manual-compare-versions-benchmark.yaml b/.github/workflows/manual-compare-versions-benchmark.yaml index ea208c20..b4d46e60 100644 --- a/.github/workflows/manual-compare-versions-benchmark.yaml +++ b/.github/workflows/manual-compare-versions-benchmark.yaml @@ -167,6 +167,7 @@ jobs: res_p99_time=$(compare "p99_time" "${{ needs.runBenchmarkForVersion1.outputs.p99_time }}" "${{ needs.runBenchmarkForVersion2.outputs.p99_time }}") res_vm_rss_memory_usage=$(compare "vm_rss_memory_usage" "${{ needs.runBenchmarkForVersion1.outputs.vm_rss_memory_usage }}" "${{ needs.runBenchmarkForVersion2.outputs.vm_rss_memory_usage }}") res_rss_anon_memory_usage=$(compare "rss_anon_memory_usage" "${{ needs.runBenchmarkForVersion1.outputs.rss_anon_memory_usage }}" "${{ needs.runBenchmarkForVersion2.outputs.rss_anon_memory_usage }}") + res_cpu_usage=$(compare "cpu_usage" "${{ needs.runBenchmarkForVersion1.outputs.cpu }}" "${{ needs.runBenchmarkForVersion2.outputs.cpu }}") res_upload_time=$(compare "upload_time" "${{ needs.runBenchmarkForVersion1.outputs.upload_time }}" "${{ needs.runBenchmarkForVersion2.outputs.upload_time }}") res_indexing_time=$(compare "indexing_time" "${{ needs.runBenchmarkForVersion1.outputs.indexing_time }}" "${{ needs.runBenchmarkForVersion2.outputs.indexing_time }}") @@ -179,6 +180,7 @@ jobs: echo "| p95_time | ${{ needs.runBenchmarkForVersion1.outputs.p95_time }} | ${{ needs.runBenchmarkForVersion2.outputs.p95_time }} | ${res_p95_time} |" >> $GITHUB_STEP_SUMMARY echo "| p99_time | ${{ needs.runBenchmarkForVersion1.outputs.p99_time }} | ${{ needs.runBenchmarkForVersion2.outputs.p99_time }} | ${res_p99_time} |" >> $GITHUB_STEP_SUMMARY echo "| vm_rss_memory_usage | ${{ needs.runBenchmarkForVersion1.outputs.vm_rss_memory_usage }} | ${{ needs.runBenchmarkForVersion2.outputs.vm_rss_memory_usage }} | ${res_vm_rss_memory_usage} |" >> $GITHUB_STEP_SUMMARY - echo "| rss_anon_memory_usage | ${{ needs.runBenchmarkForVersion1.outputs.rss_anon_memory_usage }} | ${{ needs.runBenchmarkForVersion2.outputs.rss_anon_memory_usage }} | ${res_rss_anon_memory_usage} |" >> $GITHUB_STEP_SUMMARY + echo "| rss_anon_memory_usage | ${{ needs.runBenchmarkForVersion1.outputs.rss_anon_memory_usage }} | ${{ needs.runBenchmarkForVersion2.outputs.rss_anon_memory_usage }} | ${res_rss_anon_memory_usage} |" >> $GITHUB_STEP_SUMMARY + echo "| cpu | ${{ needs.runBenchmarkForVersion1.outputs.cpu }} | ${{ needs.runBenchmarkForVersion2.outputs.cpu }} | ${res_cpu_usage} |" >> $GITHUB_STEP_SUMMARY echo "| upload_time | ${{ needs.runBenchmarkForVersion1.outputs.upload_time }} | ${{ needs.runBenchmarkForVersion2.outputs.upload_time }} | ${res_upload_time} |" >> $GITHUB_STEP_SUMMARY echo "| indexing_time | ${{ needs.runBenchmarkForVersion1.outputs.indexing_time }} | ${{ needs.runBenchmarkForVersion2.outputs.indexing_time }} | ${res_indexing_time} |" >> $GITHUB_STEP_SUMMARY diff --git a/tools/qdrant_collect_cpu_usage.sh b/tools/qdrant_collect_cpu_usage.sh new file mode 100755 index 00000000..a68ec0ef --- /dev/null +++ b/tools/qdrant_collect_cpu_usage.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +PS4='ts=$(date "+%Y-%m-%dT%H:%M:%SZ") level=DEBUG line=$LINENO file=$BASH_SOURCE ' +set -euo pipefail + +# Examples: start or end +MODE=$1 + +CLOUD_NAME=${CLOUD_NAME:-"hetzner"} +SERVER_USERNAME=${SERVER_USERNAME:-"root"} + +SCRIPT=$(realpath "$0") +SCRIPT_PATH=$(dirname "$SCRIPT") + +BENCH_SERVER_NAME=${SERVER_NAME:-"benchmark-server-1"} + +IP_OF_THE_SERVER=$(bash "${SCRIPT_PATH}/${CLOUD_NAME}/get_public_ip.sh" "$BENCH_SERVER_NAME") + +UTIME=$(ssh -tt -o ServerAliveInterval=10 -o ServerAliveCountMax=10 "${SERVER_USERNAME}@${IP_OF_THE_SERVER}" "cat /proc/\$(pidof qdrant)/stat | awk '{print \$14}'") +# Clean up any whitespace characters +UTIME=$(echo "$UTIME" | tr -d '[:space:]') + +CURRENT_DATE=$(date +%Y-%m-%d-%H-%M-%S) + +mkdir -p results/cpu + +if [[ "$MODE" == "end" ]]; then + echo "Calculate CPU usage (seconds) over period of time" + UTIME_FILE=$(ls -t results/cpu/utime-*.txt | head -n 1) + UTIME_START=$(cat "$UTIME_FILE" | tr -d '[:space:]') + echo "$UTIME" >> "${UTIME_FILE}" + CPU=$(echo "scale=2; ($UTIME - $UTIME_START) / 100" | bc) + echo "$CPU" > "./results/cpu/cpu-usage-${CURRENT_DATE}.txt" +elif [[ "$MODE" == "start" ]]; then + echo "Store utime start value in ./results/cpu/utime-${CURRENT_DATE}.txt" + echo "$UTIME" > "./results/cpu/utime-${CURRENT_DATE}.txt" +else + echo "Unknown mode: $MODE" + exit 1 +fi diff --git a/tools/run_ci.sh b/tools/run_ci.sh index 2d211a4a..7604fbd6 100755 --- a/tools/run_ci.sh +++ b/tools/run_ci.sh @@ -24,7 +24,8 @@ trap 'handle_term' TERM # Script, that runs benchmark within the GitHub Actions CI environment -BENCHMARK_STRATEGY=${BENCHMARK_STRATEGY:-"default"} +# Possible values for BENCHMARK_STRATEGY: default, tenants, parallel and collection-reload +export BENCHMARK_STRATEGY=${BENCHMARK_STRATEGY:-"default"} SCRIPT=$(realpath "$0") SCRIPT_PATH=$(dirname "$SCRIPT") @@ -37,9 +38,14 @@ if [[ "$BENCHMARK_STRATEGY" == "collection-reload" ]]; then export TELEMETRY_API_RESPONSE_FILE=$(ls -t results/telemetry-api-*.json | head -n 1) else # any other strategies are considered to have search & upload results + export TELEMETRY_API_RESPONSE_FILE=$(ls -t results/telemetry-api-*.json | head -n 1) export SEARCH_RESULTS_FILE=$(find results/ -maxdepth 1 -type f -name '*-search-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-) export UPLOAD_RESULTS_FILE=$(find results/ -maxdepth 1 -type f -name '*-upload-*.json' -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2-) + if [[ "$BENCHMARK_STRATEGY" == "default" ]]; then + export CPU_USAGE_FILE=$(ls -t results/cpu/cpu-usage-*.txt | head -n 1) + fi + if [[ "$BENCHMARK_STRATEGY" == "parallel" ]]; then export PARALLEL_UPLOAD_RESULTS_FILE=$(ls -t results/parallel/*-upload-*.json | head -n 1) export PARALLEL_SEARCH_RESULTS_FILE=$(ls -t results/parallel/*-search-*.json | head -n 1) diff --git a/tools/run_remote_benchmark.sh b/tools/run_remote_benchmark.sh index e3f3d8ee..bee56e8d 100755 --- a/tools/run_remote_benchmark.sh +++ b/tools/run_remote_benchmark.sh @@ -44,8 +44,12 @@ case "$BENCHMARK_STRATEGY" in bash -x "${SCRIPT_PATH}/run_server_container.sh" "$SERVER_CONTAINER_NAME" + bash -x "${SCRIPT_PATH}/qdrant_collect_cpu_usage.sh" "start" + bash -x "${SCRIPT_PATH}/run_client_script.sh" + bash -x "${SCRIPT_PATH}/qdrant_collect_cpu_usage.sh" "end" + bash -x "${SCRIPT_PATH}/qdrant_collect_stats.sh" "$SERVER_CONTAINER_NAME" ;; "tenants") diff --git a/tools/upload_parallel_results_postgres.sh b/tools/upload_parallel_results_postgres.sh index 06294b3b..cd54b542 100644 --- a/tools/upload_parallel_results_postgres.sh +++ b/tools/upload_parallel_results_postgres.sh @@ -19,6 +19,8 @@ # p99_time real, # search_time real, # no_upsert_search_time real, +# cpu real, +# cpu_telemetry real, # ); PARALLEL_SEARCH_RESULTS_FILE=${PARALLEL_SEARCH_RESULTS_FILE:-""} @@ -63,6 +65,13 @@ if [[ -z "$ROOT_API_RESPONSE_FILE" ]]; then exit 1 fi +if [[ "$BENCHMARK_STRATEGY" == "default" ]]; then + if [[ -z "$CPU_USAGE_FILE" ]]; then + echo "CPU_USAGE_FILE is not set" + exit 1 + fi +fi + RPS=NULL MEAN_PRECISIONS=NULL P95_TIME=NULL @@ -71,6 +80,8 @@ UPLOAD_TIME=NULL INDEXING_TIME=NULL SEARCH_TIME=NULL NO_UPSERT_SEARCH_TIME=NULL +CPU=NULL +CPU_TELEMETRY=NULL RPS=$(jq -r '.results.rps' "$PARALLEL_SEARCH_RESULTS_FILE") MEAN_PRECISIONS=$(jq -r '.results.mean_precisions' "$PARALLEL_SEARCH_RESULTS_FILE") @@ -82,14 +93,20 @@ NO_UPSERT_SEARCH_TIME=$(jq -r '.results.total_time' "$SEARCH_RESULT_FILE") UPLOAD_TIME=$(jq -r '.results.upload_time' "$PARALLEL_UPLOAD_RESULTS_FILE") INDEXING_TIME=$(jq -r '.results.total_time' "$PARALLEL_UPLOAD_RESULTS_FILE") +if [[ "$BENCHMARK_STRATEGY" == "default" ]]; then + # Only this strategy produces cpu usage results files + CPU=$(cat "$CPU_USAGE_FILE" | tr -d '[:space:]') +fi +CPU_TELEMETRY=$(jq -r '.result.hardware.collection_data.benchmark.cpu' "$TELEMETRY_API_RESPONSE_FILE") + QDRANT_COMMIT=$(jq -r '.commit' "$ROOT_API_RESPONSE_FILE") MEASURE_TIMESTAMP=${MEASURE_TIMESTAMP:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")} docker run --name "vector-db" --rm jbergknoff/postgresql-client "postgresql://qdrant:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/postgres" -c " -INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestamp, upload_time, indexing_time, rps, mean_precisions, p95_time, p99_time, search_time, no_upsert_search_time) -VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${SEARCH_TIME}, ${NO_UPSERT_SEARCH_TIME}); +INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestamp, upload_time, indexing_time, rps, mean_precisions, p95_time, p99_time, search_time, no_upsert_search_time, cpu_telemetry, cpu) +VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${SEARCH_TIME}, ${NO_UPSERT_SEARCH_TIME}, ${CPU_TELEMETRY}, ${CPU}); " if [[ "$IS_CI_RUN" == "true" ]]; then @@ -103,4 +120,7 @@ if [[ "$IS_CI_RUN" == "true" ]]; then echo "upload_time=${UPLOAD_TIME}" >> "$GITHUB_OUTPUT" echo "indexing_time=${INDEXING_TIME}" >> "$GITHUB_OUTPUT" + + echo "cpu_telemetry=${CPU_TELEMETRY}" >> "$GITHUB_OUTPUT" + echo "cpu=${CPU}" >> "$GITHUB_OUTPUT" fi diff --git a/tools/upload_results_postgres.sh b/tools/upload_results_postgres.sh index f05e7d7a..474dcc94 100644 --- a/tools/upload_results_postgres.sh +++ b/tools/upload_results_postgres.sh @@ -18,8 +18,10 @@ # p95_time real, # p99_time real, # vm_rss_mem real, -# rss_anon_mem real -# collection_load_time_ms real +# rss_anon_mem real, +# collection_load_time_ms real, +# cpu real, +# cpu_telemetry real, # ); SEARCH_RESULTS_FILE=${SEARCH_RESULTS_FILE:-""} @@ -69,6 +71,13 @@ if [[ -z "$ROOT_API_RESPONSE_FILE" ]]; then exit 1 fi +if [[ "$BENCHMARK_STRATEGY" == "default" ]]; then + if [[ -z "$CPU_USAGE_FILE" ]]; then + echo "CPU_USAGE_FILE is not set" + exit 1 + fi +fi + COLLECTION_LOAD_TIME=NULL RPS=NULL MEAN_PRECISIONS=NULL @@ -76,8 +85,11 @@ P95_TIME=NULL P99_TIME=NULL UPLOAD_TIME=NULL INDEXING_TIME=NULL +CPU=NULL +CPU_TELEMETRY=NULL if [[ "$BENCHMARK_STRATEGY" == "collection-reload" ]]; then + # this strategy does not produce search & upload results files echo "BENCHMARK_STRATEGY is $BENCHMARK_STRATEGY, upload telemetry" COLLECTION_LOAD_TIME=$(jq -r '.result.collections.collections[] | select(.id == "benchmark") | .init_time_ms' "$TELEMETRY_API_RESPONSE_FILE") else @@ -94,14 +106,19 @@ fi VM_RSS_MEMORY_USAGE=$(cat "$VM_RSS_MEMORY_USAGE_FILE" | tr -d '[:space:]') RSS_ANON_MEMORY_USAGE=$(cat "$RSS_ANON_MEMORY_USAGE_FILE" | tr -d '[:space:]') +if [[ "$BENCHMARK_STRATEGY" == "default" ]]; then + # Only this strategy produces cpu usage results files + CPU=$(cat "$CPU_USAGE_FILE" | tr -d '[:space:]') +fi +CPU_TELEMETRY=$(jq -r '.result.hardware.collection_data.benchmark.cpu' "$TELEMETRY_API_RESPONSE_FILE") + QDRANT_COMMIT=$(jq -r '.commit' "$ROOT_API_RESPONSE_FILE") MEASURE_TIMESTAMP=${MEASURE_TIMESTAMP:-$(date -u +"%Y-%m-%dT%H:%M:%SZ")} - docker run --name "vector-db" --rm jbergknoff/postgresql-client "postgresql://qdrant:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:5432/postgres" -c " -INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestamp, upload_time, indexing_time, rps, mean_precisions, p95_time, p99_time, vm_rss_mem, rss_anon_mem, collection_load_time_ms) -VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${VM_RSS_MEMORY_USAGE}, ${RSS_ANON_MEMORY_USAGE}, ${COLLECTION_LOAD_TIME}); +INSERT INTO ${POSTGRES_TABLE} (engine, branch, commit, dataset, measure_timestamp, upload_time, indexing_time, rps, mean_precisions, p95_time, p99_time, vm_rss_mem, rss_anon_mem, collection_load_time_ms, cpu_telemetry, cpu) +VALUES ('qdrant-ci', '${QDRANT_VERSION}', '${QDRANT_COMMIT}', '${DATASETS}', '${MEASURE_TIMESTAMP}', ${UPLOAD_TIME}, ${INDEXING_TIME}, ${RPS}, ${MEAN_PRECISIONS}, ${P95_TIME}, ${P99_TIME}, ${VM_RSS_MEMORY_USAGE}, ${RSS_ANON_MEMORY_USAGE}, ${COLLECTION_LOAD_TIME}, ${CPU_TELEMETRY}, ${CPU}); " if [[ "$IS_CI_RUN" == "true" ]]; then @@ -117,4 +134,7 @@ if [[ "$IS_CI_RUN" == "true" ]]; then echo "upload_time=${UPLOAD_TIME}" >> "$GITHUB_OUTPUT" echo "indexing_time=${INDEXING_TIME}" >> "$GITHUB_OUTPUT" + + echo "cpu_telemetry=${CPU_TELEMETRY}" >> "$GITHUB_OUTPUT" + echo "cpu=${CPU}" >> "$GITHUB_OUTPUT" fi From 1ae9ca7406c3618c3c140d0ed51e0defcdb4d64e Mon Sep 17 00:00:00 2001 From: Kumar Shivendu Date: Wed, 30 Apr 2025 13:14:18 +0530 Subject: [PATCH 094/101] Improve README docs and examples (#217) --- README.md | 9 ++++++++- run.py | 7 +++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index beda23ae..bb79a7da 100644 --- a/README.md +++ b/README.md @@ -46,9 +46,16 @@ poetry install Run the benchmark: ```bash +$ poetry shell +$ python run.py --help + Usage: run.py [OPTIONS] - Example: python3 -m run --engines *-m-16-* --datasets glove-* + Examples: + + python3 run.py --engines "qdrant-rps-m-*-ef-*" --datasets "dbpedia-openai-100K-1536-angular" # Qdrant RPS mode + + python3 run.py --engines "*-m-*-ef-*" --datasets "glove-*" # All engines and their configs for glove datasets Options: --engines TEXT [default: *] diff --git a/run.py b/run.py index 518fbab6..5f112955 100644 --- a/run.py +++ b/run.py @@ -26,8 +26,11 @@ def run( skip_configure: Optional[bool] = False, ): """ - Example: - python3 run.py --engines "*-m-16-*" --engines "qdrant-*" --datasets "glove-*" + Examples: + + python3 run.py --engines "qdrant-rps-m-*-ef-*" --datasets "dbpedia-openai-100K-1536-angular" # Qdrant RPS mode + + python3 run.py --engines "*-m-*-ef-*" --datasets "glove-*" # All engines and their configs for glove datasets """ all_engines = read_engine_configs() all_datasets = read_dataset_config() From 9bb99ab780734fd76fe31652963b83511bcd8187 Mon Sep 17 00:00:00 2001 From: tellet-q <166374656+tellet-q@users.noreply.github.com> Date: Wed, 30 Apr 2025 11:30:56 +0200 Subject: [PATCH 095/101] Improve GH outputs (#246) --- .github/workflows/manual-compare-versions-benchmark.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/manual-compare-versions-benchmark.yaml b/.github/workflows/manual-compare-versions-benchmark.yaml index b4d46e60..2362f4d8 100644 --- a/.github/workflows/manual-compare-versions-benchmark.yaml +++ b/.github/workflows/manual-compare-versions-benchmark.yaml @@ -77,6 +77,8 @@ jobs: rss_anon_memory_usage: ${{ steps.bench.outputs.rss_anon_memory_usage }} upload_time: ${{ steps.bench.outputs.upload_time }} indexing_time: ${{ steps.bench.outputs.indexing_time }} + cpu: ${{ steps.bench.outputs.cpu }} + cpu_telemetry: ${{ steps.bench.outputs.cpu_telemetry }} steps: - uses: actions/checkout@v3 - uses: webfactory/ssh-agent@v0.8.0 @@ -114,6 +116,8 @@ jobs: rss_anon_memory_usage: ${{ steps.bench.outputs.rss_anon_memory_usage }} upload_time: ${{ steps.bench.outputs.upload_time }} indexing_time: ${{ steps.bench.outputs.indexing_time }} + cpu: ${{ steps.bench.outputs.cpu }} + cpu_telemetry: ${{ steps.bench.outputs.cpu_telemetry }} steps: - uses: actions/checkout@v3 - uses: webfactory/ssh-agent@v0.8.0 @@ -168,6 +172,7 @@ jobs: res_vm_rss_memory_usage=$(compare "vm_rss_memory_usage" "${{ needs.runBenchmarkForVersion1.outputs.vm_rss_memory_usage }}" "${{ needs.runBenchmarkForVersion2.outputs.vm_rss_memory_usage }}") res_rss_anon_memory_usage=$(compare "rss_anon_memory_usage" "${{ needs.runBenchmarkForVersion1.outputs.rss_anon_memory_usage }}" "${{ needs.runBenchmarkForVersion2.outputs.rss_anon_memory_usage }}") res_cpu_usage=$(compare "cpu_usage" "${{ needs.runBenchmarkForVersion1.outputs.cpu }}" "${{ needs.runBenchmarkForVersion2.outputs.cpu }}") + res_cpu_telemetry=$(compare "cpu_telemetry" "${{ needs.runBenchmarkForVersion1.outputs.cpu_telemetry }}" "${{ needs.runBenchmarkForVersion2.outputs.cpu_telemetry }}") res_upload_time=$(compare "upload_time" "${{ needs.runBenchmarkForVersion1.outputs.upload_time }}" "${{ needs.runBenchmarkForVersion2.outputs.upload_time }}") res_indexing_time=$(compare "indexing_time" "${{ needs.runBenchmarkForVersion1.outputs.indexing_time }}" "${{ needs.runBenchmarkForVersion2.outputs.indexing_time }}") @@ -182,5 +187,6 @@ jobs: echo "| vm_rss_memory_usage | ${{ needs.runBenchmarkForVersion1.outputs.vm_rss_memory_usage }} | ${{ needs.runBenchmarkForVersion2.outputs.vm_rss_memory_usage }} | ${res_vm_rss_memory_usage} |" >> $GITHUB_STEP_SUMMARY echo "| rss_anon_memory_usage | ${{ needs.runBenchmarkForVersion1.outputs.rss_anon_memory_usage }} | ${{ needs.runBenchmarkForVersion2.outputs.rss_anon_memory_usage }} | ${res_rss_anon_memory_usage} |" >> $GITHUB_STEP_SUMMARY echo "| cpu | ${{ needs.runBenchmarkForVersion1.outputs.cpu }} | ${{ needs.runBenchmarkForVersion2.outputs.cpu }} | ${res_cpu_usage} |" >> $GITHUB_STEP_SUMMARY + echo "| cpu_telemetry | ${{ needs.runBenchmarkForVersion1.outputs.cpu_telemetry }} | ${{ needs.runBenchmarkForVersion2.outputs.cpu_telemetry }} | ${res_cpu_telemetry} |" >> $GITHUB_STEP_SUMMARY echo "| upload_time | ${{ needs.runBenchmarkForVersion1.outputs.upload_time }} | ${{ needs.runBenchmarkForVersion2.outputs.upload_time }} | ${res_upload_time} |" >> $GITHUB_STEP_SUMMARY echo "| indexing_time | ${{ needs.runBenchmarkForVersion1.outputs.indexing_time }} | ${{ needs.runBenchmarkForVersion2.outputs.indexing_time }} | ${res_indexing_time} |" >> $GITHUB_STEP_SUMMARY From fec61b5e6de787c7dce0c56788c0fe467a976204 Mon Sep 17 00:00:00 2001 From: generall Date: Sun, 4 May 2025 18:31:23 +0200 Subject: [PATCH 096/101] add changes for running cohere wiki benchmark --- datasets/datasets.json | 8 ++++++++ engine/clients/qdrant/config.py | 1 + engine/clients/qdrant/configure.py | 4 ++-- engine/clients/qdrant/search.py | 5 +++-- engine/clients/qdrant/upload.py | 4 ++-- .../configurations/qdrant-single-node.json | 20 ++++++++++++++++++- 6 files changed, 35 insertions(+), 7 deletions(-) diff --git a/datasets/datasets.json b/datasets/datasets.json index 1eafda14..66a1d0cb 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -354,5 +354,13 @@ "type": "tar", "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_keywords_1m_vocab_10_no_filters.tgz", "path": "random-100-match-kw-small-vocab/random_keywords_1m_vocab_10_no_filters" + }, + { + "name": "cohere-wiki-50m-test-only", + "vector_size": 768, + "distance": "cosine", + "type": "tar", + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/cohere-wiki-50m-test-only.tgz", + "path": "cohere-wiki-50m/cohere_wiki_50m" } ] diff --git a/engine/clients/qdrant/config.py b/engine/clients/qdrant/config.py index 31d34007..164613d6 100644 --- a/engine/clients/qdrant/config.py +++ b/engine/clients/qdrant/config.py @@ -1,3 +1,4 @@ import os QDRANT_COLLECTION_NAME = os.getenv("QDRANT_COLLECTION_NAME", "benchmark") +QDRANT_API_KEY = os.getenv("QDRANT_API_KEY", None) diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index efcf37c4..de716ff9 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -4,7 +4,7 @@ from benchmark.dataset import Dataset from engine.base_client.configure import BaseConfigurator from engine.base_client.distances import Distance -from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME +from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME, QDRANT_API_KEY class QdrantConfigurator(BaseConfigurator): @@ -32,7 +32,7 @@ class QdrantConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - self.client = QdrantClient(host=host, **connection_params) + self.client = QdrantClient(url=host, api_key=QDRANT_API_KEY, **connection_params) def clean(self): self.client.delete_collection(collection_name=QDRANT_COLLECTION_NAME) diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index 3638c65b..33b47812 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -8,7 +8,7 @@ from dataset_reader.base_reader import Query from engine.base_client.search import BaseSearcher -from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME +from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME, QDRANT_API_KEY from engine.clients.qdrant.parser import QdrantConditionParser @@ -22,8 +22,9 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic os.environ["GRPC_ENABLE_FORK_SUPPORT"] = "true" os.environ["GRPC_POLL_STRATEGY"] = "epoll,poll" cls.client: QdrantClient = QdrantClient( - host, + url=host, prefer_grpc=True, + api_key=QDRANT_API_KEY, limits=httpx.Limits(max_connections=None, max_keepalive_connections=0), **connection_params, ) diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index b4b09f85..18dcedbb 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -13,7 +13,7 @@ from dataset_reader.base_reader import Record from engine.base_client.upload import BaseUploader -from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME +from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME, QDRANT_API_KEY class QdrantUploader(BaseUploader): @@ -24,7 +24,7 @@ class QdrantUploader(BaseUploader): def init_client(cls, host, distance, connection_params, upload_params): os.environ["GRPC_ENABLE_FORK_SUPPORT"] = "true" os.environ["GRPC_POLL_STRATEGY"] = "epoll,poll" - cls.client = QdrantClient(host=host, prefer_grpc=True, **connection_params) + cls.client = QdrantClient(url=host, prefer_grpc=True, api_key=QDRANT_API_KEY, **connection_params) cls.upload_params = upload_params @classmethod diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index d324840e..d0d6538a 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -39,7 +39,25 @@ "config": { "hnsw_ef": 256, "quantization": { - "oversampling": 2.0 + "oversampling": 2.0, + "rescore": true + } + } + } + ], + "upload_params": { "parallel": 16, "batch_size": 1024 } + }, + { + "name": "qdrant-rescore-only", + "engine": "qdrant", + "connection_params": { "timeout": 30 }, + "search_params": [ + { + "parallel": 8, + "config": { + "hnsw_ef": 128, + "quantization": { + "rescore": true } } } From fe35b857230f54f06b49c4ed08879a556d8cd435 Mon Sep 17 00:00:00 2001 From: generall Date: Mon, 5 May 2025 00:56:09 +0200 Subject: [PATCH 097/101] rescore with prefetch option --- engine/clients/qdrant/search.py | 17 ++++++++++++++--- .../configurations/qdrant-single-node.json | 10 +++++++++- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index 33b47812..b6b00908 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -4,7 +4,7 @@ import httpx from qdrant_client import QdrantClient from qdrant_client._pydantic_compat import construct -from qdrant_client.http import models as rest +from qdrant_client import models from dataset_reader.base_reader import Query from engine.base_client.search import BaseSearcher @@ -37,24 +37,35 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic @classmethod def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: + # Can query only one till we introduce re-ranking in the benchmarks if query.sparse_vector is None: query_vector = query.vector else: query_vector = construct( - rest.SparseVector, + models.SparseVector, indices=query.sparse_vector.indices, values=query.sparse_vector.values, ) + + prefetch = cls.search_params.get("prefetch") + + if prefetch: + prefetch = models.Prefetch( + **prefetch, + query=query_vector, + ) + try: res = cls.client.query_points( using="sparse" if query.sparse_vector else None, collection_name=QDRANT_COLLECTION_NAME, + prefetch=prefetch, query=query_vector, query_filter=cls.parser.parse(query.meta_conditions), limit=top, - search_params=rest.SearchParams(**cls.search_params.get("config", {})), + search_params=models.SearchParams(**cls.search_params.get("config", {})), with_payload=cls.search_params.get("with_payload", False), ) except Exception as ex: diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index d0d6538a..045c8917 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -55,10 +55,18 @@ { "parallel": 8, "config": { - "hnsw_ef": 128, "quantization": { "rescore": true } + }, + "prefetch": { + "limit": 400, + "params": { + "hnsw_ef": 128, + "quantization": { + "rescore": false + } + } } } ], From 4848c224fb3b7e15c493352dee2b30ef6695578e Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Sun, 4 May 2025 22:57:31 +0000 Subject: [PATCH 098/101] upd deps --- poetry.lock | 1383 ++++++++++++++++++++++++++++++++++++++++-------- pyproject.toml | 2 +- 2 files changed, 1153 insertions(+), 232 deletions(-) diff --git a/poetry.lock b/poetry.lock index 65267b4f..1726ec93 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 2.1.3 and should not be changed by hand. [[package]] name = "annotated-types" @@ -6,6 +6,7 @@ version = "0.7.0" description = "Reusable constraint types to use with typing.Annotated" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53"}, {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, @@ -20,6 +21,8 @@ version = "4.5.2" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "anyio-4.5.2-py3-none-any.whl", hash = "sha256:c011ee36bc1e8ba40e5a81cb9df91925c218fe9b778554e0b56a21e1b5d4716f"}, {file = "anyio-4.5.2.tar.gz", hash = "sha256:23009af4ed04ce05991845451e11ef02fc7c5ed29179ac9a420e5ad0ac7ddc5b"}, @@ -33,7 +36,31 @@ typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} [package.extras] doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21.0b1) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\""] +trio = ["trio (>=0.26.1)"] + +[[package]] +name = "anyio" +version = "4.9.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "anyio-4.9.0-py3-none-any.whl", hash = "sha256:9f76d541cad6e36af7beb62e978876f3b41e3e04f2c1fbf0884604c0a9c4d93c"}, + {file = "anyio-4.9.0.tar.gz", hash = "sha256:673c0c244e15788651a4ff38710fea9675823028a6f08a5eda409e0c9840a028"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} + +[package.extras] +doc = ["Sphinx (>=8.2,<9.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "blockbuster (>=1.5.23)", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "trustme", "truststore (>=0.9.1) ; python_version >= \"3.10\"", "uvloop (>=0.21) ; platform_python_implementation == \"CPython\" and platform_system != \"Windows\" and python_version < \"3.14\""] trio = ["trio (>=0.26.1)"] [[package]] @@ -42,6 +69,8 @@ version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version == \"3.8\" and sys_platform == \"darwin\"" files = [ {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, @@ -53,6 +82,7 @@ version = "3.0.0" description = "Annotate AST trees with source code positions" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, @@ -68,6 +98,8 @@ version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_full_version < \"3.11.3\"" files = [ {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, @@ -79,6 +111,8 @@ version = "1.3.2" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "Authlib-1.3.2-py2.py3-none-any.whl", hash = "sha256:ede026a95e9f5cdc2d4364a52103f5405e75aa156357e831ef2bfd0bc5094dfc"}, {file = "authlib-1.3.2.tar.gz", hash = "sha256:4b16130117f9eb82aa6eec97f6dd4673c3f960ac0283ccdae2897ee4bc030ba2"}, @@ -87,12 +121,30 @@ files = [ [package.dependencies] cryptography = "*" +[[package]] +name = "authlib" +version = "1.5.2" +description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "authlib-1.5.2-py2.py3-none-any.whl", hash = "sha256:8804dd4402ac5e4a0435ac49e0b6e19e395357cfa632a3f624dcb4f6df13b4b1"}, + {file = "authlib-1.5.2.tar.gz", hash = "sha256:fe85ec7e50c5f86f1e2603518bb3b4f632985eb4a355e52256530790e326c512"}, +] + +[package.dependencies] +cryptography = "*" + [[package]] name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, @@ -104,6 +156,8 @@ version = "0.2.1" description = "Backport of the standard library zoneinfo module" optional = false python-versions = ">=3.6" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "backports.zoneinfo-0.2.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:da6013fd84a690242c310d77ddb8441a559e9cb3d3d59ebac9aca1a57b2e18bc"}, {file = "backports.zoneinfo-0.2.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:89a48c0d158a3cc3f654da4c2de1ceba85263fafb861b98b59040a5086259722"}, @@ -128,13 +182,14 @@ tzdata = ["tzdata"] [[package]] name = "certifi" -version = "2025.1.31" +version = "2025.4.26" description = "Python package for providing Mozilla's CA Bundle." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ - {file = "certifi-2025.1.31-py3-none-any.whl", hash = "sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe"}, - {file = "certifi-2025.1.31.tar.gz", hash = "sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651"}, + {file = "certifi-2025.4.26-py3-none-any.whl", hash = "sha256:30350364dfe371162649852c63336a15c70c6510c2ad5015b21c2345311805f3"}, + {file = "certifi-2025.4.26.tar.gz", hash = "sha256:0a816057ea3cdefcef70270d2c515e4506bbc954f417fa5ade2021213bb8f0c6"}, ] [[package]] @@ -143,6 +198,8 @@ version = "1.17.1" description = "Foreign Function Interface for Python calling C code." optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "platform_python_implementation != \"PyPy\"" files = [ {file = "cffi-1.17.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:df8b1c11f177bc2313ec4b2d46baec87a5f3e71fc8b45dab2ee7cae86d9aba14"}, {file = "cffi-1.17.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8f2cdc858323644ab277e9bb925ad72ae0e67f69e804f4898c070998d50b1a67"}, @@ -222,6 +279,7 @@ version = "3.4.0" description = "Validate configuration and produce human readable error messages." optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9"}, {file = "cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560"}, @@ -229,103 +287,104 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.4.1" +version = "3.4.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." optional = false python-versions = ">=3.7" -files = [ - {file = "charset_normalizer-3.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:91b36a978b5ae0ee86c394f5a54d6ef44db1de0815eb43de826d41d21e4af3de"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7461baadb4dc00fd9e0acbe254e3d7d2112e7f92ced2adc96e54ef6501c5f176"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e218488cd232553829be0664c2292d3af2eeeb94b32bea483cf79ac6a694e037"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:80ed5e856eb7f30115aaf94e4a08114ccc8813e6ed1b5efa74f9f82e8509858f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b010a7a4fd316c3c484d482922d13044979e78d1861f0e0650423144c616a46a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4532bff1b8421fd0a320463030c7520f56a79c9024a4e88f01c537316019005a"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d973f03c0cb71c5ed99037b870f2be986c3c05e63622c017ea9816881d2dd247"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3a3bd0dcd373514dcec91c411ddb9632c0d7d92aed7093b8c3bbb6d69ca74408"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d9c3cdf5390dcd29aa8056d13e8e99526cda0305acc038b96b30352aff5ff2bb"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:2bdfe3ac2e1bbe5b59a1a63721eb3b95fc9b6817ae4a46debbb4e11f6232428d"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:eab677309cdb30d047996b36d34caeda1dc91149e4fdca0b1a039b3f79d9a807"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win32.whl", hash = "sha256:c0429126cf75e16c4f0ad00ee0eae4242dc652290f940152ca8c75c3a4b6ee8f"}, - {file = "charset_normalizer-3.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:9f0b8b1c6d84c8034a44893aba5e767bf9c7a211e313a9605d9c617d7083829f"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8bfa33f4f2672964266e940dd22a195989ba31669bd84629f05fab3ef4e2d125"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:28bf57629c75e810b6ae989f03c0828d64d6b26a5e205535585f96093e405ed1"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f08ff5e948271dc7e18a35641d2f11a4cd8dfd5634f55228b691e62b37125eb3"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:234ac59ea147c59ee4da87a0c0f098e9c8d169f4dc2a159ef720f1a61bbe27cd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fd4ec41f914fa74ad1b8304bbc634b3de73d2a0889bd32076342a573e0779e00"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eea6ee1db730b3483adf394ea72f808b6e18cf3cb6454b4d86e04fa8c4327a12"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c96836c97b1238e9c9e3fe90844c947d5afbf4f4c92762679acfe19927d81d77"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4d86f7aff21ee58f26dcf5ae81a9addbd914115cdebcbb2217e4f0ed8982e146"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:09b5e6733cbd160dcc09589227187e242a30a49ca5cefa5a7edd3f9d19ed53fd"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:5777ee0881f9499ed0f71cc82cf873d9a0ca8af166dfa0af8ec4e675b7df48e6"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:237bdbe6159cff53b4f24f397d43c6336c6b0b42affbe857970cefbb620911c8"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win32.whl", hash = "sha256:8417cb1f36cc0bc7eaba8ccb0e04d55f0ee52df06df3ad55259b9a323555fc8b"}, - {file = "charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:d7f50a1f8c450f3925cb367d011448c39239bb3eb4117c36a6d354794de4ce76"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:73d94b58ec7fecbc7366247d3b0b10a21681004153238750bb67bd9012414545"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dad3e487649f498dd991eeb901125411559b22e8d7ab25d3aeb1af367df5efd7"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c30197aa96e8eed02200a83fba2657b4c3acd0f0aa4bdc9f6c1af8e8962e0757"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2369eea1ee4a7610a860d88f268eb39b95cb588acd7235e02fd5a5601773d4fa"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc2722592d8998c870fa4e290c2eec2c1569b87fe58618e67d38b4665dfa680d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffc9202a29ab3920fa812879e95a9e78b2465fd10be7fcbd042899695d75e616"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:804a4d582ba6e5b747c625bf1255e6b1507465494a40a2130978bda7b932c90b"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f55e69f030f7163dffe9fd0752b32f070566451afe180f99dbeeb81f511ad8d"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c4c3e6da02df6fa1410a7680bd3f63d4f710232d3139089536310d027950696a"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5df196eb874dae23dcfb968c83d4f8fdccb333330fe1fc278ac5ceeb101003a9"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e358e64305fe12299a08e08978f51fc21fac060dcfcddd95453eabe5b93ed0e1"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win32.whl", hash = "sha256:9b23ca7ef998bc739bf6ffc077c2116917eabcc901f88da1b9856b210ef63f35"}, - {file = "charset_normalizer-3.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:6ff8a4a60c227ad87030d76e99cd1698345d4491638dfa6673027c48b3cd395f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aabfa34badd18f1da5ec1bc2715cadc8dca465868a4e73a0173466b688f29dda"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22e14b5d70560b8dd51ec22863f370d1e595ac3d024cb8ad7d308b4cd95f8313"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8436c508b408b82d87dc5f62496973a1805cd46727c34440b0d29d8a2f50a6c9"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d074908e1aecee37a7635990b2c6d504cd4766c7bc9fc86d63f9c09af3fa11b"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:955f8851919303c92343d2f66165294848d57e9bba6cf6e3625485a70a038d11"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44ecbf16649486d4aebafeaa7ec4c9fed8b88101f4dd612dcaf65d5e815f837f"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0924e81d3d5e70f8126529951dac65c1010cdf117bb75eb02dd12339b57749dd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2967f74ad52c3b98de4c3b32e1a44e32975e008a9cd2a8cc8966d6a5218c5cb2"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c75cb2a3e389853835e84a2d8fb2b81a10645b503eca9bcb98df6b5a43eb8886"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:09b26ae6b1abf0d27570633b2b078a2a20419c99d66fb2823173d73f188ce601"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fa88b843d6e211393a37219e6a1c1df99d35e8fd90446f1118f4216e307e48cd"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win32.whl", hash = "sha256:eb8178fe3dba6450a3e024e95ac49ed3400e506fd4e9e5c32d30adda88cbd407"}, - {file = "charset_normalizer-3.4.1-cp313-cp313-win_amd64.whl", hash = "sha256:b1ac5992a838106edb89654e0aebfc24f5848ae2547d22c2c3f66454daa11971"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30bf9fd9be89ecb2360c7d94a711f00c09b976258846efe40db3d05828e8089"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97f68b8d6831127e4787ad15e6757232e14e12060bec17091b85eb1486b91d8d"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7974a0b5ecd505609e3b19742b60cee7aa2aa2fb3151bc917e6e2646d7667dcf"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc54db6c8593ef7d4b2a331b58653356cf04f67c960f584edb7c3d8c97e8f39e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:311f30128d7d333eebd7896965bfcfbd0065f1716ec92bd5638d7748eb6f936a"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:7d053096f67cd1241601111b698f5cad775f97ab25d81567d3f59219b5f1adbd"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:807f52c1f798eef6cf26beb819eeb8819b1622ddfeef9d0977a8502d4db6d534"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:dccbe65bd2f7f7ec22c4ff99ed56faa1e9f785482b9bbd7c717e26fd723a1d1e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:2fb9bd477fdea8684f78791a6de97a953c51831ee2981f8e4f583ff3b9d9687e"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:01732659ba9b5b873fc117534143e4feefecf3b2078b0a6a2e925271bb6f4cfa"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win32.whl", hash = "sha256:7a4f97a081603d2050bfaffdefa5b02a9ec823f8348a572e39032caa8404a487"}, - {file = "charset_normalizer-3.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:7b1bef6280950ee6c177b326508f86cad7ad4dff12454483b51d8b7d673a2c5d"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ecddf25bee22fe4fe3737a399d0d177d72bc22be6913acfab364b40bce1ba83c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c60ca7339acd497a55b0ea5d506b2a2612afb2826560416f6894e8b5770d4a9"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7b2d86dd06bfc2ade3312a83a5c364c7ec2e3498f8734282c6c3d4b07b346b8"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dd78cfcda14a1ef52584dbb008f7ac81c1328c0f58184bf9a84c49c605002da6"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e27f48bcd0957c6d4cb9d6fa6b61d192d0b13d5ef563e5f2ae35feafc0d179c"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:01ad647cdd609225c5350561d084b42ddf732f4eeefe6e678765636791e78b9a"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:619a609aa74ae43d90ed2e89bdd784765de0a25ca761b93e196d938b8fd1dbbd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:89149166622f4db9b4b6a449256291dc87a99ee53151c74cbd82a53c8c2f6ccd"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:7709f51f5f7c853f0fb938bcd3bc59cdfdc5203635ffd18bf354f6967ea0f824"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:345b0426edd4e18138d6528aed636de7a9ed169b4aaf9d61a8c19e39d26838ca"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0907f11d019260cdc3f94fbdb23ff9125f6b5d1039b76003b5b0ac9d6a6c9d5b"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win32.whl", hash = "sha256:ea0d8d539afa5eb2728aa1932a988a9a7af94f18582ffae4bc10b3fbdad0626e"}, - {file = "charset_normalizer-3.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:329ce159e82018d646c7ac45b01a430369d526569ec08516081727a20e9e4af4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:b97e690a2118911e39b4042088092771b4ae3fc3aa86518f84b8cf6888dbdb41"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78baa6d91634dfb69ec52a463534bc0df05dbd546209b79a3880a34487f4b84f"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1a2bc9f351a75ef49d664206d51f8e5ede9da246602dc2d2726837620ea034b2"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75832c08354f595c760a804588b9357d34ec00ba1c940c15e31e96d902093770"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0af291f4fe114be0280cdd29d533696a77b5b49cfde5467176ecab32353395c4"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0167ddc8ab6508fe81860a57dd472b2ef4060e8d378f0cc555707126830f2537"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2a75d49014d118e4198bcee5ee0a6f25856b29b12dbf7cd012791f8a6cc5c496"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:363e2f92b0f0174b2f8238240a1a30142e3db7b957a5dd5689b0e75fb717cc78"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:ab36c8eb7e454e34e60eb55ca5d241a5d18b2c6244f6827a30e451c42410b5f7"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4c0907b1928a36d5a998d72d64d8eaa7244989f7aaaf947500d3a800c83a3fd6"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:04432ad9479fa40ec0f387795ddad4437a2b50417c69fa275e212933519ff294"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win32.whl", hash = "sha256:3bed14e9c89dcb10e8f3a29f9ccac4955aebe93c71ae803af79265c9ca5644c5"}, - {file = "charset_normalizer-3.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:49402233c892a461407c512a19435d1ce275543138294f7ef013f0b63d5d3765"}, - {file = "charset_normalizer-3.4.1-py3-none-any.whl", hash = "sha256:d98b1668f06378c6dbefec3b92299716b931cd4e6061f3c875a71ced1780ab85"}, - {file = "charset_normalizer-3.4.1.tar.gz", hash = "sha256:44251f18cd68a75b56585dd00dae26183e102cd5e0f9f1466e6df5da2ed64ea3"}, +groups = ["main"] +files = [ + {file = "charset_normalizer-3.4.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7c48ed483eb946e6c04ccbe02c6b4d1d48e51944b6db70f697e089c193404941"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b2d318c11350e10662026ad0eb71bb51c7812fc8590825304ae0bdd4ac283acd"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9cbfacf36cb0ec2897ce0ebc5d08ca44213af24265bd56eca54bee7923c48fd6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18dd2e350387c87dabe711b86f83c9c78af772c748904d372ade190b5c7c9d4d"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8075c35cd58273fee266c58c0c9b670947c19df5fb98e7b66710e04ad4e9ff86"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5bf4545e3b962767e5c06fe1738f951f77d27967cb2caa64c28be7c4563e162c"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a6ab32f7210554a96cd9e33abe3ddd86732beeafc7a28e9955cdf22ffadbab0"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:b33de11b92e9f75a2b545d6e9b6f37e398d86c3e9e9653c4864eb7e89c5773ef"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8755483f3c00d6c9a77f490c17e6ab0c8729e39e6390328e42521ef175380ae6"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:68a328e5f55ec37c57f19ebb1fdc56a248db2e3e9ad769919a58672958e8f366"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:21b2899062867b0e1fde9b724f8aecb1af14f2778d69aacd1a5a1853a597a5db"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win32.whl", hash = "sha256:e8082b26888e2f8b36a042a58307d5b917ef2b1cacab921ad3323ef91901c71a"}, + {file = "charset_normalizer-3.4.2-cp310-cp310-win_amd64.whl", hash = "sha256:f69a27e45c43520f5487f27627059b64aaf160415589230992cec34c5e18a509"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:be1e352acbe3c78727a16a455126d9ff83ea2dfdcbc83148d2982305a04714c2"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa88ca0b1932e93f2d961bf3addbb2db902198dca337d88c89e1559e066e7645"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d524ba3f1581b35c03cb42beebab4a13e6cdad7b36246bd22541fa585a56cccd"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28a1005facc94196e1fb3e82a3d442a9d9110b8434fc1ded7a24a2983c9888d8"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fdb20a30fe1175ecabed17cbf7812f7b804b8a315a25f24678bcdf120a90077f"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0f5d9ed7f254402c9e7d35d2f5972c9bbea9040e99cd2861bd77dc68263277c7"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:efd387a49825780ff861998cd959767800d54f8308936b21025326de4b5a42b9"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:f0aa37f3c979cf2546b73e8222bbfa3dc07a641585340179d768068e3455e544"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:e70e990b2137b29dc5564715de1e12701815dacc1d056308e2b17e9095372a82"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8c57f84ccfc871a48a47321cfa49ae1df56cd1d965a09abe84066f6853b9c0"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6b66f92b17849b85cad91259efc341dce9c1af48e2173bf38a85c6329f1033e5"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win32.whl", hash = "sha256:daac4765328a919a805fa5e2720f3e94767abd632ae410a9062dff5412bae65a"}, + {file = "charset_normalizer-3.4.2-cp311-cp311-win_amd64.whl", hash = "sha256:e53efc7c7cee4c1e70661e2e112ca46a575f90ed9ae3fef200f2a25e954f4b28"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c29de6a1a95f24b9a1aa7aefd27d2487263f00dfd55a77719b530788f75cff7"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cddf7bd982eaa998934a91f69d182aec997c6c468898efe6679af88283b498d3"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fcbe676a55d7445b22c10967bceaaf0ee69407fbe0ece4d032b6eb8d4565982a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d41c4d287cfc69060fa91cae9683eacffad989f1a10811995fa309df656ec214"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e594135de17ab3866138f496755f302b72157d115086d100c3f19370839dd3a"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf713fe9a71ef6fd5adf7a79670135081cd4431c2943864757f0fa3a65b1fafd"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a370b3e078e418187da8c3674eddb9d983ec09445c99a3a263c2011993522981"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a955b438e62efdf7e0b7b52a64dc5c3396e2634baa62471768a64bc2adb73d5c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:7222ffd5e4de8e57e03ce2cef95a4c43c98fcb72ad86909abdfc2c17d227fc1b"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:bee093bf902e1d8fc0ac143c88902c3dfc8941f7ea1d6a8dd2bcb786d33db03d"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dedb8adb91d11846ee08bec4c8236c8549ac721c245678282dcb06b221aab59f"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win32.whl", hash = "sha256:db4c7bf0e07fc3b7d89ac2a5880a6a8062056801b83ff56d8464b70f65482b6c"}, + {file = "charset_normalizer-3.4.2-cp312-cp312-win_amd64.whl", hash = "sha256:5a9979887252a82fefd3d3ed2a8e3b937a7a809f65dcb1e068b090e165bbe99e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:926ca93accd5d36ccdabd803392ddc3e03e6d4cd1cf17deff3b989ab8e9dbcf0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eba9904b0f38a143592d9fc0e19e2df0fa2e41c3c3745554761c5f6447eedabf"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3fddb7e2c84ac87ac3a947cb4e66d143ca5863ef48e4a5ecb83bd48619e4634e"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98f862da73774290f251b9df8d11161b6cf25b599a66baf087c1ffe340e9bfd1"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c9379d65defcab82d07b2a9dfbfc2e95bc8fe0ebb1b176a3190230a3ef0e07c"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e635b87f01ebc977342e2697d05b56632f5f879a4f15955dfe8cef2448b51691"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1c95a1e2902a8b722868587c0e1184ad5c55631de5afc0eb96bc4b0d738092c0"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ef8de666d6179b009dce7bcb2ad4c4a779f113f12caf8dc77f0162c29d20490b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:32fc0341d72e0f73f80acb0a2c94216bd704f4f0bce10aedea38f30502b271ff"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:289200a18fa698949d2b39c671c2cc7a24d44096784e76614899a7ccf2574b7b"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4a476b06fbcf359ad25d34a057b7219281286ae2477cc5ff5e3f70a246971148"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win32.whl", hash = "sha256:aaeeb6a479c7667fbe1099af9617c83aaca22182d6cf8c53966491a0f1b7ffb7"}, + {file = "charset_normalizer-3.4.2-cp313-cp313-win_amd64.whl", hash = "sha256:aa6af9e7d59f9c12b33ae4e9450619cf2488e2bbe9b44030905877f0b2324980"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1cad5f45b3146325bb38d6855642f6fd609c3f7cad4dbaf75549bf3b904d3184"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2680962a4848b3c4f155dc2ee64505a9c57186d0d56b43123b17ca3de18f0fa"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:36b31da18b8890a76ec181c3cf44326bf2c48e36d393ca1b72b3f484113ea344"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f4074c5a429281bf056ddd4c5d3b740ebca4d43ffffe2ef4bf4d2d05114299da"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e36a97bee9b86ef9a1cf7bb96747eb7a15c2f22bdb5b516434b00f2a599f02"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:1b1bde144d98e446b056ef98e59c256e9294f6b74d7af6846bf5ffdafd687a7d"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_i686.whl", hash = "sha256:915f3849a011c1f593ab99092f3cecfcb4d65d8feb4a64cf1bf2d22074dc0ec4"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_ppc64le.whl", hash = "sha256:fb707f3e15060adf5b7ada797624a6c6e0138e2a26baa089df64c68ee98e040f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_s390x.whl", hash = "sha256:25a23ea5c7edc53e0f29bae2c44fcb5a1aa10591aae107f2a2b2583a9c5cbc64"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:770cab594ecf99ae64c236bc9ee3439c3f46be49796e265ce0cc8bc17b10294f"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win32.whl", hash = "sha256:6a0289e4589e8bdfef02a80478f1dfcb14f0ab696b5a00e1f4b8a14a307a3c58"}, + {file = "charset_normalizer-3.4.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6fc1f5b51fa4cecaa18f2bd7a003f3dd039dd615cd69a2afd6d3b19aed6775f2"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76af085e67e56c8816c3ccf256ebd136def2ed9654525348cfa744b6802b69eb"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e45ba65510e2647721e35323d6ef54c7974959f6081b58d4ef5d87c60c84919a"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:046595208aae0120559a67693ecc65dd75d46f7bf687f159127046628178dc45"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75d10d37a47afee94919c4fab4c22b9bc2a8bf7d4f46f87363bcf0573f3ff4f5"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6333b3aa5a12c26b2a4d4e7335a28f1475e0e5e17d69d55141ee3cab736f66d1"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e8323a9b031aa0393768b87f04b4164a40037fb2a3c11ac06a03ffecd3618027"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:24498ba8ed6c2e0b56d4acbf83f2d989720a93b41d712ebd4f4979660db4417b"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:844da2b5728b5ce0e32d863af26f32b5ce61bc4273a9c720a9f3aa9df73b1455"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:65c981bdbd3f57670af8b59777cbfae75364b483fa8a9f420f08094531d54a01"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:3c21d4fca343c805a52c0c78edc01e3477f6dd1ad7c47653241cf2a206d4fc58"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:dc7039885fa1baf9be153a0626e337aa7ec8bf96b0128605fb0d77788ddc1681"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win32.whl", hash = "sha256:8272b73e1c5603666618805fe821edba66892e2870058c94c53147602eab29c7"}, + {file = "charset_normalizer-3.4.2-cp38-cp38-win_amd64.whl", hash = "sha256:70f7172939fdf8790425ba31915bfbe8335030f05b9913d7ae00a87d4395620a"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:005fa3432484527f9732ebd315da8da8001593e2cf46a3d817669f062c3d9ed4"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e92fca20c46e9f5e1bb485887d074918b13543b1c2a1185e69bb8d17ab6236a7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50bf98d5e563b83cc29471fa114366e6806bc06bc7a25fd59641e41445327836"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:721c76e84fe669be19c5791da68232ca2e05ba5185575086e384352e2c309597"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:82d8fd25b7f4675d0c47cf95b594d4e7b158aca33b76aa63d07186e13c0e0ab7"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3daeac64d5b371dea99714f08ffc2c208522ec6b06fbc7866a450dd446f5c0f"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:dccab8d5fa1ef9bfba0590ecf4d46df048d18ffe3eec01eeb73a42e0d9e7a8ba"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:aaf27faa992bfee0264dc1f03f4c75e9fcdda66a519db6b957a3f826e285cf12"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:eb30abc20df9ab0814b5a2524f23d75dcf83cde762c161917a2b4b7b55b1e518"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:c72fbbe68c6f32f251bdc08b8611c7b3060612236e960ef848e0a517ddbe76c5"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:982bb1e8b4ffda883b3d0a521e23abcd6fd17418f6d2c4118d257a10199c0ce3"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win32.whl", hash = "sha256:43e0933a0eff183ee85833f341ec567c0980dae57c464d8a508e1b2ceb336471"}, + {file = "charset_normalizer-3.4.2-cp39-cp39-win_amd64.whl", hash = "sha256:d11b54acf878eef558599658b0ffca78138c8c3655cf4f3a4a673c437e67732e"}, + {file = "charset_normalizer-3.4.2-py3-none-any.whl", hash = "sha256:7f56930ab0abd1c45cd15be65cc741c28b1c9a34876ce8c17a2fa107810c0af0"}, + {file = "charset_normalizer-3.4.2.tar.gz", hash = "sha256:5baececa9ecba31eff645232d59845c07aa030f0c81ee70184a90d35099a0e63"}, ] [[package]] @@ -334,6 +393,7 @@ version = "8.1.8" description = "Composable command line interface toolkit" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, @@ -348,10 +408,12 @@ version = "0.4.6" description = "Cross-platform colored terminal text." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["main", "dev"] files = [ {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +markers = {main = "sys_platform == \"win32\" or platform_system == \"Windows\"", dev = "sys_platform == \"win32\""} [[package]] name = "cryptography" @@ -359,6 +421,8 @@ version = "43.0.3" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "python_version > \"3.8\" and python_version < \"3.10\"" files = [ {file = "cryptography-43.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:bf7a1932ac4176486eab36a19ed4c0492da5d97123f1406cf15e41b05e787d2e"}, {file = "cryptography-43.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63efa177ff54aec6e1c0aefaa1a241232dcd37413835a9b674b6e3f0ae2bfd3e"}, @@ -402,12 +466,74 @@ ssh = ["bcrypt (>=3.1.5)"] test = ["certifi", "cryptography-vectors (==43.0.3)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] test-randomorder = ["pytest-randomly"] +[[package]] +name = "cryptography" +version = "44.0.3" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +optional = false +python-versions = "!=3.9.0,!=3.9.1,>=3.7" +groups = ["main"] +markers = "python_version >= \"3.10\" or python_version == \"3.8\"" +files = [ + {file = "cryptography-44.0.3-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:962bc30480a08d133e631e8dfd4783ab71cc9e33d5d7c1e192f0b7c06397bb88"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffc61e8f3bf5b60346d89cd3d37231019c17a081208dfbbd6e1605ba03fa137"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58968d331425a6f9eedcee087f77fd3c927c88f55368f43ff7e0a19891f2642c"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:e28d62e59a4dbd1d22e747f57d4f00c459af22181f0b2f787ea83f5a876d7c76"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:af653022a0c25ef2e3ffb2c673a50e5a0d02fecc41608f4954176f1933b12359"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:157f1f3b8d941c2bd8f3ffee0af9b049c9665c39d3da9db2dc338feca5e98a43"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:c6cd67722619e4d55fdb42ead64ed8843d64638e9c07f4011163e46bc512cf01"}, + {file = "cryptography-44.0.3-cp37-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:b424563394c369a804ecbee9b06dfb34997f19d00b3518e39f83a5642618397d"}, + {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:c91fc8e8fd78af553f98bc7f2a1d8db977334e4eea302a4bfd75b9461c2d8904"}, + {file = "cryptography-44.0.3-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:25cd194c39fa5a0aa4169125ee27d1172097857b27109a45fadc59653ec06f44"}, + {file = "cryptography-44.0.3-cp37-abi3-win32.whl", hash = "sha256:3be3f649d91cb182c3a6bd336de8b61a0a71965bd13d1a04a0e15b39c3d5809d"}, + {file = "cryptography-44.0.3-cp37-abi3-win_amd64.whl", hash = "sha256:3883076d5c4cc56dbef0b898a74eb6992fdac29a7b9013870b34efe4ddb39a0d"}, + {file = "cryptography-44.0.3-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:5639c2b16764c6f76eedf722dbad9a0914960d3489c0cc38694ddf9464f1bb2f"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3ffef566ac88f75967d7abd852ed5f182da252d23fac11b4766da3957766759"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:192ed30fac1728f7587c6f4613c29c584abdc565d7417c13904708db10206645"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:7d5fe7195c27c32a64955740b949070f21cba664604291c298518d2e255931d2"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3f07943aa4d7dad689e3bb1638ddc4944cc5e0921e3c227486daae0e31a05e54"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb90f60e03d563ca2445099edf605c16ed1d5b15182d21831f58460c48bffb93"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:ab0b005721cc0039e885ac3503825661bd9810b15d4f374e473f8c89b7d5460c"}, + {file = "cryptography-44.0.3-cp39-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3bb0847e6363c037df8f6ede57d88eaf3410ca2267fb12275370a76f85786a6f"}, + {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:b0cc66c74c797e1db750aaa842ad5b8b78e14805a9b5d1348dc603612d3e3ff5"}, + {file = "cryptography-44.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6866df152b581f9429020320e5eb9794c8780e90f7ccb021940d7f50ee00ae0b"}, + {file = "cryptography-44.0.3-cp39-abi3-win32.whl", hash = "sha256:c138abae3a12a94c75c10499f1cbae81294a6f983b3af066390adee73f433028"}, + {file = "cryptography-44.0.3-cp39-abi3-win_amd64.whl", hash = "sha256:5d186f32e52e66994dce4f766884bcb9c68b8da62d61d9d215bfe5fb56d21334"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:cad399780053fb383dc067475135e41c9fe7d901a97dd5d9c5dfb5611afc0d7d"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:21a83f6f35b9cc656d71b5de8d519f566df01e660ac2578805ab245ffd8523f8"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fc3c9babc1e1faefd62704bb46a69f359a9819eb0292e40df3fb6e3574715cd4"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:e909df4053064a97f1e6565153ff8bb389af12c5c8d29c343308760890560aff"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:dad80b45c22e05b259e33ddd458e9e2ba099c86ccf4e88db7bbab4b747b18d06"}, + {file = "cryptography-44.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:479d92908277bed6e1a1c69b277734a7771c2b78633c224445b5c60a9f4bc1d9"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:896530bc9107b226f265effa7ef3f21270f18a2026bc09fed1ebd7b66ddf6375"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:9b4d4a5dbee05a2c390bf212e78b99434efec37b17a4bff42f50285c5c8c9647"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:02f55fb4f8b79c1221b0961488eaae21015b69b210e18c386b69de182ebb1259"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:dd3db61b8fe5be220eee484a17233287d0be6932d056cf5738225b9c05ef4fff"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:978631ec51a6bbc0b7e58f23b68a8ce9e5f09721940933e9c217068388789fe5"}, + {file = "cryptography-44.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:5d20cc348cca3a8aa7312f42ab953a56e15323800ca3ab0706b8cd452a3a056c"}, + {file = "cryptography-44.0.3.tar.gz", hash = "sha256:fe19d8bc5536a91a24a8133328880a41831b6c5df54599a8417b62fe015d3053"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=3.0.0) ; python_version >= \"3.8\""] +docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] +nox = ["nox (>=2024.4.15)", "nox[uv] (>=2024.3.2) ; python_version >= \"3.8\""] +pep8test = ["check-sdist ; python_version >= \"3.8\"", "click (>=8.0.1)", "mypy (>=1.4)", "ruff (>=0.3.6)"] +sdist = ["build (>=1.0.0)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi (>=2024)", "cryptography-vectors (==44.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] +test-randomorder = ["pytest-randomly"] + [[package]] name = "decorator" version = "5.2.1" description = "Decorators for Humans" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, @@ -419,6 +545,7 @@ version = "0.3.9" description = "Distribution utilities" optional = false python-versions = "*" +groups = ["dev"] files = [ {file = "distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87"}, {file = "distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403"}, @@ -430,6 +557,7 @@ version = "8.17.1" description = "Transport classes and utilities shared among Python Elastic client libraries" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "elastic_transport-8.17.1-py3-none-any.whl", hash = "sha256:192718f498f1d10c5e9aa8b9cf32aed405e469a7f0e9d6a8923431dbb2c59fb8"}, {file = "elastic_transport-8.17.1.tar.gz", hash = "sha256:5edef32ac864dca8e2f0a613ef63491ee8d6b8cfb52881fa7313ba9290cac6d2"}, @@ -444,21 +572,24 @@ develop = ["aiohttp", "furo", "httpx", "opentelemetry-api", "opentelemetry-sdk", [[package]] name = "elasticsearch" -version = "8.17.2" +version = "8.18.1" description = "Python client for Elasticsearch" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "elasticsearch-8.17.2-py3-none-any.whl", hash = "sha256:2d058dcddd8f2686cd431a916cdf983f9fb7d211d902834f564ab7df05ba6478"}, - {file = "elasticsearch-8.17.2.tar.gz", hash = "sha256:ff7f1db8aeefd87ceba4edce3aa4070994582e6cf029d2e67b74e66d634509db"}, + {file = "elasticsearch-8.18.1-py3-none-any.whl", hash = "sha256:1a8c8b5ec3ce5be88f96d2f898375671648e96272978bce0dee3137d9326aabb"}, + {file = "elasticsearch-8.18.1.tar.gz", hash = "sha256:998035f17a8c1fba7ae26b183dca797dcf95db86da6a7ecba56d31afc40f07c7"}, ] [package.dependencies] elastic-transport = ">=8.15.1,<9" +python-dateutil = "*" +typing-extensions = "*" [package.extras] async = ["aiohttp (>=3,<4)"] -dev = ["aiohttp", "black", "build", "coverage", "isort", "jinja2", "mapbox-vector-tile", "nox", "numpy", "orjson", "pandas", "pyarrow", "pytest", "pytest-asyncio", "pytest-cov", "python-dateutil", "pyyaml (>=5.4)", "requests (>=2,<3)", "simsimd", "twine", "unasync"] +dev = ["aiohttp", "black", "build", "coverage", "isort", "jinja2", "mapbox-vector-tile", "mypy", "nltk", "nox", "numpy", "orjson", "pandas", "pyarrow", "pyright", "pytest", "pytest-asyncio", "pytest-cov", "pytest-mock", "python-dateutil", "pyyaml (>=5.4)", "requests (>=2,<3)", "sentence-transformers", "simsimd", "tqdm", "twine", "types-python-dateutil", "types-tqdm", "unasync"] docs = ["sphinx", "sphinx-autodoc-typehints", "sphinx-rtd-theme (>=2.0)"] orjson = ["orjson (>=3)"] pyarrow = ["pyarrow (>=1)"] @@ -471,6 +602,7 @@ version = "0.5" description = "Bringing the elegance of C# EventHandler to Python" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "Events-0.5-py3-none-any.whl", hash = "sha256:a7286af378ba3e46640ac9825156c93bdba7502174dd696090fdfcd4d80a1abd"}, ] @@ -481,6 +613,8 @@ version = "1.2.2" description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" +groups = ["main", "dev"] +markers = "python_version <= \"3.10\"" files = [ {file = "exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b"}, {file = "exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc"}, @@ -495,13 +629,14 @@ version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "executing-2.2.0-py2.py3-none-any.whl", hash = "sha256:11387150cad388d62750327a53d3339fad4888b39a6fe233c3afbb54ecffd3aa"}, {file = "executing-2.2.0.tar.gz", hash = "sha256:5d108c028108fe2551d1a7b2e8b713341e2cb4fc0aa7dcf966fa4327a5226755"}, ] [package.extras] -tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich"] +tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] [[package]] name = "filelock" @@ -509,6 +644,8 @@ version = "3.16.1" description = "A platform independent file lock." optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version == \"3.8\"" files = [ {file = "filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0"}, {file = "filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435"}, @@ -517,7 +654,25 @@ files = [ [package.extras] docs = ["furo (>=2024.8.6)", "sphinx (>=8.0.2)", "sphinx-autodoc-typehints (>=2.4.1)"] testing = ["covdefaults (>=2.3)", "coverage (>=7.6.1)", "diff-cover (>=9.2)", "pytest (>=8.3.3)", "pytest-asyncio (>=0.24)", "pytest-cov (>=5)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.26.4)"] -typing = ["typing-extensions (>=4.12.2)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] + +[[package]] +name = "filelock" +version = "3.18.0" +description = "A platform independent file lock." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version > \"3.8\"" +files = [ + {file = "filelock-3.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, + {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +testing = ["covdefaults (>=2.3)", "coverage (>=7.6.10)", "diff-cover (>=9.2.1)", "pytest (>=8.3.4)", "pytest-asyncio (>=0.25.2)", "pytest-cov (>=6)", "pytest-mock (>=3.14)", "pytest-timeout (>=2.3.1)", "virtualenv (>=20.28.1)"] +typing = ["typing-extensions (>=4.12.2) ; python_version < \"3.11\""] [[package]] name = "grpcio" @@ -525,6 +680,7 @@ version = "1.67.1" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "grpcio-1.67.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:8b0341d66a57f8a3119b77ab32207072be60c9bf79760fa609c5609f2deb1f3f"}, {file = "grpcio-1.67.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:f5a27dddefe0e2357d3e617b9079b4bfdc91341a91565111a21ed6ebbc51b22d"}, @@ -592,6 +748,7 @@ version = "1.67.1" description = "Standard Health Checking Service for gRPC" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "grpcio_health_checking-1.67.1-py3-none-any.whl", hash = "sha256:93753da5062152660aef2286c9b261e07dd87124a65e4dc9fbd47d1ce966b39d"}, {file = "grpcio_health_checking-1.67.1.tar.gz", hash = "sha256:ca90fa76a6afbb4fda71d734cb9767819bba14928b91e308cffbb0c311eb941e"}, @@ -607,6 +764,7 @@ version = "1.67.1" description = "Protobuf code generator for gRPC" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "grpcio_tools-1.67.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:c701aaa51fde1f2644bd94941aa94c337adb86f25cd03cf05e37387aaea25800"}, {file = "grpcio_tools-1.67.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:6a722bba714392de2386569c40942566b83725fa5c5450b8910e3832a5379469"}, @@ -672,13 +830,14 @@ setuptools = "*" [[package]] name = "h11" -version = "0.14.0" +version = "0.16.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, + {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, + {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, ] [[package]] @@ -687,6 +846,8 @@ version = "4.1.0" description = "HTTP/2 State-Machine based protocol implementation" optional = false python-versions = ">=3.6.1" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, @@ -696,12 +857,31 @@ files = [ hpack = ">=4.0,<5" hyperframe = ">=6.0,<7" +[[package]] +name = "h2" +version = "4.2.0" +description = "Pure-Python HTTP/2 protocol implementation" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "h2-4.2.0-py3-none-any.whl", hash = "sha256:479a53ad425bb29af087f3458a61d30780bc818e4ebcf01f0b536ba916462ed0"}, + {file = "h2-4.2.0.tar.gz", hash = "sha256:c8a52129695e88b1a0578d8d2cc6842bbd79128ac685463b887ee278126ad01f"}, +] + +[package.dependencies] +hpack = ">=4.1,<5" +hyperframe = ">=6.1,<7" + [[package]] name = "h5py" version = "3.11.0" description = "Read and write HDF5 files from Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "h5py-3.11.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1625fd24ad6cfc9c1ccd44a66dac2396e7ee74940776792772819fc69f3a3731"}, {file = "h5py-3.11.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c072655ad1d5fe9ef462445d3e77a8166cbfa5e599045f8aa3c19b75315f10e5"}, @@ -729,31 +909,87 @@ files = [ [package.dependencies] numpy = ">=1.17.3" +[[package]] +name = "h5py" +version = "3.13.0" +description = "Read and write HDF5 files from Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "h5py-3.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5540daee2b236d9569c950b417f13fd112d51d78b4c43012de05774908dff3f5"}, + {file = "h5py-3.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:10894c55d46df502d82a7a4ed38f9c3fdbcb93efb42e25d275193e093071fade"}, + {file = "h5py-3.13.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb267ce4b83f9c42560e9ff4d30f60f7ae492eacf9c7ede849edf8c1b860e16b"}, + {file = "h5py-3.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2cf6a231a07c14acd504a945a6e9ec115e0007f675bde5e0de30a4dc8d86a31"}, + {file = "h5py-3.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:851ae3a8563d87a5a0dc49c2e2529c75b8842582ccaefbf84297d2cfceeacd61"}, + {file = "h5py-3.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8a8e38ef4ceb969f832cc230c0cf808c613cc47e31e768fd7b1106c55afa1cb8"}, + {file = "h5py-3.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f35640e81b03c02a88b8bf99fb6a9d3023cc52f7c627694db2f379e0028f2868"}, + {file = "h5py-3.13.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:337af114616f3656da0c83b68fcf53ecd9ce9989a700b0883a6e7c483c3235d4"}, + {file = "h5py-3.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:782ff0ac39f455f21fd1c8ebc007328f65f43d56718a89327eec76677ebf238a"}, + {file = "h5py-3.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:22ffe2a25770a2d67213a1b94f58006c14dce06933a42d2aaa0318c5868d1508"}, + {file = "h5py-3.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:477c58307b6b9a2509c59c57811afb9f598aedede24a67da808262dfa0ee37b4"}, + {file = "h5py-3.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:57c4c74f627c616f02b7aec608a8c706fe08cb5b0ba7c08555a4eb1dde20805a"}, + {file = "h5py-3.13.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:357e6dc20b101a805ccfd0024731fbaf6e8718c18c09baf3b5e4e9d198d13fca"}, + {file = "h5py-3.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6f13f9b5ce549448c01e4dfe08ea8d1772e6078799af2c1c8d09e941230a90d"}, + {file = "h5py-3.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:21daf38171753899b5905f3d82c99b0b1ec2cbbe282a037cad431feb620e62ec"}, + {file = "h5py-3.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e520ec76de00943dd017c8ea3f354fa1d2f542eac994811943a8faedf2a7d5cb"}, + {file = "h5py-3.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e79d8368cd9295045956bfb436656bea3f915beaa11d342e9f79f129f5178763"}, + {file = "h5py-3.13.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56dd172d862e850823c4af02dc4ddbc308f042b85472ffdaca67f1598dff4a57"}, + {file = "h5py-3.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be949b46b7388074c5acae017fbbe3e5ba303fd9daaa52157fdfef30bbdacadd"}, + {file = "h5py-3.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:4f97ecde7ac6513b21cd95efdfc38dc6d19f96f6ca6f2a30550e94e551458e0a"}, + {file = "h5py-3.13.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:82690e89c72b85addf4fc4d5058fb1e387b6c14eb063b0b879bf3f42c3b93c35"}, + {file = "h5py-3.13.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d571644958c5e19a61c793d8d23cd02479572da828e333498c9acc463f4a3997"}, + {file = "h5py-3.13.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:560e71220dc92dfa254b10a4dcb12d56b574d2d87e095db20466b32a93fec3f9"}, + {file = "h5py-3.13.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c10f061764d8dce0a9592ce08bfd5f243a00703325c388f1086037e5d619c5f1"}, + {file = "h5py-3.13.0-cp39-cp39-win_amd64.whl", hash = "sha256:9c82ece71ed1c2b807b6628e3933bc6eae57ea21dac207dca3470e3ceaaf437c"}, + {file = "h5py-3.13.0.tar.gz", hash = "sha256:1870e46518720023da85d0895a1960ff2ce398c5671eac3b1a41ec696b7105c3"}, +] + +[package.dependencies] +numpy = ">=1.19.3" + [[package]] name = "hpack" version = "4.0.0" description = "Pure-Python HPACK header compression" optional = false python-versions = ">=3.6.1" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, ] +[[package]] +name = "hpack" +version = "4.1.0" +description = "Pure-Python HPACK header encoding" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "hpack-4.1.0-py3-none-any.whl", hash = "sha256:157ac792668d995c657d93111f46b4535ed114f0c9c8d672271bbec7eae1b496"}, + {file = "hpack-4.1.0.tar.gz", hash = "sha256:ec5eca154f7056aa06f196a557655c5b009b382873ac8d1e66e79e87535f1dca"}, +] + [[package]] name = "httpcore" -version = "1.0.7" +version = "1.0.9" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, - {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, + {file = "httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55"}, + {file = "httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8"}, ] [package.dependencies] certifi = "*" -h11 = ">=0.13,<0.15" +h11 = ">=0.16" [package.extras] asyncio = ["anyio (>=4.0,<5.0)"] @@ -767,6 +1003,7 @@ version = "0.27.0" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, @@ -781,7 +1018,7 @@ idna = "*" sniffio = "*" [package.extras] -brotli = ["brotli", "brotlicffi"] +brotli = ["brotli ; platform_python_implementation == \"CPython\"", "brotlicffi ; platform_python_implementation != \"CPython\""] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] @@ -792,17 +1029,34 @@ version = "6.0.1" description = "HTTP/2 framing layer for Python" optional = false python-versions = ">=3.6.1" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, ] +[[package]] +name = "hyperframe" +version = "6.1.0" +description = "Pure-Python HTTP/2 framing" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "hyperframe-6.1.0-py3-none-any.whl", hash = "sha256:b03380493a519fce58ea5af42e4a42317bf9bd425596f7a0835ffce80f1a42e5"}, + {file = "hyperframe-6.1.0.tar.gz", hash = "sha256:f630908a00854a7adeabd6382b43923a4c4cd4b821fcb527e6ab9e15382a3b08"}, +] + [[package]] name = "identify" version = "2.6.1" description = "File identification library for Python" optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version == \"3.8\"" files = [ {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, @@ -811,12 +1065,29 @@ files = [ [package.extras] license = ["ukkonen"] +[[package]] +name = "identify" +version = "2.6.10" +description = "File identification library for Python" +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version > \"3.8\"" +files = [ + {file = "identify-2.6.10-py2.py3-none-any.whl", hash = "sha256:5f34248f54136beed1a7ba6a6b5c4b6cf21ff495aac7c359e1ef831ae3b8ab25"}, + {file = "identify-2.6.10.tar.gz", hash = "sha256:45e92fd704f3da71cc3880036633f48b4b7265fd4de2b57627cb157216eb7eb8"}, +] + +[package.extras] +license = ["ukkonen"] + [[package]] name = "idna" version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, @@ -831,6 +1102,7 @@ version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, @@ -842,6 +1114,7 @@ version = "0.13.13" description = "IPython-enabled pdb" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +groups = ["main"] files = [ {file = "ipdb-0.13.13-py3-none-any.whl", hash = "sha256:45529994741c4ab6d2388bfa5d7b725c2cf7fe9deffabdb8a6113aa5ed449ed4"}, {file = "ipdb-0.13.13.tar.gz", hash = "sha256:e3ac6018ef05126d442af680aad863006ec19d02290561ac88b8b1c0b0cfc726"}, @@ -858,6 +1131,8 @@ version = "8.12.3" description = "IPython: Productive Interactive Computing" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, @@ -891,12 +1166,142 @@ qtconsole = ["qtconsole"] test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"] +[[package]] +name = "ipython" +version = "8.18.1" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\" and python_version < \"3.10\"" +files = [ + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} +prompt-toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} + +[package.extras] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +kernel = ["ipykernel"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] + +[[package]] +name = "ipython" +version = "8.36.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version == \"3.10\"" +files = [ + {file = "ipython-8.36.0-py3-none-any.whl", hash = "sha256:12b913914d010dcffa2711505ec8be4bf0180742d97f1e5175e51f22086428c1"}, + {file = "ipython-8.36.0.tar.gz", hash = "sha256:24658e9fe5c5c819455043235ba59cfffded4a35936eefceceab6b192f7092ff"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt_toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack_data = "*" +traitlets = ">=5.13.0" +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} + +[package.extras] +all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli ; python_version < \"3.11\"", "typing_extensions"] +kernel = ["ipykernel"] +matplotlib = ["matplotlib"] +nbconvert = ["nbconvert"] +nbformat = ["nbformat"] +notebook = ["ipywidgets", "notebook"] +parallel = ["ipyparallel"] +qtconsole = ["qtconsole"] +test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] + +[[package]] +name = "ipython" +version = "9.2.0" +description = "IPython: Productive Interactive Computing" +optional = false +python-versions = ">=3.11" +groups = ["main"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "ipython-9.2.0-py3-none-any.whl", hash = "sha256:fef5e33c4a1ae0759e0bba5917c9db4eb8c53fee917b6a526bd973e1ca5159f6"}, + {file = "ipython-9.2.0.tar.gz", hash = "sha256:62a9373dbc12f28f9feaf4700d052195bf89806279fc8ca11f3f54017d04751b"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +decorator = "*" +ipython-pygments-lexers = "*" +jedi = ">=0.16" +matplotlib-inline = "*" +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +prompt_toolkit = ">=3.0.41,<3.1.0" +pygments = ">=2.4.0" +stack_data = "*" +traitlets = ">=5.13.0" +typing_extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} + +[package.extras] +all = ["ipython[doc,matplotlib,test,test-extra]"] +black = ["black"] +doc = ["docrepr", "exceptiongroup", "intersphinx_registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinx_toml (==0.0.4)", "typing_extensions"] +matplotlib = ["matplotlib"] +test = ["packaging", "pytest", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "ipykernel", "ipython[test]", "jupyter_ai", "matplotlib (!=3.2.0)", "nbclient", "nbformat", "numpy (>=1.23)", "pandas", "trio"] + +[[package]] +name = "ipython-pygments-lexers" +version = "1.1.1" +description = "Defines a variety of Pygments lexers for highlighting IPython code." +optional = false +python-versions = ">=3.8" +groups = ["main"] +markers = "python_version >= \"3.11\"" +files = [ + {file = "ipython_pygments_lexers-1.1.1-py3-none-any.whl", hash = "sha256:a9462224a505ade19a605f71f8fa63c2048833ce50abc86768a0d81d876dc81c"}, + {file = "ipython_pygments_lexers-1.1.1.tar.gz", hash = "sha256:09c0138009e56b6854f9535736f4171d855c8c08a563a0dcd8022f78355c7e81"}, +] + +[package.dependencies] +pygments = "*" + [[package]] name = "jedi" version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, @@ -916,6 +1321,7 @@ version = "1.6.3" description = "For serializing Python objects to JSON (dicts) and back" optional = false python-versions = ">=3.5" +groups = ["main"] files = [ {file = "jsons-1.6.3-py3-none-any.whl", hash = "sha256:f07f8919316f72a3843c7ca6cc6c900513089f10092626934d1bfe4b5cf15401"}, {file = "jsons-1.6.3.tar.gz", hash = "sha256:cd5815c7c6790ae11c70ad9978e0aa850d0d08a643a5105cc604eac8b29a30d7"}, @@ -925,7 +1331,7 @@ files = [ typish = ">=1.9.2" [package.extras] -test = ["attrs", "codecov", "coverage", "dataclasses", "pytest", "scons", "tzdata"] +test = ["attrs", "codecov", "coverage", "dataclasses ; python_version == \"3.6\"", "pytest", "scons", "tzdata ; python_version >= \"3.9\""] [[package]] name = "matplotlib-inline" @@ -933,6 +1339,7 @@ version = "0.1.7" description = "Inline Matplotlib backend for Jupyter" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, @@ -947,6 +1354,8 @@ version = "2.4.12" description = "A lightweight version of Milvus wrapped with Python." optional = false python-versions = ">=3.7" +groups = ["main"] +markers = "sys_platform != \"win32\"" files = [ {file = "milvus_lite-2.4.12-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:e8d4f7cdd5f731efd6faeee3715d280fd91a5f9b4d89312664d56401f65b1473"}, {file = "milvus_lite-2.4.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:20087663e7b4385050b7ad08f1f03404426d4c87b1ff91d5a8723eee7fd49e88"}, @@ -963,6 +1372,7 @@ version = "1.9.1" description = "Node.js virtual environment builder" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] files = [ {file = "nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9"}, {file = "nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f"}, @@ -974,6 +1384,8 @@ version = "1.24.4" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "numpy-1.24.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64"}, {file = "numpy-1.24.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1"}, @@ -1005,12 +1417,135 @@ files = [ {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, ] +[[package]] +name = "numpy" +version = "2.0.2" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\" and python_version < \"3.10\"" +files = [ + {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, + {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, + {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, + {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, + {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, + {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, + {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, + {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, + {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, + {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, +] + +[[package]] +name = "numpy" +version = "2.2.5" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.10" +groups = ["main"] +markers = "python_version >= \"3.10\"" +files = [ + {file = "numpy-2.2.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1f4a922da1729f4c40932b2af4fe84909c7a6e167e6e99f71838ce3a29f3fe26"}, + {file = "numpy-2.2.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b6f91524d31b34f4a5fee24f5bc16dcd1491b668798b6d85585d836c1e633a6a"}, + {file = "numpy-2.2.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:19f4718c9012e3baea91a7dba661dcab2451cda2550678dc30d53acb91a7290f"}, + {file = "numpy-2.2.5-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:eb7fd5b184e5d277afa9ec0ad5e4eb562ecff541e7f60e69ee69c8d59e9aeaba"}, + {file = "numpy-2.2.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6413d48a9be53e183eb06495d8e3b006ef8f87c324af68241bbe7a39e8ff54c3"}, + {file = "numpy-2.2.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7451f92eddf8503c9b8aa4fe6aa7e87fd51a29c2cfc5f7dbd72efde6c65acf57"}, + {file = "numpy-2.2.5-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0bcb1d057b7571334139129b7f941588f69ce7c4ed15a9d6162b2ea54ded700c"}, + {file = "numpy-2.2.5-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:36ab5b23915887543441efd0417e6a3baa08634308894316f446027611b53bf1"}, + {file = "numpy-2.2.5-cp310-cp310-win32.whl", hash = "sha256:422cc684f17bc963da5f59a31530b3936f57c95a29743056ef7a7903a5dbdf88"}, + {file = "numpy-2.2.5-cp310-cp310-win_amd64.whl", hash = "sha256:e4f0b035d9d0ed519c813ee23e0a733db81ec37d2e9503afbb6e54ccfdee0fa7"}, + {file = "numpy-2.2.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c42365005c7a6c42436a54d28c43fe0e01ca11eb2ac3cefe796c25a5f98e5e9b"}, + {file = "numpy-2.2.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:498815b96f67dc347e03b719ef49c772589fb74b8ee9ea2c37feae915ad6ebda"}, + {file = "numpy-2.2.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:6411f744f7f20081b1b4e7112e0f4c9c5b08f94b9f086e6f0adf3645f85d3a4d"}, + {file = "numpy-2.2.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9de6832228f617c9ef45d948ec1cd8949c482238d68b2477e6f642c33a7b0a54"}, + {file = "numpy-2.2.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:369e0d4647c17c9363244f3468f2227d557a74b6781cb62ce57cf3ef5cc7c610"}, + {file = "numpy-2.2.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:262d23f383170f99cd9191a7c85b9a50970fe9069b2f8ab5d786eca8a675d60b"}, + {file = "numpy-2.2.5-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:aa70fdbdc3b169d69e8c59e65c07a1c9351ceb438e627f0fdcd471015cd956be"}, + {file = "numpy-2.2.5-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37e32e985f03c06206582a7323ef926b4e78bdaa6915095ef08070471865b906"}, + {file = "numpy-2.2.5-cp311-cp311-win32.whl", hash = "sha256:f5045039100ed58fa817a6227a356240ea1b9a1bc141018864c306c1a16d4175"}, + {file = "numpy-2.2.5-cp311-cp311-win_amd64.whl", hash = "sha256:b13f04968b46ad705f7c8a80122a42ae8f620536ea38cf4bdd374302926424dd"}, + {file = "numpy-2.2.5-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ee461a4eaab4f165b68780a6a1af95fb23a29932be7569b9fab666c407969051"}, + {file = "numpy-2.2.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ec31367fd6a255dc8de4772bd1658c3e926d8e860a0b6e922b615e532d320ddc"}, + {file = "numpy-2.2.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:47834cde750d3c9f4e52c6ca28a7361859fcaf52695c7dc3cc1a720b8922683e"}, + {file = "numpy-2.2.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:2c1a1c6ccce4022383583a6ded7bbcda22fc635eb4eb1e0a053336425ed36dfa"}, + {file = "numpy-2.2.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d75f338f5f79ee23548b03d801d28a505198297534f62416391857ea0479571"}, + {file = "numpy-2.2.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a801fef99668f309b88640e28d261991bfad9617c27beda4a3aec4f217ea073"}, + {file = "numpy-2.2.5-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:abe38cd8381245a7f49967a6010e77dbf3680bd3627c0fe4362dd693b404c7f8"}, + {file = "numpy-2.2.5-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a0ac90e46fdb5649ab6369d1ab6104bfe5854ab19b645bf5cda0127a13034ae"}, + {file = "numpy-2.2.5-cp312-cp312-win32.whl", hash = "sha256:0cd48122a6b7eab8f06404805b1bd5856200e3ed6f8a1b9a194f9d9054631beb"}, + {file = "numpy-2.2.5-cp312-cp312-win_amd64.whl", hash = "sha256:ced69262a8278547e63409b2653b372bf4baff0870c57efa76c5703fd6543282"}, + {file = "numpy-2.2.5-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:059b51b658f4414fff78c6d7b1b4e18283ab5fa56d270ff212d5ba0c561846f4"}, + {file = "numpy-2.2.5-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:47f9ed103af0bc63182609044b0490747e03bd20a67e391192dde119bf43d52f"}, + {file = "numpy-2.2.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:261a1ef047751bb02f29dfe337230b5882b54521ca121fc7f62668133cb119c9"}, + {file = "numpy-2.2.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:4520caa3807c1ceb005d125a75e715567806fed67e315cea619d5ec6e75a4191"}, + {file = "numpy-2.2.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d14b17b9be5f9c9301f43d2e2a4886a33b53f4e6fdf9ca2f4cc60aeeee76372"}, + {file = "numpy-2.2.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba321813a00e508d5421104464510cc962a6f791aa2fca1c97b1e65027da80d"}, + {file = "numpy-2.2.5-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4cbdef3ddf777423060c6f81b5694bad2dc9675f110c4b2a60dc0181543fac7"}, + {file = "numpy-2.2.5-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:54088a5a147ab71a8e7fdfd8c3601972751ded0739c6b696ad9cb0343e21ab73"}, + {file = "numpy-2.2.5-cp313-cp313-win32.whl", hash = "sha256:c8b82a55ef86a2d8e81b63da85e55f5537d2157165be1cb2ce7cfa57b6aef38b"}, + {file = "numpy-2.2.5-cp313-cp313-win_amd64.whl", hash = "sha256:d8882a829fd779f0f43998e931c466802a77ca1ee0fe25a3abe50278616b1471"}, + {file = "numpy-2.2.5-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:e8b025c351b9f0e8b5436cf28a07fa4ac0204d67b38f01433ac7f9b870fa38c6"}, + {file = "numpy-2.2.5-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:8dfa94b6a4374e7851bbb6f35e6ded2120b752b063e6acdd3157e4d2bb922eba"}, + {file = "numpy-2.2.5-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:97c8425d4e26437e65e1d189d22dff4a079b747ff9c2788057bfb8114ce1e133"}, + {file = "numpy-2.2.5-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:352d330048c055ea6db701130abc48a21bec690a8d38f8284e00fab256dc1376"}, + {file = "numpy-2.2.5-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b4c0773b6ada798f51f0f8e30c054d32304ccc6e9c5d93d46cb26f3d385ab19"}, + {file = "numpy-2.2.5-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55f09e00d4dccd76b179c0f18a44f041e5332fd0e022886ba1c0bbf3ea4a18d0"}, + {file = "numpy-2.2.5-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:02f226baeefa68f7d579e213d0f3493496397d8f1cff5e2b222af274c86a552a"}, + {file = "numpy-2.2.5-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c26843fd58f65da9491165072da2cccc372530681de481ef670dcc8e27cfb066"}, + {file = "numpy-2.2.5-cp313-cp313t-win32.whl", hash = "sha256:1a161c2c79ab30fe4501d5a2bbfe8b162490757cf90b7f05be8b80bc02f7bb8e"}, + {file = "numpy-2.2.5-cp313-cp313t-win_amd64.whl", hash = "sha256:d403c84991b5ad291d3809bace5e85f4bbf44a04bdc9a88ed2bb1807b3360bb8"}, + {file = "numpy-2.2.5-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b4ea7e1cff6784e58fe281ce7e7f05036b3e1c89c6f922a6bfbc0a7e8768adbe"}, + {file = "numpy-2.2.5-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:d7543263084a85fbc09c704b515395398d31d6395518446237eac219eab9e55e"}, + {file = "numpy-2.2.5-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0255732338c4fdd00996c0421884ea8a3651eea555c3a56b84892b66f696eb70"}, + {file = "numpy-2.2.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:d2e3bdadaba0e040d1e7ab39db73e0afe2c74ae277f5614dad53eadbecbbb169"}, + {file = "numpy-2.2.5.tar.gz", hash = "sha256:a9c0d994680cd991b1cb772e8b297340085466a6fe964bc9d4e80f5e2f43c291"}, +] + [[package]] name = "opensearch-py" version = "2.8.0" description = "Python client for OpenSearch" optional = false python-versions = "<4,>=3.8" +groups = ["main"] files = [ {file = "opensearch_py-2.8.0-py3-none-any.whl", hash = "sha256:52c60fdb5d4dcf6cce3ee746c13b194529b0161e0f41268b98ab8f1624abe2fa"}, {file = "opensearch_py-2.8.0.tar.gz", hash = "sha256:6598df0bc7a003294edd0ba88a331e0793acbb8c910c43edf398791e3b2eccda"}, @@ -1034,13 +1569,14 @@ kerberos = ["requests_kerberos"] [[package]] name = "packaging" -version = "24.2" +version = "25.0" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ - {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, - {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, + {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] [[package]] @@ -1049,6 +1585,8 @@ version = "2.0.3" description = "Powerful data structures for data analysis, time series, and statistics" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "pandas-2.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8"}, {file = "pandas-2.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f"}, @@ -1078,11 +1616,7 @@ files = [ ] [package.dependencies] -numpy = [ - {version = ">=1.20.3", markers = "python_version < \"3.10\""}, - {version = ">=1.21.0", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, - {version = ">=1.23.2", markers = "python_version >= \"3.11\""}, -] +numpy = {version = ">=1.20.3", markers = "python_version < \"3.10\""} python-dateutil = ">=2.8.2" pytz = ">=2020.1" tzdata = ">=2022.1" @@ -1110,12 +1644,101 @@ sql-other = ["SQLAlchemy (>=1.4.16)"] test = ["hypothesis (>=6.34.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)"] xml = ["lxml (>=4.6.3)"] +[[package]] +name = "pandas" +version = "2.2.3" +description = "Powerful data structures for data analysis, time series, and statistics" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, + {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, + {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, + {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, + {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, + {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, + {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, + {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, + {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, + {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, + {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, + {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, + {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, +] +python-dateutil = ">=2.8.2" +pytz = ">=2020.1" +tzdata = ">=2022.7" + +[package.extras] +all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] +aws = ["s3fs (>=2022.11.0)"] +clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] +compression = ["zstandard (>=0.19.0)"] +computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] +consortium-standard = ["dataframe-api-compat (>=0.1.7)"] +excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] +feather = ["pyarrow (>=10.0.1)"] +fss = ["fsspec (>=2022.11.0)"] +gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] +hdf5 = ["tables (>=3.8.0)"] +html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] +mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] +output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] +parquet = ["pyarrow (>=10.0.1)"] +performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] +plot = ["matplotlib (>=3.6.3)"] +postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] +pyarrow = ["pyarrow (>=10.0.1)"] +spss = ["pyreadstat (>=1.2.0)"] +sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] +test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] +xml = ["lxml (>=4.9.2)"] + [[package]] name = "parso" version = "0.8.4" description = "A Python Parser" optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18"}, {file = "parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d"}, @@ -1131,6 +1754,8 @@ version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." optional = false python-versions = "*" +groups = ["main"] +markers = "sys_platform != \"win32\" and (python_version < \"3.10\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, @@ -1145,6 +1770,7 @@ version = "0.2.5" description = "pgvector support for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "pgvector-0.2.5-py2.py3-none-any.whl", hash = "sha256:5e5e93ec4d3c45ab1fa388729d56c602f6966296e19deee8878928c6d567e41b"}, ] @@ -1158,6 +1784,8 @@ version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" optional = false python-versions = "*" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, @@ -1169,6 +1797,8 @@ version = "4.3.6" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false python-versions = ">=3.8" +groups = ["dev"] +markers = "python_version == \"3.8\"" files = [ {file = "platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb"}, {file = "platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907"}, @@ -1179,12 +1809,31 @@ docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.0.2)", "sphinx-a test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.2)", "pytest-cov (>=5)", "pytest-mock (>=3.14)"] type = ["mypy (>=1.11.2)"] +[[package]] +name = "platformdirs" +version = "4.3.7" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +optional = false +python-versions = ">=3.9" +groups = ["dev"] +markers = "python_version > \"3.8\"" +files = [ + {file = "platformdirs-4.3.7-py3-none-any.whl", hash = "sha256:a03875334331946f13c549dbd8f4bac7a13a50a895a0eb1e8c6a8ace80d40a94"}, + {file = "platformdirs-4.3.7.tar.gz", hash = "sha256:eb437d586b6a0986388f0d6f74aa0cde27b48d0e3d66843640bfb6bdcdb6e351"}, +] + +[package.extras] +docs = ["furo (>=2024.8.6)", "proselint (>=0.14)", "sphinx (>=8.1.3)", "sphinx-autodoc-typehints (>=3)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.3.4)", "pytest-cov (>=6)", "pytest-mock (>=3.14)"] +type = ["mypy (>=1.14.1)"] + [[package]] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, @@ -1200,6 +1849,7 @@ version = "2.10.1" description = "Wraps the portalocker recipe for easy usage" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "portalocker-2.10.1-py3-none-any.whl", hash = "sha256:53a5984ebc86a025552264b459b46a2086e269b21823cb572f8f28ee759e45bf"}, {file = "portalocker-2.10.1.tar.gz", hash = "sha256:ef1bf844e878ab08aee7e40184156e1151f228f103aa5c6bd0724cc330960f8f"}, @@ -1219,6 +1869,7 @@ version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pre_commit-2.21.0-py2.py3-none-any.whl", hash = "sha256:e2f91727039fc39a92f58a588a25b87f936de6567eed4f0e673e0507edc75bad"}, {file = "pre_commit-2.21.0.tar.gz", hash = "sha256:31ef31af7e474a8d8995027fefdfcf509b5c913ff31f2015b4ec4beb26a6f658"}, @@ -1233,13 +1884,14 @@ virtualenv = ">=20.10.0" [[package]] name = "prompt-toolkit" -version = "3.0.50" +version = "3.0.51" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "prompt_toolkit-3.0.50-py3-none-any.whl", hash = "sha256:9b6427eb19e479d98acff65196a307c555eb567989e6d88ebbb1b509d9779198"}, - {file = "prompt_toolkit-3.0.50.tar.gz", hash = "sha256:544748f3860a2623ca5cd6d2795e7a14f3d0e1c3c9728359013f79877fc89bab"}, + {file = "prompt_toolkit-3.0.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"}, + {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"}, ] [package.dependencies] @@ -1251,6 +1903,7 @@ version = "5.29.4" description = "" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "protobuf-5.29.4-cp310-abi3-win32.whl", hash = "sha256:13eb236f8eb9ec34e63fc8b1d6efd2777d062fa6aaa68268fb67cf77f6839ad7"}, {file = "protobuf-5.29.4-cp310-abi3-win_amd64.whl", hash = "sha256:bcefcdf3976233f8a502d265eb65ea740c989bacc6c30a58290ed0e519eb4b8d"}, @@ -1267,101 +1920,104 @@ files = [ [[package]] name = "psycopg" -version = "3.2.6" +version = "3.2.7" description = "PostgreSQL database adapter for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "psycopg-3.2.6-py3-none-any.whl", hash = "sha256:f3ff5488525890abb0566c429146add66b329e20d6d4835662b920cbbf90ac58"}, - {file = "psycopg-3.2.6.tar.gz", hash = "sha256:16fa094efa2698f260f2af74f3710f781e4a6f226efe9d1fd0c37f384639ed8a"}, + {file = "psycopg-3.2.7-py3-none-any.whl", hash = "sha256:d39747d2d5b9658b69fa462ad21d31f1ba4a5722ad1d0cb952552bc0b4125451"}, + {file = "psycopg-3.2.7.tar.gz", hash = "sha256:9afa609c7ebf139827a38c0bf61be9c024a3ed743f56443de9d38e1efc260bf3"}, ] [package.dependencies] "backports.zoneinfo" = {version = ">=0.2.0", markers = "python_version < \"3.9\""} -psycopg-binary = {version = "3.2.6", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} +psycopg-binary = {version = "3.2.7", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} typing-extensions = {version = ">=4.6", markers = "python_version < \"3.13\""} tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] -binary = ["psycopg-binary (==3.2.6)"] -c = ["psycopg-c (==3.2.6)"] -dev = ["ast-comments (>=1.1.2)", "black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "isort-psycopg", "isort[colors] (>=6.0)", "mypy (>=1.14)", "pre-commit (>=4.0.1)", "types-setuptools (>=57.4)", "wheel (>=0.37)"] +binary = ["psycopg-binary (==3.2.7) ; implementation_name != \"pypy\""] +c = ["psycopg-c (==3.2.7) ; implementation_name != \"pypy\""] +dev = ["ast-comments (>=1.1.2)", "black (>=24.1.0)", "codespell (>=2.2)", "dnspython (>=2.1)", "flake8 (>=4.0)", "isort-psycopg", "isort[colors] (>=6.0)", "mypy (>=1.14)", "pre-commit (>=4.0.1)", "types-setuptools (>=57.4)", "types-shapely (>=2.0)", "wheel (>=0.37)"] docs = ["Sphinx (>=5.0)", "furo (==2022.6.21)", "sphinx-autobuild (>=2021.3.14)", "sphinx-autodoc-typehints (>=1.12)"] pool = ["psycopg-pool"] test = ["anyio (>=4.0)", "mypy (>=1.14)", "pproxy (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0)", "pytest-randomly (>=3.5)"] [[package]] name = "psycopg-binary" -version = "3.2.6" +version = "3.2.7" description = "PostgreSQL database adapter for Python -- C optimisation distribution" optional = false python-versions = ">=3.8" -files = [ - {file = "psycopg_binary-3.2.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1b639acb3e24243c23f75700bf6e3af7b76da92523ec7c3196a13aaf0b578453"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:1b5c359173726b38d7acbb9f73270f269591d8031d099c1a70dd3f3d22b0e8a8"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3434efe7c00f505f4c1e531519dac6c701df738ba7a1328eac81118d80019132"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bca8d9643191b13193940bbf84d51ac5a747e965c230177258fb02b8043fb7a"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:55fa40f11d37e6e5149a282a5fd7e0734ce55c623673bfba638480914fd1414c"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0690ac1061c655b1bcbe9284d07bf5276bc9c0d788a6c74aaf3b042e64984b83"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e9a4a9967ff650d2821d5fad6bec7b15f4c2072603e9fa3f89a39f351ade1fd3"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d6f2894cc7aee8a15fe591e8536911d9c015cb404432cf7bdac2797e54cb2ba8"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:05560c81312d7c2bee95a9860cd25198677f2320fb4a3527bc04e8cae7fcfb64"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4269cd23a485d6dd6eb6b10841c94551a53091cf0b1b6d5247a6a341f53f0d95"}, - {file = "psycopg_binary-3.2.6-cp310-cp310-win_amd64.whl", hash = "sha256:7942f35a6f314608720116bcd9de240110ceadffd2ac5c34f68f74a31e52e46a"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7afe181f6b3eb714362e9b6a2dc2a589bff60471a1d8639fd231a4e426e01523"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:34bb0fceba0773dc0bfb53224bb2c0b19dc97ea0a997a223615484cf02cae55c"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54120122d2779dcd307f49e1f921d757fe5dacdced27deab37f277eef0c52a5b"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:816aa556f63b2303e66ba6c8888a8b3f3e6e4e47049ec7a4d62c84ac60b091ca"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d19a0ba351eda9a59babf8c7c9d89c7bbc5b26bf096bc349b096bd0dd2482088"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6e197e01290ef818a092c877025fc28096adbb6d0743e313491a21aab31bd96"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:274794b4b29ef426e09086404446b61a146f5e756da71366c5a6d57abec31f7d"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:69845bdc0db519e1dfc27932cd3d5b1ecb3f72950af52a1987508ab0b52b3b55"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:66c3bed2caf0d1cabcb9365064de183b5209a7cbeaa131e79e68f350c9c963c2"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e3ae3201fe85c7f901349a2cf52f02ceca4cb97a5e2e2ac8b8a1c9a6eb747bed"}, - {file = "psycopg_binary-3.2.6-cp311-cp311-win_amd64.whl", hash = "sha256:58f443b4df2adb59937c96775fadf4967f93d952fbcc82394446985faec11041"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f27a46ff0497e882e8c0286e8833c785b4d1a80f23e1bf606f4c90e5f9f3ce75"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b30ee4821ded7de48b8048b14952512588e7c5477b0a5965221e1798afba61a1"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e57edf3b1f5427f39660225b01f8e7b97f5cfab132092f014bf1638bc85d81d2"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6c5172ce3e4ae7a4fd450070210f801e2ce6bc0f11d1208d29268deb0cda34de"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bcfab3804c43571a6615e559cdc4c4115785d258a4dd71a721be033f5f5f378d"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8fa1c920cce16f1205f37b20c685c58b9656b170b8b4c93629100d342d0d118e"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2e118d818101c1608c6b5ba52a6c977614d8f05aa89467501172ba4d10588e11"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:763319a8bfeca77d31512da71f5a33459b9568a7621c481c3828c62f9c38f351"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:2fbc05819560389dbece046966bc88e0f2ea77673497e274c4293b8b4c1d0703"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:5a57f99bb953b4bd6f32d0a9844664e7f6ca5ead9ba40e96635be3cd30794813"}, - {file = "psycopg_binary-3.2.6-cp312-cp312-win_amd64.whl", hash = "sha256:5de6809e19a465dcb9c269675bded46a135f2d600cd99f0735afbb21ddad2af4"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:54af3fbf871baa2eb19df96fd7dc0cbd88e628a692063c3d1ab5cdd00aa04322"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ad5da1e4636776c21eaeacdec42f25fa4612631a12f25cd9ab34ddf2c346ffb9"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7956b9ea56f79cd86eddcfbfc65ae2af1e4fe7932fa400755005d903c709370"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e2efb763188008cf2914820dcb9fb23c10fe2be0d2c97ef0fac7cec28e281d8"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b3aab3451679f1e7932270e950259ed48c3b79390022d3f660491c0e65e4838"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:849a370ac4e125f55f2ad37f928e588291a67ccf91fa33d0b1e042bb3ee1f986"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:566d4ace928419d91f1eb3227fc9ef7b41cf0ad22e93dd2c3368d693cf144408"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f1981f13b10de2f11cfa2f99a8738b35b3f0a0f3075861446894a8d3042430c0"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:36f598300b55b3c983ae8df06473ad27333d2fd9f3e2cfdb913b3a5aaa3a8bcf"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0f4699fa5fe1fffb0d6b2d14b31fd8c29b7ea7375f89d5989f002aaf21728b21"}, - {file = "psycopg_binary-3.2.6-cp313-cp313-win_amd64.whl", hash = "sha256:afe697b8b0071f497c5d4c0f41df9e038391534f5614f7fb3a8c1ca32d66e860"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:da5554553b8d9fb7ab6bb1a37cc53f20ada9024916c60f40c09ab1a675323f2f"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b7e3ccc43c395edba8039c9e407b01ed1844304c7f2f4aa99d34d04ed067c83"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8d55405efc8a96aa0ecb2d5d6af552d35c744f160b133fa690814a68d9a952c8"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:58d5cfb1687b69b3484a034d1aa6e5c11f0c1d46757e978ed59fab59ce83fd37"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3761c4107dab218c32ce4b10b1ae5ed686d41b882bfcb05f5bebc2be9488442f"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:45f1526e12cb480586c74670f46563d3090fc2a93e859ccf71efae61f04cef4b"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:b4d4fd4415d5219785fb082e28d84be4fbd90c3bff3d861877db0aa6b0edd70b"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:eb8a1e6b8130fee0b48107739e09553d50c6f031d0b3fcc33f885bb64fa01105"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7adf1460c05f7366f0fe9cf2d24e46abca9eb621705322bbd0c3f3e3a5edb2b4"}, - {file = "psycopg_binary-3.2.6-cp38-cp38-win_amd64.whl", hash = "sha256:28505f52ceef60554b5ab3289bf5aed2e7e57fa8e9a59a979d82db944e256a6c"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:260c43c329e668606388cee78ec0dab083a25c2c6e6f9cf74a130fd5a27b0f87"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9870e51fad4684dbdec057fa757d65e61cb2acb16236836e9360044c2a1ec880"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:030e9c3082a931e972b029b3cef085784a3bf7f8e18367ae50d5b809aa6e1d87"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b60c9ed291fbd5e777c2c630dcfd10b7a87d68512b0757d5e7406d9c4895a82a"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e0f4a17a9c376c195e403b4826c18f325bd28f425231d36d1036258bf893e23"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac46da609624b16d961f604b3cbc3233ef43211ef1456a188f8c427109c9c3e1"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:e77949b8e7014b85cee0bf6e9e041bcae7719b2693ebf59236368fb0b2a08814"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:532322d9ef6e7d178a4f344970b017110633bcc3dc1c3403efcef55aad612517"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:880c5fd76dcb50bdcc8f87359e5a6c7eb416697cc9aa02854c91223bd999c045"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:3c0cddc7458b8416d77cd8829d0192466502f31d1fb853d58613cf13ac64f41c"}, - {file = "psycopg_binary-3.2.6-cp39-cp39-win_amd64.whl", hash = "sha256:ea158665676f42b19585dfe948071d3c5f28276f84a97522fb2e82c1d9194563"}, +groups = ["main"] +markers = "implementation_name != \"pypy\"" +files = [ + {file = "psycopg_binary-3.2.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:17ab2b4c2722138b7a6eb42d139ad8e5fed792574c1069f27abf8f8ebb0d7f75"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:063f5a56ccab2b9eef58f55437cff78c59c5562ebb5f7453ecd480f038b045dc"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70632c9687731c8d0c9c72fbb73893e82ba4a2cdc8ffdd4c5bbcef51cc9c6b16"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ebca1fd4b59523e3127eba7257bf764e80cddd9444b7f0d2870210ffc80ac688"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f2371822bc0b35ad735298964d531f95e59cfa2d31b87408f7d63ae78173279c"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b1cd14d99d358483c665355eebb650f5e76f2d41c942fe6d0836b0fe76fbf0"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:82369aa7cfbff19d65182698ee542af75d90c27284201d718f54f7b52480f730"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:00ba447b23daaacd9391c6a7ee0781e0860af72d0742c4d261df07940d601e29"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0ccff5f988345dad22146f165e4395b37b9f4f3e3dd42eedad6627e791a8c8b4"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:82e9ee9943da44a08f737d80c9b3878f9d4916a947cf182cd183f81e825cc41d"}, + {file = "psycopg_binary-3.2.7-cp310-cp310-win_amd64.whl", hash = "sha256:26b1b7e39fa5139f99cb02a186dfa447c41f7e55c0aebb5f2da6ddf5b6ec5b32"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d001950bcabb725e003609073b83678962e9308e0b194a5227d6758ba8d46e0"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:57acabe70587b65471b9f42593ec9bb17d317118e0dbe92d7173f0a75939150a"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:93f3937f293a30310501204bf0833704283675a8819a395bea8e352a5abaee84"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72a3fb7cd7da15157bf63792db7346dfe2a07e3bc6ff702c7e8a76719e6efca0"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0350ba9a14295b266fba83d5a691511bf4ceb5df863973b525230fd15fd483f2"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de12375a49e70a6ac52431aa92b9c2e4ca01fea4fa872b4cd31e19028e3095d7"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:33bb035e6f9b4911291472d6b5386b283fc835b97d2b1dc57f2ff82f777cb9f2"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ed59c833678b55932f78aa60e85691b40fd7d2058ad60ca369fc4f908218c688"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:b404c1a091dd034254694ae56111c69f07d54419c5436366c5b3af2aac9dce04"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:25a3527a26b7589434a3eb52ad32b1f67e1af034cb17bd36a77344896d54b403"}, + {file = "psycopg_binary-3.2.7-cp311-cp311-win_amd64.whl", hash = "sha256:f5a2ebd0772c059e521b70a826a11b962fcba465b001fd655ca6aba10dc9432d"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:76e55ec30b3947b921f267795ffd2f433c65fc8a41adc4939fd9ccfb0f5b0322"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5ff4c97a04eeb11d54d4c8ca22459e2cca9a423e7f397c29ae311c6e7c784d49"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d1c97a7c57e83b55172b585702744cd6bdad37c7a18cabdf55ba1e5a66ce476"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b394542a8b0706102a86c7006978848cf1748f4191e0e0e32b1f814b63ae7d68"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f6a10440bc02ed3a0ac1cb2d61e117273ce20e3d103061452acc7ed2c9a89e53"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8eee57667fdd8a1cd8c4c2dc7350914267baf4d699690d44e439df9ae9148e7a"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:fd35ddbbfbe3cbe00a2b578defc7365e5e047e4fa9b803659bd4e8c3962069e7"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e7f1d2dc575b00d951317b788a2244fdfcdd1503221ebc7e479220f6e3414aa4"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:359b2056e1203010c0044c12a3f933d522c613d7ee280d84be3643458f416796"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:532b5c8a9ec70173812fbba26bbd5cf57c0f1c680907d637ddbb1be15dbf89d7"}, + {file = "psycopg_binary-3.2.7-cp312-cp312-win_amd64.whl", hash = "sha256:47e9d09b4f898eaf46cd2b7433f9e6faa935246a9d8983b4f88f0a46809abbd2"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3b280862c623616e0ced03602c98b44f51ab8cdaaad31f6b3523a2a68b2f92a4"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:add318f12dc2be4d8a817e70c38cfd23a2af80ff6f871089e63012b62bf96f00"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03994806e62e795b1b286c60bb5d23e1cc3982b06192e87ec4dff0a0f7c528e2"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:77709be5dc45828ca06d9d87fa7b065720fb87b1aa3e72d44177562f1df50ad2"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64d959a17ac2f1ff87a191786f66ae452791fbe73cee7375f2dafd2696e605a9"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:239e24fa33c6213320da0aee72d541e4780adb21753fc692337043c235118cf1"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d31c0523e0294e008d9031f2f2034a010f043ae8c7af0589d614b0bf6ed6e6aa"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:a15c88f1695c8dc8b90625931fe86909c74f7770bad7312999ee6babb0143dcc"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3c02790afcc6d82d1b9d886d9323f955c5c998693966c4c1e6d0ff9a96276a1e"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1d2288a7f1d0dec1ccce50b4470751acb563689048752fdbf7a4a804df3a0e0d"}, + {file = "psycopg_binary-3.2.7-cp313-cp313-win_amd64.whl", hash = "sha256:c3781beaffb33fce17d8f137b003ebd930a7148eab2a1f60628e86c3d67884ea"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a1e4c873cf553276cfe28ae0ec9cd969c43ef722616d092f8b17b5d69fd5c839"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aa2cef360f8fd108eb9100427914e814722e1ded4631d23304865c88e69f6bbf"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8b5133fdddfd0da76e72add375fc79eee5d741c32c99e602aecdaa543d2e3466"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ec1e7287d80a22d58030862e57389654fc618ae70eeeb54e1f82fe86454ad06"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a2e82ccee04feb93bf4fd41fc56b6a961611059b777c3187321c943242c9e4e"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e3ac59a0d067199d7d438d36248e31919987e69854db196f7133f0c89d4489a1"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:51a45bfd428a0af0f42838e4f744a39ddbddc1a131e89551e569a9ed4bfd97a6"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:93a6350514ad348327f6a5cfb6c8fe29ccba9b6cdb9ffea09bb4b57a27cca18d"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:b44a2c5e85d047f1fe54dc297c128f7ef375435a6cf583886a8d701c75716cd4"}, + {file = "psycopg_binary-3.2.7-cp38-cp38-win_amd64.whl", hash = "sha256:506db31c1e08e8fb8132e4dce7708fe9aeedc3908d3ed10a3ea76e463d6ea904"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:519d7d8f35c5392599a5f5ceb9ebaa50881024fb6ecd32ea55436c8e3cda27cc"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ef399143d63bd67febe92b923dc6bd56bc8a9c3581a68bc8982eed75963ad169"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a34757170706c67be94b248db458d3602269828a067a84bdc536869d35fed5"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:05a7265e80b362b93af2dbea0cd8828e6cbbb6daea97f2b0b4f29e61bd34b2e3"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2a9aa6ddfd6a8fb5756498ccb7a3a4f9cd87906d9e8ac36b69e116b7104b891"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69310b8dc1277556711f6818b75a92581ae6c3cd2ca3c9c0798caf15976a8562"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:73349f876b7288200c576c5c14b29c5f3266fb30598c3723dc57cfe05adf3121"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a8d3c8df6eb652e8140b24941b4da8bd07bfa7564101e9dee496a28683f7c2f8"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:2321b6edfb4ca38a3446d5e88abe9ce78c04fc616d05a598ffe7cc5e2535c1fc"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2cf25feb92dceb5739dd029a047664a02f5df25a5e086d577cae810daf6a302a"}, + {file = "psycopg_binary-3.2.7-cp39-cp39-win_amd64.whl", hash = "sha256:ac0b823a0b199d36e0570d5d2a1154ae767073907496a2e436a236e388fc0c97"}, ] [[package]] @@ -1370,6 +2026,8 @@ version = "0.7.0" description = "Run a subprocess in a pseudo terminal" optional = false python-versions = "*" +groups = ["main"] +markers = "sys_platform != \"win32\" and (python_version < \"3.10\" or sys_platform != \"win32\" and sys_platform != \"emscripten\")" files = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, @@ -1381,6 +2039,7 @@ version = "0.2.3" description = "Safely evaluate AST nodes without side effects" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, @@ -1395,6 +2054,8 @@ version = "2.22" description = "C parser in Python" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "platform_python_implementation != \"PyPy\"" files = [ {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, @@ -1406,6 +2067,8 @@ version = "2.10.6" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "pydantic-2.10.6-py3-none-any.whl", hash = "sha256:427d664bf0b8a2b34ff5dd0f5a18df00591adcee7198fbd71981054cef37b584"}, {file = "pydantic-2.10.6.tar.gz", hash = "sha256:ca5daa827cce33de7a42be142548b0096bf05a7e7b365aebfa5f8eeec7128236"}, @@ -1418,7 +2081,30 @@ typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] -timezone = ["tzdata"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] + +[[package]] +name = "pydantic" +version = "2.11.4" +description = "Data validation using Python type hints" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "pydantic-2.11.4-py3-none-any.whl", hash = "sha256:d9615eaa9ac5a063471da949c8fc16376a84afb5024688b3ff885693506764eb"}, + {file = "pydantic-2.11.4.tar.gz", hash = "sha256:32738d19d63a226a52eed76645a98ee07c1f410ee41d93b4afbfa85ed8111c2d"}, +] + +[package.dependencies] +annotated-types = ">=0.6.0" +pydantic-core = "2.33.2" +typing-extensions = ">=4.12.2" +typing-inspection = ">=0.4.0" + +[package.extras] +email = ["email-validator (>=2.0.0)"] +timezone = ["tzdata ; python_version >= \"3.9\" and platform_system == \"Windows\""] [[package]] name = "pydantic-core" @@ -1426,6 +2112,8 @@ version = "2.27.2" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "pydantic_core-2.27.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2d367ca20b2f14095a8f4fa1210f5a7b78b8a20009ecced6b12818f455b1e9fa"}, {file = "pydantic_core-2.27.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:491a2b73db93fab69731eaee494f320faa4e093dbed776be1a829c2eb222c34c"}, @@ -1532,12 +2220,126 @@ files = [ [package.dependencies] typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" +[[package]] +name = "pydantic-core" +version = "2.33.2" +description = "Core functionality for Pydantic validation and serialization" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:2b3d326aaef0c0399d9afffeb6367d5e26ddc24d351dbc9c636840ac355dc5d8"}, + {file = "pydantic_core-2.33.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0e5b2671f05ba48b94cb90ce55d8bdcaaedb8ba00cc5359f6810fc918713983d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0069c9acc3f3981b9ff4cdfaf088e98d83440a4c7ea1bc07460af3d4dc22e72d"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d53b22f2032c42eaaf025f7c40c2e3b94568ae077a606f006d206a463bc69572"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0405262705a123b7ce9f0b92f123334d67b70fd1f20a9372b907ce1080c7ba02"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b25d91e288e2c4e0662b8038a28c6a07eaac3e196cfc4ff69de4ea3db992a1b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6bdfe4b3789761f3bcb4b1ddf33355a71079858958e3a552f16d5af19768fef2"}, + {file = "pydantic_core-2.33.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efec8db3266b76ef9607c2c4c419bdb06bf335ae433b80816089ea7585816f6a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:031c57d67ca86902726e0fae2214ce6770bbe2f710dc33063187a68744a5ecac"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:f8de619080e944347f5f20de29a975c2d815d9ddd8be9b9b7268e2e3ef68605a"}, + {file = "pydantic_core-2.33.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:73662edf539e72a9440129f231ed3757faab89630d291b784ca99237fb94db2b"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win32.whl", hash = "sha256:0a39979dcbb70998b0e505fb1556a1d550a0781463ce84ebf915ba293ccb7e22"}, + {file = "pydantic_core-2.33.2-cp310-cp310-win_amd64.whl", hash = "sha256:b0379a2b24882fef529ec3b4987cb5d003b9cda32256024e6fe1586ac45fc640"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4c5b0a576fb381edd6d27f0a85915c6daf2f8138dc5c267a57c08a62900758c7"}, + {file = "pydantic_core-2.33.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e799c050df38a639db758c617ec771fd8fb7a5f8eaaa4b27b101f266b216a246"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc46a01bf8d62f227d5ecee74178ffc448ff4e5197c756331f71efcc66dc980f"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a144d4f717285c6d9234a66778059f33a89096dfb9b39117663fd8413d582dcc"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:73cf6373c21bc80b2e0dc88444f41ae60b2f070ed02095754eb5a01df12256de"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dc625f4aa79713512d1976fe9f0bc99f706a9dee21dfd1810b4bbbf228d0e8a"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:881b21b5549499972441da4758d662aeea93f1923f953e9cbaff14b8b9565aef"}, + {file = "pydantic_core-2.33.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bdc25f3681f7b78572699569514036afe3c243bc3059d3942624e936ec93450e"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:fe5b32187cbc0c862ee201ad66c30cf218e5ed468ec8dc1cf49dec66e160cc4d"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:bc7aee6f634a6f4a95676fcb5d6559a2c2a390330098dba5e5a5f28a2e4ada30"}, + {file = "pydantic_core-2.33.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:235f45e5dbcccf6bd99f9f472858849f73d11120d76ea8707115415f8e5ebebf"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win32.whl", hash = "sha256:6368900c2d3ef09b69cb0b913f9f8263b03786e5b2a387706c5afb66800efd51"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_amd64.whl", hash = "sha256:1e063337ef9e9820c77acc768546325ebe04ee38b08703244c1309cccc4f1bab"}, + {file = "pydantic_core-2.33.2-cp311-cp311-win_arm64.whl", hash = "sha256:6b99022f1d19bc32a4c2a0d544fc9a76e3be90f0b3f4af413f87d38749300e65"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a7ec89dc587667f22b6a0b6579c249fca9026ce7c333fc142ba42411fa243cdc"}, + {file = "pydantic_core-2.33.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3c6db6e52c6d70aa0d00d45cdb9b40f0433b96380071ea80b09277dba021ddf7"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e61206137cbc65e6d5256e1166f88331d3b6238e082d9f74613b9b765fb9025"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb8c529b2819c37140eb51b914153063d27ed88e3bdc31b71198a198e921e011"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c52b02ad8b4e2cf14ca7b3d918f3eb0ee91e63b3167c32591e57c4317e134f8f"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96081f1605125ba0855dfda83f6f3df5ec90c61195421ba72223de35ccfb2f88"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f57a69461af2a5fa6e6bbd7a5f60d3b7e6cebb687f55106933188e79ad155c1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:572c7e6c8bb4774d2ac88929e3d1f12bc45714ae5ee6d9a788a9fb35e60bb04b"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:db4b41f9bd95fbe5acd76d89920336ba96f03e149097365afe1cb092fceb89a1"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:fa854f5cf7e33842a892e5c73f45327760bc7bc516339fda888c75ae60edaeb6"}, + {file = "pydantic_core-2.33.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5f483cfb75ff703095c59e365360cb73e00185e01aaea067cd19acffd2ab20ea"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win32.whl", hash = "sha256:9cb1da0f5a471435a7bc7e439b8a728e8b61e59784b2af70d7c169f8dd8ae290"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_amd64.whl", hash = "sha256:f941635f2a3d96b2973e867144fde513665c87f13fe0e193c158ac51bfaaa7b2"}, + {file = "pydantic_core-2.33.2-cp312-cp312-win_arm64.whl", hash = "sha256:cca3868ddfaccfbc4bfb1d608e2ccaaebe0ae628e1416aeb9c4d88c001bb45ab"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:1082dd3e2d7109ad8b7da48e1d4710c8d06c253cbc4a27c1cff4fbcaa97a9e3f"}, + {file = "pydantic_core-2.33.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f517ca031dfc037a9c07e748cefd8d96235088b83b4f4ba8939105d20fa1dcd6"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0a9f2c9dd19656823cb8250b0724ee9c60a82f3cdf68a080979d13092a3b0fef"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2b0a451c263b01acebe51895bfb0e1cc842a5c666efe06cdf13846c7418caa9a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ea40a64d23faa25e62a70ad163571c0b342b8bf66d5fa612ac0dec4f069d916"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0fb2d542b4d66f9470e8065c5469ec676978d625a8b7a363f07d9a501a9cb36a"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdac5d6ffa1b5a83bca06ffe7583f5576555e6c8b3a91fbd25ea7780f825f7d"}, + {file = "pydantic_core-2.33.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:04a1a413977ab517154eebb2d326da71638271477d6ad87a769102f7c2488c56"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:c8e7af2f4e0194c22b5b37205bfb293d166a7344a5b0d0eaccebc376546d77d5"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:5c92edd15cd58b3c2d34873597a1e20f13094f59cf88068adb18947df5455b4e"}, + {file = "pydantic_core-2.33.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:65132b7b4a1c0beded5e057324b7e16e10910c106d43675d9bd87d4f38dde162"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win32.whl", hash = "sha256:52fb90784e0a242bb96ec53f42196a17278855b0f31ac7c3cc6f5c1ec4811849"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_amd64.whl", hash = "sha256:c083a3bdd5a93dfe480f1125926afcdbf2917ae714bdb80b36d34318b2bec5d9"}, + {file = "pydantic_core-2.33.2-cp313-cp313-win_arm64.whl", hash = "sha256:e80b087132752f6b3d714f041ccf74403799d3b23a72722ea2e6ba2e892555b9"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:61c18fba8e5e9db3ab908620af374db0ac1baa69f0f32df4f61ae23f15e586ac"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95237e53bb015f67b63c91af7518a62a8660376a6a0db19b89acc77a4d6199f5"}, + {file = "pydantic_core-2.33.2-cp313-cp313t-win_amd64.whl", hash = "sha256:c2fc0a768ef76c15ab9238afa6da7f69895bb5d1ee83aeea2e3509af4472d0b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a2b911a5b90e0374d03813674bf0a5fbbb7741570dcd4b4e85a2e48d17def29d"}, + {file = "pydantic_core-2.33.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6fa6dfc3e4d1f734a34710f391ae822e0a8eb8559a85c6979e14e65ee6ba2954"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c54c939ee22dc8e2d545da79fc5381f1c020d6d3141d3bd747eab59164dc89fb"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53a57d2ed685940a504248187d5685e49eb5eef0f696853647bf37c418c538f7"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09fb9dd6571aacd023fe6aaca316bd01cf60ab27240d7eb39ebd66a3a15293b4"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0e6116757f7959a712db11f3e9c0a99ade00a5bbedae83cb801985aa154f071b"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d55ab81c57b8ff8548c3e4947f119551253f4e3787a7bbc0b6b3ca47498a9d3"}, + {file = "pydantic_core-2.33.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c20c462aa4434b33a2661701b861604913f912254e441ab8d78d30485736115a"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:44857c3227d3fb5e753d5fe4a3420d6376fa594b07b621e220cd93703fe21782"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:eb9b459ca4df0e5c87deb59d37377461a538852765293f9e6ee834f0435a93b9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:9fcd347d2cc5c23b06de6d3b7b8275be558a0c90549495c699e379a80bf8379e"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win32.whl", hash = "sha256:83aa99b1285bc8f038941ddf598501a86f1536789740991d7d8756e34f1e74d9"}, + {file = "pydantic_core-2.33.2-cp39-cp39-win_amd64.whl", hash = "sha256:f481959862f57f29601ccced557cc2e817bce7533ab8e01a797a48b49c9692b3"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5c4aa4e82353f65e548c476b37e64189783aa5384903bfea4f41580f255fddfa"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d946c8bf0d5c24bf4fe333af284c59a19358aa3ec18cb3dc4370080da1e8ad29"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:87b31b6846e361ef83fedb187bb5b4372d0da3f7e28d85415efa92d6125d6e6d"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa9d91b338f2df0508606f7009fde642391425189bba6d8c653afd80fd6bb64e"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2058a32994f1fde4ca0480ab9d1e75a0e8c87c22b53a3ae66554f9af78f2fe8c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:0e03262ab796d986f978f79c943fc5f620381be7287148b8010b4097f79a39ec"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1a8695a8d00c73e50bff9dfda4d540b7dee29ff9b8053e38380426a85ef10052"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:fa754d1850735a0b0e03bcffd9d4b4343eb417e47196e4485d9cca326073a42c"}, + {file = "pydantic_core-2.33.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a11c8d26a50bfab49002947d3d237abe4d9e4b5bdc8846a63537b6488e197808"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:dd14041875d09cc0f9308e37a6f8b65f5585cf2598a53aa0123df8b129d481f8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:d87c561733f66531dced0da6e864f44ebf89a8fba55f31407b00c2f7f9449593"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f82865531efd18d6e07a04a17331af02cb7a651583c418df8266f17a63c6612"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bfb5112df54209d820d7bf9317c7a6c9025ea52e49f46b6a2060104bba37de7"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:64632ff9d614e5eecfb495796ad51b0ed98c453e447a76bcbeeb69615079fc7e"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:f889f7a40498cc077332c7ab6b4608d296d852182211787d4f3ee377aaae66e8"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:de4b83bb311557e439b9e186f733f6c645b9417c84e2eb8203f3f820a4b988bf"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:82f68293f055f51b51ea42fafc74b6aad03e70e191799430b90c13d643059ebb"}, + {file = "pydantic_core-2.33.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:329467cecfb529c925cf2bbd4d60d2c509bc2fb52a20c1045bf09bb70971a9c1"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:87acbfcf8e90ca885206e98359d7dca4bcbb35abdc0ff66672a293e1d7a19101"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:7f92c15cd1e97d4b12acd1cc9004fa092578acfa57b67ad5e43a197175d01a64"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3f26877a748dc4251cfcfda9dfb5f13fcb034f5308388066bcfe9031b63ae7d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dac89aea9af8cd672fa7b510e7b8c33b0bba9a43186680550ccf23020f32d535"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:970919794d126ba8645f3837ab6046fb4e72bbc057b3709144066204c19a455d"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:3eb3fe62804e8f859c49ed20a8451342de53ed764150cb14ca71357c765dc2a6"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:3abcd9392a36025e3bd55f9bd38d908bd17962cc49bc6da8e7e96285336e2bca"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3a1c81334778f9e3af2f8aeb7a960736e5cab1dfebfb26aabca09afd2906c039"}, + {file = "pydantic_core-2.33.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2807668ba86cb38c6817ad9bc66215ab8584d1d304030ce4f0887336f28a5e27"}, + {file = "pydantic_core-2.33.2.tar.gz", hash = "sha256:7cb8bc3605c29176e1b105350d2e6474142d7c1bd1d9327c4a9bdb46bf827acc"}, +] + +[package.dependencies] +typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" + [[package]] name = "pygments" version = "2.19.1" description = "Pygments is a syntax highlighting package written in Python." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "pygments-2.19.1-py3-none-any.whl", hash = "sha256:9ea1544ad55cecf4b8242fab6dd35a93bbce657034b0611ee383099054ab6d8c"}, {file = "pygments-2.19.1.tar.gz", hash = "sha256:61c16d2a8576dc0649d9f39e089b5f02bcd27fba10d8fb4dcc28173f7a45151f"}, @@ -1546,15 +2348,34 @@ files = [ [package.extras] windows-terminal = ["colorama (>=0.4.6)"] +[[package]] +name = "pyjwt" +version = "2.9.0" +description = "JSON Web Token implementation in Python" +optional = false +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "PyJWT-2.9.0-py3-none-any.whl", hash = "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850"}, + {file = "pyjwt-2.9.0.tar.gz", hash = "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c"}, +] + +[package.extras] +crypto = ["cryptography (>=3.4.0)"] +dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] +docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] +tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] + [[package]] name = "pymilvus" -version = "2.5.6" +version = "2.5.8" description = "Python Sdk for Milvus" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "pymilvus-2.5.6-py3-none-any.whl", hash = "sha256:19796f328278974f04632a1531e602070614f6ab0865cc97e27755f622e50a6d"}, - {file = "pymilvus-2.5.6.tar.gz", hash = "sha256:2bea0b03ed9ac3daadb1b2df8e38aa5c8f4aabd00b23a4999abb4adaebf54f59"}, + {file = "pymilvus-2.5.8-py3-none-any.whl", hash = "sha256:6f33c9e78c041373df6a94724c90ca83448fd231aa33d6298a7a84ed2a5a0236"}, + {file = "pymilvus-2.5.8.tar.gz", hash = "sha256:48923e7efeebcc366d32b644772796f60484e0ca1a5afc1606d21a10ed98133c"}, ] [package.dependencies] @@ -1581,6 +2402,7 @@ version = "7.4.4" description = "pytest: simple powerful testing with Python" optional = false python-versions = ">=3.7" +groups = ["dev"] files = [ {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, @@ -1603,6 +2425,7 @@ version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] files = [ {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, @@ -1617,6 +2440,8 @@ version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, @@ -1625,12 +2450,29 @@ files = [ [package.extras] cli = ["click (>=5.0)"] +[[package]] +name = "python-dotenv" +version = "1.1.0" +description = "Read key-value pairs from a .env file and set them as environment variables" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "python_dotenv-1.1.0-py3-none-any.whl", hash = "sha256:d7c01d9e2293916c18baf562d95698754b0dbbb5e74d457c45d4f6561fb9d55d"}, + {file = "python_dotenv-1.1.0.tar.gz", hash = "sha256:41f90bc6f5f177fb41f53e87666db362025010eb28f60a01c9143bfa33a2b2d5"}, +] + +[package.extras] +cli = ["click (>=5.0)"] + [[package]] name = "pytz" version = "2025.2" description = "World timezone definitions, modern and historical" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, @@ -1642,6 +2484,8 @@ version = "310" description = "Python for Window Extensions" optional = false python-versions = "*" +groups = ["main"] +markers = "platform_system == \"Windows\"" files = [ {file = "pywin32-310-cp310-cp310-win32.whl", hash = "sha256:6dd97011efc8bf51d6793a82292419eba2c71cf8e7250cfac03bba284454abc1"}, {file = "pywin32-310-cp310-cp310-win_amd64.whl", hash = "sha256:c3e78706e4229b915a0821941a84e7ef420bf2b77e08c9dae3c76fd03fd2ae3d"}, @@ -1667,6 +2511,7 @@ version = "6.0.2" description = "YAML parser and emitter for Python" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "PyYAML-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0a9a2848a5b7feac301353437eb7d5957887edbf81d56e903999a75a3d743086"}, {file = "PyYAML-6.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:29717114e51c84ddfba879543fb232a6ed60086602313ca38cce623c1d62cfbf"}, @@ -1729,6 +2574,8 @@ version = "1.12.1" description = "Client library for the Qdrant vector search engine" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "qdrant_client-1.12.1-py3-none-any.whl", hash = "sha256:b2d17ce18e9e767471368380dd3bbc4a0e3a0e2061fedc9af3542084b48451e0"}, {file = "qdrant_client-1.12.1.tar.gz", hash = "sha256:35e8e646f75b7b883b3d2d0ee4c69c5301000bba41c82aa546e985db0f1aeb72"}, @@ -1744,22 +2591,54 @@ pydantic = ">=1.10.8" urllib3 = ">=1.26.14,<3" [package.extras] -fastembed = ["fastembed (==0.3.6)"] -fastembed-gpu = ["fastembed-gpu (==0.3.6)"] +fastembed = ["fastembed (==0.3.6) ; python_version < \"3.13\""] +fastembed-gpu = ["fastembed-gpu (==0.3.6) ; python_version < \"3.13\""] + +[[package]] +name = "qdrant-client" +version = "1.14.2" +description = "Client library for the Qdrant vector search engine" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "qdrant_client-1.14.2-py3-none-any.whl", hash = "sha256:7c283b1f0e71db9c21b85d898fb395791caca2a6d56ee751da96d797b001410c"}, + {file = "qdrant_client-1.14.2.tar.gz", hash = "sha256:da5cab4d367d099d1330b6f30d45aefc8bd76f8b8f9d8fa5d4f813501b93af0d"}, +] + +[package.dependencies] +grpcio = ">=1.41.0" +httpx = {version = ">=0.20.0", extras = ["http2"]} +numpy = [ + {version = ">=1.21", markers = "python_version >= \"3.10\" and python_version < \"3.12\""}, + {version = ">=1.21,<2.1.0", markers = "python_version < \"3.10\""}, + {version = ">=1.26", markers = "python_version == \"3.12\""}, +] +portalocker = ">=2.7.0,<3.0.0" +protobuf = ">=3.20.0" +pydantic = ">=1.10.8,<2.0.dev0 || >2.2.0" +urllib3 = ">=1.26.14,<3" + +[package.extras] +fastembed = ["fastembed (==0.6.1)"] +fastembed-gpu = ["fastembed-gpu (==0.6.1)"] [[package]] name = "redis" -version = "5.2.1" +version = "5.3.0" description = "Python client for Redis database and key-value store" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "redis-5.2.1-py3-none-any.whl", hash = "sha256:ee7e1056b9aea0f04c6c2ed59452947f34c4940ee025f5dd83e6a6418b6989e4"}, - {file = "redis-5.2.1.tar.gz", hash = "sha256:16f2e22dff21d5125e8481515e386711a34cbec50f0e44413dd7d9c060a54e0f"}, + {file = "redis-5.3.0-py3-none-any.whl", hash = "sha256:f1deeca1ea2ef25c1e4e46b07f4ea1275140526b1feea4c6459c0ec27a10ef83"}, + {file = "redis-5.3.0.tar.gz", hash = "sha256:8d69d2dde11a12dc85d0dbf5c45577a5af048e2456f7077d87ad35c1c81c310e"}, ] [package.dependencies] async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} +PyJWT = ">=2.9.0,<2.10.0" [package.extras] hiredis = ["hiredis (>=3.0.0)"] @@ -1771,6 +2650,7 @@ version = "2.32.3" description = "Python HTTP for Humans." optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, @@ -1792,6 +2672,8 @@ version = "70.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.8" +groups = ["main"] +markers = "python_version == \"3.8\"" files = [ {file = "setuptools-70.0.0-py3-none-any.whl", hash = "sha256:54faa7f2e8d2d11bcd2c07bed282eef1046b5c080d1c32add737d7b5817b1ad4"}, {file = "setuptools-70.0.0.tar.gz", hash = "sha256:f211a66637b8fa059bb28183da127d4e86396c991a942b028c6650d4319c3fd0"}, @@ -1799,27 +2681,29 @@ files = [ [package.extras] docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov ; platform_python_implementation != \"PyPy\"", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] [[package]] name = "setuptools" -version = "78.1.0" +version = "80.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" files = [ - {file = "setuptools-78.1.0-py3-none-any.whl", hash = "sha256:3e386e96793c8702ae83d17b853fb93d3e09ef82ec62722e61da5cd22376dcd8"}, - {file = "setuptools-78.1.0.tar.gz", hash = "sha256:18fd474d4a82a5f83dac888df697af65afa82dec7323d09c3e37d1f14288da54"}, + {file = "setuptools-80.2.0-py3-none-any.whl", hash = "sha256:5f982284ad5d644764e1985baca205e235651b55f9a7ea8d46878d37104aa5e5"}, + {file = "setuptools-80.2.0.tar.gz", hash = "sha256:16a390b41627e1455567193435e7cafa9101803ffaa2fdd9ecd0af098301981d"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] -core = ["importlib_metadata (>=6)", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] +core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] [[package]] name = "six" @@ -1827,6 +2711,7 @@ version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" +groups = ["main"] files = [ {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, @@ -1838,6 +2723,7 @@ version = "1.3.1" description = "Sniff out which async library your code is running under" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, @@ -1849,6 +2735,7 @@ version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, @@ -1868,6 +2755,7 @@ version = "1.1.2" description = "Timeout control decorator and context managers, raise any exception in another thread" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "stopit-1.1.2.tar.gz", hash = "sha256:f7f39c583fd92027bd9d06127b259aee7a5b7945c1f1fa56263811e1e766996d"}, ] @@ -1878,6 +2766,8 @@ version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" +groups = ["main", "dev"] +markers = "python_version <= \"3.10\"" files = [ {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, @@ -1919,6 +2809,7 @@ version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" +groups = ["main"] files = [ {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, @@ -1940,6 +2831,7 @@ version = "5.14.3" description = "Traitlets Python configuration system" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, @@ -1955,6 +2847,7 @@ version = "0.6.1" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." optional = false python-versions = ">=3.6" +groups = ["main"] files = [ {file = "typer-0.6.1-py3-none-any.whl", hash = "sha256:54b19e5df18654070a82f8c2aa1da456a4ac16a2a83e6dcd9f170e291c56338e"}, {file = "typer-0.6.1.tar.gz", hash = "sha256:2d5720a5e63f73eaf31edaa15f6ab87f35f0690f8ca233017d7d23d743a91d73"}, @@ -1971,21 +2864,39 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6. [[package]] name = "typing-extensions" -version = "4.13.0" +version = "4.13.2" description = "Backported and Experimental Type Hints for Python 3.8+" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ - {file = "typing_extensions-4.13.0-py3-none-any.whl", hash = "sha256:c8dd92cc0d6425a97c18fbb9d1954e5ff92c1ca881a309c45f06ebc0b79058e5"}, - {file = "typing_extensions-4.13.0.tar.gz", hash = "sha256:0a4ac55a5820789d87e297727d229866c9650f6521b64206413c4fbada24d95b"}, + {file = "typing_extensions-4.13.2-py3-none-any.whl", hash = "sha256:a439e7c04b49fec3e5d3e2beaa21755cadbbdc391694e28ccdd36ca4a1408f8c"}, + {file = "typing_extensions-4.13.2.tar.gz", hash = "sha256:e6c81219bd689f51865d9e372991c540bda33a0379d5573cddb9a3a23f7caaef"}, ] +[[package]] +name = "typing-inspection" +version = "0.4.0" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" +groups = ["main"] +markers = "python_version > \"3.8\"" +files = [ + {file = "typing_inspection-0.4.0-py3-none-any.whl", hash = "sha256:50e72559fcd2a6367a19f7a7e610e6afcb9fac940c650290eed893d61386832f"}, + {file = "typing_inspection-0.4.0.tar.gz", hash = "sha256:9765c87de36671694a67904bf2c96e395be9c6439bb6c87b5142569dcdd65122"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.0" + [[package]] name = "typish" version = "1.9.3" description = "Functionality for types" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "typish-1.9.3-py3-none-any.whl", hash = "sha256:03cfee5e6eb856dbf90244e18f4e4c41044c8790d5779f4e775f63f982e2f896"}, ] @@ -1999,6 +2910,7 @@ version = "2025.2" description = "Provider of IANA time zone data" optional = false python-versions = ">=2" +groups = ["main"] files = [ {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, @@ -2010,6 +2922,7 @@ version = "5.10.0" description = "Ultra fast JSON encoder and decoder for Python" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "ujson-5.10.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2601aa9ecdbee1118a1c2065323bda35e2c5a2cf0797ef4522d485f9d3ef65bd"}, {file = "ujson-5.10.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:348898dd702fc1c4f1051bc3aacbf894caa0927fe2c53e68679c073375f732cf"}, @@ -2097,29 +3010,33 @@ version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +groups = ["main"] +markers = "python_version < \"3.10\"" files = [ {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, ] [package.extras] -brotli = ["brotli (==1.0.9)", "brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] name = "urllib3" -version = "2.3.0" +version = "2.4.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false python-versions = ">=3.9" +groups = ["main"] +markers = "python_version >= \"3.10\"" files = [ - {file = "urllib3-2.3.0-py3-none-any.whl", hash = "sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df"}, - {file = "urllib3-2.3.0.tar.gz", hash = "sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d"}, + {file = "urllib3-2.4.0-py3-none-any.whl", hash = "sha256:4e16665048960a0900c702d4a66415956a584919c03361cac9f1df5c5dd7e813"}, + {file = "urllib3-2.4.0.tar.gz", hash = "sha256:414bc6535b787febd7567804cc015fee39daab8ad86268f1310a9250697de466"}, ] [package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +brotli = ["brotli (>=1.0.9) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; platform_python_implementation != \"CPython\""] h2 = ["h2 (>=4,<5)"] socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] zstd = ["zstandard (>=0.18.0)"] @@ -2130,6 +3047,7 @@ version = "0.33.0" description = "Python Data Validation for Humans™" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "validators-0.33.0-py3-none-any.whl", hash = "sha256:134b586a98894f8139865953899fc2daeb3d0c35569552c5518f089ae43ed075"}, {file = "validators-0.33.0.tar.gz", hash = "sha256:535867e9617f0100e676a1257ba1e206b9bfd847ddc171e4d44811f07ff0bfbf"}, @@ -2144,6 +3062,7 @@ version = "20.30.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" +groups = ["dev"] files = [ {file = "virtualenv-20.30.0-py3-none-any.whl", hash = "sha256:e34302959180fca3af42d1800df014b35019490b119eba981af27f2fa486e5d6"}, {file = "virtualenv-20.30.0.tar.gz", hash = "sha256:800863162bcaa5450a6e4d721049730e7f2dae07720e0902b0e4040bd6f9ada8"}, @@ -2156,7 +3075,7 @@ platformdirs = ">=3.9.1,<5" [package.extras] docs = ["furo (>=2023.7.26)", "proselint (>=0.13)", "sphinx (>=7.1.2,!=7.3)", "sphinx-argparse (>=0.4)", "sphinxcontrib-towncrier (>=0.2.1a0)", "towncrier (>=23.6)"] -test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8)", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10)"] +test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=23.1)", "pytest (>=7.4)", "pytest-env (>=0.8.2)", "pytest-freezer (>=0.4.8) ; platform_python_implementation == \"PyPy\" or platform_python_implementation == \"GraalVM\" or platform_python_implementation == \"CPython\" and sys_platform == \"win32\" and python_version >= \"3.13\"", "pytest-mock (>=3.11.1)", "pytest-randomly (>=3.12)", "pytest-timeout (>=2.1)", "setuptools (>=68)", "time-machine (>=2.10) ; platform_python_implementation == \"CPython\""] [[package]] name = "wcwidth" @@ -2164,6 +3083,7 @@ version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" optional = false python-versions = "*" +groups = ["main"] files = [ {file = "wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859"}, {file = "wcwidth-0.2.13.tar.gz", hash = "sha256:72ea0c06399eb286d978fdedb6923a9eb47e1c486ce63e9b4e64fc18303972b5"}, @@ -2175,6 +3095,7 @@ version = "4.6.7" description = "A python native Weaviate client" optional = false python-versions = ">=3.8" +groups = ["main"] files = [ {file = "weaviate_client-4.6.7-py3-none-any.whl", hash = "sha256:8793de35264cab33a84fe8cb8c422a257fe4d8334657aaddd8ead853da3fb34a"}, {file = "weaviate_client-4.6.7.tar.gz", hash = "sha256:202b32e160536f5f44e4a635d30c3d3a0790b1a7ff997f5e243919d1ac5b68a1"}, @@ -2191,6 +3112,6 @@ requests = ">=2.30.0,<3.0.0" validators = "0.33.0" [metadata] -lock-version = "2.0" -python-versions = ">=3.8,<3.12" -content-hash = "d32a1f687bc36b705e59cb7aec1062a3ddd4f8ec314c93f3a8a3cbb952cb62d3" +lock-version = "2.1" +python-versions = ">=3.8,<3.13" +content-hash = "f78b4738f8fad698bb3b96d1071f844a22b8b43e08517f90bd0370055c88db56" diff --git a/pyproject.toml b/pyproject.toml index 07588cda..ee84d34a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ authors = ["Qdrant Team "] package-mode = false [tool.poetry.dependencies] -python = ">=3.8,<3.12" +python = ">=3.8,<3.13" qdrant-client = "^1.11.0" typer = "^0.6.1" jsons = "^1.6.3" From 534220a5d4cf0c1cd0d580193edcc3d934ba766c Mon Sep 17 00:00:00 2001 From: generall Date: Mon, 5 May 2025 09:45:44 +0200 Subject: [PATCH 099/101] upd params --- experiments/configurations/qdrant-single-node.json | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index 045c8917..881959a4 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -55,18 +55,10 @@ { "parallel": 8, "config": { + "hnsw_ef": 200, "quantization": { "rescore": true } - }, - "prefetch": { - "limit": 400, - "params": { - "hnsw_ef": 128, - "quantization": { - "rescore": false - } - } } } ], From f7833d093d3fa418d240a381060261b71b204bdd Mon Sep 17 00:00:00 2001 From: generall Date: Mon, 5 May 2025 09:51:42 +0200 Subject: [PATCH 100/101] upd params --- experiments/configurations/qdrant-single-node.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index 881959a4..12d3c96c 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -55,10 +55,19 @@ { "parallel": 8, "config": { - "hnsw_ef": 200, + "hnsw_ef": 128, "quantization": { "rescore": true } + }, + "prefetch": { + "limit": 400, + "params": { + "hnsw_ef": 128, + "quantization": { + "rescore": false + } + } } } ], From 323a928b96562fed9d166e121ca6c0b312556868 Mon Sep 17 00:00:00 2001 From: Ubuntu Date: Mon, 5 May 2025 21:04:57 +0000 Subject: [PATCH 101/101] upd test config --- experiments/configurations/qdrant-single-node.json | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index 12d3c96c..052b0876 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -53,21 +53,12 @@ "connection_params": { "timeout": 30 }, "search_params": [ { - "parallel": 8, + "parallel": 20, "config": { - "hnsw_ef": 128, + "hnsw_ef": 300, "quantization": { "rescore": true } - }, - "prefetch": { - "limit": 400, - "params": { - "hnsw_ef": 128, - "quantization": { - "rescore": false - } - } } } ],