From 17ef49e40d6a965f4dc67570aa3960049b455769 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 4 Jul 2023 17:56:51 +0100 Subject: [PATCH 001/209] Update redisearch base client to include timeout. Extended latency metrics to include p50 --- engine/base_client/client.py | 3 + engine/base_client/search.py | 1 + engine/clients/redis/config.py | 5 +- engine/clients/redis/configure.py | 4 +- engine/clients/redis/search.py | 1 + engine/clients/redis/upload.py | 29 +- requirements.txt | 641 ++++++++++++++++++++++++++++++ 7 files changed, 669 insertions(+), 15 deletions(-) create mode 100644 requirements.txt diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 4dcee787..171a6e47 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -83,6 +83,9 @@ def run_experiment( print("Experiment stage: Search") for search_id, searcher in enumerate(self.searchers): search_params = {**searcher.search_params} + ef = search_params["search_params"]["ef"] + parallel = search_params["parallel"] if "parallel" in search_params else 1 + print(f"\tef runtime: {ef}; #clients {parallel}") search_stats = searcher.search_all( dataset.config.distance, reader.read_queries() ) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 0996a5e5..64550df0 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -105,6 +105,7 @@ def search_all( "min_time": np.min(latencies), "max_time": np.max(latencies), "rps": len(latencies) / total_time, + "p50_time": np.percentile(latencies, 50), "p95_time": np.percentile(latencies, 95), "p99_time": np.percentile(latencies, 99), "precisions": precisions, diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index 5e8ee9db..3dfb8df9 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -1 +1,4 @@ -REDIS_PORT = 6380 +import os +REDIS_PORT = int(os.getenv("REDIS_PORT",6379)) +REDIS_AUTH = os.getenv("REDIS_AUTH",None) +REDIS_USER = os.getenv("REDIS_USER",None) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 715ac392..6bd49d2b 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/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.redis.config import REDIS_PORT +from engine.clients.redis.config import REDIS_PORT, REDIS_AUTH, REDIS_USER class RedisConfigurator(BaseConfigurator): @@ -24,7 +24,7 @@ class RedisConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - self.client = redis.Redis(host=host, port=REDIS_PORT, db=0) + self.client = redis.Redis(host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER) def clean(self): index = self.client.ft() diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 04b868b2..16739429 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -36,6 +36,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: .paging(0, top) .return_fields("vector_score") .dialect(2) + .timeout(0) ) params_dict = { "vec_param": np.array(vector).astype(np.float32).tobytes(), diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 4f6e7b89..7f9adf7b 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -26,18 +26,23 @@ def upload_batch( idx = ids[i] vec = vectors[i] meta = metadata[i] if metadata else {} - payload = { - k: v - for k, v in meta.items() - if v is not None and not isinstance(v, dict) - } - # Redis treats geopoints differently and requires putting them as - # a comma-separated string with lat and lon coordinates - geopoints = { - k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) - for k, v in meta.items() - if isinstance(v, dict) - } + payload = {} + geopoints = {} + + if meta is not None: + meta = {} + payload = { + k: v + for k, v in meta.items() + if v is not None and not isinstance(v, dict) + } + # Redis treats geopoints differently and requires putting them as + # a comma-separated string with lat and lon coordinates + geopoints = { + k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) + for k, v in meta.items() + if isinstance(v, dict) + } cls.client.hset( str(idx), mapping={ diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..bfcbc4ef --- /dev/null +++ b/requirements.txt @@ -0,0 +1,641 @@ +anyio==3.7.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce \ + --hash=sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0 +appnope==0.1.3 ; python_version >= "3.8" and python_version < "3.12" and sys_platform == "darwin" \ + --hash=sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24 \ + --hash=sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e +asttokens==2.2.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3 \ + --hash=sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c +async-timeout==4.0.2 ; python_version >= "3.8" and python_full_version <= "3.11.2" \ + --hash=sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15 \ + --hash=sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c +authlib==1.2.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:421f7c6b468d907ca2d9afede256f068f87e34d23dd221c07d13d4c234726afb \ + --hash=sha256:c88984ea00149a90e3537c964327da930779afa4564e354edfd98410bea01911 +backcall==0.2.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e \ + --hash=sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255 +certifi==2023.5.7 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ + --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 +cffi==1.15.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ + --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ + --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ + --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ + --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ + --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ + --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ + --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ + --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ + --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ + --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ + --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ + --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ + --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ + --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ + --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ + --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ + --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ + --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ + --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ + --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ + --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ + --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ + --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ + --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ + --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ + --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ + --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ + --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ + --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ + --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ + --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ + --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ + --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ + --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ + --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ + --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ + --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ + --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ + --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ + --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ + --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ + --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ + --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ + --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ + --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ + --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ + --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ + --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ + --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ + --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ + --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ + --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ + --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ + --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ + --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ + --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ + --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ + --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ + --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ + --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ + --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ + --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ + --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 +charset-normalizer==3.1.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ + --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ + --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ + --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ + --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ + --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ + --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ + --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ + --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ + --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ + --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ + --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ + --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ + --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ + --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ + --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ + --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ + --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ + --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ + --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ + --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ + --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ + --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ + --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ + --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ + --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ + --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ + --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ + --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ + --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ + --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ + --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ + --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ + --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ + --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ + --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ + --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ + --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ + --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ + --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ + --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ + --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ + --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ + --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ + --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ + --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ + --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ + --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ + --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ + --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ + --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ + --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ + --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ + --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ + --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ + --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ + --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ + --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ + --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ + --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ + --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ + --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ + --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ + --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ + --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ + --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ + --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ + --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ + --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ + --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ + --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ + --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ + --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ + --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ + --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab +click==8.1.3 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 +colorama==0.4.6 ; python_version >= "3.8" and python_version < "3.12" and platform_system == "Windows" or python_version >= "3.8" and python_version < "3.12" and sys_platform == "win32" \ + --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ + --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 +cryptography==41.0.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db \ + --hash=sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a \ + --hash=sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039 \ + --hash=sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c \ + --hash=sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3 \ + --hash=sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485 \ + --hash=sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c \ + --hash=sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca \ + --hash=sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5 \ + --hash=sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5 \ + --hash=sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3 \ + --hash=sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb \ + --hash=sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43 \ + --hash=sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31 \ + --hash=sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc \ + --hash=sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b \ + --hash=sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006 \ + --hash=sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a \ + --hash=sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699 +decorator==5.1.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330 \ + --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 +elastic-transport==8.4.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:19db271ab79c9f70f8c43f8f5b5111408781a6176b54ab2e54d713b6d9ceb815 \ + --hash=sha256:b9ad708ceb7fcdbc6b30a96f886609a109f042c0b9d9f2e44403b3133ba7ff10 +elasticsearch==8.8.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:2223ee9daaa3c80c25b28ec3f7c48e66fce6b767a338333d9a81886046a07df6 \ + --hash=sha256:6878313cd598c7c90079fed1d4be72e198da35cba57f4083e6bee91f9c70b0eb +environs==9.5.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124 \ + --hash=sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9 +exceptiongroup==1.1.2 ; python_version >= "3.8" and python_version < "3.11" \ + --hash=sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5 \ + --hash=sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f +executing==1.2.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc \ + --hash=sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107 +grpcio-tools==1.56.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:02b23a12b91287ebea14b3685735d1d675e77c3cd365ec1771c3e9afbeba1ec6 \ + --hash=sha256:0a8767e4de0f573c678313c5de075ac0e163a192bb135018e45015a22f234387 \ + --hash=sha256:11cdd9cbf0c09c3a761c6f59dfd7128104be7cd393334efe386d4fc3f990ee1a \ + --hash=sha256:128bb13fe9a2681eeb08175f5fbc8e2d8953d7d0dd240e96f9244b9d2547a1aa \ + --hash=sha256:142530b9fdfabe04f0c7e5dacd45b6c419d39704fa439cc0aabf73ea0d8f916d \ + --hash=sha256:168940a4a955b6c65da978dbf62e1c36e3a311bb27f649fd201a228e2583a6d4 \ + --hash=sha256:1bd361fcc967c21672ba855fc77ea0e7afa51664033a746df96545f84edc4670 \ + --hash=sha256:21cf32ccffd4f1800b0dcdf58aa1fc7f626795c9da784c3d817c944edcf2d3ae \ + --hash=sha256:23e2ef1dc6a9bf766f091e2c52a68e54d0aff3548f94562e61fb0ac3874d514a \ + --hash=sha256:282176066fb082ad21c403b84f9d6b440a20482e6f52b83bb2adf54d6fdcae9f \ + --hash=sha256:2b7a4eb5003a29eecd71707589f93ae7e8fa2e681366a811b3f86695055d8666 \ + --hash=sha256:2c1c43d185ebf904c3deec23c36ca2ba4e95db999cf00fc8f85eda4551622a26 \ + --hash=sha256:2d1ee9e13ce135a6ed451b428ef14af131dc7df2551a5344ff4f8aee2d9fab99 \ + --hash=sha256:39f5877cea514b3da9f2683dfb3ffb45ef47b05f4ff39c287d7d61c5057f48b8 \ + --hash=sha256:3a4b06169493f9454a7f2516c5d41b566d9734e553bbc505f2a7837f7f4a2df1 \ + --hash=sha256:3de6c08b545920a39b31ed13305f946c00b19ac1b13d26119f111b6360f22ccf \ + --hash=sha256:4acdc7b957abfd76581717f0ac8e4408e0a85b7d0ac8d2cdf4d964f16926b897 \ + --hash=sha256:4d59009ed52220eb2d62f5cefa4e58dec930fb92fab27bb390c4cf1d360ac7e1 \ + --hash=sha256:5f5c416b88d76fbdb548cfee0486928748816b700ece6e591006e5b1dc67598f \ + --hash=sha256:5fd4c005a4afec16578849bc522ddf3298d6d499b3d37bf51314b086c714cdd5 \ + --hash=sha256:781cf09e4d5c9288708f6ec9c3eae64d9d5a0f4c46c7ebe70ebb7ab4f6384789 \ + --hash=sha256:79291bfb1fe5f21d99f4839f43d3c5d44c5402c830a24dbb2811d785dd21264b \ + --hash=sha256:7e6bcb194b81e372411494d8ed69fab89aa3452b7275fce4f7917fbe7b04fb72 \ + --hash=sha256:7f063443870650e55012fdb3a58ff4ce5f4042b81dad6b749333ee8146157511 \ + --hash=sha256:80d75856f8ec949847386ad2f56a460f21c63bf82ce99ca5b6aa512c0b875fb1 \ + --hash=sha256:8115b416ea2cad8a87dc3aadfaf26da684e003c3770b12e7219b462505bb5b85 \ + --hash=sha256:8870ab60f8a76b4a7e43184ee03d28112b976d83c43d41cec821f47b3a297da2 \ + --hash=sha256:8989d363ac1996238fee61c8f5663f15a8fc362cb1e758c4a686b76cb457cd70 \ + --hash=sha256:96fe2f7f5805d88cb7f2e3e3502550b2883dfab0f9efcf3cbd444942cf2ee1da \ + --hash=sha256:9cffff0b4af80285fa49637d69b69d640eb775dc74b23635e4de5faad9e7e744 \ + --hash=sha256:ac33fd2d02d24101ea389be8e05b928acb58be56403d4ebc3aecfab473fa4a25 \ + --hash=sha256:accf713f51da74b1a18aa4b31df0ab135510704661f735a938081777b79a4c25 \ + --hash=sha256:b12bb8c1d408ae40e4c806a3a8ebda2d107310e46696e1da13d0dc3f91fbd19d \ + --hash=sha256:b309659534b5d930f9ab6d521670c2dd86cb6ef7f47f37f73f96557e2ec13a49 \ + --hash=sha256:b57f7f01eafbfe3a293f2efffb675774dbe4074c4627975ec4dc4aa5766801fb \ + --hash=sha256:c43b4fe8c8df4c52d3106bba2cf427f0e46bbebb80e127fbbc3134db0fead7be \ + --hash=sha256:c62f07452dee3f1ed23aeaef821797c5e516f79535e97fe6a6b0a0ee8db1cc91 \ + --hash=sha256:cd69107705794e815a8b262722c6fea995911cb1dfc1310abf63b476165335d6 \ + --hash=sha256:cdbae7312e6d132d38ec2c1611b8cafb783e0416cc5c6deae04efde5f16fb190 \ + --hash=sha256:d9b8d1c42854d3433c058795f52b1418b53dd8c1e9811fecb1312202e803a2c5 \ + --hash=sha256:e4cb62a521efbca4cb1ad50233aa400574b3daaf6eb26707d661a0afe8191d92 \ + --hash=sha256:e59ab6c0bf4a8bb975553ad578d4425bd192775ae384f9406d77d31ad00f6efe \ + --hash=sha256:f3ab1a9fad636302f7307d143f64a9fbd11bc041652bf53bb016006e9a5ca820 \ + --hash=sha256:f7302acaa07cf4966c926fcd6a60c8d30a697f730c38168bf83e1519b464115b \ + --hash=sha256:fa6d9bdd75d3625dae38372b43696e159c10aa98719b4302b1e94f1ff7878d47 +grpcio==1.56.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:008767c0aed4899e657b50f2e0beacbabccab51359eba547f860e7c55f2be6ba \ + --hash=sha256:03a80451530fd3b8b155e0c4480434f6be669daf7ecba56f73ef98f94222ee01 \ + --hash=sha256:0409de787ebbf08c9d2bca2bcc7762c1efe72eada164af78b50567a8dfc7253c \ + --hash=sha256:14e70b4dda3183abea94c72d41d5930c333b21f8561c1904a372d80370592ef3 \ + --hash=sha256:17f47aeb9be0da5337f9ff33ebb8795899021e6c0741ee68bd69774a7804ca86 \ + --hash=sha256:187b8f71bad7d41eea15e0c9812aaa2b87adfb343895fffb704fb040ca731863 \ + --hash=sha256:1eadd6de258901929223f422ffed7f8b310c0323324caf59227f9899ea1b1674 \ + --hash=sha256:38fdf5bd0a1c754ce6bf9311a3c2c7ebe56e88b8763593316b69e0e9a56af1de \ + --hash=sha256:4241a1c2c76e748023c834995cd916570e7180ee478969c2d79a60ce007bc837 \ + --hash=sha256:437af5a7673bca89c4bc0a993382200592d104dd7bf55eddcd141cef91f40bab \ + --hash=sha256:43c50d810cc26349b093bf2cfe86756ab3e9aba3e7e681d360930c1268e1399a \ + --hash=sha256:4c08ee21b3d10315b8dc26f6c13917b20ed574cdbed2d2d80c53d5508fdcc0f2 \ + --hash=sha256:4f84a6fd4482e5fe73b297d4874b62a535bc75dc6aec8e9fe0dc88106cd40397 \ + --hash=sha256:4feee75565d1b5ab09cb3a5da672b84ca7f6dd80ee07a50f5537207a9af543a4 \ + --hash=sha256:50f4daa698835accbbcc60e61e0bc29636c0156ddcafb3891c987e533a0031ba \ + --hash=sha256:59c4e606993a47146fbeaf304b9e78c447f5b9ee5641cae013028c4cca784617 \ + --hash=sha256:5d2fc471668a7222e213f86ef76933b18cdda6a51ea1322034478df8c6519959 \ + --hash=sha256:64bd3abcf9fb4a9fa4ede8d0d34686314a7075f62a1502217b227991d9ca4245 \ + --hash=sha256:66f0369d27f4c105cd21059d635860bb2ea81bd593061c45fb64875103f40e4a \ + --hash=sha256:6b5ce42a5ebe3e04796246ba50357f1813c44a6efe17a37f8dc7a5c470377312 \ + --hash=sha256:72836b5a1d4f508ffbcfe35033d027859cc737972f9dddbe33fb75d687421e2e \ + --hash=sha256:76b6e6e1ee9bda32e6e933efd61c512e9a9f377d7c580977f090d1a9c78cca44 \ + --hash=sha256:79d4c5911d12a7aa671e5eb40cbb50a830396525014d2d6f254ea2ba180ce637 \ + --hash=sha256:7beb84ebd0a3f732625124b73969d12b7350c5d9d64ddf81ae739bbc63d5b1ed \ + --hash=sha256:8219f17baf069fe8e42bd8ca0b312b875595e43a70cabf397be4fda488e2f27d \ + --hash=sha256:83ec714bbbe9b9502177c842417fde39f7a267031e01fa3cd83f1ca49688f537 \ + --hash=sha256:8674fdbd28266d8efbcddacf4ec3643f76fe6376f73283fd63a8374c14b0ef7c \ + --hash=sha256:881575f240eb5db72ddca4dc5602898c29bc082e0d94599bf20588fb7d1ee6a0 \ + --hash=sha256:8b3b2c7b5feef90bc9a5fa1c7f97637e55ec3e76460c6d16c3013952ee479cd9 \ + --hash=sha256:991224fd485e088d3cb5e34366053691a4848a6b7112b8f5625a411305c26691 \ + --hash=sha256:aa08affbf672d051cd3da62303901aeb7042a2c188c03b2c2a2d346fc5e81c14 \ + --hash=sha256:b1f4b6f25a87d80b28dd6d02e87d63fe1577fe6d04a60a17454e3f8077a38279 \ + --hash=sha256:b4638a796778329cc8e142e4f57c705adb286b3ba64e00b0fa91eeb919611be8 \ + --hash=sha256:bd55f743e654fb050c665968d7ec2c33f03578a4bbb163cfce38024775ff54cc \ + --hash=sha256:c0bc9dda550785d23f4f025be614b7faa8d0293e10811f0f8536cf50435b7a30 \ + --hash=sha256:c2148170e01d464d41011a878088444c13413264418b557f0bdcd1bf1b674a0e \ + --hash=sha256:c243b158dd7585021d16c50498c4b2ec0a64a6119967440c5ff2d8c89e72330e \ + --hash=sha256:c63bc5ac6c7e646c296fed9139097ae0f0e63f36f0864d7ce431cce61fe0118a \ + --hash=sha256:c6f36621aabecbaff3e70c4d1d924c76c8e6a7ffec60c331893640a4af0a8037 \ + --hash=sha256:d596408bab632ec7b947761e83ce6b3e7632e26b76d64c239ba66b554b7ee286 \ + --hash=sha256:defdd14b518e6e468466f799aaa69db0355bca8d3a5ea75fb912d28ba6f8af31 \ + --hash=sha256:e2db108b4c8e29c145e95b0226973a66d73ae3e3e7fae00329294af4e27f1c42 \ + --hash=sha256:f92a99ab0c7772fb6859bf2e4f44ad30088d18f7c67b83205297bfb229e0d2cf \ + --hash=sha256:fb34ace11419f1ae321c36ccaa18d81cd3f20728cd191250be42949d6845bb2d \ + --hash=sha256:fdc3a895791af4addbb826808d4c9c35917c59bb5c430d729f44224e51c92d61 +h11==0.14.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ + --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 +h2==4.1.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d \ + --hash=sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb +h5py==3.9.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:12aa556d540f11a2cae53ea7cfb94017353bd271fb3962e1296b342f6550d1b8 \ + --hash=sha256:23e74b878bbe1653ab34ca49b83cac85529cd0b36b9d625516c5830cc5ca2eac \ + --hash=sha256:36408f8c62f50007d14e000f9f3acf77e103b9e932c114cbe52a3089e50ebf94 \ + --hash=sha256:3f457089c5d524b7998e3649bc63240679b8fb0a3859ea53bbb06841f3d755f1 \ + --hash=sha256:54f01202cdea754ab4227dd27014bdbd561a4bbe4b631424fd812f7c2ce9c6ac \ + --hash=sha256:551e358db05a874a0f827b22e95b30092f2303edc4b91bb62ad2f10e0236e1a0 \ + --hash=sha256:64acceaf6aff92af091a4b83f6dee3cf8d3061f924a6bb3a33eb6c4658a8348b \ + --hash=sha256:6822a814b9d8b8363ff102f76ea8d026f0ca25850bb579d85376029ee3e73b93 \ + --hash=sha256:78e44686334cbbf2dd21d9df15823bc38663f27a3061f6a032c68a3e30c47bf7 \ + --hash=sha256:79bbca34696c6f9eeeb36a91776070c49a060b2879828e2c8fa6c58b8ed10dd1 \ + --hash=sha256:804c7fb42a34c8ab3a3001901c977a5c24d2e9c586a0f3e7c0a389130b4276fc \ + --hash=sha256:8d9492391ff5c3c80ec30ae2fe82a3f0efd1e750833739c25b0d090e3be1b095 \ + --hash=sha256:95f7a745efd0d56076999b52e8da5fad5d30823bac98b59c68ae75588d09991a \ + --hash=sha256:9da9e7e63376c32704e37ad4cea2dceae6964cee0d8515185b3ab9cbd6b947bc \ + --hash=sha256:a4e20897c88759cbcbd38fb45b507adc91af3e0f67722aa302d71f02dd44d286 \ + --hash=sha256:a6284061f3214335e1eec883a6ee497dbe7a79f19e6a57fed2dd1f03acd5a8cb \ + --hash=sha256:d97409e17915798029e297a84124705c8080da901307ea58f29234e09b073ddc \ + --hash=sha256:dbf5225543ca35ce9f61c950b73899a82be7ba60d58340e76d0bd42bf659235a \ + --hash=sha256:e604db6521c1e367c6bd7fad239c847f53cc46646f2d2651372d05ae5e95f817 \ + --hash=sha256:eb7bdd5e601dd1739698af383be03f3dad0465fe67184ebd5afca770f50df9d6 \ + --hash=sha256:f68b41efd110ce9af1cbe6fa8af9f4dcbadace6db972d30828b911949e28fadd +hpack==4.0.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c \ + --hash=sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095 +httpcore==0.17.2 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:125f8375ab60036db632f34f4b627a9ad085048eef7cb7d2616fea0f739f98af \ + --hash=sha256:5581b9c12379c4288fe70f43c710d16060c10080617001e6b22a3b6dbcbefd36 +httpx[http2]==0.24.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd \ + --hash=sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd +hyperframe==6.0.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15 \ + --hash=sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914 +idna==3.4 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 +ipdb==0.13.13 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:45529994741c4ab6d2388bfa5d7b725c2cf7fe9deffabdb8a6113aa5ed449ed4 \ + --hash=sha256:e3ac6018ef05126d442af680aad863006ec19d02290561ac88b8b1c0b0cfc726 +ipython==8.12.2 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea \ + --hash=sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc +jedi==0.18.2 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e \ + --hash=sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612 +jsons==1.6.3 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:cd5815c7c6790ae11c70ad9978e0aa850d0d08a643a5105cc604eac8b29a30d7 \ + --hash=sha256:f07f8919316f72a3843c7ca6cc6c900513089f10092626934d1bfe4b5cf15401 +marshmallow==3.19.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78 \ + --hash=sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b +matplotlib-inline==0.1.6 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311 \ + --hash=sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304 +numpy==1.24.4 ; python_version < "3.12" and python_version >= "3.8" \ + --hash=sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f \ + --hash=sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61 \ + --hash=sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7 \ + --hash=sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400 \ + --hash=sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef \ + --hash=sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2 \ + --hash=sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d \ + --hash=sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc \ + --hash=sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835 \ + --hash=sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706 \ + --hash=sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5 \ + --hash=sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4 \ + --hash=sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6 \ + --hash=sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463 \ + --hash=sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a \ + --hash=sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f \ + --hash=sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e \ + --hash=sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e \ + --hash=sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694 \ + --hash=sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8 \ + --hash=sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64 \ + --hash=sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d \ + --hash=sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc \ + --hash=sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254 \ + --hash=sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2 \ + --hash=sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1 \ + --hash=sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810 \ + --hash=sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9 +opensearch-py==2.2.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:109fe8d2e1e8f419a22358eb901025f51e6ad2f50014c8962e23796b2a23cb67 \ + --hash=sha256:595dcebe42e21cdf945add0b5dbaecccace1a8a5ba65d60314813767b564263c +packaging==23.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ + --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f +pandas==2.0.3 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682 \ + --hash=sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc \ + --hash=sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b \ + --hash=sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089 \ + --hash=sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5 \ + --hash=sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26 \ + --hash=sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210 \ + --hash=sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b \ + --hash=sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641 \ + --hash=sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd \ + --hash=sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78 \ + --hash=sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b \ + --hash=sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e \ + --hash=sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061 \ + --hash=sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0 \ + --hash=sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e \ + --hash=sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8 \ + --hash=sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d \ + --hash=sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0 \ + --hash=sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c \ + --hash=sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183 \ + --hash=sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df \ + --hash=sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8 \ + --hash=sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f \ + --hash=sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02 +parso==0.8.3 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ + --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 +pexpect==4.8.0 ; python_version >= "3.8" and python_version < "3.12" and sys_platform != "win32" \ + --hash=sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937 \ + --hash=sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c +pickleshare==0.7.5 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca \ + --hash=sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56 +portalocker==2.7.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51 \ + --hash=sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983 +prompt-toolkit==3.0.39 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac \ + --hash=sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88 +protobuf==4.23.3 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:0149053336a466e3e0b040e54d0b615fc71de86da66791c592cc3c8d18150bf8 \ + --hash=sha256:08fe19d267608d438aa37019236db02b306e33f6b9902c3163838b8e75970223 \ + --hash=sha256:29660574cd769f2324a57fb78127cda59327eb6664381ecfe1c69731b83e8288 \ + --hash=sha256:2991f5e7690dab569f8f81702e6700e7364cc3b5e572725098215d3da5ccc6ac \ + --hash=sha256:3b01a5274ac920feb75d0b372d901524f7e3ad39c63b1a2d55043f3887afe0c1 \ + --hash=sha256:3bcbeb2bf4bb61fe960dd6e005801a23a43578200ea8ceb726d1f6bd0e562ba1 \ + --hash=sha256:447b9786ac8e50ae72cae7a2eec5c5df6a9dbf9aa6f908f1b8bda6032644ea62 \ + --hash=sha256:514b6bbd54a41ca50c86dd5ad6488afe9505901b3557c5e0f7823a0cf67106fb \ + --hash=sha256:5cb9e41188737f321f4fce9a4337bf40a5414b8d03227e1d9fbc59bc3a216e35 \ + --hash=sha256:7a92beb30600332a52cdadbedb40d33fd7c8a0d7f549c440347bc606fb3fe34b \ + --hash=sha256:84ea0bd90c2fdd70ddd9f3d3fc0197cc24ecec1345856c2b5ba70e4d99815359 \ + --hash=sha256:aca6e86a08c5c5962f55eac9b5bd6fce6ed98645d77e8bfc2b952ecd4a8e4f6a \ + --hash=sha256:cc14358a8742c4e06b1bfe4be1afbdf5c9f6bd094dff3e14edb78a1513893ff5 +ptyprocess==0.7.0 ; python_version >= "3.8" and python_version < "3.12" and sys_platform != "win32" \ + --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \ + --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 +pure-eval==0.2.2 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350 \ + --hash=sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3 +pycparser==2.21 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ + --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 +pydantic==1.10.10 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:20a3b30fd255eeeb63caa9483502ba96b7795ce5bf895c6a179b3d909d9f53a6 \ + --hash=sha256:2b71bd504d1573b0b722ae536e8ffb796bedeef978979d076bf206e77dcc55a5 \ + --hash=sha256:3403a090db45d4027d2344859d86eb797484dfda0706cf87af79ace6a35274ef \ + --hash=sha256:37ebddef68370e6f26243acc94de56d291e01227a67b2ace26ea3543cf53dd5f \ + --hash=sha256:3b8d5bd97886f9eb59260594207c9f57dce14a6f869c6ceea90188715d29921a \ + --hash=sha256:409b810f387610cc7405ab2fa6f62bdf7ea485311845a242ebc0bd0496e7e5ac \ + --hash=sha256:4870f13a4fafd5bc3e93cff3169222534fad867918b188e83ee0496452978437 \ + --hash=sha256:566a04ba755e8f701b074ffb134ddb4d429f75d5dced3fbd829a527aafe74c71 \ + --hash=sha256:67b3714b97ff84b2689654851c2426389bcabfac9080617bcf4306c69db606f6 \ + --hash=sha256:6dab5219659f95e357d98d70577b361383057fb4414cfdb587014a5f5c595f7b \ + --hash=sha256:748d10ab6089c5d196e1c8be9de48274f71457b01e59736f7a09c9dc34f51887 \ + --hash=sha256:762aa598f79b4cac2f275d13336b2dd8662febee2a9c450a49a2ab3bec4b385f \ + --hash=sha256:7a26841be620309a9697f5b1ffc47dce74909e350c5315ccdac7a853484d468a \ + --hash=sha256:7a7db03339893feef2092ff7b1afc9497beed15ebd4af84c3042a74abce02d48 \ + --hash=sha256:7aa75d1bd9cc275cf9782f50f60cddaf74cbaae19b6ada2a28e737edac420312 \ + --hash=sha256:86936c383f7c38fd26d35107eb669c85d8f46dfceae873264d9bab46fe1c7dde \ + --hash=sha256:88546dc10a40b5b52cae87d64666787aeb2878f9a9b37825aedc2f362e7ae1da \ + --hash=sha256:8c40964596809eb616d94f9c7944511f620a1103d63d5510440ed2908fc410af \ + --hash=sha256:990027e77cda6072a566e433b6962ca3b96b4f3ae8bd54748e9d62a58284d9d7 \ + --hash=sha256:9965e49c6905840e526e5429b09e4c154355b6ecc0a2f05492eda2928190311d \ + --hash=sha256:9f62a727f5c590c78c2d12fda302d1895141b767c6488fe623098f8792255fe5 \ + --hash=sha256:a2d5be50ac4a0976817144c7d653e34df2f9436d15555189f5b6f61161d64183 \ + --hash=sha256:a5939ec826f7faec434e2d406ff5e4eaf1716eb1f247d68cd3d0b3612f7b4c8a \ + --hash=sha256:aac218feb4af73db8417ca7518fb3bade4534fcca6e3fb00f84966811dd94450 \ + --hash=sha256:adad1ee4ab9888f12dac2529276704e719efcf472e38df7813f5284db699b4ec \ + --hash=sha256:b69f9138dec566962ec65623c9d57bee44412d2fc71065a5f3ebb3820bdeee96 \ + --hash=sha256:c41bbaae89e32fc582448e71974de738c055aef5ab474fb25692981a08df808a \ + --hash=sha256:c62376890b819bebe3c717a9ac841a532988372b7e600e76f75c9f7c128219d5 \ + --hash=sha256:ce937a2a2c020bcad1c9fde02892392a1123de6dda906ddba62bfe8f3e5989a2 \ + --hash=sha256:db4c7f7e60ca6f7d6c1785070f3e5771fcb9b2d88546e334d2f2c3934d949028 \ + --hash=sha256:e0014e29637125f4997c174dd6167407162d7af0da73414a9340461ea8573252 \ + --hash=sha256:e088e3865a2270ecbc369924cd7d9fbc565667d9158e7f304e4097ebb9cf98dd \ + --hash=sha256:ea9eebc2ebcba3717e77cdeee3f6203ffc0e78db5f7482c68b1293e8cc156e5e \ + --hash=sha256:edfdf0a5abc5c9bf2052ebaec20e67abd52e92d257e4f2d30e02c354ed3e6030 \ + --hash=sha256:f3d4ee957a727ccb5a36f1b0a6dbd9fad5dedd2a41eada99a8df55c12896e18d \ + --hash=sha256:f79db3652ed743309f116ba863dae0c974a41b688242482638b892246b7db21d +pygments==2.15.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c \ + --hash=sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1 +pymilvus==2.2.13 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:72da36cb5f4f84d7a8307202fcaa9a7fc4497d28d2d2235045ba93a430691ef1 \ + --hash=sha256:ac991863bd63e860c1210d096695297175c6ed09f4de762cf42394cb5aecd1f6 +python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ + --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 +python-dotenv==1.0.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba \ + --hash=sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a +pytz==2023.3 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588 \ + --hash=sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb +pywin32==306 ; python_version >= "3.8" and python_version < "3.12" and platform_system == "Windows" \ + --hash=sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d \ + --hash=sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65 \ + --hash=sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e \ + --hash=sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b \ + --hash=sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4 \ + --hash=sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040 \ + --hash=sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a \ + --hash=sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36 \ + --hash=sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8 \ + --hash=sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e \ + --hash=sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802 \ + --hash=sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a \ + --hash=sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407 \ + --hash=sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0 +qdrant-client==1.3.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:9640855585d1f532094e342f07e0f2ef00652a60fc5d903c92ca3989a1e86318 \ + --hash=sha256:a999358b10e611d71b4b04c6ded36a6cfc963e56b4c3f99d9c1a603ca524a82e +redis==4.6.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:585dc516b9eb042a619ef0a39c3d7d55fe81bdb4df09a52c9cdde0d07bf1aa7d \ + --hash=sha256:e2b03db868160ee4591de3cb90d40ebb50a90dd302138775937f6a42b7ed183c +requests==2.31.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ + --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 +setuptools==68.0.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ + --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 +six==1.16.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 +sniffio==1.3.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ + --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 +stack-data==0.6.2 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815 \ + --hash=sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8 +stopit==1.1.2 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:f7f39c583fd92027bd9d06127b259aee7a5b7945c1f1fa56263811e1e766996d +tomli==2.0.1 ; python_version >= "3.8" and python_version < "3.11" \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f +tqdm==4.65.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5 \ + --hash=sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671 +traitlets==5.9.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8 \ + --hash=sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9 +typer==0.6.1 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:2d5720a5e63f73eaf31edaa15f6ab87f35f0690f8ca233017d7d23d743a91d73 \ + --hash=sha256:54b19e5df18654070a82f8c2aa1da456a4ac16a2a83e6dcd9f170e291c56338e +typing-extensions==4.5.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ + --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 +typish==1.9.3 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:03cfee5e6eb856dbf90244e18f4e4c41044c8790d5779f4e775f63f982e2f896 +tzdata==2023.3 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a \ + --hash=sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda +ujson==5.8.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ + --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ + --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ + --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ + --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ + --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ + --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ + --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ + --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ + --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ + --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ + --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ + --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ + --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ + --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ + --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ + --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ + --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ + --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ + --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ + --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ + --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ + --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ + --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ + --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ + --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ + --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ + --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ + --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ + --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ + --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ + --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ + --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ + --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ + --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ + --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ + --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ + --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ + --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ + --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ + --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ + --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ + --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ + --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ + --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ + --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ + --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ + --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ + --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ + --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ + --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ + --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ + --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ + --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ + --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ + --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ + --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ + --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ + --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ + --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ + --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c +urllib3==1.26.16 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ + --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 +validators==0.20.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a +wcwidth==0.2.6 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e \ + --hash=sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0 +weaviate-client==3.21.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:420444ded7106fb000f4f8b2321b5f5fa2387825aa7a303d702accf61026f9d2 \ + --hash=sha256:ec94ac554883c765e94da8b2947c4f0fa4a0378ed3bbe9f3653df3a5b1745a6d From 1e8e7196a2438a0885df846bb33d8a0929ea78e5 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 4 Jul 2023 22:18:02 +0100 Subject: [PATCH 002/209] Included batch_size and parallel info in upload results --- engine/base_client/upload.py | 2 ++ engine/clients/redis/configure.py | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/engine/base_client/upload.py b/engine/base_client/upload.py index 8ce0fb28..b70b8e6a 100644 --- a/engine/base_client/upload.py +++ b/engine/base_client/upload.py @@ -77,6 +77,8 @@ def upload( "upload_time": upload_time, "total_time": total_time, "latencies": latencies, + "parallel": parallel, + "batch_size": batch_size, } @classmethod diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 6bd49d2b..ae9fa1f9 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -31,7 +31,8 @@ def clean(self): try: index.dropindex(delete_documents=True) except redis.ResponseError as e: - print(e) + if "Unknown Index name" not in e.__str__(): + print(e) def recreate(self, dataset: Dataset, collection_params): self.clean() From 084a68af0e6421bfc4c270297d1b518c5edcd5f8 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 5 Jul 2023 13:49:06 +0100 Subject: [PATCH 003/209] Enable passing env variables for url and api_key qdrant parameters --- engine/clients/qdrant/config.py | 2 ++ engine/clients/qdrant/configure.py | 8 +++++--- engine/clients/qdrant/search.py | 25 ++++++++++++++++++------- engine/clients/qdrant/upload.py | 7 +++++-- 4 files changed, 30 insertions(+), 12 deletions(-) diff --git a/engine/clients/qdrant/config.py b/engine/clients/qdrant/config.py index 31d34007..aa5afeeb 100644 --- a/engine/clients/qdrant/config.py +++ b/engine/clients/qdrant/config.py @@ -1,3 +1,5 @@ import os QDRANT_COLLECTION_NAME = os.getenv("QDRANT_COLLECTION_NAME", "benchmark") +QDRANT_API_KEY = os.getenv("QDRANT_API_KEY", None) +QDRANT_URL = os.getenv("QDRANT_URL", None) diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index 824d8058..6c3d7762 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, QDRANT_URL class QdrantConfigurator(BaseConfigurator): @@ -23,8 +23,10 @@ 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) + if QDRANT_URL is None: + self.client = QdrantClient(host=host, api_key=QDRANT_API_KEY, **connection_params) + else: + self.client = QdrantClient(url=QDRANT_URL, 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 06d4f0ab..34d5419c 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -6,7 +6,7 @@ from qdrant_client.http import models as rest 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, QDRANT_URL from engine.clients.qdrant.parser import QdrantConditionParser @@ -17,12 +17,23 @@ class QdrantSearcher(BaseSearcher): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): - cls.client: QdrantClient = QdrantClient( - host, - prefer_grpc=True, - limits=httpx.Limits(max_connections=None, max_keepalive_connections=0), - **connection_params - ) + if QDRANT_URL is None: + cls.client: QdrantClient = QdrantClient( + host, + api_key=QDRANT_API_KEY, + prefer_grpc=True, + limits=httpx.Limits(max_connections=None, max_keepalive_connections=0), + **connection_params + ) + else: + cls.client: QdrantClient = QdrantClient( + url=QDRANT_URL, + api_key=QDRANT_API_KEY, + prefer_grpc=True, + limits=httpx.Limits(max_connections=None, max_keepalive_connections=0), + **connection_params + ) + cls.search_params = search_params # Uncomment for gRPC diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index 7e2511cc..173b2a4d 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -5,7 +5,7 @@ from qdrant_client.http.models import Batch, CollectionStatus 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, QDRANT_URL class QdrantUploader(BaseUploader): @@ -14,7 +14,10 @@ class QdrantUploader(BaseUploader): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - cls.client = QdrantClient(host=host, prefer_grpc=True, **connection_params) + if QDRANT_URL is None: + cls.client = QdrantClient(host=host, api_key=QDRANT_API_KEY, prefer_grpc=True, **connection_params) + else: + cls.client = QdrantClient(url=QDRANT_URL, api_key=QDRANT_API_KEY, prefer_grpc=True, **connection_params) cls.upload_params = upload_params @classmethod From d890fa138637c0a711f040c8f29547e0b4ffcb53 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 5 Jul 2023 14:01:45 +0100 Subject: [PATCH 004/209] Print ef info if available in config --- engine/base_client/client.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 171a6e47..d838e378 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -83,7 +83,9 @@ def run_experiment( print("Experiment stage: Search") for search_id, searcher in enumerate(self.searchers): search_params = {**searcher.search_params} - ef = search_params["search_params"]["ef"] + ef = "n/a" + if "ef" in search_params["search_params"]: + ef = search_params["search_params"]["ef"] parallel = search_params["parallel"] if "parallel" in search_params else 1 print(f"\tef runtime: {ef}; #clients {parallel}") search_stats = searcher.search_all( From dcdfe21f2ce7ebe6da88e310dc53e11d0f0005eb Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 5 Jul 2023 14:14:41 +0100 Subject: [PATCH 005/209] waiting on full index before return qdrant --- engine/clients/qdrant/upload.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index 173b2a4d..d8c5d2d1 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -45,13 +45,20 @@ def wait_collection_green(cls): while True: time.sleep(wait_time) total += wait_time + collection_info = cls.client.get_collection(QDRANT_COLLECTION_NAME) if collection_info.status != CollectionStatus.GREEN: continue time.sleep(wait_time) collection_info = cls.client.get_collection(QDRANT_COLLECTION_NAME) if collection_info.status == CollectionStatus.GREEN: - break + vectors_count = collection_info.vectors_count + indexed_vectors_count = collection_info.indexed_vectors_count + if vectors_count > indexed_vectors_count: + print(f"waiting on fully indexed collection. vectors_count {vectors_count} != indexed_vectors_count {indexed_vectors_count}") + continue + else: + break return total @classmethod From a1ba1b144e84ed827ccc53d4df867894e99624b1 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 5 Jul 2023 15:09:06 +0100 Subject: [PATCH 006/209] Revert "waiting on full index before return qdrant" This reverts commit dcdfe21f2ce7ebe6da88e310dc53e11d0f0005eb. --- engine/clients/qdrant/upload.py | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index d8c5d2d1..173b2a4d 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -45,20 +45,13 @@ def wait_collection_green(cls): while True: time.sleep(wait_time) total += wait_time - collection_info = cls.client.get_collection(QDRANT_COLLECTION_NAME) if collection_info.status != CollectionStatus.GREEN: continue time.sleep(wait_time) collection_info = cls.client.get_collection(QDRANT_COLLECTION_NAME) if collection_info.status == CollectionStatus.GREEN: - vectors_count = collection_info.vectors_count - indexed_vectors_count = collection_info.indexed_vectors_count - if vectors_count > indexed_vectors_count: - print(f"waiting on fully indexed collection. vectors_count {vectors_count} != indexed_vectors_count {indexed_vectors_count}") - continue - else: - break + break return total @classmethod From 87b03303c8ebb15af0f8d3e73e420e9e5e8bd87d Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 10 Jul 2023 16:00:45 +0100 Subject: [PATCH 007/209] Added REDIS_QUERY_TIMEOUT config parameter --- engine/clients/redis/config.py | 2 + engine/clients/redis/search.py | 4 +- poetry.lock | 98 +++++++++- pyproject.toml | 2 +- requirements.txt | 328 ++++++++++++++++----------------- 5 files changed, 261 insertions(+), 173 deletions(-) diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index 3dfb8df9..f61e242c 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -2,3 +2,5 @@ REDIS_PORT = int(os.getenv("REDIS_PORT",6379)) REDIS_AUTH = os.getenv("REDIS_AUTH",None) REDIS_USER = os.getenv("REDIS_USER",None) +# 90 seconds timeout +REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT",90*1000)) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 16739429..1c7817bd 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -5,7 +5,7 @@ from redis.commands.search.query import Query from engine.base_client.search import BaseSearcher -from engine.clients.redis.config import REDIS_PORT +from engine.clients.redis.config import REDIS_PORT, REDIS_QUERY_TIMEOUT from engine.clients.redis.parser import RedisConditionParser @@ -36,7 +36,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: .paging(0, top) .return_fields("vector_score") .dialect(2) - .timeout(0) + .timeout(REDIS_QUERY_TIMEOUT) ) params_dict = { "vec_param": np.array(vector).astype(np.float32).tobytes(), diff --git a/poetry.lock b/poetry.lock index 9a8c8575..65734088 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "anyio" version = "3.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -25,6 +26,7 @@ trio = ["trio (<0.22)"] name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" +category = "main" optional = false python-versions = "*" files = [ @@ -36,6 +38,7 @@ files = [ name = "asttokens" version = "2.2.1" description = "Annotate AST trees with source code positions" +category = "main" optional = false python-versions = "*" files = [ @@ -53,6 +56,7 @@ test = ["astroid", "pytest"] name = "async-timeout" version = "4.0.2" description = "Timeout context manager for asyncio programs" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -64,6 +68,7 @@ files = [ name = "authlib" version = "1.2.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +category = "main" optional = false python-versions = "*" files = [ @@ -78,6 +83,7 @@ cryptography = ">=3.2" name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" +category = "main" optional = false python-versions = "*" files = [ @@ -89,6 +95,7 @@ files = [ name = "certifi" version = "2023.5.7" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -100,6 +107,7 @@ files = [ name = "cffi" version = "1.15.1" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = "*" files = [ @@ -176,6 +184,7 @@ pycparser = "*" name = "cfgv" version = "3.3.1" description = "Validate configuration and produce human readable error messages." +category = "dev" optional = false python-versions = ">=3.6.1" files = [ @@ -187,6 +196,7 @@ files = [ name = "charset-normalizer" version = "3.1.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -271,6 +281,7 @@ files = [ name = "click" version = "8.1.3" description = "Composable command line interface toolkit" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -285,6 +296,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -296,6 +308,7 @@ files = [ name = "cryptography" version = "41.0.1" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -337,6 +350,7 @@ test-randomorder = ["pytest-randomly"] name = "decorator" version = "5.1.1" description = "Decorators for Humans" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -348,6 +362,7 @@ files = [ name = "distlib" version = "0.3.6" description = "Distribution utilities" +category = "dev" optional = false python-versions = "*" files = [ @@ -359,6 +374,7 @@ files = [ name = "elastic-transport" version = "8.4.0" description = "Transport classes and utilities shared among Python Elastic client libraries" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -377,6 +393,7 @@ develop = ["aiohttp", "mock", "pytest", "pytest-asyncio", "pytest-cov", "pytest- name = "elasticsearch" version = "8.8.0" description = "Python client for Elasticsearch" +category = "main" optional = false python-versions = ">=3.6, <4" files = [ @@ -395,6 +412,7 @@ requests = ["requests (>=2.4.0,<3.0.0)"] name = "environs" version = "9.5.0" description = "simplified environment variable parsing" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -416,6 +434,7 @@ tests = ["dj-database-url", "dj-email-url", "django-cache-url", "pytest"] name = "exceptiongroup" version = "1.1.1" description = "Backport of PEP 654 (exception groups)" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -430,6 +449,7 @@ test = ["pytest (>=6)"] name = "executing" version = "1.2.0" description = "Get the currently executing AST node of a frame, and other information" +category = "main" optional = false python-versions = "*" files = [ @@ -444,6 +464,7 @@ tests = ["asttokens", "littleutils", "pytest", "rich"] name = "filelock" version = "3.12.2" description = "A platform independent file lock." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -459,6 +480,7 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p name = "grpcio" version = "1.53.0" description = "HTTP/2-based RPC framework" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -516,6 +538,7 @@ protobuf = ["grpcio-tools (>=1.53.0)"] name = "grpcio-tools" version = "1.53.0" description = "Protobuf code generator for gRPC" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -575,6 +598,7 @@ setuptools = "*" name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -586,6 +610,7 @@ files = [ name = "h2" version = "4.1.0" description = "HTTP/2 State-Machine based protocol implementation" +category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -601,6 +626,7 @@ hyperframe = ">=6.0,<7" name = "h5py" version = "3.9.0" description = "Read and write HDF5 files from Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -634,6 +660,7 @@ numpy = ">=1.17.3" name = "hpack" version = "4.0.0" description = "Pure-Python HPACK header compression" +category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -645,6 +672,7 @@ files = [ name = "httpcore" version = "0.17.2" description = "A minimal low-level HTTP client." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -656,16 +684,17 @@ files = [ anyio = ">=3.0,<5.0" certifi = "*" h11 = ">=0.13,<0.15" -sniffio = "==1.*" +sniffio = ">=1.0.0,<2.0.0" [package.extras] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] [[package]] name = "httpx" version = "0.24.1" description = "The next generation HTTP client." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -682,14 +711,15 @@ sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] +socks = ["socksio (>=1.0.0,<2.0.0)"] [[package]] name = "hyperframe" version = "6.0.1" description = "HTTP/2 framing layer for Python" +category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -701,6 +731,7 @@ files = [ name = "identify" version = "2.5.24" description = "File identification library for Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -715,6 +746,7 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -726,6 +758,7 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -737,6 +770,7 @@ files = [ name = "ipdb" version = "0.13.13" description = "IPython-enabled pdb" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -753,6 +787,7 @@ tomli = {version = "*", markers = "python_version > \"3.6\" and python_version < name = "ipython" version = "8.12.2" description = "IPython: Productive Interactive Computing" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -792,6 +827,7 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa name = "jedi" version = "0.18.2" description = "An autocompletion tool for Python that can be used for text editors." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -811,6 +847,7 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jsons" version = "1.6.3" description = "For serializing Python objects to JSON (dicts) and back" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -828,6 +865,7 @@ test = ["attrs", "codecov", "coverage", "dataclasses", "pytest", "scons", "tzdat name = "marshmallow" version = "3.19.0" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -848,6 +886,7 @@ tests = ["pytest", "pytz", "simplejson"] name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -862,6 +901,7 @@ traitlets = "*" name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" +category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -876,6 +916,7 @@ setuptools = "*" name = "numpy" version = "1.24.4" description = "Fundamental package for array computing in Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -913,6 +954,7 @@ files = [ name = "opensearch-py" version = "2.2.0" description = "Python client for OpenSearch" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" files = [ @@ -937,6 +979,7 @@ kerberos = ["requests-kerberos"] name = "packaging" version = "23.1" description = "Core utilities for Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -948,6 +991,7 @@ files = [ name = "pandas" version = "2.0.2" description = "Powerful data structures for data analysis, time series, and statistics" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1015,6 +1059,7 @@ xml = ["lxml (>=4.6.3)"] name = "parso" version = "0.8.3" description = "A Python Parser" +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1030,6 +1075,7 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." +category = "main" optional = false python-versions = "*" files = [ @@ -1044,6 +1090,7 @@ ptyprocess = ">=0.5" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" +category = "main" optional = false python-versions = "*" files = [ @@ -1055,6 +1102,7 @@ files = [ name = "platformdirs" version = "3.8.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1070,6 +1118,7 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.3.1)", "pytest- name = "pluggy" version = "1.2.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1085,6 +1134,7 @@ testing = ["pytest", "pytest-benchmark"] name = "portalocker" version = "2.7.0" description = "Wraps the portalocker recipe for easy usage" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1104,6 +1154,7 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1122,6 +1173,7 @@ virtualenv = ">=20.10.0" name = "prompt-toolkit" version = "3.0.38" description = "Library for building powerful interactive command lines in Python" +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -1136,6 +1188,7 @@ wcwidth = "*" name = "protobuf" version = "4.23.3" description = "" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1158,6 +1211,7 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" +category = "main" optional = false python-versions = "*" files = [ @@ -1169,6 +1223,7 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" +category = "main" optional = false python-versions = "*" files = [ @@ -1183,6 +1238,7 @@ tests = ["pytest"] name = "pycparser" version = "2.21" description = "C parser in Python" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1194,6 +1250,7 @@ files = [ name = "pydantic" version = "1.10.9" description = "Data validation and settings management using python type hints" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1246,6 +1303,7 @@ email = ["email-validator (>=1.0.3)"] name = "pygments" version = "2.15.1" description = "Pygments is a syntax highlighting package written in Python." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1260,6 +1318,7 @@ plugins = ["importlib-metadata"] name = "pymilvus" version = "2.2.12" description = "Python Sdk for Milvus" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1279,6 +1338,7 @@ ujson = ">=2.0.0" name = "pytest" version = "7.4.0" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1301,6 +1361,7 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" +category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -1315,6 +1376,7 @@ six = ">=1.5" name = "python-dotenv" version = "1.0.0" description = "Read key-value pairs from a .env file and set them as environment variables" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1329,6 +1391,7 @@ cli = ["click (>=5.0)"] name = "pytz" version = "2023.3" description = "World timezone definitions, modern and historical" +category = "main" optional = false python-versions = "*" files = [ @@ -1340,6 +1403,7 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" +category = "main" optional = false python-versions = "*" files = [ @@ -1363,6 +1427,7 @@ files = [ name = "pyyaml" version = "6.0" description = "YAML parser and emitter for Python" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1412,6 +1477,7 @@ files = [ name = "qdrant-client" version = "1.3.1" description = "Client library for the Qdrant vector search engine" +category = "main" optional = false python-versions = ">=3.7,<3.12" files = [ @@ -1433,6 +1499,7 @@ urllib3 = ">=1.26.14,<2.0.0" name = "redis" version = "4.6.0" description = "Python client for Redis database and key-value store" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1451,6 +1518,7 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1472,6 +1540,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "setuptools" version = "68.0.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1488,6 +1557,7 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs ( name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -1499,6 +1569,7 @@ files = [ name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1510,6 +1581,7 @@ files = [ name = "stack-data" version = "0.6.2" description = "Extract data from python stack frames and tracebacks for informative displays" +category = "main" optional = false python-versions = "*" files = [ @@ -1529,6 +1601,7 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "stopit" version = "1.1.2" description = "Timeout control decorator and context managers, raise any exception in another thread" +category = "main" optional = false python-versions = "*" files = [ @@ -1539,6 +1612,7 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1550,6 +1624,7 @@ files = [ name = "tqdm" version = "4.65.0" description = "Fast, Extensible Progress Meter" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1570,6 +1645,7 @@ telegram = ["requests"] name = "traitlets" version = "5.9.0" description = "Traitlets Python configuration system" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1585,6 +1661,7 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"] name = "typer" version = "0.6.1" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1605,6 +1682,7 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6. name = "typing-extensions" version = "4.5.0" description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1616,6 +1694,7 @@ files = [ name = "typish" version = "1.9.3" description = "Functionality for types" +category = "main" optional = false python-versions = "*" files = [ @@ -1629,6 +1708,7 @@ test = ["codecov", "coverage", "mypy", "nptyping (>=1.3.0)", "numpy", "pycodesty name = "tzdata" version = "2023.3" description = "Provider of IANA time zone data" +category = "main" optional = false python-versions = ">=2" files = [ @@ -1640,6 +1720,7 @@ files = [ name = "ujson" version = "5.8.0" description = "Ultra fast JSON encoder and decoder for Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1710,6 +1791,7 @@ files = [ name = "urllib3" version = "1.26.16" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" files = [ @@ -1726,6 +1808,7 @@ socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] name = "validators" version = "0.20.0" description = "Python Data Validation for Humans™." +category = "main" optional = false python-versions = ">=3.4" files = [ @@ -1742,6 +1825,7 @@ test = ["flake8 (>=2.4.0)", "isort (>=4.2.2)", "pytest (>=2.2.3)"] name = "virtualenv" version = "20.23.1" description = "Virtual Python Environment builder" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1762,6 +1846,7 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "wcwidth" version = "0.2.6" description = "Measures the displayed width of unicode strings in a terminal" +category = "main" optional = false python-versions = "*" files = [ @@ -1773,6 +1858,7 @@ files = [ name = "weaviate-client" version = "3.21.0" description = "A python native Weaviate client" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1792,4 +1878,4 @@ grpc = ["grpcio", "grpcio-tools"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "e1735c7182c7aa6f021f5eebda828a33bf144f28010558d46eb8bbc9f3ba4a83" +content-hash = "e76841fa20b3c72e2bd440df528f3dcb093f595fab794a86fabd14fe83444efb" diff --git a/pyproject.toml b/pyproject.toml index c70dc3a1..d7417508 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ h5py = "^3.7.0" weaviate-client = "^3.6.0" elasticsearch = "^8.4.3" pymilvus = "^2.2.0" -redis = "^4.3.4" +redis = "^4.4.1" ipdb = "^0.13.9" stopit = "^1.1.2" opensearch-py = "^2.2.0" diff --git a/requirements.txt b/requirements.txt index bfcbc4ef..c81f9888 100644 --- a/requirements.txt +++ b/requirements.txt @@ -198,104 +198,104 @@ elasticsearch==8.8.0 ; python_version >= "3.8" and python_version < "3.12" \ environs==9.5.0 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124 \ --hash=sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9 -exceptiongroup==1.1.2 ; python_version >= "3.8" and python_version < "3.11" \ - --hash=sha256:12c3e887d6485d16943a309616de20ae5582633e0a2eda17f4e10fd61c1e8af5 \ - --hash=sha256:e346e69d186172ca7cf029c8c1d16235aa0e04035e5750b4b95039e65204328f +exceptiongroup==1.1.1 ; python_version >= "3.8" and python_version < "3.11" \ + --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ + --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 executing==1.2.0 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc \ --hash=sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107 -grpcio-tools==1.56.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:02b23a12b91287ebea14b3685735d1d675e77c3cd365ec1771c3e9afbeba1ec6 \ - --hash=sha256:0a8767e4de0f573c678313c5de075ac0e163a192bb135018e45015a22f234387 \ - --hash=sha256:11cdd9cbf0c09c3a761c6f59dfd7128104be7cd393334efe386d4fc3f990ee1a \ - --hash=sha256:128bb13fe9a2681eeb08175f5fbc8e2d8953d7d0dd240e96f9244b9d2547a1aa \ - --hash=sha256:142530b9fdfabe04f0c7e5dacd45b6c419d39704fa439cc0aabf73ea0d8f916d \ - --hash=sha256:168940a4a955b6c65da978dbf62e1c36e3a311bb27f649fd201a228e2583a6d4 \ - --hash=sha256:1bd361fcc967c21672ba855fc77ea0e7afa51664033a746df96545f84edc4670 \ - --hash=sha256:21cf32ccffd4f1800b0dcdf58aa1fc7f626795c9da784c3d817c944edcf2d3ae \ - --hash=sha256:23e2ef1dc6a9bf766f091e2c52a68e54d0aff3548f94562e61fb0ac3874d514a \ - --hash=sha256:282176066fb082ad21c403b84f9d6b440a20482e6f52b83bb2adf54d6fdcae9f \ - --hash=sha256:2b7a4eb5003a29eecd71707589f93ae7e8fa2e681366a811b3f86695055d8666 \ - --hash=sha256:2c1c43d185ebf904c3deec23c36ca2ba4e95db999cf00fc8f85eda4551622a26 \ - --hash=sha256:2d1ee9e13ce135a6ed451b428ef14af131dc7df2551a5344ff4f8aee2d9fab99 \ - --hash=sha256:39f5877cea514b3da9f2683dfb3ffb45ef47b05f4ff39c287d7d61c5057f48b8 \ - --hash=sha256:3a4b06169493f9454a7f2516c5d41b566d9734e553bbc505f2a7837f7f4a2df1 \ - --hash=sha256:3de6c08b545920a39b31ed13305f946c00b19ac1b13d26119f111b6360f22ccf \ - --hash=sha256:4acdc7b957abfd76581717f0ac8e4408e0a85b7d0ac8d2cdf4d964f16926b897 \ - --hash=sha256:4d59009ed52220eb2d62f5cefa4e58dec930fb92fab27bb390c4cf1d360ac7e1 \ - --hash=sha256:5f5c416b88d76fbdb548cfee0486928748816b700ece6e591006e5b1dc67598f \ - --hash=sha256:5fd4c005a4afec16578849bc522ddf3298d6d499b3d37bf51314b086c714cdd5 \ - --hash=sha256:781cf09e4d5c9288708f6ec9c3eae64d9d5a0f4c46c7ebe70ebb7ab4f6384789 \ - --hash=sha256:79291bfb1fe5f21d99f4839f43d3c5d44c5402c830a24dbb2811d785dd21264b \ - --hash=sha256:7e6bcb194b81e372411494d8ed69fab89aa3452b7275fce4f7917fbe7b04fb72 \ - --hash=sha256:7f063443870650e55012fdb3a58ff4ce5f4042b81dad6b749333ee8146157511 \ - --hash=sha256:80d75856f8ec949847386ad2f56a460f21c63bf82ce99ca5b6aa512c0b875fb1 \ - --hash=sha256:8115b416ea2cad8a87dc3aadfaf26da684e003c3770b12e7219b462505bb5b85 \ - --hash=sha256:8870ab60f8a76b4a7e43184ee03d28112b976d83c43d41cec821f47b3a297da2 \ - --hash=sha256:8989d363ac1996238fee61c8f5663f15a8fc362cb1e758c4a686b76cb457cd70 \ - --hash=sha256:96fe2f7f5805d88cb7f2e3e3502550b2883dfab0f9efcf3cbd444942cf2ee1da \ - --hash=sha256:9cffff0b4af80285fa49637d69b69d640eb775dc74b23635e4de5faad9e7e744 \ - --hash=sha256:ac33fd2d02d24101ea389be8e05b928acb58be56403d4ebc3aecfab473fa4a25 \ - --hash=sha256:accf713f51da74b1a18aa4b31df0ab135510704661f735a938081777b79a4c25 \ - --hash=sha256:b12bb8c1d408ae40e4c806a3a8ebda2d107310e46696e1da13d0dc3f91fbd19d \ - --hash=sha256:b309659534b5d930f9ab6d521670c2dd86cb6ef7f47f37f73f96557e2ec13a49 \ - --hash=sha256:b57f7f01eafbfe3a293f2efffb675774dbe4074c4627975ec4dc4aa5766801fb \ - --hash=sha256:c43b4fe8c8df4c52d3106bba2cf427f0e46bbebb80e127fbbc3134db0fead7be \ - --hash=sha256:c62f07452dee3f1ed23aeaef821797c5e516f79535e97fe6a6b0a0ee8db1cc91 \ - --hash=sha256:cd69107705794e815a8b262722c6fea995911cb1dfc1310abf63b476165335d6 \ - --hash=sha256:cdbae7312e6d132d38ec2c1611b8cafb783e0416cc5c6deae04efde5f16fb190 \ - --hash=sha256:d9b8d1c42854d3433c058795f52b1418b53dd8c1e9811fecb1312202e803a2c5 \ - --hash=sha256:e4cb62a521efbca4cb1ad50233aa400574b3daaf6eb26707d661a0afe8191d92 \ - --hash=sha256:e59ab6c0bf4a8bb975553ad578d4425bd192775ae384f9406d77d31ad00f6efe \ - --hash=sha256:f3ab1a9fad636302f7307d143f64a9fbd11bc041652bf53bb016006e9a5ca820 \ - --hash=sha256:f7302acaa07cf4966c926fcd6a60c8d30a697f730c38168bf83e1519b464115b \ - --hash=sha256:fa6d9bdd75d3625dae38372b43696e159c10aa98719b4302b1e94f1ff7878d47 -grpcio==1.56.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:008767c0aed4899e657b50f2e0beacbabccab51359eba547f860e7c55f2be6ba \ - --hash=sha256:03a80451530fd3b8b155e0c4480434f6be669daf7ecba56f73ef98f94222ee01 \ - --hash=sha256:0409de787ebbf08c9d2bca2bcc7762c1efe72eada164af78b50567a8dfc7253c \ - --hash=sha256:14e70b4dda3183abea94c72d41d5930c333b21f8561c1904a372d80370592ef3 \ - --hash=sha256:17f47aeb9be0da5337f9ff33ebb8795899021e6c0741ee68bd69774a7804ca86 \ - --hash=sha256:187b8f71bad7d41eea15e0c9812aaa2b87adfb343895fffb704fb040ca731863 \ - --hash=sha256:1eadd6de258901929223f422ffed7f8b310c0323324caf59227f9899ea1b1674 \ - --hash=sha256:38fdf5bd0a1c754ce6bf9311a3c2c7ebe56e88b8763593316b69e0e9a56af1de \ - --hash=sha256:4241a1c2c76e748023c834995cd916570e7180ee478969c2d79a60ce007bc837 \ - --hash=sha256:437af5a7673bca89c4bc0a993382200592d104dd7bf55eddcd141cef91f40bab \ - --hash=sha256:43c50d810cc26349b093bf2cfe86756ab3e9aba3e7e681d360930c1268e1399a \ - --hash=sha256:4c08ee21b3d10315b8dc26f6c13917b20ed574cdbed2d2d80c53d5508fdcc0f2 \ - --hash=sha256:4f84a6fd4482e5fe73b297d4874b62a535bc75dc6aec8e9fe0dc88106cd40397 \ - --hash=sha256:4feee75565d1b5ab09cb3a5da672b84ca7f6dd80ee07a50f5537207a9af543a4 \ - --hash=sha256:50f4daa698835accbbcc60e61e0bc29636c0156ddcafb3891c987e533a0031ba \ - --hash=sha256:59c4e606993a47146fbeaf304b9e78c447f5b9ee5641cae013028c4cca784617 \ - --hash=sha256:5d2fc471668a7222e213f86ef76933b18cdda6a51ea1322034478df8c6519959 \ - --hash=sha256:64bd3abcf9fb4a9fa4ede8d0d34686314a7075f62a1502217b227991d9ca4245 \ - --hash=sha256:66f0369d27f4c105cd21059d635860bb2ea81bd593061c45fb64875103f40e4a \ - --hash=sha256:6b5ce42a5ebe3e04796246ba50357f1813c44a6efe17a37f8dc7a5c470377312 \ - --hash=sha256:72836b5a1d4f508ffbcfe35033d027859cc737972f9dddbe33fb75d687421e2e \ - --hash=sha256:76b6e6e1ee9bda32e6e933efd61c512e9a9f377d7c580977f090d1a9c78cca44 \ - --hash=sha256:79d4c5911d12a7aa671e5eb40cbb50a830396525014d2d6f254ea2ba180ce637 \ - --hash=sha256:7beb84ebd0a3f732625124b73969d12b7350c5d9d64ddf81ae739bbc63d5b1ed \ - --hash=sha256:8219f17baf069fe8e42bd8ca0b312b875595e43a70cabf397be4fda488e2f27d \ - --hash=sha256:83ec714bbbe9b9502177c842417fde39f7a267031e01fa3cd83f1ca49688f537 \ - --hash=sha256:8674fdbd28266d8efbcddacf4ec3643f76fe6376f73283fd63a8374c14b0ef7c \ - --hash=sha256:881575f240eb5db72ddca4dc5602898c29bc082e0d94599bf20588fb7d1ee6a0 \ - --hash=sha256:8b3b2c7b5feef90bc9a5fa1c7f97637e55ec3e76460c6d16c3013952ee479cd9 \ - --hash=sha256:991224fd485e088d3cb5e34366053691a4848a6b7112b8f5625a411305c26691 \ - --hash=sha256:aa08affbf672d051cd3da62303901aeb7042a2c188c03b2c2a2d346fc5e81c14 \ - --hash=sha256:b1f4b6f25a87d80b28dd6d02e87d63fe1577fe6d04a60a17454e3f8077a38279 \ - --hash=sha256:b4638a796778329cc8e142e4f57c705adb286b3ba64e00b0fa91eeb919611be8 \ - --hash=sha256:bd55f743e654fb050c665968d7ec2c33f03578a4bbb163cfce38024775ff54cc \ - --hash=sha256:c0bc9dda550785d23f4f025be614b7faa8d0293e10811f0f8536cf50435b7a30 \ - --hash=sha256:c2148170e01d464d41011a878088444c13413264418b557f0bdcd1bf1b674a0e \ - --hash=sha256:c243b158dd7585021d16c50498c4b2ec0a64a6119967440c5ff2d8c89e72330e \ - --hash=sha256:c63bc5ac6c7e646c296fed9139097ae0f0e63f36f0864d7ce431cce61fe0118a \ - --hash=sha256:c6f36621aabecbaff3e70c4d1d924c76c8e6a7ffec60c331893640a4af0a8037 \ - --hash=sha256:d596408bab632ec7b947761e83ce6b3e7632e26b76d64c239ba66b554b7ee286 \ - --hash=sha256:defdd14b518e6e468466f799aaa69db0355bca8d3a5ea75fb912d28ba6f8af31 \ - --hash=sha256:e2db108b4c8e29c145e95b0226973a66d73ae3e3e7fae00329294af4e27f1c42 \ - --hash=sha256:f92a99ab0c7772fb6859bf2e4f44ad30088d18f7c67b83205297bfb229e0d2cf \ - --hash=sha256:fb34ace11419f1ae321c36ccaa18d81cd3f20728cd191250be42949d6845bb2d \ - --hash=sha256:fdc3a895791af4addbb826808d4c9c35917c59bb5c430d729f44224e51c92d61 +grpcio-tools==1.53.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:0229e6cd442915192b8f8ee2e7e1c8b9986c878bc4dd8be3539f3be35f1b8282 \ + --hash=sha256:102b6d323d7cef7ac29683f949ec66885b417c06df6059f6a88d07c5556c2592 \ + --hash=sha256:17c557240f7fbe1886dcfb5f3ba79740ecb65fe3b93061e64b8f4dfc6a6a5dc5 \ + --hash=sha256:2758ea125442bc81251267fc9c28f65555a571f6a0afda4d71a6e7d669347095 \ + --hash=sha256:2b47f8b1bd3af2fb25548b625ad9c3659da30fe83c06f462f357c754f49b71ae \ + --hash=sha256:2be17265c0f070efd625683cef986e07dbc495103fcc719009ff2f6988003166 \ + --hash=sha256:326c67b35be69409a88632e6145032d53b8b8141634e9cbcd27fa8f9015a112c \ + --hash=sha256:39d0a254de49d852f5fe9f9df0a45b2ae66bc04e2d9ee1d6d2c0ba1e70fac91a \ + --hash=sha256:3cc832e8297e9437bc2b137fe815c8ba1d9af6ffdd76c5c6d7f911bf8e1b0f45 \ + --hash=sha256:41b859cf943256debba1e7b921e3689c89f95495b65f7ad226c4f0e38edf8ee4 \ + --hash=sha256:4605db5a5828205d7fa33a5de9e00723bd037709e74e15c028b9dcec2339b7bc \ + --hash=sha256:4701d48f649443f1101a24d85e9d5ac13346ccac7781e243f49491328e172266 \ + --hash=sha256:4be32c694c760f3281555089f7aed7d48ca7ea4094115a08b5fc895e17d7e62e \ + --hash=sha256:4c6acaca09cfcd59850e27bd138df9d01c0686c42a5412aa6a92141c15316b1e \ + --hash=sha256:613a84ebd1881635370c12503f2b15b37332a53fbac32904c94ac4c0c10f0a2a \ + --hash=sha256:65b77532bb8f6ab1bfbdd2ac0788626a6c05b227f4722d3bbc2c54258e49c3e5 \ + --hash=sha256:6afffd7e97e5bddc63b3ce9abe912b9adb704a36ba86d4406be94426734b97c2 \ + --hash=sha256:6bd4c732d8d7a736e787b5d0963d4195267fc856e1d313d4532d1625e19a0e4a \ + --hash=sha256:7062109553ec1873c5c09cc379b8ae0aa76a2d6d6aae97759b97787b93fa9786 \ + --hash=sha256:7152045190e9bd665d1feaeaef931d82c75cacce2b116ab150befa90855de3d0 \ + --hash=sha256:76898c1dadf8630a75a40b5a89ab38e326f1288dcfde3413cdfa7a58e149c987 \ + --hash=sha256:7728407b1e89fb1473b86152fc33be00f1a25a5aa3264245521f05cbbef9d817 \ + --hash=sha256:7754d6466191d327a0eef364ad5b863477a8fcc12953adc06b30b8e470c70e4a \ + --hash=sha256:7c0ede22796259e83aa1f108038513e86672b2892d3654f94415e3930b74b871 \ + --hash=sha256:7da0fc185735050d8240b1d74c4667a02baf1b4fa379a5fc05d1fc067eeba596 \ + --hash=sha256:830261fe08541f0fd2dd5035264df2b91012988f37aa1d80a0b4ee6404dc25ae \ + --hash=sha256:861f8634cca3ca5bb5336ba16cc78291dba3e7fcadedff195bfdeb433f2c29f2 \ + --hash=sha256:8940d59fca790f1bd45785d0661c3a8c081231c9f8049d7fbf6c6c00737e43da \ + --hash=sha256:925efff2d63ca3266f93c924ffeba5d496f16a8ccbe125fa0d18acf47cc5fa88 \ + --hash=sha256:99ecefb6b66e9fe41468a70ee2f05da2eb9c7bf63867fb9ff07f7dd90ea813ae \ + --hash=sha256:a2faad4b6362e7ff3ae43ef2d51dfce0a3bc32cf52469e88568c3f65cae377d5 \ + --hash=sha256:a8c3e30c531969c62a5a219be414277b269c1be9a76bcd6948571868894e19b2 \ + --hash=sha256:ad0c20688a650e731e8328a7a08899c433a59bfc995a7afcf715b5ad9eca9e7b \ + --hash=sha256:af686b83bc6b5c1f1591c9f49183717974047de9546adcf5e09a18781b550c96 \ + --hash=sha256:b1b76b6ab5c24e44b15d6a7df6c1b81c3099a54b82d41a3ce96e73a2e6a5081c \ + --hash=sha256:b4173b95e2c29a5145c806d16945ce1e5b38a11c7eb6ab1a6d74afc0a2ce47d9 \ + --hash=sha256:b54c64d85bea5c3a3d895454878c7d6bed5cbb80dc3cafcd75dc1e78300d8c95 \ + --hash=sha256:c2cff79be5a06d63e9a6a7e38f8f160ade21517386eabe27afacef65a8531358 \ + --hash=sha256:c9a9e1da1868349eba401e9648eac19132700942c475adcc97b6938bf4bf0182 \ + --hash=sha256:ccf7313e5bee13f2f86d12741489f3ed8c901d6b463dff2604191cd4ff518abb \ + --hash=sha256:d646d65fafbf70a57416493e719a0df7ffa0772133266cfe1b2b72e072ae64a2 \ + --hash=sha256:e18292123c86975d0aa47f1bcb176393640dcc23912e9f3a2247f1eff81ac8e8 \ + --hash=sha256:e76e8dfe6fe4e61ce3049e9d56c0d806d0d3edc28aa32117d1b17f387469c52e \ + --hash=sha256:f31c549d793a0e72c044f724b3373141d2aa9970fe97b1c2cfaa7ea44002b9aa \ + --hash=sha256:f55e2c13620271b7f5a81a489a188d6e34a24da8885d46f1566f0e798cb59e6f +grpcio==1.53.0 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:0698c094688a2dd4c7c2f2c0e3e142cac439a64d1cef6904c97f6cde38ba422f \ + --hash=sha256:104a2210edd3776c38448b4f76c2f16e527adafbde171fc72a8a32976c20abc7 \ + --hash=sha256:14817de09317dd7d3fbc8272864288320739973ef0f4b56bf2c0032349da8cdf \ + --hash=sha256:1948539ce78805d4e6256ab0e048ec793956d54787dc9d6777df71c1d19c7f81 \ + --hash=sha256:19caa5b7282a89b799e63776ff602bb39604f7ca98db6df27e2de06756ae86c3 \ + --hash=sha256:1b172e6d497191940c4b8d75b53de82dc252e15b61de2951d577ec5b43316b29 \ + --hash=sha256:1c734a2d4843e4e14ececf5600c3c4750990ec319e1299db7e4f0d02c25c1467 \ + --hash=sha256:2a912397eb8d23c177d6d64e3c8bc46b8a1c7680b090d9f13a640b104aaec77c \ + --hash=sha256:2eddaae8af625e45b5c8500dcca1043264d751a6872cde2eda5022df8a336959 \ + --hash=sha256:55930c56b8f5b347d6c8c609cc341949a97e176c90f5cbb01d148d778f3bbd23 \ + --hash=sha256:658ffe1e39171be00490db5bd3b966f79634ac4215a1eb9a85c6cd6783bf7f6e \ + --hash=sha256:6601d812105583948ab9c6e403a7e2dba6e387cc678c010e74f2d6d589d1d1b3 \ + --hash=sha256:6b6d60b0958be711bab047e9f4df5dbbc40367955f8651232bfdcdd21450b9ab \ + --hash=sha256:6beb84f83360ff29a3654f43f251ec11b809dcb5524b698d711550243debd289 \ + --hash=sha256:752d2949b40e12e6ad3ed8cc552a65b54d226504f6b1fb67cab2ccee502cc06f \ + --hash=sha256:7dc8584ca6c015ad82e186e82f4c0fe977394588f66b8ecfc4ec873285314619 \ + --hash=sha256:82434ba3a5935e47908bc861ce1ebc43c2edfc1001d235d6e31e5d3ed55815f7 \ + --hash=sha256:8270d1dc2c98ab57e6dbf36fa187db8df4c036f04a398e5d5e25b4e01a766d70 \ + --hash=sha256:8a48fd3a7222be226bb86b7b413ad248f17f3101a524018cdc4562eeae1eb2a3 \ + --hash=sha256:95952d3fe795b06af29bb8ec7bbf3342cdd867fc17b77cc25e6733d23fa6c519 \ + --hash=sha256:976a7f24eb213e8429cab78d5e120500dfcdeb01041f1f5a77b17b9101902615 \ + --hash=sha256:9c84a481451e7174f3a764a44150f93b041ab51045aa33d7b5b68b6979114e48 \ + --hash=sha256:a34d6e905f071f9b945cabbcc776e2055de1fdb59cd13683d9aa0a8f265b5bf9 \ + --hash=sha256:a4952899b4931a6ba12951f9a141ef3e74ff8a6ec9aa2dc602afa40f63595e33 \ + --hash=sha256:a96c3c7f564b263c5d7c0e49a337166c8611e89c4c919f66dba7b9a84abad137 \ + --hash=sha256:aef7d30242409c3aa5839b501e877e453a2c8d3759ca8230dd5a21cda029f046 \ + --hash=sha256:b5bd026ac928c96cc23149e6ef79183125542062eb6d1ccec34c0a37e02255e7 \ + --hash=sha256:b6a2ead3de3b2d53119d473aa2f224030257ef33af1e4ddabd4afee1dea5f04c \ + --hash=sha256:ba074af9ca268ad7b05d3fc2b920b5fb3c083da94ab63637aaf67f4f71ecb755 \ + --hash=sha256:c5fb6f3d7824696c1c9f2ad36ddb080ba5a86f2d929ef712d511b4d9972d3d27 \ + --hash=sha256:c705e0c21acb0e8478a00e7e773ad0ecdb34bd0e4adc282d3d2f51ba3961aac7 \ + --hash=sha256:c7ad9fbedb93f331c2e9054e202e95cf825b885811f1bcbbdfdc301e451442db \ + --hash=sha256:da95778d37be8e4e9afca771a83424f892296f5dfb2a100eda2571a1d8bbc0dc \ + --hash=sha256:dad5b302a4c21c604d88a5d441973f320134e6ff6a84ecef9c1139e5ffd466f6 \ + --hash=sha256:dbc1ba968639c1d23476f75c356e549e7bbf2d8d6688717dcab5290e88e8482b \ + --hash=sha256:ddb2511fbbb440ed9e5c9a4b9b870f2ed649b7715859fd6f2ebc585ee85c0364 \ + --hash=sha256:df9ba1183b3f649210788cf80c239041dddcb375d6142d8bccafcfdf549522cd \ + --hash=sha256:e4f513d63df6336fd84b74b701f17d1bb3b64e9d78a6ed5b5e8a198bbbe8bbfa \ + --hash=sha256:e6f90698b5d1c5dd7b3236cd1fa959d7b80e17923f918d5be020b65f1c78b173 \ + --hash=sha256:eaf8e3b97caaf9415227a3c6ca5aa8d800fecadd526538d2bf8f11af783f1550 \ + --hash=sha256:ee81349411648d1abc94095c68cd25e3c2812e4e0367f9a9355be1e804a5135c \ + --hash=sha256:f144a790f14c51b8a8e591eb5af40507ffee45ea6b818c2482f0457fec2e1a2e \ + --hash=sha256:f3e837d29f0e1b9d6e7b29d569e2e9b0da61889e41879832ea15569c251c303a \ + --hash=sha256:fa8eaac75d3107e3f5465f2c9e3bbd13db21790c6e45b7de1756eba16b050aca \ + --hash=sha256:fdc6191587de410a184550d4143e2b24a14df495c86ca15e59508710681690ac h11==0.14.0 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 @@ -392,32 +392,32 @@ opensearch-py==2.2.0 ; python_version >= "3.8" and python_version < "3.12" \ packaging==23.1 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f -pandas==2.0.3 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682 \ - --hash=sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc \ - --hash=sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b \ - --hash=sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089 \ - --hash=sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5 \ - --hash=sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26 \ - --hash=sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210 \ - --hash=sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b \ - --hash=sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641 \ - --hash=sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd \ - --hash=sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78 \ - --hash=sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b \ - --hash=sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e \ - --hash=sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061 \ - --hash=sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0 \ - --hash=sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e \ - --hash=sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8 \ - --hash=sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d \ - --hash=sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0 \ - --hash=sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c \ - --hash=sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183 \ - --hash=sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df \ - --hash=sha256:e4c7c9f27a4185304c7caf96dc7d91bc60bc162221152de697c98eb0b2648dd8 \ - --hash=sha256:f167beed68918d62bffb6ec64f2e1d8a7d297a038f86d4aed056b9493fca407f \ - --hash=sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02 +pandas==2.0.2 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:02755de164da6827764ceb3bbc5f64b35cb12394b1024fdf88704d0fa06e0e2f \ + --hash=sha256:0a1e0576611641acde15c2322228d138258f236d14b749ad9af498ab69089e2d \ + --hash=sha256:1eb09a242184092f424b2edd06eb2b99d06dc07eeddff9929e8667d4ed44e181 \ + --hash=sha256:30a89d0fec4263ccbf96f68592fd668939481854d2ff9da709d32a047689393b \ + --hash=sha256:50e451932b3011b61d2961b4185382c92cc8c6ee4658dcd4f320687bb2d000ee \ + --hash=sha256:51a93d422fbb1bd04b67639ba4b5368dffc26923f3ea32a275d2cc450f1d1c86 \ + --hash=sha256:598e9020d85a8cdbaa1815eb325a91cfff2bb2b23c1442549b8a3668e36f0f77 \ + --hash=sha256:66d00300f188fa5de73f92d5725ced162488f6dc6ad4cecfe4144ca29debe3b8 \ + --hash=sha256:69167693cb8f9b3fc060956a5d0a0a8dbfed5f980d9fd2c306fb5b9c855c814c \ + --hash=sha256:6d6d10c2142d11d40d6e6c0a190b1f89f525bcf85564707e31b0a39e3b398e08 \ + --hash=sha256:713f2f70abcdade1ddd68fc91577cb090b3544b07ceba78a12f799355a13ee44 \ + --hash=sha256:7376e13d28eb16752c398ca1d36ccfe52bf7e887067af9a0474de6331dd948d2 \ + --hash=sha256:77550c8909ebc23e56a89f91b40ad01b50c42cfbfab49b3393694a50549295ea \ + --hash=sha256:7b21cb72958fc49ad757685db1919021d99650d7aaba676576c9e88d3889d456 \ + --hash=sha256:9ebb9f1c22ddb828e7fd017ea265a59d80461d5a79154b49a4207bd17514d122 \ + --hash=sha256:a18e5c72b989ff0f7197707ceddc99828320d0ca22ab50dd1b9e37db45b010c0 \ + --hash=sha256:a6b5f14cd24a2ed06e14255ff40fe2ea0cfaef79a8dd68069b7ace74bd6acbba \ + --hash=sha256:b42b120458636a981077cfcfa8568c031b3e8709701315e2bfa866324a83efa8 \ + --hash=sha256:c4af689352c4fe3d75b2834933ee9d0ccdbf5d7a8a7264f0ce9524e877820c08 \ + --hash=sha256:c7319b6e68de14e6209460f72a8d1ef13c09fb3d3ef6c37c1e65b35d50b5c145 \ + --hash=sha256:cf3f0c361a4270185baa89ec7ab92ecaa355fe783791457077473f974f654df5 \ + --hash=sha256:dd46bde7309088481b1cf9c58e3f0e204b9ff9e3244f441accd220dd3365ce7c \ + --hash=sha256:dd5476b6c3fe410ee95926873f377b856dbc4e81a9c605a0dc05aaccc6a7c6c6 \ + --hash=sha256:e69140bc2d29a8556f55445c15f5794490852af3de0f609a24003ef174528b79 \ + --hash=sha256:f908a77cbeef9bbd646bd4b81214cbef9ac3dda4181d5092a4aa9797d1bc7774 parso==0.8.3 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 @@ -430,9 +430,9 @@ pickleshare==0.7.5 ; python_version >= "3.8" and python_version < "3.12" \ portalocker==2.7.0 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51 \ --hash=sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983 -prompt-toolkit==3.0.39 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:04505ade687dc26dc4284b1ad19a83be2f2afe83e7a828ace0c72f3a1df72aac \ - --hash=sha256:9dffbe1d8acf91e3de75f3b544e4842382fc06c6babe903ac9acb74dc6e08d88 +prompt-toolkit==3.0.38 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b \ + --hash=sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f protobuf==4.23.3 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:0149053336a466e3e0b040e54d0b615fc71de86da66791c592cc3c8d18150bf8 \ --hash=sha256:08fe19d267608d438aa37019236db02b306e33f6b9902c3163838b8e75970223 \ @@ -456,49 +456,49 @@ pure-eval==0.2.2 ; python_version >= "3.8" and python_version < "3.12" \ pycparser==2.21 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 -pydantic==1.10.10 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:20a3b30fd255eeeb63caa9483502ba96b7795ce5bf895c6a179b3d909d9f53a6 \ - --hash=sha256:2b71bd504d1573b0b722ae536e8ffb796bedeef978979d076bf206e77dcc55a5 \ - --hash=sha256:3403a090db45d4027d2344859d86eb797484dfda0706cf87af79ace6a35274ef \ - --hash=sha256:37ebddef68370e6f26243acc94de56d291e01227a67b2ace26ea3543cf53dd5f \ - --hash=sha256:3b8d5bd97886f9eb59260594207c9f57dce14a6f869c6ceea90188715d29921a \ - --hash=sha256:409b810f387610cc7405ab2fa6f62bdf7ea485311845a242ebc0bd0496e7e5ac \ - --hash=sha256:4870f13a4fafd5bc3e93cff3169222534fad867918b188e83ee0496452978437 \ - --hash=sha256:566a04ba755e8f701b074ffb134ddb4d429f75d5dced3fbd829a527aafe74c71 \ - --hash=sha256:67b3714b97ff84b2689654851c2426389bcabfac9080617bcf4306c69db606f6 \ - --hash=sha256:6dab5219659f95e357d98d70577b361383057fb4414cfdb587014a5f5c595f7b \ - --hash=sha256:748d10ab6089c5d196e1c8be9de48274f71457b01e59736f7a09c9dc34f51887 \ - --hash=sha256:762aa598f79b4cac2f275d13336b2dd8662febee2a9c450a49a2ab3bec4b385f \ - --hash=sha256:7a26841be620309a9697f5b1ffc47dce74909e350c5315ccdac7a853484d468a \ - --hash=sha256:7a7db03339893feef2092ff7b1afc9497beed15ebd4af84c3042a74abce02d48 \ - --hash=sha256:7aa75d1bd9cc275cf9782f50f60cddaf74cbaae19b6ada2a28e737edac420312 \ - --hash=sha256:86936c383f7c38fd26d35107eb669c85d8f46dfceae873264d9bab46fe1c7dde \ - --hash=sha256:88546dc10a40b5b52cae87d64666787aeb2878f9a9b37825aedc2f362e7ae1da \ - --hash=sha256:8c40964596809eb616d94f9c7944511f620a1103d63d5510440ed2908fc410af \ - --hash=sha256:990027e77cda6072a566e433b6962ca3b96b4f3ae8bd54748e9d62a58284d9d7 \ - --hash=sha256:9965e49c6905840e526e5429b09e4c154355b6ecc0a2f05492eda2928190311d \ - --hash=sha256:9f62a727f5c590c78c2d12fda302d1895141b767c6488fe623098f8792255fe5 \ - --hash=sha256:a2d5be50ac4a0976817144c7d653e34df2f9436d15555189f5b6f61161d64183 \ - --hash=sha256:a5939ec826f7faec434e2d406ff5e4eaf1716eb1f247d68cd3d0b3612f7b4c8a \ - --hash=sha256:aac218feb4af73db8417ca7518fb3bade4534fcca6e3fb00f84966811dd94450 \ - --hash=sha256:adad1ee4ab9888f12dac2529276704e719efcf472e38df7813f5284db699b4ec \ - --hash=sha256:b69f9138dec566962ec65623c9d57bee44412d2fc71065a5f3ebb3820bdeee96 \ - --hash=sha256:c41bbaae89e32fc582448e71974de738c055aef5ab474fb25692981a08df808a \ - --hash=sha256:c62376890b819bebe3c717a9ac841a532988372b7e600e76f75c9f7c128219d5 \ - --hash=sha256:ce937a2a2c020bcad1c9fde02892392a1123de6dda906ddba62bfe8f3e5989a2 \ - --hash=sha256:db4c7f7e60ca6f7d6c1785070f3e5771fcb9b2d88546e334d2f2c3934d949028 \ - --hash=sha256:e0014e29637125f4997c174dd6167407162d7af0da73414a9340461ea8573252 \ - --hash=sha256:e088e3865a2270ecbc369924cd7d9fbc565667d9158e7f304e4097ebb9cf98dd \ - --hash=sha256:ea9eebc2ebcba3717e77cdeee3f6203ffc0e78db5f7482c68b1293e8cc156e5e \ - --hash=sha256:edfdf0a5abc5c9bf2052ebaec20e67abd52e92d257e4f2d30e02c354ed3e6030 \ - --hash=sha256:f3d4ee957a727ccb5a36f1b0a6dbd9fad5dedd2a41eada99a8df55c12896e18d \ - --hash=sha256:f79db3652ed743309f116ba863dae0c974a41b688242482638b892246b7db21d +pydantic==1.10.9 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:07293ab08e7b4d3c9d7de4949a0ea571f11e4557d19ea24dd3ae0c524c0c334d \ + --hash=sha256:0a2aabdc73c2a5960e87c3ffebca6ccde88665616d1fd6d3db3178ef427b267a \ + --hash=sha256:0da48717dc9495d3a8f215e0d012599db6b8092db02acac5e0d58a65248ec5bc \ + --hash=sha256:128d9453d92e6e81e881dd7e2484e08d8b164da5507f62d06ceecf84bf2e21d3 \ + --hash=sha256:2196c06484da2b3fded1ab6dbe182bdabeb09f6318b7fdc412609ee2b564c49a \ + --hash=sha256:2e9aec8627a1a6823fc62fb96480abe3eb10168fd0d859ee3d3b395105ae19a7 \ + --hash=sha256:3283b574b01e8dbc982080d8287c968489d25329a463b29a90d4157de4f2baaf \ + --hash=sha256:3c52eb595db83e189419bf337b59154bdcca642ee4b2a09e5d7797e41ace783f \ + --hash=sha256:4b466a23009ff5cdd7076eb56aca537c745ca491293cc38e72bf1e0e00de5b91 \ + --hash=sha256:517a681919bf880ce1dac7e5bc0c3af1e58ba118fd774da2ffcd93c5f96eaece \ + --hash=sha256:5f8bbaf4013b9a50e8100333cc4e3fa2f81214033e05ac5aa44fa24a98670a29 \ + --hash=sha256:6257bb45ad78abacda13f15bde5886efd6bf549dd71085e64b8dcf9919c38b60 \ + --hash=sha256:67195274fd27780f15c4c372f4ba9a5c02dad6d50647b917b6a92bf00b3d301a \ + --hash=sha256:6cafde02f6699ce4ff643417d1a9223716ec25e228ddc3b436fe7e2d25a1f305 \ + --hash=sha256:73ef93e5e1d3c8e83f1ff2e7fdd026d9e063c7e089394869a6e2985696693766 \ + --hash=sha256:7845b31959468bc5b78d7b95ec52fe5be32b55d0d09983a877cca6aedc51068f \ + --hash=sha256:7847ca62e581e6088d9000f3c497267868ca2fa89432714e21a4fb33a04d52e8 \ + --hash=sha256:7e1d5290044f620f80cf1c969c542a5468f3656de47b41aa78100c5baa2b8276 \ + --hash=sha256:7ee829b86ce984261d99ff2fd6e88f2230068d96c2a582f29583ed602ef3fc2c \ + --hash=sha256:83fcff3c7df7adff880622a98022626f4f6dbce6639a88a15a3ce0f96466cb60 \ + --hash=sha256:939328fd539b8d0edf244327398a667b6b140afd3bf7e347cf9813c736211896 \ + --hash=sha256:95c70da2cd3b6ddf3b9645ecaa8d98f3d80c606624b6d245558d202cd23ea3be \ + --hash=sha256:963671eda0b6ba6926d8fc759e3e10335e1dc1b71ff2a43ed2efd6996634dafb \ + --hash=sha256:970b1bdc6243ef663ba5c7e36ac9ab1f2bfecb8ad297c9824b542d41a750b298 \ + --hash=sha256:9863b9420d99dfa9c064042304868e8ba08e89081428a1c471858aa2af6f57c4 \ + --hash=sha256:ad428e92ab68798d9326bb3e5515bc927444a3d71a93b4a2ca02a8a5d795c572 \ + --hash=sha256:b48d3d634bca23b172f47f2335c617d3fcb4b3ba18481c96b7943a4c634f5c8d \ + --hash=sha256:b9cd67fb763248cbe38f0593cd8611bfe4b8ad82acb3bdf2b0898c23415a1f82 \ + --hash=sha256:d111a21bbbfd85c17248130deac02bbd9b5e20b303338e0dbe0faa78330e37e0 \ + --hash=sha256:e1aa5c2410769ca28aa9a7841b80d9d9a1c5f223928ca8bec7e7c9a34d26b1d4 \ + --hash=sha256:e692dec4a40bfb40ca530e07805b1208c1de071a18d26af4a2a0d79015b352ca \ + --hash=sha256:e7c9900b43ac14110efa977be3da28931ffc74c27e96ee89fbcaaf0b0fe338e1 \ + --hash=sha256:eec39224b2b2e861259d6f3c8b6290d4e0fbdce147adb797484a42278a1a486f \ + --hash=sha256:f0b7628fb8efe60fe66fd4adadd7ad2304014770cdc1f4934db41fe46cc8825f \ + --hash=sha256:f50e1764ce9353be67267e7fd0da08349397c7db17a562ad036aa7c8f4adfdb6 \ + --hash=sha256:fab81a92f42d6d525dd47ced310b0c3e10c416bbfae5d59523e63ea22f82b31e pygments==2.15.1 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c \ --hash=sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1 -pymilvus==2.2.13 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:72da36cb5f4f84d7a8307202fcaa9a7fc4497d28d2d2235045ba93a430691ef1 \ - --hash=sha256:ac991863bd63e860c1210d096695297175c6ed09f4de762cf42394cb5aecd1f6 +pymilvus==2.2.12 ; python_version >= "3.8" and python_version < "3.12" \ + --hash=sha256:420bd043c86638cadd5496d2a842ab4cc3dfd0c4acc5293b09cefb6dd396a4d1 \ + --hash=sha256:f8b9f85e2f4a7a388f874da37ab08c41381de81c84cded5cb034bc90f5d0f470 python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "3.12" \ --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 From 435038a317ee0ab4fd517f417e5bbd59b6d1974c Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 11:56:03 +0100 Subject: [PATCH 008/209] Introduced MILVUS_USER and MILVUS_PASS env vars --- engine/clients/milvus/config.py | 4 +++- engine/clients/milvus/search.py | 4 +++- engine/clients/milvus/upload.py | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/engine/clients/milvus/config.py b/engine/clients/milvus/config.py index 122ef617..20a6cfba 100644 --- a/engine/clients/milvus/config.py +++ b/engine/clients/milvus/config.py @@ -1,10 +1,12 @@ from pymilvus import DataType - +import os from engine.base_client.distances import Distance MILVUS_COLLECTION_NAME = "Benchmark" MILVUS_DEFAULT_ALIAS = "bench" MILVUS_DEFAULT_PORT = "19530" +MILVUS_PASS = os.getenv("MILVUS_PASS","") +MILVUS_USER = os.getenv("MILVUS_USER","") DISTANCE_MAPPING = { Distance.L2: "L2", diff --git a/engine/clients/milvus/search.py b/engine/clients/milvus/search.py index c7e2468c..0b6fb242 100644 --- a/engine/clients/milvus/search.py +++ b/engine/clients/milvus/search.py @@ -8,7 +8,7 @@ DISTANCE_MAPPING, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, + MILVUS_DEFAULT_PORT, MILVUS_PASS, MILVUS_USER, ) from engine.clients.milvus.parser import MilvusConditionParser @@ -26,6 +26,8 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic alias=MILVUS_DEFAULT_ALIAS, host=host, port=str(connection_params.pop("port", MILVUS_DEFAULT_PORT)), + user=MILVUS_USER, + password=MILVUS_PASS, **connection_params ) cls.collection = Collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) diff --git a/engine/clients/milvus/upload.py b/engine/clients/milvus/upload.py index cdc62544..515f5b37 100644 --- a/engine/clients/milvus/upload.py +++ b/engine/clients/milvus/upload.py @@ -14,7 +14,7 @@ DTYPE_DEFAULT, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, + MILVUS_DEFAULT_PORT, MILVUS_USER, MILVUS_PASS, ) @@ -34,6 +34,8 @@ def init_client(cls, host, distance, connection_params, upload_params): alias=MILVUS_DEFAULT_ALIAS, host=host, port=str(connection_params.pop("port", MILVUS_DEFAULT_PORT)), + user=MILVUS_USER, + password=MILVUS_PASS, **connection_params ) cls.collection = Collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) From f4e49bee104e0fbfca5536a31eb93961ec281040 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 12:10:17 +0100 Subject: [PATCH 009/209] Introduce MILVUS_PORT env variable --- engine/clients/milvus/config.py | 1 + engine/clients/milvus/search.py | 4 ++-- engine/clients/milvus/upload.py | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/engine/clients/milvus/config.py b/engine/clients/milvus/config.py index 20a6cfba..3ebec8c2 100644 --- a/engine/clients/milvus/config.py +++ b/engine/clients/milvus/config.py @@ -7,6 +7,7 @@ MILVUS_DEFAULT_PORT = "19530" MILVUS_PASS = os.getenv("MILVUS_PASS","") MILVUS_USER = os.getenv("MILVUS_USER","") +MILVUS_PORT = os.getenv("MILVUS_PORT",MILVUS_DEFAULT_PORT) DISTANCE_MAPPING = { Distance.L2: "L2", diff --git a/engine/clients/milvus/search.py b/engine/clients/milvus/search.py index 0b6fb242..16955e59 100644 --- a/engine/clients/milvus/search.py +++ b/engine/clients/milvus/search.py @@ -8,7 +8,7 @@ DISTANCE_MAPPING, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, MILVUS_PASS, MILVUS_USER, + MILVUS_DEFAULT_PORT, MILVUS_PASS, MILVUS_USER, MILVUS_PORT, ) from engine.clients.milvus.parser import MilvusConditionParser @@ -25,7 +25,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.client = connections.connect( alias=MILVUS_DEFAULT_ALIAS, host=host, - port=str(connection_params.pop("port", MILVUS_DEFAULT_PORT)), + port=str(connection_params.pop("port", MILVUS_PORT)), user=MILVUS_USER, password=MILVUS_PASS, **connection_params diff --git a/engine/clients/milvus/upload.py b/engine/clients/milvus/upload.py index 515f5b37..f0d1ea97 100644 --- a/engine/clients/milvus/upload.py +++ b/engine/clients/milvus/upload.py @@ -14,7 +14,7 @@ DTYPE_DEFAULT, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, MILVUS_USER, MILVUS_PASS, + MILVUS_DEFAULT_PORT, MILVUS_USER, MILVUS_PASS, MILVUS_PORT, ) @@ -33,7 +33,7 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.client = connections.connect( alias=MILVUS_DEFAULT_ALIAS, host=host, - port=str(connection_params.pop("port", MILVUS_DEFAULT_PORT)), + port=str(connection_params.pop("port", MILVUS_PORT)), user=MILVUS_USER, password=MILVUS_PASS, **connection_params From 42133d090325605c945ac5de14f1579e3edecf59 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 12:12:51 +0100 Subject: [PATCH 010/209] Simplify milvus port settings --- engine/clients/milvus/search.py | 2 +- engine/clients/milvus/upload.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/clients/milvus/search.py b/engine/clients/milvus/search.py index 16955e59..a04d0fe5 100644 --- a/engine/clients/milvus/search.py +++ b/engine/clients/milvus/search.py @@ -25,7 +25,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.client = connections.connect( alias=MILVUS_DEFAULT_ALIAS, host=host, - port=str(connection_params.pop("port", MILVUS_PORT)), + port=MILVUS_PORT, user=MILVUS_USER, password=MILVUS_PASS, **connection_params diff --git a/engine/clients/milvus/upload.py b/engine/clients/milvus/upload.py index f0d1ea97..1ccaf9f1 100644 --- a/engine/clients/milvus/upload.py +++ b/engine/clients/milvus/upload.py @@ -33,7 +33,7 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.client = connections.connect( alias=MILVUS_DEFAULT_ALIAS, host=host, - port=str(connection_params.pop("port", MILVUS_PORT)), + port=MILVUS_PORT, user=MILVUS_USER, password=MILVUS_PASS, **connection_params From ee7cb9b1b123ec853ecd6a9de851f74ed29ea570 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 12:14:42 +0100 Subject: [PATCH 011/209] Added missing milvus env variables on configure file --- engine/clients/milvus/configure.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/engine/clients/milvus/configure.py b/engine/clients/milvus/configure.py index c4afbffe..ec4048f0 100644 --- a/engine/clients/milvus/configure.py +++ b/engine/clients/milvus/configure.py @@ -17,7 +17,7 @@ DTYPE_EXTRAS, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, + MILVUS_PASS, MILVUS_USER, MILVUS_PORT, ) @@ -35,7 +35,9 @@ def __init__(self, host, collection_params: dict, connection_params: dict): self.client = connections.connect( alias=MILVUS_DEFAULT_ALIAS, host=host, - port=str(connection_params.pop("port", MILVUS_DEFAULT_PORT)), + port=MILVUS_PORT, + user=MILVUS_USER, + password=MILVUS_PASS, **connection_params, ) print("established connection") From dfefb4991d17c3992fa11e819449406389d1c154 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 13:36:20 +0100 Subject: [PATCH 012/209] specify milvus uri when http is detected --- engine/clients/milvus/configure.py | 9 ++++++++- engine/clients/milvus/search.py | 11 +++++++++-- engine/clients/milvus/upload.py | 11 +++++++++-- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/engine/clients/milvus/configure.py b/engine/clients/milvus/configure.py index ec4048f0..4ed48384 100644 --- a/engine/clients/milvus/configure.py +++ b/engine/clients/milvus/configure.py @@ -32,9 +32,16 @@ class MilvusConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) + h = "" + uri = "" + if host.startswith("http"): + uri = host + else: + h = host self.client = connections.connect( alias=MILVUS_DEFAULT_ALIAS, - host=host, + host=h, + uri=uri, port=MILVUS_PORT, user=MILVUS_USER, password=MILVUS_PASS, diff --git a/engine/clients/milvus/search.py b/engine/clients/milvus/search.py index a04d0fe5..c36bb02a 100644 --- a/engine/clients/milvus/search.py +++ b/engine/clients/milvus/search.py @@ -8,7 +8,7 @@ DISTANCE_MAPPING, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, MILVUS_PASS, MILVUS_USER, MILVUS_PORT, + MILVUS_PASS, MILVUS_USER, MILVUS_PORT, ) from engine.clients.milvus.parser import MilvusConditionParser @@ -22,9 +22,16 @@ class MilvusSearcher(BaseSearcher): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): + h = "" + uri = "" + if host.startswith("http"): + uri = host + else: + h = host cls.client = connections.connect( alias=MILVUS_DEFAULT_ALIAS, - host=host, + host=h, + uri=uri, port=MILVUS_PORT, user=MILVUS_USER, password=MILVUS_PASS, diff --git a/engine/clients/milvus/upload.py b/engine/clients/milvus/upload.py index 1ccaf9f1..98bebd35 100644 --- a/engine/clients/milvus/upload.py +++ b/engine/clients/milvus/upload.py @@ -14,7 +14,7 @@ DTYPE_DEFAULT, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_DEFAULT_PORT, MILVUS_USER, MILVUS_PASS, MILVUS_PORT, + MILVUS_USER, MILVUS_PASS, MILVUS_PORT, ) @@ -30,9 +30,16 @@ def get_mp_start_method(cls): @classmethod def init_client(cls, host, distance, connection_params, upload_params): + h = "" + uri = "" + if host.startswith("http"): + uri = host + else: + h = host cls.client = connections.connect( alias=MILVUS_DEFAULT_ALIAS, - host=host, + host=h, + uri=uri, port=MILVUS_PORT, user=MILVUS_USER, password=MILVUS_PASS, From 97662077fac1ed65ef8f976d67138c612c78c287 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 14:34:47 +0100 Subject: [PATCH 013/209] wrap milvus upload_batch with backoff --- engine/clients/milvus/upload.py | 8 ++++++++ poetry.lock | 14 +++++++++++++- pyproject.toml | 1 + 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/engine/clients/milvus/upload.py b/engine/clients/milvus/upload.py index 98bebd35..03c3b88a 100644 --- a/engine/clients/milvus/upload.py +++ b/engine/clients/milvus/upload.py @@ -1,5 +1,6 @@ import multiprocessing as mp from typing import List, Optional +import backoff from pymilvus import ( Collection, @@ -64,6 +65,13 @@ def upload_batch( ] else: field_values = [] + cls.upload_with_backoff(field_values, ids, vectors) + + @classmethod + @backoff.on_exception(backoff.expo, + MilvusException, + max_time=120) + def upload_with_backoff(cls, field_values, ids, vectors): cls.collection.insert([ids, vectors] + field_values) @classmethod diff --git a/poetry.lock b/poetry.lock index 65734088..480014f8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -91,6 +91,18 @@ files = [ {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] +[[package]] +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" +category = "main" +optional = false +python-versions = ">=3.7,<4.0" +files = [ + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +] + [[package]] name = "certifi" version = "2023.5.7" @@ -1878,4 +1890,4 @@ grpc = ["grpcio", "grpcio-tools"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "e76841fa20b3c72e2bd440df528f3dcb093f595fab794a86fabd14fe83444efb" +content-hash = "5e76e6ce97d315d91caa1ad5098eda05aa2ea853a3574659825a883ba45321ca" diff --git a/pyproject.toml b/pyproject.toml index d7417508..03629930 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -17,6 +17,7 @@ redis = "^4.4.1" ipdb = "^0.13.9" stopit = "^1.1.2" opensearch-py = "^2.2.0" +backoff = "^2.2.1" [tool.poetry.dev-dependencies] From 9ad6022f5acb69e1311d0d1a97eec297b02dbb3d Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 14:55:31 +0100 Subject: [PATCH 014/209] Enabled using the API_KEY of weaviate and detecting secure connection setups --- engine/clients/weaviate/config.py | 4 ++++ engine/clients/weaviate/configure.py | 16 ++++++++++++---- engine/clients/weaviate/search.py | 15 +++++++++++---- engine/clients/weaviate/upload.py | 15 +++++++++++---- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index b1192734..0b7a0ed4 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -1,2 +1,6 @@ +import os + WEAVIATE_CLASS_NAME = "Benchmark" WEAVIATE_DEFAULT_PORT = 8090 +WEAVIATE_API_KEY = os.getenv("WEAVIATE_API_KEY",None) +WEAVIATE_PORT = os.getenv("WEAVIATE_PORT",WEAVIATE_DEFAULT_PORT) diff --git a/engine/clients/weaviate/configure.py b/engine/clients/weaviate/configure.py index 38c6af6a..2b89a07e 100644 --- a/engine/clients/weaviate/configure.py +++ b/engine/clients/weaviate/configure.py @@ -1,9 +1,9 @@ -from weaviate import Client +from weaviate import Client, AuthApiKey from benchmark.dataset import Dataset from engine.base_client.configure import BaseConfigurator from engine.base_client.distances import Distance -from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_DEFAULT_PORT +from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_PORT, WEAVIATE_API_KEY class WeaviateConfigurator(BaseConfigurator): @@ -22,8 +22,16 @@ class WeaviateConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - url = f"http://{host}:{connection_params.pop('port', WEAVIATE_DEFAULT_PORT)}" - self.client = Client(url, **connection_params) + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{connection_params.pop('port', WEAVIATE_PORT)}" + auth_client_secret = None + if WEAVIATE_API_KEY is not None: + auth_client_secret = AuthApiKey(WEAVIATE_API_KEY) + + self.client = Client(url, auth_client_secret, **connection_params) def clean(self): classes = self.client.schema.get() diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index 126e95b3..7a463000 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -1,10 +1,10 @@ import uuid from typing import List, Tuple -from weaviate import Client +from weaviate import Client, AuthApiKey from engine.base_client.search import BaseSearcher -from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_DEFAULT_PORT +from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_API_KEY, WEAVIATE_PORT from engine.clients.weaviate.parser import WeaviateConditionParser @@ -15,8 +15,15 @@ class WeaviateSearcher(BaseSearcher): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): - url = f"http://{host}:{connection_params.pop('port', WEAVIATE_DEFAULT_PORT)}" - cls.client = Client(url, **connection_params) + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{connection_params.pop('port', WEAVIATE_PORT)}" + auth_client_secret = None + if WEAVIATE_API_KEY is not None: + auth_client_secret = AuthApiKey(WEAVIATE_API_KEY) + cls.client = Client(url, auth_client_secret, **connection_params) cls.search_params = search_params @classmethod diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index 41affa66..a4ce38d9 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -1,10 +1,10 @@ import uuid from typing import List, Optional -from weaviate import Client +from weaviate import Client, AuthApiKey from engine.base_client.upload import BaseUploader -from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_DEFAULT_PORT +from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_PORT, WEAVIATE_API_KEY class WeaviateUploader(BaseUploader): @@ -13,8 +13,15 @@ class WeaviateUploader(BaseUploader): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - url = f"http://{host}:{connection_params.pop('port', WEAVIATE_DEFAULT_PORT)}" - cls.client = Client(url, **connection_params) + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{connection_params.pop('port', WEAVIATE_PORT)}" + auth_client_secret = None + if WEAVIATE_API_KEY is not None: + auth_client_secret = AuthApiKey(WEAVIATE_API_KEY) + cls.client = Client(url, auth_client_secret, **connection_params) cls.upload_params = upload_params cls.connection_params = connection_params From 4e1408aa18b95efa125dfc9202533286b8852591 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 14:57:29 +0100 Subject: [PATCH 015/209] Only printing ef in search parameters if it's available --- engine/base_client/client.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index d838e378..ec13454d 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -84,8 +84,9 @@ def run_experiment( for search_id, searcher in enumerate(self.searchers): search_params = {**searcher.search_params} ef = "n/a" - if "ef" in search_params["search_params"]: - ef = search_params["search_params"]["ef"] + if "search_params" in search_params: + if "ef" in search_params["search_params"]: + ef = search_params["search_params"]["ef"] parallel = search_params["parallel"] if "parallel" in search_params else 1 print(f"\tef runtime: {ef}; #clients {parallel}") search_stats = searcher.search_all( From 824f17a072c0b5f5d167378b52288d3c28d4181b Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 17:14:08 +0100 Subject: [PATCH 016/209] Simplified weviate client construct --- engine/clients/weaviate/config.py | 14 ++++++++++++++ engine/clients/weaviate/configure.py | 14 +++----------- engine/clients/weaviate/search.py | 14 ++------------ engine/clients/weaviate/upload.py | 15 ++------------- 4 files changed, 21 insertions(+), 36 deletions(-) diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index 0b7a0ed4..feeaa60f 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -1,6 +1,20 @@ import os +from weaviate import Client, AuthApiKey WEAVIATE_CLASS_NAME = "Benchmark" WEAVIATE_DEFAULT_PORT = 8090 WEAVIATE_API_KEY = os.getenv("WEAVIATE_API_KEY",None) WEAVIATE_PORT = os.getenv("WEAVIATE_PORT",WEAVIATE_DEFAULT_PORT) + +def setup_client(connection_params, host): + port = connection_params.pop('port', WEAVIATE_PORT) + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{port}" + auth_client_secret = None + if WEAVIATE_API_KEY is not None: + auth_client_secret = AuthApiKey(WEAVIATE_API_KEY) + c = Client(url, auth_client_secret, **connection_params) + return c \ No newline at end of file diff --git a/engine/clients/weaviate/configure.py b/engine/clients/weaviate/configure.py index 2b89a07e..2a37e6aa 100644 --- a/engine/clients/weaviate/configure.py +++ b/engine/clients/weaviate/configure.py @@ -1,9 +1,8 @@ -from weaviate import Client, AuthApiKey from benchmark.dataset import Dataset from engine.base_client.configure import BaseConfigurator from engine.base_client.distances import Distance -from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_PORT, WEAVIATE_API_KEY +from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_PORT, WEAVIATE_API_KEY, setup_client class WeaviateConfigurator(BaseConfigurator): @@ -22,16 +21,9 @@ class WeaviateConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - if host.startswith("http"): - url = "" - else: - url = "http://" - url += f"{host}:{connection_params.pop('port', WEAVIATE_PORT)}" - auth_client_secret = None - if WEAVIATE_API_KEY is not None: - auth_client_secret = AuthApiKey(WEAVIATE_API_KEY) + self.client = setup_client(connection_params, host) + - self.client = Client(url, auth_client_secret, **connection_params) def clean(self): classes = self.client.schema.get() diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index 7a463000..945c449c 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -1,10 +1,8 @@ import uuid from typing import List, Tuple -from weaviate import Client, AuthApiKey - from engine.base_client.search import BaseSearcher -from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_API_KEY, WEAVIATE_PORT +from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client from engine.clients.weaviate.parser import WeaviateConditionParser @@ -15,15 +13,7 @@ class WeaviateSearcher(BaseSearcher): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): - if host.startswith("http"): - url = "" - else: - url = "http://" - url += f"{host}:{connection_params.pop('port', WEAVIATE_PORT)}" - auth_client_secret = None - if WEAVIATE_API_KEY is not None: - auth_client_secret = AuthApiKey(WEAVIATE_API_KEY) - cls.client = Client(url, auth_client_secret, **connection_params) + cls.client = setup_client(connection_params, host) cls.search_params = search_params @classmethod diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index a4ce38d9..e31855c4 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -1,10 +1,8 @@ import uuid from typing import List, Optional -from weaviate import Client, AuthApiKey - from engine.base_client.upload import BaseUploader -from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, WEAVIATE_PORT, WEAVIATE_API_KEY +from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client class WeaviateUploader(BaseUploader): @@ -13,16 +11,7 @@ class WeaviateUploader(BaseUploader): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - if host.startswith("http"): - url = "" - else: - url = "http://" - url += f"{host}:{connection_params.pop('port', WEAVIATE_PORT)}" - auth_client_secret = None - if WEAVIATE_API_KEY is not None: - auth_client_secret = AuthApiKey(WEAVIATE_API_KEY) - cls.client = Client(url, auth_client_secret, **connection_params) - + cls.client = setup_client(connection_params, host) cls.upload_params = upload_params cls.connection_params = connection_params From 31b2a1862c0a63e223358c2a363fd6b6059f088a Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jul 2023 17:15:55 +0100 Subject: [PATCH 017/209] fix NameError on weviate search.py --- engine/clients/weaviate/search.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index 945c449c..0f761297 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -1,6 +1,8 @@ import uuid from typing import List, Tuple +from weaviate import Client + from engine.base_client.search import BaseSearcher from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client from engine.clients.weaviate.parser import WeaviateConditionParser From 909594d06f9bec336072ceb043b30e04dd8ec080 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 00:03:26 +0100 Subject: [PATCH 018/209] Update weviate client to include multi-tenant schema check fix --- engine/clients/weaviate/search.py | 1 + poetry.lock | 8 +- pyproject.toml | 2 +- requirements.txt | 716 ++++-------------------------- 4 files changed, 81 insertions(+), 646 deletions(-) diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index 0f761297..80ef3165 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -54,4 +54,5 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: return id_score_pairs def setup_search(self): + self.client.schema.update_config(WEAVIATE_CLASS_NAME, self.search_params) diff --git a/poetry.lock b/poetry.lock index 480014f8..af7d1dd1 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1868,14 +1868,14 @@ files = [ [[package]] name = "weaviate-client" -version = "3.21.0" +version = "3.22.1" description = "A python native Weaviate client" category = "main" optional = false python-versions = ">=3.8" files = [ - {file = "weaviate-client-3.21.0.tar.gz", hash = "sha256:ec94ac554883c765e94da8b2947c4f0fa4a0378ed3bbe9f3653df3a5b1745a6d"}, - {file = "weaviate_client-3.21.0-py3-none-any.whl", hash = "sha256:420444ded7106fb000f4f8b2321b5f5fa2387825aa7a303d702accf61026f9d2"}, + {file = "weaviate-client-3.22.1.tar.gz", hash = "sha256:aff61bd3f5d74df20a62328443e3aa9c860d5330fdfb19c4d8ddc44cb604032f"}, + {file = "weaviate_client-3.22.1-py3-none-any.whl", hash = "sha256:01843a4899a227300e570409e77628e9d1b28476313f94943c37aee3f75112e1"}, ] [package.dependencies] @@ -1890,4 +1890,4 @@ grpc = ["grpcio", "grpcio-tools"] [metadata] lock-version = "2.0" python-versions = ">=3.8,<3.12" -content-hash = "5e76e6ce97d315d91caa1ad5098eda05aa2ea853a3574659825a883ba45321ca" +content-hash = "d4c5af5b53e730b441de613a77e1cccc780a4f227136c38e674c588598ca3fd6" diff --git a/pyproject.toml b/pyproject.toml index 03629930..4e11097d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ qdrant-client = "^1.3.0" typer = "^0.6.1" jsons = "^1.6.3" h5py = "^3.7.0" -weaviate-client = "^3.6.0" +weaviate-client = "^3.22.0" elasticsearch = "^8.4.3" pymilvus = "^2.2.0" redis = "^4.4.1" diff --git a/requirements.txt b/requirements.txt index c81f9888..9a812463 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,641 +1,75 @@ -anyio==3.7.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:275d9973793619a5374e1c89a4f4ad3f4b0a5510a2b5b939444bee8f4c4d37ce \ - --hash=sha256:eddca883c4175f14df8aedce21054bfca3adb70ffe76a9f607aef9d7fa2ea7f0 -appnope==0.1.3 ; python_version >= "3.8" and python_version < "3.12" and sys_platform == "darwin" \ - --hash=sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24 \ - --hash=sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e -asttokens==2.2.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:4622110b2a6f30b77e1473affaa97e711bc2f07d3f10848420ff1898edbe94f3 \ - --hash=sha256:6b0ac9e93fb0335014d382b8fa9b3afa7df546984258005da0b9e7095b3deb1c -async-timeout==4.0.2 ; python_version >= "3.8" and python_full_version <= "3.11.2" \ - --hash=sha256:2163e1640ddb52b7a8c80d0a67a08587e5d245cc9c553a74a847056bc2976b15 \ - --hash=sha256:8ca1e4fcf50d07413d66d1a5e416e42cfdf5851c981d679a09851a6853383b3c -authlib==1.2.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:421f7c6b468d907ca2d9afede256f068f87e34d23dd221c07d13d4c234726afb \ - --hash=sha256:c88984ea00149a90e3537c964327da930779afa4564e354edfd98410bea01911 -backcall==0.2.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e \ - --hash=sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255 -certifi==2023.5.7 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:0f0d56dc5a6ad56fd4ba36484d6cc34451e1c6548c61daad8c320169f91eddc7 \ - --hash=sha256:c6c2e98f5c7869efca1f8916fed228dd91539f9f1b444c314c06eef02980c716 -cffi==1.15.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ - --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ - --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ - --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ - --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ - --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ - --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ - --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ - --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ - --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ - --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ - --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ - --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ - --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ - --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ - --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ - --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ - --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ - --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ - --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ - --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ - --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ - --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ - --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ - --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ - --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ - --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ - --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ - --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ - --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ - --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ - --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ - --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ - --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ - --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ - --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ - --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ - --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ - --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ - --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ - --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ - --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ - --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ - --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ - --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ - --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ - --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ - --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ - --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ - --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ - --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ - --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ - --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ - --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ - --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ - --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ - --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ - --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ - --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ - --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ - --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ - --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ - --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ - --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 -charset-normalizer==3.1.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6 \ - --hash=sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1 \ - --hash=sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e \ - --hash=sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373 \ - --hash=sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62 \ - --hash=sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230 \ - --hash=sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be \ - --hash=sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c \ - --hash=sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0 \ - --hash=sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448 \ - --hash=sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f \ - --hash=sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649 \ - --hash=sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d \ - --hash=sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0 \ - --hash=sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706 \ - --hash=sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a \ - --hash=sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59 \ - --hash=sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23 \ - --hash=sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5 \ - --hash=sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb \ - --hash=sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e \ - --hash=sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e \ - --hash=sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c \ - --hash=sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28 \ - --hash=sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d \ - --hash=sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41 \ - --hash=sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974 \ - --hash=sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce \ - --hash=sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f \ - --hash=sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1 \ - --hash=sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d \ - --hash=sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8 \ - --hash=sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017 \ - --hash=sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31 \ - --hash=sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7 \ - --hash=sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8 \ - --hash=sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e \ - --hash=sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14 \ - --hash=sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd \ - --hash=sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d \ - --hash=sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795 \ - --hash=sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b \ - --hash=sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b \ - --hash=sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b \ - --hash=sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203 \ - --hash=sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f \ - --hash=sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19 \ - --hash=sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1 \ - --hash=sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a \ - --hash=sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac \ - --hash=sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9 \ - --hash=sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0 \ - --hash=sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137 \ - --hash=sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f \ - --hash=sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6 \ - --hash=sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5 \ - --hash=sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909 \ - --hash=sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f \ - --hash=sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0 \ - --hash=sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324 \ - --hash=sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755 \ - --hash=sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb \ - --hash=sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854 \ - --hash=sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c \ - --hash=sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60 \ - --hash=sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84 \ - --hash=sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0 \ - --hash=sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b \ - --hash=sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1 \ - --hash=sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531 \ - --hash=sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1 \ - --hash=sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11 \ - --hash=sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326 \ - --hash=sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df \ - --hash=sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab -click==8.1.3 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ - --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 -colorama==0.4.6 ; python_version >= "3.8" and python_version < "3.12" and platform_system == "Windows" or python_version >= "3.8" and python_version < "3.12" and sys_platform == "win32" \ - --hash=sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44 \ - --hash=sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6 -cryptography==41.0.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:059e348f9a3c1950937e1b5d7ba1f8e968508ab181e75fc32b879452f08356db \ - --hash=sha256:1a5472d40c8f8e91ff7a3d8ac6dfa363d8e3138b961529c996f3e2df0c7a411a \ - --hash=sha256:1a8e6c2de6fbbcc5e14fd27fb24414507cb3333198ea9ab1258d916f00bc3039 \ - --hash=sha256:1fee5aacc7367487b4e22484d3c7e547992ed726d14864ee33c0176ae43b0d7c \ - --hash=sha256:5d092fdfedaec4cbbffbf98cddc915ba145313a6fdaab83c6e67f4e6c218e6f3 \ - --hash=sha256:5f0ff6e18d13a3de56f609dd1fd11470918f770c6bd5d00d632076c727d35485 \ - --hash=sha256:7bfc55a5eae8b86a287747053140ba221afc65eb06207bedf6e019b8934b477c \ - --hash=sha256:7fa01527046ca5facdf973eef2535a27fec4cb651e4daec4d043ef63f6ecd4ca \ - --hash=sha256:8dde71c4169ec5ccc1087bb7521d54251c016f126f922ab2dfe6649170a3b8c5 \ - --hash=sha256:8f4ab7021127a9b4323537300a2acfb450124b2def3756f64dc3a3d2160ee4b5 \ - --hash=sha256:948224d76c4b6457349d47c0c98657557f429b4e93057cf5a2f71d603e2fc3a3 \ - --hash=sha256:9a6c7a3c87d595608a39980ebaa04d5a37f94024c9f24eb7d10262b92f739ddb \ - --hash=sha256:b46e37db3cc267b4dea1f56da7346c9727e1209aa98487179ee8ebed09d21e43 \ - --hash=sha256:b4ceb5324b998ce2003bc17d519080b4ec8d5b7b70794cbd2836101406a9be31 \ - --hash=sha256:cb33ccf15e89f7ed89b235cff9d49e2e62c6c981a6061c9c8bb47ed7951190bc \ - --hash=sha256:d198820aba55660b4d74f7b5fd1f17db3aa5eb3e6893b0a41b75e84e4f9e0e4b \ - --hash=sha256:d34579085401d3f49762d2f7d6634d6b6c2ae1242202e860f4d26b046e3a1006 \ - --hash=sha256:eb8163f5e549a22888c18b0d53d6bb62a20510060a22fd5a995ec8a05268df8a \ - --hash=sha256:f73bff05db2a3e5974a6fd248af2566134d8981fd7ab012e5dd4ddb1d9a70699 -decorator==5.1.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330 \ - --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 -elastic-transport==8.4.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:19db271ab79c9f70f8c43f8f5b5111408781a6176b54ab2e54d713b6d9ceb815 \ - --hash=sha256:b9ad708ceb7fcdbc6b30a96f886609a109f042c0b9d9f2e44403b3133ba7ff10 -elasticsearch==8.8.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:2223ee9daaa3c80c25b28ec3f7c48e66fce6b767a338333d9a81886046a07df6 \ - --hash=sha256:6878313cd598c7c90079fed1d4be72e198da35cba57f4083e6bee91f9c70b0eb -environs==9.5.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124 \ - --hash=sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9 -exceptiongroup==1.1.1 ; python_version >= "3.8" and python_version < "3.11" \ - --hash=sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e \ - --hash=sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785 -executing==1.2.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:0314a69e37426e3608aada02473b4161d4caf5a4b244d1d0c48072b8fee7bacc \ - --hash=sha256:19da64c18d2d851112f09c287f8d3dbbdf725ab0e569077efb6cdcbd3497c107 -grpcio-tools==1.53.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:0229e6cd442915192b8f8ee2e7e1c8b9986c878bc4dd8be3539f3be35f1b8282 \ - --hash=sha256:102b6d323d7cef7ac29683f949ec66885b417c06df6059f6a88d07c5556c2592 \ - --hash=sha256:17c557240f7fbe1886dcfb5f3ba79740ecb65fe3b93061e64b8f4dfc6a6a5dc5 \ - --hash=sha256:2758ea125442bc81251267fc9c28f65555a571f6a0afda4d71a6e7d669347095 \ - --hash=sha256:2b47f8b1bd3af2fb25548b625ad9c3659da30fe83c06f462f357c754f49b71ae \ - --hash=sha256:2be17265c0f070efd625683cef986e07dbc495103fcc719009ff2f6988003166 \ - --hash=sha256:326c67b35be69409a88632e6145032d53b8b8141634e9cbcd27fa8f9015a112c \ - --hash=sha256:39d0a254de49d852f5fe9f9df0a45b2ae66bc04e2d9ee1d6d2c0ba1e70fac91a \ - --hash=sha256:3cc832e8297e9437bc2b137fe815c8ba1d9af6ffdd76c5c6d7f911bf8e1b0f45 \ - --hash=sha256:41b859cf943256debba1e7b921e3689c89f95495b65f7ad226c4f0e38edf8ee4 \ - --hash=sha256:4605db5a5828205d7fa33a5de9e00723bd037709e74e15c028b9dcec2339b7bc \ - --hash=sha256:4701d48f649443f1101a24d85e9d5ac13346ccac7781e243f49491328e172266 \ - --hash=sha256:4be32c694c760f3281555089f7aed7d48ca7ea4094115a08b5fc895e17d7e62e \ - --hash=sha256:4c6acaca09cfcd59850e27bd138df9d01c0686c42a5412aa6a92141c15316b1e \ - --hash=sha256:613a84ebd1881635370c12503f2b15b37332a53fbac32904c94ac4c0c10f0a2a \ - --hash=sha256:65b77532bb8f6ab1bfbdd2ac0788626a6c05b227f4722d3bbc2c54258e49c3e5 \ - --hash=sha256:6afffd7e97e5bddc63b3ce9abe912b9adb704a36ba86d4406be94426734b97c2 \ - --hash=sha256:6bd4c732d8d7a736e787b5d0963d4195267fc856e1d313d4532d1625e19a0e4a \ - --hash=sha256:7062109553ec1873c5c09cc379b8ae0aa76a2d6d6aae97759b97787b93fa9786 \ - --hash=sha256:7152045190e9bd665d1feaeaef931d82c75cacce2b116ab150befa90855de3d0 \ - --hash=sha256:76898c1dadf8630a75a40b5a89ab38e326f1288dcfde3413cdfa7a58e149c987 \ - --hash=sha256:7728407b1e89fb1473b86152fc33be00f1a25a5aa3264245521f05cbbef9d817 \ - --hash=sha256:7754d6466191d327a0eef364ad5b863477a8fcc12953adc06b30b8e470c70e4a \ - --hash=sha256:7c0ede22796259e83aa1f108038513e86672b2892d3654f94415e3930b74b871 \ - --hash=sha256:7da0fc185735050d8240b1d74c4667a02baf1b4fa379a5fc05d1fc067eeba596 \ - --hash=sha256:830261fe08541f0fd2dd5035264df2b91012988f37aa1d80a0b4ee6404dc25ae \ - --hash=sha256:861f8634cca3ca5bb5336ba16cc78291dba3e7fcadedff195bfdeb433f2c29f2 \ - --hash=sha256:8940d59fca790f1bd45785d0661c3a8c081231c9f8049d7fbf6c6c00737e43da \ - --hash=sha256:925efff2d63ca3266f93c924ffeba5d496f16a8ccbe125fa0d18acf47cc5fa88 \ - --hash=sha256:99ecefb6b66e9fe41468a70ee2f05da2eb9c7bf63867fb9ff07f7dd90ea813ae \ - --hash=sha256:a2faad4b6362e7ff3ae43ef2d51dfce0a3bc32cf52469e88568c3f65cae377d5 \ - --hash=sha256:a8c3e30c531969c62a5a219be414277b269c1be9a76bcd6948571868894e19b2 \ - --hash=sha256:ad0c20688a650e731e8328a7a08899c433a59bfc995a7afcf715b5ad9eca9e7b \ - --hash=sha256:af686b83bc6b5c1f1591c9f49183717974047de9546adcf5e09a18781b550c96 \ - --hash=sha256:b1b76b6ab5c24e44b15d6a7df6c1b81c3099a54b82d41a3ce96e73a2e6a5081c \ - --hash=sha256:b4173b95e2c29a5145c806d16945ce1e5b38a11c7eb6ab1a6d74afc0a2ce47d9 \ - --hash=sha256:b54c64d85bea5c3a3d895454878c7d6bed5cbb80dc3cafcd75dc1e78300d8c95 \ - --hash=sha256:c2cff79be5a06d63e9a6a7e38f8f160ade21517386eabe27afacef65a8531358 \ - --hash=sha256:c9a9e1da1868349eba401e9648eac19132700942c475adcc97b6938bf4bf0182 \ - --hash=sha256:ccf7313e5bee13f2f86d12741489f3ed8c901d6b463dff2604191cd4ff518abb \ - --hash=sha256:d646d65fafbf70a57416493e719a0df7ffa0772133266cfe1b2b72e072ae64a2 \ - --hash=sha256:e18292123c86975d0aa47f1bcb176393640dcc23912e9f3a2247f1eff81ac8e8 \ - --hash=sha256:e76e8dfe6fe4e61ce3049e9d56c0d806d0d3edc28aa32117d1b17f387469c52e \ - --hash=sha256:f31c549d793a0e72c044f724b3373141d2aa9970fe97b1c2cfaa7ea44002b9aa \ - --hash=sha256:f55e2c13620271b7f5a81a489a188d6e34a24da8885d46f1566f0e798cb59e6f -grpcio==1.53.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:0698c094688a2dd4c7c2f2c0e3e142cac439a64d1cef6904c97f6cde38ba422f \ - --hash=sha256:104a2210edd3776c38448b4f76c2f16e527adafbde171fc72a8a32976c20abc7 \ - --hash=sha256:14817de09317dd7d3fbc8272864288320739973ef0f4b56bf2c0032349da8cdf \ - --hash=sha256:1948539ce78805d4e6256ab0e048ec793956d54787dc9d6777df71c1d19c7f81 \ - --hash=sha256:19caa5b7282a89b799e63776ff602bb39604f7ca98db6df27e2de06756ae86c3 \ - --hash=sha256:1b172e6d497191940c4b8d75b53de82dc252e15b61de2951d577ec5b43316b29 \ - --hash=sha256:1c734a2d4843e4e14ececf5600c3c4750990ec319e1299db7e4f0d02c25c1467 \ - --hash=sha256:2a912397eb8d23c177d6d64e3c8bc46b8a1c7680b090d9f13a640b104aaec77c \ - --hash=sha256:2eddaae8af625e45b5c8500dcca1043264d751a6872cde2eda5022df8a336959 \ - --hash=sha256:55930c56b8f5b347d6c8c609cc341949a97e176c90f5cbb01d148d778f3bbd23 \ - --hash=sha256:658ffe1e39171be00490db5bd3b966f79634ac4215a1eb9a85c6cd6783bf7f6e \ - --hash=sha256:6601d812105583948ab9c6e403a7e2dba6e387cc678c010e74f2d6d589d1d1b3 \ - --hash=sha256:6b6d60b0958be711bab047e9f4df5dbbc40367955f8651232bfdcdd21450b9ab \ - --hash=sha256:6beb84f83360ff29a3654f43f251ec11b809dcb5524b698d711550243debd289 \ - --hash=sha256:752d2949b40e12e6ad3ed8cc552a65b54d226504f6b1fb67cab2ccee502cc06f \ - --hash=sha256:7dc8584ca6c015ad82e186e82f4c0fe977394588f66b8ecfc4ec873285314619 \ - --hash=sha256:82434ba3a5935e47908bc861ce1ebc43c2edfc1001d235d6e31e5d3ed55815f7 \ - --hash=sha256:8270d1dc2c98ab57e6dbf36fa187db8df4c036f04a398e5d5e25b4e01a766d70 \ - --hash=sha256:8a48fd3a7222be226bb86b7b413ad248f17f3101a524018cdc4562eeae1eb2a3 \ - --hash=sha256:95952d3fe795b06af29bb8ec7bbf3342cdd867fc17b77cc25e6733d23fa6c519 \ - --hash=sha256:976a7f24eb213e8429cab78d5e120500dfcdeb01041f1f5a77b17b9101902615 \ - --hash=sha256:9c84a481451e7174f3a764a44150f93b041ab51045aa33d7b5b68b6979114e48 \ - --hash=sha256:a34d6e905f071f9b945cabbcc776e2055de1fdb59cd13683d9aa0a8f265b5bf9 \ - --hash=sha256:a4952899b4931a6ba12951f9a141ef3e74ff8a6ec9aa2dc602afa40f63595e33 \ - --hash=sha256:a96c3c7f564b263c5d7c0e49a337166c8611e89c4c919f66dba7b9a84abad137 \ - --hash=sha256:aef7d30242409c3aa5839b501e877e453a2c8d3759ca8230dd5a21cda029f046 \ - --hash=sha256:b5bd026ac928c96cc23149e6ef79183125542062eb6d1ccec34c0a37e02255e7 \ - --hash=sha256:b6a2ead3de3b2d53119d473aa2f224030257ef33af1e4ddabd4afee1dea5f04c \ - --hash=sha256:ba074af9ca268ad7b05d3fc2b920b5fb3c083da94ab63637aaf67f4f71ecb755 \ - --hash=sha256:c5fb6f3d7824696c1c9f2ad36ddb080ba5a86f2d929ef712d511b4d9972d3d27 \ - --hash=sha256:c705e0c21acb0e8478a00e7e773ad0ecdb34bd0e4adc282d3d2f51ba3961aac7 \ - --hash=sha256:c7ad9fbedb93f331c2e9054e202e95cf825b885811f1bcbbdfdc301e451442db \ - --hash=sha256:da95778d37be8e4e9afca771a83424f892296f5dfb2a100eda2571a1d8bbc0dc \ - --hash=sha256:dad5b302a4c21c604d88a5d441973f320134e6ff6a84ecef9c1139e5ffd466f6 \ - --hash=sha256:dbc1ba968639c1d23476f75c356e549e7bbf2d8d6688717dcab5290e88e8482b \ - --hash=sha256:ddb2511fbbb440ed9e5c9a4b9b870f2ed649b7715859fd6f2ebc585ee85c0364 \ - --hash=sha256:df9ba1183b3f649210788cf80c239041dddcb375d6142d8bccafcfdf549522cd \ - --hash=sha256:e4f513d63df6336fd84b74b701f17d1bb3b64e9d78a6ed5b5e8a198bbbe8bbfa \ - --hash=sha256:e6f90698b5d1c5dd7b3236cd1fa959d7b80e17923f918d5be020b65f1c78b173 \ - --hash=sha256:eaf8e3b97caaf9415227a3c6ca5aa8d800fecadd526538d2bf8f11af783f1550 \ - --hash=sha256:ee81349411648d1abc94095c68cd25e3c2812e4e0367f9a9355be1e804a5135c \ - --hash=sha256:f144a790f14c51b8a8e591eb5af40507ffee45ea6b818c2482f0457fec2e1a2e \ - --hash=sha256:f3e837d29f0e1b9d6e7b29d569e2e9b0da61889e41879832ea15569c251c303a \ - --hash=sha256:fa8eaac75d3107e3f5465f2c9e3bbd13db21790c6e45b7de1756eba16b050aca \ - --hash=sha256:fdc6191587de410a184550d4143e2b24a14df495c86ca15e59508710681690ac -h11==0.14.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d \ - --hash=sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761 -h2==4.1.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d \ - --hash=sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb -h5py==3.9.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:12aa556d540f11a2cae53ea7cfb94017353bd271fb3962e1296b342f6550d1b8 \ - --hash=sha256:23e74b878bbe1653ab34ca49b83cac85529cd0b36b9d625516c5830cc5ca2eac \ - --hash=sha256:36408f8c62f50007d14e000f9f3acf77e103b9e932c114cbe52a3089e50ebf94 \ - --hash=sha256:3f457089c5d524b7998e3649bc63240679b8fb0a3859ea53bbb06841f3d755f1 \ - --hash=sha256:54f01202cdea754ab4227dd27014bdbd561a4bbe4b631424fd812f7c2ce9c6ac \ - --hash=sha256:551e358db05a874a0f827b22e95b30092f2303edc4b91bb62ad2f10e0236e1a0 \ - --hash=sha256:64acceaf6aff92af091a4b83f6dee3cf8d3061f924a6bb3a33eb6c4658a8348b \ - --hash=sha256:6822a814b9d8b8363ff102f76ea8d026f0ca25850bb579d85376029ee3e73b93 \ - --hash=sha256:78e44686334cbbf2dd21d9df15823bc38663f27a3061f6a032c68a3e30c47bf7 \ - --hash=sha256:79bbca34696c6f9eeeb36a91776070c49a060b2879828e2c8fa6c58b8ed10dd1 \ - --hash=sha256:804c7fb42a34c8ab3a3001901c977a5c24d2e9c586a0f3e7c0a389130b4276fc \ - --hash=sha256:8d9492391ff5c3c80ec30ae2fe82a3f0efd1e750833739c25b0d090e3be1b095 \ - --hash=sha256:95f7a745efd0d56076999b52e8da5fad5d30823bac98b59c68ae75588d09991a \ - --hash=sha256:9da9e7e63376c32704e37ad4cea2dceae6964cee0d8515185b3ab9cbd6b947bc \ - --hash=sha256:a4e20897c88759cbcbd38fb45b507adc91af3e0f67722aa302d71f02dd44d286 \ - --hash=sha256:a6284061f3214335e1eec883a6ee497dbe7a79f19e6a57fed2dd1f03acd5a8cb \ - --hash=sha256:d97409e17915798029e297a84124705c8080da901307ea58f29234e09b073ddc \ - --hash=sha256:dbf5225543ca35ce9f61c950b73899a82be7ba60d58340e76d0bd42bf659235a \ - --hash=sha256:e604db6521c1e367c6bd7fad239c847f53cc46646f2d2651372d05ae5e95f817 \ - --hash=sha256:eb7bdd5e601dd1739698af383be03f3dad0465fe67184ebd5afca770f50df9d6 \ - --hash=sha256:f68b41efd110ce9af1cbe6fa8af9f4dcbadace6db972d30828b911949e28fadd -hpack==4.0.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c \ - --hash=sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095 -httpcore==0.17.2 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:125f8375ab60036db632f34f4b627a9ad085048eef7cb7d2616fea0f739f98af \ - --hash=sha256:5581b9c12379c4288fe70f43c710d16060c10080617001e6b22a3b6dbcbefd36 -httpx[http2]==0.24.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:06781eb9ac53cde990577af654bd990a4949de37a28bdb4a230d434f3a30b9bd \ - --hash=sha256:5853a43053df830c20f8110c5e69fe44d035d850b2dfe795e196f00fdb774bdd -hyperframe==6.0.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15 \ - --hash=sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914 -idna==3.4 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ - --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 -ipdb==0.13.13 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:45529994741c4ab6d2388bfa5d7b725c2cf7fe9deffabdb8a6113aa5ed449ed4 \ - --hash=sha256:e3ac6018ef05126d442af680aad863006ec19d02290561ac88b8b1c0b0cfc726 -ipython==8.12.2 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:c7b80eb7f5a855a88efc971fda506ff7a91c280b42cdae26643e0f601ea281ea \ - --hash=sha256:ea8801f15dfe4ffb76dea1b09b847430ffd70d827b41735c64a0638a04103bfc -jedi==0.18.2 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e \ - --hash=sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612 -jsons==1.6.3 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:cd5815c7c6790ae11c70ad9978e0aa850d0d08a643a5105cc604eac8b29a30d7 \ - --hash=sha256:f07f8919316f72a3843c7ca6cc6c900513089f10092626934d1bfe4b5cf15401 -marshmallow==3.19.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:90032c0fd650ce94b6ec6dc8dfeb0e3ff50c144586462c389b81a07205bedb78 \ - --hash=sha256:93f0958568da045b0021ec6aeb7ac37c81bfcccbb9a0e7ed8559885070b3a19b -matplotlib-inline==0.1.6 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:f1f41aab5328aa5aaea9b16d083b128102f8712542f819fe7e6a420ff581b311 \ - --hash=sha256:f887e5f10ba98e8d2b150ddcf4702c1e5f8b3a20005eb0f74bfdbd360ee6f304 -numpy==1.24.4 ; python_version < "3.12" and python_version >= "3.8" \ - --hash=sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f \ - --hash=sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61 \ - --hash=sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7 \ - --hash=sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400 \ - --hash=sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef \ - --hash=sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2 \ - --hash=sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d \ - --hash=sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc \ - --hash=sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835 \ - --hash=sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706 \ - --hash=sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5 \ - --hash=sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4 \ - --hash=sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6 \ - --hash=sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463 \ - --hash=sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a \ - --hash=sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f \ - --hash=sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e \ - --hash=sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e \ - --hash=sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694 \ - --hash=sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8 \ - --hash=sha256:c0bfb52d2169d58c1cdb8cc1f16989101639b34c7d3ce60ed70b19c63eba0b64 \ - --hash=sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d \ - --hash=sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc \ - --hash=sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254 \ - --hash=sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2 \ - --hash=sha256:ed094d4f0c177b1b8e7aa9cba7d6ceed51c0e569a5318ac0ca9a090680a6a1b1 \ - --hash=sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810 \ - --hash=sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9 -opensearch-py==2.2.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:109fe8d2e1e8f419a22358eb901025f51e6ad2f50014c8962e23796b2a23cb67 \ - --hash=sha256:595dcebe42e21cdf945add0b5dbaecccace1a8a5ba65d60314813767b564263c -packaging==23.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61 \ - --hash=sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f -pandas==2.0.2 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:02755de164da6827764ceb3bbc5f64b35cb12394b1024fdf88704d0fa06e0e2f \ - --hash=sha256:0a1e0576611641acde15c2322228d138258f236d14b749ad9af498ab69089e2d \ - --hash=sha256:1eb09a242184092f424b2edd06eb2b99d06dc07eeddff9929e8667d4ed44e181 \ - --hash=sha256:30a89d0fec4263ccbf96f68592fd668939481854d2ff9da709d32a047689393b \ - --hash=sha256:50e451932b3011b61d2961b4185382c92cc8c6ee4658dcd4f320687bb2d000ee \ - --hash=sha256:51a93d422fbb1bd04b67639ba4b5368dffc26923f3ea32a275d2cc450f1d1c86 \ - --hash=sha256:598e9020d85a8cdbaa1815eb325a91cfff2bb2b23c1442549b8a3668e36f0f77 \ - --hash=sha256:66d00300f188fa5de73f92d5725ced162488f6dc6ad4cecfe4144ca29debe3b8 \ - --hash=sha256:69167693cb8f9b3fc060956a5d0a0a8dbfed5f980d9fd2c306fb5b9c855c814c \ - --hash=sha256:6d6d10c2142d11d40d6e6c0a190b1f89f525bcf85564707e31b0a39e3b398e08 \ - --hash=sha256:713f2f70abcdade1ddd68fc91577cb090b3544b07ceba78a12f799355a13ee44 \ - --hash=sha256:7376e13d28eb16752c398ca1d36ccfe52bf7e887067af9a0474de6331dd948d2 \ - --hash=sha256:77550c8909ebc23e56a89f91b40ad01b50c42cfbfab49b3393694a50549295ea \ - --hash=sha256:7b21cb72958fc49ad757685db1919021d99650d7aaba676576c9e88d3889d456 \ - --hash=sha256:9ebb9f1c22ddb828e7fd017ea265a59d80461d5a79154b49a4207bd17514d122 \ - --hash=sha256:a18e5c72b989ff0f7197707ceddc99828320d0ca22ab50dd1b9e37db45b010c0 \ - --hash=sha256:a6b5f14cd24a2ed06e14255ff40fe2ea0cfaef79a8dd68069b7ace74bd6acbba \ - --hash=sha256:b42b120458636a981077cfcfa8568c031b3e8709701315e2bfa866324a83efa8 \ - --hash=sha256:c4af689352c4fe3d75b2834933ee9d0ccdbf5d7a8a7264f0ce9524e877820c08 \ - --hash=sha256:c7319b6e68de14e6209460f72a8d1ef13c09fb3d3ef6c37c1e65b35d50b5c145 \ - --hash=sha256:cf3f0c361a4270185baa89ec7ab92ecaa355fe783791457077473f974f654df5 \ - --hash=sha256:dd46bde7309088481b1cf9c58e3f0e204b9ff9e3244f441accd220dd3365ce7c \ - --hash=sha256:dd5476b6c3fe410ee95926873f377b856dbc4e81a9c605a0dc05aaccc6a7c6c6 \ - --hash=sha256:e69140bc2d29a8556f55445c15f5794490852af3de0f609a24003ef174528b79 \ - --hash=sha256:f908a77cbeef9bbd646bd4b81214cbef9ac3dda4181d5092a4aa9797d1bc7774 -parso==0.8.3 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0 \ - --hash=sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75 -pexpect==4.8.0 ; python_version >= "3.8" and python_version < "3.12" and sys_platform != "win32" \ - --hash=sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937 \ - --hash=sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c -pickleshare==0.7.5 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca \ - --hash=sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56 -portalocker==2.7.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:032e81d534a88ec1736d03f780ba073f047a06c478b06e2937486f334e955c51 \ - --hash=sha256:a07c5b4f3985c3cf4798369631fb7011adb498e2a46d8440efc75a8f29a0f983 -prompt-toolkit==3.0.38 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b \ - --hash=sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f -protobuf==4.23.3 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:0149053336a466e3e0b040e54d0b615fc71de86da66791c592cc3c8d18150bf8 \ - --hash=sha256:08fe19d267608d438aa37019236db02b306e33f6b9902c3163838b8e75970223 \ - --hash=sha256:29660574cd769f2324a57fb78127cda59327eb6664381ecfe1c69731b83e8288 \ - --hash=sha256:2991f5e7690dab569f8f81702e6700e7364cc3b5e572725098215d3da5ccc6ac \ - --hash=sha256:3b01a5274ac920feb75d0b372d901524f7e3ad39c63b1a2d55043f3887afe0c1 \ - --hash=sha256:3bcbeb2bf4bb61fe960dd6e005801a23a43578200ea8ceb726d1f6bd0e562ba1 \ - --hash=sha256:447b9786ac8e50ae72cae7a2eec5c5df6a9dbf9aa6f908f1b8bda6032644ea62 \ - --hash=sha256:514b6bbd54a41ca50c86dd5ad6488afe9505901b3557c5e0f7823a0cf67106fb \ - --hash=sha256:5cb9e41188737f321f4fce9a4337bf40a5414b8d03227e1d9fbc59bc3a216e35 \ - --hash=sha256:7a92beb30600332a52cdadbedb40d33fd7c8a0d7f549c440347bc606fb3fe34b \ - --hash=sha256:84ea0bd90c2fdd70ddd9f3d3fc0197cc24ecec1345856c2b5ba70e4d99815359 \ - --hash=sha256:aca6e86a08c5c5962f55eac9b5bd6fce6ed98645d77e8bfc2b952ecd4a8e4f6a \ - --hash=sha256:cc14358a8742c4e06b1bfe4be1afbdf5c9f6bd094dff3e14edb78a1513893ff5 -ptyprocess==0.7.0 ; python_version >= "3.8" and python_version < "3.12" and sys_platform != "win32" \ - --hash=sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35 \ - --hash=sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220 -pure-eval==0.2.2 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:01eaab343580944bc56080ebe0a674b39ec44a945e6d09ba7db3cb8cec289350 \ - --hash=sha256:2b45320af6dfaa1750f543d714b6d1c520a1688dec6fd24d339063ce0aaa9ac3 -pycparser==2.21 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ - --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 -pydantic==1.10.9 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:07293ab08e7b4d3c9d7de4949a0ea571f11e4557d19ea24dd3ae0c524c0c334d \ - --hash=sha256:0a2aabdc73c2a5960e87c3ffebca6ccde88665616d1fd6d3db3178ef427b267a \ - --hash=sha256:0da48717dc9495d3a8f215e0d012599db6b8092db02acac5e0d58a65248ec5bc \ - --hash=sha256:128d9453d92e6e81e881dd7e2484e08d8b164da5507f62d06ceecf84bf2e21d3 \ - --hash=sha256:2196c06484da2b3fded1ab6dbe182bdabeb09f6318b7fdc412609ee2b564c49a \ - --hash=sha256:2e9aec8627a1a6823fc62fb96480abe3eb10168fd0d859ee3d3b395105ae19a7 \ - --hash=sha256:3283b574b01e8dbc982080d8287c968489d25329a463b29a90d4157de4f2baaf \ - --hash=sha256:3c52eb595db83e189419bf337b59154bdcca642ee4b2a09e5d7797e41ace783f \ - --hash=sha256:4b466a23009ff5cdd7076eb56aca537c745ca491293cc38e72bf1e0e00de5b91 \ - --hash=sha256:517a681919bf880ce1dac7e5bc0c3af1e58ba118fd774da2ffcd93c5f96eaece \ - --hash=sha256:5f8bbaf4013b9a50e8100333cc4e3fa2f81214033e05ac5aa44fa24a98670a29 \ - --hash=sha256:6257bb45ad78abacda13f15bde5886efd6bf549dd71085e64b8dcf9919c38b60 \ - --hash=sha256:67195274fd27780f15c4c372f4ba9a5c02dad6d50647b917b6a92bf00b3d301a \ - --hash=sha256:6cafde02f6699ce4ff643417d1a9223716ec25e228ddc3b436fe7e2d25a1f305 \ - --hash=sha256:73ef93e5e1d3c8e83f1ff2e7fdd026d9e063c7e089394869a6e2985696693766 \ - --hash=sha256:7845b31959468bc5b78d7b95ec52fe5be32b55d0d09983a877cca6aedc51068f \ - --hash=sha256:7847ca62e581e6088d9000f3c497267868ca2fa89432714e21a4fb33a04d52e8 \ - --hash=sha256:7e1d5290044f620f80cf1c969c542a5468f3656de47b41aa78100c5baa2b8276 \ - --hash=sha256:7ee829b86ce984261d99ff2fd6e88f2230068d96c2a582f29583ed602ef3fc2c \ - --hash=sha256:83fcff3c7df7adff880622a98022626f4f6dbce6639a88a15a3ce0f96466cb60 \ - --hash=sha256:939328fd539b8d0edf244327398a667b6b140afd3bf7e347cf9813c736211896 \ - --hash=sha256:95c70da2cd3b6ddf3b9645ecaa8d98f3d80c606624b6d245558d202cd23ea3be \ - --hash=sha256:963671eda0b6ba6926d8fc759e3e10335e1dc1b71ff2a43ed2efd6996634dafb \ - --hash=sha256:970b1bdc6243ef663ba5c7e36ac9ab1f2bfecb8ad297c9824b542d41a750b298 \ - --hash=sha256:9863b9420d99dfa9c064042304868e8ba08e89081428a1c471858aa2af6f57c4 \ - --hash=sha256:ad428e92ab68798d9326bb3e5515bc927444a3d71a93b4a2ca02a8a5d795c572 \ - --hash=sha256:b48d3d634bca23b172f47f2335c617d3fcb4b3ba18481c96b7943a4c634f5c8d \ - --hash=sha256:b9cd67fb763248cbe38f0593cd8611bfe4b8ad82acb3bdf2b0898c23415a1f82 \ - --hash=sha256:d111a21bbbfd85c17248130deac02bbd9b5e20b303338e0dbe0faa78330e37e0 \ - --hash=sha256:e1aa5c2410769ca28aa9a7841b80d9d9a1c5f223928ca8bec7e7c9a34d26b1d4 \ - --hash=sha256:e692dec4a40bfb40ca530e07805b1208c1de071a18d26af4a2a0d79015b352ca \ - --hash=sha256:e7c9900b43ac14110efa977be3da28931ffc74c27e96ee89fbcaaf0b0fe338e1 \ - --hash=sha256:eec39224b2b2e861259d6f3c8b6290d4e0fbdce147adb797484a42278a1a486f \ - --hash=sha256:f0b7628fb8efe60fe66fd4adadd7ad2304014770cdc1f4934db41fe46cc8825f \ - --hash=sha256:f50e1764ce9353be67267e7fd0da08349397c7db17a562ad036aa7c8f4adfdb6 \ - --hash=sha256:fab81a92f42d6d525dd47ced310b0c3e10c416bbfae5d59523e63ea22f82b31e -pygments==2.15.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:8ace4d3c1dd481894b2005f560ead0f9f19ee64fe983366be1a21e171d12775c \ - --hash=sha256:db2db3deb4b4179f399a09054b023b6a586b76499d36965813c71aa8ed7b5fd1 -pymilvus==2.2.12 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:420bd043c86638cadd5496d2a842ab4cc3dfd0c4acc5293b09cefb6dd396a4d1 \ - --hash=sha256:f8b9f85e2f4a7a388f874da37ab08c41381de81c84cded5cb034bc90f5d0f470 -python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86 \ - --hash=sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 -python-dotenv==1.0.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:a8df96034aae6d2d50a4ebe8216326c61c3eb64836776504fcca410e5937a3ba \ - --hash=sha256:f5971a9226b701070a4bf2c38c89e5a3f0d64de8debda981d1db98583009122a -pytz==2023.3 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588 \ - --hash=sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb -pywin32==306 ; python_version >= "3.8" and python_version < "3.12" and platform_system == "Windows" \ - --hash=sha256:06d3420a5155ba65f0b72f2699b5bacf3109f36acbe8923765c22938a69dfc8d \ - --hash=sha256:1c73ea9a0d2283d889001998059f5eaaba3b6238f767c9cf2833b13e6a685f65 \ - --hash=sha256:37257794c1ad39ee9be652da0462dc2e394c8159dfd913a8a4e8eb6fd346da0e \ - --hash=sha256:383229d515657f4e3ed1343da8be101000562bf514591ff383ae940cad65458b \ - --hash=sha256:39b61c15272833b5c329a2989999dcae836b1eed650252ab1b7bfbe1d59f30f4 \ - --hash=sha256:5821ec52f6d321aa59e2db7e0a35b997de60c201943557d108af9d4ae1ec7040 \ - --hash=sha256:70dba0c913d19f942a2db25217d9a1b726c278f483a919f1abfed79c9cf64d3a \ - --hash=sha256:72c5f621542d7bdd4fdb716227be0dd3f8565c11b280be6315b06ace35487d36 \ - --hash=sha256:84f4471dbca1887ea3803d8848a1616429ac94a4a8d05f4bc9c5dcfd42ca99c8 \ - --hash=sha256:a7639f51c184c0272e93f244eb24dafca9b1855707d94c192d4a0b4c01e1100e \ - --hash=sha256:e25fd5b485b55ac9c057f67d94bc203f3f6595078d1fb3b458c9c28b7153a802 \ - --hash=sha256:e4c092e2589b5cf0d365849e73e02c391c1349958c5ac3e9d5ccb9a28e017b3a \ - --hash=sha256:e65028133d15b64d2ed8f06dd9fbc268352478d4f9289e69c190ecd6818b6407 \ - --hash=sha256:e8ac1ae3601bee6ca9f7cb4b5363bf1c0badb935ef243c4733ff9a393b1690c0 -qdrant-client==1.3.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:9640855585d1f532094e342f07e0f2ef00652a60fc5d903c92ca3989a1e86318 \ - --hash=sha256:a999358b10e611d71b4b04c6ded36a6cfc963e56b4c3f99d9c1a603ca524a82e -redis==4.6.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:585dc516b9eb042a619ef0a39c3d7d55fe81bdb4df09a52c9cdde0d07bf1aa7d \ - --hash=sha256:e2b03db868160ee4591de3cb90d40ebb50a90dd302138775937f6a42b7ed183c -requests==2.31.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f \ - --hash=sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1 -setuptools==68.0.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:11e52c67415a381d10d6b462ced9cfb97066179f0e871399e006c4ab101fc85f \ - --hash=sha256:baf1fdb41c6da4cd2eae722e135500da913332ab3f2f5c7d33af9b492acb5235 -six==1.16.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ - --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 -sniffio==1.3.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101 \ - --hash=sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384 -stack-data==0.6.2 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:32d2dd0376772d01b6cb9fc996f3c8b57a357089dec328ed4b6553d037eaf815 \ - --hash=sha256:cbb2a53eb64e5785878201a97ed7c7b94883f48b87bfb0bbe8b623c74679e4a8 -stopit==1.1.2 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:f7f39c583fd92027bd9d06127b259aee7a5b7945c1f1fa56263811e1e766996d -tomli==2.0.1 ; python_version >= "3.8" and python_version < "3.11" \ - --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ - --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f -tqdm==4.65.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:1871fb68a86b8fb3b59ca4cdd3dcccbc7e6d613eeed31f4c332531977b89beb5 \ - --hash=sha256:c4f53a17fe37e132815abceec022631be8ffe1b9381c2e6e30aa70edc99e9671 -traitlets==5.9.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:9e6ec080259b9a5940c797d58b613b5e31441c2257b87c2e795c5228ae80d2d8 \ - --hash=sha256:f6cde21a9c68cf756af02035f72d5a723bf607e862e7be33ece505abf4a3bad9 -typer==0.6.1 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:2d5720a5e63f73eaf31edaa15f6ab87f35f0690f8ca233017d7d23d743a91d73 \ - --hash=sha256:54b19e5df18654070a82f8c2aa1da456a4ac16a2a83e6dcd9f170e291c56338e -typing-extensions==4.5.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb \ - --hash=sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4 -typish==1.9.3 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:03cfee5e6eb856dbf90244e18f4e4c41044c8790d5779f4e775f63f982e2f896 -tzdata==2023.3 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a \ - --hash=sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda -ujson==5.8.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:07d459aca895eb17eb463b00441986b021b9312c6c8cc1d06880925c7f51009c \ - --hash=sha256:0be81bae295f65a6896b0c9030b55a106fb2dec69ef877253a87bc7c9c5308f7 \ - --hash=sha256:0fe1b7edaf560ca6ab023f81cbeaf9946a240876a993b8c5a21a1c539171d903 \ - --hash=sha256:102bf31c56f59538cccdfec45649780ae00657e86247c07edac434cb14d5388c \ - --hash=sha256:11da6bed916f9bfacf13f4fc6a9594abd62b2bb115acfb17a77b0f03bee4cfd5 \ - --hash=sha256:16fde596d5e45bdf0d7de615346a102510ac8c405098e5595625015b0d4b5296 \ - --hash=sha256:193349a998cd821483a25f5df30b44e8f495423840ee11b3b28df092ddfd0f7f \ - --hash=sha256:20768961a6a706170497129960762ded9c89fb1c10db2989c56956b162e2a8a3 \ - --hash=sha256:27a2a3c7620ebe43641e926a1062bc04e92dbe90d3501687957d71b4bdddaec4 \ - --hash=sha256:2873d196725a8193f56dde527b322c4bc79ed97cd60f1d087826ac3290cf9207 \ - --hash=sha256:299a312c3e85edee1178cb6453645217ba23b4e3186412677fa48e9a7f986de6 \ - --hash=sha256:2a64cc32bb4a436e5813b83f5aab0889927e5ea1788bf99b930fad853c5625cb \ - --hash=sha256:2b852bdf920fe9f84e2a2c210cc45f1b64f763b4f7d01468b33f7791698e455e \ - --hash=sha256:2e72ba76313d48a1a3a42e7dc9d1db32ea93fac782ad8dde6f8b13e35c229130 \ - --hash=sha256:3659deec9ab9eb19e8646932bfe6fe22730757c4addbe9d7d5544e879dc1b721 \ - --hash=sha256:3b27a8da7a080add559a3b73ec9ebd52e82cc4419f7c6fb7266e62439a055ed0 \ - --hash=sha256:3f9b63530a5392eb687baff3989d0fb5f45194ae5b1ca8276282fb647f8dcdb3 \ - --hash=sha256:407d60eb942c318482bbfb1e66be093308bb11617d41c613e33b4ce5be789adc \ - --hash=sha256:40931d7c08c4ce99adc4b409ddb1bbb01635a950e81239c2382cfe24251b127a \ - --hash=sha256:48c7d373ff22366eecfa36a52b9b55b0ee5bd44c2b50e16084aa88b9de038916 \ - --hash=sha256:4ddeabbc78b2aed531f167d1e70387b151900bc856d61e9325fcdfefb2a51ad8 \ - --hash=sha256:5ac97b1e182d81cf395ded620528c59f4177eee024b4b39a50cdd7b720fdeec6 \ - --hash=sha256:5ce24909a9c25062e60653073dd6d5e6ec9d6ad7ed6e0069450d5b673c854405 \ - --hash=sha256:69b3104a2603bab510497ceabc186ba40fef38ec731c0ccaa662e01ff94a985c \ - --hash=sha256:6a4dafa9010c366589f55afb0fd67084acd8added1a51251008f9ff2c3e44042 \ - --hash=sha256:6d230d870d1ce03df915e694dcfa3f4e8714369cce2346686dbe0bc8e3f135e7 \ - --hash=sha256:78e318def4ade898a461b3d92a79f9441e7e0e4d2ad5419abed4336d702c7425 \ - --hash=sha256:7a42baa647a50fa8bed53d4e242be61023bd37b93577f27f90ffe521ac9dc7a3 \ - --hash=sha256:7cba16b26efe774c096a5e822e4f27097b7c81ed6fb5264a2b3f5fd8784bab30 \ - --hash=sha256:7d8283ac5d03e65f488530c43d6610134309085b71db4f675e9cf5dff96a8282 \ - --hash=sha256:7ecc33b107ae88405aebdb8d82c13d6944be2331ebb04399134c03171509371a \ - --hash=sha256:9249fdefeb021e00b46025e77feed89cd91ffe9b3a49415239103fc1d5d9c29a \ - --hash=sha256:9399eaa5d1931a0ead49dce3ffacbea63f3177978588b956036bfe53cdf6af75 \ - --hash=sha256:94c7bd9880fa33fcf7f6d7f4cc032e2371adee3c5dba2922b918987141d1bf07 \ - --hash=sha256:9571de0c53db5cbc265945e08f093f093af2c5a11e14772c72d8e37fceeedd08 \ - --hash=sha256:9721cd112b5e4687cb4ade12a7b8af8b048d4991227ae8066d9c4b3a6642a582 \ - --hash=sha256:9ab282d67ef3097105552bf151438b551cc4bedb3f24d80fada830f2e132aeb9 \ - --hash=sha256:9d9707e5aacf63fb919f6237d6490c4e0244c7f8d3dc2a0f84d7dec5db7cb54c \ - --hash=sha256:a70f776bda2e5072a086c02792c7863ba5833d565189e09fabbd04c8b4c3abba \ - --hash=sha256:a89cf3cd8bf33a37600431b7024a7ccf499db25f9f0b332947fbc79043aad879 \ - --hash=sha256:a8c91b6f4bf23f274af9002b128d133b735141e867109487d17e344d38b87d94 \ - --hash=sha256:ad24ec130855d4430a682c7a60ca0bc158f8253ec81feed4073801f6b6cb681b \ - --hash=sha256:ae7f4725c344bf437e9b881019c558416fe84ad9c6b67426416c131ad577df67 \ - --hash=sha256:b748797131ac7b29826d1524db1cc366d2722ab7afacc2ce1287cdafccddbf1f \ - --hash=sha256:bdf04c6af3852161be9613e458a1fb67327910391de8ffedb8332e60800147a2 \ - --hash=sha256:bf5737dbcfe0fa0ac8fa599eceafae86b376492c8f1e4b84e3adf765f03fb564 \ - --hash=sha256:c4e7bb7eba0e1963f8b768f9c458ecb193e5bf6977090182e2b4f4408f35ac76 \ - --hash=sha256:d524a8c15cfc863705991d70bbec998456a42c405c291d0f84a74ad7f35c5109 \ - --hash=sha256:d53039d39de65360e924b511c7ca1a67b0975c34c015dd468fca492b11caa8f7 \ - --hash=sha256:d6f84a7a175c75beecde53a624881ff618e9433045a69fcfb5e154b73cdaa377 \ - --hash=sha256:e0147d41e9fb5cd174207c4a2895c5e24813204499fd0839951d4c8784a23bf5 \ - --hash=sha256:e3673053b036fd161ae7a5a33358ccae6793ee89fd499000204676baafd7b3aa \ - --hash=sha256:e54578fa8838ddc722539a752adfce9372474114f8c127bb316db5392d942f8b \ - --hash=sha256:eb0142f6f10f57598655340a3b2c70ed4646cbe674191da195eb0985a9813b83 \ - --hash=sha256:efeddf950fb15a832376c0c01d8d7713479fbeceaed1eaecb2665aa62c305aec \ - --hash=sha256:f26629ac531d712f93192c233a74888bc8b8212558bd7d04c349125f10199fcf \ - --hash=sha256:f2e385a7679b9088d7bc43a64811a7713cc7c33d032d020f757c54e7d41931ae \ - --hash=sha256:f3554eaadffe416c6f543af442066afa6549edbc34fe6a7719818c3e72ebfe95 \ - --hash=sha256:f4511560d75b15ecb367eef561554959b9d49b6ec3b8d5634212f9fed74a6df1 \ - --hash=sha256:f504117a39cb98abba4153bf0b46b4954cc5d62f6351a14660201500ba31fe7f \ - --hash=sha256:fb87decf38cc82bcdea1d7511e73629e651bdec3a43ab40985167ab8449b769c -urllib3==1.26.16 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:8d36afa7616d8ab714608411b4a3b13e58f463aee519024578e062e141dce20f \ - --hash=sha256:8f135f6502756bde6b2a9b28989df5fbe87c9970cecaa69041edcce7f0589b14 -validators==0.20.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:24148ce4e64100a2d5e267233e23e7afeb55316b47d30faae7eb6e7292bc226a -wcwidth==0.2.6 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:795b138f6875577cd91bba52baf9e445cd5118fd32723b460e30a0af30ea230e \ - --hash=sha256:a5220780a404dbe3353789870978e472cfe477761f06ee55077256e509b156d0 -weaviate-client==3.21.0 ; python_version >= "3.8" and python_version < "3.12" \ - --hash=sha256:420444ded7106fb000f4f8b2321b5f5fa2387825aa7a303d702accf61026f9d2 \ - --hash=sha256:ec94ac554883c765e94da8b2947c4f0fa4a0378ed3bbe9f3653df3a5b1745a6d +anyio==3.7.0 ; python_version >= "3.8" and python_version < "3.12" +appnope==0.1.3 ; python_version >= "3.8" and python_version < "3.12" and sys_platform == "darwin" +asttokens==2.2.1 ; python_version >= "3.8" and python_version < "3.12" +async-timeout==4.0.2 ; python_version >= "3.8" and python_full_version <= "3.11.2" +authlib==1.2.1 ; python_version >= "3.8" and python_version < "3.12" +backcall==0.2.0 ; python_version >= "3.8" and python_version < "3.12" +backoff==2.2.1 ; python_version >= "3.8" and python_version < "3.12" +certifi==2023.5.7 ; python_version >= "3.8" and python_version < "3.12" +cffi==1.15.1 ; python_version >= "3.8" and python_version < "3.12" +charset-normalizer==3.1.0 ; python_version >= "3.8" and python_version < "3.12" +click==8.1.3 ; python_version >= "3.8" and python_version < "3.12" +colorama==0.4.6 ; python_version >= "3.8" and python_version < "3.12" and platform_system == "Windows" or python_version >= "3.8" and python_version < "3.12" and sys_platform == "win32" +cryptography==41.0.1 ; python_version >= "3.8" and python_version < "3.12" +decorator==5.1.1 ; python_version >= "3.8" and python_version < "3.12" +elastic-transport==8.4.0 ; python_version >= "3.8" and python_version < "3.12" +elasticsearch==8.8.0 ; python_version >= "3.8" and python_version < "3.12" +environs==9.5.0 ; python_version >= "3.8" and python_version < "3.12" +exceptiongroup==1.1.1 ; python_version >= "3.8" and python_version < "3.11" +executing==1.2.0 ; python_version >= "3.8" and python_version < "3.12" +grpcio-tools==1.53.0 ; python_version >= "3.8" and python_version < "3.12" +grpcio==1.53.0 ; python_version >= "3.8" and python_version < "3.12" +h11==0.14.0 ; python_version >= "3.8" and python_version < "3.12" +h2==4.1.0 ; python_version >= "3.8" and python_version < "3.12" +h5py==3.9.0 ; python_version >= "3.8" and python_version < "3.12" +hpack==4.0.0 ; python_version >= "3.8" and python_version < "3.12" +httpcore==0.17.2 ; python_version >= "3.8" and python_version < "3.12" +httpx[http2]==0.24.1 ; python_version >= "3.8" and python_version < "3.12" +hyperframe==6.0.1 ; python_version >= "3.8" and python_version < "3.12" +idna==3.4 ; python_version >= "3.8" and python_version < "3.12" +ipdb==0.13.13 ; python_version >= "3.8" and python_version < "3.12" +ipython==8.12.2 ; python_version >= "3.8" and python_version < "3.12" +jedi==0.18.2 ; python_version >= "3.8" and python_version < "3.12" +jsons==1.6.3 ; python_version >= "3.8" and python_version < "3.12" +marshmallow==3.19.0 ; python_version >= "3.8" and python_version < "3.12" +matplotlib-inline==0.1.6 ; python_version >= "3.8" and python_version < "3.12" +numpy==1.24.4 ; python_version < "3.12" and python_version >= "3.8" +opensearch-py==2.2.0 ; python_version >= "3.8" and python_version < "3.12" +packaging==23.1 ; python_version >= "3.8" and python_version < "3.12" +pandas==2.0.2 ; python_version >= "3.8" and python_version < "3.12" +parso==0.8.3 ; python_version >= "3.8" and python_version < "3.12" +pexpect==4.8.0 ; python_version >= "3.8" and python_version < "3.12" and sys_platform != "win32" +pickleshare==0.7.5 ; python_version >= "3.8" and python_version < "3.12" +portalocker==2.7.0 ; python_version >= "3.8" and python_version < "3.12" +prompt-toolkit==3.0.38 ; python_version >= "3.8" and python_version < "3.12" +protobuf==4.23.3 ; python_version >= "3.8" and python_version < "3.12" +ptyprocess==0.7.0 ; python_version >= "3.8" and python_version < "3.12" and sys_platform != "win32" +pure-eval==0.2.2 ; python_version >= "3.8" and python_version < "3.12" +pycparser==2.21 ; python_version >= "3.8" and python_version < "3.12" +pydantic==1.10.9 ; python_version >= "3.8" and python_version < "3.12" +pygments==2.15.1 ; python_version >= "3.8" and python_version < "3.12" +pymilvus==2.2.12 ; python_version >= "3.8" and python_version < "3.12" +python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "3.12" +python-dotenv==1.0.0 ; python_version >= "3.8" and python_version < "3.12" +pytz==2023.3 ; python_version >= "3.8" and python_version < "3.12" +pywin32==306 ; python_version >= "3.8" and python_version < "3.12" and platform_system == "Windows" +qdrant-client==1.3.1 ; python_version >= "3.8" and python_version < "3.12" +redis==4.6.0 ; python_version >= "3.8" and python_version < "3.12" +requests==2.31.0 ; python_version >= "3.8" and python_version < "3.12" +setuptools==68.0.0 ; python_version >= "3.8" and python_version < "3.12" +six==1.16.0 ; python_version >= "3.8" and python_version < "3.12" +sniffio==1.3.0 ; python_version >= "3.8" and python_version < "3.12" +stack-data==0.6.2 ; python_version >= "3.8" and python_version < "3.12" +stopit==1.1.2 ; python_version >= "3.8" and python_version < "3.12" +tomli==2.0.1 ; python_version >= "3.8" and python_version < "3.11" +tqdm==4.65.0 ; python_version >= "3.8" and python_version < "3.12" +traitlets==5.9.0 ; python_version >= "3.8" and python_version < "3.12" +typer==0.6.1 ; python_version >= "3.8" and python_version < "3.12" +typing-extensions==4.5.0 ; python_version >= "3.8" and python_version < "3.12" +typish==1.9.3 ; python_version >= "3.8" and python_version < "3.12" +tzdata==2023.3 ; python_version >= "3.8" and python_version < "3.12" +ujson==5.8.0 ; python_version >= "3.8" and python_version < "3.12" +urllib3==1.26.16 ; python_version >= "3.8" and python_version < "3.12" +validators==0.20.0 ; python_version >= "3.8" and python_version < "3.12" +wcwidth==0.2.6 ; python_version >= "3.8" and python_version < "3.12" +weaviate-client==3.22.1 ; python_version >= "3.8" and python_version < "3.12" From 42fc051f5e30d0d2f362ebda0e5b48595391c1ff Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 00:18:25 +0100 Subject: [PATCH 019/209] Specify batch_size (and reduce from 64 to 32) on milvus configs. --- engine/clients/milvus/upload.py | 4 +++- experiments/configurations/milvus-on-disk.json | 2 +- experiments/configurations/milvus-single-node.json | 14 +++++++------- 3 files changed, 11 insertions(+), 9 deletions(-) diff --git a/engine/clients/milvus/upload.py b/engine/clients/milvus/upload.py index 03c3b88a..87c3fa84 100644 --- a/engine/clients/milvus/upload.py +++ b/engine/clients/milvus/upload.py @@ -1,3 +1,4 @@ +import logging import multiprocessing as mp from typing import List, Optional import backoff @@ -70,7 +71,8 @@ def upload_batch( @classmethod @backoff.on_exception(backoff.expo, MilvusException, - max_time=120) + max_time=600, + backoff_log_level=logging.WARN) def upload_with_backoff(cls, field_values, ids, vectors): cls.collection.insert([ids, vectors] + field_values) diff --git a/experiments/configurations/milvus-on-disk.json b/experiments/configurations/milvus-on-disk.json index 971bd0ee..4f255338 100644 --- a/experiments/configurations/milvus-on-disk.json +++ b/experiments/configurations/milvus-on-disk.json @@ -7,6 +7,6 @@ "search_params": [ { "parallel": 8, "params": { } } ], - "upload_params": { "parallel": 4, "index_type": "DISKANN", "index_params": { } } + "upload_params": { "parallel": 4, "batch_size": 32, "index_type": "DISKANN", "index_params": { } } } ] \ No newline at end of file diff --git a/experiments/configurations/milvus-single-node.json b/experiments/configurations/milvus-single-node.json index b6ad3fdb..618af904 100644 --- a/experiments/configurations/milvus-single-node.json +++ b/experiments/configurations/milvus-single-node.json @@ -11,7 +11,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "index_params": { "efConstruction": 100, "M": 16 } } + "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 100, "M": 16 } } }, { "name": "milvus-m-16-ef-128", @@ -25,7 +25,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 16 } } + "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 128, "M": 16 } } }, { "name": "milvus-m-32-ef-128", @@ -39,7 +39,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 32 } } + "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 128, "M": 32 } } }, { "name": "milvus-m-32-ef-256", @@ -53,7 +53,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 32 } } + "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 256, "M": 32 } } }, { "name": "milvus-m-32-ef-512", @@ -67,7 +67,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 32 } } + "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 512, "M": 32 } } }, { "name": "milvus-m-64-ef-256", @@ -81,7 +81,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 64 } } + "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 256, "M": 64 } } }, { "name": "milvus-m-64-ef-512", @@ -95,6 +95,6 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 64 } } + "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 512, "M": 64 } } } ] \ No newline at end of file From 228b10d8f3bac6ff62b83cb6c987943eabe18f76 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 13:24:07 +0100 Subject: [PATCH 020/209] Updating milvus upload params from 16 to 4 concurrent clients doing batches of 32 vectors --- experiments/configurations/milvus-single-node.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/experiments/configurations/milvus-single-node.json b/experiments/configurations/milvus-single-node.json index 618af904..41df2bf2 100644 --- a/experiments/configurations/milvus-single-node.json +++ b/experiments/configurations/milvus-single-node.json @@ -11,7 +11,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 100, "M": 16 } } + "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 100, "M": 16 } } }, { "name": "milvus-m-16-ef-128", @@ -25,7 +25,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 128, "M": 16 } } + "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 128, "M": 16 } } }, { "name": "milvus-m-32-ef-128", @@ -39,7 +39,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 128, "M": 32 } } + "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 128, "M": 32 } } }, { "name": "milvus-m-32-ef-256", @@ -53,7 +53,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 256, "M": 32 } } + "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 256, "M": 32 } } }, { "name": "milvus-m-32-ef-512", @@ -67,7 +67,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 512, "M": 32 } } + "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 512, "M": 32 } } }, { "name": "milvus-m-64-ef-256", @@ -81,7 +81,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 256, "M": 64 } } + "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 256, "M": 64 } } }, { "name": "milvus-m-64-ef-512", @@ -95,6 +95,6 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 16, "batch_size": 32, "index_params": { "efConstruction": 512, "M": 64 } } + "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 512, "M": 64 } } } ] \ No newline at end of file From 55f91c2906cf3b57f93025e51fbb021c203d4e81 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 15:09:07 +0100 Subject: [PATCH 021/209] Cleanup on milvus client --- engine/base_client/upload.py | 13 ++++++++----- engine/clients/milvus/config.py | 21 ++++++++++++++++++++- engine/clients/milvus/configure.py | 26 ++++++-------------------- engine/clients/milvus/search.py | 20 ++++---------------- engine/clients/milvus/upload.py | 18 ++---------------- engine/clients/weaviate/upload.py | 3 ++- 6 files changed, 42 insertions(+), 59 deletions(-) diff --git a/engine/base_client/upload.py b/engine/base_client/upload.py index b70b8e6a..a7cfe811 100644 --- a/engine/base_client/upload.py +++ b/engine/base_client/upload.py @@ -53,12 +53,15 @@ def upload( self.upload_params, ), ) as pool: - latencies = list( - pool.imap( - self.__class__._upload_batch, - iter_batches(tqdm.tqdm(records), batch_size), + try: + latencies = list( + pool.imap( + self.__class__._upload_batch, + iter_batches(tqdm.tqdm(records), batch_size), + ) ) - ) + except Exception as e: + raise e upload_time = time.perf_counter() - start diff --git a/engine/clients/milvus/config.py b/engine/clients/milvus/config.py index 3ebec8c2..f266af50 100644 --- a/engine/clients/milvus/config.py +++ b/engine/clients/milvus/config.py @@ -1,4 +1,4 @@ -from pymilvus import DataType +from pymilvus import DataType, connections import os from engine.base_client.distances import Distance @@ -27,3 +27,22 @@ DataType.VARCHAR: "---MILVUS DOES NOT ACCEPT EMPTY STRINGS---", DataType.FLOAT: 0.0, } + + +def get_milvus_client(connection_params: dict, host: str, alias: str): + h = "" + uri = "" + if host.startswith("http"): + uri = host + else: + h = host + client = connections.connect( + alias=alias, + host=h, + uri=uri, + port=MILVUS_PORT, + user=MILVUS_USER, + password=MILVUS_PASS, + **connection_params + ) + return client \ No newline at end of file diff --git a/engine/clients/milvus/configure.py b/engine/clients/milvus/configure.py index 4ed48384..0149dea5 100644 --- a/engine/clients/milvus/configure.py +++ b/engine/clients/milvus/configure.py @@ -17,7 +17,7 @@ DTYPE_EXTRAS, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_PASS, MILVUS_USER, MILVUS_PORT, + get_milvus_client, ) @@ -32,29 +32,15 @@ class MilvusConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - h = "" - uri = "" - if host.startswith("http"): - uri = host - else: - h = host - self.client = connections.connect( - alias=MILVUS_DEFAULT_ALIAS, - host=h, - uri=uri, - port=MILVUS_PORT, - user=MILVUS_USER, - password=MILVUS_PASS, - **connection_params, - ) + self.client = get_milvus_client(connection_params, host, MILVUS_DEFAULT_ALIAS) print("established connection") def clean(self): - try: + if utility.has_collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS): + print("dropping collection named {MILVUS_COLLECTION_NAME}...") utility.drop_collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) - utility.has_collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) - except MilvusException: - pass + print("dropped collection named {MILVUS_COLLECTION_NAME}...") + assert utility.has_collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) is False def recreate(self, dataset: Dataset, collection_params): idx = FieldSchema( diff --git a/engine/clients/milvus/search.py b/engine/clients/milvus/search.py index c36bb02a..1e48dc90 100644 --- a/engine/clients/milvus/search.py +++ b/engine/clients/milvus/search.py @@ -8,7 +8,7 @@ DISTANCE_MAPPING, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_PASS, MILVUS_USER, MILVUS_PORT, + get_milvus_client, ) from engine.clients.milvus.parser import MilvusConditionParser @@ -22,25 +22,13 @@ class MilvusSearcher(BaseSearcher): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): - h = "" - uri = "" - if host.startswith("http"): - uri = host - else: - h = host - cls.client = connections.connect( - alias=MILVUS_DEFAULT_ALIAS, - host=h, - uri=uri, - port=MILVUS_PORT, - user=MILVUS_USER, - password=MILVUS_PASS, - **connection_params - ) + cls.client = get_milvus_client(connection_params, host, MILVUS_DEFAULT_ALIAS) cls.collection = Collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) cls.search_params = search_params cls.distance = DISTANCE_MAPPING[distance] + + @classmethod def get_mp_start_method(cls): return "forkserver" if "forkserver" in mp.get_all_start_methods() else "spawn" diff --git a/engine/clients/milvus/upload.py b/engine/clients/milvus/upload.py index 87c3fa84..8157608f 100644 --- a/engine/clients/milvus/upload.py +++ b/engine/clients/milvus/upload.py @@ -16,7 +16,7 @@ DTYPE_DEFAULT, MILVUS_COLLECTION_NAME, MILVUS_DEFAULT_ALIAS, - MILVUS_USER, MILVUS_PASS, MILVUS_PORT, + get_milvus_client, ) @@ -32,21 +32,7 @@ def get_mp_start_method(cls): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - h = "" - uri = "" - if host.startswith("http"): - uri = host - else: - h = host - cls.client = connections.connect( - alias=MILVUS_DEFAULT_ALIAS, - host=h, - uri=uri, - port=MILVUS_PORT, - user=MILVUS_USER, - password=MILVUS_PASS, - **connection_params - ) + cls.client = get_milvus_client(connection_params, host, MILVUS_DEFAULT_ALIAS) cls.collection = Collection(MILVUS_COLLECTION_NAME, using=MILVUS_DEFAULT_ALIAS) cls.upload_params = upload_params cls.distance = DISTANCE_MAPPING[distance] diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index e31855c4..431c61d0 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -1,12 +1,13 @@ import uuid from typing import List, Optional +from weaviate import Client from engine.base_client.upload import BaseUploader from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client class WeaviateUploader(BaseUploader): - client = None + client : Client = None upload_params = {} @classmethod From 96410800fcf4275194b51b759b37c48862dffc57 Mon Sep 17 00:00:00 2001 From: alon Date: Wed, 12 Jul 2023 18:21:15 +0300 Subject: [PATCH 022/209] Change recall computation to be as ann-benchmarks' --- engine/base_client/search.py | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 64550df0..a9ea5b89 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -50,9 +50,17 @@ def _search_one(cls, query, top: Optional[int] = None): precision = 1.0 if query.expected_result: - ids = set(x[0] for x in search_res) - precision = len(ids.intersection(query.expected_result[:top])) / top - + # This was Qdrant original recall calculation + # ids = set(x[0] for x in search_res) + # precision = len(ids.intersection(query.expected_result[:top])) / top + # This is ann-benchmark recall calculation + epsilon = 1e-3 + threshold = query.expected_scores[top - 1] + epsilon + actual = 0.0 + for cand_res in search_res[:top]: + if cand_res[1] <= threshold: + actual += 1 + precision = actual/top return precision, end - start def search_all( From e10887405029f3ee1614de17a26386ebce8af3a0 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 16:46:32 +0100 Subject: [PATCH 023/209] Reducing weaviate batch size due to recurrent ingest errors. ensuring cluster is ready/alive before benchmark --- engine/clients/weaviate/config.py | 2 ++ engine/clients/weaviate/search.py | 2 ++ engine/clients/weaviate/upload.py | 4 ++-- .../configurations/weaviate-single-node.json | 14 +++++++------- 4 files changed, 13 insertions(+), 9 deletions(-) diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index feeaa60f..79dd1e80 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -17,4 +17,6 @@ def setup_client(connection_params, host): if WEAVIATE_API_KEY is not None: auth_client_secret = AuthApiKey(WEAVIATE_API_KEY) c = Client(url, auth_client_secret, **connection_params) + # Ping Weaviate's live state. + assert c.is_live() is True return c \ No newline at end of file diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index 80ef3165..8d69470c 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -17,6 +17,8 @@ class WeaviateSearcher(BaseSearcher): def init_client(cls, host, distance, connection_params: dict, search_params: dict): cls.client = setup_client(connection_params, host) cls.search_params = search_params + # Ping Weaviate's ready state + assert cls.client.is_ready() is True @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index 431c61d0..d113927e 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -35,8 +35,8 @@ def upload_batch( # Weaviate introduced the batch_size, so it can handle built-in client's # multi-threading. That should make the upload faster. cls.client.batch.configure( - batch_size=100, - timeout_retries=3, + batch_size=len(vectors), + timeout_retries=5, ) with cls.client.batch as batch: diff --git a/experiments/configurations/weaviate-single-node.json b/experiments/configurations/weaviate-single-node.json index 918e74ed..4b2ebb4a 100644 --- a/experiments/configurations/weaviate-single-node.json +++ b/experiments/configurations/weaviate-single-node.json @@ -9,7 +9,7 @@ "search_params": [ { "parallel": 8, "vectorIndexConfig": { "ef": 128} } ], - "upload_params": { "batch_size": 1000, "parallel": 5 } + "upload_params": { "batch_size": 32, "parallel": 4 } }, { "name": "weaviate-m-16-ef-128", @@ -25,7 +25,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 1000, "parallel": 5 } + "upload_params": { "batch_size": 32, "parallel": 4 } }, { "name": "weaviate-m-32-ef-128", @@ -41,7 +41,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 1000, "parallel": 5 } + "upload_params": { "batch_size": 32, "parallel": 4 } }, { "name": "weaviate-m-32-ef-256", @@ -57,7 +57,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 1000, "parallel": 5 } + "upload_params": { "batch_size": 32, "parallel": 4 } }, { "name": "weaviate-m-32-ef-512", @@ -73,7 +73,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 1000, "parallel": 5 } + "upload_params": { "batch_size": 32, "parallel": 4 } }, { "name": "weaviate-m-64-ef-256", @@ -89,7 +89,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 1000, "parallel": 5 } + "upload_params": { "batch_size": 32, "parallel": 4 } }, { "name": "weaviate-m-64-ef-512", @@ -105,6 +105,6 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 10000, "parallel": 1 } + "upload_params": { "batch_size": 32, "parallel": 4 } } ] \ No newline at end of file From 60360ad134f2db8aeb90dc1f7ec1b04f1c40211c Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 16:48:49 +0100 Subject: [PATCH 024/209] Reducing milvus batch size to ensure a steady ingestion --- experiments/configurations/milvus-on-disk.json | 2 +- experiments/configurations/milvus-single-node.json | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/experiments/configurations/milvus-on-disk.json b/experiments/configurations/milvus-on-disk.json index 4f255338..c33e0e50 100644 --- a/experiments/configurations/milvus-on-disk.json +++ b/experiments/configurations/milvus-on-disk.json @@ -7,6 +7,6 @@ "search_params": [ { "parallel": 8, "params": { } } ], - "upload_params": { "parallel": 4, "batch_size": 32, "index_type": "DISKANN", "index_params": { } } + "upload_params": { "parallel": 4, "batch_size": 16, "index_type": "DISKANN", "index_params": { } } } ] \ No newline at end of file diff --git a/experiments/configurations/milvus-single-node.json b/experiments/configurations/milvus-single-node.json index 41df2bf2..cb7b6328 100644 --- a/experiments/configurations/milvus-single-node.json +++ b/experiments/configurations/milvus-single-node.json @@ -11,7 +11,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 100, "M": 16 } } + "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 100, "M": 16 } } }, { "name": "milvus-m-16-ef-128", @@ -25,7 +25,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 128, "M": 16 } } + "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 128, "M": 16 } } }, { "name": "milvus-m-32-ef-128", @@ -39,7 +39,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 128, "M": 32 } } + "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 128, "M": 32 } } }, { "name": "milvus-m-32-ef-256", @@ -53,7 +53,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 256, "M": 32 } } + "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 256, "M": 32 } } }, { "name": "milvus-m-32-ef-512", @@ -67,7 +67,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 512, "M": 32 } } + "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 512, "M": 32 } } }, { "name": "milvus-m-64-ef-256", @@ -81,7 +81,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 256, "M": 64 } } + "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 256, "M": 64 } } }, { "name": "milvus-m-64-ef-512", @@ -95,6 +95,6 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 32, "index_params": { "efConstruction": 512, "M": 64 } } + "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 512, "M": 64 } } } ] \ No newline at end of file From 832fc8684c907f0bcecaf4b74c2b6556bce920d8 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 18:04:14 +0100 Subject: [PATCH 025/209] Increasing timeout config for weaviate. Reduce parallel count on ingestion to avoid bad state --- .../configurations/weaviate-single-node.json | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/experiments/configurations/weaviate-single-node.json b/experiments/configurations/weaviate-single-node.json index 4b2ebb4a..f8885ff7 100644 --- a/experiments/configurations/weaviate-single-node.json +++ b/experiments/configurations/weaviate-single-node.json @@ -3,19 +3,19 @@ "name": "weaviate-default", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 100, "maxConnections": 16 } }, "search_params": [ { "parallel": 8, "vectorIndexConfig": { "ef": 128} } ], - "upload_params": { "batch_size": 32, "parallel": 4 } + "upload_params": { "batch_size": 32, "parallel": 1 } }, { "name": "weaviate-m-16-ef-128", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 128, "maxConnections": 16 } }, "search_params": [ @@ -25,13 +25,13 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 4 } + "upload_params": { "batch_size": 32, "parallel": 1 } }, { "name": "weaviate-m-32-ef-128", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 128, "maxConnections": 32 } }, "search_params": [ @@ -41,13 +41,13 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 4 } + "upload_params": { "batch_size": 32, "parallel": 1 } }, { "name": "weaviate-m-32-ef-256", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 256, "maxConnections": 32 } }, "search_params": [ @@ -57,13 +57,13 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 4 } + "upload_params": { "batch_size": 32, "parallel": 1 } }, { "name": "weaviate-m-32-ef-512", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 512, "maxConnections": 32 } }, "search_params": [ @@ -73,13 +73,13 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 4 } + "upload_params": { "batch_size": 32, "parallel": 1 } }, { "name": "weaviate-m-64-ef-256", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 256, "maxConnections": 64 } }, "search_params": [ @@ -89,13 +89,13 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 4 } + "upload_params": { "batch_size": 32, "parallel": 1 } }, { "name": "weaviate-m-64-ef-512", "engine": "weaviate", "connection_params": { - "timeout_config": 1000 + "timeout_config": 90000 }, "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 512, "maxConnections": 64 } }, "search_params": [ @@ -105,6 +105,6 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 4 } + "upload_params": { "batch_size": 32, "parallel": 1 } } ] \ No newline at end of file From f8b4b7a3995fa2dca0b1b480b7820f8e6b3e3021 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 20:21:26 +0100 Subject: [PATCH 026/209] Added single client weviate config --- ...e-node.json => __weaviate-single-node.txt} | 0 .../weaviate-single-node-single-client.json | 86 +++++++++++++++++++ 2 files changed, 86 insertions(+) rename experiments/configurations/{weaviate-single-node.json => __weaviate-single-node.txt} (100%) create mode 100644 experiments/configurations/weaviate-single-node-single-client.json diff --git a/experiments/configurations/weaviate-single-node.json b/experiments/configurations/__weaviate-single-node.txt similarity index 100% rename from experiments/configurations/weaviate-single-node.json rename to experiments/configurations/__weaviate-single-node.txt diff --git a/experiments/configurations/weaviate-single-node-single-client.json b/experiments/configurations/weaviate-single-node-single-client.json new file mode 100644 index 00000000..720000f0 --- /dev/null +++ b/experiments/configurations/weaviate-single-node-single-client.json @@ -0,0 +1,86 @@ +[ + { + "name": "weaviate-default", + "engine": "weaviate", + "connection_params": { + "timeout_config": 90000 + }, + "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 100, "maxConnections": 16 } }, + "search_params": [ + { "parallel": 8, "vectorIndexConfig": { "ef": 128} } + ], + "upload_params": { "batch_size": 32, "parallel": 1 } + }, + { + "name": "weaviate-m-16-ef-128", + "engine": "weaviate", + "connection_params": { + "timeout_config": 90000 + }, + "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } + ], + "upload_params": { "batch_size": 32, "parallel": 1 } + }, + { + "name": "weaviate-m-32-ef-128", + "engine": "weaviate", + "connection_params": { + "timeout_config": 90000 + }, + "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } + ], + "upload_params": { "batch_size": 32, "parallel": 1 } + }, + { + "name": "weaviate-m-32-ef-256", + "engine": "weaviate", + "connection_params": { + "timeout_config": 90000 + }, + "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } + ], + "upload_params": { "batch_size": 32, "parallel": 1 } + }, + { + "name": "weaviate-m-32-ef-512", + "engine": "weaviate", + "connection_params": { + "timeout_config": 90000 + }, + "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } + ], + "upload_params": { "batch_size": 32, "parallel": 1 } + }, + { + "name": "weaviate-m-64-ef-256", + "engine": "weaviate", + "connection_params": { + "timeout_config": 90000 + }, + "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } + ], + "upload_params": { "batch_size": 32, "parallel": 1 } + }, + { + "name": "weaviate-m-64-ef-512", + "engine": "weaviate", + "connection_params": { + "timeout_config": 90000 + }, + "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } + ], + "upload_params": { "batch_size": 32, "parallel": 1 } + } +] From c10df6d857b3581c18de4f77043e507ceb1097b8 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 20:22:54 +0100 Subject: [PATCH 027/209] Added single client weviate config --- .../configurations/weaviate-single-node-single-client.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiments/configurations/weaviate-single-node-single-client.json b/experiments/configurations/weaviate-single-node-single-client.json index 720000f0..d8807f9e 100644 --- a/experiments/configurations/weaviate-single-node-single-client.json +++ b/experiments/configurations/weaviate-single-node-single-client.json @@ -7,7 +7,7 @@ }, "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 100, "maxConnections": 16 } }, "search_params": [ - { "parallel": 8, "vectorIndexConfig": { "ef": 128} } + { "parallel": 1, "vectorIndexConfig": { "ef": 128} } ], "upload_params": { "batch_size": 32, "parallel": 1 } }, From 32b4c6e62dc67c683e2f2f0fd8013c5b0fd1d3a5 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jul 2023 21:12:59 +0100 Subject: [PATCH 028/209] Revert "Change recall computation to be as ann-benchmarks'" This reverts commit 96410800fcf4275194b51b759b37c48862dffc57. --- engine/base_client/search.py | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index a9ea5b89..64550df0 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -50,17 +50,9 @@ def _search_one(cls, query, top: Optional[int] = None): precision = 1.0 if query.expected_result: - # This was Qdrant original recall calculation - # ids = set(x[0] for x in search_res) - # precision = len(ids.intersection(query.expected_result[:top])) / top - # This is ann-benchmark recall calculation - epsilon = 1e-3 - threshold = query.expected_scores[top - 1] + epsilon - actual = 0.0 - for cand_res in search_res[:top]: - if cand_res[1] <= threshold: - actual += 1 - precision = actual/top + ids = set(x[0] for x in search_res) + precision = len(ids.intersection(query.expected_result[:top])) / top + return precision, end - start def search_all( From 0559dd483c5b2c8e477698fec6f23e75ee322e11 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 13 Jul 2023 15:24:00 +0100 Subject: [PATCH 029/209] Included single segment config for qdrant --- .../qdrant-single-node-single-segment.json | 104 ++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 experiments/configurations/qdrant-single-node-single-segment.json diff --git a/experiments/configurations/qdrant-single-node-single-segment.json b/experiments/configurations/qdrant-single-node-single-segment.json new file mode 100644 index 00000000..8fc70e26 --- /dev/null +++ b/experiments/configurations/qdrant-single-node-single-segment.json @@ -0,0 +1,104 @@ +[ + { + "name": "qdrant-single-segment-m-16-ef-128", + "engine": "qdrant", + "connection_params": {}, + "collection_params": { + "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } + }, + { + "name": "qdrant-single-segment-m-32-ef-128", + "engine": "qdrant", + "connection_params": {}, + "collection_params": { + "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } + }, + { + "name": "qdrant-single-segment-m-32-ef-256", + "engine": "qdrant", + "connection_params": {}, + "collection_params": { + "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } + }, + { + "name": "qdrant-single-segment-m-32-ef-512", + "engine": "qdrant", + "connection_params": {}, + "collection_params": { + "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } + }, + { + "name": "qdrant-single-segment-m-64-ef-256", + "engine": "qdrant", + "connection_params": {}, + "collection_params": { + "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } + }, + { + "name": "qdrant-single-segment-m-64-ef-512", + "engine": "qdrant", + "connection_params": {}, + "collection_params": { + "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, + { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } + } +] \ No newline at end of file From e93f2735bb443c113e7d2d29e29d30c034231934 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 13 Jul 2023 16:08:18 +0100 Subject: [PATCH 030/209] Verbose info about collection cleaning. Checking if setting is now optimizers_config --- engine/base_client/configure.py | 1 + engine/clients/qdrant/configure.py | 3 ++- .../qdrant-single-node-single-segment.json | 12 ++++++------ 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/engine/base_client/configure.py b/engine/base_client/configure.py index 8d492e43..f0e228e5 100644 --- a/engine/base_client/configure.py +++ b/engine/base_client/configure.py @@ -18,6 +18,7 @@ def recreate(self, dataset: Dataset, collection_params): raise NotImplementedError() def configure(self, dataset: Dataset) -> Optional[dict]: + print("Ensuring we have a clean DB") self.clean() return self.recreate(dataset, self.collection_params) or {} diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index 6c3d7762..d56f97e1 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -29,7 +29,8 @@ def __init__(self, host, collection_params: dict, connection_params: dict): self.client = QdrantClient(url=QDRANT_URL, api_key=QDRANT_API_KEY, **connection_params) def clean(self): - self.client.delete_collection(collection_name=QDRANT_COLLECTION_NAME) + res = self.client.delete_collection(collection_name=QDRANT_COLLECTION_NAME) + assert res is True def recreate(self, dataset: Dataset, collection_params): self.client.recreate_collection( diff --git a/experiments/configurations/qdrant-single-node-single-segment.json b/experiments/configurations/qdrant-single-node-single-segment.json index 8fc70e26..48175186 100644 --- a/experiments/configurations/qdrant-single-node-single-segment.json +++ b/experiments/configurations/qdrant-single-node-single-segment.json @@ -4,7 +4,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, "hnsw_config": { "m": 16, "ef_construct": 128 } }, "search_params": [ @@ -21,7 +21,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, "hnsw_config": { "m": 32, "ef_construct": 128 } }, "search_params": [ @@ -38,7 +38,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ @@ -55,7 +55,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, "hnsw_config": { "m": 32, "ef_construct": 512 } }, "search_params": [ @@ -72,7 +72,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, "hnsw_config": { "m": 64, "ef_construct": 256 } }, "search_params": [ @@ -89,7 +89,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizers_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, "hnsw_config": { "m": 64, "ef_construct": 512 } }, "search_params": [ From 9504e1f653c0ee43c6ea87026a71af5c5d9645ac Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 13 Jul 2023 16:21:45 +0100 Subject: [PATCH 031/209] Setting default_segment_number in qdrant-single-node-single-segment --- .../qdrant-single-node-single-segment.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/experiments/configurations/qdrant-single-node-single-segment.json b/experiments/configurations/qdrant-single-node-single-segment.json index 48175186..b984e22e 100644 --- a/experiments/configurations/qdrant-single-node-single-segment.json +++ b/experiments/configurations/qdrant-single-node-single-segment.json @@ -4,7 +4,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, "hnsw_config": { "m": 16, "ef_construct": 128 } }, "search_params": [ @@ -21,7 +21,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, "hnsw_config": { "m": 32, "ef_construct": 128 } }, "search_params": [ @@ -38,7 +38,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ @@ -55,7 +55,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, "hnsw_config": { "m": 32, "ef_construct": 512 } }, "search_params": [ @@ -72,7 +72,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, "hnsw_config": { "m": 64, "ef_construct": 256 } }, "search_params": [ @@ -89,7 +89,7 @@ "engine": "qdrant", "connection_params": {}, "collection_params": { - "optimizer_config": { "max_segment_number": 1,"memmap_threshold": 10000 }, + "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, "hnsw_config": { "m": 64, "ef_construct": 512 } }, "search_params": [ From 0b1f9ee4404f1984598955605b45d1ef9960e017 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 13 Jul 2023 16:22:51 +0100 Subject: [PATCH 032/209] Remove config assert on qdrant --- engine/clients/qdrant/configure.py | 1 - 1 file changed, 1 deletion(-) diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index d56f97e1..53c3f668 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -30,7 +30,6 @@ def __init__(self, host, collection_params: dict, connection_params: dict): def clean(self): res = self.client.delete_collection(collection_name=QDRANT_COLLECTION_NAME) - assert res is True def recreate(self, dataset: Dataset, collection_params): self.client.recreate_collection( From cb01f607f5ee9cebe7855742e70168e32fa8b1ef Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 14 Jul 2023 21:53:46 +0100 Subject: [PATCH 033/209] Reverted milvus to original settings --- experiments/configurations/milvus-on-disk.json | 2 +- experiments/configurations/milvus-single-node.json | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/experiments/configurations/milvus-on-disk.json b/experiments/configurations/milvus-on-disk.json index c33e0e50..971bd0ee 100644 --- a/experiments/configurations/milvus-on-disk.json +++ b/experiments/configurations/milvus-on-disk.json @@ -7,6 +7,6 @@ "search_params": [ { "parallel": 8, "params": { } } ], - "upload_params": { "parallel": 4, "batch_size": 16, "index_type": "DISKANN", "index_params": { } } + "upload_params": { "parallel": 4, "index_type": "DISKANN", "index_params": { } } } ] \ No newline at end of file diff --git a/experiments/configurations/milvus-single-node.json b/experiments/configurations/milvus-single-node.json index cb7b6328..b6ad3fdb 100644 --- a/experiments/configurations/milvus-single-node.json +++ b/experiments/configurations/milvus-single-node.json @@ -11,7 +11,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 100, "M": 16 } } + "upload_params": { "parallel": 16, "index_params": { "efConstruction": 100, "M": 16 } } }, { "name": "milvus-m-16-ef-128", @@ -25,7 +25,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 128, "M": 16 } } + "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 16 } } }, { "name": "milvus-m-32-ef-128", @@ -39,7 +39,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 128, "M": 32 } } + "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 32 } } }, { "name": "milvus-m-32-ef-256", @@ -53,7 +53,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 256, "M": 32 } } + "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 32 } } }, { "name": "milvus-m-32-ef-512", @@ -67,7 +67,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 512, "M": 32 } } + "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 32 } } }, { "name": "milvus-m-64-ef-256", @@ -81,7 +81,7 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 256, "M": 64 } } + "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 64 } } }, { "name": "milvus-m-64-ef-512", @@ -95,6 +95,6 @@ { "parallel": 8, "params": { "ef": 128 } }, { "parallel": 8, "params": { "ef": 256 } }, { "parallel": 8, "params": { "ef": 512 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], - "upload_params": { "parallel": 4, "batch_size": 16, "index_params": { "efConstruction": 512, "M": 64 } } + "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 64 } } } ] \ No newline at end of file From 64042e7a2ef4de29af85cebda9cbf83a4fe15457 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 17 Jul 2023 18:18:50 +0100 Subject: [PATCH 034/209] Bumping weaviate to the latest stable version (1.20.1) --- 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 845d2931..1427b06c 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.19.9 + image: semitechnologies/weaviate:1.20.1 ports: - "8090:8090" logging: From 3b699b51856f965fbdd7f5051d02fa8fb0e58236 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 17 Jul 2023 19:04:51 +0100 Subject: [PATCH 035/209] Bumping qdrant to latest stable: qdrant/qdrant:v1.3.2 --- engine/servers/qdrant-limit-ram/docker-compose.yaml | 2 +- engine/servers/qdrant-single-node/docker-compose.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/servers/qdrant-limit-ram/docker-compose.yaml b/engine/servers/qdrant-limit-ram/docker-compose.yaml index 55f8e656..bbade2cd 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.1.0 + image: qdrant/qdrant:v1.3.2 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 18d786df..3157bf49 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: qdrant/qdrant:v1.1.0 + image: qdrant/qdrant:v1.3.2 network_mode: host logging: driver: "json-file" From 575e8118c314c0ed6ae60af328933ff6bf169204 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 18 Jul 2023 00:02:08 +0100 Subject: [PATCH 036/209] Updated weaviate config timeout --- .../weaviate-single-node-single-client.json | 86 ------------------- ...gle-node.txt => weaviate-single-node.json} | 14 +-- 2 files changed, 7 insertions(+), 93 deletions(-) delete mode 100644 experiments/configurations/weaviate-single-node-single-client.json rename experiments/configurations/{__weaviate-single-node.txt => weaviate-single-node.json} (95%) diff --git a/experiments/configurations/weaviate-single-node-single-client.json b/experiments/configurations/weaviate-single-node-single-client.json deleted file mode 100644 index d8807f9e..00000000 --- a/experiments/configurations/weaviate-single-node-single-client.json +++ /dev/null @@ -1,86 +0,0 @@ -[ - { - "name": "weaviate-default", - "engine": "weaviate", - "connection_params": { - "timeout_config": 90000 - }, - "collection_params": { "vectorIndexConfig": { "ef": 100, "efConstruction": 100, "maxConnections": 16 } }, - "search_params": [ - { "parallel": 1, "vectorIndexConfig": { "ef": 128} } - ], - "upload_params": { "batch_size": 32, "parallel": 1 } - }, - { - "name": "weaviate-m-16-ef-128", - "engine": "weaviate", - "connection_params": { - "timeout_config": 90000 - }, - "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } - ], - "upload_params": { "batch_size": 32, "parallel": 1 } - }, - { - "name": "weaviate-m-32-ef-128", - "engine": "weaviate", - "connection_params": { - "timeout_config": 90000 - }, - "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } - ], - "upload_params": { "batch_size": 32, "parallel": 1 } - }, - { - "name": "weaviate-m-32-ef-256", - "engine": "weaviate", - "connection_params": { - "timeout_config": 90000 - }, - "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } - ], - "upload_params": { "batch_size": 32, "parallel": 1 } - }, - { - "name": "weaviate-m-32-ef-512", - "engine": "weaviate", - "connection_params": { - "timeout_config": 90000 - }, - "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } - ], - "upload_params": { "batch_size": 32, "parallel": 1 } - }, - { - "name": "weaviate-m-64-ef-256", - "engine": "weaviate", - "connection_params": { - "timeout_config": 90000 - }, - "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } - ], - "upload_params": { "batch_size": 32, "parallel": 1 } - }, - { - "name": "weaviate-m-64-ef-512", - "engine": "weaviate", - "connection_params": { - "timeout_config": 90000 - }, - "collection_params": { "vectorIndexConfig": { "ef": 100, "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} } - ], - "upload_params": { "batch_size": 32, "parallel": 1 } - } -] diff --git a/experiments/configurations/__weaviate-single-node.txt b/experiments/configurations/weaviate-single-node.json similarity index 95% rename from experiments/configurations/__weaviate-single-node.txt rename to experiments/configurations/weaviate-single-node.json index f8885ff7..f1159efa 100644 --- a/experiments/configurations/__weaviate-single-node.txt +++ b/experiments/configurations/weaviate-single-node.json @@ -9,7 +9,7 @@ "search_params": [ { "parallel": 8, "vectorIndexConfig": { "ef": 128} } ], - "upload_params": { "batch_size": 32, "parallel": 1 } + "upload_params": { "batch_size": 1000, "parallel": 5 } }, { "name": "weaviate-m-16-ef-128", @@ -25,7 +25,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 1 } + "upload_params": { "batch_size": 1000, "parallel": 5 } }, { "name": "weaviate-m-32-ef-128", @@ -41,7 +41,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 1 } + "upload_params": { "batch_size": 1000, "parallel": 5 } }, { "name": "weaviate-m-32-ef-256", @@ -57,7 +57,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 1 } + "upload_params": { "batch_size": 1000, "parallel": 5 } }, { "name": "weaviate-m-32-ef-512", @@ -73,7 +73,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 1 } + "upload_params": { "batch_size": 1000, "parallel": 5 } }, { "name": "weaviate-m-64-ef-256", @@ -89,7 +89,7 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 1 } + "upload_params": { "batch_size": 1000, "parallel": 5 } }, { "name": "weaviate-m-64-ef-512", @@ -105,6 +105,6 @@ { "parallel": 8, "vectorIndexConfig": { "ef": 64} }, { "parallel": 8, "vectorIndexConfig": { "ef": 128} }, { "parallel": 8, "vectorIndexConfig": { "ef": 256} }, { "parallel": 8, "vectorIndexConfig": { "ef": 512} }, { "parallel": 100, "vectorIndexConfig": { "ef": 64} }, { "parallel": 100, "vectorIndexConfig": { "ef": 128} }, { "parallel": 100, "vectorIndexConfig": { "ef": 256} }, { "parallel": 100, "vectorIndexConfig": { "ef": 512} } ], - "upload_params": { "batch_size": 32, "parallel": 1 } + "upload_params": { "batch_size": 10000, "parallel": 1 } } ] \ No newline at end of file From 03a1829efe516acca2caa117ba0fb8943b3385ae Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 18 Jul 2023 07:57:12 +0100 Subject: [PATCH 037/209] Using Milvus latest stable v2.2.11 --- engine/servers/milvus-single-node/docker-compose.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/servers/milvus-single-node/docker-compose.yaml b/engine/servers/milvus-single-node/docker-compose.yaml index 99185f57..131d2ea9 100644 --- a/engine/servers/milvus-single-node/docker-compose.yaml +++ b/engine/servers/milvus-single-node/docker-compose.yaml @@ -39,7 +39,7 @@ services: standalone: container_name: milvus-standalone - image: milvusdb/milvus:v2.3.0-beta + image: milvusdb/milvus:v2.2.11 command: ["milvus", "run", "standalone"] environment: ETCD_ENDPOINTS: etcd:2379 From f7caa32de5282e5557718111e68b38e80ab410be Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 18 Jul 2023 11:39:56 +0100 Subject: [PATCH 038/209] Increase qdrant single node configs to avoid timeouts and ensure all data is in memory --- .../qdrant-single-node-single-segment.json | 104 ------------------ .../configurations/qdrant-single-node.json | 32 +++--- 2 files changed, 16 insertions(+), 120 deletions(-) delete mode 100644 experiments/configurations/qdrant-single-node-single-segment.json diff --git a/experiments/configurations/qdrant-single-node-single-segment.json b/experiments/configurations/qdrant-single-node-single-segment.json deleted file mode 100644 index b984e22e..00000000 --- a/experiments/configurations/qdrant-single-node-single-segment.json +++ /dev/null @@ -1,104 +0,0 @@ -[ - { - "name": "qdrant-single-segment-m-16-ef-128", - "engine": "qdrant", - "connection_params": {}, - "collection_params": { - "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, - "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } - }, - { - "name": "qdrant-single-segment-m-32-ef-128", - "engine": "qdrant", - "connection_params": {}, - "collection_params": { - "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, - "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } - }, - { - "name": "qdrant-single-segment-m-32-ef-256", - "engine": "qdrant", - "connection_params": {}, - "collection_params": { - "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, - "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } - }, - { - "name": "qdrant-single-segment-m-32-ef-512", - "engine": "qdrant", - "connection_params": {}, - "collection_params": { - "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, - "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } - }, - { - "name": "qdrant-single-segment-m-64-ef-256", - "engine": "qdrant", - "connection_params": {}, - "collection_params": { - "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, - "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } - }, - { - "name": "qdrant-single-segment-m-64-ef-512", - "engine": "qdrant", - "connection_params": {}, - "collection_params": { - "optimizers_config": { "max_segment_number": 1, "default_segment_number": 1, "memmap_threshold": 10000 }, - "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": 2, "search_params": { "hnsw_ef": 64 } }, { "parallel": 2, "search_params": { "hnsw_ef": 128 } }, { "parallel": 2, "search_params": { "hnsw_ef": 256 } }, { "parallel": 2, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 4, "search_params": { "hnsw_ef": 64 } }, { "parallel": 4, "search_params": { "hnsw_ef": 128 } }, { "parallel": 4, "search_params": { "hnsw_ef": 256 } }, { "parallel": 4, "search_params": { "hnsw_ef": 512 } }, - { "parallel": 8, "search_params": { "hnsw_ef": 64 } }, { "parallel": 8, "search_params": { "hnsw_ef": 128 } }, { "parallel": 8, "search_params": { "hnsw_ef": 256 } }, { "parallel": 8, "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 } - } -] \ No newline at end of file diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index 26a5e9ed..aaf65cd8 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -2,9 +2,9 @@ { "name": "qdrant-default", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 } + "optimizers_config": { "memmap_threshold": 25000000 } }, "search_params": [ { "parallel": 8, "search_params": { "hnsw_ef": 128 } } @@ -14,7 +14,7 @@ { "name": "qdrant-continuous-benchmark", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { "hnsw_config": { "m": 32, @@ -29,7 +29,7 @@ "optimizers_config": { "max_segment_size": 1000000, "default_segment_number": 3, - "memmap_threshold": 10000000 + "memmap_threshold": 25000000 } }, "search_params": [ @@ -48,9 +48,9 @@ { "name": "qdrant-m-16-ef-128", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 16, "ef_construct": 128 } }, "search_params": [ @@ -65,9 +65,9 @@ { "name": "qdrant-m-32-ef-128", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 32, "ef_construct": 128 } }, "search_params": [ @@ -82,9 +82,9 @@ { "name": "qdrant-m-32-ef-256", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 32, "ef_construct": 256 } }, "search_params": [ @@ -99,9 +99,9 @@ { "name": "qdrant-m-32-ef-512", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 32, "ef_construct": 512 } }, "search_params": [ @@ -116,9 +116,9 @@ { "name": "qdrant-m-64-ef-256", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 64, "ef_construct": 256 } }, "search_params": [ @@ -133,9 +133,9 @@ { "name": "qdrant-m-64-ef-512", "engine": "qdrant", - "connection_params": { "timeout": 30 }, + "connection_params": { "timeout": 300 }, "collection_params": { - "optimizers_config": { "memmap_threshold": 10000000 }, + "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 64, "ef_construct": 512 } }, "search_params": [ From 6aabb6d78a94d4d54fcc33ff72a5c7fc4ba93443 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 18 Jul 2023 17:14:55 +0100 Subject: [PATCH 039/209] Added option to run solely specific parallel count --- engine/base_client/client.py | 20 ++++++++++++-------- run.py | 3 ++- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index ec13454d..30da9da5 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -54,7 +54,7 @@ def save_upload_results( out.write(json.dumps(upload_stats, indent=2)) def run_experiment( - self, dataset: Dataset, skip_upload: bool = False, skip_search: bool = False + self, dataset: Dataset, skip_upload: bool = False, skip_search: bool = False, parallels: [int] = [], ): execution_params = self.configurator.execution_params( distance=dataset.config.distance, vector_size=dataset.config.vector_size @@ -88,12 +88,16 @@ def run_experiment( if "ef" in search_params["search_params"]: ef = search_params["search_params"]["ef"] parallel = search_params["parallel"] if "parallel" in search_params else 1 - print(f"\tef runtime: {ef}; #clients {parallel}") - search_stats = searcher.search_all( - dataset.config.distance, reader.read_queries() - ) - self.save_search_results( - dataset.config.name, search_stats, search_id, search_params - ) + filter_parallel = (len(parallels) > 0) + if (filter_parallel and parallel in parallels) or filter_parallel is False: + print(f"\trunning ef runtime: {ef}; #clients {parallel}") + search_stats = searcher.search_all( + dataset.config.distance, reader.read_queries() + ) + self.save_search_results( + dataset.config.name, search_stats, search_id, search_params + ) + else: + print(f"\tskipping ef runtime: {ef}; #clients {parallel}") print("Experiment stage: Done") print("Results saved to: ", RESULTS_DIR) diff --git a/run.py b/run.py index 93e1cafe..4e54b975 100644 --- a/run.py +++ b/run.py @@ -17,6 +17,7 @@ def run( engines: List[str] = typer.Option(["*"]), datasets: List[str] = typer.Option(["*"]), + parallels: List[int] = typer.Option([]), host: str = "localhost", skip_upload: bool = False, skip_search: bool = False, @@ -49,7 +50,7 @@ def run( dataset.download() try: with stopit.ThreadingTimeout(timeout) as tt: - client.run_experiment(dataset, skip_upload, skip_search) + client.run_experiment(dataset, skip_upload, skip_search, parallels) # If the timeout is reached, the server might be still in the # middle of some background processing, like creating the index. From bf3300d47534a8f540393f1c9d8398515267e6e6 Mon Sep 17 00:00:00 2001 From: alon Date: Thu, 20 Jul 2023 14:38:22 +0300 Subject: [PATCH 040/209] changes for running hybrid benchmarks in redis --- engine/base_client/search.py | 12 ++++++++++-- engine/clients/redis/configure.py | 13 ++++++++++--- engine/clients/redis/parser.py | 3 ++- engine/clients/redis/upload.py | 29 ++++++++++++----------------- 4 files changed, 34 insertions(+), 23 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index a9ea5b89..edb31f0a 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -48,19 +48,28 @@ def _search_one(cls, query, top: Optional[int] = None): search_res = cls.search_one(query.vector, query.meta_conditions, top) end = time.perf_counter() + debugging = False precision = 1.0 if query.expected_result: # This was Qdrant original recall calculation # ids = set(x[0] for x in search_res) # precision = len(ids.intersection(query.expected_result[:top])) / top # This is ann-benchmark recall calculation + # IMPORTANT - qdrant use in their hybrid data sets actual *cosine metric* as the "expected_score", + # while we (and ann) are using *1-cosine metric*. Then, we make the adjustment for computing the threshold epsilon = 1e-3 - threshold = query.expected_scores[top - 1] + epsilon + threshold = (1.0 - query.expected_scores[top - 1]) + epsilon actual = 0.0 for cand_res in search_res[:top]: if cand_res[1] <= threshold: actual += 1 precision = actual/top + if debugging: + print("query meta: ", query.meta_conditions) + print("our ids: ", [x[0] for x in search_res]) + print("our scores: ", [x[1] for x in search_res]) + print("their ids: ", query.expected_result) + print("their scores: ", query.expected_scores) return precision, end - start def search_all( @@ -70,7 +79,6 @@ def search_all( ): parallel = self.search_params.pop("parallel", 1) top = self.search_params.pop("top", None) - # setup_search may require initialized client self.init_client( self.host, distance, self.connection_params, self.search_params diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index ae9fa1f9..6c349930 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -1,5 +1,5 @@ import redis -from redis.commands.search.field import GeoField, NumericField, TextField, VectorField +from redis.commands.search.field import GeoField, NumericField, TextField, VectorField, TagField from benchmark.dataset import Dataset from engine.base_client.configure import BaseConfigurator @@ -15,7 +15,7 @@ class RedisConfigurator(BaseConfigurator): } FIELD_MAPPING = { "int": NumericField, - "keyword": TextField, + "keyword": TagField, "text": TextField, "float": NumericField, "geo": GeoField, @@ -41,7 +41,14 @@ def recreate(self, dataset: Dataset, collection_params): self.FIELD_MAPPING[field_type]( name=field_name, ) - for field_name, field_type in dataset.config.schema.items() + for field_name, field_type in dataset.config.schema.items() if field_type != 'keyword' + ] + payload_fields += [ + TagField( + name=field_name, + separator=',' + ) + for field_name, field_type in dataset.config.schema.items() if field_type == 'keyword' ] search_namespace.create_index( fields=[ diff --git a/engine/clients/redis/parser.py b/engine/clients/redis/parser.py index 2575096e..ae4068d9 100644 --- a/engine/clients/redis/parser.py +++ b/engine/clients/redis/parser.py @@ -34,7 +34,8 @@ def build_exact_match_filter(self, field_name: str, value: FieldValue) -> Any: param_name = f"{field_name}_{self.counter}" self.counter += 1 if isinstance(value, str): - return f"@{field_name}:${param_name}", {param_name: value} + return f"@{field_name}:{{${param_name}}}", {param_name: value} + # field is numeric, value is an integer return f"@{field_name}:[${param_name} ${param_name}]", {param_name: value} def build_range_filter( diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 7f9adf7b..4f6e7b89 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -26,23 +26,18 @@ def upload_batch( idx = ids[i] vec = vectors[i] meta = metadata[i] if metadata else {} - payload = {} - geopoints = {} - - if meta is not None: - meta = {} - payload = { - k: v - for k, v in meta.items() - if v is not None and not isinstance(v, dict) - } - # Redis treats geopoints differently and requires putting them as - # a comma-separated string with lat and lon coordinates - geopoints = { - k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) - for k, v in meta.items() - if isinstance(v, dict) - } + payload = { + k: v + for k, v in meta.items() + if v is not None and not isinstance(v, dict) + } + # Redis treats geopoints differently and requires putting them as + # a comma-separated string with lat and lon coordinates + geopoints = { + k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) + for k, v in meta.items() + if isinstance(v, dict) + } cls.client.hset( str(idx), mapping={ From 1769f94aefdf15589d1296f7486f1e7664e7a819 Mon Sep 17 00:00:00 2001 From: alon Date: Wed, 26 Jul 2023 10:27:04 +0300 Subject: [PATCH 041/209] Add patch to support arxiv-titles dataset --- engine/clients/redis/configure.py | 2 +- engine/clients/redis/upload.py | 13 ++++++++----- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 6c349930..40d33486 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -46,7 +46,7 @@ def recreate(self, dataset: Dataset, collection_params): payload_fields += [ TagField( name=field_name, - separator=',' + separator=';' ) for field_name, field_type in dataset.config.schema.items() if field_type == 'keyword' ] diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 4f6e7b89..1ed793fd 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -26,11 +26,14 @@ def upload_batch( idx = ids[i] vec = vectors[i] meta = metadata[i] if metadata else {} - payload = { - k: v - for k, v in meta.items() - if v is not None and not isinstance(v, dict) - } + payload = {} + for k, v in meta.items(): + # This is a patch for arxiv-titles dataset where we have a list of "labels", and + # we want to index all of them under the same TAG field (whose seperator is ';'). + if k == 'labels': + payload[k] = ";".join(v) + if v is not None and not isinstance(v, dict) and not isinstance(v, list): + payload[k] = v # Redis treats geopoints differently and requires putting them as # a comma-separated string with lat and lon coordinates geopoints = { From 75d7700d8064a462ae8fa283ad8fa123f9959119 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 11 Aug 2023 09:04:11 +0100 Subject: [PATCH 042/209] Enabling key prefix ingestion on Redis. More control over clean stage on Redis to avoid multi process indexing of different data --- engine/clients/redis/config.py | 4 ++ engine/clients/redis/configure.py | 62 +++++++++++++++++++------------ engine/clients/redis/search.py | 11 ++++-- engine/clients/redis/upload.py | 4 +- 4 files changed, 52 insertions(+), 29 deletions(-) diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index f61e242c..38c3de70 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -2,5 +2,9 @@ REDIS_PORT = int(os.getenv("REDIS_PORT",6379)) REDIS_AUTH = os.getenv("REDIS_AUTH",None) REDIS_USER = os.getenv("REDIS_USER",None) +REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY",None) +DISABLE_CLEAN = bool(int(os.getenv("DISABLE_CLEAN",0))) +REDIS_KEY_PREFIX = os.getenv("REDIS_KEY_PREFIX","") + # 90 seconds timeout REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT",90*1000)) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 40d33486..b4cf51fc 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/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.redis.config import REDIS_PORT, REDIS_AUTH, REDIS_USER +from engine.clients.redis.config import REDIS_PORT, REDIS_AUTH, REDIS_USER, DISABLE_CLEAN, REDIS_KEY_PREFIX class RedisConfigurator(BaseConfigurator): @@ -23,16 +23,22 @@ class RedisConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) + if REDIS_KEY_PREFIX != "": + print(f"\tUsing a key prefix for this experiment: {REDIS_KEY_PREFIX}") self.client = redis.Redis(host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER) def clean(self): - index = self.client.ft() - try: - index.dropindex(delete_documents=True) - except redis.ResponseError as e: - if "Unknown Index name" not in e.__str__(): - print(e) + if DISABLE_CLEAN is False: + index = self.client.ft() + try: + index.dropindex(delete_documents=True) + except redis.ResponseError as e: + if "Unknown Index name" not in e.__str__(): + print(e) + else: + print(f"\tSkipping clean stage given DISABLE_CLEAN=1") + def recreate(self, dataset: Dataset, collection_params): self.clean() @@ -50,23 +56,31 @@ def recreate(self, dataset: Dataset, collection_params): ) for field_name, field_type in dataset.config.schema.items() if field_type == 'keyword' ] - search_namespace.create_index( - fields=[ - VectorField( - name="vector", - algorithm="HNSW", - attributes={ - "TYPE": "FLOAT32", - "DIM": dataset.config.vector_size, - "DISTANCE_METRIC": self.DISTANCE_MAPPING[ - dataset.config.distance - ], - **self.collection_params.get("hnsw_config", {}), - }, - ) - ] - + payload_fields - ) + try: + search_namespace.create_index( + fields=[ + VectorField( + name="vector", + algorithm="HNSW", + attributes={ + "TYPE": "FLOAT32", + "DIM": dataset.config.vector_size, + "DISTANCE_METRIC": self.DISTANCE_MAPPING[ + dataset.config.distance + ], + **self.collection_params.get("hnsw_config", {}), + }, + ) + ] + + payload_fields + ) + except redis.ResponseError as e: + if "Index already exists" not in e.__str__(): + raise e + elif DISABLE_CLEAN is True: + print("There as an error when creating the index but you've specified DISABLE_CLEAN=1 so we're ignoring it") + else: + raise e if __name__ == "__main__": diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 1c7817bd..98c26289 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -5,7 +5,7 @@ from redis.commands.search.query import Query from engine.base_client.search import BaseSearcher -from engine.clients.redis.config import REDIS_PORT, REDIS_QUERY_TIMEOUT +from engine.clients.redis.config import REDIS_PORT, REDIS_QUERY_TIMEOUT, REDIS_HYBRID_POLICY from engine.clients.redis.parser import RedisConditionParser @@ -18,7 +18,12 @@ class RedisSearcher(BaseSearcher): def init_client(cls, host, distance, connection_params: dict, search_params: dict): cls.client = redis.Redis(host=host, port=REDIS_PORT, db=0) cls.search_params = search_params - + cls.knn_conditions = "EF_RUNTIME $EF" + if REDIS_HYBRID_POLICY is not None: + # for HYBRID_POLICY ADHOC_BF we need to remove EF_RUNTIME + if REDIS_HYBRID_POLICY == "ADHOC_BF": + cls.knn_conditions = "" + cls.knn_conditions = f"HYBRID_POLICY {REDIS_HYBRID_POLICY} {cls.knn_conditions}" @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: conditions = cls.parser.parse(meta_conditions) @@ -30,7 +35,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: q = ( Query( - f"{prefilter_condition}=>[KNN $K @vector $vec_param EF_RUNTIME $EF AS vector_score]" + f"{prefilter_condition}=>[KNN $K @vector $vec_param {cls.knn_conditions} AS vector_score]" ) .sort_by("vector_score", asc=False) .paging(0, top) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 1ed793fd..c1198a19 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -4,7 +4,7 @@ import redis from engine.base_client.upload import BaseUploader -from engine.clients.redis.config import REDIS_PORT +from engine.clients.redis.config import REDIS_PORT, REDIS_KEY_PREFIX from engine.clients.redis.helper import convert_to_redis_coords @@ -42,7 +42,7 @@ def upload_batch( if isinstance(v, dict) } cls.client.hset( - str(idx), + REDIS_KEY_PREFIX + str(idx), mapping={ "vector": np.array(vec).astype(np.float32).tobytes(), **payload, From a7f1c9d6e2a452ca0e658b1c174c24027d52aec2 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 11 Aug 2023 09:36:52 +0100 Subject: [PATCH 043/209] Ensure search results are properly processed when using REDIS_KEY_PREFIX --- engine/clients/redis/search.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 98c26289..790333f3 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -5,7 +5,7 @@ from redis.commands.search.query import Query from engine.base_client.search import BaseSearcher -from engine.clients.redis.config import REDIS_PORT, REDIS_QUERY_TIMEOUT, REDIS_HYBRID_POLICY +from engine.clients.redis.config import REDIS_PORT, REDIS_QUERY_TIMEOUT, REDIS_HYBRID_POLICY, REDIS_KEY_PREFIX from engine.clients.redis.parser import RedisConditionParser @@ -52,4 +52,4 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: results = cls.client.ft().search(q, query_params=params_dict) - return [(int(result.id), float(result.vector_score)) for result in results.docs] + return [(int(result.id[len(REDIS_KEY_PREFIX):]), float(result.vector_score)) for result in results.docs] From a7c3f321d581a0edff0d09f995078a345011f22f Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sun, 3 Sep 2023 18:59:56 +0100 Subject: [PATCH 044/209] Ensure that the indexed payload fields are sortable --- engine/clients/redis/configure.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index b4cf51fc..87ee2e85 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -46,13 +46,15 @@ def recreate(self, dataset: Dataset, collection_params): payload_fields = [ self.FIELD_MAPPING[field_type]( name=field_name, + sortable=True, ) for field_name, field_type in dataset.config.schema.items() if field_type != 'keyword' ] payload_fields += [ TagField( name=field_name, - separator=';' + separator=';', + sortable=True, ) for field_name, field_type in dataset.config.schema.items() if field_type == 'keyword' ] From e2f605947494bfff8b7467ee7e7ca5fe77ae508a Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 8 Sep 2023 15:16:54 +0100 Subject: [PATCH 045/209] Ensuring when metadata is None we can run the benchmark --- engine/clients/redis/upload.py | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index c1198a19..1514486e 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -26,21 +26,23 @@ def upload_batch( idx = ids[i] vec = vectors[i] meta = metadata[i] if metadata else {} + geopoints = {} payload = {} - for k, v in meta.items(): - # This is a patch for arxiv-titles dataset where we have a list of "labels", and - # we want to index all of them under the same TAG field (whose seperator is ';'). - if k == 'labels': - payload[k] = ";".join(v) - if v is not None and not isinstance(v, dict) and not isinstance(v, list): - payload[k] = v - # Redis treats geopoints differently and requires putting them as - # a comma-separated string with lat and lon coordinates - geopoints = { - k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) - for k, v in meta.items() - if isinstance(v, dict) - } + if meta is not None: + for k, v in meta.items(): + # This is a patch for arxiv-titles dataset where we have a list of "labels", and + # we want to index all of them under the same TAG field (whose seperator is ';'). + if k == 'labels': + payload[k] = ";".join(v) + if v is not None and not isinstance(v, dict) and not isinstance(v, list): + payload[k] = v + # Redis treats geopoints differently and requires putting them as + # a comma-separated string with lat and lon coordinates + geopoints = { + k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) + for k, v in meta.items() + if isinstance(v, dict) + } cls.client.hset( REDIS_KEY_PREFIX + str(idx), mapping={ From e2b0c164a2d1b5f79f3a693cab9e7c3ef91e191b Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 11 Sep 2023 13:05:17 +0100 Subject: [PATCH 046/209] Updated client to use REDIS_AUTH --- engine/clients/redis/upload.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 1514486e..56c66585 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -4,7 +4,7 @@ import redis from engine.base_client.upload import BaseUploader -from engine.clients.redis.config import REDIS_PORT, REDIS_KEY_PREFIX +from engine.clients.redis.config import REDIS_PORT, REDIS_KEY_PREFIX, REDIS_AUTH, REDIS_USER from engine.clients.redis.helper import convert_to_redis_coords @@ -14,7 +14,7 @@ class RedisUploader(BaseUploader): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - cls.client = redis.Redis(host=host, port=REDIS_PORT, db=0) + cls.client = redis.Redis(host=host, port=REDIS_PORT, db=0, password=REDIS_AUTH, username=REDIS_USER) cls.upload_params = upload_params @classmethod From d5c97038d8a301bd30f9916d104b74de74b2cabd Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 11 Sep 2023 13:10:29 +0100 Subject: [PATCH 047/209] Updated client to use REDIS_AUTH --- engine/clients/redis/requirements.txt | 4 ++++ engine/clients/redis/search.py | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 engine/clients/redis/requirements.txt diff --git a/engine/clients/redis/requirements.txt b/engine/clients/redis/requirements.txt new file mode 100644 index 00000000..11f2b0d6 --- /dev/null +++ b/engine/clients/redis/requirements.txt @@ -0,0 +1,4 @@ +benchmark==0.1.5 +engine==0.6.0 +numpy==1.24.4 +redis==4.6.0 diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 790333f3..3a63596c 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -5,7 +5,7 @@ from redis.commands.search.query import Query from engine.base_client.search import BaseSearcher -from engine.clients.redis.config import REDIS_PORT, REDIS_QUERY_TIMEOUT, REDIS_HYBRID_POLICY, REDIS_KEY_PREFIX +from engine.clients.redis.config import REDIS_PORT, REDIS_QUERY_TIMEOUT, REDIS_HYBRID_POLICY, REDIS_KEY_PREFIX, REDIS_AUTH, REDIS_USER from engine.clients.redis.parser import RedisConditionParser @@ -16,7 +16,7 @@ class RedisSearcher(BaseSearcher): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): - cls.client = redis.Redis(host=host, port=REDIS_PORT, db=0) + cls.client = redis.Redis(host=host, port=REDIS_PORT, db=0, password=REDIS_AUTH, username=REDIS_USER) cls.search_params = search_params cls.knn_conditions = "EF_RUNTIME $EF" if REDIS_HYBRID_POLICY is not None: From 1323bf595fb55d8ffb0c3a5aeb75fefb27423b87 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 26 Oct 2023 14:52:08 +0100 Subject: [PATCH 048/209] Added support of OSS Cluster API --- engine/base_client/configure.py | 1 - engine/base_client/search.py | 22 ++------------------- engine/clients/redis/config.py | 16 ++++++++------- engine/clients/redis/configure.py | 33 +++++++++++++++++++++++-------- engine/clients/redis/search.py | 28 ++++++++++++++++++++------ engine/clients/redis/upload.py | 24 ++++++++++++++++------ 6 files changed, 76 insertions(+), 48 deletions(-) diff --git a/engine/base_client/configure.py b/engine/base_client/configure.py index f0e228e5..8d492e43 100644 --- a/engine/base_client/configure.py +++ b/engine/base_client/configure.py @@ -18,7 +18,6 @@ def recreate(self, dataset: Dataset, collection_params): raise NotImplementedError() def configure(self, dataset: Dataset) -> Optional[dict]: - print("Ensuring we have a clean DB") self.clean() return self.recreate(dataset, self.collection_params) or {} diff --git a/engine/base_client/search.py b/engine/base_client/search.py index edb31f0a..98e04551 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -48,28 +48,10 @@ def _search_one(cls, query, top: Optional[int] = None): search_res = cls.search_one(query.vector, query.meta_conditions, top) end = time.perf_counter() - debugging = False precision = 1.0 if query.expected_result: - # This was Qdrant original recall calculation - # ids = set(x[0] for x in search_res) - # precision = len(ids.intersection(query.expected_result[:top])) / top - # This is ann-benchmark recall calculation - # IMPORTANT - qdrant use in their hybrid data sets actual *cosine metric* as the "expected_score", - # while we (and ann) are using *1-cosine metric*. Then, we make the adjustment for computing the threshold - epsilon = 1e-3 - threshold = (1.0 - query.expected_scores[top - 1]) + epsilon - actual = 0.0 - for cand_res in search_res[:top]: - if cand_res[1] <= threshold: - actual += 1 - precision = actual/top - if debugging: - print("query meta: ", query.meta_conditions) - print("our ids: ", [x[0] for x in search_res]) - print("our scores: ", [x[1] for x in search_res]) - print("their ids: ", query.expected_result) - print("their scores: ", query.expected_scores) + ids = set(x[0] for x in search_res) + precision = len(ids.intersection(query.expected_result[:top])) / top return precision, end - start def search_all( diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index 38c3de70..b496e9f3 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -1,10 +1,12 @@ import os -REDIS_PORT = int(os.getenv("REDIS_PORT",6379)) -REDIS_AUTH = os.getenv("REDIS_AUTH",None) -REDIS_USER = os.getenv("REDIS_USER",None) -REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY",None) -DISABLE_CLEAN = bool(int(os.getenv("DISABLE_CLEAN",0))) -REDIS_KEY_PREFIX = os.getenv("REDIS_KEY_PREFIX","") + +REDIS_PORT = int(os.getenv("REDIS_PORT", 6379)) +REDIS_AUTH = os.getenv("REDIS_AUTH", None) +REDIS_USER = os.getenv("REDIS_USER", None) +REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) +REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) +DISABLE_CLEAN = bool(int(os.getenv("DISABLE_CLEAN", 0))) +REDIS_KEY_PREFIX = os.getenv("REDIS_KEY_PREFIX", "") # 90 seconds timeout -REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT",90*1000)) +REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 90 * 1000)) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 87ee2e85..ed3c4b12 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -1,10 +1,22 @@ import redis -from redis.commands.search.field import GeoField, NumericField, TextField, VectorField, TagField +from redis.commands.search.field import ( + GeoField, + NumericField, + TextField, + VectorField, + TagField, +) from benchmark.dataset import Dataset from engine.base_client.configure import BaseConfigurator from engine.base_client.distances import Distance -from engine.clients.redis.config import REDIS_PORT, REDIS_AUTH, REDIS_USER, DISABLE_CLEAN, REDIS_KEY_PREFIX +from engine.clients.redis.config import ( + REDIS_PORT, + REDIS_AUTH, + REDIS_USER, + DISABLE_CLEAN, + REDIS_KEY_PREFIX, +) class RedisConfigurator(BaseConfigurator): @@ -26,7 +38,9 @@ def __init__(self, host, collection_params: dict, connection_params: dict): if REDIS_KEY_PREFIX != "": print(f"\tUsing a key prefix for this experiment: {REDIS_KEY_PREFIX}") - self.client = redis.Redis(host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER) + self.client = redis.Redis( + host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER + ) def clean(self): if DISABLE_CLEAN is False: @@ -39,7 +53,6 @@ def clean(self): else: print(f"\tSkipping clean stage given DISABLE_CLEAN=1") - def recreate(self, dataset: Dataset, collection_params): self.clean() search_namespace = self.client.ft() @@ -48,15 +61,17 @@ def recreate(self, dataset: Dataset, collection_params): name=field_name, sortable=True, ) - for field_name, field_type in dataset.config.schema.items() if field_type != 'keyword' + for field_name, field_type in dataset.config.schema.items() + if field_type != "keyword" ] payload_fields += [ TagField( name=field_name, - separator=';', + separator=";", sortable=True, ) - for field_name, field_type in dataset.config.schema.items() if field_type == 'keyword' + for field_name, field_type in dataset.config.schema.items() + if field_type == "keyword" ] try: search_namespace.create_index( @@ -80,7 +95,9 @@ def recreate(self, dataset: Dataset, collection_params): if "Index already exists" not in e.__str__(): raise e elif DISABLE_CLEAN is True: - print("There as an error when creating the index but you've specified DISABLE_CLEAN=1 so we're ignoring it") + print( + "There as an error when creating the index but you've specified DISABLE_CLEAN=1 so we're ignoring it" + ) else: raise e diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 3a63596c..8ff2827c 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -1,11 +1,18 @@ from typing import List, Tuple import numpy as np -import redis +from redis import Redis, RedisCluster from redis.commands.search.query import Query - from engine.base_client.search import BaseSearcher -from engine.clients.redis.config import REDIS_PORT, REDIS_QUERY_TIMEOUT, REDIS_HYBRID_POLICY, REDIS_KEY_PREFIX, REDIS_AUTH, REDIS_USER +from engine.clients.redis.config import ( + REDIS_PORT, + REDIS_QUERY_TIMEOUT, + REDIS_HYBRID_POLICY, + REDIS_KEY_PREFIX, + REDIS_AUTH, + REDIS_USER, + REDIS_CLUSTER, +) from engine.clients.redis.parser import RedisConditionParser @@ -16,14 +23,20 @@ class RedisSearcher(BaseSearcher): @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): - cls.client = redis.Redis(host=host, port=REDIS_PORT, db=0, password=REDIS_AUTH, username=REDIS_USER) + redis_constructor = RedisCluster if REDIS_CLUSTER else Redis + cls.client = redis_constructor( + host=host, port=REDIS_PORT, db=0, password=REDIS_AUTH, username=REDIS_USER + ) cls.search_params = search_params cls.knn_conditions = "EF_RUNTIME $EF" if REDIS_HYBRID_POLICY is not None: # for HYBRID_POLICY ADHOC_BF we need to remove EF_RUNTIME if REDIS_HYBRID_POLICY == "ADHOC_BF": cls.knn_conditions = "" - cls.knn_conditions = f"HYBRID_POLICY {REDIS_HYBRID_POLICY} {cls.knn_conditions}" + cls.knn_conditions = ( + f"HYBRID_POLICY {REDIS_HYBRID_POLICY} {cls.knn_conditions}" + ) + @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: conditions = cls.parser.parse(meta_conditions) @@ -52,4 +65,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: results = cls.client.ft().search(q, query_params=params_dict) - return [(int(result.id[len(REDIS_KEY_PREFIX):]), float(result.vector_score)) for result in results.docs] + return [ + (int(result.id[len(REDIS_KEY_PREFIX) :]), float(result.vector_score)) + for result in results.docs + ] diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 56c66585..c0759dda 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -1,10 +1,15 @@ from typing import List, Optional import numpy as np -import redis - +from redis import Redis, RedisCluster from engine.base_client.upload import BaseUploader -from engine.clients.redis.config import REDIS_PORT, REDIS_KEY_PREFIX, REDIS_AUTH, REDIS_USER +from engine.clients.redis.config import ( + REDIS_PORT, + REDIS_KEY_PREFIX, + REDIS_AUTH, + REDIS_USER, + REDIS_CLUSTER, +) from engine.clients.redis.helper import convert_to_redis_coords @@ -14,7 +19,10 @@ class RedisUploader(BaseUploader): @classmethod def init_client(cls, host, distance, connection_params, upload_params): - cls.client = redis.Redis(host=host, port=REDIS_PORT, db=0, password=REDIS_AUTH, username=REDIS_USER) + redis_constructor = RedisCluster if REDIS_CLUSTER else Redis + cls.client = redis_constructor( + host=host, port=REDIS_PORT, db=0, password=REDIS_AUTH, username=REDIS_USER + ) cls.upload_params = upload_params @classmethod @@ -32,9 +40,13 @@ def upload_batch( for k, v in meta.items(): # This is a patch for arxiv-titles dataset where we have a list of "labels", and # we want to index all of them under the same TAG field (whose seperator is ';'). - if k == 'labels': + if k == "labels": payload[k] = ";".join(v) - if v is not None and not isinstance(v, dict) and not isinstance(v, list): + if ( + v is not None + and not isinstance(v, dict) + and not isinstance(v, list) + ): payload[k] = v # Redis treats geopoints differently and requires putting them as # a comma-separated string with lat and lon coordinates From bc1ec1ada14dc0f79eb2ba1a5899939421805bf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Mon, 6 Nov 2023 11:08:46 +0100 Subject: [PATCH 049/209] Add 1M,10M,20M,40M,100M,200M laion datasets --- datasets/datasets.json | 48 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) diff --git a/datasets/datasets.json b/datasets/datasets.json index b3d480ef..d5bf39d4 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -31,6 +31,54 @@ "path": "gist-960-euclidean/gist-960-euclidean.hdf5", "link": "http://ann-benchmarks.com/gist-960-euclidean.hdf5" }, + { + "name": "laion-img-emb-512-1M-angular", + "vector_size": 512, + "distance": "dot", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-1M-angular.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-1M-angular.hdf5" + }, + { + "name": "laion-img-emb-512-10M-angular", + "vector_size": 512, + "distance": "dot", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-10M-angular.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-10M-angular.hdf5" + }, + { + "name": "laion-img-emb-512-20M-angular", + "vector_size": 512, + "distance": "dot", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-20M-angular.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-20M-angular.hdf5" + }, + { + "name": "laion-img-emb-512-40M-angular", + "vector_size": 512, + "distance": "dot", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-40M-angular.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-40M-angular.hdf5" + }, + { + "name": "laion-img-emb-512-100M-angular", + "vector_size": 512, + "distance": "dot", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-100M-angular.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-angular.hdf5" + }, + { + "name": "laion-img-emb-512-200M-angular", + "vector_size": 512, + "distance": "dot", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-200M-angular.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-200M-angular.hdf5" + }, { "name": "gist-960-angular", "vector_size": 960, From 70cafeb47800e47342c132799c11da205ee57b47 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 9 Nov 2023 16:20:20 +0000 Subject: [PATCH 050/209] Fixed the distance on laion datasets angular==cosine --- README.md | 15 +++++++++++++++ datasets/datasets.json | 12 ++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index beda23ae..1419a120 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,21 @@ scenario against which it should be tested. A specific scenario may assume running the server in a single or distributed mode, a different client implementation and the number of client instances. +## Data sets + +We have a number of precomputed data sets. All data sets have been pre-split into train/test and include ground truth data for the top-100 nearest neighbors. + +| Dataset | Dimensions | Train size | Test size | Neighbors | Distance | +| ----------------------------------------------------------------------------------------------------------- | ---------: | ---------: | --------: | --------: | --------- | +| [LAION-1M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 1,000,000 | 10,000 | 100 | Angular | +| [LAION-10M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 10,000,000 | 10,000 | 100 | Angular | +| [LAION-20M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 20,000,000 | 10,000 | 100 | Angular | +| [LAION-40M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 40,000,000 | 10,000 | 100 | Angular | +| [LAION-100M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 100,000,000 | 10,000 | 100 | Angular | +| [LAION-200M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 200,000,000 | 10,000 | 100 | Angular | +| [LAION-400M: from LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 400,000,000 | 10,000 | 100 | Angular | + + ## How to run a benchmark? Benchmarks are implemented in server-client mode, meaning that the server is diff --git a/datasets/datasets.json b/datasets/datasets.json index d5bf39d4..3303916e 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -34,7 +34,7 @@ { "name": "laion-img-emb-512-1M-angular", "vector_size": 512, - "distance": "dot", + "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-1M-angular.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-1M-angular.hdf5" @@ -42,7 +42,7 @@ { "name": "laion-img-emb-512-10M-angular", "vector_size": 512, - "distance": "dot", + "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-10M-angular.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-10M-angular.hdf5" @@ -50,7 +50,7 @@ { "name": "laion-img-emb-512-20M-angular", "vector_size": 512, - "distance": "dot", + "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-20M-angular.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-20M-angular.hdf5" @@ -58,7 +58,7 @@ { "name": "laion-img-emb-512-40M-angular", "vector_size": 512, - "distance": "dot", + "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-40M-angular.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-40M-angular.hdf5" @@ -66,7 +66,7 @@ { "name": "laion-img-emb-512-100M-angular", "vector_size": 512, - "distance": "dot", + "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-100M-angular.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-angular.hdf5" @@ -74,7 +74,7 @@ { "name": "laion-img-emb-512-200M-angular", "vector_size": 512, - "distance": "dot", + "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-200M-angular.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-200M-angular.hdf5" From 64497f5cbac1dc84acc4603792b838b66e08107a Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 9 Nov 2023 16:49:00 +0000 Subject: [PATCH 051/209] Included LAION-400 100K vectors dataset. Showing progress bar on download of datasets --- benchmark/dataset.py | 6 +++++- datasets/datasets.json | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/benchmark/dataset.py b/benchmark/dataset.py index d2793f04..2b7f13f4 100644 --- a/benchmark/dataset.py +++ b/benchmark/dataset.py @@ -25,6 +25,10 @@ class DatasetConfig: READER_TYPE = {"h5": AnnH5Reader, "jsonl": JSONReader, "tar": AnnCompoundReader} +# prepare progressbar +def show_progress(block_num, block_size, total_size): + percent = round(block_num * block_size / total_size *100,2) + print( f"{percent} %", end="\r") class Dataset: def __init__(self, config: dict): @@ -39,7 +43,7 @@ def download(self): if self.config.link: print(f"Downloading {self.config.link}...") - tmp_path, _ = urllib.request.urlretrieve(self.config.link) + tmp_path, _ = urllib.request.urlretrieve(self.config.link, None, show_progress) if self.config.link.endswith(".tgz") or self.config.link.endswith( ".tar.gz" diff --git a/datasets/datasets.json b/datasets/datasets.json index b4165c99..2199b936 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -31,6 +31,14 @@ "path": "gist-960-euclidean/gist-960-euclidean.hdf5", "link": "http://ann-benchmarks.com/gist-960-euclidean.hdf5" }, + { + "name": "laion-img-emb-512-100K-angular", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-100K-angular.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100K-angular.hdf5" + }, { "name": "laion-img-emb-512-1M-angular", "vector_size": 512, From 94499c1ed805a5210ba5a7730cbdc2a3982c4f75 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 22 Nov 2023 23:28:03 +0000 Subject: [PATCH 052/209] Fixed sorting order on the search query --- engine/clients/redis/config.py | 2 - engine/clients/redis/configure.py | 32 ++++-------- engine/clients/redis/requirements.txt | 4 -- engine/clients/redis/search.py | 19 +++---- engine/clients/redis/upload.py | 5 +- requirements.txt | 75 --------------------------- 6 files changed, 19 insertions(+), 118 deletions(-) delete mode 100644 engine/clients/redis/requirements.txt delete mode 100644 requirements.txt diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index b496e9f3..23531a4d 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -5,8 +5,6 @@ REDIS_USER = os.getenv("REDIS_USER", None) REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) -DISABLE_CLEAN = bool(int(os.getenv("DISABLE_CLEAN", 0))) -REDIS_KEY_PREFIX = os.getenv("REDIS_KEY_PREFIX", "") # 90 seconds timeout REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 90 * 1000)) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index ed3c4b12..f73c266c 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -1,4 +1,5 @@ import redis +from redis import Redis, RedisCluster from redis.commands.search.field import ( GeoField, NumericField, @@ -14,8 +15,7 @@ REDIS_PORT, REDIS_AUTH, REDIS_USER, - DISABLE_CLEAN, - REDIS_KEY_PREFIX, + REDIS_CLUSTER, ) @@ -35,23 +35,19 @@ class RedisConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) - if REDIS_KEY_PREFIX != "": - print(f"\tUsing a key prefix for this experiment: {REDIS_KEY_PREFIX}") - - self.client = redis.Redis( + redis_constructor = RedisCluster if REDIS_CLUSTER else Redis + self.client = redis_constructor( host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) + def clean(self): - if DISABLE_CLEAN is False: - index = self.client.ft() - try: - index.dropindex(delete_documents=True) - except redis.ResponseError as e: - if "Unknown Index name" not in e.__str__(): - print(e) - else: - print(f"\tSkipping clean stage given DISABLE_CLEAN=1") + index = self.client.ft() + try: + index.dropindex(delete_documents=True) + except redis.ResponseError as e: + if "Unknown Index name" not in e.__str__(): + print(e) def recreate(self, dataset: Dataset, collection_params): self.clean() @@ -94,12 +90,6 @@ def recreate(self, dataset: Dataset, collection_params): except redis.ResponseError as e: if "Index already exists" not in e.__str__(): raise e - elif DISABLE_CLEAN is True: - print( - "There as an error when creating the index but you've specified DISABLE_CLEAN=1 so we're ignoring it" - ) - else: - raise e if __name__ == "__main__": diff --git a/engine/clients/redis/requirements.txt b/engine/clients/redis/requirements.txt deleted file mode 100644 index 11f2b0d6..00000000 --- a/engine/clients/redis/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -benchmark==0.1.5 -engine==0.6.0 -numpy==1.24.4 -redis==4.6.0 diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 8ff2827c..0f53f95c 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -7,8 +7,6 @@ from engine.clients.redis.config import ( REDIS_PORT, REDIS_QUERY_TIMEOUT, - REDIS_HYBRID_POLICY, - REDIS_KEY_PREFIX, REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, @@ -25,17 +23,10 @@ class RedisSearcher(BaseSearcher): def init_client(cls, host, distance, connection_params: dict, search_params: dict): redis_constructor = RedisCluster if REDIS_CLUSTER else Redis cls.client = redis_constructor( - host=host, port=REDIS_PORT, db=0, password=REDIS_AUTH, username=REDIS_USER + host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) cls.search_params = search_params cls.knn_conditions = "EF_RUNTIME $EF" - if REDIS_HYBRID_POLICY is not None: - # for HYBRID_POLICY ADHOC_BF we need to remove EF_RUNTIME - if REDIS_HYBRID_POLICY == "ADHOC_BF": - cls.knn_conditions = "" - cls.knn_conditions = ( - f"HYBRID_POLICY {REDIS_HYBRID_POLICY} {cls.knn_conditions}" - ) @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: @@ -50,10 +41,12 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: Query( f"{prefilter_condition}=>[KNN $K @vector $vec_param {cls.knn_conditions} AS vector_score]" ) - .sort_by("vector_score", asc=False) + .sort_by("vector_score", asc=True) .paging(0, top) .return_fields("vector_score") - .dialect(2) + # performance is optimized for sorting operations on DIALECT 4 in different scenarios. + # check SORTBY details in https://redis.io/commands/ft.search/ + .dialect(4) .timeout(REDIS_QUERY_TIMEOUT) ) params_dict = { @@ -66,6 +59,6 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: results = cls.client.ft().search(q, query_params=params_dict) return [ - (int(result.id[len(REDIS_KEY_PREFIX) :]), float(result.vector_score)) + (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 c0759dda..87ed2332 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -5,7 +5,6 @@ from engine.base_client.upload import BaseUploader from engine.clients.redis.config import ( REDIS_PORT, - REDIS_KEY_PREFIX, REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, @@ -21,7 +20,7 @@ class RedisUploader(BaseUploader): def init_client(cls, host, distance, connection_params, upload_params): redis_constructor = RedisCluster if REDIS_CLUSTER else Redis cls.client = redis_constructor( - host=host, port=REDIS_PORT, db=0, password=REDIS_AUTH, username=REDIS_USER + host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) cls.upload_params = upload_params @@ -56,7 +55,7 @@ def upload_batch( if isinstance(v, dict) } cls.client.hset( - REDIS_KEY_PREFIX + str(idx), + str(idx), mapping={ "vector": np.array(vec).astype(np.float32).tobytes(), **payload, diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 9a812463..00000000 --- a/requirements.txt +++ /dev/null @@ -1,75 +0,0 @@ -anyio==3.7.0 ; python_version >= "3.8" and python_version < "3.12" -appnope==0.1.3 ; python_version >= "3.8" and python_version < "3.12" and sys_platform == "darwin" -asttokens==2.2.1 ; python_version >= "3.8" and python_version < "3.12" -async-timeout==4.0.2 ; python_version >= "3.8" and python_full_version <= "3.11.2" -authlib==1.2.1 ; python_version >= "3.8" and python_version < "3.12" -backcall==0.2.0 ; python_version >= "3.8" and python_version < "3.12" -backoff==2.2.1 ; python_version >= "3.8" and python_version < "3.12" -certifi==2023.5.7 ; python_version >= "3.8" and python_version < "3.12" -cffi==1.15.1 ; python_version >= "3.8" and python_version < "3.12" -charset-normalizer==3.1.0 ; python_version >= "3.8" and python_version < "3.12" -click==8.1.3 ; python_version >= "3.8" and python_version < "3.12" -colorama==0.4.6 ; python_version >= "3.8" and python_version < "3.12" and platform_system == "Windows" or python_version >= "3.8" and python_version < "3.12" and sys_platform == "win32" -cryptography==41.0.1 ; python_version >= "3.8" and python_version < "3.12" -decorator==5.1.1 ; python_version >= "3.8" and python_version < "3.12" -elastic-transport==8.4.0 ; python_version >= "3.8" and python_version < "3.12" -elasticsearch==8.8.0 ; python_version >= "3.8" and python_version < "3.12" -environs==9.5.0 ; python_version >= "3.8" and python_version < "3.12" -exceptiongroup==1.1.1 ; python_version >= "3.8" and python_version < "3.11" -executing==1.2.0 ; python_version >= "3.8" and python_version < "3.12" -grpcio-tools==1.53.0 ; python_version >= "3.8" and python_version < "3.12" -grpcio==1.53.0 ; python_version >= "3.8" and python_version < "3.12" -h11==0.14.0 ; python_version >= "3.8" and python_version < "3.12" -h2==4.1.0 ; python_version >= "3.8" and python_version < "3.12" -h5py==3.9.0 ; python_version >= "3.8" and python_version < "3.12" -hpack==4.0.0 ; python_version >= "3.8" and python_version < "3.12" -httpcore==0.17.2 ; python_version >= "3.8" and python_version < "3.12" -httpx[http2]==0.24.1 ; python_version >= "3.8" and python_version < "3.12" -hyperframe==6.0.1 ; python_version >= "3.8" and python_version < "3.12" -idna==3.4 ; python_version >= "3.8" and python_version < "3.12" -ipdb==0.13.13 ; python_version >= "3.8" and python_version < "3.12" -ipython==8.12.2 ; python_version >= "3.8" and python_version < "3.12" -jedi==0.18.2 ; python_version >= "3.8" and python_version < "3.12" -jsons==1.6.3 ; python_version >= "3.8" and python_version < "3.12" -marshmallow==3.19.0 ; python_version >= "3.8" and python_version < "3.12" -matplotlib-inline==0.1.6 ; python_version >= "3.8" and python_version < "3.12" -numpy==1.24.4 ; python_version < "3.12" and python_version >= "3.8" -opensearch-py==2.2.0 ; python_version >= "3.8" and python_version < "3.12" -packaging==23.1 ; python_version >= "3.8" and python_version < "3.12" -pandas==2.0.2 ; python_version >= "3.8" and python_version < "3.12" -parso==0.8.3 ; python_version >= "3.8" and python_version < "3.12" -pexpect==4.8.0 ; python_version >= "3.8" and python_version < "3.12" and sys_platform != "win32" -pickleshare==0.7.5 ; python_version >= "3.8" and python_version < "3.12" -portalocker==2.7.0 ; python_version >= "3.8" and python_version < "3.12" -prompt-toolkit==3.0.38 ; python_version >= "3.8" and python_version < "3.12" -protobuf==4.23.3 ; python_version >= "3.8" and python_version < "3.12" -ptyprocess==0.7.0 ; python_version >= "3.8" and python_version < "3.12" and sys_platform != "win32" -pure-eval==0.2.2 ; python_version >= "3.8" and python_version < "3.12" -pycparser==2.21 ; python_version >= "3.8" and python_version < "3.12" -pydantic==1.10.9 ; python_version >= "3.8" and python_version < "3.12" -pygments==2.15.1 ; python_version >= "3.8" and python_version < "3.12" -pymilvus==2.2.12 ; python_version >= "3.8" and python_version < "3.12" -python-dateutil==2.8.2 ; python_version >= "3.8" and python_version < "3.12" -python-dotenv==1.0.0 ; python_version >= "3.8" and python_version < "3.12" -pytz==2023.3 ; python_version >= "3.8" and python_version < "3.12" -pywin32==306 ; python_version >= "3.8" and python_version < "3.12" and platform_system == "Windows" -qdrant-client==1.3.1 ; python_version >= "3.8" and python_version < "3.12" -redis==4.6.0 ; python_version >= "3.8" and python_version < "3.12" -requests==2.31.0 ; python_version >= "3.8" and python_version < "3.12" -setuptools==68.0.0 ; python_version >= "3.8" and python_version < "3.12" -six==1.16.0 ; python_version >= "3.8" and python_version < "3.12" -sniffio==1.3.0 ; python_version >= "3.8" and python_version < "3.12" -stack-data==0.6.2 ; python_version >= "3.8" and python_version < "3.12" -stopit==1.1.2 ; python_version >= "3.8" and python_version < "3.12" -tomli==2.0.1 ; python_version >= "3.8" and python_version < "3.11" -tqdm==4.65.0 ; python_version >= "3.8" and python_version < "3.12" -traitlets==5.9.0 ; python_version >= "3.8" and python_version < "3.12" -typer==0.6.1 ; python_version >= "3.8" and python_version < "3.12" -typing-extensions==4.5.0 ; python_version >= "3.8" and python_version < "3.12" -typish==1.9.3 ; python_version >= "3.8" and python_version < "3.12" -tzdata==2023.3 ; python_version >= "3.8" and python_version < "3.12" -ujson==5.8.0 ; python_version >= "3.8" and python_version < "3.12" -urllib3==1.26.16 ; python_version >= "3.8" and python_version < "3.12" -validators==0.20.0 ; python_version >= "3.8" and python_version < "3.12" -wcwidth==0.2.6 ; python_version >= "3.8" and python_version < "3.12" -weaviate-client==3.22.1 ; python_version >= "3.8" and python_version < "3.12" From bcd50576006d5469cb3e159b3975249f43277603 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 30 Nov 2023 23:56:19 +0000 Subject: [PATCH 053/209] Ensuring every oss shard has ft.create/ft.drop --- engine/clients/redis/configure.py | 67 ++++++++++++++++++------------- engine/clients/redis/search.py | 1 + 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index f73c266c..24a9752a 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -36,22 +36,27 @@ 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.client = redis_constructor( host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) def clean(self): - index = self.client.ft() - try: - index.dropindex(delete_documents=True) - except redis.ResponseError as e: - if "Unknown Index name" not in e.__str__(): - print(e) + conns = [self.client] + if self._is_cluster: + conns = self.client.get_primaries() + for conn in conns: + index = conn.ft() + try: + index.dropindex(delete_documents=True) + except redis.ResponseError as e: + if "Unknown Index name" not in e.__str__(): + print(e) def recreate(self, dataset: Dataset, collection_params): self.clean() - search_namespace = self.client.ft() + payload_fields = [ self.FIELD_MAPPING[field_type]( name=field_name, @@ -69,27 +74,33 @@ def recreate(self, dataset: Dataset, collection_params): for field_name, field_type in dataset.config.schema.items() if field_type == "keyword" ] - try: - search_namespace.create_index( - fields=[ - VectorField( - name="vector", - algorithm="HNSW", - attributes={ - "TYPE": "FLOAT32", - "DIM": dataset.config.vector_size, - "DISTANCE_METRIC": self.DISTANCE_MAPPING[ - dataset.config.distance - ], - **self.collection_params.get("hnsw_config", {}), - }, - ) - ] - + payload_fields - ) - except redis.ResponseError as e: - if "Index already exists" not in e.__str__(): - raise e + index_fields = [ + VectorField( + name="vector", + algorithm="HNSW", + attributes={ + "TYPE": "FLOAT32", + "DIM": dataset.config.vector_size, + "DISTANCE_METRIC": self.DISTANCE_MAPPING[ + dataset.config.distance + ], + **self.collection_params.get("hnsw_config", {}), + }, + ) + ] + payload_fields + + conns = [self.client] + if self._is_cluster: + conns = self.client.get_primaries() + for conn in conns: + search_namespace = conn.ft() + try: + search_namespace.create_index( + fields=index_fields + ) + except redis.ResponseError as e: + if "Index already exists" not in e.__str__(): + raise e if __name__ == "__main__": diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 0f53f95c..88123340 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -27,6 +27,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic ) cls.search_params = search_params cls.knn_conditions = "EF_RUNTIME $EF" + cls._is_cluster = True if REDIS_CLUSTER else False @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: From 5992b73a17aac31ddc8cf476886e23e822ece0cd Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 1 Dec 2023 00:00:13 +0000 Subject: [PATCH 054/209] Ensuring every oss shard has ft.create/ft.drop --- engine/clients/redis/configure.py | 37 +++++++++++++++---------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 24a9752a..1aa1a51f 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -41,11 +41,12 @@ def __init__(self, host, collection_params: dict, connection_params: dict): host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) - def clean(self): conns = [self.client] if self._is_cluster: - conns = self.client.get_primaries() + conns = [ + self.client.get_connection(node) for node in self.client.get_primaries() + ] for conn in conns: index = conn.ft() try: @@ -75,29 +76,27 @@ def recreate(self, dataset: Dataset, collection_params): if field_type == "keyword" ] index_fields = [ - VectorField( - name="vector", - algorithm="HNSW", - attributes={ - "TYPE": "FLOAT32", - "DIM": dataset.config.vector_size, - "DISTANCE_METRIC": self.DISTANCE_MAPPING[ - dataset.config.distance - ], - **self.collection_params.get("hnsw_config", {}), - }, - ) - ] + payload_fields + VectorField( + name="vector", + algorithm="HNSW", + attributes={ + "TYPE": "FLOAT32", + "DIM": dataset.config.vector_size, + "DISTANCE_METRIC": self.DISTANCE_MAPPING[dataset.config.distance], + **self.collection_params.get("hnsw_config", {}), + }, + ) + ] + payload_fields conns = [self.client] if self._is_cluster: - conns = self.client.get_primaries() + conns = [ + self.client.get_connection(node) for node in self.client.get_primaries() + ] for conn in conns: search_namespace = conn.ft() try: - search_namespace.create_index( - fields=index_fields - ) + search_namespace.create_index(fields=index_fields) except redis.ResponseError as e: if "Index already exists" not in e.__str__(): raise e From 8b41d8ac131131fdb51c62da3e0a20e96db5d352 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 1 Dec 2023 00:02:44 +0000 Subject: [PATCH 055/209] Ensuring every oss shard has ft.create/ft.drop --- engine/clients/redis/configure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 1aa1a51f..63046ab8 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -45,7 +45,7 @@ def clean(self): conns = [self.client] if self._is_cluster: conns = [ - self.client.get_connection(node) for node in self.client.get_primaries() + self.client.get_redis_connection(node) for node in self.client.get_primaries() ] for conn in conns: index = conn.ft() @@ -91,7 +91,7 @@ def recreate(self, dataset: Dataset, collection_params): conns = [self.client] if self._is_cluster: conns = [ - self.client.get_connection(node) for node in self.client.get_primaries() + self.client.get_redis_connection(node) for node in self.client.get_primaries() ] for conn in conns: search_namespace = conn.ft() From 886dd085b132e93e0666db7cfbb6f999493ec988 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Wed, 6 Dec 2023 13:37:36 +0100 Subject: [PATCH 056/209] Add laion 400M dataset to datasets.json file --- datasets/datasets.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/datasets/datasets.json b/datasets/datasets.json index 72cb0ffd..5b87b646 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -95,6 +95,14 @@ "path": "laion-img-emb-512/laion-img-emb-512-200M-angular.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-200M-angular.hdf5" }, + { + "name": "laion-img-emb-512-400M-angular", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-400M-angular.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-400M-angular.hdf5" + }, { "name": "gist-960-angular", "vector_size": 960, From dfed4ce4f6270d551c66af590014de1d066d4cc4 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 7 Dec 2023 07:49:50 +0000 Subject: [PATCH 057/209] Applied black to changed files --- engine/clients/redis/configure.py | 6 ++++-- engine/clients/redis/search.py | 5 +---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 63046ab8..54376210 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -45,7 +45,8 @@ def clean(self): conns = [self.client] if self._is_cluster: conns = [ - self.client.get_redis_connection(node) for node in self.client.get_primaries() + self.client.get_redis_connection(node) + for node in self.client.get_primaries() ] for conn in conns: index = conn.ft() @@ -91,7 +92,8 @@ def recreate(self, dataset: Dataset, collection_params): conns = [self.client] if self._is_cluster: conns = [ - self.client.get_redis_connection(node) for node in self.client.get_primaries() + self.client.get_redis_connection(node) + for node in self.client.get_primaries() ] for conn in conns: search_namespace = conn.ft() diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 88123340..cb4c1d61 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -59,7 +59,4 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: results = cls.client.ft().search(q, query_params=params_dict) - return [ - (int(result.id), float(result.vector_score)) - for result in results.docs - ] + return [(int(result.id), float(result.vector_score)) for result in results.docs] From 4d6ba07f63014722ae14ba587ee5739aa6bb2f9d Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sun, 17 Dec 2023 20:33:09 +0000 Subject: [PATCH 058/209] Using random primary node on search_one for Redis --- engine/clients/redis/search.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index cb4c1d61..ddd033e2 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -1,6 +1,7 @@ from typing import List, Tuple import numpy as np +import random from redis import Redis, RedisCluster from redis.commands.search.query import Query from engine.base_client.search import BaseSearcher @@ -28,6 +29,13 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.search_params = search_params cls.knn_conditions = "EF_RUNTIME $EF" cls._is_cluster = True if REDIS_CLUSTER else False + cls.conns = [cls.client] + if cls._is_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))].ft() @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: @@ -56,7 +64,6 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: "EF": cls.search_params["search_params"]["ef"], **params, } - - results = cls.client.ft().search(q, query_params=params_dict) + results = cls._ft.search(q, query_params=params_dict) return [(int(result.id), float(result.vector_score)) for result in results.docs] From 96536c5d668e0405c1c8d4dbcb0ab2fc3250c082 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sun, 17 Dec 2023 20:36:11 +0000 Subject: [PATCH 059/209] Using random primary node on search_one for Redis --- engine/clients/redis/search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index ddd033e2..405d8f51 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -35,7 +35,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.client.get_redis_connection(node) for node in cls.client.get_primaries() ] - cls._ft = cls.conns[random.randint(0, len(cls.conns))].ft() + cls._ft = cls.conns[random.randint(0, len(cls.conns)) - 1].ft() @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: From b19349bc4c47f1c95e290436a0a127b9bc5d3207 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sun, 17 Dec 2023 20:51:11 +0000 Subject: [PATCH 060/209] Include context on how we distribute search query load on redis in case of cluster api enabled --- engine/clients/redis/search.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 405d8f51..e9eddcbb 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -29,6 +29,8 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic 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: cls.conns = [ From fb2ecc7dae9214c98d85af8aad280ea5e692723f Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 21 Dec 2023 14:43:09 +0000 Subject: [PATCH 061/209] Include a large scale redis config --- .../configurations/redis-large-scale.json | 114 ++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 experiments/configurations/redis-large-scale.json diff --git a/experiments/configurations/redis-large-scale.json b/experiments/configurations/redis-large-scale.json new file mode 100644 index 00000000..86d511d5 --- /dev/null +++ b/experiments/configurations/redis-large-scale.json @@ -0,0 +1,114 @@ +[ + { + "name": "redis-default", + "engine": "redis", + "connection_params": {}, + "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, + { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, + { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } + ], + "upload_params": { "parallel": 100, "batch_size": 100 } + }, + { + "name": "redis-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, + { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, + { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } + ], + "upload_params": { "parallel": 100, "batch_size": 100 } + }, + { + "name": "redis-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, + { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, + { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } + ], + "upload_params": { "parallel": 100, "batch_size": 100 } + }, + { + "name": "redis-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, + { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, + { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } + ], + "upload_params": { "parallel": 100, "batch_size": 100 } + }, + { + "name": "redis-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, + { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, + { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } + ], + "upload_params": { "parallel": 100, "batch_size": 100 } + }, + { + "name": "redis-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, + { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, + { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } + ], + "upload_params": { "parallel": 100, "batch_size": 100 } + }, + { + "name": "redis-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, + { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, + { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 100, "batch_size": 100 } + } +] \ No newline at end of file From ef8bf0894d210e2bc3911886f7d34fb210fd6c4b Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 25 Jan 2024 13:50:59 +0000 Subject: [PATCH 062/209] Updated laion-400m angular to cosine reference on dataset --- datasets/datasets.json | 50 ++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/datasets/datasets.json b/datasets/datasets.json index 5b87b646..9237803e 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -40,68 +40,60 @@ "link": "http://ann-benchmarks.com/gist-960-euclidean.hdf5" }, { - "name": "laion-img-emb-512-100K-angular", + "name": "laion-img-emb-512-1M-cosine", "vector_size": 512, "distance": "cosine", "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-100K-angular.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100K-angular.hdf5" + "path": "laion-img-emb-512/laion-img-emb-512-1M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-1M-cosine.hdf5" }, { - "name": "laion-img-emb-512-1M-angular", + "name": "laion-img-emb-512-10M-cosine", "vector_size": 512, "distance": "cosine", "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-1M-angular.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-1M-angular.hdf5" + "path": "laion-img-emb-512/laion-img-emb-512-10M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-10M-cosine.hdf5" }, { - "name": "laion-img-emb-512-10M-angular", + "name": "laion-img-emb-512-20M-cosine", "vector_size": 512, "distance": "cosine", "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-10M-angular.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-10M-angular.hdf5" + "path": "laion-img-emb-512/laion-img-emb-512-20M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-20M-cosine.hdf5" }, { - "name": "laion-img-emb-512-20M-angular", + "name": "laion-img-emb-512-40M-cosine", "vector_size": 512, "distance": "cosine", "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-20M-angular.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-20M-angular.hdf5" + "path": "laion-img-emb-512/laion-img-emb-512-40M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-40M-cosine.hdf5" }, { - "name": "laion-img-emb-512-40M-angular", + "name": "laion-img-emb-512-100M-cosine", "vector_size": 512, "distance": "cosine", "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-40M-angular.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-40M-angular.hdf5" + "path": "laion-img-emb-512/laion-img-emb-512-100M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5" }, { - "name": "laion-img-emb-512-100M-angular", + "name": "laion-img-emb-512-200M-cosine", "vector_size": 512, "distance": "cosine", "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-100M-angular.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-angular.hdf5" + "path": "laion-img-emb-512/laion-img-emb-512-200M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-200M-cosine.hdf5" }, { - "name": "laion-img-emb-512-200M-angular", + "name": "laion-img-emb-512-400M-cosine", "vector_size": 512, "distance": "cosine", "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-200M-angular.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-200M-angular.hdf5" - }, - { - "name": "laion-img-emb-512-400M-angular", - "vector_size": 512, - "distance": "cosine", - "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-400M-angular.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-400M-angular.hdf5" + "path": "laion-img-emb-512/laion-img-emb-512-400M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-400M-cosine.hdf5" }, { "name": "gist-960-angular", From 10d7260bc3ef61a7f8558ab7b4af7225d107e4cc Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 7 Feb 2024 17:46:46 -0500 Subject: [PATCH 063/209] Enabled passing postgres connection details --- engine/clients/pgvector/config.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/engine/clients/pgvector/config.py b/engine/clients/pgvector/config.py index 851c3efb..dc3b8365 100644 --- a/engine/clients/pgvector/config.py +++ b/engine/clients/pgvector/config.py @@ -1,7 +1,9 @@ -PGVECTOR_PORT = 9200 -PGVECTOR_DB = "postgres" -PGVECTOR_USER = "postgres" -PGVECTOR_PASSWORD = "passwd" +import os + +PGVECTOR_PORT = int(os.getenv("PGVECTOR_PORT", 9200)) +PGVECTOR_DB = os.getenv("PGVECTOR_DB", "postgres") +PGVECTOR_USER = os.getenv("PGVECTOR_USER", "postgres") +PGVECTOR_PASSWORD = os.getenv("PGVECTOR_PASSWORD", "passwd") def get_db_config(host, connection_params): From fc32ba8d065a51806c26a7012a460aea8dd40b96 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 15 Feb 2024 11:06:17 +0000 Subject: [PATCH 064/209] reducing changes to sync with origin --- engine/base_client/client.py | 26 ++-- .../configurations/redis-large-scale.json | 114 ------------------ .../configurations/redis-single-node.json | 26 ++++ 3 files changed, 40 insertions(+), 126 deletions(-) delete mode 100644 experiments/configurations/redis-large-scale.json diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 743ee19c..e00eafb2 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -115,18 +115,20 @@ def run_experiment( if "search_params" in search_params: if "ef" in search_params["search_params"]: ef = search_params["search_params"]["ef"] - parallel = search_params["parallel"] if "parallel" in search_params else 1 - filter_parallel = (len(parallels) > 0) - if (filter_parallel and parallel in parallels) or filter_parallel is False: - print(f"\trunning ef runtime: {ef}; #clients {parallel}") - search_stats = searcher.search_all( - dataset.config.distance, reader.read_queries() - ) - self.save_search_results( - dataset.config.name, search_stats, search_id, search_params - ) - else: - print(f"\tskipping ef runtime: {ef}; #clients {parallel}") + client_count = search_params["parallel"] if "parallel" in search_params else 1 + filter_client_count = (len(parallels) > 0) + if filter_client_count and (client_count not in parallels): + print(f"\tskipping ef runtime: {ef}; #clients {client_count}") + continue + print(f"\trunning ef runtime: {ef}; #clients {client_count}") + + search_stats = searcher.search_all( + dataset.config.distance, reader.read_queries() + ) + self.save_search_results( + dataset.config.name, search_stats, search_id, search_params + ) + print("Experiment stage: Done") print("Results saved to: ", RESULTS_DIR) diff --git a/experiments/configurations/redis-large-scale.json b/experiments/configurations/redis-large-scale.json deleted file mode 100644 index 86d511d5..00000000 --- a/experiments/configurations/redis-large-scale.json +++ /dev/null @@ -1,114 +0,0 @@ -[ - { - "name": "redis-default", - "engine": "redis", - "connection_params": {}, - "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, - { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, - { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } - ], - "upload_params": { "parallel": 100, "batch_size": 100 } - }, - { - "name": "redis-m-16-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { "M": 16, "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, - { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, - { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } - ], - "upload_params": { "parallel": 100, "batch_size": 100 } - }, - { - "name": "redis-m-32-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, - { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, - { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } - ], - "upload_params": { "parallel": 100, "batch_size": 100 } - }, - { - "name": "redis-m-32-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, - { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, - { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } - ], - "upload_params": { "parallel": 100, "batch_size": 100 } - }, - { - "name": "redis-m-32-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, - { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, - { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } - ], - "upload_params": { "parallel": 100, "batch_size": 100 } - }, - { - "name": "redis-m-64-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, - { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, - { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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 } } - ], - "upload_params": { "parallel": 100, "batch_size": 100 } - }, - { - "name": "redis-m-64-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "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": 2, "search_params": { "ef": 64 } }, { "parallel": 2, "search_params": { "ef": 128 } }, { "parallel": 2, "search_params": { "ef": 256 } }, { "parallel": 2, "search_params": { "ef": 512 } }, - { "parallel": 4, "search_params": { "ef": 64 } }, { "parallel": 4, "search_params": { "ef": 128 } }, { "parallel": 4, "search_params": { "ef": 256 } }, { "parallel": 4, "search_params": { "ef": 512 } }, - { "parallel": 8, "search_params": { "ef": 64 } }, { "parallel": 8, "search_params": { "ef": 128 } }, { "parallel": 8, "search_params": { "ef": 256 } }, { "parallel": 8, "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } } - ], - "upload_params": { "parallel": 100, "batch_size": 100 } - } -] \ No newline at end of file diff --git a/experiments/configurations/redis-single-node.json b/experiments/configurations/redis-single-node.json index 3b351edc..b42593ec 100644 --- a/experiments/configurations/redis-single-node.json +++ b/experiments/configurations/redis-single-node.json @@ -11,6 +11,32 @@ ], "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, "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 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "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 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "redis-m-32-ef-128", "engine": "redis", From 2e79be80478039bb418ce68e38414f510406df1d Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 15 Feb 2024 17:00:52 +0000 Subject: [PATCH 065/209] General improvements. Extended exposed metrics in results file. Added more metadata. Allowed to filter benchmark runs by client count --- benchmark/dataset.py | 10 +++++++++- engine/base_client/client.py | 15 ++++++++++++++- engine/base_client/search.py | 3 +-- engine/base_client/upload.py | 15 ++++++++++----- 4 files changed, 34 insertions(+), 9 deletions(-) diff --git a/benchmark/dataset.py b/benchmark/dataset.py index d2793f04..41485369 100644 --- a/benchmark/dataset.py +++ b/benchmark/dataset.py @@ -26,6 +26,12 @@ class DatasetConfig: READER_TYPE = {"h5": AnnH5Reader, "jsonl": JSONReader, "tar": AnnCompoundReader} +# prepare progressbar +def show_progress(block_num, block_size, total_size): + percent = round(block_num * block_size / total_size * 100, 2) + print(f"{percent} %", end="\r") + + class Dataset: def __init__(self, config: dict): self.config = DatasetConfig(**config) @@ -39,7 +45,9 @@ def download(self): if self.config.link: print(f"Downloading {self.config.link}...") - tmp_path, _ = urllib.request.urlretrieve(self.config.link) + tmp_path, _ = urllib.request.urlretrieve( + self.config.link, None, show_progress + ) if self.config.link.endswith(".tgz") or self.config.link.endswith( ".tar.gz" diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 160728d8..e5d46c64 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -60,6 +60,7 @@ def run_experiment( skip_upload: bool = False, skip_search: bool = False, skip_if_exists: bool = True, + parallels: [int] = [], ): execution_params = self.configurator.execution_params( distance=dataset.config.distance, vector_size=dataset.config.vector_size @@ -96,7 +97,6 @@ def run_experiment( if not skip_search: print("Experiment stage: Search") for search_id, searcher in enumerate(self.searchers): - if skip_if_exists: glob_pattern = ( f"{self.name}-{dataset.config.name}-search-{search_id}-*.json" @@ -110,12 +110,25 @@ def run_experiment( continue search_params = {**searcher.search_params} + ef = "default" + if "search_params" in search_params: + ef = search_params["search_params"].get("ef", "default") + client_count = search_params.get("parallel", 1) + filter_client_count = len(parallels) > 0 + if filter_client_count and (client_count not in parallels): + print(f"\tSkipping ef runtime: {ef}; #clients {client_count}") + continue + print(f"\tRunning ef runtime: {ef}; #clients {client_count}") + search_stats = searcher.search_all( dataset.config.distance, reader.read_queries() ) + # ensure we specify the client count in the results + search_params["parallel"] = client_count self.save_search_results( dataset.config.name, search_stats, search_id, search_params ) + print("Experiment stage: Done") print("Results saved to: ", RESULTS_DIR) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 1ba6e672..55e4cf9a 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -52,7 +52,6 @@ def _search_one(cls, query, top: Optional[int] = None): if query.expected_result: ids = set(x[0] for x in search_res) precision = len(ids.intersection(query.expected_result[:top])) / top - return precision, end - start def search_all( @@ -62,7 +61,6 @@ def search_all( ): parallel = self.search_params.pop("parallel", 1) top = self.search_params.pop("top", None) - # setup_search may require initialized client self.init_client( self.host, distance, self.connection_params, self.search_params @@ -108,6 +106,7 @@ def search_all( "min_time": np.min(latencies), "max_time": np.max(latencies), "rps": len(latencies) / total_time, + "p50_time": np.percentile(latencies, 50), "p95_time": np.percentile(latencies, 95), "p99_time": np.percentile(latencies, 99), "precisions": precisions, diff --git a/engine/base_client/upload.py b/engine/base_client/upload.py index 8ce0fb28..a7cfe811 100644 --- a/engine/base_client/upload.py +++ b/engine/base_client/upload.py @@ -53,12 +53,15 @@ def upload( self.upload_params, ), ) as pool: - latencies = list( - pool.imap( - self.__class__._upload_batch, - iter_batches(tqdm.tqdm(records), batch_size), + try: + latencies = list( + pool.imap( + self.__class__._upload_batch, + iter_batches(tqdm.tqdm(records), batch_size), + ) ) - ) + except Exception as e: + raise e upload_time = time.perf_counter() - start @@ -77,6 +80,8 @@ def upload( "upload_time": upload_time, "total_time": total_time, "latencies": latencies, + "parallel": parallel, + "batch_size": batch_size, } @classmethod From 49b6b0dbb316aea0edc06df1e88045284b9c71c9 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 15 Feb 2024 17:07:03 +0000 Subject: [PATCH 066/209] General improvements. Extended exposed metrics in results file. Added more metadata. Allowed to filter benchmark runs by client count --- benchmark/dataset.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/benchmark/dataset.py b/benchmark/dataset.py index a28ddc3a..41485369 100644 --- a/benchmark/dataset.py +++ b/benchmark/dataset.py @@ -26,12 +26,6 @@ class DatasetConfig: READER_TYPE = {"h5": AnnH5Reader, "jsonl": JSONReader, "tar": AnnCompoundReader} -# prepare progressbar -def show_progress(block_num, block_size, total_size): - percent = round(block_num * block_size / total_size * 100, 2) - print(f"{percent} %", end="\r") - - # prepare progressbar def show_progress(block_num, block_size, total_size): percent = round(block_num * block_size / total_size * 100, 2) From 358484f2068df3fc71a004a911f62cabd3eddb8a Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 15 Feb 2024 23:15:23 +0000 Subject: [PATCH 067/209] Fix: in case on multiple multiple datasets using the same config parallel/other properties in search_params and upload_params were not preserved --- engine/base_client/search.py | 4 ++-- engine/base_client/upload.py | 4 ++-- engine/clients/weaviate/config.py | 2 +- engine/clients/weaviate/upload.py | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 55e4cf9a..4c5e86d5 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -59,8 +59,8 @@ def search_all( distance, queries: Iterable[Query], ): - parallel = self.search_params.pop("parallel", 1) - top = self.search_params.pop("top", None) + parallel = self.search_params..get("parallel", 1) + top = self.search_params..get("top", None) # setup_search may require initialized client self.init_client( self.host, distance, self.connection_params, self.search_params diff --git a/engine/base_client/upload.py b/engine/base_client/upload.py index a7cfe811..3b035fc0 100644 --- a/engine/base_client/upload.py +++ b/engine/base_client/upload.py @@ -31,8 +31,8 @@ def upload( ) -> dict: latencies = [] start = time.perf_counter() - parallel = self.upload_params.pop("parallel", 1) - batch_size = self.upload_params.pop("batch_size", 64) + parallel = self.upload_params..get("parallel", 1) + batch_size = self.upload_params..get("batch_size", 64) self.init_client( self.host, distance, self.connection_params, self.upload_params diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index 79dd1e80..fbba5a2f 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -7,7 +7,7 @@ WEAVIATE_PORT = os.getenv("WEAVIATE_PORT",WEAVIATE_DEFAULT_PORT) def setup_client(connection_params, host): - port = connection_params.pop('port', WEAVIATE_PORT) + port = connection_params..get('port', WEAVIATE_PORT) if host.startswith("http"): url = "" else: diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index d113927e..2e9b2f85 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -21,9 +21,9 @@ def _update_geo_data(data_object): keys = data_object.keys() for key in keys: if isinstance(data_object[key], dict): - if lat := data_object[key].pop("lat", None): + if lat := data_object[key]..get("lat", None): data_object[key]["latitude"] = lat - if lon := data_object[key].pop("lon", None): + if lon := data_object[key]..get("lon", None): data_object[key]["longitude"] = lon return data_object From 8ec0387e08b508345d32ee5e9a8e1d65b34593c5 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 15 Feb 2024 23:18:14 +0000 Subject: [PATCH 068/209] Fix: in case on multiple multiple datasets using the same config parallel/other properties in search_params and upload_params were not preserved --- engine/base_client/search.py | 4 ++-- engine/base_client/upload.py | 4 ++-- engine/clients/weaviate/config.py | 2 +- engine/clients/weaviate/upload.py | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 4c5e86d5..76dc9753 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -59,8 +59,8 @@ def search_all( distance, queries: Iterable[Query], ): - parallel = self.search_params..get("parallel", 1) - top = self.search_params..get("top", None) + parallel = self.search_params.get(("parallel", 1) + top = self.search_params.get(("top", None) # setup_search may require initialized client self.init_client( self.host, distance, self.connection_params, self.search_params diff --git a/engine/base_client/upload.py b/engine/base_client/upload.py index 3b035fc0..50486baa 100644 --- a/engine/base_client/upload.py +++ b/engine/base_client/upload.py @@ -31,8 +31,8 @@ def upload( ) -> dict: latencies = [] start = time.perf_counter() - parallel = self.upload_params..get("parallel", 1) - batch_size = self.upload_params..get("batch_size", 64) + parallel = self.upload_params.get(("parallel", 1) + batch_size = self.upload_params.get(("batch_size", 64) self.init_client( self.host, distance, self.connection_params, self.upload_params diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index fbba5a2f..f85c2f5c 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -7,7 +7,7 @@ WEAVIATE_PORT = os.getenv("WEAVIATE_PORT",WEAVIATE_DEFAULT_PORT) def setup_client(connection_params, host): - port = connection_params..get('port', WEAVIATE_PORT) + port = connection_params.get(('port', WEAVIATE_PORT) if host.startswith("http"): url = "" else: diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index 2e9b2f85..c875e17b 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -21,9 +21,9 @@ def _update_geo_data(data_object): keys = data_object.keys() for key in keys: if isinstance(data_object[key], dict): - if lat := data_object[key]..get("lat", None): + if lat := data_object[key].get(("lat", None): data_object[key]["latitude"] = lat - if lon := data_object[key]..get("lon", None): + if lon := data_object[key].get(("lon", None): data_object[key]["longitude"] = lon return data_object From 55a821947c33600974cabc64b4b4bfb58bff6786 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 15 Feb 2024 23:19:19 +0000 Subject: [PATCH 069/209] Fix: in case on multiple multiple datasets using the same config parallel/other properties in search_params and upload_params were not preserved --- engine/base_client/search.py | 4 ++-- engine/base_client/upload.py | 4 ++-- engine/clients/weaviate/config.py | 2 +- engine/clients/weaviate/upload.py | 4 ++-- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 76dc9753..a58d02d0 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -59,8 +59,8 @@ def search_all( distance, queries: Iterable[Query], ): - parallel = self.search_params.get(("parallel", 1) - top = self.search_params.get(("top", None) + parallel = self.search_params.get("parallel", 1) + top = self.search_params.get("top", None) # setup_search may require initialized client self.init_client( self.host, distance, self.connection_params, self.search_params diff --git a/engine/base_client/upload.py b/engine/base_client/upload.py index 50486baa..b6a59bd4 100644 --- a/engine/base_client/upload.py +++ b/engine/base_client/upload.py @@ -31,8 +31,8 @@ def upload( ) -> dict: latencies = [] start = time.perf_counter() - parallel = self.upload_params.get(("parallel", 1) - batch_size = self.upload_params.get(("batch_size", 64) + parallel = self.upload_params.get("parallel", 1) + batch_size = self.upload_params.get("batch_size", 64) self.init_client( self.host, distance, self.connection_params, self.upload_params diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index f85c2f5c..3dd21bea 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -7,7 +7,7 @@ WEAVIATE_PORT = os.getenv("WEAVIATE_PORT",WEAVIATE_DEFAULT_PORT) def setup_client(connection_params, host): - port = connection_params.get(('port', WEAVIATE_PORT) + port = connection_params.get('port', WEAVIATE_PORT) if host.startswith("http"): url = "" else: diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index c875e17b..10b5475a 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -21,9 +21,9 @@ def _update_geo_data(data_object): keys = data_object.keys() for key in keys: if isinstance(data_object[key], dict): - if lat := data_object[key].get(("lat", None): + if lat := data_object[key].get("lat", None): data_object[key]["latitude"] = lat - if lon := data_object[key].get(("lon", None): + if lon := data_object[key].get("lon", None): data_object[key]["longitude"] = lon return data_object From 497aa90015972de0e2c56e4dae0c4b1423c70f59 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 4 Mar 2024 12:22:55 +0000 Subject: [PATCH 070/209] Enabled api key elastic connections --- engine/clients/elasticsearch/config.py | 43 ++++++++++++++++++++--- engine/clients/elasticsearch/configure.py | 18 ++-------- engine/clients/elasticsearch/search.py | 10 ++---- engine/clients/elasticsearch/upload.py | 18 ++-------- 4 files changed, 45 insertions(+), 44 deletions(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 19b59d74..0658ed1e 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -1,4 +1,39 @@ -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") +ELASTIC_API_KEY = os.getenv("ELASTIC_API_KEY", None) +ELASTIC_TIMEOUT = int(os.getenv("ELASTIC_TIMEOUT", 90)) + + +def get_es_client(host, connection_params): + client: Elasticsearch = None + init_params = { + **{ + "verify_certs": False, + "request_timeout": ELASTIC_TIMEOUT, + "retry_on_timeout": True, + }, + **connection_params, + } + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{ELASTIC_PORT}" + if ELASTIC_API_KEY is None: + client = Elasticsearch( + url, + basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), + **init_params, + ) + else: + client = Elasticsearch( + url, + api_key=ELASTIC_API_KEY, + **init_params, + ) + return client diff --git a/engine/clients/elasticsearch/configure.py b/engine/clients/elasticsearch/configure.py index 76f64eb8..a4f08425 100644 --- a/engine/clients/elasticsearch/configure.py +++ b/engine/clients/elasticsearch/configure.py @@ -6,9 +6,7 @@ from engine.base_client.distances import Distance from engine.clients.elasticsearch.config import ( ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, + get_es_client, ) @@ -25,19 +23,7 @@ class ElasticConfigurator(BaseConfigurator): 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: diff --git a/engine/clients/elasticsearch/search.py b/engine/clients/elasticsearch/search.py index 29d20ec5..ed15113c 100644 --- a/engine/clients/elasticsearch/search.py +++ b/engine/clients/elasticsearch/search.py @@ -7,9 +7,7 @@ from engine.base_client.search import BaseSearcher from engine.clients.elasticsearch.config import ( ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, + get_es_client, ) from engine.clients.elasticsearch.parser import ElasticConditionParser @@ -38,11 +36,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic }, **connection_params, } - cls.client: Elasticsearch = Elasticsearch( - f"http://{host}:{ELASTIC_PORT}", - basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), - **init_params, - ) + 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..78842a25 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -7,9 +7,7 @@ from engine.base_client.upload import BaseUploader from engine.clients.elasticsearch.config import ( ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, + get_es_client, ) @@ -28,19 +26,7 @@ def get_mp_start_method(cls): @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, - ) + cls.client = get_es_client(host, connection_params) cls.upload_params = upload_params @classmethod From beb119fd1e21a15fd4023a517e7c4b89bca18457 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 4 Mar 2024 12:32:57 +0000 Subject: [PATCH 071/209] Extra logging on which auth method we use on elastic --- engine/clients/elasticsearch/config.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 0658ed1e..eeecdd9b 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -25,12 +25,14 @@ def get_es_client(host, connection_params): url = "http://" url += f"{host}:{ELASTIC_PORT}" if ELASTIC_API_KEY is None: + print("Connecting using basic auth") client = Elasticsearch( url, basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), **init_params, ) else: + print("Connecting using api key") client = Elasticsearch( url, api_key=ELASTIC_API_KEY, From 100bf974c9adb987decb083cf8bfad87d9b3d7b6 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 4 Mar 2024 12:22:55 +0000 Subject: [PATCH 072/209] Enabled api key elastic connections --- engine/clients/elasticsearch/config.py | 43 ++++++++++++++++++++--- engine/clients/elasticsearch/configure.py | 18 ++-------- engine/clients/elasticsearch/search.py | 10 ++---- engine/clients/elasticsearch/upload.py | 18 ++-------- 4 files changed, 45 insertions(+), 44 deletions(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 19b59d74..0658ed1e 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -1,4 +1,39 @@ -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") +ELASTIC_API_KEY = os.getenv("ELASTIC_API_KEY", None) +ELASTIC_TIMEOUT = int(os.getenv("ELASTIC_TIMEOUT", 90)) + + +def get_es_client(host, connection_params): + client: Elasticsearch = None + init_params = { + **{ + "verify_certs": False, + "request_timeout": ELASTIC_TIMEOUT, + "retry_on_timeout": True, + }, + **connection_params, + } + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{ELASTIC_PORT}" + if ELASTIC_API_KEY is None: + client = Elasticsearch( + url, + basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), + **init_params, + ) + else: + client = Elasticsearch( + url, + api_key=ELASTIC_API_KEY, + **init_params, + ) + return client diff --git a/engine/clients/elasticsearch/configure.py b/engine/clients/elasticsearch/configure.py index 76f64eb8..a4f08425 100644 --- a/engine/clients/elasticsearch/configure.py +++ b/engine/clients/elasticsearch/configure.py @@ -6,9 +6,7 @@ from engine.base_client.distances import Distance from engine.clients.elasticsearch.config import ( ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, + get_es_client, ) @@ -25,19 +23,7 @@ class ElasticConfigurator(BaseConfigurator): 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: diff --git a/engine/clients/elasticsearch/search.py b/engine/clients/elasticsearch/search.py index 29d20ec5..ed15113c 100644 --- a/engine/clients/elasticsearch/search.py +++ b/engine/clients/elasticsearch/search.py @@ -7,9 +7,7 @@ from engine.base_client.search import BaseSearcher from engine.clients.elasticsearch.config import ( ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, + get_es_client, ) from engine.clients.elasticsearch.parser import ElasticConditionParser @@ -38,11 +36,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic }, **connection_params, } - cls.client: Elasticsearch = Elasticsearch( - f"http://{host}:{ELASTIC_PORT}", - basic_auth=(ELASTIC_USER, ELASTIC_PASSWORD), - **init_params, - ) + 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..78842a25 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -7,9 +7,7 @@ from engine.base_client.upload import BaseUploader from engine.clients.elasticsearch.config import ( ELASTIC_INDEX, - ELASTIC_PASSWORD, - ELASTIC_PORT, - ELASTIC_USER, + get_es_client, ) @@ -28,19 +26,7 @@ def get_mp_start_method(cls): @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, - ) + cls.client = get_es_client(host, connection_params) cls.upload_params = upload_params @classmethod From 6549035af6246e912a785a33d876d42e7303c4e6 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 4 Mar 2024 12:47:06 +0000 Subject: [PATCH 073/209] Fixes per pre-commit hook --- engine/clients/elasticsearch/config.py | 1 + engine/clients/elasticsearch/configure.py | 5 +---- engine/clients/elasticsearch/search.py | 5 +---- engine/clients/elasticsearch/upload.py | 5 +---- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 0658ed1e..a988eee7 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -1,4 +1,5 @@ import os + from elasticsearch import Elasticsearch ELASTIC_PORT = int(os.getenv("ELASTIC_PORT", 9200)) diff --git a/engine/clients/elasticsearch/configure.py b/engine/clients/elasticsearch/configure.py index a4f08425..c07e5939 100644 --- a/engine/clients/elasticsearch/configure.py +++ b/engine/clients/elasticsearch/configure.py @@ -4,10 +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, - get_es_client, -) +from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client class ElasticConfigurator(BaseConfigurator): diff --git a/engine/clients/elasticsearch/search.py b/engine/clients/elasticsearch/search.py index ed15113c..a20b2121 100644 --- a/engine/clients/elasticsearch/search.py +++ b/engine/clients/elasticsearch/search.py @@ -5,10 +5,7 @@ from elasticsearch import Elasticsearch from engine.base_client.search import BaseSearcher -from engine.clients.elasticsearch.config import ( - ELASTIC_INDEX, - get_es_client, -) +from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client from engine.clients.elasticsearch.parser import ElasticConditionParser diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index 78842a25..9b24ca5d 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -5,10 +5,7 @@ from elasticsearch import Elasticsearch from engine.base_client.upload import BaseUploader -from engine.clients.elasticsearch.config import ( - ELASTIC_INDEX, - get_es_client, -) +from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client class ClosableElastic(Elasticsearch): From 3f314d82659cac25d0c983161147706506061879 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 4 Mar 2024 13:57:43 +0000 Subject: [PATCH 074/209] popping the parallel config from a deep copy of search_params --- engine/clients/elasticsearch/search.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/engine/clients/elasticsearch/search.py b/engine/clients/elasticsearch/search.py index a20b2121..b7b09e2f 100644 --- a/engine/clients/elasticsearch/search.py +++ b/engine/clients/elasticsearch/search.py @@ -1,3 +1,4 @@ +import copy import multiprocessing as mp import uuid from typing import List, Tuple @@ -34,7 +35,9 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic **connection_params, } cls.client = get_es_client(host, connection_params) - cls.search_params = search_params + cls.search_params = copy.deepcopy(search_params) + # pop parallel + cls.search_params.pop("parallel", "1") @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: From bef25e6ee4d66a40a3b784bd7a03da4ddf2275f3 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 21 Mar 2024 08:58:48 +0000 Subject: [PATCH 075/209] ensuring client connection is available --- engine/clients/elasticsearch/config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index a988eee7..6388be9b 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -37,4 +37,5 @@ def get_es_client(host, connection_params): api_key=ELASTIC_API_KEY, **init_params, ) + assert client.ping() return client From 8b6a0c1f27423fab4ff0a1e1e7784f54ff294ef0 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 21 Mar 2024 15:14:05 +0000 Subject: [PATCH 076/209] dsiabled urlib warnings --- engine/clients/elasticsearch/config.py | 2 ++ engine/clients/milvus/config.py | 8 ++++---- engine/clients/qdrant/configure.py | 14 +++++++++++--- engine/clients/qdrant/search.py | 6 +++++- engine/clients/qdrant/upload.py | 17 ++++++++++++++--- 5 files changed, 36 insertions(+), 11 deletions(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 6388be9b..78b430ed 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -1,4 +1,5 @@ import os +import urllib3 from elasticsearch import Elasticsearch @@ -8,6 +9,7 @@ ELASTIC_PASSWORD = os.getenv("ELASTIC_PASSWORD", "passwd") ELASTIC_API_KEY = os.getenv("ELASTIC_API_KEY", None) ELASTIC_TIMEOUT = int(os.getenv("ELASTIC_TIMEOUT", 90)) +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) def get_es_client(host, connection_params): diff --git a/engine/clients/milvus/config.py b/engine/clients/milvus/config.py index 7716ac44..df5acd3d 100644 --- a/engine/clients/milvus/config.py +++ b/engine/clients/milvus/config.py @@ -5,9 +5,9 @@ MILVUS_COLLECTION_NAME = "Benchmark" MILVUS_DEFAULT_ALIAS = "bench" MILVUS_DEFAULT_PORT = "19530" -MILVUS_PASS = os.getenv("MILVUS_PASS","") -MILVUS_USER = os.getenv("MILVUS_USER","") -MILVUS_PORT = os.getenv("MILVUS_PORT",MILVUS_DEFAULT_PORT) +MILVUS_PASS = os.getenv("MILVUS_PASS", "") +MILVUS_USER = os.getenv("MILVUS_USER", "") +MILVUS_PORT = os.getenv("MILVUS_PORT", MILVUS_DEFAULT_PORT) DISTANCE_MAPPING = { Distance.L2: "L2", @@ -45,4 +45,4 @@ def get_milvus_client(connection_params: dict, host: str, alias: str): password=MILVUS_PASS, **connection_params ) - return client \ No newline at end of file + return client diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index 51d81175..f89ecf65 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -4,7 +4,11 @@ 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, QDRANT_API_KEY, QDRANT_URL +from engine.clients.qdrant.config import ( + QDRANT_COLLECTION_NAME, + QDRANT_API_KEY, + QDRANT_URL, +) class QdrantConfigurator(BaseConfigurator): @@ -24,9 +28,13 @@ class QdrantConfigurator(BaseConfigurator): def __init__(self, host, collection_params: dict, connection_params: dict): super().__init__(host, collection_params, connection_params) if QDRANT_URL is None: - self.client = QdrantClient(host=host, api_key=QDRANT_API_KEY, **connection_params) + self.client = QdrantClient( + host=host, api_key=QDRANT_API_KEY, **connection_params + ) else: - self.client = QdrantClient(url=QDRANT_URL, api_key=QDRANT_API_KEY, **connection_params) + self.client = QdrantClient( + url=QDRANT_URL, api_key=QDRANT_API_KEY, **connection_params + ) def clean(self): res = self.client.delete_collection(collection_name=QDRANT_COLLECTION_NAME) diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index 9b783419..f98fd3b3 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -7,7 +7,11 @@ from qdrant_client.http import models as rest from engine.base_client.search import BaseSearcher -from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME, QDRANT_API_KEY, QDRANT_URL +from engine.clients.qdrant.config import ( + QDRANT_COLLECTION_NAME, + QDRANT_API_KEY, + QDRANT_URL, +) from engine.clients.qdrant.parser import QdrantConditionParser diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index 87a9e47e..c81d4fa4 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -6,7 +6,11 @@ from qdrant_client.http.models import Batch, CollectionStatus, OptimizersConfigDiff from engine.base_client.upload import BaseUploader -from engine.clients.qdrant.config import QDRANT_COLLECTION_NAME, QDRANT_API_KEY, QDRANT_URL +from engine.clients.qdrant.config import ( + QDRANT_COLLECTION_NAME, + QDRANT_API_KEY, + QDRANT_URL, +) class QdrantUploader(BaseUploader): @@ -18,9 +22,16 @@ def init_client(cls, host, distance, connection_params, upload_params): os.environ["GRPC_ENABLE_FORK_SUPPORT"] = "true" os.environ["GRPC_POLL_STRATEGY"] = "epoll,poll" if QDRANT_URL is None: - cls.client = QdrantClient(host=host, api_key=QDRANT_API_KEY, prefer_grpc=True, **connection_params) + cls.client = QdrantClient( + host=host, api_key=QDRANT_API_KEY, prefer_grpc=True, **connection_params + ) else: - cls.client = QdrantClient(url=QDRANT_URL, api_key=QDRANT_API_KEY, prefer_grpc=True, **connection_params) + cls.client = QdrantClient( + url=QDRANT_URL, + api_key=QDRANT_API_KEY, + prefer_grpc=True, + **connection_params + ) cls.upload_params = upload_params @classmethod From b6823967235212ec6476a10f9a12b770ad947031 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 21 Mar 2024 15:17:38 +0000 Subject: [PATCH 077/209] dsiabled urlib warnings --- engine/clients/elasticsearch/config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 78b430ed..2b30dcd2 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -19,6 +19,7 @@ def get_es_client(host, connection_params): "verify_certs": False, "request_timeout": ELASTIC_TIMEOUT, "retry_on_timeout": True, + "ssl_show_warn": False, }, **connection_params, } From f8bb088f4d91bdd919d8517f03f2d1ff3c3746bf Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 21 Mar 2024 15:19:27 +0000 Subject: [PATCH 078/209] Disable deprecation warnings on weaviate --- engine/base_client/client.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 054e2f4c..171a9363 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -3,6 +3,7 @@ from datetime import datetime from pathlib import Path from typing import List +import warnings from benchmark import ROOT_DIR from benchmark.dataset import Dataset @@ -15,6 +16,8 @@ DETAILED_RESULTS = bool(int(os.getenv("DETAILED_RESULTS", False))) +warnings.filterwarnings("ignore", category=DeprecationWarning) + class BaseClient: def __init__( From cc8a9b6949f1e00020332b16b47c4d13347f9960 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 21 Mar 2024 16:39:50 +0000 Subject: [PATCH 079/209] Disable deprecation warnings on weaviate --- engine/clients/elasticsearch/upload.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index 9b24ca5d..dad1dfe9 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -2,6 +2,7 @@ import uuid from typing import List, Optional +import elastic_transport from elasticsearch import Elasticsearch from engine.base_client.upload import BaseUploader @@ -48,7 +49,21 @@ def upload_batch( @classmethod def post_upload(cls, _distance): - cls.client.indices.forcemerge( - index=ELASTIC_INDEX, wait_for_completion=True, max_num_segments=1 - ) + tries = 10 + for i in range(tries + 1): + try: + cls.client.indices.forcemerge( + index=ELASTIC_INDEX, wait_for_completion=True, max_num_segments=1 + ) + except elastic_transport.TlsError as e: + if i < tries: # i is zero indexed + print( + "Received the following error during retry {}/{} while waiting for ES index to be ready... {}".format( + i, tries, e.__str__() + ) + ) + continue + else: + raise + break return {} From 6e194ab4755ae436676513af9e06f4c6f30e61a7 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 22 Mar 2024 10:42:18 +0000 Subject: [PATCH 080/209] Properly handle Api Error from Elastic --- engine/clients/elasticsearch/upload.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index dad1dfe9..67e25ad8 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -3,7 +3,7 @@ from typing import List, Optional import elastic_transport -from elasticsearch import Elasticsearch +from elasticsearch import Elasticsearch, ApiError from engine.base_client.upload import BaseUploader from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client @@ -55,7 +55,7 @@ def post_upload(cls, _distance): cls.client.indices.forcemerge( index=ELASTIC_INDEX, wait_for_completion=True, max_num_segments=1 ) - except elastic_transport.TlsError as e: + except (elastic_transport.TlsError, ApiError) as e: if i < tries: # i is zero indexed print( "Received the following error during retry {}/{} while waiting for ES index to be ready... {}".format( From c6cdf57524378a00f31808dd888124f09be288a1 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 22 Mar 2024 12:24:28 +0000 Subject: [PATCH 081/209] Included elastic index timeout --- engine/clients/elasticsearch/config.py | 3 ++- engine/clients/elasticsearch/configure.py | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 2b30dcd2..8d8272b9 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -8,7 +8,8 @@ ELASTIC_USER = os.getenv("ELASTIC_USER", "elastic") ELASTIC_PASSWORD = os.getenv("ELASTIC_PASSWORD", "passwd") ELASTIC_API_KEY = os.getenv("ELASTIC_API_KEY", None) -ELASTIC_TIMEOUT = int(os.getenv("ELASTIC_TIMEOUT", 90)) +ELASTIC_TIMEOUT = int(os.getenv("ELASTIC_TIMEOUT", 300)) +ELASTIC_INDEX_TIMEOUT = os.getenv("ELASTIC_INDEX_TIMEOUT", "30m") urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) diff --git a/engine/clients/elasticsearch/configure.py b/engine/clients/elasticsearch/configure.py index c07e5939..a19edc16 100644 --- a/engine/clients/elasticsearch/configure.py +++ b/engine/clients/elasticsearch/configure.py @@ -4,7 +4,12 @@ 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, get_es_client +from engine.clients.elasticsearch.config import ( + ELASTIC_INDEX, + get_es_client, + ELASTIC_TIMEOUT, + ELASTIC_INDEX_TIMEOUT, +) class ElasticConfigurator(BaseConfigurator): @@ -25,7 +30,9 @@ def __init__(self, host, collection_params: dict, connection_params: dict): def clean(self): try: self.client.indices.delete( - index=ELASTIC_INDEX, timeout="5m", master_timeout="5m" + index=ELASTIC_INDEX, + timeout=ELASTIC_INDEX_TIMEOUT, + master_timeout=ELASTIC_INDEX_TIMEOUT, ) except NotFoundError: pass @@ -39,6 +46,9 @@ def recreate(self, dataset: Dataset, collection_params): self.client.indices.create( index=ELASTIC_INDEX, + timeout=ELASTIC_INDEX_TIMEOUT, + master_timeout=ELASTIC_INDEX_TIMEOUT, + wait_for_active_shards="all", settings={ "index": { "number_of_shards": 1, From 172208b806879ebec27c3730aca23fee243ffce1 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 22 Mar 2024 23:15:09 +0000 Subject: [PATCH 082/209] waiting for ES green status --- engine/clients/elasticsearch/config.py | 1 + engine/clients/elasticsearch/configure.py | 3 ++- engine/clients/elasticsearch/upload.py | 11 +++++++++++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 8d8272b9..965c51e9 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -10,6 +10,7 @@ ELASTIC_API_KEY = os.getenv("ELASTIC_API_KEY", None) ELASTIC_TIMEOUT = int(os.getenv("ELASTIC_TIMEOUT", 300)) ELASTIC_INDEX_TIMEOUT = os.getenv("ELASTIC_INDEX_TIMEOUT", "30m") +ELASTIC_INDEX_REFRESH_INTERVAL = int(os.getenv("ELASTIC_TIMEOUT", 30)) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) diff --git a/engine/clients/elasticsearch/configure.py b/engine/clients/elasticsearch/configure.py index a19edc16..97938871 100644 --- a/engine/clients/elasticsearch/configure.py +++ b/engine/clients/elasticsearch/configure.py @@ -9,6 +9,7 @@ get_es_client, ELASTIC_TIMEOUT, ELASTIC_INDEX_TIMEOUT, + ELASTIC_INDEX_REFRESH_INTERVAL, ) @@ -53,7 +54,7 @@ def recreate(self, dataset: Dataset, collection_params): "index": { "number_of_shards": 1, "number_of_replicas": 0, - "refresh_interval": -1, + "refresh_interval": ELASTIC_INDEX_REFRESH_INTERVAL, } }, mappings={ diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index 67e25ad8..1b42bdac 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -49,6 +49,7 @@ def upload_batch( @classmethod def post_upload(cls, _distance): + print("forcing the merge into 1 segment...") tries = 10 for i in range(tries + 1): try: @@ -66,4 +67,14 @@ def post_upload(cls, _distance): else: raise break + print("waiting for ES green status...") + for _ in range(100): + try: + client.cluster.health(wait_for_status="green") + return client + except ConnectionError: + time.sleep(0.1) + else: + # timeout + raise SkipTest("Elasticsearch failed to start.") return {} From eb28dfb4b0af93a56276852cc647a86d5396f661 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 22 Mar 2024 23:17:32 +0000 Subject: [PATCH 083/209] waiting for ES green status --- engine/clients/elasticsearch/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 965c51e9..060693fd 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -10,7 +10,7 @@ ELASTIC_API_KEY = os.getenv("ELASTIC_API_KEY", None) ELASTIC_TIMEOUT = int(os.getenv("ELASTIC_TIMEOUT", 300)) ELASTIC_INDEX_TIMEOUT = os.getenv("ELASTIC_INDEX_TIMEOUT", "30m") -ELASTIC_INDEX_REFRESH_INTERVAL = int(os.getenv("ELASTIC_TIMEOUT", 30)) +ELASTIC_INDEX_REFRESH_INTERVAL = os.getenv("ELASTIC_INDEX_REFRESH_INTERVAL", "10s") urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) From 99ef83289e9d8df45131f1f6cc6ed5de6f90ea48 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 22 Mar 2024 23:51:18 +0000 Subject: [PATCH 084/209] Fixed weaviate deprecation warning for apikey --- engine/clients/weaviate/config.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index 127d62e4..7bbd3096 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -1,5 +1,6 @@ import os -from weaviate import Client, AuthApiKey +from weaviate import Client +from weaviate.auth import AuthApiKey WEAVIATE_CLASS_NAME = "Benchmark" WEAVIATE_DEFAULT_PORT = 8090 From 738a991d1cd72d9ff7f2c9aed4a27a4f4b1dca5a Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sat, 23 Mar 2024 10:19:36 +0000 Subject: [PATCH 085/209] Included repetitions --- engine/base_client/client.py | 32 +++++++++++++---------- engine/clients/elasticsearch/config.py | 15 ++++++++++- engine/clients/elasticsearch/configure.py | 2 ++ engine/clients/elasticsearch/upload.py | 13 ++------- 4 files changed, 36 insertions(+), 26 deletions(-) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 171a9363..c071a9d1 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -15,6 +15,7 @@ RESULTS_DIR.mkdir(exist_ok=True) DETAILED_RESULTS = bool(int(os.getenv("DETAILED_RESULTS", False))) +REPETITIONS = int(os.getenv("REPETITIONS", 3)) warnings.filterwarnings("ignore", category=DeprecationWarning) @@ -147,21 +148,24 @@ def run_experiment( if filter_client_count and (client_count not in parallels): print(f"\tSkipping ef runtime: {ef}; #clients {client_count}") continue - print(f"\tRunning ef runtime: {ef}; #clients {client_count}") + for repetition in range(1, REPETITIONS + 1): + print( + f"\tRunning repetition {repetition} ef runtime: {ef}; #clients {client_count}" + ) - search_stats = searcher.search_all( - dataset.config.distance, reader.read_queries() - ) - # ensure we specify the client count in the results - search_params["parallel"] = client_count - if not DETAILED_RESULTS: - # Remove verbose stats from search results - search_stats.pop("latencies", None) - search_stats.pop("precisions", None) - - self.save_search_results( - dataset.config.name, search_stats, search_id, search_params - ) + search_stats = searcher.search_all( + dataset.config.distance, reader.read_queries() + ) + # ensure we specify the client count in the results + search_params["parallel"] = client_count + if not DETAILED_RESULTS: + # Remove verbose stats from search results + search_stats.pop("latencies", None) + search_stats.pop("precisions", None) + + self.save_search_results( + dataset.config.name, search_stats, search_id, search_params + ) print("Experiment stage: Done") print("Results saved to: ", RESULTS_DIR) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 060693fd..d4fac2f9 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -1,6 +1,6 @@ import os import urllib3 - +import time from elasticsearch import Elasticsearch ELASTIC_PORT = int(os.getenv("ELASTIC_PORT", 9200)) @@ -44,3 +44,16 @@ def get_es_client(host, connection_params): ) assert client.ping() return client + + +def _wait_es_green(client): + print("waiting for ES green status...") + for _ in range(100): + try: + client.cluster.health(wait_for_status="green") + return client + except ConnectionError: + time.sleep(0.1) + else: + # timeout + raise Exception("Elasticsearch failed to start.") diff --git a/engine/clients/elasticsearch/configure.py b/engine/clients/elasticsearch/configure.py index 97938871..7db91382 100644 --- a/engine/clients/elasticsearch/configure.py +++ b/engine/clients/elasticsearch/configure.py @@ -29,6 +29,7 @@ def __init__(self, host, collection_params: dict, connection_params: dict): self.client = get_es_client(host, connection_params) def clean(self): + print("Ensuring the index does not exist...") try: self.client.indices.delete( index=ELASTIC_INDEX, @@ -37,6 +38,7 @@ def clean(self): ) except NotFoundError: pass + print("Finished ensuring the index does not exist...") def recreate(self, dataset: Dataset, collection_params): if dataset.config.distance == Distance.DOT: diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index 1b42bdac..556aa0eb 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -50,7 +50,7 @@ def upload_batch( @classmethod def post_upload(cls, _distance): print("forcing the merge into 1 segment...") - tries = 10 + tries = 30 for i in range(tries + 1): try: cls.client.indices.forcemerge( @@ -67,14 +67,5 @@ def post_upload(cls, _distance): else: raise break - print("waiting for ES green status...") - for _ in range(100): - try: - client.cluster.health(wait_for_status="green") - return client - except ConnectionError: - time.sleep(0.1) - else: - # timeout - raise SkipTest("Elasticsearch failed to start.") + _wait_for_es_green(cls.client) return {} From cead3e1f075bfbaf1ef2881f87ad861402743935 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sat, 23 Mar 2024 10:25:52 +0000 Subject: [PATCH 086/209] Included repetitions --- engine/clients/elasticsearch/config.py | 2 +- engine/clients/elasticsearch/upload.py | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index d4fac2f9..321f8537 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -46,7 +46,7 @@ def get_es_client(host, connection_params): return client -def _wait_es_green(client): +def _wait_for_es_green(client): print("waiting for ES green status...") for _ in range(100): try: diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index 556aa0eb..6ab94dd8 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -6,7 +6,11 @@ from elasticsearch import Elasticsearch, ApiError from engine.base_client.upload import BaseUploader -from engine.clients.elasticsearch.config import ELASTIC_INDEX, get_es_client +from engine.clients.elasticsearch.config import ( + ELASTIC_INDEX, + get_es_client, + _wait_for_es_green, +) class ClosableElastic(Elasticsearch): @@ -66,6 +70,6 @@ def post_upload(cls, _distance): continue else: raise - break _wait_for_es_green(cls.client) + break return {} From 1dcb421556448a285aaf84022302183749c459b7 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sat, 23 Mar 2024 16:39:40 +0000 Subject: [PATCH 087/209] waiting for yellow state in ES --- engine/clients/elasticsearch/config.py | 6 +++--- engine/clients/elasticsearch/upload.py | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/engine/clients/elasticsearch/config.py b/engine/clients/elasticsearch/config.py index 321f8537..183284d2 100644 --- a/engine/clients/elasticsearch/config.py +++ b/engine/clients/elasticsearch/config.py @@ -46,11 +46,11 @@ def get_es_client(host, connection_params): return client -def _wait_for_es_green(client): - print("waiting for ES green status...") +def _wait_for_es_status(client, status="yellow"): + print(f"waiting for ES {status} status...") for _ in range(100): try: - client.cluster.health(wait_for_status="green") + client.cluster.health(wait_for_status=status) return client except ConnectionError: time.sleep(0.1) diff --git a/engine/clients/elasticsearch/upload.py b/engine/clients/elasticsearch/upload.py index 6ab94dd8..e295cb5e 100644 --- a/engine/clients/elasticsearch/upload.py +++ b/engine/clients/elasticsearch/upload.py @@ -9,7 +9,7 @@ from engine.clients.elasticsearch.config import ( ELASTIC_INDEX, get_es_client, - _wait_for_es_green, + _wait_for_es_status, ) @@ -70,6 +70,6 @@ def post_upload(cls, _distance): continue else: raise - _wait_for_es_green(cls.client) + _wait_for_es_status(cls.client) break return {} From 145ce7b0ef596c61cd91614b82f1bf0c53fa24f6 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 28 Mar 2024 15:50:32 +0000 Subject: [PATCH 088/209] Ensuring a proper clean DB at start for memorydb and memorystore. Ensuring all docs are indexed before search stage... --- engine/clients/redis/config.py | 4 ++-- engine/clients/redis/configure.py | 16 ++++++++++++++-- engine/clients/redis/upload.py | 24 ++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 4 deletions(-) diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index 23531a4d..c310ac40 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -6,5 +6,5 @@ REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) -# 90 seconds timeout -REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 90 * 1000)) +# 60 seconds timeout +REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 60 * 1000)) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 54376210..0ae019fd 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -53,8 +53,20 @@ def clean(self): try: index.dropindex(delete_documents=True) except redis.ResponseError as e: - if "Unknown Index name" not in e.__str__(): - print(e) + str_err = e.__str__() + if ( + "Unknown Index name" not in str_err + and "Index does not exist" not in str_err + ): + # google memorystore does not support the DD argument. + # in that case we can flushall + if "wrong number of arguments for FT.DROPINDEX command" in str_err: + print( + "Given the FT.DROPINDEX command failed, we're flushing the entire DB..." + ) + conn.flushall() + else: + raise e def recreate(self, dataset: Dataset, collection_params): self.clean() diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index bee9ce25..8d6086fd 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -1,3 +1,4 @@ +import time from typing import List, Optional import numpy as np @@ -66,4 +67,27 @@ def upload_batch( @classmethod def post_upload(cls, _distance): + index_info = cls.client.ft().info() + # redisearch / memorystore for redis + if "percent_index" in index_info: + percent_index = float(index_info["percent_index"]) + while percent_index < 1.0: + print( + "waiting for index to be fully processed. current percent index: {}".format( + percent_index * 100.0 + ) + ) + time.sleep(1) + percent_index = float(cls.client.ft().info()["percent_index"]) + # memorydb + if "current_lag" in index_info: + current_lag = float(index_info["current_lag"]) + while current_lag > 0: + print( + "waiting for index to be fully processed. current current_lag: {}".format( + current_lag + ) + ) + time.sleep(1) + current_lag = int(cls.client.ft().info()["current_lag"]) return {} From 0f3e5767ce71fc430a8fd31821c512913d6483f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Wed, 3 Apr 2024 13:18:22 +0200 Subject: [PATCH 089/209] Add laion-img-emb-768-1G-cosine to datasets --- datasets/datasets.json | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/datasets/datasets.json b/datasets/datasets.json index 9237803e..752bd4c3 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -95,6 +95,14 @@ "path": "laion-img-emb-512/laion-img-emb-512-400M-cosine.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-400M-cosine.hdf5" }, + { + "name": "laion-img-emb-768-1G-cosine", + "vector_size": 768, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-768/laion-img-emb-768-1G-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1G-cosine.hdf5" + }, { "name": "gist-960-angular", "vector_size": 960, From 77b4ca02fa567ccc9adc95376d92d454886571f3 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 9 Apr 2024 16:13:55 +0100 Subject: [PATCH 090/209] Extracting memory info from redis compatible DBs --- engine/base_client/upload.py | 6 ++++++ engine/clients/redis/upload.py | 13 +++++++++++++ 2 files changed, 19 insertions(+) diff --git a/engine/base_client/upload.py b/engine/base_client/upload.py index b6a59bd4..2bda5479 100644 --- a/engine/base_client/upload.py +++ b/engine/base_client/upload.py @@ -73,6 +73,7 @@ def upload( print(f"Total import time: {total_time}") + memory_usage = self.get_memory_usage() self.delete_client() return { @@ -82,6 +83,7 @@ def upload( "latencies": latencies, "parallel": parallel, "batch_size": batch_size, + "memory_usage": memory_usage, } @classmethod @@ -97,6 +99,10 @@ def _upload_batch( def post_upload(cls, distance): return {} + @classmethod + def get_memory_usage(cls): + return {} + @classmethod def upload_batch( cls, ids: List[int], vectors: List[list], metadata: List[Optional[dict]] diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 8d6086fd..21a2feb1 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -15,6 +15,7 @@ class RedisUploader(BaseUploader): client = None + client_decode = None upload_params = {} @classmethod @@ -23,6 +24,13 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.client = redis_constructor( host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) + cls.client_decode = redis_constructor( + host=host, + port=REDIS_PORT, + password=REDIS_AUTH, + username=REDIS_USER, + decode_responses=True, + ) cls.upload_params = upload_params @classmethod @@ -91,3 +99,8 @@ def post_upload(cls, _distance): time.sleep(1) current_lag = int(cls.client.ft().info()["current_lag"]) return {} + + def get_memory_usage(cls): + used_memory = cls.client_decode.info("memory")["used_memory"] + index_info = cls.client_decode.ft().info() + return {"used_memory": used_memory, "index_info": index_info} From e31c73c98c589109a4fab3d6316c191d6f76f763 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 11 Apr 2024 18:16:44 +0100 Subject: [PATCH 091/209] Included simple plot script --- .gitignore | 2 + chart.py | 178 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 180 insertions(+) create mode 100644 chart.py diff --git a/.gitignore b/.gitignore index e21c3643..9c694280 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ NOTES.md results/* tools/custom/data.json + +*.png diff --git a/chart.py b/chart.py new file mode 100644 index 00000000..c2346147 --- /dev/null +++ b/chart.py @@ -0,0 +1,178 @@ +import json +import os + +import matplotlib.pyplot as plt +import argparse + + +x_metrics = {"mean_precisions": {"human_label": "Precision"}} +y_metrics = { + "rps": {"mode": "higher-better", "human_label": "Search Queries per second"}, + "mean_time": { + "mode": "lower-better", + "human_label": "Search avg. latency including RTT (seconds)", + }, + "p50_time": { + "mode": "lower-better", + "human_label": "Search p50 latency including RTT (seconds)", + }, + "p99_time": { + "mode": "lower-better", + "human_label": "Search p99 latency including RTT (seconds)", + }, +} + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + parser.add_argument("--dataset", default="glove-100-angular") + parser.add_argument("-o", "--output", default=None) + parser.add_argument( + "-x", + "--x-axis", + help="Which metric to use on the X-axis", + choices=x_metrics.keys(), + default="mean_precisions", + ) + parser.add_argument( + "--x-axis-left", + default=None, + ) + parser.add_argument( + "--x-axis-right", + default=None, + ) + parser.add_argument( + "--x-axis-label", + default=None, + ) + + parser.add_argument( + "-y", + "--y-axis", + help="Which metric to use on the Y-axis", + choices=y_metrics.keys(), + default="rps", + ) + parser.add_argument( + "--y-axis-label", + default=None, + ) + + parser.add_argument( + "--y-axis-bottom", + default=None, + ) + parser.add_argument( + "--y-axis-top", + default=None, + ) + + parser.add_argument( + "--legend", + default="Redis", + ) + + parser.add_argument( + "--results", type=str, help="results folder to process", default="results" + ) + parser.add_argument( + "--clients", type=int, help="consider results from this client count", default=1 + ) + args = parser.parse_args() + final_results_map = {} + x_axis = [] + y_axis = [] + fig, ax = plt.subplots() + + if os.path.exists(args.results): + print(f"working on dir: {args.results}") + print("reading first the upload data") + for filename in os.listdir(args.results): + f = os.path.join(args.results, filename) + setup_name = filename.split(args.dataset)[0] + setup_name = setup_name[0 : len(setup_name) - 1] + + with open(f, "r") as fd: + try: + json_res = json.load(fd) + except json.decoder.JSONDecodeError as e: + error_str = e.__str__() + print( + f"skipping {filename} given here as an error while processing the file {error_str})" + ) + continue + parallel = 1 + if "parallel" in json_res["params"]: + parallel = json_res["params"]["parallel"] + + if args.clients != parallel: + print( + f"skipping {filename} given the client count ({parallel}) is different than the one we wish to plot ({args.clients})" + ) + continue + # query + if ( + args.x_axis in json_res["results"] + and args.y_axis in json_res["results"] + ): + x_val = json_res["results"][args.x_axis] + y_val = json_res["results"][args.y_axis] + x_axis.append(x_val) + y_axis.append(y_val) + + color = "tab:red" + ax.scatter( + x_axis, y_axis, c=color, label=args.legend, marker="^", edgecolors="none" + ) + + ax.legend() + ax.grid(True) + + x_axis_label = args.x_axis + if args.x_axis in x_metrics: + if "human_label" in x_metrics[args.x_axis]: + x_axis_label = x_metrics[args.x_axis]["human_label"] + if args.x_axis_label is not None: + x_axis_label = args.x_axis_label + plt.xlabel(x_axis_label) + + y_axis_label = args.y_axis + y_axis_mode = "higher-better" + if args.y_axis in y_metrics: + if "human_label" in y_metrics[args.y_axis]: + y_axis_label = y_metrics[args.y_axis]["human_label"] + if "mode" in y_metrics[args.y_axis]: + y_axis_mode = y_metrics[args.y_axis]["mode"] + if args.y_axis_label is not None: + y_axis_label = args.y_axis_label + plt.ylabel(y_axis_label) + title_string = ( + f"{x_axis_label} vs {y_axis_label} ({y_axis_mode}).\nclients={args.clients}" + ) + plt.title(title_string) + + x_axis_left, x_axis_right = plt.xlim() + _, y_axis_top = plt.ylim() + y_axis_bottom = 0 + if args.y_axis_bottom is not None: + y_axis_bottom = float(args.y_axis_bottom) + if args.y_axis_top is not None: + y_axis_top = float(args.y_axis_top) + + plt.ylim(y_axis_bottom, y_axis_top) + + if args.x_axis_left is not None: + x_axis_left = float(args.x_axis_left) + if args.x_axis_right is not None: + x_axis_right = float(args.x_axis_right) + + plt.xlim(x_axis_left, x_axis_right) + + output_file = f"{args.y_axis}.png" + + if args.output is not None: + output_file = args.output + + print(f"writing output to {output_file}") + + plt.savefig(output_file) From 1879049aec284d7e750aaec1365712d950a98585 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 19 Apr 2024 13:26:45 +0100 Subject: [PATCH 092/209] Allowing to specify ALGO --- engine/clients/redis/config.py | 1 + engine/clients/redis/configure.py | 8 ++++++-- engine/clients/redis/upload.py | 4 ++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index c310ac40..afc3ab37 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -5,6 +5,7 @@ REDIS_USER = os.getenv("REDIS_USER", None) REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) +REDIS_ALGORITHM = os.getenv("REDIS_ALGORITHM", "HNSW") # 60 seconds timeout REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 60 * 1000)) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 0ae019fd..c5ce2058 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -16,6 +16,7 @@ REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, + REDIS_ALGORITHM, ) @@ -88,15 +89,18 @@ def recreate(self, dataset: Dataset, collection_params): for field_name, field_type in dataset.config.schema.items() if field_type == "keyword" ] + algorithm_config = {} + if REDIS_ALGORITHM == "HNSW": + algorithm_config = self.collection_params.get("hnsw_config", {}) index_fields = [ VectorField( name="vector", - algorithm="HNSW", + algorithm=REDIS_ALGORITHM, attributes={ "TYPE": "FLOAT32", "DIM": dataset.config.vector_size, "DISTANCE_METRIC": self.DISTANCE_MAPPING[dataset.config.distance], - **self.collection_params.get("hnsw_config", {}), + **algorithm_config, }, ) ] + payload_fields diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 21a2feb1..c6510a40 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -9,6 +9,7 @@ REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, + REDIS_ALGORITHM, ) from engine.clients.redis.helper import convert_to_redis_coords @@ -75,6 +76,9 @@ def upload_batch( @classmethod def post_upload(cls, _distance): + if REDIS_ALGORITHM != "HNSW" and REDIS_ALGORITHM != "FLAT": + print(f"TODO: FIXME!! Avoiding calling ft.info for {REDIS_ALGORITHM}...") + return {} index_info = cls.client.ft().info() # redisearch / memorystore for redis if "percent_index" in index_info: From 8cbc9d46b0bcc079604beb02b47bb12e245e73b7 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 19 Apr 2024 16:00:23 +0100 Subject: [PATCH 093/209] avoiding call to ft.info on IVF indices --- engine/clients/redis/upload.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index c6510a40..dd28050c 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -106,5 +106,9 @@ def post_upload(cls, _distance): def get_memory_usage(cls): used_memory = cls.client_decode.info("memory")["used_memory"] - index_info = cls.client_decode.ft().info() + index_info = {} + if REDIS_ALGORITHM != "HNSW" and REDIS_ALGORITHM != "FLAT": + print(f"TODO: FIXME!! Avoiding calling ft.info for {REDIS_ALGORITHM}...") + else: + index_info = cls.client_decode.ft().info() return {"used_memory": used_memory, "index_info": index_info} From f628e322a0bbb3799a767be61149064fcff19cef Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 26 Apr 2024 00:44:25 +0100 Subject: [PATCH 094/209] Adjusted search parameters for non-hnsw queries --- engine/clients/redis/search.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index b197277a..ebf2a06e 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -11,7 +11,9 @@ REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, + REDIS_ALGORITHM, ) + from engine.clients.redis.parser import RedisConditionParser @@ -27,7 +29,9 @@ 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.knn_conditions = "" + if REDIS_ALGORITHM == "HNSW": + 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 From da9e9263248ff2077a8e07b98608865fba665b14 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 2 May 2024 13:42:26 +0100 Subject: [PATCH 095/209] adjusting search parameters for non-hnsw runs --- engine/clients/redis/search.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index ebf2a06e..baad81df 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -67,9 +67,10 @@ 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"], **params, } + if REDIS_ALGORITHM == "HNSW": + params_dict["EF"] = cls.search_params["search_params"]["ef"] results = cls._ft.search(q, query_params=params_dict) return [(int(result.id), float(result.vector_score)) for result in results.docs] From bdd305ca7ee17382af36fbf99c404742619dcbc7 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 6 May 2024 16:35:40 +0100 Subject: [PATCH 096/209] included ivf experiments --- .../redis-hnsw-single-node.json | 86 +++++++++++++++++++ .../redis-ivf_flat-single-node.json | 72 ++++++++++++++++ .../redis-ivf_pq-single-node.json | 72 ++++++++++++++++ 3 files changed, 230 insertions(+) create mode 100644 experiments/configurations/redis-hnsw-single-node.json create mode 100644 experiments/configurations/redis-ivf_flat-single-node.json create mode 100644 experiments/configurations/redis-ivf_pq-single-node.json diff --git a/experiments/configurations/redis-hnsw-single-node.json b/experiments/configurations/redis-hnsw-single-node.json new file mode 100644 index 00000000..77dbd6c2 --- /dev/null +++ b/experiments/configurations/redis-hnsw-single-node.json @@ -0,0 +1,86 @@ +[ + { + "name": "redis-hnsw-m-16-ef-128", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "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 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-32-ef-128", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "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 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-32-ef-256", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "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 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-32-ef-512", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "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 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-64-ef-256", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "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 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-hnsw-m-64-ef-512", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "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 } } + ], + "upload_params": { "parallel": 16 } + } +] diff --git a/experiments/configurations/redis-ivf_flat-single-node.json b/experiments/configurations/redis-ivf_flat-single-node.json new file mode 100644 index 00000000..3333fba3 --- /dev/null +++ b/experiments/configurations/redis-ivf_flat-single-node.json @@ -0,0 +1,72 @@ +[ + { + "name": "redis-ivf_flat-n_lists-64", + "engine": "redis", + "algorithm": "ivf_flat", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 64 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-ivf_flat-n_lists-128", + "engine": "redis", + "algorithm": "ivf_flat", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 128 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-ivf_flat-n_lists-256", + "engine": "redis", + "algorithm": "ivf_flat", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 256 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-ivf_flat-n_lists-512", + "engine": "redis", + "algorithm": "ivf_flat", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 512 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-ivf_flat-n_lists-1024", + "engine": "redis", + "algorithm": "ivf_flat", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 1024 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + } +] diff --git a/experiments/configurations/redis-ivf_pq-single-node.json b/experiments/configurations/redis-ivf_pq-single-node.json new file mode 100644 index 00000000..9812e824 --- /dev/null +++ b/experiments/configurations/redis-ivf_pq-single-node.json @@ -0,0 +1,72 @@ +[ + { + "name": "redis-ivf_pq-n_lists-64", + "engine": "redis", + "algorithm": "ivf_pq", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 64 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-ivf_pq-n_lists-128", + "engine": "redis", + "algorithm": "ivf_pq", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 128 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-ivf_pq-n_lists-256", + "engine": "redis", + "algorithm": "ivf_pq", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 256 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-ivf_pq-n_lists-512", + "engine": "redis", + "algorithm": "ivf_pq", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 512 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "redis-ivf_pq-n_lists-1024", + "engine": "redis", + "algorithm": "ivf_pq", + "connection_params": {}, + "collection_params": { + "ivf_config": { "N_LISTS": 1024 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, + { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + ], + "upload_params": { "parallel": 16 } + } +] From fd76a9b2cb1bf511647ac1f8a7b552ab762ae783 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 8 May 2024 14:40:24 +0100 Subject: [PATCH 097/209] Added specific experiment configurations for IVF and IVF-PQ --- engine/clients/redis/config.py | 1 - engine/clients/redis/configure.py | 8 +- engine/clients/redis/search.py | 6 +- engine/clients/redis/upload.py | 10 +- experiments/configurations/create-ivf.py | 39 + .../redis-ivf_flat-single-node.json | 892 +++++++++++++++++- .../redis-ivf_pq-single-node.json | 892 +++++++++++++++++- 7 files changed, 1774 insertions(+), 74 deletions(-) create mode 100644 experiments/configurations/create-ivf.py diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index afc3ab37..c310ac40 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -5,7 +5,6 @@ REDIS_USER = os.getenv("REDIS_USER", None) REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) -REDIS_ALGORITHM = os.getenv("REDIS_ALGORITHM", "HNSW") # 60 seconds timeout REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 60 * 1000)) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index c5ce2058..e4e6d5d3 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -90,12 +90,14 @@ def recreate(self, dataset: Dataset, collection_params): if field_type == "keyword" ] algorithm_config = {} - if REDIS_ALGORITHM == "HNSW": - algorithm_config = self.collection_params.get("hnsw_config", {}) + # by default we use hnsw + algo = collection_params.get("algorithm", "hnsw") + algorithm_config = collection_params.get(f"{algo}_config", {}) + print(f"Using algorithm {algo} with config {algorithm_config}") index_fields = [ VectorField( name="vector", - algorithm=REDIS_ALGORITHM, + algorithm=algo, attributes={ "TYPE": "FLOAT32", "DIM": dataset.config.vector_size, diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index baad81df..9629a078 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -11,7 +11,6 @@ REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, - REDIS_ALGORITHM, ) from engine.clients.redis.parser import RedisConditionParser @@ -30,7 +29,8 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic ) cls.search_params = search_params cls.knn_conditions = "" - if REDIS_ALGORITHM == "HNSW": + cls.algorithm = cls.search_params.get("algorithm", "hnsw").upper() + if cls.algorithm == "HNSW": 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 @@ -69,7 +69,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: "K": top, **params, } - if REDIS_ALGORITHM == "HNSW": + if cls.algorithm == "HNSW": params_dict["EF"] = cls.search_params["search_params"]["ef"] results = cls._ft.search(q, query_params=params_dict) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index dd28050c..2a58c3d2 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -9,7 +9,6 @@ REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, - REDIS_ALGORITHM, ) from engine.clients.redis.helper import convert_to_redis_coords @@ -33,6 +32,7 @@ def init_client(cls, host, distance, connection_params, upload_params): decode_responses=True, ) cls.upload_params = upload_params + cls.algorithm = cls.upload_params.get("algorithm", "hnsw").upper() @classmethod def upload_batch( @@ -76,8 +76,8 @@ def upload_batch( @classmethod def post_upload(cls, _distance): - if REDIS_ALGORITHM != "HNSW" and REDIS_ALGORITHM != "FLAT": - print(f"TODO: FIXME!! Avoiding calling ft.info for {REDIS_ALGORITHM}...") + if cls.algorithm != "HNSW" and cls.algorithm != "FLAT": + print(f"TODO: FIXME!! Avoiding calling ft.info for {cls.algorithm}...") return {} index_info = cls.client.ft().info() # redisearch / memorystore for redis @@ -107,8 +107,8 @@ def post_upload(cls, _distance): def get_memory_usage(cls): used_memory = cls.client_decode.info("memory")["used_memory"] index_info = {} - if REDIS_ALGORITHM != "HNSW" and REDIS_ALGORITHM != "FLAT": - print(f"TODO: FIXME!! Avoiding calling ft.info for {REDIS_ALGORITHM}...") + if cls.algorithm != "HNSW" and cls.algorithm != "FLAT": + print(f"TODO: FIXME!! Avoiding calling ft.info for {cls.algorithm}...") else: index_info = cls.client_decode.ft().info() return {"used_memory": used_memory, "index_info": index_info} diff --git a/experiments/configurations/create-ivf.py b/experiments/configurations/create-ivf.py new file mode 100644 index 00000000..43a4bb22 --- /dev/null +++ b/experiments/configurations/create-ivf.py @@ -0,0 +1,39 @@ +import json + +n_lists = [256, 512, 1024, 1536, 2048] +n_probes = [16, 20, 32, 64, 128, 256] + + +for algo in ["ivf_pq", "ivf_flat"]: + configs = [] + for lists in n_lists: + for probes in n_probes: + config = { + "name": f"redis-{algo}-n_lists-{lists}-n_probes-{probes}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": algo, + f"{algo}_config": {"N_LISTS": lists, "N_PROBES": probes}, + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": algo, + }, + }, + { + "parallel": 100, + "search_params": { + "algorithm": algo, + }, + }, + ], + "upload_params": {"parallel": 16, "algorithm": algo}, + } + configs.append(config) + fname = f"redis-{algo}-single-node.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"created {len(configs)} configs for {fname}.") diff --git a/experiments/configurations/redis-ivf_flat-single-node.json b/experiments/configurations/redis-ivf_flat-single-node.json index 3333fba3..d4e3a5e0 100644 --- a/experiments/configurations/redis-ivf_flat-single-node.json +++ b/experiments/configurations/redis-ivf_flat-single-node.json @@ -1,72 +1,902 @@ [ { - "name": "redis-ivf_flat-n_lists-64", + "name": "redis-ivf_flat-n_lists-256-n_probes-16", "engine": "redis", - "algorithm": "ivf_flat", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 64 } + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 16 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } }, { - "name": "redis-ivf_flat-n_lists-128", + "name": "redis-ivf_flat-n_lists-256-n_probes-20", "engine": "redis", - "algorithm": "ivf_flat", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 128 } + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 20 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } }, { - "name": "redis-ivf_flat-n_lists-256", + "name": "redis-ivf_flat-n_lists-256-n_probes-32", "engine": "redis", - "algorithm": "ivf_flat", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 256 } + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 32 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } }, { - "name": "redis-ivf_flat-n_lists-512", + "name": "redis-ivf_flat-n_lists-256-n_probes-64", "engine": "redis", - "algorithm": "ivf_flat", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 512 } + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 64 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } }, { - "name": "redis-ivf_flat-n_lists-1024", + "name": "redis-ivf_flat-n_lists-256-n_probes-128", "engine": "redis", - "algorithm": "ivf_flat", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 1024 } + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 128 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-256-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-512-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-512-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-512-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-512-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-512-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-512-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1024-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1024-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1024-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1024-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1024-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1024-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1536-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1536-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1536-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1536-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1536-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-1536-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-2048-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-2048-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-2048-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-2048-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-2048-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } + }, + { + "name": "redis-ivf_flat-n_lists-2048-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_flat", + "ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_flat" + } } -] +] \ No newline at end of file diff --git a/experiments/configurations/redis-ivf_pq-single-node.json b/experiments/configurations/redis-ivf_pq-single-node.json index 9812e824..818d7eb9 100644 --- a/experiments/configurations/redis-ivf_pq-single-node.json +++ b/experiments/configurations/redis-ivf_pq-single-node.json @@ -1,72 +1,902 @@ [ { - "name": "redis-ivf_pq-n_lists-64", + "name": "redis-ivf_pq-n_lists-256-n_probes-16", "engine": "redis", - "algorithm": "ivf_pq", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 64 } + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 16 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } }, { - "name": "redis-ivf_pq-n_lists-128", + "name": "redis-ivf_pq-n_lists-256-n_probes-20", "engine": "redis", - "algorithm": "ivf_pq", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 128 } + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 20 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } }, { - "name": "redis-ivf_pq-n_lists-256", + "name": "redis-ivf_pq-n_lists-256-n_probes-32", "engine": "redis", - "algorithm": "ivf_pq", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 256 } + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 32 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } }, { - "name": "redis-ivf_pq-n_lists-512", + "name": "redis-ivf_pq-n_lists-256-n_probes-64", "engine": "redis", - "algorithm": "ivf_pq", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 512 } + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 64 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } }, { - "name": "redis-ivf_pq-n_lists-1024", + "name": "redis-ivf_pq-n_lists-256-n_probes-128", "engine": "redis", - "algorithm": "ivf_pq", "connection_params": {}, "collection_params": { - "ivf_config": { "N_LISTS": 1024 } + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 128 + } }, "search_params": [ - { "parallel": 1, "search_params": { "n_probes": 32 } }, { "parallel": 1, "search_params": { "n_probes": 64 } }, { "parallel": 1, "search_params": { "n_probes": 128 } }, { "parallel": 1, "search_params": { "n_probes": 256 } }, { "parallel": 1, "search_params": { "n_probes": 512 } }, - { "parallel": 100, "search_params": { "n_probes": 32 } }, { "parallel": 100, "search_params": { "n_probes": 64 } }, { "parallel": 100, "search_params": { "n_probes": 128 } }, { "parallel": 100, "search_params": { "n_probes": 256 } }, { "parallel": 100, "search_params": { "n_probes": 512 } } + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } ], - "upload_params": { "parallel": 16 } + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-256-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-512-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-512-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-512-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-512-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-512-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-512-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1024-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1024-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1024-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1024-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1024-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1024-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1536-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1536-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1536-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1536-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1536-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-1536-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-2048-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-2048-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-2048-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-2048-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-2048-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } + }, + { + "name": "redis-ivf_pq-n_lists-2048-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "ivf_pq", + "ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "ivf_pq" + } } -] +] \ No newline at end of file From a8a9a480dfd28b6e676c301bd236e1d0d24c5891 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 8 May 2024 14:55:33 +0100 Subject: [PATCH 098/209] Added specific experiment configurations for IVF and IVF-PQ --- engine/clients/redis/configure.py | 1 - 1 file changed, 1 deletion(-) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index e4e6d5d3..aeb03dbc 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -16,7 +16,6 @@ REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, - REDIS_ALGORITHM, ) From 9fa1f37bdc35368bd7535ba38c7b542ff09c770c Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 8 May 2024 14:58:05 +0100 Subject: [PATCH 099/209] Added specific experiment configurations for IVF and IVF-PQ --- experiments/configurations/create-ivf.py | 2 +- .../redis-raft_ivf_flat-single-node.json | 902 ++++++++++++++++++ .../redis-raft_ivf_pq-single-node.json | 902 ++++++++++++++++++ 3 files changed, 1805 insertions(+), 1 deletion(-) create mode 100644 experiments/configurations/redis-raft_ivf_flat-single-node.json create mode 100644 experiments/configurations/redis-raft_ivf_pq-single-node.json diff --git a/experiments/configurations/create-ivf.py b/experiments/configurations/create-ivf.py index 43a4bb22..1c891057 100644 --- a/experiments/configurations/create-ivf.py +++ b/experiments/configurations/create-ivf.py @@ -4,7 +4,7 @@ n_probes = [16, 20, 32, 64, 128, 256] -for algo in ["ivf_pq", "ivf_flat"]: +for algo in ["raft_ivf_pq", "raft_ivf_flat"]: configs = [] for lists in n_lists: for probes in n_probes: diff --git a/experiments/configurations/redis-raft_ivf_flat-single-node.json b/experiments/configurations/redis-raft_ivf_flat-single-node.json new file mode 100644 index 00000000..a5075a89 --- /dev/null +++ b/experiments/configurations/redis-raft_ivf_flat-single-node.json @@ -0,0 +1,902 @@ +[ + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-256-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 256, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-512-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 512, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1024-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1024, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-1536-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 1536, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + }, + { + "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_flat", + "raft_ivf_flat_config": { + "N_LISTS": 2048, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_flat" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_flat" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_flat" + } + } +] \ No newline at end of file diff --git a/experiments/configurations/redis-raft_ivf_pq-single-node.json b/experiments/configurations/redis-raft_ivf_pq-single-node.json new file mode 100644 index 00000000..1c5077d8 --- /dev/null +++ b/experiments/configurations/redis-raft_ivf_pq-single-node.json @@ -0,0 +1,902 @@ +[ + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-256-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 256, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-512-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 512, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1024-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1024, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-1536-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 1536, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-20", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 20 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + }, + { + "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "raft_ivf_pq", + "raft_ivf_pq_config": { + "N_LISTS": 2048, + "N_PROBES": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "algorithm": "raft_ivf_pq" + } + }, + { + "parallel": 100, + "search_params": { + "algorithm": "raft_ivf_pq" + } + } + ], + "upload_params": { + "parallel": 16, + "algorithm": "raft_ivf_pq" + } + } +] \ No newline at end of file From b3a0f4e24b5590fa703a1db53930a8b72ac36349 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 8 May 2024 14:59:43 +0100 Subject: [PATCH 100/209] Added specific experiment configurations for IVF and IVF-PQ --- .../redis-ivf_flat-single-node.json | 902 ------------------ .../redis-ivf_pq-single-node.json | 902 ------------------ 2 files changed, 1804 deletions(-) delete mode 100644 experiments/configurations/redis-ivf_flat-single-node.json delete mode 100644 experiments/configurations/redis-ivf_pq-single-node.json diff --git a/experiments/configurations/redis-ivf_flat-single-node.json b/experiments/configurations/redis-ivf_flat-single-node.json deleted file mode 100644 index d4e3a5e0..00000000 --- a/experiments/configurations/redis-ivf_flat-single-node.json +++ /dev/null @@ -1,902 +0,0 @@ -[ - { - "name": "redis-ivf_flat-n_lists-256-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 256, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-256-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 256, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-256-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 256, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-256-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 256, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-256-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 256, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-256-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 256, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-512-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 512, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-512-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 512, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-512-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 512, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-512-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 512, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-512-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 512, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-512-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 512, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1024-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1024, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1024-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1024, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1024-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1024, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1024-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1024, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1024-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1024, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1024-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1024, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1536-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1536, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1536-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1536, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1536-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1536, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1536-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1536, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1536-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1536, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-1536-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 1536, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-2048-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-2048-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-2048-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-2048-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-2048-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - }, - { - "name": "redis-ivf_flat-n_lists-2048-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_flat", - "ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_flat" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_flat" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_flat" - } - } -] \ No newline at end of file diff --git a/experiments/configurations/redis-ivf_pq-single-node.json b/experiments/configurations/redis-ivf_pq-single-node.json deleted file mode 100644 index 818d7eb9..00000000 --- a/experiments/configurations/redis-ivf_pq-single-node.json +++ /dev/null @@ -1,902 +0,0 @@ -[ - { - "name": "redis-ivf_pq-n_lists-256-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 256, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-256-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 256, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-256-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 256, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-256-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 256, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-256-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 256, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-256-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 256, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-512-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 512, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-512-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 512, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-512-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 512, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-512-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 512, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-512-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 512, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-512-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 512, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1024-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1024, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1024-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1024, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1024-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1024, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1024-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1024, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1024-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1024, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1024-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1024, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1536-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1536, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1536-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1536, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1536-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1536, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1536-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1536, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1536-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1536, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-1536-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 1536, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-2048-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-2048-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-2048-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-2048-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-2048-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - }, - { - "name": "redis-ivf_pq-n_lists-2048-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "ivf_pq", - "ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "algorithm": "ivf_pq" - } - }, - { - "parallel": 100, - "search_params": { - "algorithm": "ivf_pq" - } - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "ivf_pq" - } - } -] \ No newline at end of file From 8c222d9559a0b0633e3c0c13622011bcec062508 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 8 May 2024 18:38:05 +0100 Subject: [PATCH 101/209] Fixed location of algorithm in search_params --- experiments/configurations/create-ivf.py | 10 +- .../redis-raft_ivf_flat-single-node.json | 240 +++++------------- .../redis-raft_ivf_pq-single-node.json | 240 +++++------------- 3 files changed, 123 insertions(+), 367 deletions(-) diff --git a/experiments/configurations/create-ivf.py b/experiments/configurations/create-ivf.py index 1c891057..d951ddf7 100644 --- a/experiments/configurations/create-ivf.py +++ b/experiments/configurations/create-ivf.py @@ -19,18 +19,14 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": algo, - }, + "algorithm": algo, }, { "parallel": 100, - "search_params": { - "algorithm": algo, - }, + "algorithm": algo, }, ], - "upload_params": {"parallel": 16, "algorithm": algo}, + "upload_params": {"parallel": 16, "algorithm": algo}, } configs.append(config) fname = f"redis-{algo}-single-node.json" diff --git a/experiments/configurations/redis-raft_ivf_flat-single-node.json b/experiments/configurations/redis-raft_ivf_flat-single-node.json index a5075a89..60c9dd8b 100644 --- a/experiments/configurations/redis-raft_ivf_flat-single-node.json +++ b/experiments/configurations/redis-raft_ivf_flat-single-node.json @@ -13,15 +13,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -43,15 +39,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -73,15 +65,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -103,15 +91,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -133,15 +117,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -163,15 +143,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -193,15 +169,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -223,15 +195,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -253,15 +221,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -283,15 +247,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -313,15 +273,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -343,15 +299,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -373,15 +325,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -403,15 +351,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -433,15 +377,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -463,15 +403,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -493,15 +429,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -523,15 +455,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -553,15 +481,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -583,15 +507,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -613,15 +533,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -643,15 +559,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -673,15 +585,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -703,15 +611,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -733,15 +637,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -763,15 +663,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -793,15 +689,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -823,15 +715,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -853,15 +741,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { @@ -883,15 +767,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_flat" - } + "algorithm": "raft_ivf_flat" } ], "upload_params": { diff --git a/experiments/configurations/redis-raft_ivf_pq-single-node.json b/experiments/configurations/redis-raft_ivf_pq-single-node.json index 1c5077d8..03c9f7c8 100644 --- a/experiments/configurations/redis-raft_ivf_pq-single-node.json +++ b/experiments/configurations/redis-raft_ivf_pq-single-node.json @@ -13,15 +13,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -43,15 +39,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -73,15 +65,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -103,15 +91,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -133,15 +117,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -163,15 +143,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -193,15 +169,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -223,15 +195,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -253,15 +221,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -283,15 +247,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -313,15 +273,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -343,15 +299,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -373,15 +325,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -403,15 +351,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -433,15 +377,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -463,15 +403,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -493,15 +429,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -523,15 +455,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -553,15 +481,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -583,15 +507,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -613,15 +533,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -643,15 +559,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -673,15 +585,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -703,15 +611,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -733,15 +637,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -763,15 +663,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -793,15 +689,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -823,15 +715,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -853,15 +741,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { @@ -883,15 +767,11 @@ "search_params": [ { "parallel": 1, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" }, { "parallel": 100, - "search_params": { - "algorithm": "raft_ivf_pq" - } + "algorithm": "raft_ivf_pq" } ], "upload_params": { From 313b5c0d0fb8b137e5eae2a5076e5138453d02b3 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 9 May 2024 10:25:14 +0100 Subject: [PATCH 102/209] Fixed IVF experiment creation script --- experiments/configurations/create-ivf.py | 2 +- .../redis-raft_ivf_flat-single-node.json | 156 ------------------ .../redis-raft_ivf_pq-single-node.json | 156 ------------------ 3 files changed, 1 insertion(+), 313 deletions(-) diff --git a/experiments/configurations/create-ivf.py b/experiments/configurations/create-ivf.py index d951ddf7..1b945e01 100644 --- a/experiments/configurations/create-ivf.py +++ b/experiments/configurations/create-ivf.py @@ -1,6 +1,6 @@ import json -n_lists = [256, 512, 1024, 1536, 2048] +n_lists = [256, 512, 1024, 1536] n_probes = [16, 20, 32, 64, 128, 256] diff --git a/experiments/configurations/redis-raft_ivf_flat-single-node.json b/experiments/configurations/redis-raft_ivf_flat-single-node.json index 60c9dd8b..ca05c042 100644 --- a/experiments/configurations/redis-raft_ivf_flat-single-node.json +++ b/experiments/configurations/redis-raft_ivf_flat-single-node.json @@ -622,161 +622,5 @@ "parallel": 16, "algorithm": "raft_ivf_flat" } - }, - { - "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_flat", - "raft_ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_flat" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_flat" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_flat" - } - }, - { - "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_flat", - "raft_ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_flat" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_flat" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_flat" - } - }, - { - "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_flat", - "raft_ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_flat" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_flat" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_flat" - } - }, - { - "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_flat", - "raft_ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_flat" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_flat" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_flat" - } - }, - { - "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_flat", - "raft_ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_flat" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_flat" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_flat" - } - }, - { - "name": "redis-raft_ivf_flat-n_lists-2048-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_flat", - "raft_ivf_flat_config": { - "N_LISTS": 2048, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_flat" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_flat" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_flat" - } } ] \ No newline at end of file diff --git a/experiments/configurations/redis-raft_ivf_pq-single-node.json b/experiments/configurations/redis-raft_ivf_pq-single-node.json index 03c9f7c8..099063db 100644 --- a/experiments/configurations/redis-raft_ivf_pq-single-node.json +++ b/experiments/configurations/redis-raft_ivf_pq-single-node.json @@ -622,161 +622,5 @@ "parallel": 16, "algorithm": "raft_ivf_pq" } - }, - { - "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_pq", - "raft_ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 16 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_pq" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_pq" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_pq" - } - }, - { - "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-20", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_pq", - "raft_ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 20 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_pq" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_pq" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_pq" - } - }, - { - "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_pq", - "raft_ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_pq" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_pq" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_pq" - } - }, - { - "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_pq", - "raft_ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_pq" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_pq" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_pq" - } - }, - { - "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_pq", - "raft_ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_pq" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_pq" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_pq" - } - }, - { - "name": "redis-raft_ivf_pq-n_lists-2048-n_probes-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "raft_ivf_pq", - "raft_ivf_pq_config": { - "N_LISTS": 2048, - "N_PROBES": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "algorithm": "raft_ivf_pq" - }, - { - "parallel": 100, - "algorithm": "raft_ivf_pq" - } - ], - "upload_params": { - "parallel": 16, - "algorithm": "raft_ivf_pq" - } } ] \ No newline at end of file From 5ed2110c865940a8a638912d5d89e034c5297a5f Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 9 May 2024 12:20:57 +0100 Subject: [PATCH 103/209] Added the ability to query GPU status on redis client (included wrapper for gpustat as well) --- engine/clients/redis/config.py | 3 +++ engine/clients/redis/upload.py | 27 +++++++++++++++++++++- monitoring/gpu_wrapper.py | 41 ++++++++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 monitoring/gpu_wrapper.py diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index c310ac40..a953deb0 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -5,6 +5,9 @@ REDIS_USER = os.getenv("REDIS_USER", None) REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) +GPU_STATS = bool(int(os.getenv("GPU_STATS", 0))) +GPU_STATS_ENDPOINT = os.getenv("GPU_STATS_ENDPOINT", None) + # 60 seconds timeout REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 60 * 1000)) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 2a58c3d2..7bc89f05 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -1,5 +1,7 @@ import time from typing import List, Optional +import requests +import json import numpy as np from redis import Redis, RedisCluster @@ -9,12 +11,15 @@ REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, + GPU_STATS, + GPU_STATS_ENDPOINT, ) from engine.clients.redis.helper import convert_to_redis_coords class RedisUploader(BaseUploader): client = None + host = None client_decode = None upload_params = {} @@ -24,6 +29,7 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.client = redis_constructor( host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) + cls.host = host cls.client_decode = redis_constructor( host=host, port=REDIS_PORT, @@ -107,8 +113,27 @@ def post_upload(cls, _distance): def get_memory_usage(cls): used_memory = cls.client_decode.info("memory")["used_memory"] index_info = {} + device_info = {} if cls.algorithm != "HNSW" and cls.algorithm != "FLAT": print(f"TODO: FIXME!! Avoiding calling ft.info for {cls.algorithm}...") else: index_info = cls.client_decode.ft().info() - return {"used_memory": used_memory, "index_info": index_info} + if GPU_STATS: + url = f"http://{cls.host}:5000/" + if GPU_STATS_ENDPOINT is not None: + url = GPU_STATS_ENDPOINT + try: + print(f"Quering GPU stats from endpoint {url}...") + # Send GET request to the server + response = requests.get(url) + device_info = json.loads(response.text) + print("Retrieved device info:", device_info) + except requests.exceptions.RequestException as e: + # Handle any exceptions that may occur + print("An error occurred while querying gpu stats:", e) + + return { + "used_memory": used_memory, + "index_info": index_info, + "device_info": device_info, + } diff --git a/monitoring/gpu_wrapper.py b/monitoring/gpu_wrapper.py new file mode 100644 index 00000000..347ac3b0 --- /dev/null +++ b/monitoring/gpu_wrapper.py @@ -0,0 +1,41 @@ +from http.server import BaseHTTPRequestHandler, HTTPServer +import subprocess + + +class SimpleHTTPRequestHandler(BaseHTTPRequestHandler): + def do_GET(self): + # Parse the query string + command = "gpustat --json --no-header" + + try: + # Execute the command + result = subprocess.run( + command, + shell=True, + check=True, + text=True, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE, + ) + # Send response status code + self.send_response(200) + # Send headers + self.send_header("Content-type", "text/plain") + self.end_headers() + # Write the output to the response + self.wfile.write(result.stdout.encode()) + except subprocess.CalledProcessError as e: + self.send_response(400) + self.end_headers() + self.wfile.write(e.stderr.encode()) + + +def run(server_class=HTTPServer, handler_class=SimpleHTTPRequestHandler, port=8000): + server_address = ("", port) + httpd = server_class(server_address, handler_class) + print(f"Server running on port {port}...") + httpd.serve_forever() + + +if __name__ == "__main__": + run() From 83210a2b01eed8000db9076fb0d8638af288edd6 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 16 May 2024 01:08:01 +0100 Subject: [PATCH 104/209] opensearch improvements --- engine/clients/opensearch/config.py | 38 +++++++++++++++++++++++--- engine/clients/opensearch/configure.py | 23 ++++------------ engine/clients/opensearch/search.py | 18 ++---------- engine/clients/opensearch/upload.py | 18 ++---------- 4 files changed, 43 insertions(+), 54 deletions(-) diff --git a/engine/clients/opensearch/config.py b/engine/clients/opensearch/config.py index 57001884..85dc8fea 100644 --- a/engine/clients/opensearch/config.py +++ b/engine/clients/opensearch/config.py @@ -1,4 +1,34 @@ -OPENSEARCH_PORT = 9200 -OPENSEARCH_INDEX = "bench" -OPENSEARCH_USER = "opensearch" -OPENSEARCH_PASSWORD = "passwd" +from opensearchpy import NotFoundError, OpenSearch +import os + + +OPENSEARCH_PORT = int(os.getenv("OPENSEARCH_PORT", 9200)) +OPENSEARCH_INDEX = os.getenv("OPENSEARCH_INDEX", "bench") +OPENSEARCH_USER = os.getenv("OPENSEARCH_USER", "opensearch") +OPENSEARCH_PASSWORD = os.getenv("OPENSEARCH_PASSWORD", "passwd") +OPENSEARCH_TIMEOUT = int(os.getenv("OPENSEARCH_TIMEOUT", 300)) +OPENSEARCH_INDEX_TIMEOUT = int(os.getenv("OPENSEARCH_INDEX_TIMEOUT", 300)) + + +def get_opensearch_client(host, connection_params): + init_params = { + **{ + "verify_certs": False, + "request_timeout": OPENSEARCH_TIMEOUT, + "retry_on_timeout": True, + }, + **connection_params, + } + if host.startswith("http"): + url = "" + else: + url = "http://" + url += f"{host}:{OPENSEARCH_PORT}" + + client = OpenSearch( + f"http://{host}:{OPENSEARCH_PORT}", + basic_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD), + **init_params, + ) + assert client.ping() + return client diff --git a/engine/clients/opensearch/configure.py b/engine/clients/opensearch/configure.py index bd550917..d4541e1b 100644 --- a/engine/clients/opensearch/configure.py +++ b/engine/clients/opensearch/configure.py @@ -6,9 +6,8 @@ from engine.base_client.distances import Distance from engine.clients.opensearch.config import ( OPENSEARCH_INDEX, - OPENSEARCH_PASSWORD, - OPENSEARCH_PORT, - OPENSEARCH_USER, + OPENSEARCH_INDEX_TIMEOUT, + get_opensearch_client, ) @@ -25,26 +24,14 @@ class OpenSearchConfigurator(BaseConfigurator): 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 = OpenSearch( - f"http://{host}:{OPENSEARCH_PORT}", - basic_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD), - **init_params, - ) + self.client = get_opensearch_client(host, connection_params) def clean(self): try: self.client.indices.delete( index=OPENSEARCH_INDEX, params={ - "timeout": 300, + "timeout": OPENSEARCH_INDEX_TIMEOUT, }, ) except NotFoundError: @@ -53,7 +40,7 @@ def clean(self): def recreate(self, dataset: Dataset, collection_params): if dataset.config.distance == Distance.DOT: raise IncompatibilityError - if dataset.config.vector_size > 1024: + if dataset.config.vector_size > 2048: raise IncompatibilityError self.client.indices.create( diff --git a/engine/clients/opensearch/search.py b/engine/clients/opensearch/search.py index 8f388380..1536bb41 100644 --- a/engine/clients/opensearch/search.py +++ b/engine/clients/opensearch/search.py @@ -7,9 +7,7 @@ from engine.base_client.search import BaseSearcher from engine.clients.opensearch.config import ( OPENSEARCH_INDEX, - OPENSEARCH_PASSWORD, - OPENSEARCH_PORT, - OPENSEARCH_USER, + get_opensearch_client, ) from engine.clients.opensearch.parser import OpenSearchConditionParser @@ -30,19 +28,7 @@ def get_mp_start_method(cls): @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: OpenSearch = OpenSearch( - f"http://{host}:{OPENSEARCH_PORT}", - basic_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD), - **init_params, - ) + cls.client = get_opensearch_client(host, connection_params) cls.search_params = search_params @classmethod diff --git a/engine/clients/opensearch/upload.py b/engine/clients/opensearch/upload.py index 46a7151d..d03652a5 100644 --- a/engine/clients/opensearch/upload.py +++ b/engine/clients/opensearch/upload.py @@ -7,9 +7,7 @@ from engine.base_client.upload import BaseUploader from engine.clients.opensearch.config import ( OPENSEARCH_INDEX, - OPENSEARCH_PASSWORD, - OPENSEARCH_PORT, - OPENSEARCH_USER, + get_opensearch_client, ) @@ -28,19 +26,7 @@ def get_mp_start_method(cls): @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 = OpenSearch( - f"http://{host}:{OPENSEARCH_PORT}", - basic_auth=(OPENSEARCH_USER, OPENSEARCH_PASSWORD), - **init_params, - ) + cls.client = get_opensearch_client(host, connection_params) cls.upload_params = upload_params @classmethod From b7a2c30c2c66764bdb6c68de434b2fca94f91e70 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 16 May 2024 01:28:11 +0100 Subject: [PATCH 105/209] Fixes per PR linter --- engine/clients/opensearch/config.py | 2 +- engine/clients/opensearch/search.py | 5 +---- engine/clients/opensearch/upload.py | 5 +---- 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/engine/clients/opensearch/config.py b/engine/clients/opensearch/config.py index 85dc8fea..85af5959 100644 --- a/engine/clients/opensearch/config.py +++ b/engine/clients/opensearch/config.py @@ -1,6 +1,6 @@ -from opensearchpy import NotFoundError, OpenSearch import os +from opensearchpy import OpenSearch OPENSEARCH_PORT = int(os.getenv("OPENSEARCH_PORT", 9200)) OPENSEARCH_INDEX = os.getenv("OPENSEARCH_INDEX", "bench") diff --git a/engine/clients/opensearch/search.py b/engine/clients/opensearch/search.py index 1536bb41..0a46c5b0 100644 --- a/engine/clients/opensearch/search.py +++ b/engine/clients/opensearch/search.py @@ -5,10 +5,7 @@ from opensearchpy import OpenSearch from engine.base_client.search import BaseSearcher -from engine.clients.opensearch.config import ( - OPENSEARCH_INDEX, - get_opensearch_client, -) +from engine.clients.opensearch.config import OPENSEARCH_INDEX, get_opensearch_client from engine.clients.opensearch.parser import OpenSearchConditionParser diff --git a/engine/clients/opensearch/upload.py b/engine/clients/opensearch/upload.py index d03652a5..590242cc 100644 --- a/engine/clients/opensearch/upload.py +++ b/engine/clients/opensearch/upload.py @@ -5,10 +5,7 @@ from opensearchpy import OpenSearch from engine.base_client.upload import BaseUploader -from engine.clients.opensearch.config import ( - OPENSEARCH_INDEX, - get_opensearch_client, -) +from engine.clients.opensearch.config import OPENSEARCH_INDEX, get_opensearch_client class ClosableOpenSearch(OpenSearch): From 26b5f8cdd61c05556bd94c718b725bdc0d83a539 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 28 May 2024 18:19:23 +0100 Subject: [PATCH 106/209] Added redis-intel-hnsw* config --- experiments/configurations/create-intel.py | 33 + .../redis-intel-hnsw-single-node.json | 2756 +++++++++++++++++ 2 files changed, 2789 insertions(+) create mode 100644 experiments/configurations/create-intel.py create mode 100644 experiments/configurations/redis-intel-hnsw-single-node.json diff --git a/experiments/configurations/create-intel.py b/experiments/configurations/create-intel.py new file mode 100644 index 00000000..f6357203 --- /dev/null +++ b/experiments/configurations/create-intel.py @@ -0,0 +1,33 @@ +import json + +ms = [16, 64, 256] +ef_constructs = [16, 512, 1024] +ef_runtimes = [16, 32, 64, 128, 256, 512, 1024, 2048] + +for algo in ["hnsw"]: + configs = [] + for m in ms: + for ef_construct in ef_constructs: + config = { + "name": f"redis-intel-{algo}-m-{m}-ef-{ef_construct}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": algo, + f"{algo}_config": {"M": m, "EF_CONSTRUCTION": ef_construct}, + }, + "search_params": [], + "upload_params": {"parallel": 128, "algorithm": algo}, + } + for client in [100, 200, 400, 800, 1600, 3200]: + for ef_runtime in ef_runtimes: + test_config = { + "parallel": client, + "search_params": {"ef": ef_runtime}, + } + config["search_params"].append(test_config) + configs.append(config) + fname = f"redis-intel-{algo}-single-node.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"created {len(configs)} configs for {fname}.") diff --git a/experiments/configurations/redis-intel-hnsw-single-node.json b/experiments/configurations/redis-intel-hnsw-single-node.json new file mode 100644 index 00000000..70319cb2 --- /dev/null +++ b/experiments/configurations/redis-intel-hnsw-single-node.json @@ -0,0 +1,2756 @@ +[ + { + "name": "redis-intel-hnsw-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 2048 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw" + } + }, + { + "name": "redis-intel-hnsw-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 2048 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw" + } + }, + { + "name": "redis-intel-hnsw-m-16-ef-1024", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 1024 + } + }, + "search_params": [ + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 2048 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw" + } + }, + { + "name": "redis-intel-hnsw-m-64-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 2048 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw" + } + }, + { + "name": "redis-intel-hnsw-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 2048 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw" + } + }, + { + "name": "redis-intel-hnsw-m-64-ef-1024", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 1024 + } + }, + "search_params": [ + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 2048 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw" + } + }, + { + "name": "redis-intel-hnsw-m-256-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "hnsw_config": { + "M": 256, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 2048 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw" + } + }, + { + "name": "redis-intel-hnsw-m-256-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "hnsw_config": { + "M": 256, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 2048 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw" + } + }, + { + "name": "redis-intel-hnsw-m-256-ef-1024", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "hnsw_config": { + "M": 256, + "EF_CONSTRUCTION": 1024 + } + }, + "search_params": [ + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 400, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 800, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 1600, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 3200, + "search_params": { + "ef": 2048 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw" + } + } +] \ No newline at end of file From ec516a0668240ed027accc467d58eaf3814ddcf5 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 7 Jun 2024 10:31:30 +0100 Subject: [PATCH 107/209] Retrieving cloud usage when possible from qdrant --- engine/clients/qdrant/config.py | 22 ++++++++++++++++++++++ engine/clients/qdrant/configure.py | 2 +- engine/clients/qdrant/search.py | 2 +- engine/clients/qdrant/upload.py | 27 +++++++++++++++++++++++++-- 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/engine/clients/qdrant/config.py b/engine/clients/qdrant/config.py index aa5afeeb..c48ff68a 100644 --- a/engine/clients/qdrant/config.py +++ b/engine/clients/qdrant/config.py @@ -1,5 +1,27 @@ import os +import requests + QDRANT_COLLECTION_NAME = os.getenv("QDRANT_COLLECTION_NAME", "benchmark") QDRANT_API_KEY = os.getenv("QDRANT_API_KEY", None) QDRANT_URL = os.getenv("QDRANT_URL", None) +QDRANT_ACCOUNT_ID = os.getenv("QDRANT_ACCOUNT_ID", None) +QDRANT_CLUSTER_ID = os.getenv("QDRANT_CLUSTER_ID", None) +QDRANT_AUTH_TOKEN = os.getenv("QDRANT_AUTH_TOKEN", None) + + +def get_qdrant_cloud_usage(account_id, cluster_id, token): + result = {} + url = f"https://cloud.qdrant.io/api/v1/accounts/{account_id}/clusters/{cluster_id}/metrics" + headers = {"authorization": f"Bearer {token}"} + + try: + response = requests.get(url, headers=headers) + # Raise an error for bad status codes + response.raise_for_status() + result = response.json() + except requests.exceptions.RequestException as e: + print(f"An error occurred: {e}") + result = {"error": str(e)} + + return result diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index f89ecf65..2db16f40 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -5,8 +5,8 @@ from engine.base_client.configure import BaseConfigurator from engine.base_client.distances import Distance from engine.clients.qdrant.config import ( - QDRANT_COLLECTION_NAME, QDRANT_API_KEY, + QDRANT_COLLECTION_NAME, QDRANT_URL, ) diff --git a/engine/clients/qdrant/search.py b/engine/clients/qdrant/search.py index f98fd3b3..6ff38e25 100644 --- a/engine/clients/qdrant/search.py +++ b/engine/clients/qdrant/search.py @@ -8,8 +8,8 @@ from engine.base_client.search import BaseSearcher from engine.clients.qdrant.config import ( - QDRANT_COLLECTION_NAME, QDRANT_API_KEY, + QDRANT_COLLECTION_NAME, QDRANT_URL, ) from engine.clients.qdrant.parser import QdrantConditionParser diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index c81d4fa4..c209f050 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -7,9 +7,13 @@ from engine.base_client.upload import BaseUploader from engine.clients.qdrant.config import ( - QDRANT_COLLECTION_NAME, + QDRANT_ACCOUNT_ID, QDRANT_API_KEY, + QDRANT_AUTH_TOKEN, + QDRANT_CLUSTER_ID, + QDRANT_COLLECTION_NAME, QDRANT_URL, + get_qdrant_cloud_usage, ) @@ -30,7 +34,7 @@ def init_client(cls, host, distance, connection_params, upload_params): url=QDRANT_URL, api_key=QDRANT_API_KEY, prefer_grpc=True, - **connection_params + **connection_params, ) cls.upload_params = upload_params @@ -81,3 +85,22 @@ def wait_collection_green(cls): def delete_client(cls): if cls.client is not None: del cls.client + + def get_memory_usage(cls): + collection_info = cls.client.collection_info(QDRANT_COLLECTION_NAME) + used_memory = {} + # Extract memory usage information + if ( + QDRANT_ACCOUNT_ID is not None + and QDRANT_CLUSTER_ID is not None + and QDRANT_AUTH_TOKEN is not None + ): + print(f"Tring to fetch Qdrant cloud usage from Cluster {QDRANT_CLUSTER_ID}") + used_memory = get_qdrant_cloud_usage( + QDRANT_ACCOUNT_ID, QDRANT_CLUSTER_ID, QDRANT_AUTH_TOKEN + ) + + return { + "used_memory": used_memory, + "collection_info": collection_info, + } From f9280951f4a4631ab604f3764a728e71beb0e8a0 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 7 Jun 2024 12:40:10 +0100 Subject: [PATCH 108/209] Fixed qdrant get_collection usage() --- engine/clients/qdrant/upload.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index c209f050..d33fdea9 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -87,7 +87,7 @@ def delete_client(cls): del cls.client def get_memory_usage(cls): - collection_info = cls.client.collection_info(QDRANT_COLLECTION_NAME) + collection_info = cls.client.get_collection(QDRANT_COLLECTION_NAME) used_memory = {} # Extract memory usage information if ( From bce646ff112db25618163971f2f9ccb785021c06 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 7 Jun 2024 14:26:02 +0100 Subject: [PATCH 109/209] Fixed qdrant get_collection usage() --- engine/clients/qdrant/upload.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index d33fdea9..3a874551 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -1,6 +1,7 @@ import os import time from typing import List, Optional +import json from qdrant_client import QdrantClient from qdrant_client.http.models import Batch, CollectionStatus, OptimizersConfigDiff @@ -87,7 +88,9 @@ def delete_client(cls): del cls.client def get_memory_usage(cls): - collection_info = cls.client.get_collection(QDRANT_COLLECTION_NAME) + collection_info = json.loads( + str(cls.client.get_collection(QDRANT_COLLECTION_NAME)) + ) used_memory = {} # Extract memory usage information if ( From 4d5ddfbea8cba4cc2611af0af930f4176b971fbd Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 7 Jun 2024 15:12:07 +0100 Subject: [PATCH 110/209] Fixed qdrant get_collection info() --- engine/clients/qdrant/config.py | 17 +++++++++++++++++ engine/clients/qdrant/upload.py | 7 ++++--- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/engine/clients/qdrant/config.py b/engine/clients/qdrant/config.py index c48ff68a..01fc0466 100644 --- a/engine/clients/qdrant/config.py +++ b/engine/clients/qdrant/config.py @@ -10,6 +10,23 @@ QDRANT_AUTH_TOKEN = os.getenv("QDRANT_AUTH_TOKEN", None) +def get_collection_info(endpoint, collection, api_key): + result = {} + url = f"{endpoint}/collections/{collection}" + headers = {"api-key": f"{api_key}"} + + try: + response = requests.get(url, headers=headers) + # Raise an error for bad status codes + response.raise_for_status() + result = response.json() + except requests.exceptions.RequestException as e: + print(f"An error occurred: {e}") + result = {"error": str(e)} + + return result + + def get_qdrant_cloud_usage(account_id, cluster_id, token): result = {} url = f"https://cloud.qdrant.io/api/v1/accounts/{account_id}/clusters/{cluster_id}/metrics" diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index 3a874551..b20df2b0 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -1,7 +1,7 @@ import os import time from typing import List, Optional -import json +import json from qdrant_client import QdrantClient from qdrant_client.http.models import Batch, CollectionStatus, OptimizersConfigDiff @@ -15,6 +15,7 @@ QDRANT_COLLECTION_NAME, QDRANT_URL, get_qdrant_cloud_usage, + get_collection_info, ) @@ -88,8 +89,8 @@ def delete_client(cls): del cls.client def get_memory_usage(cls): - collection_info = json.loads( - str(cls.client.get_collection(QDRANT_COLLECTION_NAME)) + collection_info = get_collection_info( + QDRANT_URL, QDRANT_COLLECTION_NAME, QDRANT_API_KEY ) used_memory = {} # Extract memory usage information From daac642f70e226591b0b57632c95f757caa8d1d8 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jun 2024 13:19:09 +0100 Subject: [PATCH 111/209] Added timeout parameter to collection_params. Included all combinations for m=[16,32,64] and ef=[128,256,512] --- .../configurations/qdrant-single-node.json | 54 +++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/experiments/configurations/qdrant-single-node.json b/experiments/configurations/qdrant-single-node.json index b365ef58..f4e1ca47 100644 --- a/experiments/configurations/qdrant-single-node.json +++ b/experiments/configurations/qdrant-single-node.json @@ -4,6 +4,7 @@ "engine": "qdrant", "connection_params": { "timeout": 300 }, "collection_params": { + "timeout": 300, "optimizers_config": { "memmap_threshold": 25000000 } }, "search_params": [ @@ -16,6 +17,7 @@ "engine": "qdrant", "connection_params": { "timeout": 300 }, "collection_params": { + "timeout": 300, "hnsw_config": { "m": 32, "ef_construct": 256 @@ -50,6 +52,7 @@ "engine": "qdrant", "connection_params": { "timeout": 30 }, "collection_params": { + "timeout": 300, "optimizers_config": { "memmap_threshold": 10000000 } }, "search_params": [ @@ -64,6 +67,7 @@ "engine": "qdrant", "connection_params": { "timeout": 300 }, "collection_params": { + "timeout": 300, "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 16, "ef_construct": 128 } }, @@ -73,11 +77,42 @@ ], "upload_params": { "parallel": 16 } }, + { + "name": "qdrant-m-16-ef-256", + "engine": "qdrant", + "connection_params": { "timeout": 300 }, + "collection_params": { + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, + "hnsw_config": { "m": 16, "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 } } + ], + "upload_params": { "parallel": 16 } + }, + { + "name": "qdrant-m-16-ef-512", + "engine": "qdrant", + "connection_params": { "timeout": 300 }, + "collection_params": { + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, + "hnsw_config": { "m": 16, "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 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "qdrant-m-32-ef-128", "engine": "qdrant", "connection_params": { "timeout": 300 }, "collection_params": { + "timeout": 300, "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 32, "ef_construct": 128 } }, @@ -92,6 +127,7 @@ "engine": "qdrant", "connection_params": { "timeout": 300 }, "collection_params": { + "timeout": 300, "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 32, "ef_construct": 256 } }, @@ -106,6 +142,7 @@ "engine": "qdrant", "connection_params": { "timeout": 300 }, "collection_params": { + "timeout": 300, "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 32, "ef_construct": 512 } }, @@ -115,11 +152,27 @@ ], "upload_params": { "parallel": 16 } }, + { + "name": "qdrant-m-64-ef-128", + "engine": "qdrant", + "connection_params": { "timeout": 300 }, + "collection_params": { + "timeout": 300, + "optimizers_config": { "memmap_threshold": 25000000 }, + "hnsw_config": { "m": 64, "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 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "qdrant-m-64-ef-256", "engine": "qdrant", "connection_params": { "timeout": 300 }, "collection_params": { + "timeout": 300, "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 64, "ef_construct": 256 } }, @@ -134,6 +187,7 @@ "engine": "qdrant", "connection_params": { "timeout": 300 }, "collection_params": { + "timeout": 300, "optimizers_config": { "memmap_threshold": 25000000 }, "hnsw_config": { "m": 64, "ef_construct": 512 } }, From 562bf891e75cfd2f58ef8c771c5ae09d42f2209c Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 11 Jun 2024 18:38:59 +0100 Subject: [PATCH 112/209] Included all combinations for redis m=[16,32,64] and ef=[128,256,512] --- .../configurations/redis-single-node.json | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/experiments/configurations/redis-single-node.json b/experiments/configurations/redis-single-node.json index b42593ec..7a57247e 100644 --- a/experiments/configurations/redis-single-node.json +++ b/experiments/configurations/redis-single-node.json @@ -37,6 +37,19 @@ ], "upload_params": { "parallel": 16 } }, + { + "name": "redis-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "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 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "redis-m-32-ef-128", "engine": "redis", @@ -76,6 +89,19 @@ ], "upload_params": { "parallel": 16 } }, + { + "name": "redis-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 64, "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 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "redis-m-64-ef-256", "engine": "redis", From 4fe7c0082ec8a724732744b5b50011430058ceec Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jun 2024 14:25:29 +0100 Subject: [PATCH 113/209] Added EF-64 variation for Redis --- .../configurations/redis-single-node.json | 31 +++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/experiments/configurations/redis-single-node.json b/experiments/configurations/redis-single-node.json index 7a57247e..ba1ad884 100644 --- a/experiments/configurations/redis-single-node.json +++ b/experiments/configurations/redis-single-node.json @@ -1,15 +1,16 @@ [ { - "name": "redis-default", + "name": "redis-m-16-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { + "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 64 } }, "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 } } ], - "upload_params": { "parallel": 16, "batch_size": 1024 } + "upload_params": { "parallel": 16 } }, { "name": "redis-m-16-ef-128", @@ -50,6 +51,19 @@ ], "upload_params": { "parallel": 16 } }, + { + "name": "redis-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 64 } + }, + "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 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "redis-m-32-ef-128", "engine": "redis", @@ -89,6 +103,19 @@ ], "upload_params": { "parallel": 16 } }, + { + "name": "redis-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 64 } + }, + "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 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "redis-m-64-ef-128", "engine": "redis", From 56021e8e94fe6afd2ca2b794c6222f4f82fd4158 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jun 2024 14:31:37 +0100 Subject: [PATCH 114/209] Enable optimization threads config on qdrant --- engine/clients/qdrant/config.py | 1 + engine/clients/qdrant/upload.py | 6 +++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/engine/clients/qdrant/config.py b/engine/clients/qdrant/config.py index 01fc0466..a0cf53c3 100644 --- a/engine/clients/qdrant/config.py +++ b/engine/clients/qdrant/config.py @@ -8,6 +8,7 @@ QDRANT_ACCOUNT_ID = os.getenv("QDRANT_ACCOUNT_ID", None) QDRANT_CLUSTER_ID = os.getenv("QDRANT_CLUSTER_ID", None) QDRANT_AUTH_TOKEN = os.getenv("QDRANT_AUTH_TOKEN", None) +QDRANT_MAX_OPTIMIZATION_THREADS = os.getenv("QDRANT_MAX_OPTIMIZATION_THREADS", None) def get_collection_info(endpoint, collection, api_key): diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index b20df2b0..8dca606e 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -14,6 +14,7 @@ QDRANT_CLUSTER_ID, QDRANT_COLLECTION_NAME, QDRANT_URL, + QDRANT_MAX_OPTIMIZATION_THREADS, get_qdrant_cloud_usage, get_collection_info, ) @@ -56,11 +57,14 @@ def upload_batch( @classmethod def post_upload(cls, _distance): + max_optimization_threads = QDRANT_MAX_OPTIMIZATION_THREADS + if max_optimization_threads is not None: + max_optimization_threads = int(max_optimization_threads) cls.client.update_collection( collection_name=QDRANT_COLLECTION_NAME, optimizer_config=OptimizersConfigDiff( # indexing_threshold=10_000, - max_optimization_threads=1, + max_optimization_threads=max_optimization_threads, ), ) From f3d54f71d3cddafffd79e4f20869766405773c24 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 12 Jun 2024 14:38:18 +0100 Subject: [PATCH 115/209] included retry wrapper on recreate_collection --- engine/clients/qdrant/config.py | 20 ++++++++++++++++++++ engine/clients/qdrant/configure.py | 4 +++- engine/clients/qdrant/upload.py | 6 +++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/engine/clients/qdrant/config.py b/engine/clients/qdrant/config.py index a0cf53c3..b879b13a 100644 --- a/engine/clients/qdrant/config.py +++ b/engine/clients/qdrant/config.py @@ -1,4 +1,6 @@ import os +import random +import time import requests @@ -43,3 +45,21 @@ def get_qdrant_cloud_usage(account_id, cluster_id, token): result = {"error": str(e)} return result + + +def retry_with_exponential_backoff( + func, *args, max_retries=10, base_delay=1, max_delay=90, **kwargs +): + retries = 0 + while retries < max_retries: + try: + return func(*args, **kwargs) + except Exception as e: + delay = min(base_delay * 2**retries + random.uniform(0, 1), max_delay) + time.sleep(delay) + retries += 1 + print(f"received the following exception on try #{retries}: {e.__str__}") + if retries == max_retries: + raise e + else: + print("retrying...") diff --git a/engine/clients/qdrant/configure.py b/engine/clients/qdrant/configure.py index 2db16f40..6a0b8161 100644 --- a/engine/clients/qdrant/configure.py +++ b/engine/clients/qdrant/configure.py @@ -8,6 +8,7 @@ QDRANT_API_KEY, QDRANT_COLLECTION_NAME, QDRANT_URL, + retry_with_exponential_backoff, ) @@ -40,7 +41,8 @@ def clean(self): res = self.client.delete_collection(collection_name=QDRANT_COLLECTION_NAME) def recreate(self, dataset: Dataset, collection_params): - self.client.recreate_collection( + retry_with_exponential_backoff( + self.client.recreate_collection, collection_name=QDRANT_COLLECTION_NAME, vectors_config=rest.VectorParams( size=dataset.config.vector_size, diff --git a/engine/clients/qdrant/upload.py b/engine/clients/qdrant/upload.py index 8dca606e..e280f45e 100644 --- a/engine/clients/qdrant/upload.py +++ b/engine/clients/qdrant/upload.py @@ -1,7 +1,7 @@ +import json import os import time from typing import List, Optional -import json from qdrant_client import QdrantClient from qdrant_client.http.models import Batch, CollectionStatus, OptimizersConfigDiff @@ -13,10 +13,10 @@ QDRANT_AUTH_TOKEN, QDRANT_CLUSTER_ID, QDRANT_COLLECTION_NAME, - QDRANT_URL, QDRANT_MAX_OPTIMIZATION_THREADS, - get_qdrant_cloud_usage, + QDRANT_URL, get_collection_info, + get_qdrant_cloud_usage, ) From bac6112643f9f329c12e1dfb73a87f58e6adf82d Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 14 Jun 2024 01:28:15 +0100 Subject: [PATCH 116/209] Included 200 and 400 client variations on redis --- .../configurations/redis-single-node.json | 72 +++++++++---------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/experiments/configurations/redis-single-node.json b/experiments/configurations/redis-single-node.json index ba1ad884..2e23438a 100644 --- a/experiments/configurations/redis-single-node.json +++ b/experiments/configurations/redis-single-node.json @@ -7,10 +7,10 @@ "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 64 } }, "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-16-ef-128", @@ -20,10 +20,10 @@ "hnsw_config": { "M": 16, "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-16-ef-256", @@ -33,10 +33,10 @@ "hnsw_config": { "M": 16, "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-16-ef-512", @@ -46,10 +46,10 @@ "hnsw_config": { "M": 16, "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-32-ef-64", @@ -59,10 +59,10 @@ "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 64 } }, "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-32-ef-128", @@ -72,10 +72,10 @@ "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-32-ef-256", @@ -85,10 +85,10 @@ "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-32-ef-512", @@ -98,10 +98,10 @@ "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-64-ef-64", @@ -111,10 +111,10 @@ "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 64 } }, "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-64-ef-128", @@ -124,10 +124,10 @@ "hnsw_config": { "M": 64, "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-64-ef-256", @@ -137,10 +137,10 @@ "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } }, { "name": "redis-m-64-ef-512", @@ -150,9 +150,9 @@ "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": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, + { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } ], - "upload_params": { "parallel": 16 } + "upload_params": { "parallel": 32 } } ] From 47c9d665b1457ac41b2254fc4e9d554838f5795d Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 19 Jun 2024 01:13:26 +0100 Subject: [PATCH 117/209] Included m=4 and m=10 configs for redis --- .../create-redis-same-azureai.py | 29 ++ .../redis-vs-azure-ai-search.json | 314 ++++++++++++++++++ 2 files changed, 343 insertions(+) create mode 100644 experiments/configurations/create-redis-same-azureai.py create mode 100644 experiments/configurations/redis-vs-azure-ai-search.json diff --git a/experiments/configurations/create-redis-same-azureai.py b/experiments/configurations/create-redis-same-azureai.py new file mode 100644 index 00000000..9e64079b --- /dev/null +++ b/experiments/configurations/create-redis-same-azureai.py @@ -0,0 +1,29 @@ +import json + +experiments = [] + +for m in [4, 10]: + for efConstruction in [100, 500, 1000]: + search_params = [] + config = { + "name": f"redis-m-{m}-ef-{efConstruction}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": {"M": m, "EF_CONSTRUCTION": efConstruction} + }, + "search_params": [], + "upload_params": {"parallel": 16}, + } + + for efSearch in [100, 500, 1000]: + single_client_config = {"parallel": 1, "config": {"EF": efSearch}} + multi_client_config = {"parallel": 50, "config": {"EF": efSearch}} + search_params.append(single_client_config) + search_params.append(multi_client_config) + config["search_params"] = search_params + + experiments.append(config) + +with open("redis-vs-azure-ai-search.json", "w") as fd: + json.dump(experiments, fd) diff --git a/experiments/configurations/redis-vs-azure-ai-search.json b/experiments/configurations/redis-vs-azure-ai-search.json new file mode 100644 index 00000000..edc4cf8b --- /dev/null +++ b/experiments/configurations/redis-vs-azure-ai-search.json @@ -0,0 +1,314 @@ +[ + { + "name": "redis-m-4-ef-100", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 100 + } + }, + "search_params": [ + { + "parallel": 1, + "config": { + "EF": 100 + } + }, + { + "parallel": 50, + "config": { + "EF": 100 + } + }, + { + "parallel": 1, + "config": { + "EF": 500 + } + }, + { + "parallel": 50, + "config": { + "EF": 500 + } + }, + { + "parallel": 1, + "config": { + "EF": 1000 + } + }, + { + "parallel": 50, + "config": { + "EF": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, + { + "name": "redis-m-4-ef-500", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 500 + } + }, + "search_params": [ + { + "parallel": 1, + "config": { + "EF": 100 + } + }, + { + "parallel": 50, + "config": { + "EF": 100 + } + }, + { + "parallel": 1, + "config": { + "EF": 500 + } + }, + { + "parallel": 50, + "config": { + "EF": 500 + } + }, + { + "parallel": 1, + "config": { + "EF": 1000 + } + }, + { + "parallel": 50, + "config": { + "EF": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, + { + "name": "redis-m-4-ef-1000", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 1000 + } + }, + "search_params": [ + { + "parallel": 1, + "config": { + "EF": 100 + } + }, + { + "parallel": 50, + "config": { + "EF": 100 + } + }, + { + "parallel": 1, + "config": { + "EF": 500 + } + }, + { + "parallel": 50, + "config": { + "EF": 500 + } + }, + { + "parallel": 1, + "config": { + "EF": 1000 + } + }, + { + "parallel": 50, + "config": { + "EF": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, + { + "name": "redis-m-10-ef-100", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 10, + "EF_CONSTRUCTION": 100 + } + }, + "search_params": [ + { + "parallel": 1, + "config": { + "EF": 100 + } + }, + { + "parallel": 50, + "config": { + "EF": 100 + } + }, + { + "parallel": 1, + "config": { + "EF": 500 + } + }, + { + "parallel": 50, + "config": { + "EF": 500 + } + }, + { + "parallel": 1, + "config": { + "EF": 1000 + } + }, + { + "parallel": 50, + "config": { + "EF": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, + { + "name": "redis-m-10-ef-500", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 10, + "EF_CONSTRUCTION": 500 + } + }, + "search_params": [ + { + "parallel": 1, + "config": { + "EF": 100 + } + }, + { + "parallel": 50, + "config": { + "EF": 100 + } + }, + { + "parallel": 1, + "config": { + "EF": 500 + } + }, + { + "parallel": 50, + "config": { + "EF": 500 + } + }, + { + "parallel": 1, + "config": { + "EF": 1000 + } + }, + { + "parallel": 50, + "config": { + "EF": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, + { + "name": "redis-m-10-ef-1000", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 10, + "EF_CONSTRUCTION": 1000 + } + }, + "search_params": [ + { + "parallel": 1, + "config": { + "EF": 100 + } + }, + { + "parallel": 50, + "config": { + "EF": 100 + } + }, + { + "parallel": 1, + "config": { + "EF": 500 + } + }, + { + "parallel": 50, + "config": { + "EF": 500 + } + }, + { + "parallel": 1, + "config": { + "EF": 1000 + } + }, + { + "parallel": 50, + "config": { + "EF": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + } +] \ No newline at end of file From 8371d268af5cfd02ff5edd0d180494ec3ff50eec Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 19 Jun 2024 01:17:17 +0100 Subject: [PATCH 118/209] Fixed search params setting on redis --- experiments/configurations/create-redis-same-azureai.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/experiments/configurations/create-redis-same-azureai.py b/experiments/configurations/create-redis-same-azureai.py index 9e64079b..0290f598 100644 --- a/experiments/configurations/create-redis-same-azureai.py +++ b/experiments/configurations/create-redis-same-azureai.py @@ -17,8 +17,8 @@ } for efSearch in [100, 500, 1000]: - single_client_config = {"parallel": 1, "config": {"EF": efSearch}} - multi_client_config = {"parallel": 50, "config": {"EF": efSearch}} + single_client_config = {"parallel": 1, "search_params": {"ef": efSearch}} + multi_client_config = {"parallel": 50, "search_params": {"ef": efSearch}} search_params.append(single_client_config) search_params.append(multi_client_config) config["search_params"] = search_params From b137ba0e40ecb52b8b5902faa7f8301e4c1519fa Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 19 Jun 2024 01:18:27 +0100 Subject: [PATCH 119/209] Fixed search params setting on redis --- .../redis-vs-azure-ai-search.json | 144 +++++++++--------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/experiments/configurations/redis-vs-azure-ai-search.json b/experiments/configurations/redis-vs-azure-ai-search.json index edc4cf8b..3e2dedfb 100644 --- a/experiments/configurations/redis-vs-azure-ai-search.json +++ b/experiments/configurations/redis-vs-azure-ai-search.json @@ -12,38 +12,38 @@ "search_params": [ { "parallel": 1, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 50, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 1, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 50, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 1, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } }, { "parallel": 50, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } } ], @@ -64,38 +64,38 @@ "search_params": [ { "parallel": 1, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 50, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 1, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 50, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 1, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } }, { "parallel": 50, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } } ], @@ -116,38 +116,38 @@ "search_params": [ { "parallel": 1, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 50, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 1, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 50, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 1, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } }, { "parallel": 50, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } } ], @@ -168,38 +168,38 @@ "search_params": [ { "parallel": 1, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 50, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 1, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 50, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 1, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } }, { "parallel": 50, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } } ], @@ -220,38 +220,38 @@ "search_params": [ { "parallel": 1, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 50, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 1, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 50, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 1, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } }, { "parallel": 50, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } } ], @@ -272,38 +272,38 @@ "search_params": [ { "parallel": 1, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 50, - "config": { - "EF": 100 + "search_params": { + "ef": 100 } }, { "parallel": 1, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 50, - "config": { - "EF": 500 + "search_params": { + "ef": 500 } }, { "parallel": 1, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } }, { "parallel": 50, - "config": { - "EF": 1000 + "search_params": { + "ef": 1000 } } ], From d025ab94d39b49a4b1ab1c9583b5a949aa07a8d9 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 19 Jun 2024 21:53:30 +0100 Subject: [PATCH 120/209] Added m-64-ef-* changes --- .../redis-vs-azure-ai-search.json | 312 ++++++++++++++++++ 1 file changed, 312 insertions(+) diff --git a/experiments/configurations/redis-vs-azure-ai-search.json b/experiments/configurations/redis-vs-azure-ai-search.json index 3e2dedfb..d750c1f4 100644 --- a/experiments/configurations/redis-vs-azure-ai-search.json +++ b/experiments/configurations/redis-vs-azure-ai-search.json @@ -51,6 +51,58 @@ "parallel": 16 } }, + { + "name": "redis-m-4-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1000 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, { "name": "redis-m-4-ef-500", "engine": "redis", @@ -207,6 +259,58 @@ "parallel": 16 } }, + { + "name": "redis-m-10-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 10, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1000 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, { "name": "redis-m-10-ef-500", "engine": "redis", @@ -310,5 +414,213 @@ "upload_params": { "parallel": 16 } + }, + { + "name": "redis-m-64-ef-100", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 100 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1000 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, + { + "name": "redis-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1000 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, + { + "name": "redis-m-64-ef-500", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 500 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1000 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } + }, + { + "name": "redis-m-64-ef-1000", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 1000 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 100 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 500 + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1000 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1000 + } + } + ], + "upload_params": { + "parallel": 16 + } } ] \ No newline at end of file From 570d7c93ab20259c37a1f35d59f7b109b25a1c53 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 19 Jun 2024 21:56:26 +0100 Subject: [PATCH 121/209] Added m-64-ef-* changes --- .../redis-vs-azure-ai-search.json | 36 ++++++++++++------- 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/experiments/configurations/redis-vs-azure-ai-search.json b/experiments/configurations/redis-vs-azure-ai-search.json index d750c1f4..58f73d0b 100644 --- a/experiments/configurations/redis-vs-azure-ai-search.json +++ b/experiments/configurations/redis-vs-azure-ai-search.json @@ -48,7 +48,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -100,7 +101,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -152,7 +154,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -204,7 +207,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -256,7 +260,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -308,7 +313,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -360,7 +366,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -412,7 +419,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -464,7 +472,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -516,7 +525,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -568,7 +578,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } }, { @@ -620,7 +631,8 @@ } ], "upload_params": { - "parallel": 16 + "parallel": 16, + "batch_size": 1024 } } ] \ No newline at end of file From c0ecb6fb9efc3d0571cd74de54b681635a9145c6 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 19 Jun 2024 21:59:21 +0100 Subject: [PATCH 122/209] Added m-64-ef-* changes --- .../redis-vs-azure-ai-search.json | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/experiments/configurations/redis-vs-azure-ai-search.json b/experiments/configurations/redis-vs-azure-ai-search.json index 58f73d0b..ad734af2 100644 --- a/experiments/configurations/redis-vs-azure-ai-search.json +++ b/experiments/configurations/redis-vs-azure-ai-search.json @@ -49,7 +49,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -102,7 +102,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -155,7 +155,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -208,7 +208,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -261,7 +261,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -314,7 +314,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -367,7 +367,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -420,7 +420,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -473,7 +473,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -526,7 +526,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -579,7 +579,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } }, { @@ -632,7 +632,7 @@ ], "upload_params": { "parallel": 16, - "batch_size": 1024 + "batch_size": 10 } } ] \ No newline at end of file From 3d45ecbba11d019abfe32a7b54c9f8e5317d1a96 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 19 Jun 2024 22:17:44 +0100 Subject: [PATCH 123/209] Added m-64-ef-* changes --- .../redis-vs-azure-ai-search.json | 300 +++++++++++++++++- 1 file changed, 294 insertions(+), 6 deletions(-) diff --git a/experiments/configurations/redis-vs-azure-ai-search.json b/experiments/configurations/redis-vs-azure-ai-search.json index ad734af2..21e79e8a 100644 --- a/experiments/configurations/redis-vs-azure-ai-search.json +++ b/experiments/configurations/redis-vs-azure-ai-search.json @@ -22,6 +22,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -34,6 +46,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -53,13 +77,13 @@ } }, { - "name": "redis-m-4-ef-256", + "name": "redis-m-4-ef-250", "engine": "redis", "connection_params": {}, "collection_params": { "hnsw_config": { "M": 4, - "EF_CONSTRUCTION": 256 + "EF_CONSTRUCTION": 250 } }, "search_params": [ @@ -75,6 +99,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -87,6 +123,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -128,6 +176,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -140,6 +200,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -181,6 +253,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -193,6 +277,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -234,6 +330,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -246,6 +354,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -265,13 +385,13 @@ } }, { - "name": "redis-m-10-ef-256", + "name": "redis-m-10-ef-250", "engine": "redis", "connection_params": {}, "collection_params": { "hnsw_config": { "M": 10, - "EF_CONSTRUCTION": 256 + "EF_CONSTRUCTION": 250 } }, "search_params": [ @@ -287,6 +407,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -299,6 +431,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -340,6 +484,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -352,6 +508,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -393,6 +561,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -405,6 +585,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -446,6 +638,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -458,6 +662,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -477,13 +693,13 @@ } }, { - "name": "redis-m-64-ef-256", + "name": "redis-m-64-ef-250", "engine": "redis", "connection_params": {}, "collection_params": { "hnsw_config": { "M": 64, - "EF_CONSTRUCTION": 256 + "EF_CONSTRUCTION": 250 } }, "search_params": [ @@ -499,6 +715,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -511,6 +739,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -552,6 +792,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -564,6 +816,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { @@ -605,6 +869,18 @@ "ef": 100 } }, + { + "parallel": 1, + "search_params": { + "ef": 250 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 250 + } + }, { "parallel": 1, "search_params": { @@ -617,6 +893,18 @@ "ef": 500 } }, + { + "parallel": 1, + "search_params": { + "ef": 750 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 750 + } + }, { "parallel": 1, "search_params": { From 2e39d77bff347eaeeeb1d5ec244bf4cd567866bc Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 19 Jun 2024 22:39:16 +0100 Subject: [PATCH 124/209] Added m-16-ef-* changes --- .../redis-vs-azure-ai-search.json | 927 +----------------- 1 file changed, 1 insertion(+), 926 deletions(-) diff --git a/experiments/configurations/redis-vs-azure-ai-search.json b/experiments/configurations/redis-vs-azure-ai-search.json index 21e79e8a..a55e3d35 100644 --- a/experiments/configurations/redis-vs-azure-ai-search.json +++ b/experiments/configurations/redis-vs-azure-ai-search.json @@ -1,926 +1 @@ -[ - { - "name": "redis-m-4-ef-100", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 4, - "EF_CONSTRUCTION": 100 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-4-ef-250", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 4, - "EF_CONSTRUCTION": 250 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-4-ef-500", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 4, - "EF_CONSTRUCTION": 500 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-4-ef-1000", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 4, - "EF_CONSTRUCTION": 1000 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-10-ef-100", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 10, - "EF_CONSTRUCTION": 100 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-10-ef-250", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 10, - "EF_CONSTRUCTION": 250 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-10-ef-500", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 10, - "EF_CONSTRUCTION": 500 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-10-ef-1000", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 10, - "EF_CONSTRUCTION": 1000 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-64-ef-100", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 100 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-64-ef-250", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 250 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-64-ef-500", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 500 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - }, - { - "name": "redis-m-64-ef-1000", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 1000 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 100 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 250 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 500 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 750 - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1000 - } - }, - { - "parallel": 50, - "search_params": { - "ef": 1000 - } - } - ], - "upload_params": { - "parallel": 16, - "batch_size": 10 - } - } -] \ No newline at end of file +[{"name": "redis-m-16-ef-100", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 100}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-16-ef-500", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 500}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-16-ef-1000", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 1000}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}] \ No newline at end of file From 6ef1e947d66e29c88b1987d7b0dc5d2b2eba2cbc Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 19 Jun 2024 22:39:31 +0100 Subject: [PATCH 125/209] Added m-16-ef-* changes --- experiments/configurations/redis-vs-azure-ai-search.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/experiments/configurations/redis-vs-azure-ai-search.json b/experiments/configurations/redis-vs-azure-ai-search.json index a55e3d35..94f6b213 100644 --- a/experiments/configurations/redis-vs-azure-ai-search.json +++ b/experiments/configurations/redis-vs-azure-ai-search.json @@ -1 +1 @@ -[{"name": "redis-m-16-ef-100", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 100}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-16-ef-500", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 500}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-16-ef-1000", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 1000}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}] \ No newline at end of file +[{"name": "redis-m-16-ef-100", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 100}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-16-ef-500", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 500}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-16-ef-1000", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 16, "EF_CONSTRUCTION": 1000}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-32-ef-100", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 32, "EF_CONSTRUCTION": 100}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-32-ef-500", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 32, "EF_CONSTRUCTION": 500}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}, {"name": "redis-m-32-ef-1000", "engine": "redis", "connection_params": {}, "collection_params": {"hnsw_config": {"M": 32, "EF_CONSTRUCTION": 1000}}, "search_params": [{"parallel": 1, "search_params": {"ef": 100}}, {"parallel": 50, "search_params": {"ef": 100}}, {"parallel": 1, "search_params": {"ef": 250}}, {"parallel": 50, "search_params": {"ef": 250}}, {"parallel": 1, "search_params": {"ef": 500}}, {"parallel": 50, "search_params": {"ef": 500}}, {"parallel": 1, "search_params": {"ef": 750}}, {"parallel": 50, "search_params": {"ef": 750}}, {"parallel": 1, "search_params": {"ef": 1000}}, {"parallel": 50, "search_params": {"ef": 1000}}], "upload_params": {"parallel": 16}}] \ No newline at end of file From 1dd987bdfab974eb049071b79fe857657b081079 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 8 Jul 2024 17:07:40 +0100 Subject: [PATCH 126/209] Added support for BFLOAT16 and FLOAT16 in Redis --- engine/clients/redis/configure.py | 3 +- engine/clients/redis/search.py | 12 +- engine/clients/redis/upload.py | 9 +- .../create-redis-vector-types.py | 37 + .../configurations/redis-vector-types.json | 2000 +++++++++++++++++ poetry.lock | 177 +- pyproject.toml | 3 +- 7 files changed, 2119 insertions(+), 122 deletions(-) create mode 100644 experiments/configurations/create-redis-vector-types.py create mode 100644 experiments/configurations/redis-vector-types.json diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index aeb03dbc..31b557cb 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -91,6 +91,7 @@ def recreate(self, dataset: Dataset, collection_params): algorithm_config = {} # by default we use hnsw algo = collection_params.get("algorithm", "hnsw") + data_type = collection_params.get("data_type", "float32") algorithm_config = collection_params.get(f"{algo}_config", {}) print(f"Using algorithm {algo} with config {algorithm_config}") index_fields = [ @@ -98,7 +99,7 @@ def recreate(self, dataset: Dataset, collection_params): name="vector", algorithm=algo, attributes={ - "TYPE": "FLOAT32", + "TYPE": data_type, "DIM": dataset.config.vector_size, "DISTANCE_METRIC": self.DISTANCE_MAPPING[dataset.config.distance], **algorithm_config, diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 9629a078..c5820d2d 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -1,6 +1,6 @@ import random from typing import List, Tuple - +from ml_dtypes import bfloat16 import numpy as np from redis import Redis, RedisCluster from redis.commands.search.query import Query @@ -32,7 +32,15 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.algorithm = cls.search_params.get("algorithm", "hnsw").upper() if cls.algorithm == "HNSW": cls.knn_conditions = "EF_RUNTIME $EF" + cls.data_type = cls.search_params.get("data_type", "FLOAT32").upper() + print(f"data_type: {cls.data_type}; search_params: {cls.search_params}") + cls.np_data_type = np.float32 + if cls.data_type == "FLOAT16": + cls.np_data_type = np.float16 + if cls.data_type == "BFLOAT16": + cls.np_data_type = bfloat16 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] @@ -65,7 +73,7 @@ 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(vector).astype(cls.data_type).tobytes(), "K": top, **params, } diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 7bc89f05..7f60a09b 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -1,5 +1,6 @@ import time from typing import List, Optional +from ml_dtypes import bfloat16 import requests import json @@ -39,6 +40,12 @@ def init_client(cls, host, distance, connection_params, upload_params): ) cls.upload_params = upload_params cls.algorithm = cls.upload_params.get("algorithm", "hnsw").upper() + cls.data_type = cls.upload_params.get("data_type", "FLOAT32").upper() + cls.np_data_type = np.float32 + if cls.data_type == "FLOAT16": + cls.np_data_type = np.float16 + if cls.data_type == "BFLOAT16": + cls.np_data_type = bfloat16 @classmethod def upload_batch( @@ -73,7 +80,7 @@ def upload_batch( cls.client.hset( str(idx), mapping={ - "vector": np.array(vec).astype(np.float32).tobytes(), + "vector": np.array(vec).astype(cls.np_data_type).tobytes(), **payload, **geopoints, }, diff --git a/experiments/configurations/create-redis-vector-types.py b/experiments/configurations/create-redis-vector-types.py new file mode 100644 index 00000000..944fc675 --- /dev/null +++ b/experiments/configurations/create-redis-vector-types.py @@ -0,0 +1,37 @@ +import json + +experiments = [] + +for data_type in ["FLOAT16", "BFLOAT16", "FLOAT32"]: + for m in [16,32,64]: + for efConstruction in [128, 256, 512]: + search_params = [] + config = { + "name": f"redis-{data_type.lower()}-m-{m}-ef-{efConstruction}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": data_type, + "hnsw_config": {"M": m, "EF_CONSTRUCTION": efConstruction}, + }, + "search_params": [], + "upload_params": {"parallel": 16, "data_type": data_type}, + } + + for efSearch in [64, 128, 256, 512]: + single_client_config = { + "parallel": 1, + "search_params": {"ef": efSearch, "data_type": data_type}, + } + multi_client_config = { + "parallel": 100, + "search_params": {"ef": efSearch, "data_type": data_type}, + } + search_params.append(single_client_config) + search_params.append(multi_client_config) + config["search_params"] = search_params + + experiments.append(config) + +with open("redis-vector-types.json", "w") as fd: + json.dump(experiments, fd) diff --git a/experiments/configurations/redis-vector-types.json b/experiments/configurations/redis-vector-types.json new file mode 100644 index 00000000..14c0a8a7 --- /dev/null +++ b/experiments/configurations/redis-vector-types.json @@ -0,0 +1,2000 @@ +[ + { + "name": "redis-float16-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-float32-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + } +] \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 5774bf0f..c35d4fd8 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.8.3 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" @@ -40,7 +37,6 @@ trio = ["trio (>=0.23)"] name = "appnope" version = "0.1.4" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -109,7 +105,6 @@ tests = ["pytest"] name = "asttokens" version = "2.4.1" description = "Annotate AST trees with source code positions" -category = "main" optional = false python-versions = "*" files = [ @@ -128,7 +123,6 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] name = "async-timeout" version = "4.0.3" description = "Timeout context manager for asyncio programs" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -140,7 +134,6 @@ files = [ name = "authlib" version = "1.3.0" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -194,7 +187,6 @@ aio = ["azure-core[aio] (>=1.28.0,<2.0.0)"] name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "main" optional = false python-versions = "*" files = [ @@ -203,38 +195,20 @@ files = [ ] [[package]] -name = "backports-zoneinfo" -version = "0.2.1" -description = "Backport of the standard library zoneinfo module" +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7,<4.0" 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"}, + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, ] -[package.extras] -tzdata = ["tzdata"] - [[package]] name = "certifi" version = "2024.2.2" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -246,7 +220,6 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -311,7 +284,6 @@ pycparser = "*" name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -323,7 +295,6 @@ files = [ name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -423,7 +394,6 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -438,7 +408,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -450,7 +419,6 @@ files = [ name = "cryptography" version = "42.0.5" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -505,7 +473,6 @@ test-randomorder = ["pytest-randomly"] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -517,7 +484,6 @@ files = [ name = "distlib" version = "0.3.8" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" files = [ @@ -529,7 +495,6 @@ files = [ name = "elastic-transport" version = "8.12.0" description = "Transport classes and utilities shared among Python Elastic client libraries" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -548,7 +513,6 @@ develop = ["aiohttp", "furo", "mock", "pytest", "pytest-asyncio", "pytest-cov", name = "elasticsearch" version = "8.12.1" description = "Python client for Elasticsearch" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -567,7 +531,6 @@ requests = ["requests (>=2.4.0,<3.0.0)"] name = "environs" version = "9.5.0" description = "simplified environment variable parsing" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -589,7 +552,6 @@ tests = ["dj-database-url", "dj-email-url", "django-cache-url", "pytest"] name = "exceptiongroup" version = "1.2.0" description = "Backport of PEP 654 (exception groups)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -604,7 +566,6 @@ test = ["pytest (>=6)"] name = "executing" version = "2.0.1" description = "Get the currently executing AST node of a frame, and other information" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -619,7 +580,6 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "filelock" version = "3.13.1" description = "A platform independent file lock." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -636,7 +596,6 @@ typing = ["typing-extensions (>=4.8)"] name = "grpcio" version = "1.60.0" description = "HTTP/2-based RPC framework" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -718,7 +677,6 @@ protobuf = ">=4.21.6" name = "grpcio-tools" version = "1.60.0" description = "Protobuf code generator for gRPC" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -787,7 +745,6 @@ setuptools = "*" name = "h11" version = "0.14.0" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -799,7 +756,6 @@ files = [ name = "h2" version = "4.1.0" description = "HTTP/2 State-Machine based protocol implementation" -category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -815,7 +771,6 @@ hyperframe = ">=6.0,<7" name = "h5py" version = "3.10.0" description = "Read and write HDF5 files from Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -853,7 +808,6 @@ numpy = ">=1.17.3" name = "hpack" version = "4.0.0" description = "Pure-Python HPACK header compression" -category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -865,7 +819,6 @@ files = [ name = "httpcore" version = "1.0.4" description = "A minimal low-level HTTP client." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -887,7 +840,6 @@ trio = ["trio (>=0.22.0,<0.25.0)"] name = "httpx" version = "0.27.0" description = "The next generation HTTP client." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -905,15 +857,14 @@ sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] -cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] -socks = ["socksio (>=1.0.0,<2.0.0)"] +socks = ["socksio (==1.*)"] [[package]] name = "hyperframe" version = "6.0.1" description = "HTTP/2 framing layer for Python" -category = "main" optional = false python-versions = ">=3.6.1" files = [ @@ -925,7 +876,6 @@ files = [ name = "identify" version = "2.5.35" description = "File identification library for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -940,7 +890,6 @@ license = ["ukkonen"] name = "idna" version = "3.6" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -952,7 +901,6 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -964,7 +912,6 @@ files = [ name = "ipdb" version = "0.13.13" description = "IPython-enabled pdb" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -981,7 +928,6 @@ tomli = {version = "*", markers = "python_version > \"3.6\" and python_version < name = "ipython" version = "8.12.3" description = "IPython: Productive Interactive Computing" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1035,7 +981,6 @@ six = "*" name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1055,7 +1000,6 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jsons" version = "1.6.3" description = "For serializing Python objects to JSON (dicts) and back" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1073,7 +1017,6 @@ test = ["attrs", "codecov", "coverage", "dataclasses", "pytest", "scons", "tzdat name = "marshmallow" version = "3.21.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1093,7 +1036,6 @@ tests = ["pytest", "pytz", "simplejson"] name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1122,11 +1064,46 @@ pycryptodome = "*" typing-extensions = "*" urllib3 = "*" +[[package]] +name = "ml-dtypes" +version = "0.4.0" +description = "" +optional = false +python-versions = ">=3.9" +files = [ + {file = "ml_dtypes-0.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:93afe37f3a879d652ec9ef1fc47612388890660a2657fbb5747256c3b818fd81"}, + {file = "ml_dtypes-0.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb83fd064db43e67e67d021e547698af4c8d5c6190f2e9b1c53c09f6ff5531d"}, + {file = "ml_dtypes-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03e7cda6ef164eed0abb31df69d2c00c3a5ab3e2610b6d4c42183a43329c72a5"}, + {file = "ml_dtypes-0.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:a15d96d090aebb55ee85173d1775ae325a001aab607a76c8ea0b964ccd6b5364"}, + {file = "ml_dtypes-0.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bdf689be7351cc3c95110c910c1b864002f113e682e44508910c849e144f3df1"}, + {file = "ml_dtypes-0.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c83e4d443962d891d51669ff241d5aaad10a8d3d37a81c5532a45419885d591c"}, + {file = "ml_dtypes-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e2f4237b459a63c97c2c9f449baa637d7e4c20addff6a9bac486f22432f3b6"}, + {file = "ml_dtypes-0.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:75b4faf99d0711b81f393db36d210b4255fd419f6f790bc6c1b461f95ffb7a9e"}, + {file = "ml_dtypes-0.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ee9f91d4c4f9959a7e1051c141dc565f39e54435618152219769e24f5e9a4d06"}, + {file = "ml_dtypes-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad6849a2db386b38e4d54fe13eb3293464561780531a918f8ef4c8169170dd49"}, + {file = "ml_dtypes-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa32979ebfde3a0d7c947cafbf79edc1ec77ac05ad0780ee86c1d8df70f2259"}, + {file = "ml_dtypes-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:3b67ec73a697c88c1122038e0de46520e48dc2ec876d42cf61bc5efe3c0b7675"}, + {file = "ml_dtypes-0.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:41affb38fdfe146e3db226cf2953021184d6f0c4ffab52136613e9601706e368"}, + {file = "ml_dtypes-0.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43cf4356a0fe2eeac6d289018d0734e17a403bdf1fd911953c125dd0358edcc0"}, + {file = "ml_dtypes-0.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1724ddcdf5edbaf615a62110af47407f1719b8d02e68ccee60683acb5f74da1"}, + {file = "ml_dtypes-0.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:723af6346447268a3cf0b7356e963d80ecb5732b5279b2aa3fa4b9fc8297c85e"}, + {file = "ml_dtypes-0.4.0.tar.gz", hash = "sha256:eaf197e72f4f7176a19fe3cb8b61846b38c6757607e7bf9cd4b1d84cd3e74deb"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.23.3", markers = "python_version >= \"3.11\""}, + {version = ">=1.21.2", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">1.20", markers = "python_version < \"3.10\""}, +] + +[package.extras] +dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] + [[package]] name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "dev" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -1141,7 +1118,6 @@ setuptools = "*" name = "numpy" version = "1.24.4" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1179,7 +1155,6 @@ files = [ name = "opensearch-py" version = "2.4.2" description = "Python client for OpenSearch" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" files = [ @@ -1204,7 +1179,6 @@ kerberos = ["requests-kerberos"] name = "packaging" version = "24.0" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1216,7 +1190,6 @@ files = [ name = "pandas" version = "2.0.3" description = "Powerful data structures for data analysis, time series, and statistics" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1249,9 +1222,9 @@ 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\""}, + {version = ">=1.20.3", markers = "python_version < \"3.10\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -1284,7 +1257,6 @@ xml = ["lxml (>=4.6.3)"] name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1300,7 +1272,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pexpect" version = "4.9.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = false python-versions = "*" files = [ @@ -1328,7 +1299,6 @@ numpy = "*" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "main" optional = false python-versions = "*" files = [ @@ -1340,7 +1310,6 @@ files = [ name = "platformdirs" version = "4.2.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1356,7 +1325,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest- name = "pluggy" version = "1.4.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -1372,7 +1340,6 @@ testing = ["pytest", "pytest-benchmark"] name = "portalocker" version = "2.8.2" description = "Wraps the portalocker recipe for easy usage" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1392,7 +1359,6 @@ tests = ["pytest (>=5.4.1)", "pytest-cov (>=2.8.1)", "pytest-mypy (>=0.8.0)", "p name = "pre-commit" version = "2.21.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1411,7 +1377,6 @@ virtualenv = ">=20.10.0" name = "prompt-toolkit" version = "3.0.43" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -1426,7 +1391,6 @@ wcwidth = "*" name = "protobuf" version = "4.25.3" description = "" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1455,7 +1419,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\""} @@ -1546,7 +1509,6 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -1558,7 +1520,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "main" optional = false python-versions = "*" files = [ @@ -1621,7 +1582,6 @@ numpy = ">=1.16.6,<2" name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -1784,7 +1744,6 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" name = "pygments" version = "2.17.2" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1800,7 +1759,6 @@ windows-terminal = ["colorama (>=0.4.6)"] name = "pymilvus" version = "2.3.7" description = "Python Sdk for Milvus" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1813,7 +1771,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" @@ -1825,7 +1782,6 @@ ujson = ">=2.0.0" name = "pytest" version = "7.4.4" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -1848,7 +1804,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "python-dateutil" version = "2.9.0.post0" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -1863,7 +1818,6 @@ six = ">=1.5" name = "python-dotenv" version = "1.0.1" description = "Read key-value pairs from a .env file and set them as environment variables" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1878,7 +1832,6 @@ cli = ["click (>=5.0)"] name = "pytz" version = "2024.1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -1890,7 +1843,6 @@ files = [ name = "pywin32" version = "306" description = "Python for Window Extensions" -category = "main" optional = false python-versions = "*" files = [ @@ -1914,7 +1866,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -1923,6 +1874,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"}, @@ -1930,8 +1882,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"}, @@ -1948,6 +1908,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"}, @@ -1955,6 +1916,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"}, @@ -1964,7 +1926,6 @@ files = [ name = "qdrant-client" version = "1.8.0" description = "Client library for the Qdrant vector search engine" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1988,7 +1949,6 @@ fastembed = ["fastembed (==0.2.2)"] name = "redis" version = "5.0.3" description = "Python client for Redis database and key-value store" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2007,7 +1967,6 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2029,7 +1988,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "setuptools" version = "69.2.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2046,7 +2004,6 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar name = "six" version = "1.16.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2058,7 +2015,6 @@ files = [ name = "sniffio" version = "1.3.1" description = "Sniff out which async library your code is running under" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2070,7 +2026,6 @@ files = [ name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "main" optional = false python-versions = "*" files = [ @@ -2090,7 +2045,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "stopit" version = "1.1.2" description = "Timeout control decorator and context managers, raise any exception in another thread" -category = "main" optional = false python-versions = "*" files = [ @@ -2101,7 +2055,6 @@ files = [ name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2113,7 +2066,6 @@ files = [ name = "tqdm" version = "4.66.2" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2134,7 +2086,6 @@ telegram = ["requests"] name = "traitlets" version = "5.14.2" description = "Traitlets Python configuration system" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2150,7 +2101,6 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, name = "typer" version = "0.6.1" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2182,7 +2132,6 @@ files = [ name = "typish" version = "1.9.3" description = "Functionality for types" -category = "main" optional = false python-versions = "*" files = [ @@ -2196,7 +2145,6 @@ test = ["codecov", "coverage", "mypy", "nptyping (>=1.3.0)", "numpy", "pycodesty name = "tzdata" version = "2024.1" description = "Provider of IANA time zone data" -category = "main" optional = false python-versions = ">=2" files = [ @@ -2208,7 +2156,6 @@ files = [ name = "ujson" version = "5.9.0" description = "Ultra fast JSON encoder and decoder for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2283,7 +2230,6 @@ files = [ name = "urllib3" version = "2.2.1" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2323,7 +2269,6 @@ tooling-extras = ["pyaml (>=23.7.0)", "pypandoc-binary (>=1.11)", "pytest (>=7.4 name = "virtualenv" version = "20.25.1" description = "Virtual Python Environment builder" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -2344,7 +2289,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "wcwidth" version = "0.2.13" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -2356,7 +2300,6 @@ files = [ name = "weaviate-client" version = "4.5.3" description = "A python native Weaviate client" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2376,5 +2319,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 = "2cd84469db2650a089454f7537304f184f3e7df8b60e32f53e33cd98f1921b4a" diff --git a/pyproject.toml b/pyproject.toml index 05a407ca..7b245e57 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "" authors = ["Kacper Łukawski "] [tool.poetry.dependencies] -python = ">=3.8,<3.12" +python = ">=3.9,<3.12" qdrant-client = "^1.8.0" typer = "^0.6.1" jsons = "^1.6.3" @@ -21,6 +21,7 @@ tqdm = "^4.66.1" backoff = "^2.2.1" psycopg = {extras = ["binary"], version = "^3.1.17"} pgvector = "^0.2.4" +ml-dtypes = "^0.4.0" [tool.poetry.dev-dependencies] From 6e6da52906fbaea0aa50ff1070b69939db6b7f88 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 9 Jul 2024 23:03:44 +0100 Subject: [PATCH 127/209] Added FLOAT64 data type for redis. fixed search: TypeError: data type 'FLOAT32' not understood --- engine/clients/redis/search.py | 5 +++-- engine/clients/redis/upload.py | 2 ++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index c5820d2d..d92fc8bb 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -33,8 +33,9 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic if cls.algorithm == "HNSW": cls.knn_conditions = "EF_RUNTIME $EF" cls.data_type = cls.search_params.get("data_type", "FLOAT32").upper() - print(f"data_type: {cls.data_type}; search_params: {cls.search_params}") cls.np_data_type = np.float32 + if cls.data_type == "FLOAT64": + cls.np_data_type = np.float64 if cls.data_type == "FLOAT16": cls.np_data_type = np.float16 if cls.data_type == "BFLOAT16": @@ -73,7 +74,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: .timeout(REDIS_QUERY_TIMEOUT) ) params_dict = { - "vec_param": np.array(vector).astype(cls.data_type).tobytes(), + "vec_param": np.array(vector).astype(cls.np_data_type).tobytes(), "K": top, **params, } diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 7f60a09b..80fd12a0 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -42,6 +42,8 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.algorithm = cls.upload_params.get("algorithm", "hnsw").upper() cls.data_type = cls.upload_params.get("data_type", "FLOAT32").upper() cls.np_data_type = np.float32 + if cls.data_type == "FLOAT64": + cls.np_data_type = np.float64 if cls.data_type == "FLOAT16": cls.np_data_type = np.float16 if cls.data_type == "BFLOAT16": From aa48d4e5d1517de823d4ff02eeef6571edb81cb4 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 9 Jul 2024 23:07:16 +0100 Subject: [PATCH 128/209] Added FLOAT64 data type for redis. fixed search: TypeError: data type 'FLOAT32' not understood --- engine/clients/redis/search.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index d92fc8bb..873521d5 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -32,7 +32,11 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.algorithm = cls.search_params.get("algorithm", "hnsw").upper() if cls.algorithm == "HNSW": cls.knn_conditions = "EF_RUNTIME $EF" - cls.data_type = cls.search_params.get("data_type", "FLOAT32").upper() + cls.data_type = "FLOAT32" + if "search_params" in cls.search_params: + cls.data_type = ( + cls.search_params["search_params"].get("data_type", "FLOAT32").upper() + ) cls.np_data_type = np.float32 if cls.data_type == "FLOAT64": cls.np_data_type = np.float64 From 410527f7b3286e7ce7f400d2a7d332d1be46793a Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 9 Jul 2024 23:13:07 +0100 Subject: [PATCH 129/209] Include float64 redis data --- .../create-redis-vector-types.py | 2 +- .../configurations/redis-vector-types.json | 666 ++++++++++++++++++ 2 files changed, 667 insertions(+), 1 deletion(-) diff --git a/experiments/configurations/create-redis-vector-types.py b/experiments/configurations/create-redis-vector-types.py index 944fc675..85743993 100644 --- a/experiments/configurations/create-redis-vector-types.py +++ b/experiments/configurations/create-redis-vector-types.py @@ -2,7 +2,7 @@ experiments = [] -for data_type in ["FLOAT16", "BFLOAT16", "FLOAT32"]: +for data_type in ["FLOAT16", "BFLOAT16", "FLOAT32", "FLOAT64"]: for m in [16,32,64]: for efConstruction in [128, 256, 512]: search_params = [] diff --git a/experiments/configurations/redis-vector-types.json b/experiments/configurations/redis-vector-types.json index 14c0a8a7..060bfbfd 100644 --- a/experiments/configurations/redis-vector-types.json +++ b/experiments/configurations/redis-vector-types.json @@ -1996,5 +1996,671 @@ "parallel": 16, "data_type": "FLOAT32" } + }, + { + "name": "redis-float64-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } } ] \ No newline at end of file From 78d447ae4436a7507acf8996c21ca5078e983e5d Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 11 Jul 2024 12:16:45 +0100 Subject: [PATCH 130/209] Included extra EF_CONSTRUCT 32, and extra EF_RUNTIME 16, 32 --- .../create-redis-vector-types.py | 6 +- .../configurations/redis-vector-types.json | 5156 +++++++++++++++-- 2 files changed, 4729 insertions(+), 433 deletions(-) diff --git a/experiments/configurations/create-redis-vector-types.py b/experiments/configurations/create-redis-vector-types.py index 85743993..ecebc9bd 100644 --- a/experiments/configurations/create-redis-vector-types.py +++ b/experiments/configurations/create-redis-vector-types.py @@ -3,8 +3,8 @@ experiments = [] for data_type in ["FLOAT16", "BFLOAT16", "FLOAT32", "FLOAT64"]: - for m in [16,32,64]: - for efConstruction in [128, 256, 512]: + for m in [16, 32, 64]: + for efConstruction in [32, 64, 128, 256, 512]: search_params = [] config = { "name": f"redis-{data_type.lower()}-m-{m}-ef-{efConstruction}", @@ -18,7 +18,7 @@ "upload_params": {"parallel": 16, "data_type": data_type}, } - for efSearch in [64, 128, 256, 512]: + for efSearch in [16, 32, 64, 128, 256, 512, 1024]: single_client_config = { "parallel": 1, "search_params": {"ef": efSearch, "data_type": data_type}, diff --git a/experiments/configurations/redis-vector-types.json b/experiments/configurations/redis-vector-types.json index 060bfbfd..8dcb2753 100644 --- a/experiments/configurations/redis-vector-types.json +++ b/experiments/configurations/redis-vector-types.json @@ -1,16 +1,44 @@ [ { - "name": "redis-float16-m-16-ef-128", + "name": "redis-float16-m-16-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { "M": 16, - "EF_CONSTRUCTION": 128 + "EF_CONSTRUCTION": 32 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, { "parallel": 1, "search_params": { @@ -66,6 +94,20 @@ "ef": 512, "data_type": "FLOAT16" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -74,17 +116,45 @@ } }, { - "name": "redis-float16-m-16-ef-256", + "name": "redis-float16-m-16-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { "M": 16, - "EF_CONSTRUCTION": 256 + "EF_CONSTRUCTION": 64 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, { "parallel": 1, "search_params": { @@ -140,6 +210,20 @@ "ef": 512, "data_type": "FLOAT16" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -148,17 +232,45 @@ } }, { - "name": "redis-float16-m-16-ef-512", + "name": "redis-float16-m-16-ef-128", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { "M": 16, - "EF_CONSTRUCTION": 512 + "EF_CONSTRUCTION": 128 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, { "parallel": 1, "search_params": { @@ -214,6 +326,20 @@ "ef": 512, "data_type": "FLOAT16" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -222,17 +348,45 @@ } }, { - "name": "redis-float16-m-32-ef-128", + "name": "redis-float16-m-16-ef-256", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 128 + "M": 16, + "EF_CONSTRUCTION": 256 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, { "parallel": 1, "search_params": { @@ -288,6 +442,20 @@ "ef": 512, "data_type": "FLOAT16" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -296,17 +464,45 @@ } }, { - "name": "redis-float16-m-32-ef-256", + "name": "redis-float16-m-16-ef-512", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 256 + "M": 16, + "EF_CONSTRUCTION": 512 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, { "parallel": 1, "search_params": { @@ -362,6 +558,20 @@ "ef": 512, "data_type": "FLOAT16" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -370,17 +580,45 @@ } }, { - "name": "redis-float16-m-32-ef-512", + "name": "redis-float16-m-32-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { "M": 32, - "EF_CONSTRUCTION": 512 + "EF_CONSTRUCTION": 32 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, { "parallel": 1, "search_params": { @@ -436,6 +674,20 @@ "ef": 512, "data_type": "FLOAT16" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -444,144 +696,112 @@ } }, { - "name": "redis-float16-m-64-ef-128", + "name": "redis-float16-m-32-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 128 + "M": 32, + "EF_CONSTRUCTION": 64 } }, "search_params": [ { "parallel": 1, "search_params": { - "ef": 64, + "ef": 16, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64, + "ef": 16, "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 128, + "ef": 32, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128, + "ef": 32, "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 256, + "ef": 64, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256, + "ef": 64, "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 512, + "ef": 128, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-64-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, + "ef": 128, "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 128, + "ef": 256, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128, + "ef": 256, "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 256, + "ef": 512, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256, + "ef": 512, "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 512, + "ef": 1024, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512, + "ef": 1024, "data_type": "FLOAT16" } } @@ -592,757 +812,4337 @@ } }, { - "name": "redis-float16-m-64-ef-512", + "name": "redis-float16-m-32-ef-128", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 512 + "M": 32, + "EF_CONSTRUCTION": 128 } }, "search_params": [ { "parallel": 1, "search_params": { - "ef": 64, + "ef": 16, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64, + "ef": 16, "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 128, + "ef": 32, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128, + "ef": 32, "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 256, + "ef": 64, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256, + "ef": 64, "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 512, + "ef": 128, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512, + "ef": 128, "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-bfloat16-m-16-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } }, { "parallel": 1, "search_params": { - "ef": 128, - "data_type": "BFLOAT16" + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128, - "data_type": "BFLOAT16" + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 256, - "data_type": "BFLOAT16" + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256, - "data_type": "BFLOAT16" + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 512, - "data_type": "BFLOAT16" + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512, - "data_type": "BFLOAT16" + "ef": 1024, + "data_type": "FLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { - "name": "redis-bfloat16-m-16-ef-256", + "name": "redis-float16-m-32-ef-256", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "BFLOAT16", + "data_type": "FLOAT16", "hnsw_config": { - "M": 16, + "M": 32, "EF_CONSTRUCTION": 256 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { - "name": "redis-bfloat16-m-16-ef-512", + "name": "redis-float16-m-32-ef-512", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "BFLOAT16", + "data_type": "FLOAT16", "hnsw_config": { - "M": 16, + "M": 32, "EF_CONSTRUCTION": 512 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "BFLOAT16" + "data_type": "FLOAT16" } }, { - "name": "redis-bfloat16-m-32-ef-128", + "name": "redis-float16-m-64-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "BFLOAT16", + "data_type": "FLOAT16", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 128 + "M": 64, + "EF_CONSTRUCTION": 32 } }, "search_params": [ { "parallel": 1, "search_params": { - "ef": 64, - "data_type": "BFLOAT16" + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64, - "data_type": "BFLOAT16" + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 128, - "data_type": "BFLOAT16" + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128, - "data_type": "BFLOAT16" + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 1, "search_params": { - "ef": 256, - "data_type": "BFLOAT16" + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-float32-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { - "name": "redis-bfloat16-m-32-ef-256", + "name": "redis-float32-m-32-ef-256", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "BFLOAT16", + "data_type": "FLOAT32", "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 256 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { - "name": "redis-bfloat16-m-32-ef-512", + "name": "redis-float32-m-32-ef-512", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "BFLOAT16", + "data_type": "FLOAT32", "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 512 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { - "ef": 256, - "data_type": "BFLOAT16" + "ef": 512, + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { - "ef": 512, - "data_type": "BFLOAT16" + "ef": 1024, + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { - "ef": 512, - "data_type": "BFLOAT16" + "ef": 1024, + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { - "name": "redis-bfloat16-m-64-ef-128", + "name": "redis-float32-m-64-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "BFLOAT16", + "data_type": "FLOAT32", "hnsw_config": { "M": 64, - "EF_CONSTRUCTION": 128 + "EF_CONSTRUCTION": 64 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { - "name": "redis-bfloat16-m-64-ef-256", + "name": "redis-float32-m-64-ef-128", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "BFLOAT16", + "data_type": "FLOAT32", "hnsw_config": { "M": 64, - "EF_CONSTRUCTION": 256 + "EF_CONSTRUCTION": 128 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { - "name": "redis-bfloat16-m-64-ef-512", + "name": "redis-float32-m-64-ef-256", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "BFLOAT16", + "data_type": "FLOAT32", "hnsw_config": { "M": 64, - "EF_CONSTRUCTION": 512 + "EF_CONSTRUCTION": 256 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "BFLOAT16" + "data_type": "FLOAT32" } }, { - "name": "redis-float32-m-16-ef-128", + "name": "redis-float32-m-64-ef-512", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT32", "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 128 + "M": 64, + "EF_CONSTRUCTION": 512 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, { "parallel": 1, "search_params": { @@ -1398,6 +5198,20 @@ "ef": 512, "data_type": "FLOAT32" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } } ], "upload_params": { @@ -1406,309 +5220,477 @@ } }, { - "name": "redis-float32-m-16-ef-256", + "name": "redis-float64-m-16-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT32", + "data_type": "FLOAT64", "hnsw_config": { "M": 16, - "EF_CONSTRUCTION": 256 + "EF_CONSTRUCTION": 32 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { - "name": "redis-float32-m-16-ef-512", + "name": "redis-float64-m-16-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT32", + "data_type": "FLOAT64", "hnsw_config": { "M": 16, - "EF_CONSTRUCTION": 512 + "EF_CONSTRUCTION": 64 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { - "name": "redis-float32-m-32-ef-128", + "name": "redis-float64-m-16-ef-128", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT32", + "data_type": "FLOAT64", "hnsw_config": { - "M": 32, + "M": 16, "EF_CONSTRUCTION": 128 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { - "name": "redis-float32-m-32-ef-256", + "name": "redis-float64-m-16-ef-256", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT32", + "data_type": "FLOAT64", "hnsw_config": { - "M": 32, + "M": 16, "EF_CONSTRUCTION": 256 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { - "name": "redis-float32-m-32-ef-512", + "name": "redis-float64-m-16-ef-512", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT32", + "data_type": "FLOAT64", "hnsw_config": { - "M": 32, + "M": 16, "EF_CONSTRUCTION": 512 } }, @@ -1716,299 +5698,379 @@ { "parallel": 1, "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" + "ef": 16, + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 256, - "data_type": "FLOAT32" + "ef": 16, + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { - "ef": 512, - "data_type": "FLOAT32" + "ef": 32, + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 512, - "data_type": "FLOAT32" + "ef": 32, + "data_type": "FLOAT64" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-64-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { - "name": "redis-float32-m-64-ef-256", + "name": "redis-float64-m-32-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT32", + "data_type": "FLOAT64", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 256 + "M": 32, + "EF_CONSTRUCTION": 32 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { - "name": "redis-float32-m-64-ef-512", + "name": "redis-float64-m-32-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT32", + "data_type": "FLOAT64", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 512 + "M": 32, + "EF_CONSTRUCTION": 64 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT32" + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT32" + "data_type": "FLOAT64" } }, { - "name": "redis-float64-m-16-ef-128", + "name": "redis-float64-m-32-ef-128", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 16, + "M": 32, "EF_CONSTRUCTION": 128 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { @@ -2064,6 +6126,20 @@ "ef": 512, "data_type": "FLOAT64" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } } ], "upload_params": { @@ -2072,17 +6148,45 @@ } }, { - "name": "redis-float64-m-16-ef-256", + "name": "redis-float64-m-32-ef-256", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 16, + "M": 32, "EF_CONSTRUCTION": 256 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { @@ -2100,42 +6204,56 @@ { "parallel": 1, "search_params": { - "ef": 128, + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 128, + "ef": 256, "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { - "ef": 256, + "ef": 512, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 256, + "ef": 512, "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { - "ef": 512, + "ef": 1024, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 512, + "ef": 1024, "data_type": "FLOAT64" } } @@ -2146,13 +6264,13 @@ } }, { - "name": "redis-float64-m-16-ef-512", + "name": "redis-float64-m-32-ef-512", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 16, + "M": 32, "EF_CONSTRUCTION": 512 } }, @@ -2160,130 +6278,98 @@ { "parallel": 1, "search_params": { - "ef": 64, + "ef": 16, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 64, + "ef": 16, "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { - "ef": 128, + "ef": 32, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 128, + "ef": 32, "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { - "ef": 256, + "ef": 64, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, + "ef": 64, "data_type": "FLOAT64" } }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT64" - } - }, - { - "name": "redis-float64-m-32-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ { "parallel": 1, "search_params": { - "ef": 64, + "ef": 128, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 64, + "ef": 128, "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { - "ef": 128, + "ef": 256, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 128, + "ef": 256, "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { - "ef": 256, + "ef": 512, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 256, + "ef": 512, "data_type": "FLOAT64" } }, { "parallel": 1, "search_params": { - "ef": 512, + "ef": 1024, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 512, + "ef": 1024, "data_type": "FLOAT64" } } @@ -2294,17 +6380,45 @@ } }, { - "name": "redis-float64-m-32-ef-256", + "name": "redis-float64-m-64-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 256 + "M": 64, + "EF_CONSTRUCTION": 32 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { @@ -2360,6 +6474,20 @@ "ef": 512, "data_type": "FLOAT64" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } } ], "upload_params": { @@ -2368,17 +6496,45 @@ } }, { - "name": "redis-float64-m-32-ef-512", + "name": "redis-float64-m-64-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 512 + "M": 64, + "EF_CONSTRUCTION": 64 } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { @@ -2434,6 +6590,20 @@ "ef": 512, "data_type": "FLOAT64" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } } ], "upload_params": { @@ -2453,6 +6623,34 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { @@ -2508,6 +6706,20 @@ "ef": 512, "data_type": "FLOAT64" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } } ], "upload_params": { @@ -2527,6 +6739,34 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { @@ -2582,6 +6822,20 @@ "ef": 512, "data_type": "FLOAT64" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } } ], "upload_params": { @@ -2601,6 +6855,34 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, { "parallel": 1, "search_params": { @@ -2656,6 +6938,20 @@ "ef": 512, "data_type": "FLOAT64" } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } } ], "upload_params": { From 5be637a473bfa8a50c18bbb2f0bc6ed94e4dc9a4 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 11 Jul 2024 12:22:09 +0100 Subject: [PATCH 131/209] Included extra EF_CONSTRUCT 32, and extra EF_RUNTIME 16, 32 --- .../create-redis-vector-types.py | 5 +- .../configurations/redis-vector-types.json | 4664 +---------------- 2 files changed, 247 insertions(+), 4422 deletions(-) diff --git a/experiments/configurations/create-redis-vector-types.py b/experiments/configurations/create-redis-vector-types.py index ecebc9bd..1c66c227 100644 --- a/experiments/configurations/create-redis-vector-types.py +++ b/experiments/configurations/create-redis-vector-types.py @@ -4,7 +4,8 @@ for data_type in ["FLOAT16", "BFLOAT16", "FLOAT32", "FLOAT64"]: for m in [16, 32, 64]: - for efConstruction in [32, 64, 128, 256, 512]: + for efConstruction in [32, 64]: + #for efConstruction in [32, 64, 128, 256, 512]: search_params = [] config = { "name": f"redis-{data_type.lower()}-m-{m}-ef-{efConstruction}", @@ -17,7 +18,7 @@ "search_params": [], "upload_params": {"parallel": 16, "data_type": data_type}, } - +# for efSearch in [16, 32, 1024]: for efSearch in [16, 32, 64, 128, 256, 512, 1024]: single_client_config = { "parallel": 1, diff --git a/experiments/configurations/redis-vector-types.json b/experiments/configurations/redis-vector-types.json index 8dcb2753..0991fb9c 100644 --- a/experiments/configurations/redis-vector-types.json +++ b/experiments/configurations/redis-vector-types.json @@ -232,14 +232,14 @@ } }, { - "name": "redis-float16-m-16-ef-128", + "name": "redis-float16-m-32-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 128 + "M": 32, + "EF_CONSTRUCTION": 32 } }, "search_params": [ @@ -348,14 +348,14 @@ } }, { - "name": "redis-float16-m-16-ef-256", + "name": "redis-float16-m-32-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 256 + "M": 32, + "EF_CONSTRUCTION": 64 } }, "search_params": [ @@ -464,14 +464,14 @@ } }, { - "name": "redis-float16-m-16-ef-512", + "name": "redis-float16-m-64-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 512 + "M": 64, + "EF_CONSTRUCTION": 32 } }, "search_params": [ @@ -580,14 +580,14 @@ } }, { - "name": "redis-float16-m-32-ef-32", + "name": "redis-float16-m-64-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 32 + "M": 64, + "EF_CONSTRUCTION": 64 } }, "search_params": [ @@ -696,14 +696,14 @@ } }, { - "name": "redis-float16-m-32-ef-64", + "name": "redis-bfloat16-m-16-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT16", + "data_type": "BFLOAT16", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 64 + "M": 16, + "EF_CONSTRUCTION": 32 } }, "search_params": [ @@ -711,115 +711,115 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { - "name": "redis-float16-m-32-ef-128", + "name": "redis-bfloat16-m-16-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT16", + "data_type": "BFLOAT16", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 128 + "M": 16, + "EF_CONSTRUCTION": 64 } }, "search_params": [ @@ -827,115 +827,115 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { - "name": "redis-float16-m-32-ef-256", + "name": "redis-bfloat16-m-32-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT16", + "data_type": "BFLOAT16", "hnsw_config": { "M": 32, - "EF_CONSTRUCTION": 256 + "EF_CONSTRUCTION": 32 } }, "search_params": [ @@ -943,115 +943,115 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { - "name": "redis-float16-m-32-ef-512", + "name": "redis-bfloat16-m-32-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT16", + "data_type": "BFLOAT16", "hnsw_config": { "M": 32, - "EF_CONSTRUCTION": 512 + "EF_CONSTRUCTION": 64 } }, "search_params": [ @@ -1059,112 +1059,112 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { - "name": "redis-float16-m-64-ef-32", + "name": "redis-bfloat16-m-64-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT16", + "data_type": "BFLOAT16", "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 32 @@ -1175,112 +1175,112 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { - "name": "redis-float16-m-64-ef-64", + "name": "redis-bfloat16-m-64-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT16", + "data_type": "BFLOAT16", "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 64 @@ -1291,4291 +1291,115 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT16" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-64-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-64-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-64-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 512 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-bfloat16-m-16-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-16-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-16-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-16-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-16-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 512 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-32-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-32-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-32-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-32-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-32-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 512 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-64-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-64-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-64-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-64-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-64-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 512 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-float32-m-16-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-16-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-16-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-16-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-16-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 512 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-32-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-32-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-32-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-32-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-32-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 512 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-64-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-64-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-64-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-64-ef-256", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 256 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-64-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 512 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float64-m-16-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT64" - } - }, - { - "name": "redis-float64-m-16-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT64" - } - }, - { - "name": "redis-float64-m-16-ef-128", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 128 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { - "name": "redis-float64-m-16-ef-256", + "name": "redis-float32-m-16-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT64", + "data_type": "FLOAT32", "hnsw_config": { "M": 16, - "EF_CONSTRUCTION": 256 + "EF_CONSTRUCTION": 32 } }, "search_params": [ @@ -5583,115 +1407,115 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { - "name": "redis-float64-m-16-ef-512", + "name": "redis-float32-m-16-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT64", + "data_type": "FLOAT32", "hnsw_config": { "M": 16, - "EF_CONSTRUCTION": 512 + "EF_CONSTRUCTION": 64 } }, "search_params": [ @@ -5699,112 +1523,112 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { - "name": "redis-float64-m-32-ef-32", + "name": "redis-float32-m-32-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT64", + "data_type": "FLOAT32", "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 32 @@ -5815,112 +1639,112 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { - "name": "redis-float64-m-32-ef-64", + "name": "redis-float32-m-32-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT64", + "data_type": "FLOAT32", "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 64 @@ -5931,115 +1755,115 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { - "name": "redis-float64-m-32-ef-128", + "name": "redis-float32-m-64-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT64", + "data_type": "FLOAT32", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 128 + "M": 64, + "EF_CONSTRUCTION": 32 } }, "search_params": [ @@ -6047,115 +1871,115 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { - "name": "redis-float64-m-32-ef-256", + "name": "redis-float32-m-64-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT64", + "data_type": "FLOAT32", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 256 + "M": 64, + "EF_CONSTRUCTION": 64 } }, "search_params": [ @@ -6163,115 +1987,115 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 32, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 64, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 128, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 256, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 512, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 1, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { "ef": 1024, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT32" } }, { - "name": "redis-float64-m-32-ef-512", + "name": "redis-float64-m-16-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 512 + "M": 16, + "EF_CONSTRUCTION": 32 } }, "search_params": [ @@ -6380,14 +2204,14 @@ } }, { - "name": "redis-float64-m-64-ef-32", + "name": "redis-float64-m-16-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 32 + "M": 16, + "EF_CONSTRUCTION": 64 } }, "search_params": [ @@ -6496,14 +2320,14 @@ } }, { - "name": "redis-float64-m-64-ef-64", + "name": "redis-float64-m-32-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 64 + "M": 32, + "EF_CONSTRUCTION": 32 } }, "search_params": [ @@ -6612,14 +2436,14 @@ } }, { - "name": "redis-float64-m-64-ef-128", + "name": "redis-float64-m-32-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 128 + "M": 32, + "EF_CONSTRUCTION": 64 } }, "search_params": [ @@ -6728,14 +2552,14 @@ } }, { - "name": "redis-float64-m-64-ef-256", + "name": "redis-float64-m-64-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { "M": 64, - "EF_CONSTRUCTION": 256 + "EF_CONSTRUCTION": 32 } }, "search_params": [ @@ -6844,14 +2668,14 @@ } }, { - "name": "redis-float64-m-64-ef-512", + "name": "redis-float64-m-64-ef-64", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { "M": 64, - "EF_CONSTRUCTION": 512 + "EF_CONSTRUCTION": 64 } }, "search_params": [ From 1403f0646b3a29c7501b461f0f3f2166c3a8b780 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 11 Jul 2024 22:51:30 +0100 Subject: [PATCH 132/209] temporary glove-100 index size --- .../configurations/redis-vector-types.json | 2812 ++--------------- 1 file changed, 206 insertions(+), 2606 deletions(-) diff --git a/experiments/configurations/redis-vector-types.json b/experiments/configurations/redis-vector-types.json index 0991fb9c..abb37111 100644 --- a/experiments/configurations/redis-vector-types.json +++ b/experiments/configurations/redis-vector-types.json @@ -1,13 +1,13 @@ [ { - "name": "redis-float16-m-16-ef-32", + "name": "redis-float16-m-128-ef-16", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 32 + "M": 128, + "EF_CONSTRUCTION": 16 } }, "search_params": [ @@ -24,206 +24,6 @@ "ef": 16, "data_type": "FLOAT16" } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-16-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } } ], "upload_params": { @@ -232,2334 +32,78 @@ } }, { - "name": "redis-float16-m-32-ef-32", + "name": "redis-float16-m-256-ef-16", "engine": "redis", "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-32-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-64-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-64-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-bfloat16-m-16-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-16-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-32-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-32-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-64-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-64-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "BFLOAT16" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-float32-m-16-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-16-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-32-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-32-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-64-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-64-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT32" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT32" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float64-m-16-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT64" - } - }, - { - "name": "redis-float64-m-16-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT64" - } - }, - { - "name": "redis-float64-m-32-ef-32", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 32 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 1024, - "data_type": "FLOAT64" - } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT64" - } - }, - { - "name": "redis-float64-m-32-ef-64", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 32, - "EF_CONSTRUCTION": 64 - } - }, - "search_params": [ - { - "parallel": 1, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 16, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 256, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { "parallel": 1, "search_params": { - "ef": 512, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT16" } - }, + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-512-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 512, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { "parallel": 1, "search_params": { - "ef": 1024, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT16" } }, { - "name": "redis-float64-m-64-ef-32", + "name": "redis-bfloat16-m-128-ef-16", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT64", + "data_type": "BFLOAT16", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 32 + "M": 128, + "EF_CONSTRUCTION": 16 } }, "search_params": [ @@ -2567,97 +111,205 @@ "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "BFLOAT16" } - }, + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-256-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 256, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { "parallel": 1, "search_params": { - "ef": 32, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "BFLOAT16" } - }, + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-512-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 512, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { "parallel": 1, "search_params": { - "ef": 64, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "BFLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "BFLOAT16" } - }, + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-float32-m-128-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 128, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { "parallel": 1, "search_params": { - "ef": 128, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { - "ef": 128, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT32" } - }, + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-256-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 256, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { "parallel": 1, "search_params": { - "ef": 256, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { - "ef": 256, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT32" } - }, + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-512-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 512, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { "parallel": 1, "search_params": { - "ef": 512, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT32" } }, { "parallel": 100, "search_params": { - "ef": 512, - "data_type": "FLOAT64" + "ef": 16, + "data_type": "FLOAT32" } - }, + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float64-m-128-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 128, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { "parallel": 1, "search_params": { - "ef": 1024, + "ef": 16, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 1024, + "ef": 16, "data_type": "FLOAT64" } } @@ -2668,14 +320,14 @@ } }, { - "name": "redis-float64-m-64-ef-64", + "name": "redis-float64-m-256-ef-16", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT64", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 64 + "M": 256, + "EF_CONSTRUCTION": 16 } }, "search_params": [ @@ -2692,88 +344,36 @@ "ef": 16, "data_type": "FLOAT64" } - }, - { - "parallel": 1, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 32, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 64, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 128, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 256, - "data_type": "FLOAT64" - } - }, - { - "parallel": 1, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, - { - "parallel": 100, - "search_params": { - "ef": 512, - "data_type": "FLOAT64" - } - }, + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-512-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 512, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { "parallel": 1, "search_params": { - "ef": 1024, + "ef": 16, "data_type": "FLOAT64" } }, { "parallel": 100, "search_params": { - "ef": 1024, + "ef": 16, "data_type": "FLOAT64" } } From a3284f82910e229262196923eb0ee18499193194 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 12 Jul 2024 06:53:59 +0100 Subject: [PATCH 133/209] Added more lower M configs for redis variations --- .../create-redis-vector-types.py | 10 +- .../configurations/redis-vector-types.json | 12564 +++++++++++++++- 2 files changed, 12335 insertions(+), 239 deletions(-) diff --git a/experiments/configurations/create-redis-vector-types.py b/experiments/configurations/create-redis-vector-types.py index 1c66c227..493ff5f0 100644 --- a/experiments/configurations/create-redis-vector-types.py +++ b/experiments/configurations/create-redis-vector-types.py @@ -3,9 +3,9 @@ experiments = [] for data_type in ["FLOAT16", "BFLOAT16", "FLOAT32", "FLOAT64"]: - for m in [16, 32, 64]: - for efConstruction in [32, 64]: - #for efConstruction in [32, 64, 128, 256, 512]: + for m in [8, 16, 32, 64]: + # for efConstruction in [32, 64]: + for efConstruction in [16, 32, 64, 128, 256, 512]: search_params = [] config = { "name": f"redis-{data_type.lower()}-m-{m}-ef-{efConstruction}", @@ -18,8 +18,8 @@ "search_params": [], "upload_params": {"parallel": 16, "data_type": data_type}, } -# for efSearch in [16, 32, 1024]: - for efSearch in [16, 32, 64, 128, 256, 512, 1024]: + # for efSearch in [16, 32, 1024]: + for efSearch in [8, 16, 32, 64, 128, 256, 512, 1024]: single_client_config = { "parallel": 1, "search_params": {"ef": efSearch, "data_type": data_type}, diff --git a/experiments/configurations/redis-vector-types.json b/experiments/configurations/redis-vector-types.json index abb37111..92a00604 100644 --- a/experiments/configurations/redis-vector-types.json +++ b/experiments/configurations/redis-vector-types.json @@ -1,12 +1,12 @@ [ { - "name": "redis-float16-m-128-ef-16", + "name": "redis-float16-m-8-ef-16", "engine": "redis", "connection_params": {}, "collection_params": { "data_type": "FLOAT16", "hnsw_config": { - "M": 128, + "M": 8, "EF_CONSTRUCTION": 16 } }, @@ -14,35 +14,17 @@ { "parallel": 1, "search_params": { - "ef": 16, + "ef": 8, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, + "ef": 8, "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-256-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 256, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { @@ -56,324 +38,12438 @@ "ef": 16, "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-float16-m-512-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT16", - "hnsw_config": { - "M": 512, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { - "ef": 16, + "ef": 32, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, + "ef": 32, "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT16" - } - }, - { - "name": "redis-bfloat16-m-128-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 128, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { - "ef": 16, - "data_type": "BFLOAT16" + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, - "data_type": "BFLOAT16" + "ef": 64, + "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-256-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 256, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { - "ef": 16, - "data_type": "BFLOAT16" + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, - "data_type": "BFLOAT16" + "ef": 128, + "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-bfloat16-m-512-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "BFLOAT16", - "hnsw_config": { - "M": 512, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { - "ef": 16, - "data_type": "BFLOAT16" + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, - "data_type": "BFLOAT16" + "ef": 256, + "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "BFLOAT16" - } - }, - { - "name": "redis-float32-m-128-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 128, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { - "ef": 16, - "data_type": "FLOAT32" + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, - "data_type": "FLOAT32" + "ef": 512, + "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float32-m-256-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT32", - "hnsw_config": { - "M": 256, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { - "ef": 16, - "data_type": "FLOAT32" + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, - "data_type": "FLOAT32" + "ef": 1024, + "data_type": "FLOAT16" } } ], "upload_params": { "parallel": 16, - "data_type": "FLOAT32" + "data_type": "FLOAT16" } }, { - "name": "redis-float32-m-512-ef-16", + "name": "redis-float16-m-8-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { - "data_type": "FLOAT32", + "data_type": "FLOAT16", "hnsw_config": { - "M": 512, - "EF_CONSTRUCTION": 16 + "M": 8, + "EF_CONSTRUCTION": 32 } }, "search_params": [ { "parallel": 1, "search_params": { - "ef": 16, - "data_type": "FLOAT32" + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, - "data_type": "FLOAT32" + "ef": 8, + "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT32" - } - }, - { - "name": "redis-float64-m-128-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 128, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { "ef": 16, - "data_type": "FLOAT64" + "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT64" - } - }, - { - "name": "redis-float64-m-256-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 256, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { - "ef": 16, - "data_type": "FLOAT64" + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, - "data_type": "FLOAT64" + "ef": 32, + "data_type": "FLOAT16" } - } - ], - "upload_params": { - "parallel": 16, - "data_type": "FLOAT64" - } - }, - { - "name": "redis-float64-m-512-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "data_type": "FLOAT64", - "hnsw_config": { - "M": 512, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 1, "search_params": { - "ef": 16, - "data_type": "FLOAT64" + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16, + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-8-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-8-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-8-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-8-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-float16-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-8-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-bfloat16-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "BFLOAT16", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "BFLOAT16" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "BFLOAT16" + } + }, + { + "name": "redis-float32-m-8-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-8-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float32-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT32", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT32" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT32" + } + }, + { + "name": "redis-float64-m-8-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-8-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-16-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-32-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-64", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 64 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-128", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 128 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-256", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 256 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + } + ], + "upload_params": { + "parallel": 16, + "data_type": "FLOAT64" + } + }, + { + "name": "redis-float64-m-64-ef-512", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "data_type": "FLOAT64", + "hnsw_config": { + "M": 64, + "EF_CONSTRUCTION": 512 + } + }, + "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 128, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 256, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 512, + "data_type": "FLOAT64" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT64" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 1024, "data_type": "FLOAT64" } } From fd57559f8327549d2592bda3c3dbeed98c0d4b3c Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 16 Jul 2024 16:06:48 +0100 Subject: [PATCH 134/209] Added FLOAT16 intel config --- experiments/configurations/create-intel.py | 11 ++-- .../redis-intel-hnsw-single-node.json | 54 ++++++++++++------- 2 files changed, 44 insertions(+), 21 deletions(-) diff --git a/experiments/configurations/create-intel.py b/experiments/configurations/create-intel.py index f6357203..2fa887e1 100644 --- a/experiments/configurations/create-intel.py +++ b/experiments/configurations/create-intel.py @@ -3,21 +3,26 @@ ms = [16, 64, 256] ef_constructs = [16, 512, 1024] ef_runtimes = [16, 32, 64, 128, 256, 512, 1024, 2048] - +data_type = "FLOAT16" for algo in ["hnsw"]: configs = [] for m in ms: for ef_construct in ef_constructs: config = { - "name": f"redis-intel-{algo}-m-{m}-ef-{ef_construct}", + "name": f"redis-intel-{data_type.lower()}-{algo}-m-{m}-ef-{ef_construct}", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": algo, + "data_type": data_type, f"{algo}_config": {"M": m, "EF_CONSTRUCTION": ef_construct}, }, "search_params": [], - "upload_params": {"parallel": 128, "algorithm": algo}, + "upload_params": { + "parallel": 128, + "algorithm": algo, + "data_type": data_type, + }, } for client in [100, 200, 400, 800, 1600, 3200]: for ef_runtime in ef_runtimes: diff --git a/experiments/configurations/redis-intel-hnsw-single-node.json b/experiments/configurations/redis-intel-hnsw-single-node.json index 70319cb2..8853e9c8 100644 --- a/experiments/configurations/redis-intel-hnsw-single-node.json +++ b/experiments/configurations/redis-intel-hnsw-single-node.json @@ -1,10 +1,11 @@ [ { - "name": "redis-intel-hnsw-m-16-ef-16", + "name": "redis-intel-float16-hnsw-m-16-ef-16", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", + "data_type": "FLOAT16", "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 16 @@ -302,15 +303,17 @@ ], "upload_params": { "parallel": 128, - "algorithm": "hnsw" + "algorithm": "hnsw", + "data_type": "FLOAT16" } }, { - "name": "redis-intel-hnsw-m-16-ef-512", + "name": "redis-intel-float16-hnsw-m-16-ef-512", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", + "data_type": "FLOAT16", "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 512 @@ -608,15 +611,17 @@ ], "upload_params": { "parallel": 128, - "algorithm": "hnsw" + "algorithm": "hnsw", + "data_type": "FLOAT16" } }, { - "name": "redis-intel-hnsw-m-16-ef-1024", + "name": "redis-intel-float16-hnsw-m-16-ef-1024", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", + "data_type": "FLOAT16", "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 1024 @@ -914,15 +919,17 @@ ], "upload_params": { "parallel": 128, - "algorithm": "hnsw" + "algorithm": "hnsw", + "data_type": "FLOAT16" } }, { - "name": "redis-intel-hnsw-m-64-ef-16", + "name": "redis-intel-float16-hnsw-m-64-ef-16", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", + "data_type": "FLOAT16", "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 16 @@ -1220,15 +1227,17 @@ ], "upload_params": { "parallel": 128, - "algorithm": "hnsw" + "algorithm": "hnsw", + "data_type": "FLOAT16" } }, { - "name": "redis-intel-hnsw-m-64-ef-512", + "name": "redis-intel-float16-hnsw-m-64-ef-512", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", + "data_type": "FLOAT16", "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 512 @@ -1526,15 +1535,17 @@ ], "upload_params": { "parallel": 128, - "algorithm": "hnsw" + "algorithm": "hnsw", + "data_type": "FLOAT16" } }, { - "name": "redis-intel-hnsw-m-64-ef-1024", + "name": "redis-intel-float16-hnsw-m-64-ef-1024", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", + "data_type": "FLOAT16", "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 1024 @@ -1832,15 +1843,17 @@ ], "upload_params": { "parallel": 128, - "algorithm": "hnsw" + "algorithm": "hnsw", + "data_type": "FLOAT16" } }, { - "name": "redis-intel-hnsw-m-256-ef-16", + "name": "redis-intel-float16-hnsw-m-256-ef-16", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", + "data_type": "FLOAT16", "hnsw_config": { "M": 256, "EF_CONSTRUCTION": 16 @@ -2138,15 +2151,17 @@ ], "upload_params": { "parallel": 128, - "algorithm": "hnsw" + "algorithm": "hnsw", + "data_type": "FLOAT16" } }, { - "name": "redis-intel-hnsw-m-256-ef-512", + "name": "redis-intel-float16-hnsw-m-256-ef-512", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", + "data_type": "FLOAT16", "hnsw_config": { "M": 256, "EF_CONSTRUCTION": 512 @@ -2444,15 +2459,17 @@ ], "upload_params": { "parallel": 128, - "algorithm": "hnsw" + "algorithm": "hnsw", + "data_type": "FLOAT16" } }, { - "name": "redis-intel-hnsw-m-256-ef-1024", + "name": "redis-intel-float16-hnsw-m-256-ef-1024", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", + "data_type": "FLOAT16", "hnsw_config": { "M": 256, "EF_CONSTRUCTION": 1024 @@ -2750,7 +2767,8 @@ ], "upload_params": { "parallel": 128, - "algorithm": "hnsw" + "algorithm": "hnsw", + "data_type": "FLOAT16" } } ] \ No newline at end of file From f5efe5b25441e522c75de655cda2b45b044bfbf5 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 18 Jul 2024 19:03:00 +0100 Subject: [PATCH 135/209] m-16-ef-64 for milvus --- .../configurations/milvus-single-node.json | 39 +++++++++------ .../configurations/redis-single-node.json | 48 +++++++++---------- 2 files changed, 49 insertions(+), 38 deletions(-) diff --git a/experiments/configurations/milvus-single-node.json b/experiments/configurations/milvus-single-node.json index 229cd068..175965ef 100644 --- a/experiments/configurations/milvus-single-node.json +++ b/experiments/configurations/milvus-single-node.json @@ -5,19 +5,30 @@ "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, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 100, "M": 16 } } }, + { + "name": "milvus-m-16-ef-64", + "engine": "milvus", + "connection_params": {}, + "collection_params": {}, + "search_params": [ + { "parallel": 1, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } + ], + "upload_params": { "parallel": 16, "index_params": { "efConstruction": 64, "M": 16 } } + }, { "name": "milvus-m-16-ef-128", "engine": "milvus", "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, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 16 } } }, @@ -27,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, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 128, "M": 32 } } }, @@ -38,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, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 32 } } }, @@ -49,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, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 32 } } }, @@ -60,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, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 256, "M": 64 } } }, @@ -71,8 +82,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, "params": { "ef": 64 } }, { "parallel": 1, "params": { "ef": 128 } }, { "parallel": 1, "params": { "ef": 256 } }, { "parallel": 1, "params": { "ef": 512 } }, + { "parallel": 100, "params": { "ef": 64 } }, { "parallel": 100, "params": { "ef": 128 } }, { "parallel": 100, "params": { "ef": 256 } }, { "parallel": 100, "params": { "ef": 512 } } ], "upload_params": { "parallel": 16, "index_params": { "efConstruction": 512, "M": 64 } } } diff --git a/experiments/configurations/redis-single-node.json b/experiments/configurations/redis-single-node.json index 2e23438a..30632555 100644 --- a/experiments/configurations/redis-single-node.json +++ b/experiments/configurations/redis-single-node.json @@ -7,8 +7,8 @@ "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 64 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -20,8 +20,8 @@ "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 128 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -33,8 +33,8 @@ "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 256 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -46,8 +46,8 @@ "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 512 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -59,8 +59,8 @@ "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 64 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -72,8 +72,8 @@ "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 128 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -85,8 +85,8 @@ "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 256 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -98,8 +98,8 @@ "hnsw_config": { "M": 32, "EF_CONSTRUCTION": 512 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -111,8 +111,8 @@ "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 64 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -124,8 +124,8 @@ "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 128 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -137,8 +137,8 @@ "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 256 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } }, @@ -150,8 +150,8 @@ "hnsw_config": { "M": 64, "EF_CONSTRUCTION": 512 } }, "search_params": [ - { "parallel": 200, "search_params": { "ef": 64 } }, { "parallel": 200, "search_params": { "ef": 128 } }, { "parallel": 200, "search_params": { "ef": 256 } }, { "parallel": 200, "search_params": { "ef": 512 } }, - { "parallel": 400, "search_params": { "ef": 64 } }, { "parallel": 400, "search_params": { "ef": 128 } }, { "parallel": 400, "search_params": { "ef": 256 } }, { "parallel": 400, "search_params": { "ef": 512 } } + { "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 } } ], "upload_params": { "parallel": 32 } } From a0c6ec8e4064386202e2abfe3f1bfa31a56a6cef Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 24 Jul 2024 15:09:56 +0100 Subject: [PATCH 136/209] Varying M/EF for intel/laion setup --- experiments/configurations/create-intel.py | 8 +- .../redis-intel-hnsw-single-node.json | 2326 ++++++++++++----- 2 files changed, 1669 insertions(+), 665 deletions(-) diff --git a/experiments/configurations/create-intel.py b/experiments/configurations/create-intel.py index 2fa887e1..a26f3a6e 100644 --- a/experiments/configurations/create-intel.py +++ b/experiments/configurations/create-intel.py @@ -1,8 +1,8 @@ import json -ms = [16, 64, 256] -ef_constructs = [16, 512, 1024] -ef_runtimes = [16, 32, 64, 128, 256, 512, 1024, 2048] +ms = [4, 8, 16, 32] +ef_constructs = [4, 8, 16, 32] +ef_runtimes = [4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192] data_type = "FLOAT16" for algo in ["hnsw"]: configs = [] @@ -24,7 +24,7 @@ "data_type": data_type, }, } - for client in [100, 200, 400, 800, 1600, 3200]: + for client in [50, 100, 200]: for ef_runtime in ef_runtimes: test_config = { "parallel": client, diff --git a/experiments/configurations/redis-intel-hnsw-single-node.json b/experiments/configurations/redis-intel-hnsw-single-node.json index 8853e9c8..8a5175b1 100644 --- a/experiments/configurations/redis-intel-hnsw-single-node.json +++ b/experiments/configurations/redis-intel-hnsw-single-node.json @@ -1,325 +1,337 @@ [ { - "name": "redis-intel-float16-hnsw-m-16-ef-16", + "name": "redis-intel-float16-hnsw-m-4-ef-4", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", "data_type": "FLOAT16", "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 16 + "M": 4, + "EF_CONSTRUCTION": 4 } }, "search_params": [ { - "parallel": 100, + "parallel": 50, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, "search_params": { "ef": 16 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 32 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 64 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 512 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 1024 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 2048 } }, { - "parallel": 200, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 200, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8192 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 400, + "parallel": 200, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 400, + "parallel": 200, "search_params": { - "ef": 2048 + "ef": 8 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 16 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 32 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 64 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 128 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 256 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 512 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 1024 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 2048 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 32 + "ef": 8192 } - }, + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-4-ef-8", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 8 + } + }, + "search_params": [ { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 3200, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 3200, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 8 } - } - ], - "upload_params": { - "parallel": 128, - "algorithm": "hnsw", - "data_type": "FLOAT16" - } - }, - { - "name": "redis-intel-float16-hnsw-m-16-ef-512", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "hnsw", - "data_type": "FLOAT16", - "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 512 - } - }, - "search_params": [ + }, { "parallel": 100, "search_params": { @@ -368,6 +380,30 @@ "ef": 2048 } }, + { + "parallel": 100, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8 + } + }, { "parallel": 200, "search_params": { @@ -417,196 +453,252 @@ } }, { - "parallel": 400, + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-4-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 4, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 50, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, "search_params": { "ef": 16 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 32 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 64 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 512 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 1024 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 2048 } }, { - "parallel": 800, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 800, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8192 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 2048 + "ef": 8 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 16 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 32 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 64 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 128 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 256 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 512 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 1024 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 2048 } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } } ], "upload_params": { @@ -616,326 +708,338 @@ } }, { - "name": "redis-intel-float16-hnsw-m-16-ef-1024", + "name": "redis-intel-float16-hnsw-m-4-ef-32", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", "data_type": "FLOAT16", "hnsw_config": { - "M": 16, - "EF_CONSTRUCTION": 1024 + "M": 4, + "EF_CONSTRUCTION": 32 } }, "search_params": [ { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4 } }, { - "parallel": 100, + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 50, "search_params": { "ef": 32 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 64 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 512 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 1024 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 2048 } }, { - "parallel": 200, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 200, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8192 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 400, + "parallel": 200, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 400, + "parallel": 200, "search_params": { - "ef": 2048 + "ef": 8 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 16 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 32 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 64 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 128 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 256 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 512 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 1024 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 2048 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 32 + "ef": 8192 } - }, + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-8-ef-4", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 4 + } + }, + "search_params": [ { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 3200, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 3200, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 8 } - } - ], - "upload_params": { - "parallel": 128, - "algorithm": "hnsw", - "data_type": "FLOAT16" - } - }, - { - "name": "redis-intel-float16-hnsw-m-64-ef-16", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "hnsw", - "data_type": "FLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 16 - } - }, - "search_params": [ + }, { "parallel": 100, "search_params": { @@ -984,6 +1088,30 @@ "ef": 2048 } }, + { + "parallel": 100, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8 + } + }, { "parallel": 200, "search_params": { @@ -1033,196 +1161,252 @@ } }, { - "parallel": 400, + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-8-ef-8", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 8 + } + }, + "search_params": [ + { + "parallel": 50, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, "search_params": { "ef": 16 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 32 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 64 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 512 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 1024 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 2048 } }, { - "parallel": 800, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 800, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8192 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 2048 + "ef": 8 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 16 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 32 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 64 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 128 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 256 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 512 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 1024 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 2048 } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } } ], "upload_params": { @@ -1232,326 +1416,338 @@ } }, { - "name": "redis-intel-float16-hnsw-m-64-ef-512", + "name": "redis-intel-float16-hnsw-m-8-ef-16", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", "data_type": "FLOAT16", "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 512 + "M": 8, + "EF_CONSTRUCTION": 16 } }, "search_params": [ { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4 } }, { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8 } }, { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 16 } }, { - "parallel": 100, + "parallel": 50, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 512 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 1024 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 2048 } }, { - "parallel": 200, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 200, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8192 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 400, + "parallel": 200, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 400, + "parallel": 200, "search_params": { - "ef": 2048 + "ef": 8 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 16 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 32 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 64 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 128 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 256 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 512 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 1024 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 2048 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 32 + "ef": 8192 } - }, + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-8-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 8, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 3200, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 3200, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 8 } - } - ], - "upload_params": { - "parallel": 128, - "algorithm": "hnsw", - "data_type": "FLOAT16" - } - }, - { - "name": "redis-intel-float16-hnsw-m-64-ef-1024", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "hnsw", - "data_type": "FLOAT16", - "hnsw_config": { - "M": 64, - "EF_CONSTRUCTION": 1024 - } - }, - "search_params": [ + }, { "parallel": 100, "search_params": { @@ -1600,6 +1796,30 @@ "ef": 2048 } }, + { + "parallel": 100, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8 + } + }, { "parallel": 200, "search_params": { @@ -1649,196 +1869,252 @@ } }, { - "parallel": 400, + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-16-ef-4", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 4 + } + }, + "search_params": [ + { + "parallel": 50, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, "search_params": { "ef": 16 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 32 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 64 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 512 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 1024 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 2048 } }, { - "parallel": 800, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 800, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8192 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 2048 + "ef": 8 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 16 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 32 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 64 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 128 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 256 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 512 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 1024 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 2048 } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } } ], "upload_params": { @@ -1848,38 +2124,122 @@ } }, { - "name": "redis-intel-float16-hnsw-m-256-ef-16", + "name": "redis-intel-float16-hnsw-m-16-ef-8", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", "data_type": "FLOAT16", "hnsw_config": { - "M": 256, - "EF_CONSTRUCTION": 16 + "M": 16, + "EF_CONSTRUCTION": 8 } }, "search_params": [ { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4 } }, { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8 } }, { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 16 } }, { - "parallel": 100, + "parallel": 50, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 100, "search_params": { "ef": 128 } @@ -1908,6 +2268,30 @@ "ef": 2048 } }, + { + "parallel": 100, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8 + } + }, { "parallel": 200, "search_params": { @@ -1957,195 +2341,723 @@ } }, { - "parallel": 400, + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-16-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ + { + "parallel": 50, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, "search_params": { "ef": 16 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 32 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 64 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 512 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 1024 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 2048 } }, { - "parallel": 800, + "parallel": 50, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 100, "search_params": { "ef": 16 } }, { - "parallel": 800, + "parallel": 100, "search_params": { "ef": 32 } }, { - "parallel": 800, + "parallel": 100, "search_params": { "ef": 64 } }, { - "parallel": 800, + "parallel": 100, "search_params": { "ef": 128 } }, { - "parallel": 800, + "parallel": 100, "search_params": { "ef": 256 } }, { - "parallel": 800, + "parallel": 100, "search_params": { "ef": 512 } }, { - "parallel": 800, + "parallel": 100, "search_params": { "ef": 1024 } }, { - "parallel": 800, + "parallel": 100, "search_params": { "ef": 2048 } }, { - "parallel": 1600, + "parallel": 100, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 200, "search_params": { "ef": 16 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { "ef": 32 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { "ef": 64 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { "ef": 128 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { "ef": 256 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { "ef": 512 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { "ef": 1024 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { "ef": 2048 } }, { - "parallel": 3200, + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-16-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 50, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, "search_params": { "ef": 16 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { "ef": 32 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { "ef": 64 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 3200, + "parallel": 50, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-32-ef-4", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 4 + } + }, + "search_params": [ + { + "parallel": 50, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32 + } + }, + { + "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": 100, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 2048 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 16 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 64 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 128 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 256 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 512 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 1024 + } + }, + { + "parallel": 200, "search_params": { - "ef": 512 + "ef": 2048 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { - "ef": 1024 + "ef": 4096 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { - "ef": 2048 + "ef": 8192 } } ], @@ -2156,326 +3068,338 @@ } }, { - "name": "redis-intel-float16-hnsw-m-256-ef-512", + "name": "redis-intel-float16-hnsw-m-32-ef-8", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": "hnsw", "data_type": "FLOAT16", "hnsw_config": { - "M": 256, - "EF_CONSTRUCTION": 512 + "M": 32, + "EF_CONSTRUCTION": 8 } }, "search_params": [ { - "parallel": 100, + "parallel": 50, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, "search_params": { "ef": 16 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 32 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 64 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 512 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 1024 } }, { - "parallel": 100, + "parallel": 50, "search_params": { "ef": 2048 } }, { - "parallel": 200, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 200, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8192 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 200, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 400, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 400, + "parallel": 200, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 400, + "parallel": 200, "search_params": { - "ef": 2048 + "ef": 8 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 16 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 32 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 64 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 128 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 256 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 512 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 1024 } }, { - "parallel": 800, + "parallel": 200, "search_params": { "ef": 2048 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 32 + "ef": 8192 } - }, + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-32-ef-16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 16 + } + }, + "search_params": [ { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 1600, + "parallel": 50, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 3200, + "parallel": 50, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 3200, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 3200, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 8 } - } - ], - "upload_params": { - "parallel": 128, - "algorithm": "hnsw", - "data_type": "FLOAT16" - } - }, - { - "name": "redis-intel-float16-hnsw-m-256-ef-1024", - "engine": "redis", - "connection_params": {}, - "collection_params": { - "algorithm": "hnsw", - "data_type": "FLOAT16", - "hnsw_config": { - "M": 256, - "EF_CONSTRUCTION": 1024 - } - }, - "search_params": [ + }, { "parallel": 100, "search_params": { @@ -2524,6 +3448,30 @@ "ef": 2048 } }, + { + "parallel": 100, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8 + } + }, { "parallel": 200, "search_params": { @@ -2573,196 +3521,252 @@ } }, { - "parallel": 400, + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } + } + ], + "upload_params": { + "parallel": 128, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "redis-intel-float16-hnsw-m-32-ef-32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 32, + "EF_CONSTRUCTION": 32 + } + }, + "search_params": [ + { + "parallel": 50, + "search_params": { + "ef": 4 + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8 + } + }, + { + "parallel": 50, "search_params": { "ef": 16 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 32 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 64 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 128 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 256 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 512 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 1024 } }, { - "parallel": 400, + "parallel": 50, "search_params": { "ef": 2048 } }, { - "parallel": 800, + "parallel": 50, "search_params": { - "ef": 16 + "ef": 4096 } }, { - "parallel": 800, + "parallel": 50, "search_params": { - "ef": 32 + "ef": 8192 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 4 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 8 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 16 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 32 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 1024 + "ef": 64 } }, { - "parallel": 800, + "parallel": 100, "search_params": { - "ef": 2048 + "ef": 128 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 16 + "ef": 256 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 32 + "ef": 512 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 64 + "ef": 1024 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 128 + "ef": 2048 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 256 + "ef": 4096 } }, { - "parallel": 1600, + "parallel": 100, "search_params": { - "ef": 512 + "ef": 8192 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 1024 + "ef": 4 } }, { - "parallel": 1600, + "parallel": 200, "search_params": { - "ef": 2048 + "ef": 8 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 16 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 32 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 64 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 128 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 256 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 512 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 1024 } }, { - "parallel": 3200, + "parallel": 200, "search_params": { "ef": 2048 } + }, + { + "parallel": 200, + "search_params": { + "ef": 4096 + } + }, + { + "parallel": 200, + "search_params": { + "ef": 8192 + } } ], "upload_params": { From 47c08c9f6e3534d0bf059b9dea3ed517d5c86a42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Wed, 7 Aug 2024 04:00:35 -0700 Subject: [PATCH 137/209] Add REDIS_KEEP_DOCUMENTS and --only-configure flag --- engine/base_client/client.py | 4 +++- engine/clients/redis/config.py | 1 + engine/clients/redis/configure.py | 19 ++++++++++++++++++- run.py | 3 ++- 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index c071a9d1..62133b1a 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -85,6 +85,7 @@ def run_experiment( skip_upload: bool = False, skip_search: bool = False, skip_if_exists: bool = True, + only_configure: bool = False, parallels: [int] = [], ): execution_params = self.configurator.execution_params( @@ -102,10 +103,11 @@ def run_experiment( ) return - if not skip_upload: + if not (not only_configure and skip_upload): print("Experiment stage: Configure") self.configurator.configure(dataset) + if not skip_upload and not only_configure: print("Experiment stage: Upload") upload_stats = self.uploader.upload( distance=dataset.config.distance, records=reader.read_data() diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index a953deb0..e322511e 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -5,6 +5,7 @@ REDIS_USER = os.getenv("REDIS_USER", None) REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) +REDIS_KEEP_DOCUMENTS = os.getenv("REDIS_KEEP_DOCUMENTS", 0) GPU_STATS = bool(int(os.getenv("GPU_STATS", 0))) GPU_STATS_ENDPOINT = os.getenv("GPU_STATS_ENDPOINT", None) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 31b557cb..49992b25 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -1,4 +1,5 @@ import redis +import time from redis import Redis, RedisCluster from redis.commands.search.field import ( GeoField, @@ -16,6 +17,7 @@ REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, + REDIS_KEEP_DOCUMENTS, ) @@ -51,7 +53,10 @@ def clean(self): for conn in conns: index = conn.ft() try: - index.dropindex(delete_documents=True) + if REDIS_KEEP_DOCUMENTS: + index.dropindex(delete_documents=False) + else: + index.dropindex(delete_documents=True) except redis.ResponseError as e: str_err = e.__str__() if ( @@ -120,6 +125,18 @@ def recreate(self, dataset: Dataset, collection_params): except redis.ResponseError as e: if "Index already exists" not in e.__str__(): raise e + if REDIS_KEEP_DOCUMENTS: + percent_index = float(search_namespace.info().get("percent_indexed")) + while percent_index < 1.0: + print( + "waiting for index to be fully processed. current percent index: {}".format( + percent_index * 100.0 + ) + ) + time.sleep(5) + percent_index = float( + search_namespace.info().get("percent_indexed") + ) if __name__ == "__main__": diff --git a/run.py b/run.py index dbb9f178..49c60335 100644 --- a/run.py +++ b/run.py @@ -22,6 +22,7 @@ def run( skip_upload: bool = False, skip_search: bool = False, skip_if_exists: bool = True, + only_configure: bool = False, exit_on_error: bool = True, timeout: float = 86400.0, ): @@ -52,7 +53,7 @@ def run( try: with stopit.ThreadingTimeout(timeout) as tt: client.run_experiment( - dataset, skip_upload, skip_search, skip_if_exists, parallels + dataset, skip_upload, skip_search, skip_if_exists, only_configure, parallels ) client.delete_client() From 4d1b39c83318ad19d05d83a2ff1b1eb972e4d40b Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sun, 29 Sep 2024 23:15:34 +0100 Subject: [PATCH 138/209] Added h5-multi file reader --- benchmark/dataset.py | 241 +- dataset_reader/ann_h5_multi_reader.py | 131 + dataset_reader/splitter.py | 94 + dataset_reader/verify.py | 53 + datasets/datasets.json | 817 +++++ engine/base_client/client.py | 18 +- experiments/configurations/create-intel.py | 4 +- .../redis-intel-hnsw-single-node.json | 3100 +++++++++++++---- run.py | 18 +- run_laion_1b_upload.sh | 17 + 10 files changed, 3856 insertions(+), 637 deletions(-) create mode 100644 dataset_reader/ann_h5_multi_reader.py create mode 100644 dataset_reader/splitter.py create mode 100644 dataset_reader/verify.py create mode 100644 run_laion_1b_upload.sh diff --git a/benchmark/dataset.py b/benchmark/dataset.py index 41485369..8dc955e0 100644 --- a/benchmark/dataset.py +++ b/benchmark/dataset.py @@ -3,13 +3,16 @@ import tarfile import urllib.request from dataclasses import dataclass, field -from typing import Dict, Optional - +from typing import Dict, List, Optional, Union +import boto3 from benchmark import DATASETS_DIR from dataset_reader.ann_compound_reader import AnnCompoundReader from dataset_reader.ann_h5_reader import AnnH5Reader +from dataset_reader.ann_h5_multi_reader import AnnH5MultiReader from dataset_reader.base_reader import BaseReader from dataset_reader.json_reader import JSONReader +from tqdm import tqdm +from pathlib import Path @dataclass @@ -18,67 +21,231 @@ class DatasetConfig: distance: str name: str type: str - path: str - link: Optional[str] = None + path: Dict[ + str, List[Dict[str, str]] + ] # Now path is expected to handle multi-file structure for h5-multi + link: Optional[Dict[str, List[Dict[str, str]]]] = None schema: Optional[Dict[str, str]] = field(default_factory=dict) -READER_TYPE = {"h5": AnnH5Reader, "jsonl": JSONReader, "tar": AnnCompoundReader} +READER_TYPE = { + "h5": AnnH5Reader, + "h5-multi": AnnH5MultiReader, + "jsonl": JSONReader, + "tar": AnnCompoundReader, +} -# prepare progressbar +# Progress bar for urllib downloads def show_progress(block_num, block_size, total_size): percent = round(block_num * block_size / total_size * 100, 2) print(f"{percent} %", end="\r") +# Progress handler for S3 downloads +class S3Progress(tqdm): + def __init__(self, total_size): + super().__init__( + total=total_size, unit="B", unit_scale=True, desc="Downloading from S3" + ) + + def __call__(self, bytes_amount): + self.update(bytes_amount) + + class Dataset: - def __init__(self, config: dict): + def __init__( + self, + config: dict, + skip_upload: bool, + skip_search: bool, + upload_start_idx: int, + upload_end_idx: int, + ): self.config = DatasetConfig(**config) + self.skip_upload = skip_upload + self.skip_search = skip_search + self.upload_start_idx = upload_start_idx + self.upload_end_idx = upload_end_idx def download(self): - target_path = DATASETS_DIR / self.config.path - + if isinstance(self.config.path, dict): # Handle multi-file datasets + if self.skip_search is False: + # Download query files + for query in self.config.path.get("queries", []): + self._download_file(query["path"], query["link"]) + else: + print( + f"skipping to download query file given skip_search={self.skip_search}" + ) + if self.skip_upload is False: + # Download data files + for data in self.config.path.get("data", []): + start_idx = data["start_idx"] + end_idx = data["end_idx"] + data_path = data["path"] + data_link = data["link"] + if self.upload_start_idx >= end_idx: + print( + f"skipping downloading {data_path} from {data_link} given {self.upload_start_idx}>{end_idx}" + ) + continue + if self.upload_end_idx < start_idx: + print( + f"skipping downloading {data_path} from {data_link} given {self.upload_end_idx}<{start_idx}" + ) + continue + self._download_file(data["path"], data["link"]) + else: + print( + f"skipping to download data/upload files given skip_upload={self.skip_upload}" + ) + + else: # Handle single-file datasets + target_path = DATASETS_DIR / self.config.path + + if target_path.exists(): + print(f"{target_path} already exists") + return + + if self.config.link: + if is_s3_link(self.config.link): + print("Use boto3 to download from S3. Faster!") + self._download_from_s3(self.config.link, target_path) + else: + print(f"Downloading from URL {self.config.link}...") + tmp_path, _ = urllib.request.urlretrieve( + self.config.link, None, show_progress + ) + self._extract_or_move_file(tmp_path, target_path) + + def _download_file(self, relative_path: str, url: str): + target_path = DATASETS_DIR / relative_path if target_path.exists(): print(f"{target_path} already exists") return - if self.config.link: - print(f"Downloading {self.config.link}...") - tmp_path, _ = urllib.request.urlretrieve( - self.config.link, None, show_progress - ) + print(f"Downloading from {url} to {target_path}") + tmp_path, _ = urllib.request.urlretrieve(url, None, show_progress) + self._extract_or_move_file(tmp_path, target_path) - if self.config.link.endswith(".tgz") or self.config.link.endswith( - ".tar.gz" - ): - print(f"Extracting: {tmp_path} -> {target_path}") - (DATASETS_DIR / self.config.path).mkdir(exist_ok=True, parents=True) - file = tarfile.open(tmp_path) + def _extract_or_move_file(self, tmp_path, target_path): + if tmp_path.endswith(".tgz") or tmp_path.endswith(".tar.gz"): + print(f"Extracting: {tmp_path} -> {target_path}") + (DATASETS_DIR / self.config.path).mkdir(exist_ok=True, parents=True) + with tarfile.open(tmp_path) as file: file.extractall(target_path) - file.close() - os.remove(tmp_path) - else: - print(f"Moving: {tmp_path} -> {target_path}") - (DATASETS_DIR / self.config.path).parent.mkdir(exist_ok=True) - shutil.copy2(tmp_path, target_path) - os.remove(tmp_path) + os.remove(tmp_path) + else: + print(f"Moving: {tmp_path} -> {target_path}") + Path(target_path).parent.mkdir(exist_ok=True) + shutil.copy2(tmp_path, target_path) + os.remove(tmp_path) + + def _download_from_s3(self, link, target_path): + s3 = boto3.client("s3") + bucket_name, s3_key = parse_s3_url(link) + tmp_path = f"/tmp/{os.path.basename(s3_key)}" + + print( + f"Downloading from S3: {link}... bucket_name={bucket_name}, s3_key={s3_key}" + ) + object_info = s3.head_object(Bucket=bucket_name, Key=s3_key) + total_size = object_info["ContentLength"] + + with open(tmp_path, "wb") as f: + progress = S3Progress(total_size) + s3.download_fileobj(bucket_name, s3_key, f, Callback=progress) + + self._extract_or_move_file(tmp_path, target_path) def get_reader(self, normalize: bool) -> BaseReader: reader_class = READER_TYPE[self.config.type] - return reader_class(DATASETS_DIR / self.config.path, normalize=normalize) + + if self.config.type == "h5-multi": + # For h5-multi, we need to pass both data files and query file + data_files = self.config.path["data"] + for data_file_dict in data_files: + data_file_dict["path"] = DATASETS_DIR / data_file_dict["path"] + query_file = DATASETS_DIR / self.config.path["queries"][0]["path"] + return reader_class( + data_files=data_files, + query_file=query_file, + normalize=normalize, + skip_upload=self.skip_upload, + skip_search=self.skip_search, + ) + else: + # For single-file datasets + return reader_class(DATASETS_DIR / self.config.path, normalize=normalize) + + +def is_s3_link(link): + return link.startswith("s3://") or "s3.amazonaws.com" in link + + +def parse_s3_url(s3_url): + if s3_url.startswith("s3://"): + s3_parts = s3_url.replace("s3://", "").split("/", 1) + bucket_name = s3_parts[0] + s3_key = s3_parts[1] if len(s3_parts) > 1 else "" + else: + s3_parts = s3_url.replace("http://", "").replace("https://", "").split("/", 1) + + if ".s3.amazonaws.com" in s3_parts[0]: + bucket_name = s3_parts[0].split(".s3.amazonaws.com")[0] + s3_key = s3_parts[1] if len(s3_parts) > 1 else "" + else: + bucket_name = s3_parts[0] + s3_key = s3_parts[1] if len(s3_parts) > 1 else "" + + return bucket_name, s3_key if __name__ == "__main__": - dataset = Dataset( + dataset_s3_split = Dataset( { - "name": "glove-25-angular", - "vector_size": 25, - "distance": "Cosine", - "type": "h5", - "path": "glove-25-angular/glove-25-angular.hdf5", - "link": "http://ann-benchmarks.com/glove-25-angular.hdf5", - } + "name": "laion-img-emb-768d-1Billion-cosine", + "vector_size": 768, + "distance": "cosine", + "type": "h5-multi", + "path": { + "data": [ + { + "file_number": 1, + "path": "laion-1b/data/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "vector_range": "0-10000000", + "file_size": "30.7 GB", + }, + { + "file_number": 2, + "path": "laion-1b/data/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "vector_range": "90000000-100000000", + "file_size": "30.7 GB", + }, + { + "file_number": 3, + "path": "laion-1b/data/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "vector_range": "990000000-1000000000", + "file_size": "30.7 GB", + }, + ], + "queries": [ + { + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", + "file_size": "38.7 MB", + }, + ], + }, + }, + skip_upload=True, + skip_search=False, ) - dataset.download() + dataset_s3_split.download() + reader = dataset_s3_split.get_reader(normalize=False) + print(reader) # Outputs the AnnH5MultiReader instance diff --git a/dataset_reader/ann_h5_multi_reader.py b/dataset_reader/ann_h5_multi_reader.py new file mode 100644 index 00000000..5bd3e4b9 --- /dev/null +++ b/dataset_reader/ann_h5_multi_reader.py @@ -0,0 +1,131 @@ +from typing import Iterator, List +import h5py +import numpy as np +import os +from benchmark import DATASETS_DIR +from dataset_reader.base_reader import BaseReader, Query, Record + + +class AnnH5MultiReader(BaseReader): + def __init__( + self, + data_files: str, + query_file: str, + normalize: bool = False, + skip_upload: bool = False, + skip_search: bool = False, + ): + """ + Args: + data_dir (str): Directory containing the HDF5 data files. + query_file (str): Path to the HDF5 query file. + normalize (bool): Whether to normalize the vectors. + """ + self.data_files = data_files + self.query_file = query_file + self.normalize = normalize + self.skip_upload = skip_upload + self.skip_search = skip_search + + # # Load the list of data files (assumes they're named in a consistent format) + # self.data_files = sorted( + # [ + # os.path.join(self.data_dir, f) + # for f in os.listdir(self.data_dir) + # if f.endswith(".hdf5") + # ] + # ) + + def read_queries(self) -> Iterator[Query]: + """Reads the queries from the query file.""" + with h5py.File(self.query_file, "r") as data: + for vector, expected_result, expected_scores in zip( + data["test"], data["neighbors"], data["distances"] + ): + if self.normalize: + vector /= np.linalg.norm(vector) + yield Query( + vector=vector.tolist(), + meta_conditions=None, + expected_result=expected_result.tolist(), + expected_scores=expected_scores.tolist(), + ) + + def read_data(self, start_idx: int = 0, end_idx: int = None) -> Iterator[Record]: + """ + Reads the 'train' data vectors from multiple HDF5 files based on the specified range. + + Args: + start_idx (int): Start index for the range of vectors. + end_idx (int): End index for the range of vectors. + + Yields: + Record: A Record object for each vector in the specified range. + """ + if end_idx is None: + raise ValueError("You must specify an end index.") + + current_idx = start_idx + vectors_yielded = 0 + + for data_file in self.data_files: + # Extract the range of vectors covered by this file from the filename + file_start = data_file["start_idx"] + file_end = data_file["end_idx"] + path = data_file["path"] + + if current_idx >= end_idx: + break + + # Only read the file if it overlaps with the requested range + if file_start < end_idx and file_end > start_idx: + with h5py.File(path, "r") as data: + # Determine the slice to read from the current file + file_data_start = max(file_start, start_idx) - file_start + file_data_end = min(file_end, end_idx) - file_start + + train_vectors = data["train"][file_data_start:file_data_end] + for i, vector in enumerate(train_vectors): + if self.normalize: + vector /= np.linalg.norm(vector) + yield Record( + id=current_idx + vectors_yielded, + vector=vector.tolist(), + metadata=None, + ) + vectors_yielded += 1 + + +if __name__ == "__main__": + # Directory containing the data split into multiple parts + data_dir = os.path.join(DATASETS_DIR, "laion-1b", "data") + + data_files = sorted( + [os.path.join(data_dir, f) for f in os.listdir(data_dir) if f.endswith(".hdf5")] + ) + + # Path to the query file + query_file = os.path.join( + DATASETS_DIR, "laion-1b", "laion-img-emb-768d-1Billion-cosine-queries.hdf5" + ) + + reader = AnnH5MultiReader(data_dir, query_file, normalize=False) + + # Example of reading queries and counting them + print("Reading queries...") + query_count = sum(1 for _ in reader.read_queries()) + print(f"Number of queries: {query_count}") + + # Example of reading vectors from 10M to 30M and asserting the length + start_idx = 15_000_000 + end_idx = 16_000_001 + print(f"Reading vectors from {start_idx} to {end_idx}...") + data_vectors = list(reader.read_data(start_idx, end_idx)) + + # Assert the length matches the expected range + expected_length = end_idx - start_idx + actual_length = len(data_vectors) + assert ( + actual_length == expected_length + ), f"Expected {expected_length} vectors, but got {actual_length}" + print(f"Successfully read {actual_length} vectors.") diff --git a/dataset_reader/splitter.py b/dataset_reader/splitter.py new file mode 100644 index 00000000..6df62257 --- /dev/null +++ b/dataset_reader/splitter.py @@ -0,0 +1,94 @@ +import os +import h5py +import numpy as np +from tqdm import tqdm +import argparse + +CHUNK_SIZE = 20000 # Number of records to process at a time + + +def split_hdf5_file( + input_path, data_output_dir, start_idx, end_idx, part, normalize=False +): + """ + Split a specified range of the 'train' dataset from the HDF5 file into a single file. + + Args: + input_path (str): Path to the input HDF5 file. + data_output_dir (str): Directory where the output file will be saved. + start_idx (int): Start index of the dataset. + end_idx (int): End index of the dataset. + part (int): Part number for the output file naming. + normalize (bool): Whether to normalize the dataset or not. + """ + with h5py.File(input_path, "r") as data_file: + train_shape = data_file["train"].shape + print(f"Processing train data part {part}: elements {start_idx} to {end_idx}") + + # Define the output path for this part + data_output_path = os.path.join( + data_output_dir, + f"laion-img-emb-768d-1Billion-cosine-data-part{part}-{start_idx}_to_{end_idx}.hdf5", + ) + + with h5py.File(data_output_path, "w") as data_output: + train_dset = data_output.create_dataset( + "train", + shape=(end_idx - start_idx, train_shape[1]), + dtype=data_file["train"].dtype, + ) + + # Create a progress bar for the data splitting process + with tqdm( + total=end_idx - start_idx, + unit="vectors", + desc=f"Processing train data part {part}", + ) as pbar: + for i in range(start_idx, end_idx, CHUNK_SIZE): + chunk_end = min(i + CHUNK_SIZE, end_idx) + train_dset[i - start_idx : chunk_end - start_idx] = data_file[ + "train" + ][i:chunk_end] + pbar.update(chunk_end - i) + + print( + f"Train data part {part} (elements {start_idx} to {end_idx}) saved to {data_output_path}" + ) + + +if __name__ == "__main__": + # Parse command-line arguments + parser = argparse.ArgumentParser( + description="Split HDF5 train dataset into specified parts." + ) + parser.add_argument( + "--input_path", + required=False, + type=str, + default="laion-img-emb-768d-1Billion-cosine.hdf5", + help="Path to the input HDF5 file", + ) + parser.add_argument( + "--data_output_dir", + type=str, + required=False, + default="data", + help="Directory where the split dataset will be saved", + ) + parser.add_argument( + "--start_idx", type=int, help="Start index for the dataset range to process" + ) + parser.add_argument( + "--end_idx", type=int, help="End index for the dataset range to process" + ) + parser.add_argument("--part", type=int, help="Part number for the output file") + + args = parser.parse_args() + + # Ensure the output directory exists + os.makedirs(args.data_output_dir, exist_ok=True) + + # Split the dataset into the specified range + split_hdf5_file( + args.input_path, args.data_output_dir, args.start_idx, args.end_idx, args.part + ) diff --git a/dataset_reader/verify.py b/dataset_reader/verify.py new file mode 100644 index 00000000..80555699 --- /dev/null +++ b/dataset_reader/verify.py @@ -0,0 +1,53 @@ +import os +import h5py + +EXPECTED_VECTORS = 10_000_000 # Expected number of vectors per file + + +def verify_hdf5_files(directory): + """ + Verifies that each HDF5 file in the given directory contains 10 million vectors in the 'train' dataset. + + Args: + directory (str): Directory containing the HDF5 files to check. + """ + hdf_files = [f for f in os.listdir(directory) if f.endswith(".hdf5")] + + if not hdf_files: + print("No HDF5 files found in the directory.") + return + + all_verified = True + + for hdf_file in sorted(hdf_files): + file_path = os.path.join(directory, hdf_file) + + with h5py.File(file_path, "r") as data_file: + if "train" in data_file: + train_shape = data_file["train"].shape + num_vectors = train_shape[0] + print(f"Checking {hdf_file}: contains {num_vectors} vectors.") + + if num_vectors != EXPECTED_VECTORS: + print( + f"ERROR: {hdf_file} contains {num_vectors} vectors, expected {EXPECTED_VECTORS}." + ) + all_verified = False + else: + print(f"ERROR: 'train' dataset not found in {hdf_file}.") + all_verified = False + + if all_verified: + print( + "All HDF5 files verified successfully, each containing 10 million vectors." + ) + else: + print("Some files contain discrepancies. Please check the log above.") + + +if __name__ == "__main__": + # Define the path to the directory containing the HDF5 files + directory = "./data" # Replace with your actual directory + + # Verify the HDF5 files + verify_hdf5_files(directory) diff --git a/datasets/datasets.json b/datasets/datasets.json index 752bd4c3..cd1cf414 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -103,6 +103,823 @@ "path": "laion-img-emb-768/laion-img-emb-768-1G-cosine.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1G-cosine.hdf5" }, + { + "name": "laion-img-emb-768d-1Billion-cosine", + "vector_size": 25, + "distance": "cosine", + "type": "h5-multi", + "path": { + "data": [ + { + "file_number": "1", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "start_idx": 0, + "end_idx": 10000000, + "file_size": "30.7 GB" + }, + { + "file_number": "10", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "start_idx": 90000000, + "end_idx": 100000000, + "file_size": "30.7 GB" + }, + { + "file_number": "100", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "start_idx": 990000000, + "end_idx": 1000000000, + "file_size": "30.7 GB" + }, + { + "file_number": "11", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part11-100000000_to_110000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part11-100000000_to_110000000.hdf5", + "start_idx": 100000000, + "end_idx": 110000000, + "file_size": "30.7 GB" + }, + { + "file_number": "12", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part12-110000000_to_120000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part12-110000000_to_120000000.hdf5", + "start_idx": 110000000, + "end_idx": 120000000, + "file_size": "30.7 GB" + }, + { + "file_number": "13", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part13-120000000_to_130000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part13-120000000_to_130000000.hdf5", + "start_idx": 120000000, + "end_idx": 130000000, + "file_size": "30.7 GB" + }, + { + "file_number": "14", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part14-130000000_to_140000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part14-130000000_to_140000000.hdf5", + "start_idx": 130000000, + "end_idx": 140000000, + "file_size": "30.7 GB" + }, + { + "file_number": "15", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part15-140000000_to_150000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part15-140000000_to_150000000.hdf5", + "start_idx": 140000000, + "end_idx": 150000000, + "file_size": "30.7 GB" + }, + { + "file_number": "16", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part16-150000000_to_160000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part16-150000000_to_160000000.hdf5", + "start_idx": 150000000, + "end_idx": 160000000, + "file_size": "30.7 GB" + }, + { + "file_number": "17", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part17-160000000_to_170000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part17-160000000_to_170000000.hdf5", + "start_idx": 160000000, + "end_idx": 170000000, + "file_size": "30.7 GB" + }, + { + "file_number": "18", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part18-170000000_to_180000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part18-170000000_to_180000000.hdf5", + "start_idx": 170000000, + "end_idx": 180000000, + "file_size": "30.7 GB" + }, + { + "file_number": "19", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part19-180000000_to_190000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part19-180000000_to_190000000.hdf5", + "start_idx": 180000000, + "end_idx": 190000000, + "file_size": "30.7 GB" + }, + { + "file_number": "2", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part2-10000000_to_20000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part2-10000000_to_20000000.hdf5", + "start_idx": 10000000, + "end_idx": 20000000, + "file_size": "30.7 GB" + }, + { + "file_number": "20", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part20-190000000_to_200000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part20-190000000_to_200000000.hdf5", + "start_idx": 190000000, + "end_idx": 200000000, + "file_size": "30.7 GB" + }, + { + "file_number": "21", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part21-200000000_to_210000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part21-200000000_to_210000000.hdf5", + "start_idx": 200000000, + "end_idx": 210000000, + "file_size": "30.7 GB" + }, + { + "file_number": "22", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part22-210000000_to_220000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part22-210000000_to_220000000.hdf5", + "start_idx": 210000000, + "end_idx": 220000000, + "file_size": "30.7 GB" + }, + { + "file_number": "23", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part23-220000000_to_230000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part23-220000000_to_230000000.hdf5", + "start_idx": 220000000, + "end_idx": 230000000, + "file_size": "30.7 GB" + }, + { + "file_number": "24", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part24-230000000_to_240000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part24-230000000_to_240000000.hdf5", + "start_idx": 230000000, + "end_idx": 240000000, + "file_size": "30.7 GB" + }, + { + "file_number": "25", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part25-240000000_to_250000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part25-240000000_to_250000000.hdf5", + "start_idx": 240000000, + "end_idx": 250000000, + "file_size": "30.7 GB" + }, + { + "file_number": "26", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part26-250000000_to_260000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part26-250000000_to_260000000.hdf5", + "start_idx": 250000000, + "end_idx": 260000000, + "file_size": "30.7 GB" + }, + { + "file_number": "27", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part27-260000000_to_270000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part27-260000000_to_270000000.hdf5", + "start_idx": 260000000, + "end_idx": 270000000, + "file_size": "30.7 GB" + }, + { + "file_number": "28", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part28-270000000_to_280000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part28-270000000_to_280000000.hdf5", + "start_idx": 270000000, + "end_idx": 280000000, + "file_size": "30.7 GB" + }, + { + "file_number": "29", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part29-280000000_to_290000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part29-280000000_to_290000000.hdf5", + "start_idx": 280000000, + "end_idx": 290000000, + "file_size": "30.7 GB" + }, + { + "file_number": "3", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part3-20000000_to_30000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part3-20000000_to_30000000.hdf5", + "start_idx": 20000000, + "end_idx": 30000000, + "file_size": "30.7 GB" + }, + { + "file_number": "30", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part30-290000000_to_300000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part30-290000000_to_300000000.hdf5", + "start_idx": 290000000, + "end_idx": 300000000, + "file_size": "30.7 GB" + }, + { + "file_number": "31", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part31-300000000_to_310000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part31-300000000_to_310000000.hdf5", + "start_idx": 300000000, + "end_idx": 310000000, + "file_size": "30.7 GB" + }, + { + "file_number": "32", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part32-310000000_to_320000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part32-310000000_to_320000000.hdf5", + "start_idx": 310000000, + "end_idx": 320000000, + "file_size": "30.7 GB" + }, + { + "file_number": "33", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part33-320000000_to_330000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part33-320000000_to_330000000.hdf5", + "start_idx": 320000000, + "end_idx": 330000000, + "file_size": "30.7 GB" + }, + { + "file_number": "34", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part34-330000000_to_340000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part34-330000000_to_340000000.hdf5", + "start_idx": 330000000, + "end_idx": 340000000, + "file_size": "30.7 GB" + }, + { + "file_number": "35", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part35-340000000_to_350000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part35-340000000_to_350000000.hdf5", + "start_idx": 340000000, + "end_idx": 350000000, + "file_size": "30.7 GB" + }, + { + "file_number": "36", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part36-350000000_to_360000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part36-350000000_to_360000000.hdf5", + "start_idx": 350000000, + "end_idx": 360000000, + "file_size": "30.7 GB" + }, + { + "file_number": "37", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part37-360000000_to_370000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part37-360000000_to_370000000.hdf5", + "start_idx": 360000000, + "end_idx": 370000000, + "file_size": "30.7 GB" + }, + { + "file_number": "38", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part38-370000000_to_380000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part38-370000000_to_380000000.hdf5", + "start_idx": 370000000, + "end_idx": 380000000, + "file_size": "30.7 GB" + }, + { + "file_number": "39", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part39-380000000_to_390000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part39-380000000_to_390000000.hdf5", + "start_idx": 380000000, + "end_idx": 390000000, + "file_size": "30.7 GB" + }, + { + "file_number": "4", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part4-30000000_to_40000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part4-30000000_to_40000000.hdf5", + "start_idx": 30000000, + "end_idx": 40000000, + "file_size": "30.7 GB" + }, + { + "file_number": "40", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part40-390000000_to_400000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part40-390000000_to_400000000.hdf5", + "start_idx": 390000000, + "end_idx": 400000000, + "file_size": "30.7 GB" + }, + { + "file_number": "41", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part41-400000000_to_410000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part41-400000000_to_410000000.hdf5", + "start_idx": 400000000, + "end_idx": 410000000, + "file_size": "30.7 GB" + }, + { + "file_number": "42", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part42-410000000_to_420000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part42-410000000_to_420000000.hdf5", + "start_idx": 410000000, + "end_idx": 420000000, + "file_size": "30.7 GB" + }, + { + "file_number": "43", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part43-420000000_to_430000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part43-420000000_to_430000000.hdf5", + "start_idx": 420000000, + "end_idx": 430000000, + "file_size": "30.7 GB" + }, + { + "file_number": "44", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part44-430000000_to_440000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part44-430000000_to_440000000.hdf5", + "start_idx": 430000000, + "end_idx": 440000000, + "file_size": "30.7 GB" + }, + { + "file_number": "45", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part45-440000000_to_450000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part45-440000000_to_450000000.hdf5", + "start_idx": 440000000, + "end_idx": 450000000, + "file_size": "30.7 GB" + }, + { + "file_number": "46", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part46-450000000_to_460000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part46-450000000_to_460000000.hdf5", + "start_idx": 450000000, + "end_idx": 460000000, + "file_size": "30.7 GB" + }, + { + "file_number": "47", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part47-460000000_to_470000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part47-460000000_to_470000000.hdf5", + "start_idx": 460000000, + "end_idx": 470000000, + "file_size": "30.7 GB" + }, + { + "file_number": "48", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part48-470000000_to_480000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part48-470000000_to_480000000.hdf5", + "start_idx": 470000000, + "end_idx": 480000000, + "file_size": "30.7 GB" + }, + { + "file_number": "49", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part49-480000000_to_490000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part49-480000000_to_490000000.hdf5", + "start_idx": 480000000, + "end_idx": 490000000, + "file_size": "30.7 GB" + }, + { + "file_number": "5", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part5-40000000_to_50000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part5-40000000_to_50000000.hdf5", + "start_idx": 40000000, + "end_idx": 50000000, + "file_size": "30.7 GB" + }, + { + "file_number": "50", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part50-490000000_to_500000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part50-490000000_to_500000000.hdf5", + "start_idx": 490000000, + "end_idx": 500000000, + "file_size": "30.7 GB" + }, + { + "file_number": "51", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part51-500000000_to_510000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part51-500000000_to_510000000.hdf5", + "start_idx": 500000000, + "end_idx": 510000000, + "file_size": "30.7 GB" + }, + { + "file_number": "52", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part52-510000000_to_520000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part52-510000000_to_520000000.hdf5", + "start_idx": 510000000, + "end_idx": 520000000, + "file_size": "30.7 GB" + }, + { + "file_number": "53", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part53-520000000_to_530000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part53-520000000_to_530000000.hdf5", + "start_idx": 520000000, + "end_idx": 530000000, + "file_size": "30.7 GB" + }, + { + "file_number": "54", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part54-530000000_to_540000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part54-530000000_to_540000000.hdf5", + "start_idx": 530000000, + "end_idx": 540000000, + "file_size": "30.7 GB" + }, + { + "file_number": "55", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part55-540000000_to_550000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part55-540000000_to_550000000.hdf5", + "start_idx": 540000000, + "end_idx": 550000000, + "file_size": "30.7 GB" + }, + { + "file_number": "56", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part56-550000000_to_560000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part56-550000000_to_560000000.hdf5", + "start_idx": 550000000, + "end_idx": 560000000, + "file_size": "30.7 GB" + }, + { + "file_number": "57", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part57-560000000_to_570000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part57-560000000_to_570000000.hdf5", + "start_idx": 560000000, + "end_idx": 570000000, + "file_size": "30.7 GB" + }, + { + "file_number": "58", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part58-570000000_to_580000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part58-570000000_to_580000000.hdf5", + "start_idx": 570000000, + "end_idx": 580000000, + "file_size": "30.7 GB" + }, + { + "file_number": "59", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part59-580000000_to_590000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part59-580000000_to_590000000.hdf5", + "start_idx": 580000000, + "end_idx": 590000000, + "file_size": "30.7 GB" + }, + { + "file_number": "6", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part6-50000000_to_60000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part6-50000000_to_60000000.hdf5", + "start_idx": 50000000, + "end_idx": 60000000, + "file_size": "30.7 GB" + }, + { + "file_number": "60", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part60-590000000_to_600000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part60-590000000_to_600000000.hdf5", + "start_idx": 590000000, + "end_idx": 600000000, + "file_size": "30.7 GB" + }, + { + "file_number": "61", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part61-600000000_to_610000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part61-600000000_to_610000000.hdf5", + "start_idx": 600000000, + "end_idx": 610000000, + "file_size": "30.7 GB" + }, + { + "file_number": "62", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part62-610000000_to_620000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part62-610000000_to_620000000.hdf5", + "start_idx": 610000000, + "end_idx": 620000000, + "file_size": "30.7 GB" + }, + { + "file_number": "63", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part63-620000000_to_630000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part63-620000000_to_630000000.hdf5", + "start_idx": 620000000, + "end_idx": 630000000, + "file_size": "30.7 GB" + }, + { + "file_number": "64", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part64-630000000_to_640000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part64-630000000_to_640000000.hdf5", + "start_idx": 630000000, + "end_idx": 640000000, + "file_size": "30.7 GB" + }, + { + "file_number": "65", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part65-640000000_to_650000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part65-640000000_to_650000000.hdf5", + "start_idx": 640000000, + "end_idx": 650000000, + "file_size": "30.7 GB" + }, + { + "file_number": "66", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part66-650000000_to_660000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part66-650000000_to_660000000.hdf5", + "start_idx": 650000000, + "end_idx": 660000000, + "file_size": "30.7 GB" + }, + { + "file_number": "67", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part67-660000000_to_670000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part67-660000000_to_670000000.hdf5", + "start_idx": 660000000, + "end_idx": 670000000, + "file_size": "30.7 GB" + }, + { + "file_number": "68", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part68-670000000_to_680000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part68-670000000_to_680000000.hdf5", + "start_idx": 670000000, + "end_idx": 680000000, + "file_size": "30.7 GB" + }, + { + "file_number": "69", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part69-680000000_to_690000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part69-680000000_to_690000000.hdf5", + "start_idx": 680000000, + "end_idx": 690000000, + "file_size": "30.7 GB" + }, + { + "file_number": "7", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part7-60000000_to_70000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part7-60000000_to_70000000.hdf5", + "start_idx": 60000000, + "end_idx": 70000000, + "file_size": "30.7 GB" + }, + { + "file_number": "70", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part70-690000000_to_700000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part70-690000000_to_700000000.hdf5", + "start_idx": 690000000, + "end_idx": 700000000, + "file_size": "30.7 GB" + }, + { + "file_number": "71", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part71-700000000_to_710000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part71-700000000_to_710000000.hdf5", + "start_idx": 700000000, + "end_idx": 710000000, + "file_size": "30.7 GB" + }, + { + "file_number": "72", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part72-710000000_to_720000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part72-710000000_to_720000000.hdf5", + "start_idx": 710000000, + "end_idx": 720000000, + "file_size": "30.7 GB" + }, + { + "file_number": "73", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part73-720000000_to_730000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part73-720000000_to_730000000.hdf5", + "start_idx": 720000000, + "end_idx": 730000000, + "file_size": "30.7 GB" + }, + { + "file_number": "74", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part74-730000000_to_740000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part74-730000000_to_740000000.hdf5", + "start_idx": 730000000, + "end_idx": 740000000, + "file_size": "30.7 GB" + }, + { + "file_number": "75", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part75-740000000_to_750000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part75-740000000_to_750000000.hdf5", + "start_idx": 740000000, + "end_idx": 750000000, + "file_size": "30.7 GB" + }, + { + "file_number": "76", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part76-750000000_to_760000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part76-750000000_to_760000000.hdf5", + "start_idx": 750000000, + "end_idx": 760000000, + "file_size": "30.7 GB" + }, + { + "file_number": "77", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part77-760000000_to_770000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part77-760000000_to_770000000.hdf5", + "start_idx": 760000000, + "end_idx": 770000000, + "file_size": "30.7 GB" + }, + { + "file_number": "78", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part78-770000000_to_780000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part78-770000000_to_780000000.hdf5", + "start_idx": 770000000, + "end_idx": 780000000, + "file_size": "30.7 GB" + }, + { + "file_number": "79", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part79-780000000_to_790000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part79-780000000_to_790000000.hdf5", + "start_idx": 780000000, + "end_idx": 790000000, + "file_size": "30.7 GB" + }, + { + "file_number": "8", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part8-70000000_to_80000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part8-70000000_to_80000000.hdf5", + "start_idx": 70000000, + "end_idx": 80000000, + "file_size": "30.7 GB" + }, + { + "file_number": "80", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part80-790000000_to_800000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part80-790000000_to_800000000.hdf5", + "start_idx": 790000000, + "end_idx": 800000000, + "file_size": "30.7 GB" + }, + { + "file_number": "81", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part81-800000000_to_810000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part81-800000000_to_810000000.hdf5", + "start_idx": 800000000, + "end_idx": 810000000, + "file_size": "30.7 GB" + }, + { + "file_number": "82", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part82-810000000_to_820000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part82-810000000_to_820000000.hdf5", + "start_idx": 810000000, + "end_idx": 820000000, + "file_size": "30.7 GB" + }, + { + "file_number": "83", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part83-820000000_to_830000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part83-820000000_to_830000000.hdf5", + "start_idx": 820000000, + "end_idx": 830000000, + "file_size": "30.7 GB" + }, + { + "file_number": "84", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part84-830000000_to_840000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part84-830000000_to_840000000.hdf5", + "start_idx": 830000000, + "end_idx": 840000000, + "file_size": "30.7 GB" + }, + { + "file_number": "85", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part85-840000000_to_850000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part85-840000000_to_850000000.hdf5", + "start_idx": 840000000, + "end_idx": 850000000, + "file_size": "30.7 GB" + }, + { + "file_number": "86", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part86-850000000_to_860000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part86-850000000_to_860000000.hdf5", + "start_idx": 850000000, + "end_idx": 860000000, + "file_size": "30.7 GB" + }, + { + "file_number": "87", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part87-860000000_to_870000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part87-860000000_to_870000000.hdf5", + "start_idx": 860000000, + "end_idx": 870000000, + "file_size": "30.7 GB" + }, + { + "file_number": "88", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part88-870000000_to_880000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part88-870000000_to_880000000.hdf5", + "start_idx": 870000000, + "end_idx": 880000000, + "file_size": "30.7 GB" + }, + { + "file_number": "89", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part89-880000000_to_890000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part89-880000000_to_890000000.hdf5", + "start_idx": 880000000, + "end_idx": 890000000, + "file_size": "30.7 GB" + }, + { + "file_number": "9", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part9-80000000_to_90000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part9-80000000_to_90000000.hdf5", + "start_idx": 80000000, + "end_idx": 90000000, + "file_size": "30.7 GB" + }, + { + "file_number": "90", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part90-890000000_to_900000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part90-890000000_to_900000000.hdf5", + "start_idx": 890000000, + "end_idx": 900000000, + "file_size": "30.7 GB" + }, + { + "file_number": "91", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part91-900000000_to_910000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part91-900000000_to_910000000.hdf5", + "start_idx": 900000000, + "end_idx": 910000000, + "file_size": "30.7 GB" + }, + { + "file_number": "92", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part92-910000000_to_920000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part92-910000000_to_920000000.hdf5", + "start_idx": 910000000, + "end_idx": 920000000, + "file_size": "30.7 GB" + }, + { + "file_number": "93", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part93-920000000_to_930000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part93-920000000_to_930000000.hdf5", + "start_idx": 920000000, + "end_idx": 930000000, + "file_size": "30.7 GB" + }, + { + "file_number": "94", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part94-930000000_to_940000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part94-930000000_to_940000000.hdf5", + "start_idx": 930000000, + "end_idx": 940000000, + "file_size": "30.7 GB" + }, + { + "file_number": "95", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part95-940000000_to_950000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part95-940000000_to_950000000.hdf5", + "start_idx": 940000000, + "end_idx": 950000000, + "file_size": "30.7 GB" + }, + { + "file_number": "96", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part96-950000000_to_960000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part96-950000000_to_960000000.hdf5", + "start_idx": 950000000, + "end_idx": 960000000, + "file_size": "30.7 GB" + }, + { + "file_number": "97", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part97-960000000_to_970000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part97-960000000_to_970000000.hdf5", + "start_idx": 960000000, + "end_idx": 970000000, + "file_size": "30.7 GB" + }, + { + "file_number": "98", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part98-970000000_to_980000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part98-970000000_to_980000000.hdf5", + "start_idx": 970000000, + "end_idx": 980000000, + "file_size": "30.7 GB" + }, + { + "file_number": "99", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part99-980000000_to_990000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part99-980000000_to_990000000.hdf5", + "start_idx": 980000000, + "end_idx": 990000000, + "file_size": "30.7 GB" + } + ], + "queries": [ + { + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", + "link": "http://ann-benchmarks.com/glove-25-angular.hdf5", + "file_size": "38.7 MB" + } + ] + } +}, { "name": "gist-960-angular", "vector_size": 960, diff --git a/engine/base_client/client.py b/engine/base_client/client.py index c071a9d1..9c1fbbc2 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -62,17 +62,19 @@ def save_search_results( return result_path def save_upload_results( - self, dataset_name: str, results: dict, upload_params: dict + self, dataset_name: str, results: dict, upload_params: dict,upload_start_idx:int,upload_end_idx:int, ): now = datetime.now() timestamp = now.strftime("%Y-%m-%d-%H-%M-%S") - experiments_file = f"{self.name}-{dataset_name}-upload-{timestamp}.json" + experiments_file = f"{self.name}-{dataset_name}-upload-{upload_start_idx}-{upload_end_idx}-{timestamp}.json" with open(RESULTS_DIR / experiments_file, "w") as out: upload_stats = { "params": { "experiment": self.name, "engine": self.engine, "dataset": dataset_name, + "start_idx": upload_start_idx, + "end_idx": upload_end_idx, **upload_params, }, "results": results, @@ -86,11 +88,12 @@ def run_experiment( skip_search: bool = False, skip_if_exists: bool = True, parallels: [int] = [], + upload_start_idx: int = 0, + upload_end_idx: int = -1, ): execution_params = self.configurator.execution_params( distance=dataset.config.distance, vector_size=dataset.config.vector_size ) - reader = dataset.get_reader(execution_params.get("normalize", False)) if skip_if_exists: @@ -105,10 +108,12 @@ def run_experiment( if not skip_upload: print("Experiment stage: Configure") self.configurator.configure(dataset) - - print("Experiment stage: Upload") + range_max_str = ":" + if upload_end_idx > 0: + range_max_str += f"{upload_end_idx}" + print(f"Experiment stage: Upload. Vector range [{upload_start_idx}{range_max_str}]") upload_stats = self.uploader.upload( - distance=dataset.config.distance, records=reader.read_data() + distance=dataset.config.distance, records=reader.read_data(upload_start_idx,upload_end_idx) ) if not DETAILED_RESULTS: @@ -122,6 +127,7 @@ def run_experiment( **self.uploader.upload_params, **self.configurator.collection_params, }, + upload_start_idx,upload_end_idx, ) if not skip_search: diff --git a/experiments/configurations/create-intel.py b/experiments/configurations/create-intel.py index a26f3a6e..d9233f49 100644 --- a/experiments/configurations/create-intel.py +++ b/experiments/configurations/create-intel.py @@ -24,11 +24,11 @@ "data_type": data_type, }, } - for client in [50, 100, 200]: + for client in [1, 50, 100, 200]: for ef_runtime in ef_runtimes: test_config = { "parallel": client, - "search_params": {"ef": ef_runtime}, + "search_params": {"ef": ef_runtime, "data_type": data_type}, } config["search_params"].append(test_config) configs.append(config) diff --git a/experiments/configurations/redis-intel-hnsw-single-node.json b/experiments/configurations/redis-intel-hnsw-single-node.json index 8a5175b1..1c5e4bfc 100644 --- a/experiments/configurations/redis-intel-hnsw-single-node.json +++ b/experiments/configurations/redis-intel-hnsw-single-node.json @@ -12,220 +12,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -248,220 +368,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -484,220 +724,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -720,220 +1080,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -956,220 +1436,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -1193,219 +1793,339 @@ }, "search_params": [ { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { - "parallel": 50, + "parallel": 1, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -1428,220 +2148,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -1664,220 +2504,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -1900,220 +2860,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -2136,220 +3216,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -2372,220 +3572,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -2608,220 +3928,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -2844,220 +4284,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -3080,220 +4640,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -3316,220 +4996,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], @@ -3552,220 +5352,340 @@ } }, "search_params": [ + { + "parallel": 1, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 16, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 64, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 128, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 256, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 512, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 1024, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 8192, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 50, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4 + "ef": 4, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8 + "ef": 8, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 16 + "ef": 16, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 32 + "ef": 32, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 64 + "ef": 64, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 128 + "ef": 128, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 256 + "ef": 256, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 512 + "ef": 512, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 1024 + "ef": 1024, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 2048 + "ef": 2048, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 4096 + "ef": 4096, + "data_type": "FLOAT16" } }, { "parallel": 200, "search_params": { - "ef": 8192 + "ef": 8192, + "data_type": "FLOAT16" } } ], diff --git a/run.py b/run.py index dbb9f178..4d770b00 100644 --- a/run.py +++ b/run.py @@ -24,6 +24,8 @@ def run( skip_if_exists: bool = True, exit_on_error: bool = True, timeout: float = 86400.0, + upload_start_idx: int = 0, + upload_end_idx: int = -1, ): """ Example: @@ -47,12 +49,24 @@ 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 = Dataset( + dataset_config, + skip_upload, + skip_search, + upload_start_idx, + upload_end_idx, + ) dataset.download() try: with stopit.ThreadingTimeout(timeout) as tt: client.run_experiment( - dataset, skip_upload, skip_search, skip_if_exists, parallels + dataset, + skip_upload, + skip_search, + skip_if_exists, + parallels, + upload_start_idx, + upload_end_idx, ) client.delete_client() diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh new file mode 100644 index 00000000..5f3af834 --- /dev/null +++ b/run_laion_1b_upload.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +set -x + +part_size=10000000 # 10 million elements per part + +# Create the output directory if it doesn't exist + +for i in {0..99}; do + # Calculate the start and end indices for each part + start_idx=$((i * part_size)) + end_idx=$(((i + 1) * part_size)) + + # Launch each process in a new screen session + screen -dmS split_process_$i bash -c "python3 run.py --engines redis-intel-float16-hnsw-m-16-ef-32 --dataset laion-img-emb-768d-1Billion-cosine --skip-search --upload_start_idx $start_idx --upload_end_idx $end_idx --part $((i + 1))" +done + From 7e140c585387a5acd9b7f41378975be4c2f448ae Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 2 Oct 2024 13:23:50 +0100 Subject: [PATCH 139/209] Fixed positional arg issue --- engine/base_client/client.py | 3 ++- run_laion_1b_upload.sh | 5 ++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 9c1fbbc2..c78b65bc 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -127,7 +127,8 @@ def run_experiment( **self.uploader.upload_params, **self.configurator.collection_params, }, - upload_start_idx,upload_end_idx, + upload_start_idx=upload_start_idx, + upload_end_idx=upload_end_idx, ) if not skip_search: diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh index 5f3af834..a2337a7e 100644 --- a/run_laion_1b_upload.sh +++ b/run_laion_1b_upload.sh @@ -10,8 +10,7 @@ for i in {0..99}; do # Calculate the start and end indices for each part start_idx=$((i * part_size)) end_idx=$(((i + 1) * part_size)) - + # Launch each process in a new screen session - screen -dmS split_process_$i bash -c "python3 run.py --engines redis-intel-float16-hnsw-m-16-ef-32 --dataset laion-img-emb-768d-1Billion-cosine --skip-search --upload_start_idx $start_idx --upload_end_idx $end_idx --part $((i + 1))" + screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines redis-intel-float16-hnsw-m-16-ef-32 --dataset laion-img-emb-768d-1Billion-cosine --skip-search --upload_start_idx $start_idx --upload_end_idx $end_idx --part $((i + 1))" done - From 2d8e250746a831de8ebdd9625cc9a3278b1f3e8c Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 2 Oct 2024 13:28:26 +0100 Subject: [PATCH 140/209] Fixed some typos on loader script --- run_laion_1b_upload.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh index a2337a7e..9582122a 100644 --- a/run_laion_1b_upload.sh +++ b/run_laion_1b_upload.sh @@ -12,5 +12,5 @@ for i in {0..99}; do end_idx=$(((i + 1) * part_size)) # Launch each process in a new screen session - screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines redis-intel-float16-hnsw-m-16-ef-32 --dataset laion-img-emb-768d-1Billion-cosine --skip-search --upload_start_idx $start_idx --upload_end_idx $end_idx --part $((i + 1))" + screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines redis-intel-float16-hnsw-m-16-ef-32 --datasets laion-img-emb-768d-1Billion-cosine --skip-search --upload-start-idx $start_idx --upload-end-idx $end_idx " done From 6f50710d5dcd3b6093416f1a047b2ffb8939e7ef Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 2 Oct 2024 13:40:10 +0100 Subject: [PATCH 141/209] using pipeline 1 and batch size 1 on CE upload --- .../configurations/create-intel-ce-edition.py | 39 +++++++++++++++ .../redis-intel-hnsw-single-node.json | 48 ++++++++++++------- 2 files changed, 71 insertions(+), 16 deletions(-) create mode 100644 experiments/configurations/create-intel-ce-edition.py diff --git a/experiments/configurations/create-intel-ce-edition.py b/experiments/configurations/create-intel-ce-edition.py new file mode 100644 index 00000000..75477f3f --- /dev/null +++ b/experiments/configurations/create-intel-ce-edition.py @@ -0,0 +1,39 @@ +import json + +ms = [4, 8, 16, 32] +ef_constructs = [4, 8, 16, 32] +ef_runtimes = [4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192] +data_type = "FLOAT16" +for algo in ["hnsw"]: + configs = [] + for m in ms: + for ef_construct in ef_constructs: + config = { + "name": f"redis-intel-{data_type.lower()}-{algo}-m-{m}-ef-{ef_construct}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": algo, + "data_type": data_type, + f"{algo}_config": {"M": m, "EF_CONSTRUCTION": ef_construct}, + }, + "search_params": [], + "upload_params": { + "parallel": 1, + "batch_size": 1, + "algorithm": algo, + "data_type": data_type, + }, + } + for client in [1, 50, 100, 200]: + for ef_runtime in ef_runtimes: + test_config = { + "parallel": client, + "search_params": {"ef": ef_runtime, "data_type": data_type}, + } + config["search_params"].append(test_config) + configs.append(config) + fname = f"redis-intel-{algo}-single-node.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"created {len(configs)} configs for {fname}.") diff --git a/experiments/configurations/redis-intel-hnsw-single-node.json b/experiments/configurations/redis-intel-hnsw-single-node.json index 1c5e4bfc..9fffc764 100644 --- a/experiments/configurations/redis-intel-hnsw-single-node.json +++ b/experiments/configurations/redis-intel-hnsw-single-node.json @@ -350,7 +350,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -706,7 +707,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -1062,7 +1064,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -1418,7 +1421,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -1774,7 +1778,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -2130,7 +2135,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -2486,7 +2492,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -2842,7 +2849,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -3198,7 +3206,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -3554,7 +3563,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -3910,7 +3920,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -4266,7 +4277,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -4622,7 +4634,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -4978,7 +4991,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -5334,7 +5348,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } @@ -5690,7 +5705,8 @@ } ], "upload_params": { - "parallel": 128, + "parallel": 1, + "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" } From f9e4e2df01bbee0de982fe3ddf1061b50f17d556 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 09:16:17 +0100 Subject: [PATCH 142/209] Fixed laion-1b queries and dimension --- datasets/datasets.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datasets/datasets.json b/datasets/datasets.json index cd1cf414..f9728a68 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -105,7 +105,7 @@ }, { "name": "laion-img-emb-768d-1Billion-cosine", - "vector_size": 25, + "vector_size": 768, "distance": "cosine", "type": "h5-multi", "path": { @@ -914,7 +914,7 @@ "queries": [ { "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", - "link": "http://ann-benchmarks.com/glove-25-angular.hdf5", + "link": "https://s3.amazonaws.com/benchmarks.redislabs/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", "file_size": "38.7 MB" } ] From c0a5ad30a829f830f94246648a14ff0bd934b040 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 10:52:59 +0100 Subject: [PATCH 143/209] control the number of concurrent screen sessions on the 1b loader --- run_laion_1b_upload.sh | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh index 9582122a..15cf2ec6 100644 --- a/run_laion_1b_upload.sh +++ b/run_laion_1b_upload.sh @@ -3,14 +3,30 @@ set -x part_size=10000000 # 10 million elements per part +max_screens=5 # Maximum number of screens running simultaneously + +# Function to wait until the number of running screens is below the limit +wait_for_available_screen_slot() { + echo "waiting for avaiable screen." + while [ "$(screen -ls | grep -c loader_)" -ge "$max_screens" ]; do + sleep 15 # Wait for 15 seconds before checking again + done +} # Create the output directory if it doesn't exist for i in {0..99}; do + # Wait until there's an available screen slot + wait_for_available_screen_slot + # Calculate the start and end indices for each part start_idx=$((i * part_size)) end_idx=$(((i + 1) * part_size)) # Launch each process in a new screen session - screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines redis-intel-float16-hnsw-m-16-ef-32 --datasets laion-img-emb-768d-1Billion-cosine --skip-search --upload-start-idx $start_idx --upload-end-idx $end_idx " + screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines redis-intel-float16-hnsw-m-16-ef-32 --datasets laion-img-emb-768d-1Billion-cosine --skip-search --upload-start-idx $start_idx --upload-end-idx $end_idx" + + # Print progress + echo "Started screen loader_$i: uploading indices $start_idx to $end_idx" + echo "$((i+1))/100 processes started" done From 1448b729dfd6499d8c4c1fc3b5d22f4ac6e2ac2f Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 11:49:08 +0100 Subject: [PATCH 144/209] split hdf5 file into chunks for reads with less overhead --- dataset_reader/ann_h5_multi_reader.py | 31 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/dataset_reader/ann_h5_multi_reader.py b/dataset_reader/ann_h5_multi_reader.py index 5bd3e4b9..984d3883 100644 --- a/dataset_reader/ann_h5_multi_reader.py +++ b/dataset_reader/ann_h5_multi_reader.py @@ -51,7 +51,9 @@ def read_queries(self) -> Iterator[Query]: expected_scores=expected_scores.tolist(), ) - def read_data(self, start_idx: int = 0, end_idx: int = None) -> Iterator[Record]: + def read_data( + self, start_idx: int = 0, end_idx: int = None, chunk_size: int = 10_000 + ) -> Iterator[Record]: """ Reads the 'train' data vectors from multiple HDF5 files based on the specified range. @@ -80,20 +82,27 @@ def read_data(self, start_idx: int = 0, end_idx: int = None) -> Iterator[Record] # Only read the file if it overlaps with the requested range if file_start < end_idx and file_end > start_idx: with h5py.File(path, "r") as data: + train_vectors = data["train"] # Determine the slice to read from the current file file_data_start = max(file_start, start_idx) - file_start file_data_end = min(file_end, end_idx) - file_start - train_vectors = data["train"][file_data_start:file_data_end] - for i, vector in enumerate(train_vectors): - if self.normalize: - vector /= np.linalg.norm(vector) - yield Record( - id=current_idx + vectors_yielded, - vector=vector.tolist(), - metadata=None, - ) - vectors_yielded += 1 + # Read in chunks instead of the whole slice + for chunk_start in range( + file_data_start, file_data_end, chunk_size + ): + chunk_end = min(chunk_start + chunk_size, file_data_end) + vectors_chunk = train_vectors[chunk_start:chunk_end] + + for vector in vectors_chunk: + if self.normalize: + vector /= np.linalg.norm(vector) + yield Record( + id=current_idx + vectors_yielded, + vector=vector.tolist(), + metadata=None, + ) + vectors_yielded += 1 if __name__ == "__main__": From 0b01eb48a7288bd40fc9f5fa24e4ef0676084ce2 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 11:51:48 +0100 Subject: [PATCH 145/209] 5 clients per loader on CE loader --- .../configurations/create-intel-ce-edition.py | 2 +- .../redis-intel-hnsw-single-node.json | 32 +++++++++---------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/configurations/create-intel-ce-edition.py b/experiments/configurations/create-intel-ce-edition.py index 75477f3f..3d972d4b 100644 --- a/experiments/configurations/create-intel-ce-edition.py +++ b/experiments/configurations/create-intel-ce-edition.py @@ -19,7 +19,7 @@ }, "search_params": [], "upload_params": { - "parallel": 1, + "parallel":5, "batch_size": 1, "algorithm": algo, "data_type": data_type, diff --git a/experiments/configurations/redis-intel-hnsw-single-node.json b/experiments/configurations/redis-intel-hnsw-single-node.json index 9fffc764..ce7d5388 100644 --- a/experiments/configurations/redis-intel-hnsw-single-node.json +++ b/experiments/configurations/redis-intel-hnsw-single-node.json @@ -350,7 +350,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -707,7 +707,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -1064,7 +1064,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -1421,7 +1421,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -1778,7 +1778,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -2135,7 +2135,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -2492,7 +2492,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -2849,7 +2849,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -3206,7 +3206,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -3563,7 +3563,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -3920,7 +3920,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -4277,7 +4277,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -4634,7 +4634,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -4991,7 +4991,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -5348,7 +5348,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -5705,7 +5705,7 @@ } ], "upload_params": { - "parallel": 1, + "parallel": 5, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" From 5e3b711171e4112ddb34bb174f334dd7e59c99ce Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 13:36:48 +0100 Subject: [PATCH 146/209] Using 50 concurrent loaders on laion-1b --- run_laion_1b_upload.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh index 15cf2ec6..08fcae09 100644 --- a/run_laion_1b_upload.sh +++ b/run_laion_1b_upload.sh @@ -3,7 +3,7 @@ set -x part_size=10000000 # 10 million elements per part -max_screens=5 # Maximum number of screens running simultaneously +max_screens=50 # Maximum number of screens running simultaneously # Function to wait until the number of running screens is below the limit wait_for_available_screen_slot() { @@ -15,7 +15,7 @@ wait_for_available_screen_slot() { # Create the output directory if it doesn't exist -for i in {0..99}; do +for i in {10..99}; do # Wait until there's an available screen slot wait_for_available_screen_slot From 88552eb43f70da1bf1fc991c5daef8ce2b26e8a7 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 13:41:26 +0100 Subject: [PATCH 147/209] saving outputs of each loader --- run_laion_1b_upload.sh | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh index 08fcae09..dd64b42c 100644 --- a/run_laion_1b_upload.sh +++ b/run_laion_1b_upload.sh @@ -1,19 +1,19 @@ #!/bin/bash -set -x part_size=10000000 # 10 million elements per part max_screens=50 # Maximum number of screens running simultaneously # Function to wait until the number of running screens is below the limit wait_for_available_screen_slot() { - echo "waiting for avaiable screen." + echo "waiting for available screen." while [ "$(screen -ls | grep -c loader_)" -ge "$max_screens" ]; do sleep 15 # Wait for 15 seconds before checking again done } # Create the output directory if it doesn't exist +mkdir -p logs for i in {10..99}; do # Wait until there's an available screen slot @@ -23,8 +23,11 @@ for i in {10..99}; do start_idx=$((i * part_size)) end_idx=$(((i + 1) * part_size)) - # Launch each process in a new screen session - screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines redis-intel-float16-hnsw-m-16-ef-32 --datasets laion-img-emb-768d-1Billion-cosine --skip-search --upload-start-idx $start_idx --upload-end-idx $end_idx" + # Log file path + log_file="logs/loader_$i.log" + + # Launch each process in a new screen session and log stdout and stderr to the log file + screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines redis-intel-float16-hnsw-m-16-ef-32 --datasets laion-img-emb-768d-1Billion-cosine --skip-search --upload-start-idx $start_idx --upload-end-idx $end_idx &> $log_file" # Print progress echo "Started screen loader_$i: uploading indices $start_idx to $end_idx" From dca16d51fdb4d6c399ceee2af3130e248039df72 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 14:35:21 +0100 Subject: [PATCH 148/209] Adjust code for re-indexing --- engine/clients/redis/config.py | 2 +- engine/clients/redis/configure.py | 5 +- engine/clients/redis/upload.py | 88 ++++++++++++++++++------------- 3 files changed, 53 insertions(+), 42 deletions(-) diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index e322511e..8fcf04c2 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -5,7 +5,7 @@ REDIS_USER = os.getenv("REDIS_USER", None) REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) -REDIS_KEEP_DOCUMENTS = os.getenv("REDIS_KEEP_DOCUMENTS", 0) +REDIS_KEEP_DOCUMENTS = bool(os.getenv("REDIS_KEEP_DOCUMENTS", 0)) GPU_STATS = bool(int(os.getenv("GPU_STATS", 0))) GPU_STATS_ENDPOINT = os.getenv("GPU_STATS_ENDPOINT", None) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 49992b25..edcb20ae 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -53,10 +53,7 @@ def clean(self): for conn in conns: index = conn.ft() try: - if REDIS_KEEP_DOCUMENTS: - index.dropindex(delete_documents=False) - else: - index.dropindex(delete_documents=True) + index.dropindex(delete_documents=(not REDIS_KEEP_DOCUMENTS)) except redis.ResponseError as e: str_err = e.__str__() if ( diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 80fd12a0..39ecfa65 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -3,7 +3,7 @@ from ml_dtypes import bfloat16 import requests import json - +import random import numpy as np from redis import Redis, RedisCluster from engine.base_client.upload import BaseUploader @@ -14,6 +14,7 @@ REDIS_CLUSTER, GPU_STATS, GPU_STATS_ENDPOINT, + REDIS_KEEP_DOCUMENTS, ) from engine.clients.redis.helper import convert_to_redis_coords @@ -48,46 +49,50 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.np_data_type = np.float16 if cls.data_type == "BFLOAT16": cls.np_data_type = bfloat16 + cls._is_cluster = True if REDIS_CLUSTER else False @classmethod def upload_batch( cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] ): - p = cls.client.pipeline(transaction=False) - for i in range(len(ids)): - idx = ids[i] - vec = vectors[i] - meta = metadata[i] if metadata else {} - geopoints = {} - payload = {} - if meta is not None: - for k, v in meta.items(): - # This is a patch for arxiv-titles dataset where we have a list of "labels", and - # we want to index all of them under the same TAG field (whose separator is ';'). - if k == "labels": - payload[k] = ";".join(v) - if ( - v is not None - and not isinstance(v, dict) - and not isinstance(v, list) - ): - payload[k] = v - # Redis treats geopoints differently and requires putting them as - # a comma-separated string with lat and lon coordinates - geopoints = { - k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) - for k, v in meta.items() - if isinstance(v, dict) - } - cls.client.hset( - str(idx), - mapping={ - "vector": np.array(vec).astype(cls.np_data_type).tobytes(), - **payload, - **geopoints, - }, - ) - p.execute() + # if we don't delete the docs we can skip sending them again + # By default we always send the docs + if REDIS_KEEP_DOCUMENTS is False: + p = cls.client.pipeline(transaction=False) + for i in range(len(ids)): + idx = ids[i] + vec = vectors[i] + meta = metadata[i] if metadata else {} + geopoints = {} + payload = {} + if meta is not None: + for k, v in meta.items(): + # This is a patch for arxiv-titles dataset where we have a list of "labels", and + # we want to index all of them under the same TAG field (whose separator is ';'). + if k == "labels": + payload[k] = ";".join(v) + if ( + v is not None + and not isinstance(v, dict) + and not isinstance(v, list) + ): + payload[k] = v + # Redis treats geopoints differently and requires putting them as + # a comma-separated string with lat and lon coordinates + geopoints = { + k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) + for k, v in meta.items() + if isinstance(v, dict) + } + cls.client.hset( + str(idx), + mapping={ + "vector": np.array(vec).astype(cls.np_data_type).tobytes(), + **payload, + **geopoints, + }, + ) + p.execute() @classmethod def post_upload(cls, _distance): @@ -120,7 +125,16 @@ def post_upload(cls, _distance): return {} def get_memory_usage(cls): - used_memory = cls.client_decode.info("memory")["used_memory"] + used_memory = [] + conns = [cls.client_decode] + if cls._is_cluster: + conns = [ + cls.client_decode.get_redis_connection(node) + for node in cls.client_decode.get_primaries() + ] + for conn in conns: + used_memory_shard = conn.info("memory")["used_memory"] + used_memory.append(used_memory_shard) index_info = {} device_info = {} if cls.algorithm != "HNSW" and cls.algorithm != "FLAT": From 7d53dab2a6ed28354b05f59d6578f72e826d2cce Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 18:47:17 +0100 Subject: [PATCH 149/209] increase client count per runner --- engine/clients/redis/upload.py | 6 ++-- .../configurations/create-intel-ce-edition.py | 2 +- .../redis-intel-hnsw-single-node.json | 32 +++++++++---------- 3 files changed, 20 insertions(+), 20 deletions(-) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 39ecfa65..b7813897 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -58,7 +58,7 @@ def upload_batch( # if we don't delete the docs we can skip sending them again # By default we always send the docs if REDIS_KEEP_DOCUMENTS is False: - p = cls.client.pipeline(transaction=False) + #p = cls.client.pipeline(transaction=False) for i in range(len(ids)): idx = ids[i] vec = vectors[i] @@ -84,7 +84,7 @@ def upload_batch( for k, v in meta.items() if isinstance(v, dict) } - cls.client.hset( + cls.client.hsetnx( str(idx), mapping={ "vector": np.array(vec).astype(cls.np_data_type).tobytes(), @@ -92,7 +92,7 @@ def upload_batch( **geopoints, }, ) - p.execute() + #p.execute() @classmethod def post_upload(cls, _distance): diff --git a/experiments/configurations/create-intel-ce-edition.py b/experiments/configurations/create-intel-ce-edition.py index 3d972d4b..c451a683 100644 --- a/experiments/configurations/create-intel-ce-edition.py +++ b/experiments/configurations/create-intel-ce-edition.py @@ -19,7 +19,7 @@ }, "search_params": [], "upload_params": { - "parallel":5, + "parallel":10, "batch_size": 1, "algorithm": algo, "data_type": data_type, diff --git a/experiments/configurations/redis-intel-hnsw-single-node.json b/experiments/configurations/redis-intel-hnsw-single-node.json index ce7d5388..609efeea 100644 --- a/experiments/configurations/redis-intel-hnsw-single-node.json +++ b/experiments/configurations/redis-intel-hnsw-single-node.json @@ -350,7 +350,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -707,7 +707,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -1064,7 +1064,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -1421,7 +1421,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -1778,7 +1778,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -2135,7 +2135,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -2492,7 +2492,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -2849,7 +2849,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -3206,7 +3206,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -3563,7 +3563,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -3920,7 +3920,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -4277,7 +4277,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -4634,7 +4634,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -4991,7 +4991,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -5348,7 +5348,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" @@ -5705,7 +5705,7 @@ } ], "upload_params": { - "parallel": 5, + "parallel": 10, "batch_size": 1, "algorithm": "hnsw", "data_type": "FLOAT16" From 23e23010f11a97cc8f13c7c6c98079d65699ed8e Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 18:49:04 +0100 Subject: [PATCH 150/209] updated upload runner --- run_laion_1b_upload.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh index dd64b42c..4794e80b 100644 --- a/run_laion_1b_upload.sh +++ b/run_laion_1b_upload.sh @@ -2,7 +2,7 @@ part_size=10000000 # 10 million elements per part -max_screens=50 # Maximum number of screens running simultaneously +max_screens=100 # Maximum number of screens running simultaneously # Function to wait until the number of running screens is below the limit wait_for_available_screen_slot() { @@ -15,7 +15,7 @@ wait_for_available_screen_slot() { # Create the output directory if it doesn't exist mkdir -p logs -for i in {10..99}; do +for i in {0..99}; do # Wait until there's an available screen slot wait_for_available_screen_slot From 38fb0c6523dbc4a8baec34a2146f0b7ab02e75ca Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 18:49:11 +0100 Subject: [PATCH 151/209] updated upload runner --- run_laion_1b_upload.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh index 4794e80b..4970d4b4 100644 --- a/run_laion_1b_upload.sh +++ b/run_laion_1b_upload.sh @@ -13,7 +13,7 @@ wait_for_available_screen_slot() { } # Create the output directory if it doesn't exist -mkdir -p logs +mkdir -p logs-new for i in {0..99}; do # Wait until there's an available screen slot @@ -24,7 +24,7 @@ for i in {0..99}; do end_idx=$(((i + 1) * part_size)) # Log file path - log_file="logs/loader_$i.log" + log_file="logs-new/loader_$i.log" # Launch each process in a new screen session and log stdout and stderr to the log file screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines redis-intel-float16-hnsw-m-16-ef-32 --datasets laion-img-emb-768d-1Billion-cosine --skip-search --upload-start-idx $start_idx --upload-end-idx $end_idx &> $log_file" From 6ba28d44be80699a1e10c26528e2bf967413ea23 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Thu, 3 Oct 2024 18:52:26 +0100 Subject: [PATCH 152/209] using hsetnx to speedup load in case of vector present --- engine/clients/redis/upload.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index b7813897..33acaef3 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -86,11 +86,13 @@ def upload_batch( } cls.client.hsetnx( str(idx), - mapping={ - "vector": np.array(vec).astype(cls.np_data_type).tobytes(), - **payload, - **geopoints, - }, + "vector", + np.array(vec).astype(cls.np_data_type).tobytes() + # mapping={ + # "vector": np.array(vec).astype(cls.np_data_type).tobytes(), + # **payload, + # **geopoints, + # }, ) #p.execute() From e3386befa2fa6fb885488c067f4e449784257b3d Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 4 Oct 2024 11:03:18 +0100 Subject: [PATCH 153/209] logging missing keys --- engine/clients/redis/upload.py | 68 +++++++++++++++++----------------- 1 file changed, 35 insertions(+), 33 deletions(-) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 33acaef3..9b4f3f1d 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -61,39 +61,41 @@ def upload_batch( #p = cls.client.pipeline(transaction=False) for i in range(len(ids)): idx = ids[i] - vec = vectors[i] - meta = metadata[i] if metadata else {} - geopoints = {} - payload = {} - if meta is not None: - for k, v in meta.items(): - # This is a patch for arxiv-titles dataset where we have a list of "labels", and - # we want to index all of them under the same TAG field (whose separator is ';'). - if k == "labels": - payload[k] = ";".join(v) - if ( - v is not None - and not isinstance(v, dict) - and not isinstance(v, list) - ): - payload[k] = v - # Redis treats geopoints differently and requires putting them as - # a comma-separated string with lat and lon coordinates - geopoints = { - k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) - for k, v in meta.items() - if isinstance(v, dict) - } - cls.client.hsetnx( - str(idx), - "vector", - np.array(vec).astype(cls.np_data_type).tobytes() - # mapping={ - # "vector": np.array(vec).astype(cls.np_data_type).tobytes(), - # **payload, - # **geopoints, - # }, - ) + vector_key = str(idx) + if cls.client.exists(vector_key) is False: + print(f"Setting missing key: {vector_key}") + vec = vectors[i] + meta = metadata[i] if metadata else {} + geopoints = {} + payload = {} + if meta is not None: + for k, v in meta.items(): + # This is a patch for arxiv-titles dataset where we have a list of "labels", and + # we want to index all of them under the same TAG field (whose separator is ';'). + if k == "labels": + payload[k] = ";".join(v) + if ( + v is not None + and not isinstance(v, dict) + and not isinstance(v, list) + ): + payload[k] = v + # Redis treats geopoints differently and requires putting them as + # a comma-separated string with lat and lon coordinates + geopoints = { + k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) + for k, v in meta.items() + if isinstance(v, dict) + } + cls.client.hset( + vector_key, + mapping={ + "vector": np.array(vec).astype(cls.np_data_type).tobytes(), + **payload, + **geopoints, + }, + ) + #p.execute() @classmethod From 946ff604c4afa5a7a1ba1bf14487ad03e7dce546 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 4 Oct 2024 11:26:48 +0100 Subject: [PATCH 154/209] Setting REDIS_KEEP_DOCUMENTS=1 as default --- engine/clients/redis/config.py | 2 +- engine/clients/redis/upload.py | 77 ++++++++++++++++------------------ 2 files changed, 36 insertions(+), 43 deletions(-) diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index 8fcf04c2..2fbcbf64 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -5,7 +5,7 @@ REDIS_USER = os.getenv("REDIS_USER", None) REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) -REDIS_KEEP_DOCUMENTS = bool(os.getenv("REDIS_KEEP_DOCUMENTS", 0)) +REDIS_KEEP_DOCUMENTS = bool(os.getenv("REDIS_KEEP_DOCUMENTS", 1)) GPU_STATS = bool(int(os.getenv("GPU_STATS", 0))) GPU_STATS_ENDPOINT = os.getenv("GPU_STATS_ENDPOINT", None) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 9b4f3f1d..3caa2876 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -55,48 +55,41 @@ def init_client(cls, host, distance, connection_params, upload_params): def upload_batch( cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] ): - # if we don't delete the docs we can skip sending them again - # By default we always send the docs - if REDIS_KEEP_DOCUMENTS is False: - #p = cls.client.pipeline(transaction=False) - for i in range(len(ids)): - idx = ids[i] - vector_key = str(idx) - if cls.client.exists(vector_key) is False: - print(f"Setting missing key: {vector_key}") - vec = vectors[i] - meta = metadata[i] if metadata else {} - geopoints = {} - payload = {} - if meta is not None: - for k, v in meta.items(): - # This is a patch for arxiv-titles dataset where we have a list of "labels", and - # we want to index all of them under the same TAG field (whose separator is ';'). - if k == "labels": - payload[k] = ";".join(v) - if ( - v is not None - and not isinstance(v, dict) - and not isinstance(v, list) - ): - payload[k] = v - # Redis treats geopoints differently and requires putting them as - # a comma-separated string with lat and lon coordinates - geopoints = { - k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) - for k, v in meta.items() - if isinstance(v, dict) - } - cls.client.hset( - vector_key, - mapping={ - "vector": np.array(vec).astype(cls.np_data_type).tobytes(), - **payload, - **geopoints, - }, - ) - - #p.execute() + for i in range(len(ids)): + idx = ids[i] + vector_key = str(idx) + vec = vectors[i] + meta = metadata[i] if metadata else {} + geopoints = {} + payload = {} + if meta is not None: + for k, v in meta.items(): + # This is a patch for arxiv-titles dataset where we have a list of "labels", and + # we want to index all of them under the same TAG field (whose separator is ';'). + if k == "labels": + payload[k] = ";".join(v) + if ( + v is not None + and not isinstance(v, dict) + and not isinstance(v, list) + ): + payload[k] = v + # Redis treats geopoints differently and requires putting them as + # a comma-separated string with lat and lon coordinates + geopoints = { + k: ",".join(map(str, convert_to_redis_coords(v["lon"], v["lat"]))) + for k, v in meta.items() + if isinstance(v, dict) + } + cls.client.hset( + vector_key, + mapping={ + "vector": np.array(vec).astype(cls.np_data_type).tobytes(), + **payload, + **geopoints, + }, + ) + @classmethod def post_upload(cls, _distance): From 32b38432ccb5423238a5bd102e1eefd2aa8fc9cb Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Fri, 4 Oct 2024 11:35:10 +0100 Subject: [PATCH 155/209] Setting REDIS_KEEP_DOCUMENTS=1 as default --- engine/clients/redis/configure.py | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index edcb20ae..5f0f8e51 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -66,7 +66,8 @@ def clean(self): print( "Given the FT.DROPINDEX command failed, we're flushing the entire DB..." ) - conn.flushall() + if REDIS_KEEP_DOCUMENTS is False: + conn.flushall() else: raise e @@ -122,18 +123,6 @@ def recreate(self, dataset: Dataset, collection_params): except redis.ResponseError as e: if "Index already exists" not in e.__str__(): raise e - if REDIS_KEEP_DOCUMENTS: - percent_index = float(search_namespace.info().get("percent_indexed")) - while percent_index < 1.0: - print( - "waiting for index to be fully processed. current percent index: {}".format( - percent_index * 100.0 - ) - ) - time.sleep(5) - percent_index = float( - search_namespace.info().get("percent_indexed") - ) if __name__ == "__main__": From 2617cb405395bd01def8f7840fc0cf58c662b8ac Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sat, 12 Oct 2024 08:27:22 +0100 Subject: [PATCH 156/209] Added MAX_QUERIES feature --- engine/base_client/search.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index a58d02d0..aa511be5 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -5,10 +5,13 @@ import numpy as np import tqdm +import os from dataset_reader.base_reader import Query DEFAULT_TOP = 10 +MAX_QUERIES = int(os.getenv("MAX_QUERIES", -1)) + class BaseSearcher: @@ -68,11 +71,15 @@ def search_all( self.setup_search() search_one = functools.partial(self.__class__._search_one, top=top) + used_queries = queries + if MAX_QUERIES > 0: + used_queries = queries[0:MAX_QUERIES-1] + print(f"limitting queries to [0:{MAX_QUERIES}]") if parallel == 1: start = time.perf_counter() precisions, latencies = list( - zip(*[search_one(query) for query in tqdm.tqdm(queries)]) + zip(*[search_one(query) for query in tqdm.tqdm(used_queries)]) ) else: ctx = get_context(self.get_mp_start_method()) @@ -91,7 +98,7 @@ def search_all( time.sleep(15) # Wait for all processes to start start = time.perf_counter() precisions, latencies = list( - zip(*pool.imap_unordered(search_one, iterable=tqdm.tqdm(queries))) + zip(*pool.imap_unordered(search_one, iterable=tqdm.tqdm(used_queries))) ) total_time = time.perf_counter() - start From 03b742b38dc981377cec8fd3b9c6ada69330f8c1 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sat, 12 Oct 2024 08:31:43 +0100 Subject: [PATCH 157/209] fixed MAX_QUERIES --- engine/base_client/search.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index aa511be5..a52ab47d 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -2,6 +2,7 @@ import time from multiprocessing import get_context from typing import Iterable, List, Optional, Tuple +import itertools import numpy as np import tqdm @@ -72,9 +73,11 @@ def search_all( search_one = functools.partial(self.__class__._search_one, top=top) used_queries = queries + + if MAX_QUERIES > 0: - used_queries = queries[0:MAX_QUERIES-1] - print(f"limitting queries to [0:{MAX_QUERIES}]") + used_queries = itertools.islice(queries, MAX_QUERIES) + print(f"Limiting queries to [0:{MAX_QUERIES-1}]") if parallel == 1: start = time.perf_counter() From 353e125b138525c151f4444a1adc4d56dff75e1b Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Sun, 13 Oct 2024 17:15:47 +0100 Subject: [PATCH 158/209] Added REDIS_JUST_INDEX config to avoid resending duplicate data on the wire --- engine/clients/redis/config.py | 1 + engine/clients/redis/upload.py | 4 +- .../configurations/create-intel-ce-edition.py | 2 +- .../redis-intel-hnsw-single-node.json | 908 +++++++++++++++++- run_laion_1b_upload.sh | 3 +- 5 files changed, 909 insertions(+), 9 deletions(-) diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index 2fbcbf64..4c101bcf 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -6,6 +6,7 @@ REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) REDIS_KEEP_DOCUMENTS = bool(os.getenv("REDIS_KEEP_DOCUMENTS", 1)) +REDIS_JUST_INDEX = bool(os.getenv("REDIS_JUST_INDEX", 0)) GPU_STATS = bool(int(os.getenv("GPU_STATS", 0))) GPU_STATS_ENDPOINT = os.getenv("GPU_STATS_ENDPOINT", None) diff --git a/engine/clients/redis/upload.py b/engine/clients/redis/upload.py index 3caa2876..e76e7da3 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -14,7 +14,7 @@ REDIS_CLUSTER, GPU_STATS, GPU_STATS_ENDPOINT, - REDIS_KEEP_DOCUMENTS, + REDIS_JUST_INDEX, ) from engine.clients.redis.helper import convert_to_redis_coords @@ -55,6 +55,8 @@ def init_client(cls, host, distance, connection_params, upload_params): def upload_batch( cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] ): + if REDIS_JUST_INDEX: + return for i in range(len(ids)): idx = ids[i] vector_key = str(idx) diff --git a/experiments/configurations/create-intel-ce-edition.py b/experiments/configurations/create-intel-ce-edition.py index c451a683..61dcbf2c 100644 --- a/experiments/configurations/create-intel-ce-edition.py +++ b/experiments/configurations/create-intel-ce-edition.py @@ -2,7 +2,7 @@ ms = [4, 8, 16, 32] ef_constructs = [4, 8, 16, 32] -ef_runtimes = [4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192] +ef_runtimes = [4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768] data_type = "FLOAT16" for algo in ["hnsw"]: configs = [] diff --git a/experiments/configurations/redis-intel-hnsw-single-node.json b/experiments/configurations/redis-intel-hnsw-single-node.json index 609efeea..d791e289 100644 --- a/experiments/configurations/redis-intel-hnsw-single-node.json +++ b/experiments/configurations/redis-intel-hnsw-single-node.json @@ -96,6 +96,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -180,6 +194,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -264,6 +292,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -347,6 +389,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -453,6 +509,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -537,6 +607,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -621,6 +705,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -704,6 +802,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -810,6 +922,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -894,6 +1020,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -978,6 +1118,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -1061,6 +1215,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -1167,6 +1335,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -1251,6 +1433,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -1335,6 +1531,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -1418,6 +1628,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -1524,6 +1748,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -1608,6 +1846,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -1692,6 +1944,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -1775,6 +2041,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -1881,6 +2161,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -1966,14 +2260,28 @@ } }, { - "parallel": 100, + "parallel": 50, "search_params": { - "ef": 4, + "ef": 16384, "data_type": "FLOAT16" } }, { - "parallel": 100, + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, "search_params": { "ef": 8, "data_type": "FLOAT16" @@ -2049,6 +2357,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -2132,6 +2454,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -2238,6 +2574,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -2322,6 +2672,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -2406,6 +2770,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -2489,6 +2867,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -2595,6 +2987,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -2679,6 +3085,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -2763,6 +3183,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -2846,6 +3280,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -2952,6 +3400,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -3036,6 +3498,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -3120,6 +3596,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -3203,6 +3693,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -3309,6 +3813,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -3393,6 +3911,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -3477,6 +4009,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -3560,6 +4106,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -3666,6 +4226,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -3750,6 +4324,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -3816,21 +4404,35 @@ { "parallel": 100, "search_params": { - "ef": 2048, + "ef": 2048, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 4096, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 8192, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 4096, + "ef": 16384, "data_type": "FLOAT16" } }, { "parallel": 100, "search_params": { - "ef": 8192, + "ef": 32768, "data_type": "FLOAT16" } }, @@ -3917,6 +4519,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -4023,6 +4639,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -4107,6 +4737,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -4191,6 +4835,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -4274,6 +4932,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -4380,6 +5052,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -4464,6 +5150,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -4548,6 +5248,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -4631,6 +5345,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -4737,6 +5465,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -4821,6 +5563,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -4905,6 +5661,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -4988,6 +5758,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -5094,6 +5878,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -5178,6 +5976,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -5262,6 +6074,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -5345,6 +6171,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { @@ -5451,6 +6291,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 1, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 1, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 50, "search_params": { @@ -5535,6 +6389,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 50, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 50, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 100, "search_params": { @@ -5619,6 +6487,20 @@ "data_type": "FLOAT16" } }, + { + "parallel": 100, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 100, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } + }, { "parallel": 200, "search_params": { @@ -5702,6 +6584,20 @@ "ef": 8192, "data_type": "FLOAT16" } + }, + { + "parallel": 200, + "search_params": { + "ef": 16384, + "data_type": "FLOAT16" + } + }, + { + "parallel": 200, + "search_params": { + "ef": 32768, + "data_type": "FLOAT16" + } } ], "upload_params": { diff --git a/run_laion_1b_upload.sh b/run_laion_1b_upload.sh index 4970d4b4..7c3bc7da 100644 --- a/run_laion_1b_upload.sh +++ b/run_laion_1b_upload.sh @@ -3,6 +3,7 @@ part_size=10000000 # 10 million elements per part max_screens=100 # Maximum number of screens running simultaneously +engine=redis-intel-float16-hnsw-m-4-ef-4 # Function to wait until the number of running screens is below the limit wait_for_available_screen_slot() { @@ -27,7 +28,7 @@ for i in {0..99}; do log_file="logs-new/loader_$i.log" # Launch each process in a new screen session and log stdout and stderr to the log file - screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines redis-intel-float16-hnsw-m-16-ef-32 --datasets laion-img-emb-768d-1Billion-cosine --skip-search --upload-start-idx $start_idx --upload-end-idx $end_idx &> $log_file" + screen -dmS loader_$i bash -c "REDIS_PORT=30001 REDIS_JUST_INDEX=1 REDIS_CLUSTER=1 python3 run.py --host 192.168.2.6 --engines $engine --datasets laion-img-emb-768d-1Billion-cosine --skip-search --upload-start-idx $start_idx --upload-end-idx $end_idx &> $log_file" # Print progress echo "Started screen loader_$i: uploading indices $start_idx to $end_idx" From db1896d602f30198cca217fec5052a21712617b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Tue, 15 Oct 2024 15:09:48 +0200 Subject: [PATCH 159/209] Add *args, **kwargs to read data method in reader interface (#10) --- dataset_reader/ann_h5_multi_reader.py | 2 +- dataset_reader/ann_h5_reader.py | 2 +- dataset_reader/base_reader.py | 2 +- dataset_reader/json_reader.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dataset_reader/ann_h5_multi_reader.py b/dataset_reader/ann_h5_multi_reader.py index 984d3883..64dfd7f9 100644 --- a/dataset_reader/ann_h5_multi_reader.py +++ b/dataset_reader/ann_h5_multi_reader.py @@ -52,7 +52,7 @@ def read_queries(self) -> Iterator[Query]: ) def read_data( - self, start_idx: int = 0, end_idx: int = None, chunk_size: int = 10_000 + self, start_idx: int = 0, end_idx: int = None, chunk_size: int = 10_000, *args, **kwargs ) -> Iterator[Record]: """ Reads the 'train' data vectors from multiple HDF5 files based on the specified range. diff --git a/dataset_reader/ann_h5_reader.py b/dataset_reader/ann_h5_reader.py index 1d47bdd3..1bc984ac 100644 --- a/dataset_reader/ann_h5_reader.py +++ b/dataset_reader/ann_h5_reader.py @@ -27,7 +27,7 @@ def read_queries(self) -> Iterator[Query]: expected_scores=expected_scores.tolist(), ) - def read_data(self) -> Iterator[Record]: + def read_data(self, *args, **kwargs) -> Iterator[Record]: data = h5py.File(self.path) for idx, vector in enumerate(data["train"]): diff --git a/dataset_reader/base_reader.py b/dataset_reader/base_reader.py index 0a2617e3..e4c3ee60 100644 --- a/dataset_reader/base_reader.py +++ b/dataset_reader/base_reader.py @@ -18,7 +18,7 @@ class Query: class BaseReader: - def read_data(self) -> Iterator[Record]: + def read_data(self, *args, **kwargs) -> Iterator[Record]: raise NotImplementedError() def read_queries(self) -> Iterator[Query]: diff --git a/dataset_reader/json_reader.py b/dataset_reader/json_reader.py index 77a2eeb9..e6bab83e 100644 --- a/dataset_reader/json_reader.py +++ b/dataset_reader/json_reader.py @@ -60,7 +60,7 @@ def read_queries(self) -> Iterator[Query]: yield Query(vector=vector, meta_conditions=None, expected_result=neighbours) - def read_data(self) -> Iterator[Record]: + def read_data(self, *args, **kwargs) -> Iterator[Record]: for idx, (vector, payload) in enumerate( zip(self.read_vectors(), self.read_payloads()) ): From 2f9753a80593df230f225135bc247011226e1e4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Thu, 12 Dec 2024 17:13:37 +0100 Subject: [PATCH 160/209] If boto3 raises no credentials exception use urlib for downloading the dataset (#11) --- benchmark/dataset.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/benchmark/dataset.py b/benchmark/dataset.py index 8dc955e0..c71b19af 100644 --- a/benchmark/dataset.py +++ b/benchmark/dataset.py @@ -5,6 +5,7 @@ from dataclasses import dataclass, field from typing import Dict, List, Optional, Union import boto3 +import botocore.exceptions from benchmark import DATASETS_DIR from dataset_reader.ann_compound_reader import AnnCompoundReader from dataset_reader.ann_h5_reader import AnnH5Reader @@ -109,10 +110,15 @@ def download(self): return if self.config.link: + downloaded_withboto = False if is_s3_link(self.config.link): print("Use boto3 to download from S3. Faster!") - self._download_from_s3(self.config.link, target_path) - else: + try: + self._download_from_s3(self.config.link, target_path) + downloaded_withboto = True + except botocore.exceptions.NoCredentialsError: + print("Credentials not found, downloading without boto3") + if not downloaded_withboto: print(f"Downloading from URL {self.config.link}...") tmp_path, _ = urllib.request.urlretrieve( self.config.link, None, show_progress From a47d6d39ac1e6af7baa2b0dc7015d348b6caaea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Thu, 12 Dec 2024 17:14:13 +0100 Subject: [PATCH 161/209] Update dockerfile and add single case scenario test (#12) --- Dockerfile | 5 +++++ .../configurations/redis-hnsw-single-node.json | 13 +++++++++++++ 2 files changed, 18 insertions(+) diff --git a/Dockerfile b/Dockerfile index 53f5bcc5..de3ad063 100644 --- a/Dockerfile +++ b/Dockerfile @@ -8,6 +8,9 @@ ENV PYTHONFAULTHANDLER=1 \ PIP_DEFAULT_TIMEOUT=100 \ POETRY_VERSION=1.5.1 +RUN apt update +RUN apt install -y wget + RUN pip install "poetry==$POETRY_VERSION" # Copy only requirements to cache them in docker layer @@ -21,5 +24,7 @@ RUN poetry config virtualenvs.create false \ # Creating folders, and files for a project: COPY . /code +RUN pip install "boto3" + CMD ["python"] diff --git a/experiments/configurations/redis-hnsw-single-node.json b/experiments/configurations/redis-hnsw-single-node.json index 77dbd6c2..9ae5e233 100644 --- a/experiments/configurations/redis-hnsw-single-node.json +++ b/experiments/configurations/redis-hnsw-single-node.json @@ -1,4 +1,17 @@ [ + { + "name": "redis-test", + "engine": "redis", + "algorithm": "hnsw", + "connection_params": {}, + "collection_params": { + "hnsw_config": { "M": 16, "EF_CONSTRUCTION": 128 } + }, + "search_params": [ + { "parallel": 1, "search_params": { "ef": 64 } } + ], + "upload_params": { "parallel": 16 } + }, { "name": "redis-hnsw-m-16-ef-128", "engine": "redis", From aa9e3e294427d2de09e1a2ab5abf8f9b1fe859f3 Mon Sep 17 00:00:00 2001 From: DvirDukhan Date: Wed, 19 Mar 2025 20:20:49 +0200 Subject: [PATCH 162/209] vector sets --- engine/clients/client_factory.py | 9 + engine/clients/vectorsets/__init__.py | 3 + engine/clients/vectorsets/config.py | 9 + engine/clients/vectorsets/configure.py | 44 ++ engine/clients/vectorsets/search.py | 53 ++ engine/clients/vectorsets/upload.py | 48 ++ .../configurations/vectorsets-NOQUANT.json | 385 +++++++++ experiments/configurations/vectorsets-Q8.json | 385 +++++++++ .../configurations/vectorsets-bin.json | 385 +++++++++ scripts/process-benchmarks.ipynb | 730 +++++++++++++++++- 10 files changed, 2029 insertions(+), 22 deletions(-) create mode 100644 engine/clients/vectorsets/__init__.py create mode 100644 engine/clients/vectorsets/config.py create mode 100644 engine/clients/vectorsets/configure.py create mode 100644 engine/clients/vectorsets/search.py create mode 100644 engine/clients/vectorsets/upload.py create mode 100644 experiments/configurations/vectorsets-NOQUANT.json create mode 100644 experiments/configurations/vectorsets-Q8.json create mode 100644 experiments/configurations/vectorsets-bin.json diff --git a/engine/clients/client_factory.py b/engine/clients/client_factory.py index a74df2ab..90fe7ae8 100644 --- a/engine/clients/client_factory.py +++ b/engine/clients/client_factory.py @@ -31,6 +31,12 @@ WeaviateUploader, ) +from engine.clients.vectorsets import ( + RedisVsetConfigurator, + RedisVsetSearcher, + RedisVsetUploader, +) + ENGINE_CONFIGURATORS = { "qdrant": QdrantConfigurator, "weaviate": WeaviateConfigurator, @@ -39,6 +45,7 @@ "opensearch": OpenSearchConfigurator, "redis": RedisConfigurator, "pgvector": PgVectorConfigurator, + "vectorsets": RedisVsetConfigurator, } ENGINE_UPLOADERS = { @@ -49,6 +56,7 @@ "opensearch": OpenSearchUploader, "redis": RedisUploader, "pgvector": PgVectorUploader, + "vectorsets": RedisVsetUploader, } ENGINE_SEARCHERS = { @@ -59,6 +67,7 @@ "opensearch": OpenSearchSearcher, "redis": RedisSearcher, "pgvector": PgVectorSearcher, + "vectorsets": RedisVsetSearcher, } diff --git a/engine/clients/vectorsets/__init__.py b/engine/clients/vectorsets/__init__.py new file mode 100644 index 00000000..c21498cb --- /dev/null +++ b/engine/clients/vectorsets/__init__.py @@ -0,0 +1,3 @@ +from engine.clients.vectorsets.configure import RedisVsetConfigurator +from engine.clients.vectorsets.search import RedisVsetSearcher +from engine.clients.vectorsets.upload import RedisVsetUploader diff --git a/engine/clients/vectorsets/config.py b/engine/clients/vectorsets/config.py new file mode 100644 index 00000000..e9ef6075 --- /dev/null +++ b/engine/clients/vectorsets/config.py @@ -0,0 +1,9 @@ +import os + +REDIS_PORT = int(os.getenv("REDIS_PORT", 6379)) +REDIS_AUTH = os.getenv("REDIS_AUTH", None) +REDIS_USER = os.getenv("REDIS_USER", None) +REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) + +# 90 seconds timeout +REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 90 * 1000)) diff --git a/engine/clients/vectorsets/configure.py b/engine/clients/vectorsets/configure.py new file mode 100644 index 00000000..5c5a06ae --- /dev/null +++ b/engine/clients/vectorsets/configure.py @@ -0,0 +1,44 @@ +import redis +from redis import Redis, RedisCluster + +from benchmark.dataset import Dataset +from engine.base_client.configure import BaseConfigurator +from engine.clients.vectorsets.config import ( + REDIS_AUTH, + REDIS_CLUSTER, + REDIS_PORT, + REDIS_USER, +) + + +class RedisVsetConfigurator(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.client = redis_constructor( + host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER + ) + self.client.flushall() + + def clean(self): + conns = [self.client] + 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() + try: + conn.flushall() + except redis.ResponseError as e: + print(e) + + def recreate(self, dataset: Dataset, collection_params): + pass + + +if __name__ == "__main__": + pass diff --git a/engine/clients/vectorsets/search.py b/engine/clients/vectorsets/search.py new file mode 100644 index 00000000..836a128d --- /dev/null +++ b/engine/clients/vectorsets/search.py @@ -0,0 +1,53 @@ +import random +from typing import List, Tuple + +import numpy as np +from redis import Redis, RedisCluster + + +from engine.base_client.search import BaseSearcher +from engine.clients.vectorsets.config import ( + REDIS_AUTH, + REDIS_CLUSTER, + REDIS_PORT, + REDIS_QUERY_TIMEOUT, + REDIS_USER, +) +from engine.clients.redis.parser import RedisConditionParser + + +class RedisVsetSearcher(BaseSearcher): + search_params = {} + client = None + parser = RedisConditionParser() + + @classmethod + def init_client(cls, host, distance, connection_params: dict, search_params: dict): + redis_constructor = RedisCluster if REDIS_CLUSTER else Redis + cls.client = redis_constructor( + host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER + ) + cls.search_params = search_params + 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: + 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() + + @classmethod + def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: + ef = cls.search_params["search_params"]["ef"] + response = cls.client.execute_command("VSIM", "idx", "FP32", np.array(vector).astype(np.float32).tobytes(), "WITHSCORES", "COUNT", top, "EF", ef) + # decode responses + # every even cell is id, every odd is the score + # scores needs to be 1 - scores since on vector sets 1 is identical, 0 is opposite vector + ids = [int(response[i]) for i in range(0, len(response), 2)] + scores = [1 - float(response[i]) for i in range(1, len(response), 2)] + # we need to return a list of tuples + # where the first element is the id and the second is the score + return list(zip(ids, scores)) diff --git a/engine/clients/vectorsets/upload.py b/engine/clients/vectorsets/upload.py new file mode 100644 index 00000000..ccd16dd9 --- /dev/null +++ b/engine/clients/vectorsets/upload.py @@ -0,0 +1,48 @@ +from typing import List, Optional + +import numpy as np +from redis import Redis, RedisCluster + +from engine.base_client.upload import BaseUploader +from engine.clients.vectorsets.config import ( + REDIS_AUTH, + REDIS_CLUSTER, + REDIS_PORT, + REDIS_USER, +) +from engine.clients.redis.helper import convert_to_redis_coords + + +class RedisVsetUploader(BaseUploader): + client = None + upload_params = {} + + @classmethod + def init_client(cls, host, distance, connection_params, upload_params): + redis_constructor = RedisCluster if REDIS_CLUSTER else Redis + cls.client = redis_constructor( + host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER + ) + cls.upload_params = upload_params + + @classmethod + def upload_batch( + cls, ids: List[int], vectors: List[list], metadata: Optional[List[dict]] + ): + upload_params = cls.upload_params + hnsw_params = upload_params.get("hnsw_config") + M = hnsw_params.get("M", 16) + efc = hnsw_params.get("EF_CONSTRUCTION", 200) + quant = hnsw_params.get("quant") + + p = cls.client.pipeline(transaction=False) + for i in range(len(ids)): + idx = ids[i] + vec = vectors[i] + vec = np.array(vec).astype(np.float32).tobytes() + p.execute_command("VADD", "idx", "FP32", vec, idx, quant, "M", M, "EF", efc, "CAS") + p.execute() + + @classmethod + def post_upload(cls, _distance): + return {} diff --git a/experiments/configurations/vectorsets-NOQUANT.json b/experiments/configurations/vectorsets-NOQUANT.json new file mode 100644 index 00000000..fa0ed882 --- /dev/null +++ b/experiments/configurations/vectorsets-NOQUANT.json @@ -0,0 +1,385 @@ +[ + { + "name": "vectorsets-default", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "batch_size": 1024, + "hnsw_config": { + "quant": "NOQUANT" + } + } + }, + { + "name": "vectorsets-m-32-ef-128", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "NOQUANT", + "M": 32, + "EF_CONSTRUCTION": 128 + } + } + }, + { + "name": "vectorsets-m-32-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "NOQUANT", + "M": 32, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-m-32-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "NOQUANT", + "M": 32, + "EF_CONSTRUCTION": 512 + } + } + }, + { + "name": "vectorsets-m-64-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "NOQUANT", + "M": 64, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-m-64-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "NOQUANT", + "M": 64, + "EF_CONSTRUCTION": 512 + } + } + } +] \ No newline at end of file diff --git a/experiments/configurations/vectorsets-Q8.json b/experiments/configurations/vectorsets-Q8.json new file mode 100644 index 00000000..fd6f64a0 --- /dev/null +++ b/experiments/configurations/vectorsets-Q8.json @@ -0,0 +1,385 @@ +[ + { + "name": "vectorsets-q8-default", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "batch_size": 1024, + "hnsw_config": { + "quant": "Q8" + } + } + }, + { + "name": "vectorsets-q8-m-32-ef-128", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "Q8", + "M": 32, + "EF_CONSTRUCTION": 128 + } + } + }, + { + "name": "vectorsets-q8-m-32-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "Q8", + "M": 32, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-q8-m-32-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "Q8", + "M": 32, + "EF_CONSTRUCTION": 512 + } + } + }, + { + "name": "vectorsets-q8-m-64-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "Q8", + "M": 64, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-q8-m-64-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "Q8", + "M": 64, + "EF_CONSTRUCTION": 512 + } + } + } +] \ No newline at end of file diff --git a/experiments/configurations/vectorsets-bin.json b/experiments/configurations/vectorsets-bin.json new file mode 100644 index 00000000..60da0d8a --- /dev/null +++ b/experiments/configurations/vectorsets-bin.json @@ -0,0 +1,385 @@ +[ + { + "name": "vectorsets-bin-default", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "batch_size": 1024, + "hnsw_config": { + "quant": "BIN" + } + } + }, + { + "name": "vectorsets-bin-m-32-ef-128", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "BIN", + "M": 32, + "EF_CONSTRUCTION": 128 + } + } + }, + { + "name": "vectorsets-bin-m-32-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "BIN", + "M": 32, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-bin-m-32-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "BIN", + "M": 32, + "EF_CONSTRUCTION": 512 + } + } + }, + { + "name": "vectorsets-bin-m-64-ef-256", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "BIN", + "M": 64, + "EF_CONSTRUCTION": 256 + } + } + }, + { + "name": "vectorsets-bin-m-64-ef-512", + "engine": "vectorsets", + "connection_params": {}, + "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 + } + } + ], + "upload_params": { + "parallel": 16, + "hnsw_config": { + "quant": "BIN", + "M": 64, + "EF_CONSTRUCTION": 512 + } + } + } +] \ No newline at end of file diff --git a/scripts/process-benchmarks.ipynb b/scripts/process-benchmarks.ipynb index 8419a5f8..08594905 100644 --- a/scripts/process-benchmarks.ipynb +++ b/scripts/process-benchmarks.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 1, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T10:03:50.900734Z", @@ -32,7 +32,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 2, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T10:03:50.982398Z", @@ -42,7 +42,19 @@ "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "(PosixPath('/Users/dvir/Code/vector-db-benchmark/results'),\n", + " 'vectorsets-q8-m-64-ef-512-random-100-search-2-2025-03-18-23-31-46.json')" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "DATA_DIR = Path().resolve().parent / \"results\"\n", "DATA_DIR, list(DATA_DIR.glob(\"*.json\"))[0].name" @@ -50,7 +62,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 3, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T10:03:51.482299Z", @@ -64,6 +76,7 @@ "source": [ "PATH_REGEX = re.compile(r\"(?P(\"\n", " r\"?P[a-z\\-]+)\"\n", + " r\"\\-(?P[a-zA-Z0-9\\-]+)\"\n", " r\"\\-m\\-(?P[0-9]+)\"\n", " r\"\\-ef\\-(?P[0-9]+)\"\n", " r\")\"\n", @@ -85,7 +98,185 @@ "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "[['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '2',\n", + " '2025-03-18-23-31-46',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 1,\n", + " 'search_params': {'ef': 256}},\n", + " {'total_time': 0.0025846249773167074,\n", + " 'mean_time': 0.00020889558945782482,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.00012517310030909733,\n", + " 'min_time': 0.00012079102452844381,\n", + " 'max_time': 0.0005068749887868762,\n", + " 'rps': 3869.033259278392,\n", + " 'p95_time': 0.0004580310720484703,\n", + " 'p99_time': 0.000497106205439195}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '5',\n", + " '2025-03-18-23-32-25',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 100,\n", + " 'search_params': {'ef': 128}},\n", + " {'total_time': 4.754267499956768,\n", + " 'mean_time': 0.0019451417960226537,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.0037093798096747236,\n", + " 'min_time': 0.0004131249734200537,\n", + " 'max_time': 0.013048959022853523,\n", + " 'rps': 2.103373442931205,\n", + " 'p95_time': 0.007698571513174089,\n", + " 'p99_time': 0.011978881520917641}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '4',\n", + " '2025-03-18-23-32-05',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 100,\n", + " 'search_params': {'ef': 64}},\n", + " {'total_time': 2.0294713340117596,\n", + " 'mean_time': 0.03196047500241548,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.08439925765507372,\n", + " 'min_time': 0.00027545803459361196,\n", + " 'max_time': 0.2835138339432888,\n", + " 'rps': 4.927391598201336,\n", + " 'p95_time': 0.1706198027444768,\n", + " 'p99_time': 0.26093502770352645}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '3',\n", + " '2025-03-18-23-31-46',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 1,\n", + " 'search_params': {'ef': 512}},\n", + " {'total_time': 0.002255416999105364,\n", + " 'mean_time': 0.0001831832982134074,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.00013853265792410592,\n", + " 'min_time': 0.00010545901022851467,\n", + " 'max_time': 0.000520500005222857,\n", + " 'rps': 4433.769898855338,\n", + " 'p95_time': 0.0004601064021699129,\n", + " 'p99_time': 0.0005084212846122682}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '7',\n", + " '2025-03-18-23-33-03',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 100,\n", + " 'search_params': {'ef': 512}},\n", + " {'total_time': 3.4431491250288673,\n", + " 'mean_time': 0.03187979999929667,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.06949698412336956,\n", + " 'min_time': 0.0003655419568531215,\n", + " 'max_time': 0.23800891602877527,\n", + " 'rps': 2.9043180056617968,\n", + " 'p95_time': 0.14553500411275289,\n", + " 'p99_time': 0.21951413364557087}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '6',\n", + " '2025-03-18-23-32-44',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 100,\n", + " 'search_params': {'ef': 256}},\n", + " {'total_time': 2.7904384169960395,\n", + " 'mean_time': 0.000987829192308709,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.0018635207020379135,\n", + " 'min_time': 0.0002573750098235905,\n", + " 'max_time': 0.006563208997249603,\n", + " 'rps': 3.583666257994395,\n", + " 'p95_time': 0.003952683851821342,\n", + " 'p99_time': 0.006041103968163953}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '1',\n", + " '2025-03-18-23-31-46',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 1,\n", + " 'search_params': {'ef': 128}},\n", + " {'total_time': 0.0023579999688081443,\n", + " 'mean_time': 0.00017647920176386834,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.00012461744999991972,\n", + " 'min_time': 0.00011404202086851001,\n", + " 'max_time': 0.0005437919753603637,\n", + " 'rps': 4240.882159576329,\n", + " 'p95_time': 0.00038786699296906554,\n", + " 'p99_time': 0.0005126069788821043}],\n", + " ['vectorsets',\n", + " '64',\n", + " '512',\n", + " 'q8',\n", + " 'random-100',\n", + " '0',\n", + " '2025-03-18-23-31-46',\n", + " {'dataset': 'random-100',\n", + " 'experiment': 'vectorsets-q8-m-64-ef-512',\n", + " 'engine': 'vectorsets',\n", + " 'parallel': 1,\n", + " 'search_params': {'ef': 64}},\n", + " {'total_time': 0.003914333006832749,\n", + " 'mean_time': 0.0002679917146451771,\n", + " 'mean_precisions': 1.0,\n", + " 'std_time': 0.00036875994409555664,\n", + " 'min_time': 0.00011029100278392434,\n", + " 'max_time': 0.001371125050354749,\n", + " 'rps': 2554.7136594010485,\n", + " 'p95_time': 0.0008407815796090277,\n", + " 'p99_time': 0.0012650563562056052}]]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "upload_results, search_results = [], []\n", "\n", @@ -99,7 +290,7 @@ " with open(path, \"r\") as fp:\n", " stats = json.load(fp)\n", "\n", - " entry = [match[\"engine\"], match[\"m\"], match[\"ef\"], \n", + " entry = [match[\"engine\"], match[\"m\"], match[\"ef\"], match[\"quant\"],\n", " match[\"dataset\"], match[\"search_index\"], match[\"date\"], \n", " stats[\"params\"], stats[\"results\"]]\n", " if experiment[\"operation\"] == \"search\":\n", @@ -112,7 +303,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T10:03:54.157465Z", @@ -124,12 +315,12 @@ }, "outputs": [], "source": [ - "column_names = [\"engine\", \"m\", \"ef\", \"dataset\", \"search_index\", \"date\", \"params\", \"results\"]" + "column_names = [\"engine\", \"m\", \"ef\", \"quant\", \"dataset\", \"search_index\", \"date\", \"params\", \"results\"]" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 6, "metadata": { "ExecuteTime": { "end_time": "2022-08-05T11:31:17.192306Z", @@ -139,13 +330,100 @@ "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
dateparamspost_uploadupload_timetotal_time
enginemefquantdataset
vectorsets64512q8random-1002025-03-18 23:31:46{'experiment': 'vectorsets-q8-m-64-ef-512', 'e...{}3.5902913.590334
\n", + "
" + ], + "text/plain": [ + " date \\\n", + "engine m ef quant dataset \n", + "vectorsets 64 512 q8 random-100 2025-03-18 23:31:46 \n", + "\n", + " params \\\n", + "engine m ef quant dataset \n", + "vectorsets 64 512 q8 random-100 {'experiment': 'vectorsets-q8-m-64-ef-512', 'e... \n", + "\n", + " post_upload upload_time total_time \n", + "engine m ef quant dataset \n", + "vectorsets 64 512 q8 random-100 {} 3.590291 3.590334 " + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "upload_df = pd.DataFrame(upload_results, columns=column_names) \\\n", " .drop(columns=\"search_index\")\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", + " .groupby([\"engine\", \"m\", \"ef\", \"quant\", \"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", @@ -167,12 +445,345 @@ "name": "#%%\n" } }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "8\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
datedatasetexperimentengineparallelsearch_paramstotal_timemean_timemean_precisionsstd_timemin_timemax_timerpsp95_timep99_time
enginemefdatasetquantsearch_index
vectorsets64512random-100q832025-03-18 23:31:46random-100vectorsets-q8-m-64-ef-512vectorsets1{'ef': 512}0.0022550.0001831.00.0001390.0001050.0005214433.7698990.0004600.000508
12025-03-18 23:31:46random-100vectorsets-q8-m-64-ef-512vectorsets1{'ef': 128}0.0023580.0001761.00.0001250.0001140.0005444240.8821600.0003880.000513
22025-03-18 23:31:46random-100vectorsets-q8-m-64-ef-512vectorsets1{'ef': 256}0.0025850.0002091.00.0001250.0001210.0005073869.0332590.0004580.000497
02025-03-18 23:31:46random-100vectorsets-q8-m-64-ef-512vectorsets1{'ef': 64}0.0039140.0002681.00.0003690.0001100.0013712554.7136590.0008410.001265
42025-03-18 23:32:05random-100vectorsets-q8-m-64-ef-512vectorsets100{'ef': 64}2.0294710.0319601.00.0843990.0002750.2835144.9273920.1706200.260935
62025-03-18 23:32:44random-100vectorsets-q8-m-64-ef-512vectorsets100{'ef': 256}2.7904380.0009881.00.0018640.0002570.0065633.5836660.0039530.006041
72025-03-18 23:33:03random-100vectorsets-q8-m-64-ef-512vectorsets100{'ef': 512}3.4431490.0318801.00.0694970.0003660.2380092.9043180.1455350.219514
52025-03-18 23:32:25random-100vectorsets-q8-m-64-ef-512vectorsets100{'ef': 128}4.7542670.0019451.00.0037090.0004130.0130492.1033730.0076990.011979
\n", + "
" + ], + "text/plain": [ + " date \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 2025-03-18 23:31:46 \n", + " 1 2025-03-18 23:31:46 \n", + " 2 2025-03-18 23:31:46 \n", + " 0 2025-03-18 23:31:46 \n", + " 4 2025-03-18 23:32:05 \n", + " 6 2025-03-18 23:32:44 \n", + " 7 2025-03-18 23:33:03 \n", + " 5 2025-03-18 23:32:25 \n", + "\n", + " dataset \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 random-100 \n", + " 1 random-100 \n", + " 2 random-100 \n", + " 0 random-100 \n", + " 4 random-100 \n", + " 6 random-100 \n", + " 7 random-100 \n", + " 5 random-100 \n", + "\n", + " experiment \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 vectorsets-q8-m-64-ef-512 \n", + " 1 vectorsets-q8-m-64-ef-512 \n", + " 2 vectorsets-q8-m-64-ef-512 \n", + " 0 vectorsets-q8-m-64-ef-512 \n", + " 4 vectorsets-q8-m-64-ef-512 \n", + " 6 vectorsets-q8-m-64-ef-512 \n", + " 7 vectorsets-q8-m-64-ef-512 \n", + " 5 vectorsets-q8-m-64-ef-512 \n", + "\n", + " engine parallel \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 vectorsets 1 \n", + " 1 vectorsets 1 \n", + " 2 vectorsets 1 \n", + " 0 vectorsets 1 \n", + " 4 vectorsets 100 \n", + " 6 vectorsets 100 \n", + " 7 vectorsets 100 \n", + " 5 vectorsets 100 \n", + "\n", + " search_params total_time \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 {'ef': 512} 0.002255 \n", + " 1 {'ef': 128} 0.002358 \n", + " 2 {'ef': 256} 0.002585 \n", + " 0 {'ef': 64} 0.003914 \n", + " 4 {'ef': 64} 2.029471 \n", + " 6 {'ef': 256} 2.790438 \n", + " 7 {'ef': 512} 3.443149 \n", + " 5 {'ef': 128} 4.754267 \n", + "\n", + " mean_time mean_precisions \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 0.000183 1.0 \n", + " 1 0.000176 1.0 \n", + " 2 0.000209 1.0 \n", + " 0 0.000268 1.0 \n", + " 4 0.031960 1.0 \n", + " 6 0.000988 1.0 \n", + " 7 0.031880 1.0 \n", + " 5 0.001945 1.0 \n", + "\n", + " std_time min_time max_time \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 0.000139 0.000105 0.000521 \n", + " 1 0.000125 0.000114 0.000544 \n", + " 2 0.000125 0.000121 0.000507 \n", + " 0 0.000369 0.000110 0.001371 \n", + " 4 0.084399 0.000275 0.283514 \n", + " 6 0.001864 0.000257 0.006563 \n", + " 7 0.069497 0.000366 0.238009 \n", + " 5 0.003709 0.000413 0.013049 \n", + "\n", + " rps p95_time \\\n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 4433.769899 0.000460 \n", + " 1 4240.882160 0.000388 \n", + " 2 3869.033259 0.000458 \n", + " 0 2554.713659 0.000841 \n", + " 4 4.927392 0.170620 \n", + " 6 3.583666 0.003953 \n", + " 7 2.904318 0.145535 \n", + " 5 2.103373 0.007699 \n", + "\n", + " p99_time \n", + "engine m ef dataset quant search_index \n", + "vectorsets 64 512 random-100 q8 3 0.000508 \n", + " 1 0.000513 \n", + " 2 0.000497 \n", + " 0 0.001265 \n", + " 4 0.260935 \n", + " 6 0.006041 \n", + " 7 0.219514 \n", + " 5 0.011979 " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ "search_df = pd.DataFrame(search_results, columns=column_names)\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", + " .groupby([\"engine\", \"m\", \"ef\", \"dataset\", \"quant\", \"search_index\"]) \\\n", " .first()\n", "\n", "print(len(search_df))\n", @@ -185,16 +796,61 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "metadata": {}, - "outputs": [], + "outputs": [ + { + "ename": "ValueError", + "evalue": "cannot insert dataset, already exists", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mValueError\u001b[0m Traceback (most recent call last)", + "\u001b[0;32m/var/folders/4t/wcf5b_sj55lbww_8xxhhq8pr0000gp/T/ipykernel_45869/1649479656.py\u001b[0m in \u001b[0;36m?\u001b[0;34m()\u001b[0m\n\u001b[1;32m 17\u001b[0m \u001b[0;31m# print(len(joined_df))\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[0;31m# joined_df\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 19\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 20\u001b[0m \u001b[0;31m# Reset the indices of both dataframes to make columns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 21\u001b[0;31m \u001b[0msearch_reset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msearch_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 22\u001b[0m \u001b[0mupload_reset\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mupload_df\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 24\u001b[0m \u001b[0;31m# Join on common columns\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, level, drop, inplace, col_level, col_fill, allow_duplicates, names)\u001b[0m\n\u001b[1;32m 6205\u001b[0m level_values = algorithms.take(\n\u001b[1;32m 6206\u001b[0m \u001b[0mlevel_values\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlab\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mallow_fill\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfill_value\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mlev\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_na_value\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6207\u001b[0m )\n\u001b[1;32m 6208\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 6209\u001b[0;31m new_obj.insert(\n\u001b[0m\u001b[1;32m 6210\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6211\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 6212\u001b[0m \u001b[0mlevel_values\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/frame.py\u001b[0m in \u001b[0;36m?\u001b[0;34m(self, loc, column, value, allow_duplicates)\u001b[0m\n\u001b[1;32m 4768\u001b[0m \u001b[0;34m\"'self.flags.allows_duplicate_labels' is False.\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4769\u001b[0m )\n\u001b[1;32m 4770\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mallow_duplicates\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0mcolumn\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcolumns\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4771\u001b[0m \u001b[0;31m# Should this be a different kind of error??\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 4772\u001b[0;31m \u001b[0;32mraise\u001b[0m \u001b[0mValueError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34mf\"cannot insert {column}, already exists\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 4773\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0misinstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mloc\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4774\u001b[0m \u001b[0;32mraise\u001b[0m \u001b[0mTypeError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"loc must be int\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 4775\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n", + "\u001b[0;31mValueError\u001b[0m: cannot insert dataset, already exists" + ] + } + ], "source": [ - "_search = search_df.reset_index()\n", - "_upload = upload_df.reset_index()\n", + "# # Option 1: Check what's in your index and columns\n", + "# print(\"search_df index name:\", search_df.index.name or search_df.index.names)\n", + "# print(\"search_df columns:\", search_df.columns.tolist())\n", + "# print(\"upload_df index name:\", upload_df.index.name or upload_df.index.names)\n", + "# print(\"upload_df columns:\", upload_df.columns.tolist())\n", + "\n", + "# # Option 2: Reset index but specify a different name for the index column\n", + "# _search = search_df.reset_index()\n", + "# _upload = upload_df.reset_index()\n", + "# print(\"search_df index name:\", _search.index.name or _search.index.names)\n", + "# print(\"search_df columns:\", _search.columns.tolist())\n", + "\n", + "# print(\"_upload index name:\", _upload.index.name or _upload.index.names)\n", + "# print(\"_upload columns:\", _upload.columns.tolist())\n", + "\n", + "# joined_df = _search.merge(_upload, how=\"left\", on=[\"engine\", \"m\", \"ef\", \"quant\", \"dataset\"], suffixes=(\"_search\", \"_upload\"))\n", + "# print(len(joined_df))\n", + "# joined_df\n", + "\n", + "# Reset the indices of both dataframes to make columns\n", + "search_reset = search_df.reset_index()\n", + "upload_reset = upload_df.reset_index()\n", + "\n", + "# Join on common columns\n", + "joined_df = search_reset.merge(upload_reset, \n", + " how=\"left\", \n", + " on=[\"engine\", \"m\", \"ef\", \"quant\", \"dataset\"],\n", + " suffixes=(\"\", \"_upload\"))\n", "\n", - "joined_df = _search.merge(_upload, on=[\"engine\", \"m\", \"ef\", \"dataset\"], how=\"left\", suffixes=(\"_search\", \"_upload\"))\n", - "print(len(joined_df))\n", - "joined_df" + "# Rename any conflicting columns to match what's expected in cell 10\n", + "joined_df = joined_df.rename(columns={\n", + " \"total_time\": \"total_time_search\",\n", + " \"total_time_upload\": \"total_time_upload\"\n", + "})\n", + "\n", + "print(f\"Joined dataframe has {len(joined_df)} rows\")\n", + "joined_df.head(2)" ] }, { @@ -202,6 +858,36 @@ "execution_count": null, "metadata": {}, "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [ + { + "ename": "KeyError", + "evalue": "'upload_time'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/indexes/base.py:3653\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3652\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[0;32m-> 3653\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_engine\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcasted_key\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3654\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/_libs/index.pyx:147\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/_libs/index.pyx:176\u001b[0m, in \u001b[0;36mpandas._libs.index.IndexEngine.get_loc\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7080\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "File \u001b[0;32mpandas/_libs/hashtable_class_helper.pxi:7088\u001b[0m, in \u001b[0;36mpandas._libs.hashtable.PyObjectHashTable.get_item\u001b[0;34m()\u001b[0m\n", + "\u001b[0;31mKeyError\u001b[0m: 'upload_time'", + "\nThe above exception was the direct cause of the following exception:\n", + "\u001b[0;31mKeyError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[0;32mIn[12], line 21\u001b[0m\n\u001b[1;32m 13\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m engine_name \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mqdrant-rps\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m engine_name \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mqdrant-bq-rps\u001b[39m\u001b[38;5;124m\"\u001b[39m \u001b[38;5;129;01mor\u001b[39;00m engine_name \u001b[38;5;241m==\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mqdrant-sq-rps\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n\u001b[1;32m 14\u001b[0m engine_name \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mqdrant\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m 16\u001b[0m json_object \u001b[38;5;241m=\u001b[39m {\n\u001b[1;32m 17\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mengine_name\u001b[39m\u001b[38;5;124m\"\u001b[39m: engine_name,\n\u001b[1;32m 18\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msetup_name\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mengine\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-m-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mm\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-ef-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mef\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m-quant-\u001b[39m\u001b[38;5;132;01m{\u001b[39;00mrow[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mquant\u001b[39m\u001b[38;5;124m'\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m,\n\u001b[1;32m 19\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mdataset_name\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mdataset\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 20\u001b[0m \u001b[38;5;66;03m# \"search_idx\": row['search_index'],\u001b[39;00m\n\u001b[0;32m---> 21\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mupload_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: \u001b[43mrow\u001b[49m\u001b[43m[\u001b[49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[38;5;124;43mupload_time\u001b[39;49m\u001b[38;5;124;43m'\u001b[39;49m\u001b[43m]\u001b[49m,\n\u001b[1;32m 22\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtotal_upload_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mtotal_time_upload\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 23\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mp95_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mp95_time\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 24\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mrps\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mrps\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 25\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mparallel\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparallel\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 26\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mp99_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mp99_time\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 27\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmean_time\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmean_time\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 28\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mmean_precisions\u001b[39m\u001b[38;5;124m\"\u001b[39m: row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mmean_precisions\u001b[39m\u001b[38;5;124m'\u001b[39m],\n\u001b[1;32m 29\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mengine_params\u001b[39m\u001b[38;5;124m\"\u001b[39m: engine_params,\n\u001b[1;32m 30\u001b[0m }\n\u001b[1;32m 31\u001b[0m json_all\u001b[38;5;241m.\u001b[39mappend(json_object)\n\u001b[1;32m 33\u001b[0m parallel \u001b[38;5;241m=\u001b[39m row[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mparallel\u001b[39m\u001b[38;5;124m'\u001b[39m]\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/series.py:1007\u001b[0m, in \u001b[0;36mSeries.__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 1004\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[key]\n\u001b[1;32m 1006\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m key_is_scalar:\n\u001b[0;32m-> 1007\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_get_value\u001b[49m\u001b[43m(\u001b[49m\u001b[43mkey\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1009\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_hashable(key):\n\u001b[1;32m 1010\u001b[0m \u001b[38;5;66;03m# Otherwise index.get_value will raise InvalidIndexError\u001b[39;00m\n\u001b[1;32m 1011\u001b[0m \u001b[38;5;28;01mtry\u001b[39;00m:\n\u001b[1;32m 1012\u001b[0m \u001b[38;5;66;03m# For labels that don't resolve as scalars like tuples and frozensets\u001b[39;00m\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/series.py:1116\u001b[0m, in \u001b[0;36mSeries._get_value\u001b[0;34m(self, label, takeable)\u001b[0m\n\u001b[1;32m 1113\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[label]\n\u001b[1;32m 1115\u001b[0m \u001b[38;5;66;03m# Similar to Index.get_value, but we do not fall back to positional\u001b[39;00m\n\u001b[0;32m-> 1116\u001b[0m loc \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mindex\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mget_loc\u001b[49m\u001b[43m(\u001b[49m\u001b[43mlabel\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 1118\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m is_integer(loc):\n\u001b[1;32m 1119\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_values[loc]\n", + "File \u001b[0;32m~/Code/vector-db-benchmark/.venv/lib/python3.11/site-packages/pandas/core/indexes/base.py:3655\u001b[0m, in \u001b[0;36mIndex.get_loc\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m 3653\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_engine\u001b[38;5;241m.\u001b[39mget_loc(casted_key)\n\u001b[1;32m 3654\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m \u001b[38;5;28;01mas\u001b[39;00m err:\n\u001b[0;32m-> 3655\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mKeyError\u001b[39;00m(key) \u001b[38;5;28;01mfrom\u001b[39;00m \u001b[38;5;21;01merr\u001b[39;00m\n\u001b[1;32m 3656\u001b[0m \u001b[38;5;28;01mexcept\u001b[39;00m \u001b[38;5;167;01mTypeError\u001b[39;00m:\n\u001b[1;32m 3657\u001b[0m \u001b[38;5;66;03m# If we have a listlike key, _check_indexing_error will raise\u001b[39;00m\n\u001b[1;32m 3658\u001b[0m \u001b[38;5;66;03m# InvalidIndexError. Otherwise we fall through and re-raise\u001b[39;00m\n\u001b[1;32m 3659\u001b[0m \u001b[38;5;66;03m# the TypeError.\u001b[39;00m\n\u001b[1;32m 3660\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_check_indexing_error(key)\n", + "\u001b[0;31mKeyError\u001b[0m: 'upload_time'" + ] + } + ], "source": [ "json_all = []\n", "json_1_or_100_thread = []\n", @@ -252,7 +938,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": ".venv", "language": "python", "name": "python3" }, @@ -266,7 +952,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.18" + "version": "3.11.9" } }, "nbformat": 4, From 6e2b1121c1a03a592c1d7c69e9e5a83202bef5a9 Mon Sep 17 00:00:00 2001 From: DvirDukhan Date: Thu, 20 Mar 2025 10:16:32 +0200 Subject: [PATCH 163/209] git ignore vevn --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 9c694280..2e741a46 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ results/* tools/custom/data.json *.png +venv/ From 4195d16ff155750214982d1ad46c2348bf7dd4aa Mon Sep 17 00:00:00 2001 From: Dvir Dukhan Date: Thu, 20 Mar 2025 14:38:51 +0000 Subject: [PATCH 164/209] fixed fp32 experiment file --- experiments/configurations/vectorsets-NOQUANT.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/experiments/configurations/vectorsets-NOQUANT.json b/experiments/configurations/vectorsets-NOQUANT.json index fa0ed882..9cb509c2 100644 --- a/experiments/configurations/vectorsets-NOQUANT.json +++ b/experiments/configurations/vectorsets-NOQUANT.json @@ -1,6 +1,6 @@ [ { - "name": "vectorsets-default", + "name": "vectorsets-fp32-default", "engine": "vectorsets", "connection_params": {}, "collection_params": {}, @@ -63,7 +63,7 @@ } }, { - "name": "vectorsets-m-32-ef-128", + "name": "vectorsets-fp32-m-32-ef-128", "engine": "vectorsets", "connection_params": {}, "collection_params": {}, @@ -127,7 +127,7 @@ } }, { - "name": "vectorsets-m-32-ef-256", + "name": "vectorsets-fp32-m-32-ef-256", "engine": "vectorsets", "connection_params": {}, "collection_params": {}, @@ -191,7 +191,7 @@ } }, { - "name": "vectorsets-m-32-ef-512", + "name": "vectorsets-fp32-m-32-ef-512", "engine": "vectorsets", "connection_params": {}, "collection_params": {}, @@ -255,7 +255,7 @@ } }, { - "name": "vectorsets-m-64-ef-256", + "name": "vectorset-fp32s-m-64-ef-256", "engine": "vectorsets", "connection_params": {}, "collection_params": {}, @@ -319,7 +319,7 @@ } }, { - "name": "vectorsets-m-64-ef-512", + "name": "vectorsets-fp32-m-64-ef-512", "engine": "vectorsets", "connection_params": {}, "collection_params": {}, From a1765b90d22129c3fb913211de735f3edb48d66f Mon Sep 17 00:00:00 2001 From: Dvir Dukhan Date: Thu, 20 Mar 2025 15:13:14 +0000 Subject: [PATCH 165/209] run script --- vectorsets.sh | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100755 vectorsets.sh diff --git a/vectorsets.sh b/vectorsets.sh new file mode 100755 index 00000000..4be2cea7 --- /dev/null +++ b/vectorsets.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +# Check if hostname is provided +if [ $# -lt 1 ]; then + echo "Usage: $0 " + exit 1 +fi + +hostname=$1 + +# Define experiments array +experiments=( + "vectorsets-bin-default" + "vectorsets-bin-m-32-ef-128" + "vectorsets-bin-m-32-ef-256" + "vectorsets-bin-m-32-ef-512" + "vectorsets-bin-m-64-ef-256" + "vectorsets-bin-m-64-ef-512" + + "vectorsets-q8-default" + "vectorsets-q8-m-32-ef-128" + "vectorsets-q8-m-32-ef-256" + "vectorsets-q8-m-32-ef-512" + "vectorsets-q8-m-64-ef-256" + "vectorsets-q8-m-64-ef-512" + + "vectorsets-fp32-default" + "vectorsets-fp32-m-32-ef-128" + "vectorsets-fp32-m-32-ef-256" + "vectorsets-fp32-m-32-ef-512" + "vectorsets-fp32-m-64-ef-256" + "vectorsets-fp32-m-64-ef-512" +) + +# Run command for each experiment +for experiment in "${experiments[@]}"; do + echo "Running experiment: $experiment" + python run.py --engines "$experiment" --datasets dbpedia-openai-1M-1536-angular --host "$hostname" + echo "Completed experiment: $experiment" + echo "-----------------------------------" +done + +echo "All experiments completed!" \ No newline at end of file From c7ca3e332d200508eb9656f080a04b17ae224da1 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 26 Mar 2025 17:49:25 +0000 Subject: [PATCH 166/209] Updated weaviate client to use grpc --- engine/clients/weaviate/config.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index 7bbd3096..bddfdb68 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -1,24 +1,24 @@ import os -from weaviate import Client -from weaviate.auth import AuthApiKey +from weaviate import WeaviateClient, ConnectionParams WEAVIATE_CLASS_NAME = "Benchmark" -WEAVIATE_DEFAULT_PORT = 8090 +WEAVIATE_DEFAULT_HTTP_PORT = 8080 +WEAVIATE_DEFAULT_GRPC_PORT = 50051 WEAVIATE_API_KEY = os.getenv("WEAVIATE_API_KEY", None) -WEAVIATE_PORT = os.getenv("WEAVIATE_PORT", WEAVIATE_DEFAULT_PORT) +WEAVIATE_HTTP_PORT = os.getenv("WEAVIATE_HTTP_PORT", WEAVIATE_DEFAULT_HTTP_PORT) +WEAVIATE_GRPC_PORT = os.getenv("WEAVIATE_GRPC_PORT", WEAVIATE_DEFAULT_GRPC_PORT) def setup_client(connection_params, host): - port = connection_params.get("port", WEAVIATE_PORT) + port = connection_params.get("port", WEAVIATE_HTTP_PORT) if host.startswith("http"): url = "" else: url = "http://" url += f"{host}:{port}" - auth_client_secret = None - if WEAVIATE_API_KEY is not None: - auth_client_secret = AuthApiKey(WEAVIATE_API_KEY) - c = Client(url, auth_client_secret, **connection_params) + c = WeaviateClient( + ConnectionParams.from_url(url, WEAVIATE_GRPC_PORT), skip_init_checks=True + ) # Ping Weaviate's live state. assert c.is_live() is True return c From 8f033f0827a4c5099ca84ec7b78f50544b77e4f5 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 26 Mar 2025 17:51:33 +0000 Subject: [PATCH 167/209] using WEAVIATE GRPC and HTTP port configs --- engine/clients/weaviate/configure.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/engine/clients/weaviate/configure.py b/engine/clients/weaviate/configure.py index 85263b79..66ad1f7e 100644 --- a/engine/clients/weaviate/configure.py +++ b/engine/clients/weaviate/configure.py @@ -3,8 +3,6 @@ from engine.base_client.distances import Distance from engine.clients.weaviate.config import ( WEAVIATE_CLASS_NAME, - WEAVIATE_PORT, - WEAVIATE_API_KEY, setup_client, ) From 99b72f69d740e461b9ca1d1f6b7094165edb76e9 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 26 Mar 2025 17:56:46 +0000 Subject: [PATCH 168/209] ensuring the __del__ method only uses client when it's defined on weaviate --- engine/clients/weaviate/configure.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/engine/clients/weaviate/configure.py b/engine/clients/weaviate/configure.py index 66ad1f7e..7c1df111 100644 --- a/engine/clients/weaviate/configure.py +++ b/engine/clients/weaviate/configure.py @@ -55,5 +55,5 @@ def recreate(self, dataset: Dataset, collection_params): self.client.close() def __del__(self): - if self.client.is_connected(): - self.client.close() + if hasattr(self, "client") and self.client.is_connected(): + self.client.close() \ No newline at end of file From 2c405b948662c848a413025d66d80650b0d20ae2 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 26 Mar 2025 18:12:01 +0000 Subject: [PATCH 169/209] Updated upload and search steps on weaviate client to match latest client version --- engine/clients/weaviate/config.py | 1 + engine/clients/weaviate/configure.py | 2 ++ engine/clients/weaviate/search.py | 15 ++++++++------- engine/clients/weaviate/upload.py | 27 +++++++++++++++------------ 4 files changed, 26 insertions(+), 19 deletions(-) diff --git a/engine/clients/weaviate/config.py b/engine/clients/weaviate/config.py index bddfdb68..b317fc5b 100644 --- a/engine/clients/weaviate/config.py +++ b/engine/clients/weaviate/config.py @@ -19,6 +19,7 @@ def setup_client(connection_params, host): c = WeaviateClient( ConnectionParams.from_url(url, WEAVIATE_GRPC_PORT), skip_init_checks=True ) + c.connect() # Ping Weaviate's live state. assert c.is_live() is True return c diff --git a/engine/clients/weaviate/configure.py b/engine/clients/weaviate/configure.py index 7c1df111..cd2575a4 100644 --- a/engine/clients/weaviate/configure.py +++ b/engine/clients/weaviate/configure.py @@ -5,9 +5,11 @@ WEAVIATE_CLASS_NAME, setup_client, ) +from weaviate import WeaviateClient class WeaviateConfigurator(BaseConfigurator): + client: WeaviateClient = None DISTANCE_MAPPING = { Distance.L2: "l2-squared", Distance.COSINE: "cosine", diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index 08011f60..ca7dde35 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -5,7 +5,7 @@ from weaviate.classes.config import Reconfigure from weaviate.classes.query import MetadataQuery 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, setup_client @@ -16,7 +16,7 @@ class WeaviateSearcher(BaseSearcher): search_params = {} parser = WeaviateConditionParser() collection: Collection - client: WeaviateClient + client: WeaviateClient = None @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): @@ -26,10 +26,10 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic assert cls.client.is_ready() is True @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=[], @@ -39,10 +39,11 @@ 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"] ) ) + @classmethod def delete_client(cls): if cls.client is not None: diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index 9a6bc2bb..8c3665c3 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -1,13 +1,15 @@ import uuid -from typing import List, Optional -from weaviate import Client +from typing import List +from weaviate.classes.data import DataObject +from weaviate import WeaviateClient +from dataset_reader.base_reader import Record from engine.base_client.upload import BaseUploader from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client class WeaviateUploader(BaseUploader): - client: Client = None + client: WeaviateClient = None upload_params = {} collection = None @@ -21,15 +23,16 @@ 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]] - ): - # Weaviate introduced the batch_size, so it can handle built-in client's - # multi-threading. That should make the upload faster. - cls.client.batch.configure( - batch_size=len(vectors), - timeout_retries=5, - ) + def upload_batch(cls, batch: List[Record]): + objects = [] + 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) @classmethod def delete_client(cls): From 41d91bb1c671a2b46057b2a693bc678c1427ccbb Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 26 Mar 2025 18:17:42 +0000 Subject: [PATCH 170/209] Updated upload and search steps on weaviate client to match latest client version --- engine/clients/weaviate/search.py | 15 +++++++-------- engine/clients/weaviate/upload.py | 24 +++++++++++++----------- 2 files changed, 20 insertions(+), 19 deletions(-) diff --git a/engine/clients/weaviate/search.py b/engine/clients/weaviate/search.py index ca7dde35..08011f60 100644 --- a/engine/clients/weaviate/search.py +++ b/engine/clients/weaviate/search.py @@ -5,7 +5,7 @@ from weaviate.classes.config import Reconfigure from weaviate.classes.query import MetadataQuery from weaviate.collections import Collection -from dataset_reader.base_reader import Query +from weaviate.connect import ConnectionParams from engine.base_client.search import BaseSearcher from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client @@ -16,7 +16,7 @@ class WeaviateSearcher(BaseSearcher): search_params = {} parser = WeaviateConditionParser() collection: Collection - client: WeaviateClient = None + client: WeaviateClient @classmethod def init_client(cls, host, distance, connection_params: dict, search_params: dict): @@ -26,10 +26,10 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic assert cls.client.is_ready() is True @classmethod - 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), + 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), limit=top, return_metadata=MetadataQuery(distance=True), return_properties=[], @@ -39,11 +39,10 @@ def search_one(cls, query: Query, top: int) -> List[Tuple[int, float]]: def setup_search(self): self.collection.config.update( vector_index_config=Reconfigure.VectorIndex.hnsw( - ef=self.search_params["config"]["ef"] + ef=self.search_params["vectorIndexConfig"]["ef"] ) ) - @classmethod def delete_client(cls): if cls.client is not None: diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index 8c3665c3..a609d059 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -1,15 +1,13 @@ import uuid -from typing import List +from typing import List, Optional +from weaviate import Client -from weaviate.classes.data import DataObject -from weaviate import WeaviateClient -from dataset_reader.base_reader import Record from engine.base_client.upload import BaseUploader from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client - +from weaviate.classes.data import DataObject class WeaviateUploader(BaseUploader): - client: WeaviateClient = None + client: Client = None upload_params = {} collection = None @@ -23,13 +21,17 @@ def init_client(cls, host, distance, connection_params, upload_params): ) @classmethod - def upload_batch(cls, batch: List[Record]): + def upload_batch( + cls, ids: List[int], vectors: List[list], metadata: List[Optional[dict]] + ): objects = [] - for record in batch: - _id = uuid.UUID(int=record.id) - _property = record.metadata or {} + for pos, vector in enumerate(vectors): + _id = ids[pos] + _property = {} + if metadata is not None and len(metadata) >= pos: + _property = metadata[pos] objects.append( - DataObject(properties=_property, vector=record.vector, uuid=_id) + DataObject(properties=_property, vector=vector, uuid=_id) ) if len(objects) > 0: cls.collection.data.insert_many(objects) From 3b910479168c62b86b3d72f066c79fd3e1bac922 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Wed, 26 Mar 2025 18:22:06 +0000 Subject: [PATCH 171/209] use uuids on ingest --- engine/clients/weaviate/upload.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/engine/clients/weaviate/upload.py b/engine/clients/weaviate/upload.py index a609d059..362a6eda 100644 --- a/engine/clients/weaviate/upload.py +++ b/engine/clients/weaviate/upload.py @@ -1,13 +1,13 @@ import uuid from typing import List, Optional -from weaviate import Client +from weaviate import WeaviateClient from engine.base_client.upload import BaseUploader from engine.clients.weaviate.config import WEAVIATE_CLASS_NAME, setup_client from weaviate.classes.data import DataObject class WeaviateUploader(BaseUploader): - client: Client = None + client: WeaviateClient = None upload_params = {} collection = None @@ -26,7 +26,7 @@ def upload_batch( ): objects = [] for pos, vector in enumerate(vectors): - _id = ids[pos] + _id = uuid.UUID(ids[pos]) _property = {} if metadata is not None and len(metadata) >= pos: _property = metadata[pos] From 92b4c84dccc9e6213ff1162a10ec6eb8debe697d Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 31 Mar 2025 12:57:04 +0100 Subject: [PATCH 172/209] Allow specifying the hybrid policy --- engine/clients/redis/config.py | 4 +++- engine/clients/redis/search.py | 17 ++++++++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index 4c101bcf..e92388c3 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -4,7 +4,9 @@ REDIS_AUTH = os.getenv("REDIS_AUTH", None) REDIS_USER = os.getenv("REDIS_USER", None) REDIS_CLUSTER = bool(int(os.getenv("REDIS_CLUSTER", 0))) -REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", None) +# One of BATCHES and ADHOC_BF +# check https://redis.io/docs/latest/develop/interact/search-and-query/advanced-concepts/vectors/#pre-filter-query-attributes-hybrid-approach +REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", "") REDIS_KEEP_DOCUMENTS = bool(os.getenv("REDIS_KEEP_DOCUMENTS", 1)) REDIS_JUST_INDEX = bool(os.getenv("REDIS_JUST_INDEX", 0)) GPU_STATS = bool(int(os.getenv("GPU_STATS", 0))) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 873521d5..675326a5 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -11,6 +11,7 @@ REDIS_AUTH, REDIS_USER, REDIS_CLUSTER, + REDIS_HYBRID_POLICY, ) from engine.clients.redis.parser import RedisConditionParser @@ -30,8 +31,13 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic cls.search_params = search_params cls.knn_conditions = "" cls.algorithm = cls.search_params.get("algorithm", "hnsw").upper() + cls.hybrid_policy = REDIS_HYBRID_POLICY + if cls.algorithm == "HNSW": - cls.knn_conditions = "EF_RUNTIME $EF" + # 'EF_RUNTIME' is irrelevant for 'ADHOC_BF' policy + if cls.hybrid_policy != "ADHOC_BF": + cls.knn_conditions = "EF_RUNTIME $EF" + cls.data_type = "FLOAT32" if "search_params" in cls.search_params: cls.data_type = ( @@ -59,6 +65,9 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: conditions = cls.parser.parse(meta_conditions) + hybrid_policy = "" + if cls.hybrid_policy != "": + hybrid_policy = '=>{$HYBRID_POLICY: {'+ cls.hybrid_policy + '}' if conditions is None: prefilter_condition = "*" params = {} @@ -67,7 +76,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: q = ( Query( - f"{prefilter_condition}=>[KNN $K @vector $vec_param {cls.knn_conditions} AS vector_score]" + f"{prefilter_condition}=>[KNN $K @vector $vec_param {cls.knn_conditions} AS vector_score]{hybrid_policy}" ) .sort_by("vector_score", asc=True) .paging(0, top) @@ -83,7 +92,9 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: **params, } if cls.algorithm == "HNSW": - params_dict["EF"] = cls.search_params["search_params"]["ef"] + # 'EF_RUNTIME' is irrelevant for 'ADHOC_BF' policy + if cls.hybrid_policy != "ADHOC_BF": + params_dict["EF"] = cls.search_params["search_params"]["ef"] results = cls._ft.search(q, query_params=params_dict) return [(int(result.id), float(result.vector_score)) for result in results.docs] From e4d93905098c2e1c4dbca8af1ce9b2adf21b494f Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 31 Mar 2025 13:09:57 +0100 Subject: [PATCH 173/209] catching 2.10 error message. setting default to flushall to mimic competiton --- engine/clients/redis/config.py | 4 ++-- engine/clients/redis/configure.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/engine/clients/redis/config.py b/engine/clients/redis/config.py index e92388c3..2bf68fc2 100644 --- a/engine/clients/redis/config.py +++ b/engine/clients/redis/config.py @@ -7,11 +7,11 @@ # One of BATCHES and ADHOC_BF # check https://redis.io/docs/latest/develop/interact/search-and-query/advanced-concepts/vectors/#pre-filter-query-attributes-hybrid-approach REDIS_HYBRID_POLICY = os.getenv("REDIS_HYBRID_POLICY", "") -REDIS_KEEP_DOCUMENTS = bool(os.getenv("REDIS_KEEP_DOCUMENTS", 1)) +REDIS_KEEP_DOCUMENTS = bool(os.getenv("REDIS_KEEP_DOCUMENTS", 0)) REDIS_JUST_INDEX = bool(os.getenv("REDIS_JUST_INDEX", 0)) GPU_STATS = bool(int(os.getenv("GPU_STATS", 0))) GPU_STATS_ENDPOINT = os.getenv("GPU_STATS_ENDPOINT", None) # 60 seconds timeout -REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 60 * 1000)) +REDIS_QUERY_TIMEOUT = int(os.getenv("REDIS_QUERY_TIMEOUT", 90 * 1000)) diff --git a/engine/clients/redis/configure.py b/engine/clients/redis/configure.py index 5f0f8e51..20544c3d 100644 --- a/engine/clients/redis/configure.py +++ b/engine/clients/redis/configure.py @@ -59,6 +59,7 @@ def clean(self): if ( "Unknown Index name" not in str_err and "Index does not exist" not in str_err + and "no such index" not in str_err ): # google memorystore does not support the DD argument. # in that case we can flushall From 0e9f9ad4b78ef0790313a4d9892f93a8d9558e58 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 31 Mar 2025 13:12:53 +0100 Subject: [PATCH 174/209] fixed missing } on hybrid policy --- engine/clients/redis/search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 675326a5..c8a13ae4 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -67,7 +67,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: conditions = cls.parser.parse(meta_conditions) hybrid_policy = "" if cls.hybrid_policy != "": - hybrid_policy = '=>{$HYBRID_POLICY: {'+ cls.hybrid_policy + '}' + hybrid_policy = f"=>{{$HYBRID_POLICY: {{{cls.hybrid_policy}}}}}" if conditions is None: prefilter_condition = "*" params = {} From 4aef01708137da42865d76b77e372657285864f3 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 31 Mar 2025 13:15:58 +0100 Subject: [PATCH 175/209] fixed missing } on hybrid policy --- engine/clients/redis/search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index c8a13ae4..cb5ac565 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -67,7 +67,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: conditions = cls.parser.parse(meta_conditions) hybrid_policy = "" if cls.hybrid_policy != "": - hybrid_policy = f"=>{{$HYBRID_POLICY: {{{cls.hybrid_policy}}}}}" + hybrid_policy = f"=>{{$HYBRID_POLICY: {{cls.hybrid_policy}} }}" if conditions is None: prefilter_condition = "*" params = {} From 92dee85d4d7e33103b9909465e44b38f13f8d9b1 Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Mon, 31 Mar 2025 13:17:43 +0100 Subject: [PATCH 176/209] fixed missing } on hybrid policy --- engine/clients/redis/search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index cb5ac565..60c21dca 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -67,7 +67,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: conditions = cls.parser.parse(meta_conditions) hybrid_policy = "" if cls.hybrid_policy != "": - hybrid_policy = f"=>{{$HYBRID_POLICY: {{cls.hybrid_policy}} }}" + hybrid_policy = '=>{$HYBRID_POLICY: '+ cls.hybrid_policy + ' }' if conditions is None: prefilter_condition = "*" params = {} From 312547da733ff438e2e84a2a49a39d1b93d2aaab Mon Sep 17 00:00:00 2001 From: root Date: Mon, 7 Apr 2025 13:39:03 -0700 Subject: [PATCH 177/209] adding laion dataset' --- datasets/datasets.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/datasets/datasets.json b/datasets/datasets.json index 7a165eb6..c776917d 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -322,5 +322,14 @@ "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": "laion-img-emb-512-100M-cosine", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-100M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5" } + ] From 0c3670980f525efe0aefa56abd0527d5386a668f Mon Sep 17 00:00:00 2001 From: root Date: Mon, 7 Apr 2025 13:41:34 -0700 Subject: [PATCH 178/209] adding laion dataset 1M --- datasets/datasets.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/datasets/datasets.json b/datasets/datasets.json index c776917d..ee7ce131 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -324,11 +324,11 @@ "path": "random-100-match-kw-small-vocab/random_keywords_1m_vocab_10_no_filters" }, { - "name": "laion-img-emb-512-100M-cosine", + "name": "laion-img-emb-512-1M-cosine", "vector_size": 512, "distance": "cosine", "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-100M-cosine.hdf5", + "path": "laion-img-emb-512/laion-img-emb-512-1M-cosine.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5" } From 3b5e2c95563152f377e59e4917a4c4ae8ffcc0fd Mon Sep 17 00:00:00 2001 From: root Date: Mon, 7 Apr 2025 14:21:23 -0700 Subject: [PATCH 179/209] chunk up the iterable before starting the processes --- engine/base_client/search.py | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 93368a3f..93575420 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -2,6 +2,7 @@ import time from multiprocessing import get_context from typing import Iterable, List, Optional, Tuple +from itertools import islice import numpy as np import tqdm @@ -79,22 +80,31 @@ def search_all( else: ctx = get_context(self.get_mp_start_method()) - with ctx.Pool( - processes=parallel, - initializer=self.__class__.init_client, - initargs=( + def process_initializer(): + """Initialize each process before starting the search.""" + self.__class__.init_client( self.host, distance, self.connection_params, self.search_params, - ), + ) + self.setup_search() + + # Dynamically chunk the generator + query_chunks = list(chunked_iterable(queries, max(1, parallel))) + + with ctx.Pool( + processes=parallel, + initializer=process_initializer, ) as pool: if parallel > 10: time.sleep(15) # Wait for all processes to start start = time.perf_counter() - precisions, latencies = list( - zip(*pool.imap_unordered(search_one, iterable=tqdm.tqdm(queries))) + results = pool.starmap( + process_chunk, + [(chunk, search_one) for chunk in query_chunks], ) + precisions, latencies = zip(*[result for chunk in results for result in chunk]) total_time = time.perf_counter() - start @@ -123,3 +133,15 @@ def post_search(self): @classmethod def delete_client(cls): pass + + +def chunked_iterable(iterable, size): + """Yield successive chunks of a given size from an iterable.""" + it = iter(iterable) + while chunk := list(islice(it, size)): + yield chunk + + +def process_chunk(chunk, search_one): + """Process a chunk of queries using the search_one function.""" + return [search_one(query) for query in chunk] From 92b4ddb7dddba8496695cc17a1a565887e13d49a Mon Sep 17 00:00:00 2001 From: Martin Dimitrov Date: Mon, 7 Apr 2025 14:30:27 -0700 Subject: [PATCH 180/209] replace arbitrary 15 sec wait with barrier --- engine/base_client/search.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 93575420..30732650 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -1,6 +1,6 @@ import functools import time -from multiprocessing import get_context +from multiprocessing import get_context, Barrier from typing import Iterable, List, Optional, Tuple from itertools import islice @@ -80,6 +80,9 @@ def search_all( else: ctx = get_context(self.get_mp_start_method()) + # Create a Barrier to synchronize processes + barrier = Barrier(parallel) + def process_initializer(): """Initialize each process before starting the search.""" self.__class__.init_client( @@ -89,6 +92,7 @@ def process_initializer(): self.search_params, ) self.setup_search() + barrier.wait() # Wait for all processes to be ready # Dynamically chunk the generator query_chunks = list(chunked_iterable(queries, max(1, parallel))) @@ -97,8 +101,6 @@ def process_initializer(): processes=parallel, initializer=process_initializer, ) as pool: - if parallel > 10: - time.sleep(15) # Wait for all processes to start start = time.perf_counter() results = pool.starmap( process_chunk, From deaf5abaca3513ff24ff40e59e12be565acb3f40 Mon Sep 17 00:00:00 2001 From: Martin Dimitrov Date: Tue, 8 Apr 2025 11:06:54 -0700 Subject: [PATCH 181/209] fixed chunk to correct size --- engine/base_client/search.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 30732650..1ba7d51e 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -64,6 +64,9 @@ def search_all( parallel = self.search_params.get("parallel", 1) top = self.search_params.get("top", None) + # Convert queries to a list to calculate its length + queries = list(queries) # This allows us to calculate len(queries) + # setup_search may require initialized client self.init_client( self.host, distance, self.connection_params, self.search_params @@ -94,8 +97,9 @@ def process_initializer(): self.setup_search() barrier.wait() # Wait for all processes to be ready - # Dynamically chunk the generator - query_chunks = list(chunked_iterable(queries, max(1, parallel))) + # Dynamically calculate chunk size + chunk_size = max(1, len(queries) // parallel) + query_chunks = list(chunked_iterable(queries, chunk_size)) with ctx.Pool( processes=parallel, From 4c1d080cf960cdcc5b52ae45ebf85e3595eb1e43 Mon Sep 17 00:00:00 2001 From: Martin Dimitrov Date: Tue, 8 Apr 2025 14:18:55 -0700 Subject: [PATCH 182/209] implemented custom process management , instead of using pool --- datasets/datasets.json | 8 +++++ engine/base_client/client.py | 9 ++++-- engine/base_client/search.py | 59 ++++++++++++++++++++++-------------- 3 files changed, 51 insertions(+), 25 deletions(-) diff --git a/datasets/datasets.json b/datasets/datasets.json index ee7ce131..453e8c6b 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -330,6 +330,14 @@ "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-1M-cosine.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5" + }, + { + "name": "laion-img-emb-512-1M-100ktrain-cosine", + "vector_size": 512, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-512/laion-img-emb-512-1M-100ktrain-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5" } ] diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 0f262d34..26d2a0e5 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -36,8 +36,9 @@ def save_search_results( ): now = datetime.now() timestamp = now.strftime("%Y-%m-%d-%H-%M-%S") + pid = os.getpid() # Get the current process ID experiments_file = ( - f"{self.name}-{dataset_name}-search-{search_id}-{timestamp}.json" + f"{self.name}-{dataset_name}-search-{search_id}-{pid}-{timestamp}.json" ) result_path = RESULTS_DIR / experiments_file with open(result_path, "w") as out: @@ -89,7 +90,8 @@ def run_experiment( reader = dataset.get_reader(execution_params.get("normalize", False)) if skip_if_exists: - glob_pattern = f"{self.name}-{dataset.config.name}-search-*-*.json" + pid = os.getpid() # Get the current process ID + glob_pattern = f"{self.name}-{dataset.config.name}-search-{pid}-*-*.json" existing_results = list(RESULTS_DIR.glob(glob_pattern)) if len(existing_results) == len(self.searchers): print( @@ -124,8 +126,9 @@ def run_experiment( for search_id, searcher in enumerate(self.searchers): if skip_if_exists: + pid = os.getpid() # Get the current process ID glob_pattern = ( - f"{self.name}-{dataset.config.name}-search-{search_id}-*.json" + f"{self.name}-{dataset.config.name}-search-{search_id}-{pid}-*.json" ) existing_results = list(RESULTS_DIR.glob(glob_pattern)) print("Pattern", glob_pattern, "Results:", existing_results) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 1ba7d51e..c1408b29 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -1,6 +1,6 @@ import functools import time -from multiprocessing import get_context, Barrier +from multiprocessing import get_context, Barrier, Process, Queue from typing import Iterable, List, Optional, Tuple from itertools import islice @@ -75,19 +75,21 @@ def search_all( search_one = functools.partial(self.__class__._search_one, top=top) + # Initialize the start time + start = time.perf_counter() + if parallel == 1: - start = time.perf_counter() + # Single-threaded execution precisions, latencies = list( zip(*[search_one(query) for query in tqdm.tqdm(queries)]) ) else: - ctx = get_context(self.get_mp_start_method()) - - # Create a Barrier to synchronize processes - barrier = Barrier(parallel) + # Dynamically calculate chunk size + chunk_size = max(1, len(queries) // parallel) + query_chunks = list(chunked_iterable(queries, chunk_size)) - def process_initializer(): - """Initialize each process before starting the search.""" + # Function to be executed by each worker process + def worker_function(chunk, result_queue): self.__class__.init_client( self.host, distance, @@ -95,22 +97,30 @@ def process_initializer(): self.search_params, ) self.setup_search() - barrier.wait() # Wait for all processes to be ready + results = process_chunk(chunk, search_one) + result_queue.put(results) - # Dynamically calculate chunk size - chunk_size = max(1, len(queries) // parallel) - query_chunks = list(chunked_iterable(queries, chunk_size)) + # Create a queue to collect results + result_queue = Queue() - with ctx.Pool( - processes=parallel, - initializer=process_initializer, - ) as pool: - start = time.perf_counter() - results = pool.starmap( - process_chunk, - [(chunk, search_one) for chunk in query_chunks], - ) - precisions, latencies = zip(*[result for chunk in results for result in chunk]) + # Create and start worker processes + processes = [] + for chunk in query_chunks: + process = Process(target=worker_function, args=(chunk, result_queue)) + processes.append(process) + process.start() + + # Collect results from all worker processes + results = [] + for _ in processes: + results.extend(result_queue.get()) + + # Wait for all worker processes to finish + for process in processes: + process.join() + + # Extract precisions and latencies + precisions, latencies = zip(*results) total_time = time.perf_counter() - start @@ -151,3 +161,8 @@ def chunked_iterable(iterable, size): def process_chunk(chunk, search_one): """Process a chunk of queries using the search_one function.""" return [search_one(query) for query in chunk] + + +def process_chunk_wrapper(chunk, search_one): + """Wrapper to process a chunk of queries.""" + return process_chunk(chunk, search_one) From 0d513c26683181c90f88afed279ab29baf55256b Mon Sep 17 00:00:00 2001 From: Martin Dimitrov Date: Tue, 8 Apr 2025 14:31:40 -0700 Subject: [PATCH 183/209] measure time only during the critical work --- engine/base_client/search.py | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index c1408b29..3eae6539 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -75,14 +75,11 @@ def search_all( search_one = functools.partial(self.__class__._search_one, top=top) - # Initialize the start time - start = time.perf_counter() - if parallel == 1: # Single-threaded execution - precisions, latencies = list( - zip(*[search_one(query) for query in tqdm.tqdm(queries)]) - ) + start = time.perf_counter() + results = [search_one(query) for query in tqdm.tqdm(queries)] + total_time = time.perf_counter() - start else: # Dynamically calculate chunk size chunk_size = max(1, len(queries) // parallel) @@ -110,6 +107,9 @@ def worker_function(chunk, result_queue): processes.append(process) process.start() + # Start measuring time for the critical work + start = time.perf_counter() + # Collect results from all worker processes results = [] for _ in processes: @@ -119,10 +119,11 @@ def worker_function(chunk, result_queue): for process in processes: process.join() - # Extract precisions and latencies - precisions, latencies = zip(*results) + # Stop measuring time for the critical work + total_time = time.perf_counter() - start - total_time = time.perf_counter() - start + # Extract precisions and latencies (outside the timed section) + precisions, latencies = zip(*results) self.__class__.delete_client() From 2c592a09b3ea094034bd3e015bdbb8589e8da344 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Wed, 9 Apr 2025 09:22:19 -0700 Subject: [PATCH 184/209] Add itertools before islice function --- engine/base_client/search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index b0c153c3..7cde4e6e 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -166,7 +166,7 @@ def delete_client(cls): def chunked_iterable(iterable, size): """Yield successive chunks of a given size from an iterable.""" it = iter(iterable) - while chunk := list(islice(it, size)): + while chunk := list(itertools.islice(it, size)): yield chunk From 83e3f3e123dabd45896010fa324304409971a4fd Mon Sep 17 00:00:00 2001 From: Dvir Dukhan Date: Mon, 21 Apr 2025 09:45:08 +0000 Subject: [PATCH 185/209] update vset tests --- experiments/configurations/vectorsets-NOQUANT.json | 12 ++++++------ experiments/configurations/vectorsets-bin.json | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/experiments/configurations/vectorsets-NOQUANT.json b/experiments/configurations/vectorsets-NOQUANT.json index 9cb509c2..31b48676 100644 --- a/experiments/configurations/vectorsets-NOQUANT.json +++ b/experiments/configurations/vectorsets-NOQUANT.json @@ -55,7 +55,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "batch_size": 1024, "hnsw_config": { "quant": "NOQUANT" @@ -118,7 +118,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "NOQUANT", "M": 32, @@ -182,7 +182,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "NOQUANT", "M": 32, @@ -246,7 +246,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "NOQUANT", "M": 32, @@ -310,7 +310,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "NOQUANT", "M": 64, @@ -374,7 +374,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "NOQUANT", "M": 64, diff --git a/experiments/configurations/vectorsets-bin.json b/experiments/configurations/vectorsets-bin.json index 60da0d8a..4638976c 100644 --- a/experiments/configurations/vectorsets-bin.json +++ b/experiments/configurations/vectorsets-bin.json @@ -55,7 +55,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "batch_size": 1024, "hnsw_config": { "quant": "BIN" @@ -118,7 +118,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "BIN", "M": 32, @@ -182,7 +182,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "BIN", "M": 32, @@ -246,7 +246,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "BIN", "M": 32, @@ -310,7 +310,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "BIN", "M": 64, @@ -374,7 +374,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "BIN", "M": 64, From 2f1a6fb1cc2856e5ed5afbe113e08cb268d2809d Mon Sep 17 00:00:00 2001 From: Dvir Dukhan Date: Mon, 21 Apr 2025 09:45:20 +0000 Subject: [PATCH 186/209] adding q8 --- experiments/configurations/vectorsets-Q8.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/experiments/configurations/vectorsets-Q8.json b/experiments/configurations/vectorsets-Q8.json index fd6f64a0..9c19e7fe 100644 --- a/experiments/configurations/vectorsets-Q8.json +++ b/experiments/configurations/vectorsets-Q8.json @@ -55,7 +55,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "batch_size": 1024, "hnsw_config": { "quant": "Q8" @@ -118,7 +118,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "Q8", "M": 32, @@ -182,7 +182,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "Q8", "M": 32, @@ -246,7 +246,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "Q8", "M": 32, @@ -310,7 +310,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "Q8", "M": 64, @@ -374,7 +374,7 @@ } ], "upload_params": { - "parallel": 16, + "parallel": 32, "hnsw_config": { "quant": "Q8", "M": 64, From 20cea001f78f0ba98172b40e9816d0e1ab8c7dab Mon Sep 17 00:00:00 2001 From: filipecosta90 Date: Tue, 22 Apr 2025 15:43:05 +0100 Subject: [PATCH 187/209] Revert "Merge pull request #16 from mpozniak95/fix-sync" This reverts commit 85a6bc7ccfde0f53c06484a974cb3a6d814a7b9c, reversing changes made to ba175b1654cd8b14f38c45f38f2e76c8403192cc. --- datasets/datasets.json | 17 -------- engine/base_client/client.py | 9 ++-- engine/base_client/search.py | 80 ++++++++---------------------------- 3 files changed, 20 insertions(+), 86 deletions(-) diff --git a/datasets/datasets.json b/datasets/datasets.json index 71da5d2e..f9728a68 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -1203,22 +1203,5 @@ "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": "laion-img-emb-512-1M-cosine", - "vector_size": 512, - "distance": "cosine", - "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-1M-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5" - }, - { - "name": "laion-img-emb-512-1M-100ktrain-cosine", - "vector_size": 512, - "distance": "cosine", - "type": "h5", - "path": "laion-img-emb-512/laion-img-emb-512-1M-100ktrain-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5" } - ] diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 1d0fa69b..c78b65bc 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -40,9 +40,8 @@ def save_search_results( ): now = datetime.now() timestamp = now.strftime("%Y-%m-%d-%H-%M-%S") - pid = os.getpid() # Get the current process ID experiments_file = ( - f"{self.name}-{dataset_name}-search-{search_id}-{pid}-{timestamp}.json" + f"{self.name}-{dataset_name}-search-{search_id}-{timestamp}.json" ) result_path = RESULTS_DIR / experiments_file with open(result_path, "w") as out: @@ -98,8 +97,7 @@ def run_experiment( reader = dataset.get_reader(execution_params.get("normalize", False)) if skip_if_exists: - pid = os.getpid() # Get the current process ID - glob_pattern = f"{self.name}-{dataset.config.name}-search-{pid}-*-*.json" + glob_pattern = f"{self.name}-{dataset.config.name}-search-*-*.json" existing_results = list(RESULTS_DIR.glob(glob_pattern)) if len(existing_results) == len(self.searchers): print( @@ -137,9 +135,8 @@ def run_experiment( print("Experiment stage: Search") for search_id, searcher in enumerate(self.searchers): if skip_if_exists: - pid = os.getpid() # Get the current process ID glob_pattern = ( - f"{self.name}-{dataset.config.name}-search-{search_id}-{pid}-*.json" + f"{self.name}-{dataset.config.name}-search-{search_id}-*.json" ) existing_results = list(RESULTS_DIR.glob(glob_pattern)) print("Pattern", glob_pattern, "Results:", existing_results) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 7cde4e6e..a52ab47d 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -1,6 +1,6 @@ import functools import time -from multiprocessing import get_context, Barrier, Process, Queue +from multiprocessing import get_context from typing import Iterable, List, Optional, Tuple import itertools @@ -65,10 +65,6 @@ def search_all( ): parallel = self.search_params.get("parallel", 1) top = self.search_params.get("top", None) - - # Convert queries to a list to calculate its length - queries = list(queries) # This allows us to calculate len(queries) - # setup_search may require initialized client self.init_client( self.host, distance, self.connection_params, self.search_params @@ -84,56 +80,31 @@ def search_all( print(f"Limiting queries to [0:{MAX_QUERIES-1}]") if parallel == 1: - # Single-threaded execution start = time.perf_counter() - - results = [search_one(query) for query in tqdm.tqdm(queries)] - total_time = time.perf_counter() - start - + precisions, latencies = list( + zip(*[search_one(query) for query in tqdm.tqdm(used_queries)]) + ) else: - # Dynamically calculate chunk size - chunk_size = max(1, len(queries) // parallel) - query_chunks = list(chunked_iterable(queries, chunk_size)) + ctx = get_context(self.get_mp_start_method()) - # Function to be executed by each worker process - def worker_function(chunk, result_queue): - self.__class__.init_client( + with ctx.Pool( + processes=parallel, + initializer=self.__class__.init_client, + initargs=( self.host, distance, self.connection_params, self.search_params, + ), + ) as pool: + if parallel > 10: + time.sleep(15) # Wait for all processes to start + start = time.perf_counter() + precisions, latencies = list( + zip(*pool.imap_unordered(search_one, iterable=tqdm.tqdm(used_queries))) ) - self.setup_search() - results = process_chunk(chunk, search_one) - result_queue.put(results) - - # Create a queue to collect results - result_queue = Queue() - - # Create and start worker processes - processes = [] - for chunk in query_chunks: - process = Process(target=worker_function, args=(chunk, result_queue)) - processes.append(process) - process.start() - - # Start measuring time for the critical work - start = time.perf_counter() - # Collect results from all worker processes - results = [] - for _ in processes: - results.extend(result_queue.get()) - - # Wait for all worker processes to finish - for process in processes: - process.join() - - # Stop measuring time for the critical work - total_time = time.perf_counter() - start - - # Extract precisions and latencies (outside the timed section) - precisions, latencies = zip(*results) + total_time = time.perf_counter() - start self.__class__.delete_client() @@ -161,20 +132,3 @@ def post_search(self): @classmethod def delete_client(cls): pass - - -def chunked_iterable(iterable, size): - """Yield successive chunks of a given size from an iterable.""" - it = iter(iterable) - while chunk := list(itertools.islice(it, size)): - yield chunk - - -def process_chunk(chunk, search_one): - """Process a chunk of queries using the search_one function.""" - return [search_one(query) for query in chunk] - - -def process_chunk_wrapper(chunk, search_one): - """Wrapper to process a chunk of queries.""" - return process_chunk(chunk, search_one) From 8a2150892b4d1af72fbc31b570ee86e40bf80795 Mon Sep 17 00:00:00 2001 From: fcostaoliveira Date: Tue, 6 May 2025 22:34:46 +0100 Subject: [PATCH 188/209] Optimize client imports to only load engines specified in command line --- engine/clients/client_factory.py | 127 +++++++++++++++---------------- run.py | 1 + 2 files changed, 62 insertions(+), 66 deletions(-) diff --git a/engine/clients/client_factory.py b/engine/clients/client_factory.py index 90fe7ae8..e92bd7af 100644 --- a/engine/clients/client_factory.py +++ b/engine/clients/client_factory.py @@ -1,5 +1,6 @@ from abc import ABC -from typing import List, Type +import importlib +from typing import Dict, List, Type from engine.base_client.client import ( BaseClient, @@ -7,68 +8,52 @@ BaseSearcher, BaseUploader, ) -from engine.clients.elasticsearch import ( - ElasticConfigurator, - ElasticSearcher, - ElasticUploader, -) -from engine.clients.milvus import MilvusConfigurator, MilvusSearcher, MilvusUploader -from engine.clients.opensearch import ( - OpenSearchConfigurator, - OpenSearchSearcher, - OpenSearchUploader, -) -from engine.clients.pgvector import ( - PgVectorConfigurator, - PgVectorSearcher, - PgVectorUploader, -) -from engine.clients.qdrant import QdrantConfigurator, QdrantSearcher, QdrantUploader -from engine.clients.redis import RedisConfigurator, RedisSearcher, RedisUploader -from engine.clients.weaviate import ( - WeaviateConfigurator, - WeaviateSearcher, - WeaviateUploader, -) -from engine.clients.vectorsets import ( - RedisVsetConfigurator, - RedisVsetSearcher, - RedisVsetUploader, -) +# Dictionary to store dynamically imported client classes +_engine_classes = {} + +def _import_engine_classes(engine_name: str) -> Dict[str, Type]: + """ + Dynamically import client classes for a specific engine. + + Args: + engine_name: The name of the engine (e.g., 'redis', 'qdrant') + + Returns: + Dictionary with configurator, uploader, and searcher classes + """ + if engine_name in _engine_classes: + return _engine_classes[engine_name] -ENGINE_CONFIGURATORS = { - "qdrant": QdrantConfigurator, - "weaviate": WeaviateConfigurator, - "milvus": MilvusConfigurator, - "elasticsearch": ElasticConfigurator, - "opensearch": OpenSearchConfigurator, - "redis": RedisConfigurator, - "pgvector": PgVectorConfigurator, - "vectorsets": RedisVsetConfigurator, -} - -ENGINE_UPLOADERS = { - "qdrant": QdrantUploader, - "weaviate": WeaviateUploader, - "milvus": MilvusUploader, - "elasticsearch": ElasticUploader, - "opensearch": OpenSearchUploader, - "redis": RedisUploader, - "pgvector": PgVectorUploader, - "vectorsets": RedisVsetUploader, -} - -ENGINE_SEARCHERS = { - "qdrant": QdrantSearcher, - "weaviate": WeaviateSearcher, - "milvus": MilvusSearcher, - "elasticsearch": ElasticSearcher, - "opensearch": OpenSearchSearcher, - "redis": RedisSearcher, - "pgvector": PgVectorSearcher, - "vectorsets": RedisVsetSearcher, -} + # Handle special case for vectorsets which uses redis prefix + if engine_name == "vectorsets": + module_name = f"engine.clients.vectorsets" + class_prefix = "RedisVset" + else: + module_name = f"engine.clients.{engine_name}" + # Convert first letter to uppercase for class name + class_prefix = engine_name[0].upper() + engine_name[1:] + + try: + module = importlib.import_module(module_name) + configurator_class = getattr(module, f"{class_prefix}Configurator") + uploader_class = getattr(module, f"{class_prefix}Uploader") + searcher_class = getattr(module, f"{class_prefix}Searcher") + + _engine_classes[engine_name] = { + "configurator": configurator_class, + "uploader": uploader_class, + "searcher": searcher_class + } + + return _engine_classes[engine_name] + except (ImportError, AttributeError) as e: + raise ImportError(f"Failed to import classes for engine '{engine_name}': {e}") + +# Empty dictionaries that will be populated on demand +ENGINE_CONFIGURATORS = {} +ENGINE_UPLOADERS = {} +ENGINE_SEARCHERS = {} class ClientFactory(ABC): @@ -78,7 +63,17 @@ def __init__(self, host): def _create_configurator(self, experiment) -> BaseConfigurator: self.engine = experiment["engine"] - engine_configurator_class = ENGINE_CONFIGURATORS[experiment["engine"]] + engine_name = experiment["engine"] + + # Dynamically import engine classes if not already imported + if engine_name not in _engine_classes: + _import_engine_classes(engine_name) + # Add to the global dictionaries for compatibility + ENGINE_CONFIGURATORS[engine_name] = _engine_classes[engine_name]["configurator"] + ENGINE_UPLOADERS[engine_name] = _engine_classes[engine_name]["uploader"] + ENGINE_SEARCHERS[engine_name] = _engine_classes[engine_name]["searcher"] + + engine_configurator_class = _engine_classes[engine_name]["configurator"] engine_configurator = engine_configurator_class( self.host, collection_params={**experiment.get("collection_params", {})}, @@ -87,7 +82,8 @@ def _create_configurator(self, experiment) -> BaseConfigurator: return engine_configurator def _create_uploader(self, experiment) -> BaseUploader: - engine_uploader_class = ENGINE_UPLOADERS[experiment["engine"]] + engine_name = experiment["engine"] + engine_uploader_class = _engine_classes[engine_name]["uploader"] engine_uploader = engine_uploader_class( self.host, connection_params={**experiment.get("connection_params", {})}, @@ -96,9 +92,8 @@ def _create_uploader(self, experiment) -> BaseUploader: return engine_uploader def _create_searchers(self, experiment) -> List[BaseSearcher]: - engine_searcher_class: Type[BaseSearcher] = ENGINE_SEARCHERS[ - experiment["engine"] - ] + engine_name = experiment["engine"] + engine_searcher_class: Type[BaseSearcher] = _engine_classes[engine_name]["searcher"] engine_searchers = [ engine_searcher_class( diff --git a/run.py b/run.py index 4d770b00..30fe29bb 100644 --- a/run.py +++ b/run.py @@ -39,6 +39,7 @@ def run( for name, config in all_engines.items() if any(fnmatch.fnmatch(name, engine) for engine in engines) } + selected_datasets = { name: config for name, config in all_datasets.items() From 075c5c090d458e8c6b638c639aede238028151c9 Mon Sep 17 00:00:00 2001 From: fcostaoliveira Date: Tue, 6 May 2025 22:48:27 +0100 Subject: [PATCH 189/209] Add --queries option to specify number of queries to run --- engine/base_client/client.py | 3 ++- engine/base_client/search.py | 33 +++++++++++++++++++++++++++++---- run.py | 2 ++ 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index c78b65bc..54a825d4 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -90,6 +90,7 @@ def run_experiment( parallels: [int] = [], upload_start_idx: int = 0, upload_end_idx: int = -1, + num_queries: int = -1, ): execution_params = self.configurator.execution_params( distance=dataset.config.distance, vector_size=dataset.config.vector_size @@ -161,7 +162,7 @@ def run_experiment( ) search_stats = searcher.search_all( - dataset.config.distance, reader.read_queries() + dataset.config.distance, reader.read_queries(), num_queries ) # ensure we specify the client count in the results search_params["parallel"] = client_count diff --git a/engine/base_client/search.py b/engine/base_client/search.py index a52ab47d..32964192 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -2,11 +2,10 @@ import time from multiprocessing import get_context from typing import Iterable, List, Optional, Tuple -import itertools import numpy as np import tqdm -import os +import os from dataset_reader.base_reader import Query @@ -62,6 +61,7 @@ def search_all( self, distance, queries: Iterable[Query], + num_queries: int = -1, ): parallel = self.search_params.get("parallel", 1) top = self.search_params.get("top", None) @@ -72,13 +72,38 @@ def search_all( self.setup_search() search_one = functools.partial(self.__class__._search_one, top=top) - used_queries = queries + # Convert queries to a list for potential reuse + queries_list = list(queries) + # Handle MAX_QUERIES environment variable if MAX_QUERIES > 0: - used_queries = itertools.islice(queries, MAX_QUERIES) + queries_list = queries_list[:MAX_QUERIES] print(f"Limiting queries to [0:{MAX_QUERIES-1}]") + # Handle num_queries parameter + if num_queries > 0: + # If we need more queries than available, cycle through the list + if num_queries > len(queries_list) and len(queries_list) > 0: + print(f"Requested {num_queries} queries but only {len(queries_list)} are available.") + print(f"Extending queries by cycling through the available ones.") + # Calculate how many complete cycles and remaining items we need + complete_cycles = num_queries // len(queries_list) + remaining = num_queries % len(queries_list) + + # Create the extended list + extended_queries = [] + for _ in range(complete_cycles): + extended_queries.extend(queries_list) + extended_queries.extend(queries_list[:remaining]) + + used_queries = extended_queries + else: + used_queries = queries_list[:num_queries] + print(f"Using {num_queries} queries") + else: + used_queries = queries_list + if parallel == 1: start = time.perf_counter() precisions, latencies = list( diff --git a/run.py b/run.py index 30fe29bb..005dc6be 100644 --- a/run.py +++ b/run.py @@ -26,6 +26,7 @@ def run( timeout: float = 86400.0, upload_start_idx: int = 0, upload_end_idx: int = -1, + queries: int = typer.Option(-1, help="Number of queries to run. If the available queries are fewer, they will be reused."), ): """ Example: @@ -68,6 +69,7 @@ def run( parallels, upload_start_idx, upload_end_idx, + queries, ) client.delete_client() From a8d26cd42e309cd696f2a9bb644b7cba7b99a724 Mon Sep 17 00:00:00 2001 From: fcostaoliveira Date: Tue, 6 May 2025 22:55:42 +0100 Subject: [PATCH 190/209] Add --ef-runtime option to filter search experiments by ef values --- engine/base_client/client.py | 9 +++++++++ run.py | 2 ++ 2 files changed, 11 insertions(+) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 54a825d4..c07f3d64 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -91,6 +91,7 @@ def run_experiment( upload_start_idx: int = 0, upload_end_idx: int = -1, num_queries: int = -1, + ef_runtime: List[int] = [], ): execution_params = self.configurator.execution_params( distance=dataset.config.distance, vector_size=dataset.config.vector_size @@ -152,10 +153,18 @@ def run_experiment( if "search_params" in search_params: ef = search_params["search_params"].get("ef", "default") client_count = search_params.get("parallel", 1) + + # Filter by client count if parallels is specified filter_client_count = len(parallels) > 0 if filter_client_count and (client_count not in parallels): print(f"\tSkipping ef runtime: {ef}; #clients {client_count}") continue + + # Filter by ef runtime if ef_runtime is specified + filter_ef_runtime = len(ef_runtime) > 0 + if filter_ef_runtime and isinstance(ef, int) and (ef not in ef_runtime): + print(f"\tSkipping ef runtime: {ef}; #clients {client_count} (not in ef_runtime filter)") + continue for repetition in range(1, REPETITIONS + 1): print( f"\tRunning repetition {repetition} ef runtime: {ef}; #clients {client_count}" diff --git a/run.py b/run.py index 005dc6be..5a33d288 100644 --- a/run.py +++ b/run.py @@ -27,6 +27,7 @@ def run( upload_start_idx: int = 0, upload_end_idx: int = -1, queries: int = typer.Option(-1, help="Number of queries to run. If the available queries are fewer, they will be reused."), + ef_runtime: List[int] = typer.Option([], help="Filter search experiments by ef runtime values. Only experiments with these ef values will be run."), ): """ Example: @@ -70,6 +71,7 @@ def run( upload_start_idx, upload_end_idx, queries, + ef_runtime, ) client.delete_client() From 0209d919aa2a06120a05997e5a97f3f031309271 Mon Sep 17 00:00:00 2001 From: root Date: Mon, 7 Apr 2025 14:21:23 -0700 Subject: [PATCH 191/209] cd /home/fco/redislabs/vector-db-benchmark && git status cd /home/fco/redislabs/vector-db-benchmark && git add engine/base_client/search.py engine/base_client/client.py chunk up the iterable before starting the processes --- engine/base_client/search.py | 36 +++++++++++++++++++++++++++++------- 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 32964192..6bb1ec68 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -2,6 +2,7 @@ import time from multiprocessing import get_context from typing import Iterable, List, Optional, Tuple +from itertools import islice import numpy as np import tqdm @@ -112,22 +113,31 @@ def search_all( else: ctx = get_context(self.get_mp_start_method()) - with ctx.Pool( - processes=parallel, - initializer=self.__class__.init_client, - initargs=( + def process_initializer(): + """Initialize each process before starting the search.""" + self.__class__.init_client( self.host, distance, self.connection_params, self.search_params, - ), + ) + self.setup_search() + + # Dynamically chunk the generator + query_chunks = list(chunked_iterable(used_queries, max(1, len(used_queries) // parallel))) + + with ctx.Pool( + processes=parallel, + initializer=process_initializer, ) as pool: if parallel > 10: time.sleep(15) # Wait for all processes to start start = time.perf_counter() - precisions, latencies = list( - zip(*pool.imap_unordered(search_one, iterable=tqdm.tqdm(used_queries))) + results = pool.starmap( + process_chunk, + [(chunk, search_one) for chunk in query_chunks], ) + precisions, latencies = zip(*[result for chunk in results for result in chunk]) total_time = time.perf_counter() - start @@ -157,3 +167,15 @@ def post_search(self): @classmethod def delete_client(cls): pass + + +def chunked_iterable(iterable, size): + """Yield successive chunks of a given size from an iterable.""" + it = iter(iterable) + while chunk := list(islice(it, size)): + yield chunk + + +def process_chunk(chunk, search_one): + """Process a chunk of queries using the search_one function.""" + return [search_one(query) for query in chunk] From 534de8cc98948d5575d1942f905831f4d9d9abb3 Mon Sep 17 00:00:00 2001 From: fcostaoliveira Date: Tue, 6 May 2025 23:17:36 +0100 Subject: [PATCH 192/209] Restore performance optimizations from PR #16 (85a6bc7) --- engine/base_client/client.py | 9 +++-- engine/base_client/search.py | 65 +++++++++++++++++++++++------------- 2 files changed, 48 insertions(+), 26 deletions(-) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index c07f3d64..879a6e7d 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -40,8 +40,9 @@ def save_search_results( ): now = datetime.now() timestamp = now.strftime("%Y-%m-%d-%H-%M-%S") + pid = os.getpid() # Get the current process ID experiments_file = ( - f"{self.name}-{dataset_name}-search-{search_id}-{timestamp}.json" + f"{self.name}-{dataset_name}-search-{search_id}-{pid}-{timestamp}.json" ) result_path = RESULTS_DIR / experiments_file with open(result_path, "w") as out: @@ -99,7 +100,8 @@ def run_experiment( reader = dataset.get_reader(execution_params.get("normalize", False)) if skip_if_exists: - glob_pattern = f"{self.name}-{dataset.config.name}-search-*-*.json" + pid = os.getpid() # Get the current process ID + glob_pattern = f"{self.name}-{dataset.config.name}-search-*-{pid}-*.json" existing_results = list(RESULTS_DIR.glob(glob_pattern)) if len(existing_results) == len(self.searchers): print( @@ -137,8 +139,9 @@ def run_experiment( print("Experiment stage: Search") for search_id, searcher in enumerate(self.searchers): if skip_if_exists: + pid = os.getpid() # Get the current process ID glob_pattern = ( - f"{self.name}-{dataset.config.name}-search-{search_id}-*.json" + f"{self.name}-{dataset.config.name}-search-{search_id}-{pid}-*.json" ) existing_results = list(RESULTS_DIR.glob(glob_pattern)) print("Pattern", glob_pattern, "Results:", existing_results) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 6bb1ec68..44bb195f 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -1,6 +1,6 @@ import functools import time -from multiprocessing import get_context +from multiprocessing import Process, Queue from typing import Iterable, List, Optional, Tuple from itertools import islice @@ -106,15 +106,17 @@ def search_all( used_queries = queries_list if parallel == 1: + # Single-threaded execution start = time.perf_counter() - precisions, latencies = list( - zip(*[search_one(query) for query in tqdm.tqdm(used_queries)]) - ) + results = [search_one(query) for query in tqdm.tqdm(used_queries)] + total_time = time.perf_counter() - start else: - ctx = get_context(self.get_mp_start_method()) + # Dynamically calculate chunk size + chunk_size = max(1, len(used_queries) // parallel) + query_chunks = list(chunked_iterable(used_queries, chunk_size)) - def process_initializer(): - """Initialize each process before starting the search.""" + # Function to be executed by each worker process + def worker_function(chunk, result_queue): self.__class__.init_client( self.host, distance, @@ -122,24 +124,36 @@ def process_initializer(): self.search_params, ) self.setup_search() + results = process_chunk(chunk, search_one) + result_queue.put(results) - # Dynamically chunk the generator - query_chunks = list(chunked_iterable(used_queries, max(1, len(used_queries) // parallel))) - - with ctx.Pool( - processes=parallel, - initializer=process_initializer, - ) as pool: - if parallel > 10: - time.sleep(15) # Wait for all processes to start - start = time.perf_counter() - results = pool.starmap( - process_chunk, - [(chunk, search_one) for chunk in query_chunks], - ) - precisions, latencies = zip(*[result for chunk in results for result in chunk]) + # Create a queue to collect results + result_queue = Queue() + + # Create and start worker processes + processes = [] + for chunk in query_chunks: + process = Process(target=worker_function, args=(chunk, result_queue)) + processes.append(process) + process.start() + + # Start measuring time for the critical work + start = time.perf_counter() - total_time = time.perf_counter() - start + # Collect results from all worker processes + results = [] + for _ in processes: + results.extend(result_queue.get()) + + # Wait for all worker processes to finish + for process in processes: + process.join() + + # Stop measuring time for the critical work + total_time = time.perf_counter() - start + + # Extract precisions and latencies (outside the timed section) + precisions, latencies = zip(*results) self.__class__.delete_client() @@ -179,3 +193,8 @@ def chunked_iterable(iterable, size): def process_chunk(chunk, search_one): """Process a chunk of queries using the search_one function.""" return [search_one(query) for query in chunk] + + +def process_chunk_wrapper(chunk, search_one): + """Wrapper to process a chunk of queries.""" + return process_chunk(chunk, search_one) From 71c1f3b2b7c0a1080413b1cdaae2f0cd0a13191f Mon Sep 17 00:00:00 2001 From: fcostaoliveira Date: Tue, 6 May 2025 23:25:21 +0100 Subject: [PATCH 193/209] Add real-time progress bar with throughput display for parallel execution --- engine/base_client/search.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 44bb195f..b1e62641 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -140,10 +140,20 @@ def worker_function(chunk, result_queue): # Start measuring time for the critical work start = time.perf_counter() + # Create a progress bar for the total number of queries + total_queries = len(used_queries) + pbar = tqdm.tqdm(total=total_queries, desc="Processing queries", unit="queries") + # Collect results from all worker processes results = [] for _ in processes: - results.extend(result_queue.get()) + chunk_results = result_queue.get() + results.extend(chunk_results) + # Update the progress bar with the number of processed queries in this chunk + pbar.update(len(chunk_results)) + + # Close the progress bar + pbar.close() # Wait for all worker processes to finish for process in processes: @@ -192,6 +202,7 @@ def chunked_iterable(iterable, size): def process_chunk(chunk, search_one): """Process a chunk of queries using the search_one function.""" + # No progress bar in worker processes to avoid cluttering the output return [search_one(query) for query in chunk] From 2eda5b752dbd1bb74dc23b85763f33027a65563d Mon Sep 17 00:00:00 2001 From: fcostaoliveira Date: Tue, 6 May 2025 23:28:14 +0100 Subject: [PATCH 194/209] Add test script for multiprocessing with progress bar --- test_multiprocessing.py | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 test_multiprocessing.py diff --git a/test_multiprocessing.py b/test_multiprocessing.py new file mode 100644 index 00000000..40384946 --- /dev/null +++ b/test_multiprocessing.py @@ -0,0 +1,36 @@ +from engine.base_client.search import BaseSearcher +from dataset_reader.base_reader import Query +import time + +class TestSearcher(BaseSearcher): + @classmethod + def init_client(cls, host, distance, connection_params, search_params): + pass + + @classmethod + def search_one(cls, vector, meta_conditions, top): + return [] + + @classmethod + def _search_one(cls, query, top=None): + # Add a small delay to simulate real work + time.sleep(0.001) + return 1.0, 0.1 + + def setup_search(self): + pass + +# Create test queries +queries = [Query(vector=[0.1]*10, meta_conditions=None, expected_result=None) for _ in range(1000)] + +# Create a searcher with parallel=10 +searcher = TestSearcher('localhost', {}, {'parallel': 10}) + +# Run the search_all method +start = time.perf_counter() +results = searcher.search_all('cosine', queries) +total_time = time.perf_counter() - start + +print(f'Number of queries: {len(results["latencies"])}') +print(f'Total time: {total_time:.6f} seconds') +print(f'Throughput: {results["rps"]:.2f} queries/sec') From 6127e847306e3506469dd2f7bf196a9870128ae5 Mon Sep 17 00:00:00 2001 From: fcostaoliveira Date: Tue, 6 May 2025 23:33:10 +0100 Subject: [PATCH 195/209] Optimize query cycling for large query counts using generators --- engine/base_client/search.py | 70 ++++++++++++++++++++++++++---------- 1 file changed, 51 insertions(+), 19 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index b1e62641..6a512722 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -84,36 +84,69 @@ def search_all( # Handle num_queries parameter if num_queries > 0: - # If we need more queries than available, cycle through the list + # If we need more queries than available, use a cycling generator if num_queries > len(queries_list) and len(queries_list) > 0: print(f"Requested {num_queries} queries but only {len(queries_list)} are available.") - print(f"Extending queries by cycling through the available ones.") - # Calculate how many complete cycles and remaining items we need - complete_cycles = num_queries // len(queries_list) - remaining = num_queries % len(queries_list) - - # Create the extended list - extended_queries = [] - for _ in range(complete_cycles): - extended_queries.extend(queries_list) - extended_queries.extend(queries_list[:remaining]) - - used_queries = extended_queries + print(f"Using a cycling generator to efficiently process queries.") + + # Create a cycling generator function + def cycling_query_generator(queries, total_count): + """Generate queries by cycling through the available ones.""" + count = 0 + while count < total_count: + for query in queries: + if count < total_count: + yield query + count += 1 + else: + break + + # Use the generator instead of creating a full list + used_queries = cycling_query_generator(queries_list, num_queries) + # We need to know the total count for the progress bar + total_query_count = num_queries else: used_queries = queries_list[:num_queries] + total_query_count = len(used_queries) print(f"Using {num_queries} queries") else: used_queries = queries_list + total_query_count = len(used_queries) if parallel == 1: # Single-threaded execution start = time.perf_counter() - results = [search_one(query) for query in tqdm.tqdm(used_queries)] + + # Create a progress bar with the correct total + pbar = tqdm.tqdm(total=total_query_count, desc="Processing queries", unit="queries") + + # Process queries with progress updates + results = [] + for query in used_queries: + results.append(search_one(query)) + pbar.update(1) + + # Close the progress bar + pbar.close() + total_time = time.perf_counter() - start else: - # Dynamically calculate chunk size - chunk_size = max(1, len(used_queries) // parallel) - query_chunks = list(chunked_iterable(used_queries, chunk_size)) + # Dynamically calculate chunk size based on total_query_count + chunk_size = max(1, total_query_count // parallel) + + # If used_queries is a generator, we need to handle it differently + if hasattr(used_queries, '__next__'): + # For generators, we'll create chunks on-the-fly + query_chunks = [] + remaining = total_query_count + while remaining > 0: + current_chunk_size = min(chunk_size, remaining) + chunk = [next(used_queries) for _ in range(current_chunk_size)] + query_chunks.append(chunk) + remaining -= current_chunk_size + else: + # For lists, we can use the chunked_iterable function + query_chunks = list(chunked_iterable(used_queries, chunk_size)) # Function to be executed by each worker process def worker_function(chunk, result_queue): @@ -141,8 +174,7 @@ def worker_function(chunk, result_queue): start = time.perf_counter() # Create a progress bar for the total number of queries - total_queries = len(used_queries) - pbar = tqdm.tqdm(total=total_queries, desc="Processing queries", unit="queries") + pbar = tqdm.tqdm(total=total_query_count, desc="Processing queries", unit="queries") # Collect results from all worker processes results = [] From 343e906f9d7a78afc6321b745902dec515fc37ef Mon Sep 17 00:00:00 2001 From: fcostaoliveira Date: Tue, 6 May 2025 23:33:53 +0100 Subject: [PATCH 196/209] Update test script to test query cycling optimization --- test_multiprocessing.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test_multiprocessing.py b/test_multiprocessing.py index 40384946..341289ec 100644 --- a/test_multiprocessing.py +++ b/test_multiprocessing.py @@ -20,15 +20,15 @@ def _search_one(cls, query, top=None): def setup_search(self): pass -# Create test queries -queries = [Query(vector=[0.1]*10, meta_conditions=None, expected_result=None) for _ in range(1000)] +# Create a small set of test queries +queries = [Query(vector=[0.1]*10, meta_conditions=None, expected_result=None) for _ in range(10)] # Create a searcher with parallel=10 searcher = TestSearcher('localhost', {}, {'parallel': 10}) -# Run the search_all method +# Run the search_all method with a large num_queries parameter start = time.perf_counter() -results = searcher.search_all('cosine', queries) +results = searcher.search_all('cosine', queries, num_queries=1000) total_time = time.perf_counter() - start print(f'Number of queries: {len(results["latencies"])}') From 7640df06e67e2c86f485b4f0aa49afa5b61653ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Thu, 12 Jun 2025 16:43:42 +0200 Subject: [PATCH 197/209] Add SVS support (#23) --- engine/clients/redis/search.py | 9 ++++- engine/clients/redis/upload.py | 10 ++--- experiments/configurations/create-svs.py | 51 ++++++++++++++++++++++++ 3 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 experiments/configurations/create-svs.py diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 60c21dca..374f4222 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -37,7 +37,10 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic # 'EF_RUNTIME' is irrelevant for 'ADHOC_BF' policy if cls.hybrid_policy != "ADHOC_BF": cls.knn_conditions = "EF_RUNTIME $EF" - + elif cls.algorithm == "SVS": + cls.knn_conditions = "WS_SEARCH $WS_SEARCH" + elif cls.algorithm == "SVS_TIERED": + cls.knn_conditions = "WS_SEARCH $WS_SEARCH" cls.data_type = "FLOAT32" if "search_params" in cls.search_params: cls.data_type = ( @@ -95,6 +98,10 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: # 'EF_RUNTIME' is irrelevant for 'ADHOC_BF' policy if cls.hybrid_policy != "ADHOC_BF": params_dict["EF"] = cls.search_params["search_params"]["ef"] + if cls.algorithm == "SVS": + params_dict["WS_SEARCH"] = cls.search_params["search_params"]["WS_SEARCH"] + if cls.algorithm == "SVS_TIERED": + params_dict["WS_SEARCH"] = cls.search_params["search_params"]["WS_SEARCH"] results = cls._ft.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 e76e7da3..beb4bb9d 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -95,13 +95,13 @@ def upload_batch( @classmethod def post_upload(cls, _distance): - if cls.algorithm != "HNSW" and cls.algorithm != "FLAT": + if cls.algorithm != "HNSW" and cls.algorithm != "FLAT" and cls.algorithm != "SVS" and cls.algorithm != "SVS_TIERED": print(f"TODO: FIXME!! Avoiding calling ft.info for {cls.algorithm}...") return {} index_info = cls.client.ft().info() # redisearch / memorystore for redis - if "percent_index" in index_info: - percent_index = float(index_info["percent_index"]) + if "percent_indexed" in index_info: + percent_index = float(index_info["percent_indexed"]) while percent_index < 1.0: print( "waiting for index to be fully processed. current percent index: {}".format( @@ -109,7 +109,7 @@ def post_upload(cls, _distance): ) ) time.sleep(1) - percent_index = float(cls.client.ft().info()["percent_index"]) + percent_index = float(cls.client.ft().info()["percent_indexed"]) # memorydb if "current_lag" in index_info: current_lag = float(index_info["current_lag"]) @@ -136,7 +136,7 @@ def get_memory_usage(cls): used_memory.append(used_memory_shard) index_info = {} device_info = {} - if cls.algorithm != "HNSW" and cls.algorithm != "FLAT": + if cls.algorithm != "HNSW" and cls.algorithm != "FLAT" and cls.algorithm != "SVS" and cls.algorithm != "SVS_TIERED": print(f"TODO: FIXME!! Avoiding calling ft.info for {cls.algorithm}...") else: index_info = cls.client_decode.ft().info() diff --git a/experiments/configurations/create-svs.py b/experiments/configurations/create-svs.py new file mode 100644 index 00000000..e84d0200 --- /dev/null +++ b/experiments/configurations/create-svs.py @@ -0,0 +1,51 @@ +import json + +threads = [16] +ws_constructs = [100] +ws_search = [32, 40, 48, 64] +#ws_search = [48] +graph_degree = [32] +#quantization = ["0", "4x4", "4x8", "8", "4"] +quantization = ["8"] +topKs = [10] +data_types = ["FLOAT32"] + +for algo in ["svs_tiered"]: + for data_type in data_types: + for ws_construct in ws_constructs: + for graph_d in graph_degree: + for quant in quantization: + configs = [] + for thread in threads: + config = { + "name": f"svs-test-algo-{algo}-graph-{graph_d}-ws-con-{ws_construct}-quant-{quant}-threads-{thread}-dt-{data_type}", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": algo, + "data_type": data_type, + f"{algo}_config": {"NUM_THREADS": thread, "GRAPH_DEGREE": graph_d, "WS_CONSTRUCTION": ws_construct, "QUANTIZATION": quant}, + }, + "search_params": [], + "upload_params": { + "parallel": 128, + "data_type": data_type, + "algorithm": algo, + }, + } + for client in [1, 8, 16, 32, 64, 128]: + for ws_s in ws_search: + for top in topKs: + test_config = { + "algorithm": algo, + "parallel": client, + "top": top, + "search_params": {"WS_SEARCH": ws_s, "data_type": data_type}, + } + config["search_params"].append(test_config) + configs.append(config) + + fname = f"svs-test-algo-{algo}-graph-{graph_d}-ws-con-{ws_construct}-quant-{quant}-threads-{thread}-dt-{data_type}.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"Created {len(configs)} configs for {fname}.") \ No newline at end of file From fd59cd86fa140f164f328f1123224bcf595217ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Thu, 12 Jun 2025 16:44:39 +0200 Subject: [PATCH 198/209] Add reporting memory usage to vectorsets upload, fix running vectorsets with --skip-search --skip-upload (#22) * Add script for creating vectorsets configuration, do not flush database on init, make noquant default * Add topKs to create-vectorsets script * Add get_memory_usage function to vectorsets * Add empty line --- engine/clients/vectorsets/configure.py | 2 - engine/clients/vectorsets/upload.py | 25 ++++++++++- .../configurations/create-vectorsets.py | 41 +++++++++++++++++++ 3 files changed, 65 insertions(+), 3 deletions(-) create mode 100644 experiments/configurations/create-vectorsets.py diff --git a/engine/clients/vectorsets/configure.py b/engine/clients/vectorsets/configure.py index 5c5a06ae..95d111ba 100644 --- a/engine/clients/vectorsets/configure.py +++ b/engine/clients/vectorsets/configure.py @@ -20,7 +20,6 @@ def __init__(self, host, collection_params: dict, connection_params: dict): self.client = redis_constructor( host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) - self.client.flushall() def clean(self): conns = [self.client] @@ -30,7 +29,6 @@ def clean(self): for node in self.client.get_primaries() ] for conn in conns: - index = conn.ft() try: conn.flushall() except redis.ResponseError as e: diff --git a/engine/clients/vectorsets/upload.py b/engine/clients/vectorsets/upload.py index ccd16dd9..aec62dfb 100644 --- a/engine/clients/vectorsets/upload.py +++ b/engine/clients/vectorsets/upload.py @@ -23,7 +23,15 @@ def init_client(cls, host, distance, connection_params, upload_params): cls.client = redis_constructor( host=host, port=REDIS_PORT, password=REDIS_AUTH, username=REDIS_USER ) + cls.client_decode = redis_constructor( + host=host, + port=REDIS_PORT, + password=REDIS_AUTH, + username=REDIS_USER, + decode_responses=True, + ) cls.upload_params = upload_params + cls._is_cluster = True if REDIS_CLUSTER else False @classmethod def upload_batch( @@ -33,7 +41,7 @@ def upload_batch( hnsw_params = upload_params.get("hnsw_config") M = hnsw_params.get("M", 16) efc = hnsw_params.get("EF_CONSTRUCTION", 200) - quant = hnsw_params.get("quant") + quant = hnsw_params.get("quant", "NOQUANT") p = cls.client.pipeline(transaction=False) for i in range(len(ids)): @@ -46,3 +54,18 @@ def upload_batch( @classmethod def post_upload(cls, _distance): return {} + + def get_memory_usage(cls): + used_memory = [] + conns = [cls.client_decode] + if cls._is_cluster: + conns = [ + cls.client_decode.get_redis_connection(node) + for node in cls.client_decode.get_primaries() + ] + for conn in conns: + used_memory_shard = conn.info("memory")["used_memory"] + used_memory.append(used_memory_shard) + + return {"used_memory": sum(used_memory), + "shards": len(used_memory)} diff --git a/experiments/configurations/create-vectorsets.py b/experiments/configurations/create-vectorsets.py new file mode 100644 index 00000000..70393e7e --- /dev/null +++ b/experiments/configurations/create-vectorsets.py @@ -0,0 +1,41 @@ +import json + +ms = [16] +ef_constructs = [100] +ef_runtimes = [40, 80] +# qants = ["NOQUANT", "Q8", "BIN"] +qants = ["NOQUANT"] +configs = [] +topKs = [10] +for m in ms: + for ef_construct in ef_constructs: + for quant in qants: + config = { + "name": f"redis-intel-vectorsets-m-{m}-ef-{ef_construct}-quant-{quant}", + "engine": "vectorsets", + "connection_params": {}, + "collection_params": {}, + "search_params": [], + "upload_params": { + "parallel": 128, + "hnsw_config": { + "M": m, + "EF_CONSTRUCTION": ef_construct, + "quant": quant, + }, + }, + } + for client in [1, 8]: + for top in topKs: + for ef_runtime in ef_runtimes: + test_config = { + "top": top, + "parallel": client, + "search_params": {"ef": ef_runtime}, + } + config["search_params"].append(test_config) + configs.append(config) + fname = f"redis-intel-vectorsets.json" + with open(fname, "w") as json_fd: + json.dump(configs, json_fd, indent=2) + print(f"created {len(configs)} configs for {fname}.") From 878f46d23a09706652c56866ff42603ede5a4c03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mihai=20Capot=C4=83?= Date: Fri, 13 Jun 2025 08:50:09 -0700 Subject: [PATCH 199/209] Record start time before query processing starts (#21) Also record end time immediately after obtaining results, before joining the processes. Also remove progress bar because all processes do not report intermediate progress and all processes finish in a similar time. --- engine/base_client/search.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index 6a512722..c50b3391 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -163,37 +163,32 @@ def worker_function(chunk, result_queue): # Create a queue to collect results result_queue = Queue() - # Create and start worker processes + # Create worker processes processes = [] for chunk in query_chunks: process = Process(target=worker_function, args=(chunk, result_queue)) processes.append(process) - process.start() # Start measuring time for the critical work start = time.perf_counter() - # Create a progress bar for the total number of queries - pbar = tqdm.tqdm(total=total_query_count, desc="Processing queries", unit="queries") + # Start worker processes + for process in processes: + process.start() # Collect results from all worker processes results = [] for _ in processes: chunk_results = result_queue.get() results.extend(chunk_results) - # Update the progress bar with the number of processed queries in this chunk - pbar.update(len(chunk_results)) - # Close the progress bar - pbar.close() + # Stop measuring time for the critical work + total_time = time.perf_counter() - start # Wait for all worker processes to finish for process in processes: process.join() - # Stop measuring time for the critical work - total_time = time.perf_counter() - start - # Extract precisions and latencies (outside the timed section) precisions, latencies = zip(*results) From 5544ec09ee28ae0231f8db90b7ee582ebfb0d6de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Tue, 24 Jun 2025 19:14:20 +0200 Subject: [PATCH 200/209] Add laion 768-1M and dbpedia 1536 100 neighbors datasets (#24) --- datasets/datasets.json | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/datasets/datasets.json b/datasets/datasets.json index f9728a68..784cab9b 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -103,6 +103,14 @@ "path": "laion-img-emb-768/laion-img-emb-768-1G-cosine.hdf5", "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1G-cosine.hdf5" }, + { + "name": "laion-img-emb-768-1M-cosine", + "vector_size": 768, + "distance": "cosine", + "type": "h5", + "path": "laion-img-emb-768/laion-img-emb-768-1M-cosine.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1M-cosine.hdf5" + }, { "name": "laion-img-emb-768d-1Billion-cosine", "vector_size": 768, @@ -947,6 +955,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-1M-1536-angular-100neighbors", + "vector_size": 1536, + "distance": "cosine", + "type": "tar", + "path": "dbpedia-openai-1M-1536-angular-100neighbors/dbpedia_openai_1M", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/dbpedia_openai_1M.tgz" + }, { "name": "h-and-m-2048-angular-filters", "vector_size": 2048, From 5aa9552304f51b940ca27675fd7548f2d56f6dcb Mon Sep 17 00:00:00 2001 From: Marcin Pozniak Date: Wed, 25 Jun 2025 02:00:26 -0700 Subject: [PATCH 201/209] Remove SVS and SVS_TIERED add SVS-VAMANA algorithm --- engine/clients/redis/search.py | 10 +++------- engine/clients/redis/upload.py | 4 ++-- experiments/configurations/create-svs.py | 10 +++++----- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 374f4222..3f22fe94 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -37,10 +37,8 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic # 'EF_RUNTIME' is irrelevant for 'ADHOC_BF' policy if cls.hybrid_policy != "ADHOC_BF": cls.knn_conditions = "EF_RUNTIME $EF" - elif cls.algorithm == "SVS": - cls.knn_conditions = "WS_SEARCH $WS_SEARCH" - elif cls.algorithm == "SVS_TIERED": - cls.knn_conditions = "WS_SEARCH $WS_SEARCH" + elif cls.algorithm == "SVS-VAMANA": + cls.knn_conditions = "WS_SEARCH $SEARCH_WINDOW_SIZE" cls.data_type = "FLOAT32" if "search_params" in cls.search_params: cls.data_type = ( @@ -99,9 +97,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: if cls.hybrid_policy != "ADHOC_BF": params_dict["EF"] = cls.search_params["search_params"]["ef"] if cls.algorithm == "SVS": - params_dict["WS_SEARCH"] = cls.search_params["search_params"]["WS_SEARCH"] - if cls.algorithm == "SVS_TIERED": - params_dict["WS_SEARCH"] = cls.search_params["search_params"]["WS_SEARCH"] + params_dict["SEARCH_WINDOW_SIZE"] = cls.search_params["search_params"]["SEARCH_WINDOW_SIZE"] results = cls._ft.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 beb4bb9d..2022290c 100644 --- a/engine/clients/redis/upload.py +++ b/engine/clients/redis/upload.py @@ -95,7 +95,7 @@ def upload_batch( @classmethod def post_upload(cls, _distance): - if cls.algorithm != "HNSW" and cls.algorithm != "FLAT" and cls.algorithm != "SVS" and cls.algorithm != "SVS_TIERED": + if cls.algorithm != "HNSW" and cls.algorithm != "FLAT" and cls.algorithm != "SVS-VAMANA": print(f"TODO: FIXME!! Avoiding calling ft.info for {cls.algorithm}...") return {} index_info = cls.client.ft().info() @@ -136,7 +136,7 @@ def get_memory_usage(cls): used_memory.append(used_memory_shard) index_info = {} device_info = {} - if cls.algorithm != "HNSW" and cls.algorithm != "FLAT" and cls.algorithm != "SVS" and cls.algorithm != "SVS_TIERED": + if cls.algorithm != "HNSW" and cls.algorithm != "FLAT" and cls.algorithm != "SVS-VAMANA": print(f"TODO: FIXME!! Avoiding calling ft.info for {cls.algorithm}...") else: index_info = cls.client_decode.ft().info() diff --git a/experiments/configurations/create-svs.py b/experiments/configurations/create-svs.py index e84d0200..105bc97b 100644 --- a/experiments/configurations/create-svs.py +++ b/experiments/configurations/create-svs.py @@ -5,12 +5,12 @@ ws_search = [32, 40, 48, 64] #ws_search = [48] graph_degree = [32] -#quantization = ["0", "4x4", "4x8", "8", "4"] -quantization = ["8"] +#quantization = ["NO_COMPRESSION", "LVQ4x4", "LVQ4x8", "LVQ4", "LVQ8", "LeanVec4x8", "LeanVec8x8"] +quantization = ["LVQ4x8"] topKs = [10] data_types = ["FLOAT32"] -for algo in ["svs_tiered"]: +for algo in ["svs-vamana"]: for data_type in data_types: for ws_construct in ws_constructs: for graph_d in graph_degree: @@ -24,7 +24,7 @@ "collection_params": { "algorithm": algo, "data_type": data_type, - f"{algo}_config": {"NUM_THREADS": thread, "GRAPH_DEGREE": graph_d, "WS_CONSTRUCTION": ws_construct, "QUANTIZATION": quant}, + f"{algo}_config": {"NUM_THREADS": thread, "GRAPH_MAX_DEGREE": graph_d, "CONSTRUCTION_WINDOW_SIZE": ws_construct, "COMPRESSION": quant}, }, "search_params": [], "upload_params": { @@ -40,7 +40,7 @@ "algorithm": algo, "parallel": client, "top": top, - "search_params": {"WS_SEARCH": ws_s, "data_type": data_type}, + "search_params": {"SEARCH_WINDOW_SIZE": ws_s, "data_type": data_type}, } config["search_params"].append(test_config) configs.append(config) From 0fae9e1a17f7d12e3f6a5585c3000399ffcde7ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mihai=20Capot=C4=83?= Date: Wed, 25 Jun 2025 18:26:12 -0700 Subject: [PATCH 202/209] Fix SVS-VAMANA algorithm name --- engine/clients/redis/search.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 3f22fe94..88fef8a2 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -96,7 +96,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: # 'EF_RUNTIME' is irrelevant for 'ADHOC_BF' policy if cls.hybrid_policy != "ADHOC_BF": params_dict["EF"] = cls.search_params["search_params"]["ef"] - if cls.algorithm == "SVS": + if cls.algorithm == "SVS-VAMANA": params_dict["SEARCH_WINDOW_SIZE"] = cls.search_params["search_params"]["SEARCH_WINDOW_SIZE"] results = cls._ft.search(q, query_params=params_dict) From c444cbbe500136a303ae944791f695c8c327509d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mihai=20Capot=C4=83?= Date: Wed, 25 Jun 2025 19:07:23 -0700 Subject: [PATCH 203/209] Add calibration --- engine/base_client/client.py | 68 ++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 879a6e7d..4f097bfc 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -7,7 +7,9 @@ from benchmark import ROOT_DIR from benchmark.dataset import Dataset +from dataset_reader.base_reader import BaseReader from engine.base_client.configure import BaseConfigurator +from engine.base_client.distances import Distance from engine.base_client.search import BaseSearcher from engine.base_client.upload import BaseUploader @@ -168,6 +170,23 @@ def run_experiment( if filter_ef_runtime and isinstance(ef, int) and (ef not in ef_runtime): print(f"\tSkipping ef runtime: {ef}; #clients {client_count} (not in ef_runtime filter)") continue + + if (precision := search_params.get("calibration_precision", None)) is not None: + top = search_params["top"] + calibration_param = search_params["calibration_param"] + calibration_value, calibration_precision = calibrate( + searcher, + calibration_param, + top, + precision, + dataset.config.distance, + reader, + ) + print( + f"Calibrated {top=} {precision=} {calibration_value=} {calibration_precision=!s}" + ) + searcher.search_params["search_params"][calibration_param] = calibration_value + for repetition in range(1, REPETITIONS + 1): print( f"\tRunning repetition {repetition} ef runtime: {ef}; #clients {client_count}" @@ -196,3 +215,52 @@ def delete_client(self): for s in self.searchers: s.delete_client() + +def calibrate( + searcher: BaseSearcher, + calibration_param: str, + min_value: int, + precision: float, + distance: Distance, + reader: BaseReader, + max_value: int = 1000, +) -> tuple[int, float]: + """Calibrate searcher for a given precision.""" + if min_value > max_value: + raise ValueError( + f"{min_value=} cannot be greater than {max_value=}" + ) + lower_bound = min_value + upper_bound = max_value + lower_bound_visited = False + upper_bound_visited = False + current = (lower_bound + upper_bound) // 2 + previous = current + current_precision = 0 + while True: + searcher.search_params["search_params"][calibration_param] = current + search_stats = searcher.search_all(distance, reader.read_queries()) + previous_precision = current_precision + current_precision = search_stats["mean_precisions"] + if current_precision == precision: + return current, current_precision + elif current_precision > precision: + upper_bound = current + upper_bound_visited = True + else: + lower_bound = current + lower_bound_visited = True + next_value = (lower_bound + upper_bound) // 2 + if ( + (lower_bound_visited and next_value == lower_bound) + or (upper_bound_visited and next_value == upper_bound) + ): + if abs(previous_precision - precision) < abs(current_precision - precision): + final_precision = previous_precision + final_value = previous + else: + final_precision = current_precision + final_value = current + return final_value, final_precision + previous = current + current = next_value From 0590e976d146f56a6af508f02e3a69e45d185eeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Po=C5=BAniak?= Date: Thu, 26 Jun 2025 20:07:09 +0200 Subject: [PATCH 204/209] Dbpedia configuration (#28) * Add dbpedia calibration json * Add LVQ's to dbpedia-calibration configuration * Fix create-svs * Add LeanVec4X8 --- engine/clients/redis/search.py | 4 +- experiments/configurations/create-svs.py | 26 +- .../configurations/dbpedia-calibration.json | 324 ++++++++++++++++++ 3 files changed, 339 insertions(+), 15 deletions(-) create mode 100644 experiments/configurations/dbpedia-calibration.json diff --git a/engine/clients/redis/search.py b/engine/clients/redis/search.py index 88fef8a2..31cf27bd 100644 --- a/engine/clients/redis/search.py +++ b/engine/clients/redis/search.py @@ -38,7 +38,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic if cls.hybrid_policy != "ADHOC_BF": cls.knn_conditions = "EF_RUNTIME $EF" elif cls.algorithm == "SVS-VAMANA": - cls.knn_conditions = "WS_SEARCH $SEARCH_WINDOW_SIZE" + cls.knn_conditions = "WS_SEARCH $WS_SEARCH" cls.data_type = "FLOAT32" if "search_params" in cls.search_params: cls.data_type = ( @@ -97,7 +97,7 @@ def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: if cls.hybrid_policy != "ADHOC_BF": params_dict["EF"] = cls.search_params["search_params"]["ef"] if cls.algorithm == "SVS-VAMANA": - params_dict["SEARCH_WINDOW_SIZE"] = cls.search_params["search_params"]["SEARCH_WINDOW_SIZE"] + params_dict["WS_SEARCH"] = cls.search_params["search_params"]["WS_SEARCH"] results = cls._ft.search(q, query_params=params_dict) return [(int(result.id), float(result.vector_score)) for result in results.docs] diff --git a/experiments/configurations/create-svs.py b/experiments/configurations/create-svs.py index 105bc97b..b904de3b 100644 --- a/experiments/configurations/create-svs.py +++ b/experiments/configurations/create-svs.py @@ -1,14 +1,14 @@ import json threads = [16] -ws_constructs = [100] -ws_search = [32, 40, 48, 64] +ws_constructs = [200] +ws_search = [177] #ws_search = [48] graph_degree = [32] -#quantization = ["NO_COMPRESSION", "LVQ4x4", "LVQ4x8", "LVQ4", "LVQ8", "LeanVec4x8", "LeanVec8x8"] -quantization = ["LVQ4x8"] -topKs = [10] -data_types = ["FLOAT32"] +#quantization = ["LVQ4X4", "LVQ4x8", "LVQ8", "LVQ4"] +quantization = ["LVQ4X4"] +topKs = [100] +data_types = ["FLOAT16", "FLOAT32"] for algo in ["svs-vamana"]: for data_type in data_types: @@ -18,34 +18,34 @@ configs = [] for thread in threads: config = { - "name": f"svs-test-algo-{algo}-graph-{graph_d}-ws-con-{ws_construct}-quant-{quant}-threads-{thread}-dt-{data_type}", + "name": f"svs-{algo}-quant-{quant}-dt-{data_type}", "engine": "redis", "connection_params": {}, "collection_params": { "algorithm": algo, "data_type": data_type, - f"{algo}_config": {"NUM_THREADS": thread, "GRAPH_MAX_DEGREE": graph_d, "CONSTRUCTION_WINDOW_SIZE": ws_construct, "COMPRESSION": quant}, + f"{algo}_config": {"NUM_THREADS": thread, "GRAPH_MAX_DEGREE": graph_d, "CONSTRUCTION_WINDOW_SIZE": ws_construct, "compression": quant}, }, "search_params": [], "upload_params": { - "parallel": 128, + "parallel": 100, "data_type": data_type, "algorithm": algo, }, } - for client in [1, 8, 16, 32, 64, 128]: + for client in [100]: for ws_s in ws_search: for top in topKs: test_config = { "algorithm": algo, "parallel": client, "top": top, - "search_params": {"SEARCH_WINDOW_SIZE": ws_s, "data_type": data_type}, + "search_params": {"WS_SEARCH": ws_s, "data_type": data_type}, } config["search_params"].append(test_config) configs.append(config) - fname = f"svs-test-algo-{algo}-graph-{graph_d}-ws-con-{ws_construct}-quant-{quant}-threads-{thread}-dt-{data_type}.json" + fname = f"svs-{algo}-quant-{quant}-dt-{data_type}.json" with open(fname, "w") as json_fd: json.dump(configs, json_fd, indent=2) - print(f"Created {len(configs)} configs for {fname}.") \ No newline at end of file + print(f"Created {len(configs)} configs for {fname}.") diff --git a/experiments/configurations/dbpedia-calibration.json b/experiments/configurations/dbpedia-calibration.json new file mode 100644 index 00000000..a315de2e --- /dev/null +++ b/experiments/configurations/dbpedia-calibration.json @@ -0,0 +1,324 @@ +[ + { + "name": "dbpedia-cal-hnsw-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT16", + "hnsw_config": { + "M": 16, + "DISTANCE_METRIC": "L2", + "EF_CONSTRUCTION": 200 + } + }, + "search_params": [ + { + "parallel": 100, + "top": 100, + "calibration_param": "ef", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "algorithm": "hnsw", + "data_type": "FLOAT16" + } + }, + { + "name": "dbpedia-cal-hnsw-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "hnsw", + "data_type": "FLOAT32", + "hnsw_config": { + "M": 16, + "DISTANCE_METRIC": "L2", + "EF_CONSTRUCTION": 200 + } + }, + "search_params": [ + { + "parallel": 100, + "top": 100, + "calibration_param": "ef", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "algorithm": "hnsw", + "data_type": "FLOAT32" + } + }, +{ + "name": "dbpedia-cal-svs-noquant-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT16", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200 + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT16", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-noquant-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT32", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200 + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT32", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LVQ4X8-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT16", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LVQ4X8" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT16", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LVQ4X8-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT32", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LVQ4X8" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT32", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LVQ4X4-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT32", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LVQ4X4" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT32", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LVQ4X4-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT16", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LVQ4X4" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT16", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LeanVec4x8-float16", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT16", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LeanVec4x8" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT16" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT16", + "algorithm": "svs-vamana" + } + }, + { + "name": "dbpedia-cal-svs-LeanVec4x8-float32", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "algorithm": "svs-vamana", + "data_type": "FLOAT32", + "svs-vamana_config": { + "NUM_THREADS": 16, + "DISTANCE_METRIC": "L2", + "GRAPH_MAX_DEGREE": 32, + "CONSTRUCTION_WINDOW_SIZE": 200, + "compression": "LeanVec4x8" + } + }, + "search_params": [ + { + "algorithm": "svs-vamana", + "parallel": 100, + "top": 100, + "calibration_param": "WS_SEARCH", + "calibration_precision": 0.95, + "search_params": { + "data_type": "FLOAT32" + } + } + ], + "upload_params": { + "parallel": 100, + "data_type": "FLOAT32", + "algorithm": "svs-vamana" + } + } +] \ No newline at end of file From ad7d53dfe2f34a82d47da95b30990b82c5e6567c Mon Sep 17 00:00:00 2001 From: "Filipe Oliveira (Redis)" Date: Sun, 13 Jul 2025 12:55:36 +0100 Subject: [PATCH 205/209] enhance benchmark with dataset discovery, validation, performance monitoring, and improved Docker support (#32) * Add comprehensive Docker CI/CD pipeline - Enhanced Dockerfile with multi-stage build and security best practices - Added Docker build, run, and test scripts with Redis-specific configurations - Created GitHub Actions workflows for PR validation, master publishing, and release publishing - Added docker-compose.yml for local development with Redis - Updated documentation with Docker usage examples - Configured for redis-performance/vector-db-benchmark Docker Hub repository - Default configuration: engines=redis, dataset=random-100, experiment=redis-m-16-ef-64 - Multi-platform support (linux/amd64, linux/arm64) - Security scanning with Trivy for releases * Update Docker workflows for update-redisearch default branch - Updated PR validation to trigger on update-redisearch branch - Updated publishing workflow to use update-redisearch branch instead of master - Updated Docker tags to use update-redisearch-{sha} format - Updated documentation to reflect correct default branch * Corrected docker repo, base branch, and test-image of redis. * fixed missing redis container * feat: enhance benchmark functionality with dataset discovery, validation, and performance monitoring - Add --describe command for datasets and engines with columnar display - Implement real-time performance summaries (QPS, P50/P95 latency) - Add comprehensive dataset validation system with GitHub Actions - Complete dataset metadata with vector_count and description fields - Improve download reliability with proper HTTP headers - Standardize precision formatting (0.01 increments up to 0.97, then 0.0025) - Enhanced Docker configurations for better Redis testing defaults - Add validation documentation and automated CI/CD checks This maintains backward compatibility while significantly improving usability, data quality, and performance insights for vector database benchmarking. * Moved validate and update datasets to scripts folder * Moved validate and update datasets to scripts folder * fix: use Poetry with --no-root flag for GitHub Action dependencies - Add Poetry installation to validate-datasets workflow - Use --no-root to install dependencies without packaging the project - Run validation script with 'poetry run' to access all dependencies - Fixes ModuleNotFoundError for stopit and other dependencies when testing --describe functionality * Added boto3 dependency * Added basic test for RediSearch * Updated deps to work for python 3.12. fixed deprecation warnings * Updated poetry lock * Adding redis-tools to the verify step (redis-cli) * Adding python3 3.13 to the test matrix * Using random-100 for faster testing * Updated poetry lock * Using random-100 for faster testing * Added Redis Vector Sets checks on CI --- .dockerignore | 122 +- .github/workflows/continuous-benchmark.yaml | 32 - .github/workflows/docker-build-pr.yml | 174 ++ .github/workflows/docker-publish-master.yml | 98 + .github/workflows/docker-publish-release.yml | 114 + .github/workflows/manual-benchmark.yaml | 33 - ...-basic-functionality-redis-vector-sets.yml | 121 + .../test-basic-functionality-redisearch.yml | 121 + .github/workflows/validate-datasets.yml | 44 + DOCKER_SETUP.md | 185 ++ Dockerfile | 98 +- README.md | 102 +- benchmark/dataset.py | 63 +- datasets/datasets.json | 1807 +++++------ docker-build.sh | 181 ++ docker-run.sh | 163 + docker-test.sh | 160 + docs/dataset-validation.md | 128 + engine/base_client/client.py | 113 +- .../configurations/redis-single-node.json | 12 + poetry.lock | 2668 +++++++++-------- pyproject.toml | 5 +- run.py | 218 ++ scripts/update_datasets.py | 136 + scripts/validate_datasets.py | 231 ++ 25 files changed, 4861 insertions(+), 2268 deletions(-) delete mode 100644 .github/workflows/continuous-benchmark.yaml create mode 100644 .github/workflows/docker-build-pr.yml create mode 100644 .github/workflows/docker-publish-master.yml create mode 100644 .github/workflows/docker-publish-release.yml delete mode 100644 .github/workflows/manual-benchmark.yaml create mode 100644 .github/workflows/test-basic-functionality-redis-vector-sets.yml create mode 100644 .github/workflows/test-basic-functionality-redisearch.yml create mode 100644 .github/workflows/validate-datasets.yml create mode 100644 DOCKER_SETUP.md create mode 100755 docker-build.sh create mode 100755 docker-run.sh create mode 100755 docker-test.sh create mode 100644 docs/dataset-validation.md create mode 100644 scripts/update_datasets.py create mode 100644 scripts/validate_datasets.py diff --git a/.dockerignore b/.dockerignore index 5ceb3864..95bc6558 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1 +1,121 @@ -venv +# Python virtual environments +venv/ +.venv/ +env/ +.env/ +__pycache__/ +*.pyc +*.pyo +*.pyd +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg + +# Poetry +poetry.lock.bak + +# Test and coverage files +.coverage +.pytest_cache/ +.tox/ +.nox/ +htmlcov/ +.coverage.* +coverage.xml +*.cover +.hypothesis/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# Results and data +results/ +# Include datasets.json and random-100 dataset for basic functionality +datasets/* +!datasets/datasets.json +!datasets/random-100/ +*.h5 +*.hdf5 +*.json.gz +*.csv +*.parquet + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# IDE files +.idea/ +.vscode/ +.project +*.swp +*.swo +*~ +*.sublime-project +*.sublime-workspace + +# Git files +.git/ +.gitignore + +# CI/CD files +.github/ + +# Documentation +README.md +LICENSE +*.md +docs/ + +# Temporary files +tmp/ +temp/ +*.tmp +*.temp + +# Log files +*.log +logs/ + +# Archive files +*.7z +*.dmg +*.gz +*.iso +*.jar +*.rar +*.tar +*.zip +*.bz2 + +# Database files +*.sql +*.sqlite +*.db + +# Docker files themselves +Dockerfile* +.dockerignore +docker-*.sh diff --git a/.github/workflows/continuous-benchmark.yaml b/.github/workflows/continuous-benchmark.yaml deleted file mode 100644 index 822a0c52..00000000 --- a/.github/workflows/continuous-benchmark.yaml +++ /dev/null @@ -1,32 +0,0 @@ -name: Continuous Benchmark - -on: - repository_dispatch: - workflow_dispatch: - schedule: - # Run every 4 hours - - cron: "0 */4 * * *" - -jobs: - runBenchmark: - 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 - 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 }} - - # 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 diff --git a/.github/workflows/docker-build-pr.yml b/.github/workflows/docker-build-pr.yml new file mode 100644 index 00000000..b96a9e82 --- /dev/null +++ b/.github/workflows/docker-build-pr.yml @@ -0,0 +1,174 @@ +name: Docker Build - PR Validation + +on: + pull_request: + branches: [master, main, update.redisearch] + paths: + - 'Dockerfile' + - '.dockerignore' + - 'docker-build.sh' + - 'docker-run.sh' + - 'docker-test.sh' + - 'run.py' + - 'pyproject.toml' + - 'poetry.lock' + - '.github/workflows/docker-build-pr.yml' + +env: + IMAGE_NAME: vector-db-benchmark-pr + +jobs: + docker-build-test: + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + + services: + redis: + image: redis:8.2-rc1-alpine3.22 + ports: + - 6379:6379 + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch full history for Git info + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Extract Git metadata + id: meta + run: | + GIT_SHA=$(git rev-parse HEAD) + GIT_DIRTY=$(git diff --no-ext-diff 2>/dev/null | wc -l) + echo "git_sha=${GIT_SHA}" >> $GITHUB_OUTPUT + echo "git_dirty=${GIT_DIRTY}" >> $GITHUB_OUTPUT + echo "short_sha=${GIT_SHA:0:7}" >> $GITHUB_OUTPUT + + - name: Check Docker Hub credentials + id: check_credentials + run: | + if [[ -n "${{ secrets.DOCKER_USERNAME }}" && -n "${{ secrets.DOCKER_PASSWORD }}" ]]; then + echo "credentials_available=true" >> $GITHUB_OUTPUT + echo "✅ Docker Hub credentials are configured" + else + echo "credentials_available=false" >> $GITHUB_OUTPUT + echo "⚠️ Docker Hub credentials not configured (DOCKER_USERNAME and/or DOCKER_PASSWORD secrets missing)" + echo "This is expected for forks and external PRs. Docker build validation will still work." + fi + + - name: Build Docker image (single platform) + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64 + push: false + load: true + tags: ${{ env.IMAGE_NAME }}:pr-${{ github.event.number }} + build-args: | + GIT_SHA=${{ steps.meta.outputs.git_sha }} + GIT_DIRTY=${{ steps.meta.outputs.git_dirty }} + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Test Docker image + run: | + echo "Testing Docker image functionality..." + + # Verify image was built + if docker images | grep -q "${{ env.IMAGE_NAME }}"; then + echo "✅ Docker image built successfully" + else + echo "❌ Docker image not found" + exit 1 + fi + + # Test help command + echo "Testing --help command..." + docker run --rm ${{ env.IMAGE_NAME }}:pr-${{ github.event.number }} run.py --help + + # Test Python environment + echo "Testing Python environment..." + docker run --rm ${{ env.IMAGE_NAME }}:pr-${{ github.event.number }} -c "import sys; print(f'Python {sys.version}'); import redis; print('Redis module available')" + + # Test Redis connectivity + echo "Testing Redis connectivity..." + docker run --rm --network host ${{ env.IMAGE_NAME }}:pr-${{ github.event.number }} \ + -c "import redis; r = redis.Redis(host='localhost', port=6379); r.ping(); print('Redis connection successful')" + + # Test benchmark execution with specific configuration + echo "Testing benchmark execution with redis-m-16-ef-64 configuration..." + mkdir -p ./test-results + docker run --rm --network host -v "$(pwd)/test-results:/app/results" ${{ env.IMAGE_NAME }}:pr-${{ github.event.number }} \ + run.py --host localhost --engines redis --dataset random-100 --experiment redis-m-16-ef-64 --skip-upload --skip-search || echo "Benchmark test completed (expected to fail without proper dataset setup)" + + echo "✅ Docker image tests passed!" + + - name: Build multi-platform image (validation only) + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: false + tags: ${{ env.IMAGE_NAME }}:pr-${{ github.event.number }}-multiplatform + build-args: | + GIT_SHA=${{ steps.meta.outputs.git_sha }} + GIT_DIRTY=${{ steps.meta.outputs.git_dirty }} + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Generate PR comment + if: github.event_name == 'pull_request' + uses: actions/github-script@v7 + with: + script: | + const credentialsStatus = '${{ steps.check_credentials.outputs.credentials_available }}' === 'true' + ? '✅ Docker Hub credentials configured' + : '⚠️ Docker Hub credentials not configured (expected for forks)'; + + const output = `## 🐳 Docker Build Validation + + ✅ **Docker build successful!** + + **Platforms tested:** + - ✅ linux/amd64 (built and tested) + - ✅ linux/arm64 (build validated) + + **Git SHA:** \`${{ steps.meta.outputs.git_sha }}\` + + **Docker Hub Status:** ${credentialsStatus} + + **Image details:** + - Single platform: \`${{ env.IMAGE_NAME }}:pr-${{ github.event.number }}\` + - Multi-platform: \`${{ env.IMAGE_NAME }}:pr-${{ github.event.number }}-multiplatform\` + + **Tests performed:** + - ✅ Docker Hub credentials check + - ✅ Help command execution + - ✅ Python environment validation + - ✅ Redis connectivity test + - ✅ Benchmark execution test (redis-m-16-ef-64) + - ✅ Multi-platform build validation + + The Docker image is ready for deployment! 🚀`; + + github.rest.issues.createComment({ + issue_number: context.issue.number, + owner: context.repo.owner, + repo: context.repo.repo, + body: output + }); + + - name: Clean up test images + if: always() + run: | + docker rmi ${{ env.IMAGE_NAME }}:pr-${{ github.event.number }} || true + echo "Cleanup completed" diff --git a/.github/workflows/docker-publish-master.yml b/.github/workflows/docker-publish-master.yml new file mode 100644 index 00000000..ab96f4d3 --- /dev/null +++ b/.github/workflows/docker-publish-master.yml @@ -0,0 +1,98 @@ +name: Docker Publish - update.redisearch branch + +on: + push: + branches: [master, update.redisearch] + paths-ignore: + - '**.md' + - 'docs/**' + - '.github/workflows/continuous-benchmark.yaml' + - '.github/workflows/manual-benchmark.yaml' + +env: + REGISTRY: docker.io + IMAGE_NAME: filipe958/vector-db-benchmark + +jobs: + docker-publish: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch full history for Git info + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Check Docker Hub credentials + run: | + if [[ -z "${{ secrets.DOCKER_USERNAME }}" || -z "${{ secrets.DOCKER_PASSWORD }}" ]]; then + echo "❌ Docker Hub credentials not configured!" + echo "Please set DOCKER_USERNAME and DOCKER_PASSWORD secrets in repository settings." + exit 1 + fi + echo "✅ Docker Hub credentials are configured" + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract Git metadata + id: meta + run: | + GIT_SHA=$(git rev-parse HEAD) + GIT_DIRTY=$(git diff --no-ext-diff 2>/dev/null | wc -l) + echo "git_sha=${GIT_SHA}" >> $GITHUB_OUTPUT + echo "git_dirty=${GIT_DIRTY}" >> $GITHUB_OUTPUT + echo "short_sha=${GIT_SHA:0:7}" >> $GITHUB_OUTPUT + + - name: Extract metadata for Docker + id: docker_meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.IMAGE_NAME }} + tags: | + type=raw,value=latest + type=raw,value=update-redisearch-{{sha}} + type=raw,value=update-redisearch-{{date 'YYYYMMDD-HHmmss'}} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + build-args: | + GIT_SHA=${{ steps.meta.outputs.git_sha }} + GIT_DIRTY=${{ steps.meta.outputs.git_dirty }} + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Generate summary + run: | + echo "## 🐳 Docker Image Published" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Repository:** \`${{ env.IMAGE_NAME }}\`" >> $GITHUB_STEP_SUMMARY + echo "**Tags:**" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "${{ steps.docker_meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Git SHA:** \`${{ steps.meta.outputs.git_sha }}\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Usage:**" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY + echo "docker run --rm ${{ env.IMAGE_NAME }}:latest run.py --help" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "🔗 [View on Docker Hub](https://hub.docker.com/r/filipe958/vector-db-benchmark)" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/docker-publish-release.yml b/.github/workflows/docker-publish-release.yml new file mode 100644 index 00000000..dc0ad5ae --- /dev/null +++ b/.github/workflows/docker-publish-release.yml @@ -0,0 +1,114 @@ +name: Docker Publish - Release + +on: + release: + types: [published] + +env: + REGISTRY: docker.io + IMAGE_NAME: filipe958/vector-db-benchmark + +jobs: + docker-publish: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 # Fetch full history for Git info + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Check Docker Hub credentials + run: | + if [[ -z "${{ secrets.DOCKER_USERNAME }}" || -z "${{ secrets.DOCKER_PASSWORD }}" ]]; then + echo "❌ Docker Hub credentials not configured!" + echo "Please set DOCKER_USERNAME and DOCKER_PASSWORD secrets in repository settings." + exit 1 + fi + echo "✅ Docker Hub credentials are configured" + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + registry: ${{ env.REGISTRY }} + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Extract Git metadata + id: meta + run: | + GIT_SHA=$(git rev-parse HEAD) + GIT_DIRTY=$(git diff --no-ext-diff 2>/dev/null | wc -l) + echo "git_sha=${GIT_SHA}" >> $GITHUB_OUTPUT + echo "git_dirty=${GIT_DIRTY}" >> $GITHUB_OUTPUT + echo "short_sha=${GIT_SHA:0:7}" >> $GITHUB_OUTPUT + + - name: Extract metadata for Docker + id: docker_meta + uses: docker/metadata-action@v5 + with: + images: ${{ env.IMAGE_NAME }} + tags: | + type=ref,event=tag + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=raw,value=latest,enable={{is_default_branch}} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + with: + context: . + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.docker_meta.outputs.tags }} + labels: ${{ steps.docker_meta.outputs.labels }} + build-args: | + GIT_SHA=${{ steps.meta.outputs.git_sha }} + GIT_DIRTY=${{ steps.meta.outputs.git_dirty }} + cache-from: type=gha + cache-to: type=gha,mode=max + + - name: Run Trivy vulnerability scanner + uses: aquasecurity/trivy-action@master + with: + image-ref: ${{ env.IMAGE_NAME }}:${{ github.ref_name }} + format: 'sarif' + output: 'trivy-results.sarif' + + - name: Upload Trivy scan results to GitHub Security tab + uses: github/codeql-action/upload-sarif@v2 + if: always() + with: + sarif_file: 'trivy-results.sarif' + + - name: Generate summary + run: | + echo "## 🚀 Docker Release Published" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Repository:** \`${{ env.IMAGE_NAME }}\`" >> $GITHUB_STEP_SUMMARY + echo "**Release:** \`${{ github.ref_name }}\`" >> $GITHUB_STEP_SUMMARY + echo "**Tags:**" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "${{ steps.docker_meta.outputs.tags }}" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Git SHA:** \`${{ steps.meta.outputs.git_sha }}\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Usage:**" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`bash" >> $GITHUB_STEP_SUMMARY + echo "# Latest release" >> $GITHUB_STEP_SUMMARY + echo "docker run --rm ${{ env.IMAGE_NAME }}:${{ github.ref_name }} run.py --help" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "# Specific version" >> $GITHUB_STEP_SUMMARY + echo "docker run --rm ${{ env.IMAGE_NAME }}:latest run.py --help" >> $GITHUB_STEP_SUMMARY + echo "\`\`\`" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "🔗 [View on Docker Hub](https://hub.docker.com/r/filipe958/vector-db-benchmark)" >> $GITHUB_STEP_SUMMARY + echo "🔒 [Security Scan Results](https://github.com/${{ github.repository }}/security/code-scanning)" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/manual-benchmark.yaml b/.github/workflows/manual-benchmark.yaml deleted file mode 100644 index 4749d9fa..00000000 --- a/.github/workflows/manual-benchmark.yaml +++ /dev/null @@ -1,33 +0,0 @@ -name: Manual Benchmark - -on: - repository_dispatch: - workflow_dispatch: - inputs: - qdrant_version: - description: "Version of qdrant to benchmark (tags/v1.6.1, , my-branch, docker/v1.5.1, ghcr/dev)" - default: ghcr/dev - dataset: - description: "Dataset to benchmark" - default: laion-small-clip - -jobs: - runManualBenchmark: - name: manual benchmark - ${{ inputs.qdrant_version }} - ${{ inputs.dataset }} - 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 - 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/run_ci.sh diff --git a/.github/workflows/test-basic-functionality-redis-vector-sets.yml b/.github/workflows/test-basic-functionality-redis-vector-sets.yml new file mode 100644 index 00000000..50e6c1ec --- /dev/null +++ b/.github/workflows/test-basic-functionality-redis-vector-sets.yml @@ -0,0 +1,121 @@ +name: Test Basic Functionality - Redis Vector Sets + +on: + push: + pull_request: + +jobs: + test-basic-functionality: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13'] + + services: + redis: + image: redis:8.2-rc1-bookworm + ports: + - 6379:6379 + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + version: latest + virtualenvs-create: true + virtualenvs-in-project: true + + - name: Install dependencies + run: | + poetry install --no-root + + - name: Install Redis CLI + run: | + sudo apt-get update + sudo apt-get install -y redis-tools + + - name: Wait for Redis to be ready + run: | + echo "Waiting for Redis to be ready..." + timeout 30 bash -c 'until redis-cli -h localhost -p 6379 ping; do sleep 1; done' + echo "Redis is ready!" + + - name: Test describe functionality + run: | + echo "Testing --describe commands..." + poetry run python run.py --describe datasets | head -10 + poetry run python run.py --describe engines | head -10 + echo "✅ Describe functionality works" + + - name: Test basic benchmark functionality + run: | + echo "Testing basic benchmark with Redis..." + echo "Running: python run.py --host localhost --engines redis-default-simple --datasets glove-25-angular --queries 10" + + # Run with limited queries for faster testing + poetry run python run.py \ + --host localhost \ + --engines vectorsets-fp32-default \ + --datasets random-100 \ + --queries 10 \ + --timeout 300 + + - name: Verify results were generated + run: | + echo "Checking if results were generated..." + if [ -d "results" ] && [ "$(ls -A results)" ]; then + echo "✅ Results directory contains files:" + ls -la results/ + + # Check for summary file + if ls results/*summary.json 1> /dev/null 2>&1; then + echo "✅ Summary file found" + echo "Sample summary content:" + head -20 results/*summary.json + else + echo "⚠️ No summary file found" + fi + + # Check for experiment files + if ls results/*redis-default-simple*.json 1> /dev/null 2>&1; then + echo "✅ Experiment result files found" + else + echo "⚠️ No experiment result files found" + fi + else + echo "❌ No results generated" + exit 1 + fi + + - name: Test with skip options + run: | + echo "Testing with --skip-upload (search only)..." + poetry run python run.py \ + --host localhost \ + --engines vectorsets-fp32-default \ + --datasets random-100 \ + --queries 50 \ + --skip-upload \ + --timeout 180 + + echo "✅ Skip upload test completed" + + - name: Cleanup + run: | + echo "Cleaning up test files..." + rm -rf datasets/random-100/ + rm -rf results/ + echo "✅ Cleanup completed" diff --git a/.github/workflows/test-basic-functionality-redisearch.yml b/.github/workflows/test-basic-functionality-redisearch.yml new file mode 100644 index 00000000..90d935e4 --- /dev/null +++ b/.github/workflows/test-basic-functionality-redisearch.yml @@ -0,0 +1,121 @@ +name: Test Basic Functionality - Redis RediSearch + +on: + push: + pull_request: + +jobs: + test-basic-functionality: + runs-on: ubuntu-latest + strategy: + matrix: + python-version: ['3.10', '3.11', '3.12', '3.13'] + + services: + redis: + image: redis:8.2-rc1-bookworm + ports: + - 6379:6379 + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + version: latest + virtualenvs-create: true + virtualenvs-in-project: true + + - name: Install dependencies + run: | + poetry install --no-root + + - name: Install Redis CLI + run: | + sudo apt-get update + sudo apt-get install -y redis-tools + + - name: Wait for Redis to be ready + run: | + echo "Waiting for Redis to be ready..." + timeout 30 bash -c 'until redis-cli -h localhost -p 6379 ping; do sleep 1; done' + echo "Redis is ready!" + + - name: Test describe functionality + run: | + echo "Testing --describe commands..." + poetry run python run.py --describe datasets | head -10 + poetry run python run.py --describe engines | head -10 + echo "✅ Describe functionality works" + + - name: Test basic benchmark functionality + run: | + echo "Testing basic benchmark with Redis..." + echo "Running: python run.py --host localhost --engines redis-default-simple --datasets glove-25-angular --queries 10" + + # Run with limited queries for faster testing + poetry run python run.py \ + --host localhost \ + --engines redis-default-simple \ + --datasets random-100 \ + --queries 10 \ + --timeout 300 + + - name: Verify results were generated + run: | + echo "Checking if results were generated..." + if [ -d "results" ] && [ "$(ls -A results)" ]; then + echo "✅ Results directory contains files:" + ls -la results/ + + # Check for summary file + if ls results/*summary.json 1> /dev/null 2>&1; then + echo "✅ Summary file found" + echo "Sample summary content:" + head -20 results/*summary.json + else + echo "⚠️ No summary file found" + fi + + # Check for experiment files + if ls results/*redis-default-simple*.json 1> /dev/null 2>&1; then + echo "✅ Experiment result files found" + else + echo "⚠️ No experiment result files found" + fi + else + echo "❌ No results generated" + exit 1 + fi + + - name: Test with skip options + run: | + echo "Testing with --skip-upload (search only)..." + poetry run python run.py \ + --host localhost \ + --engines redis-default-simple \ + --datasets random-100 \ + --queries 50 \ + --skip-upload \ + --timeout 180 + + echo "✅ Skip upload test completed" + + - name: Cleanup + run: | + echo "Cleaning up test files..." + rm -rf datasets/random-100/ + rm -rf results/ + echo "✅ Cleanup completed" diff --git a/.github/workflows/validate-datasets.yml b/.github/workflows/validate-datasets.yml new file mode 100644 index 00000000..2d717183 --- /dev/null +++ b/.github/workflows/validate-datasets.yml @@ -0,0 +1,44 @@ +name: Validate Datasets + +on: + push: + paths: + - 'datasets/datasets.json' + - 'run.py' + - 'benchmark/dataset.py' + - '.github/workflows/validate-datasets.yml' + pull_request: + paths: + - 'datasets/datasets.json' + - 'run.py' + - 'benchmark/dataset.py' + - '.github/workflows/validate-datasets.yml' + +jobs: + validate-datasets: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + version: latest + virtualenvs-create: true + virtualenvs-in-project: true + + - name: Install dependencies + run: | + poetry install --no-root + + - name: Validate datasets.json + run: | + echo "Running dataset validation..." + poetry run python scripts/validate_datasets.py diff --git a/DOCKER_SETUP.md b/DOCKER_SETUP.md new file mode 100644 index 00000000..21e545b0 --- /dev/null +++ b/DOCKER_SETUP.md @@ -0,0 +1,185 @@ +# Docker Setup and Publishing Guide + +This guide explains how to set up Docker publishing for the `vector-db-benchmark` project to Docker Hub repository `filipe958/vector-db-benchmark`. + +## 🔐 Required GitHub Secrets + +To enable automated Docker publishing, you need to configure the following secrets in your GitHub repository: + +### Setting up Docker Hub Secrets + +1. **Go to your GitHub repository** → Settings → Secrets and variables → Actions + +2. **Add the following repository secrets:** + + - **`DOCKER_USERNAME`**: Your Docker Hub username + - **`DOCKER_PASSWORD`**: Your Docker Hub access token (NOT your password) + +### Creating a Docker Hub Access Token + +1. **Log in to Docker Hub** at https://hub.docker.com +2. **Go to Account Settings** → Security → Access Tokens +3. **Click "New Access Token"** +4. **Configure the token:** + - Name: `GitHub Actions - vector-db-benchmark` + - Permissions: `Read, Write, Delete` +5. **Copy the generated token** and use it as `DOCKER_PASSWORD` secret + +⚠️ **Important**: Use an access token, not your Docker Hub password, for better security. + +### Credential Validation + +All Docker publishing workflows include automatic credential validation: + +- **PR Validation**: Checks if credentials are available but continues without them (expected for forks) +- **Default Branch/Release Publishing**: **Requires** credentials and fails if not configured +- **Local Testing**: Warns if credentials are missing but continues validation + +This ensures that: +- External contributors can still validate Docker builds in PRs +- Publishing workflows fail fast if credentials are misconfigured +- Local development works regardless of credential status + +## 🚀 Automated Publishing + +Once secrets are configured, Docker images will be automatically published: + +### Default Branch Commits (update.redisearch) +- **Trigger**: Every push to `update.redisearch` branch +- **Tags**: `latest`, `update.redisearch-{sha}`, `update.redisearch-{timestamp}` +- **Platforms**: `linux/amd64`, `linux/arm64` + +### Releases +- **Trigger**: When a GitHub release is published +- **Tags**: `{version}`, `{major}.{minor}`, `{major}`, `latest` +- **Platforms**: `linux/amd64`, `linux/arm64` +- **Security**: Includes Trivy vulnerability scanning + +### Example Tags for Release v1.2.3 +``` +filipe958/vector-db-benchmark:v1.2.3 +filipe958/vector-db-benchmark:1.2.3 +filipe958/vector-db-benchmark:1.2 +filipe958/vector-db-benchmark:1 +filipe958/vector-db-benchmark:latest +``` + +## 🛠️ Manual Building and Publishing + +### Local Build +```bash +# Build only +./docker-build.sh + +# Build with custom tag +./docker-build.sh -t v1.0.0 + +# Build and push to Docker Hub +./docker-build.sh -t v1.0.0 --push + +# Multi-platform build and push +./docker-build.sh -p linux/amd64,linux/arm64 --push + +# Run local validation tests (mimics GitHub Action) +./docker-test.sh +``` + +### Prerequisites for Manual Push +```bash +# Login to Docker Hub +docker login + +# Or use environment variables +export DOCKER_USERNAME=your_username +export DOCKER_PASSWORD=your_access_token +./docker-build.sh --push +``` + +## 📦 Using the Docker Images + +### Pull and Run +```bash +# Latest version +docker pull filipe958/vector-db-benchmark:latest +docker run --rm filipe958/vector-db-benchmark:latest run.py --help + +# Specific version +docker pull filipe958/vector-db-benchmark:v1.2.3 +docker run --rm filipe958/vector-db-benchmark:v1.2.3 run.py --help +``` + +### Example Usage +```bash +# Basic Redis benchmark +docker run --rm --network=host filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple + +# With custom Redis host +docker run --rm filipe958/vector-db-benchmark:latest \ + run.py --host redis-server --engines redis --dataset random-100 --experiment redis-default-simple + +# With results output (mount current directory) +docker run --rm -v $(pwd)/results:/app/results --network=host \ + filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple + +# Using with Redis container +docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm +docker run --rm --network=host filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis --experiment redis-default-simple +docker stop redis-test && docker rm redis-test +``` + +## 🔍 Monitoring and Troubleshooting + +### GitHub Actions +- Check workflow runs in **Actions** tab +- View build logs and summaries +- Monitor security scan results + +### PR Validation +- **Automatic Docker build validation** on all pull requests +- Tests both single-platform (`linux/amd64`) and multi-platform builds +- Validates basic functionality and Redis connectivity +- Provides PR comments with build status and details +- Prevents merging PRs with broken Docker builds + +### Docker Hub +- View images at: https://hub.docker.com/r/filipe958/vector-db-benchmark +- Check image sizes and platforms +- Review vulnerability scan results + +### Common Issues + +1. **Authentication Failed** + - Verify `DOCKER_USERNAME` and `DOCKER_PASSWORD` secrets + - Ensure access token has correct permissions + +2. **Build Failed** + - Check Python version compatibility + - Verify Dockerfile syntax + - Review build logs in Actions + +3. **Push Failed** + - Confirm repository exists on Docker Hub + - Check network connectivity + - Verify permissions + +## 🏗️ Architecture + +### Multi-Stage Build +- **Stage 1**: Python build environment with full toolchain +- **Stage 2**: Minimal runtime with only necessary components +- **Result**: Optimized image size with security best practices + +### Security Features +- Non-root user execution +- Minimal attack surface +- Vulnerability scanning with Trivy +- Signed images (when configured) + +### Performance Optimizations +- Layer caching for faster builds +- Multi-platform support +- Efficient .dockerignore +- Build argument optimization diff --git a/Dockerfile b/Dockerfile index de3ad063..38aa4560 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,30 +1,100 @@ -FROM python:3.10-slim +# Multi-stage Dockerfile for vector-db-benchmark +# Stage 1: Build environment +FROM python:3.10-slim AS builder + +# Build arguments for Git metadata +ARG GIT_SHA +ARG GIT_DIRTY +# Environment variables for Python ENV PYTHONFAULTHANDLER=1 \ - PYTHONUNBUFFERED=1 \ - PYTHONHASHSEED=random \ - PIP_NO_CACHE_DIR=off \ - PIP_DISABLE_PIP_VERSION_CHECK=on \ - PIP_DEFAULT_TIMEOUT=100 \ - POETRY_VERSION=1.5.1 + PYTHONUNBUFFERED=1 \ + PYTHONHASHSEED=random \ + PIP_NO_CACHE_DIR=off \ + PIP_DISABLE_PIP_VERSION_CHECK=on \ + PIP_DEFAULT_TIMEOUT=100 \ + POETRY_VERSION=1.5.1 -RUN apt update -RUN apt install -y wget +# Install system dependencies +RUN apt-get update && apt-get install -y \ + wget \ + git \ + build-essential \ + && rm -rf /var/lib/apt/lists/* +# Install Poetry RUN pip install "poetry==$POETRY_VERSION" -# Copy only requirements to cache them in docker layer +# Set working directory WORKDIR /code + +# Copy dependency files first for better caching COPY poetry.lock pyproject.toml /code/ -# Project initialization: +# Configure Poetry and install dependencies RUN poetry config virtualenvs.create false \ && poetry install --no-dev --no-interaction --no-ansi -# Creating folders, and files for a project: +# Install additional dependencies +RUN pip install "boto3" + +# Copy source code COPY . /code -RUN pip install "boto3" +# Store Git information +RUN if [ -z "$GIT_SHA" ]; then \ + GIT_SHA=$(git rev-parse HEAD 2>/dev/null || echo "unknown"); \ + fi && \ + if [ -z "$GIT_DIRTY" ]; then \ + GIT_DIRTY=$(git diff --no-ext-diff 2>/dev/null | wc -l || echo "0"); \ + fi && \ + echo "Built with GIT_SHA=${GIT_SHA}, GIT_DIRTY=${GIT_DIRTY}" > /code/build_info.txt + +# Stage 2: Runtime environment +FROM python:3.10-slim + +# Environment variables for Python +ENV PYTHONFAULTHANDLER=1 \ + PYTHONUNBUFFERED=1 \ + PYTHONHASHSEED=random + +# Install runtime dependencies +RUN apt-get update && apt-get install -y \ + wget \ + && rm -rf /var/lib/apt/lists/* + +# Create non-root user +RUN groupadd -g 1001 -r appgroup && \ + useradd -u 1001 -r -g appgroup appuser + +# Set working directory +WORKDIR /app + +# Copy Python environment from builder +COPY --from=builder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages +COPY --from=builder /usr/local/bin /usr/local/bin + +# Copy application code +COPY --from=builder /code /app + +# Create directories with proper permissions +RUN mkdir -p /app/results /app/datasets && \ + chown -R appuser:appgroup /app && \ + chmod -R 755 /app + +# Switch to non-root user +USER appuser + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ + CMD python -c "import sys; sys.exit(0)" || exit 1 + +# Expose common ports (for documentation purposes) +EXPOSE 6379 6380 + +# Set entrypoint +ENTRYPOINT ["python"] -CMD ["python"] +# Default command (show help) +CMD ["run.py", "--help"] diff --git a/README.md b/README.md index 1419a120..2f7ab5b2 100644 --- a/README.md +++ b/README.md @@ -22,14 +22,102 @@ We have a number of precomputed data sets. All data sets have been pre-split int | Dataset | Dimensions | Train size | Test size | Neighbors | Distance | | ----------------------------------------------------------------------------------------------------------- | ---------: | ---------: | --------: | --------: | --------- | -| [LAION-1M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 1,000,000 | 10,000 | 100 | Angular | -| [LAION-10M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 10,000,000 | 10,000 | 100 | Angular | -| [LAION-20M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 20,000,000 | 10,000 | 100 | Angular | -| [LAION-40M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 40,000,000 | 10,000 | 100 | Angular | -| [LAION-100M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 100,000,000 | 10,000 | 100 | Angular | -| [LAION-200M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 200,000,000 | 10,000 | 100 | Angular | -| [LAION-400M: from LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 400,000,000 | 10,000 | 100 | Angular | +| **LAION Image Embeddings (512D)** | | | | | | +| [LAION-1M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 1,000,000 | 10,000 | 100 | Cosine | +| [LAION-10M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 10,000,000 | 10,000 | 100 | Cosine | +| [LAION-20M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 20,000,000 | 10,000 | 100 | Cosine | +| [LAION-40M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 40,000,000 | 10,000 | 100 | Cosine | +| [LAION-100M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 100,000,000 | 10,000 | 100 | Cosine | +| [LAION-200M: subset of LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 200,000,000 | 10,000 | 100 | Cosine | +| [LAION-400M: from LAION 400M English (image embedings)](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 400,000,000 | 10,000 | 100 | Cosine | +| **LAION Image Embeddings (768D)** | | | | | | +| [LAION-1M: 768D image embeddings](https://laion.ai/blog/laion-400-open-dataset/) | 768 | 1,000,000 | 10,000 | 100 | Cosine | +| [LAION-1B: 768D image embeddings](https://laion.ai/blog/laion-400-open-dataset/) | 768 | 1,000,000,000| 10,000 | 100 | Cosine | +| **Standard Benchmarks** | | | | | | +| [GloVe-25: Word vectors](http://ann-benchmarks.com) | 25 | 1,183,514 | 10,000 | 100 | Cosine | +| [GloVe-100: Word vectors](http://ann-benchmarks.com) | 100 | 1,183,514 | 10,000 | 100 | Cosine | +| [Deep Image-96: CNN image features](http://ann-benchmarks.com) | 96 | 9,990,000 | 10,000 | 100 | Cosine | +| [GIST-960: Image descriptors](http://ann-benchmarks.com) | 960 | 1,000,000 | 1,000 | 100 | L2 | +| **Text and Knowledge Embeddings** | | | | | | +| [DBpedia OpenAI-1M: Knowledge embeddings](https://www.dbpedia.org/) | 1,536 | 1,000,000 | 10,000 | 100 | Cosine | +| [LAION Small CLIP: Small CLIP embeddings](https://laion.ai/blog/laion-400-open-dataset/) | 512 | 100,000 | 1,000 | 100 | Cosine | +| **Yandex Datasets** | | | | | | +| [Yandex T2I: Text-to-image embeddings](https://research.yandex.com/) | 200 | 1,000,000 | 100,000 | 100 | Dot | +| **Random and Synthetic** | | | | | | +| Random-100: Small synthetic dataset | 100 | 100 | 9 | 9 | Cosine | +| Random-100-Euclidean: Small synthetic dataset | 100 | 100 | 9 | 9 | L2 | +| **Filtered Search Datasets** | | | | | | +| H&M-2048: Fashion product embeddings (with filters) | 2,048 | 105,542 | 2,000 | 100 | Cosine | +| H&M-2048: Fashion product embeddings (no filters) | 2,048 | 105,542 | 2,000 | 100 | Cosine | +| ArXiv-384: Academic paper embeddings (with filters) | 384 | 2,205,995 | 10,000 | 100 | Cosine | +| ArXiv-384: Academic paper embeddings (no filters) | 384 | 2,205,995 | 10,000 | 100 | Cosine | +| Random Match Keyword-100: Synthetic keyword matching (with filters) | 100 | 1,000,000 | 10,000 | 100 | Cosine | +| Random Match Keyword-100: Synthetic keyword matching (no filters) | 100 | 1,000,000 | 10,000 | 100 | Cosine | +| Random Match Int-100: Synthetic integer matching (with filters) | 100 | 1,000,000 | 10,000 | 100 | Cosine | +| Random Match Int-100: Synthetic integer matching (no filters) | 100 | 1,000,000 | 10,000 | 100 | Cosine | +| Random Range-100: Synthetic range queries (with filters) | 100 | 1,000,000 | 10,000 | 100 | Cosine | +| Random Range-100: Synthetic range queries (no filters) | 100 | 1,000,000 | 10,000 | 100 | Cosine | +| Random Geo Radius-100: Synthetic geo queries (with filters) | 100 | 1,000,000 | 10,000 | 100 | Cosine | +| Random Geo Radius-100: Synthetic geo queries (no filters) | 100 | 1,000,000 | 10,000 | 100 | Cosine | +| Random Match Keyword-2048: Large synthetic keyword matching (with filters) | 2,048 | 100,000 | 1,000 | 100 | Cosine | +| Random Match Keyword-2048: Large synthetic keyword matching (no filters) | 2,048 | 100,000 | 1,000 | 100 | Cosine | +| Random Match Int-2048: Large synthetic integer matching (with filters) | 2,048 | 100,000 | 1,000 | 100 | Cosine | +| Random Match Int-2048: Large synthetic integer matching (no filters) | 2,048 | 100,000 | 1,000 | 100 | Cosine | +| Random Range-2048: Large synthetic range queries (with filters) | 2,048 | 100,000 | 1,000 | 100 | Cosine | +| Random Range-2048: Large synthetic range queries (no filters) | 2,048 | 100,000 | 1,000 | 100 | Cosine | +| Random Geo Radius-2048: Large synthetic geo queries (with filters) | 2,048 | 100,000 | 1,000 | 100 | Cosine | +| Random Geo Radius-2048: Large synthetic geo queries (no filters) | 2,048 | 100,000 | 1,000 | 100 | Cosine | +| Random Match Keyword Small Vocab-256: Small vocabulary keyword matching (with filters) | 256 | 1,000,000 | 10,000 | 100 | Cosine | +| Random Match Keyword Small Vocab-256: Small vocabulary keyword matching (no filters) | 256 | 1,000,000 | 10,000 | 100 | Cosine | + + +## 🐳 Docker Usage + +The easiest way to run vector-db-benchmark is using Docker. We provide pre-built images on Docker Hub. + +### Quick Start with Docker +```bash +# Pull the latest image +docker pull filipe958/vector-db-benchmark:latest + +# Run with help +docker run --rm filipe958/vector-db-benchmark:latest run.py --help + +# Basic Redis benchmark with local Redis +docker run --rm --network=host filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple + +# With results output (mount current directory) +docker run --rm -v $(pwd)/results:/app/results --network=host \ + filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple +``` + +### Using with Redis + +For testing with Redis, start a Redis container first: + +```bash +# Start Redis container +docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm + +# Run benchmark against Redis +docker run --rm --network=host filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple + +# Or use the convenience script +./docker-run.sh -H localhost -e redis -d random-100 -x redis-default-simple + +# Clean up Redis container when done +docker stop redis-test && docker rm redis-test +``` + +### Available Docker Images + +- **Latest**: `filipe958/vector-db-benchmark:latest` + +For detailed Docker setup and publishing information, see [DOCKER_SETUP.md](DOCKER_SETUP.md). ## How to run a benchmark? diff --git a/benchmark/dataset.py b/benchmark/dataset.py index c71b19af..3b992ecb 100644 --- a/benchmark/dataset.py +++ b/benchmark/dataset.py @@ -2,6 +2,7 @@ import shutil import tarfile import urllib.request +import urllib.parse from dataclasses import dataclass, field from typing import Dict, List, Optional, Union import boto3 @@ -27,6 +28,8 @@ class DatasetConfig: ] # Now path is expected to handle multi-file structure for h5-multi link: Optional[Dict[str, List[Dict[str, str]]]] = None schema: Optional[Dict[str, str]] = field(default_factory=dict) + vector_count: Optional[int] = None + description: Optional[str] = None READER_TYPE = { @@ -43,6 +46,62 @@ def show_progress(block_num, block_size, total_size): print(f"{percent} %", end="\r") +def download_with_headers(url, filename=None, progress_callback=None): + """Download a file with proper HTTP headers to avoid 403 errors.""" + # Create a request with proper headers + headers = { + 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', + 'Accept': '*/*', + 'Accept-Language': 'en-US,en;q=0.9', + 'Accept-Encoding': 'gzip, deflate', + 'Connection': 'keep-alive', + 'Upgrade-Insecure-Requests': '1', + } + + req = urllib.request.Request(url, headers=headers) + + # Open the URL + with urllib.request.urlopen(req) as response: + # Get the filename from Content-Disposition header or URL + if filename is None: + content_disposition = response.headers.get('Content-Disposition') + if content_disposition and 'filename=' in content_disposition: + filename = content_disposition.split('filename=')[1].strip('"') + else: + filename = os.path.basename(url.split('?')[0]) + + # Create a temporary file + import tempfile + temp_dir = tempfile.gettempdir() + temp_path = os.path.join(temp_dir, filename) + + # Get total size for progress tracking + total_size = int(response.headers.get('Content-Length', 0)) + + # Download the file + with open(temp_path, 'wb') as f: + downloaded = 0 + block_size = 8192 + block_num = 0 + + while True: + chunk = response.read(block_size) + if not chunk: + break + + f.write(chunk) + downloaded += len(chunk) + block_num += 1 + + if progress_callback: + progress_callback(block_num, block_size, total_size) + + if progress_callback: + print() # New line after progress + + return temp_path, None + + # Progress handler for S3 downloads class S3Progress(tqdm): def __init__(self, total_size): @@ -120,7 +179,7 @@ def download(self): print("Credentials not found, downloading without boto3") if not downloaded_withboto: print(f"Downloading from URL {self.config.link}...") - tmp_path, _ = urllib.request.urlretrieve( + tmp_path, _ = download_with_headers( self.config.link, None, show_progress ) self._extract_or_move_file(tmp_path, target_path) @@ -132,7 +191,7 @@ def _download_file(self, relative_path: str, url: str): return print(f"Downloading from {url} to {target_path}") - tmp_path, _ = urllib.request.urlretrieve(url, None, show_progress) + tmp_path, _ = download_with_headers(url, None, show_progress) self._extract_or_move_file(tmp_path, target_path) def _extract_or_move_file(self, tmp_path, target_path): diff --git a/datasets/datasets.json b/datasets/datasets.json index 784cab9b..5493502e 100644 --- a/datasets/datasets.json +++ b/datasets/datasets.json @@ -2,939 +2,962 @@ { "name": "glove-25-angular", "vector_size": 25, + "vector_count": 1183514, "distance": "cosine", "type": "h5", "path": "glove-25-angular/glove-25-angular.hdf5", - "link": "http://ann-benchmarks.com/glove-25-angular.hdf5" + "link": "http://ann-benchmarks.com/glove-25-angular.hdf5", + "description": "Word vectors" }, { "name": "glove-100-angular", "vector_size": 100, + "vector_count": 1183514, "distance": "cosine", "type": "h5", "path": "glove-100-angular/glove-100-angular.hdf5", - "link": "http://ann-benchmarks.com/glove-100-angular.hdf5" + "link": "http://ann-benchmarks.com/glove-100-angular.hdf5", + "description": "Word vectors" }, { "name": "yandex-t2i-gt-100k", "vector_size": 200, + "vector_count": 100000, "distance": "dot", "type": "tar", "path": "yandex-1B-200-angular/yandex_t2i_gt_100k", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/yandex_t2i_gt_100k.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/yandex_t2i_gt_100k.tgz", + "description": "Text-to-image embeddings" }, { "name": "deep-image-96-angular", "vector_size": 96, + "vector_count": 9990000, "distance": "cosine", "type": "h5", "path": "deep-image-96-angular/deep-image-96-angular.hdf5", - "link": "http://ann-benchmarks.com/deep-image-96-angular.hdf5" + "link": "http://ann-benchmarks.com/deep-image-96-angular.hdf5", + "description": "CNN image features" }, { "name": "gist-960-euclidean", "vector_size": 960, + "vector_count": 1000000, "distance": "l2", "type": "h5", "path": "gist-960-euclidean/gist-960-euclidean.hdf5", - "link": "http://ann-benchmarks.com/gist-960-euclidean.hdf5" + "link": "http://ann-benchmarks.com/gist-960-euclidean.hdf5", + "description": "Image descriptors" }, { "name": "laion-img-emb-512-1M-cosine", "vector_size": 512, + "vector_count": 1000000, "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-1M-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-1M-cosine.hdf5" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-1M-cosine.hdf5", + "description": "Image embeddings" }, { "name": "laion-img-emb-512-10M-cosine", "vector_size": 512, + "vector_count": 10000000, "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-10M-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-10M-cosine.hdf5" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-10M-cosine.hdf5", + "description": "Image embeddings" }, { "name": "laion-img-emb-512-20M-cosine", "vector_size": 512, + "vector_count": 20000000, "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-20M-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-20M-cosine.hdf5" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-20M-cosine.hdf5", + "description": "Image embeddings" }, { "name": "laion-img-emb-512-40M-cosine", "vector_size": 512, + "vector_count": 40000000, "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-40M-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-40M-cosine.hdf5" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-40M-cosine.hdf5", + "description": "Image embeddings" }, { "name": "laion-img-emb-512-100M-cosine", "vector_size": 512, + "vector_count": 100000000, "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-100M-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-100M-cosine.hdf5", + "description": "Image embeddings" }, { "name": "laion-img-emb-512-200M-cosine", "vector_size": 512, + "vector_count": 200000000, "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-200M-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-200M-cosine.hdf5" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-200M-cosine.hdf5", + "description": "Image embeddings" }, { "name": "laion-img-emb-512-400M-cosine", "vector_size": 512, + "vector_count": 400000000, "distance": "cosine", "type": "h5", "path": "laion-img-emb-512/laion-img-emb-512-400M-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-400M-cosine.hdf5" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-512-400M-cosine.hdf5", + "description": "Image embeddings" }, { "name": "laion-img-emb-768-1G-cosine", "vector_size": 768, + "vector_count": 1000000000, "distance": "cosine", "type": "h5", "path": "laion-img-emb-768/laion-img-emb-768-1G-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1G-cosine.hdf5" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1G-cosine.hdf5", + "description": "Image embeddings" }, { "name": "laion-img-emb-768-1M-cosine", "vector_size": 768, + "vector_count": 1000000, "distance": "cosine", "type": "h5", "path": "laion-img-emb-768/laion-img-emb-768-1M-cosine.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1M-cosine.hdf5" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/laion-img-emb-768-1M-cosine.hdf5", + "description": "Image embeddings" }, { "name": "laion-img-emb-768d-1Billion-cosine", "vector_size": 768, + "vector_count": 1000000000, "distance": "cosine", "type": "h5-multi", "path": { - "data": [ - { - "file_number": "1", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", - "start_idx": 0, - "end_idx": 10000000, - "file_size": "30.7 GB" - }, - { - "file_number": "10", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", - "start_idx": 90000000, - "end_idx": 100000000, - "file_size": "30.7 GB" - }, - { - "file_number": "100", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", - "start_idx": 990000000, - "end_idx": 1000000000, - "file_size": "30.7 GB" - }, - { - "file_number": "11", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part11-100000000_to_110000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part11-100000000_to_110000000.hdf5", - "start_idx": 100000000, - "end_idx": 110000000, - "file_size": "30.7 GB" - }, - { - "file_number": "12", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part12-110000000_to_120000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part12-110000000_to_120000000.hdf5", - "start_idx": 110000000, - "end_idx": 120000000, - "file_size": "30.7 GB" - }, - { - "file_number": "13", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part13-120000000_to_130000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part13-120000000_to_130000000.hdf5", - "start_idx": 120000000, - "end_idx": 130000000, - "file_size": "30.7 GB" - }, - { - "file_number": "14", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part14-130000000_to_140000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part14-130000000_to_140000000.hdf5", - "start_idx": 130000000, - "end_idx": 140000000, - "file_size": "30.7 GB" - }, - { - "file_number": "15", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part15-140000000_to_150000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part15-140000000_to_150000000.hdf5", - "start_idx": 140000000, - "end_idx": 150000000, - "file_size": "30.7 GB" - }, - { - "file_number": "16", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part16-150000000_to_160000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part16-150000000_to_160000000.hdf5", - "start_idx": 150000000, - "end_idx": 160000000, - "file_size": "30.7 GB" - }, - { - "file_number": "17", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part17-160000000_to_170000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part17-160000000_to_170000000.hdf5", - "start_idx": 160000000, - "end_idx": 170000000, - "file_size": "30.7 GB" - }, - { - "file_number": "18", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part18-170000000_to_180000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part18-170000000_to_180000000.hdf5", - "start_idx": 170000000, - "end_idx": 180000000, - "file_size": "30.7 GB" - }, - { - "file_number": "19", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part19-180000000_to_190000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part19-180000000_to_190000000.hdf5", - "start_idx": 180000000, - "end_idx": 190000000, - "file_size": "30.7 GB" - }, - { - "file_number": "2", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part2-10000000_to_20000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part2-10000000_to_20000000.hdf5", - "start_idx": 10000000, - "end_idx": 20000000, - "file_size": "30.7 GB" - }, - { - "file_number": "20", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part20-190000000_to_200000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part20-190000000_to_200000000.hdf5", - "start_idx": 190000000, - "end_idx": 200000000, - "file_size": "30.7 GB" - }, - { - "file_number": "21", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part21-200000000_to_210000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part21-200000000_to_210000000.hdf5", - "start_idx": 200000000, - "end_idx": 210000000, - "file_size": "30.7 GB" - }, - { - "file_number": "22", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part22-210000000_to_220000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part22-210000000_to_220000000.hdf5", - "start_idx": 210000000, - "end_idx": 220000000, - "file_size": "30.7 GB" - }, - { - "file_number": "23", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part23-220000000_to_230000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part23-220000000_to_230000000.hdf5", - "start_idx": 220000000, - "end_idx": 230000000, - "file_size": "30.7 GB" - }, - { - "file_number": "24", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part24-230000000_to_240000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part24-230000000_to_240000000.hdf5", - "start_idx": 230000000, - "end_idx": 240000000, - "file_size": "30.7 GB" - }, - { - "file_number": "25", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part25-240000000_to_250000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part25-240000000_to_250000000.hdf5", - "start_idx": 240000000, - "end_idx": 250000000, - "file_size": "30.7 GB" - }, - { - "file_number": "26", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part26-250000000_to_260000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part26-250000000_to_260000000.hdf5", - "start_idx": 250000000, - "end_idx": 260000000, - "file_size": "30.7 GB" - }, - { - "file_number": "27", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part27-260000000_to_270000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part27-260000000_to_270000000.hdf5", - "start_idx": 260000000, - "end_idx": 270000000, - "file_size": "30.7 GB" - }, - { - "file_number": "28", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part28-270000000_to_280000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part28-270000000_to_280000000.hdf5", - "start_idx": 270000000, - "end_idx": 280000000, - "file_size": "30.7 GB" - }, - { - "file_number": "29", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part29-280000000_to_290000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part29-280000000_to_290000000.hdf5", - "start_idx": 280000000, - "end_idx": 290000000, - "file_size": "30.7 GB" - }, - { - "file_number": "3", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part3-20000000_to_30000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part3-20000000_to_30000000.hdf5", - "start_idx": 20000000, - "end_idx": 30000000, - "file_size": "30.7 GB" - }, - { - "file_number": "30", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part30-290000000_to_300000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part30-290000000_to_300000000.hdf5", - "start_idx": 290000000, - "end_idx": 300000000, - "file_size": "30.7 GB" - }, - { - "file_number": "31", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part31-300000000_to_310000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part31-300000000_to_310000000.hdf5", - "start_idx": 300000000, - "end_idx": 310000000, - "file_size": "30.7 GB" - }, - { - "file_number": "32", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part32-310000000_to_320000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part32-310000000_to_320000000.hdf5", - "start_idx": 310000000, - "end_idx": 320000000, - "file_size": "30.7 GB" - }, - { - "file_number": "33", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part33-320000000_to_330000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part33-320000000_to_330000000.hdf5", - "start_idx": 320000000, - "end_idx": 330000000, - "file_size": "30.7 GB" - }, - { - "file_number": "34", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part34-330000000_to_340000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part34-330000000_to_340000000.hdf5", - "start_idx": 330000000, - "end_idx": 340000000, - "file_size": "30.7 GB" - }, - { - "file_number": "35", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part35-340000000_to_350000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part35-340000000_to_350000000.hdf5", - "start_idx": 340000000, - "end_idx": 350000000, - "file_size": "30.7 GB" - }, - { - "file_number": "36", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part36-350000000_to_360000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part36-350000000_to_360000000.hdf5", - "start_idx": 350000000, - "end_idx": 360000000, - "file_size": "30.7 GB" - }, - { - "file_number": "37", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part37-360000000_to_370000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part37-360000000_to_370000000.hdf5", - "start_idx": 360000000, - "end_idx": 370000000, - "file_size": "30.7 GB" - }, - { - "file_number": "38", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part38-370000000_to_380000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part38-370000000_to_380000000.hdf5", - "start_idx": 370000000, - "end_idx": 380000000, - "file_size": "30.7 GB" - }, - { - "file_number": "39", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part39-380000000_to_390000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part39-380000000_to_390000000.hdf5", - "start_idx": 380000000, - "end_idx": 390000000, - "file_size": "30.7 GB" - }, - { - "file_number": "4", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part4-30000000_to_40000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part4-30000000_to_40000000.hdf5", - "start_idx": 30000000, - "end_idx": 40000000, - "file_size": "30.7 GB" - }, - { - "file_number": "40", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part40-390000000_to_400000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part40-390000000_to_400000000.hdf5", - "start_idx": 390000000, - "end_idx": 400000000, - "file_size": "30.7 GB" - }, - { - "file_number": "41", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part41-400000000_to_410000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part41-400000000_to_410000000.hdf5", - "start_idx": 400000000, - "end_idx": 410000000, - "file_size": "30.7 GB" - }, - { - "file_number": "42", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part42-410000000_to_420000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part42-410000000_to_420000000.hdf5", - "start_idx": 410000000, - "end_idx": 420000000, - "file_size": "30.7 GB" - }, - { - "file_number": "43", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part43-420000000_to_430000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part43-420000000_to_430000000.hdf5", - "start_idx": 420000000, - "end_idx": 430000000, - "file_size": "30.7 GB" - }, - { - "file_number": "44", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part44-430000000_to_440000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part44-430000000_to_440000000.hdf5", - "start_idx": 430000000, - "end_idx": 440000000, - "file_size": "30.7 GB" - }, - { - "file_number": "45", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part45-440000000_to_450000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part45-440000000_to_450000000.hdf5", - "start_idx": 440000000, - "end_idx": 450000000, - "file_size": "30.7 GB" - }, - { - "file_number": "46", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part46-450000000_to_460000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part46-450000000_to_460000000.hdf5", - "start_idx": 450000000, - "end_idx": 460000000, - "file_size": "30.7 GB" - }, - { - "file_number": "47", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part47-460000000_to_470000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part47-460000000_to_470000000.hdf5", - "start_idx": 460000000, - "end_idx": 470000000, - "file_size": "30.7 GB" - }, - { - "file_number": "48", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part48-470000000_to_480000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part48-470000000_to_480000000.hdf5", - "start_idx": 470000000, - "end_idx": 480000000, - "file_size": "30.7 GB" - }, - { - "file_number": "49", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part49-480000000_to_490000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part49-480000000_to_490000000.hdf5", - "start_idx": 480000000, - "end_idx": 490000000, - "file_size": "30.7 GB" - }, - { - "file_number": "5", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part5-40000000_to_50000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part5-40000000_to_50000000.hdf5", - "start_idx": 40000000, - "end_idx": 50000000, - "file_size": "30.7 GB" - }, - { - "file_number": "50", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part50-490000000_to_500000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part50-490000000_to_500000000.hdf5", - "start_idx": 490000000, - "end_idx": 500000000, - "file_size": "30.7 GB" - }, - { - "file_number": "51", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part51-500000000_to_510000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part51-500000000_to_510000000.hdf5", - "start_idx": 500000000, - "end_idx": 510000000, - "file_size": "30.7 GB" - }, - { - "file_number": "52", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part52-510000000_to_520000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part52-510000000_to_520000000.hdf5", - "start_idx": 510000000, - "end_idx": 520000000, - "file_size": "30.7 GB" - }, - { - "file_number": "53", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part53-520000000_to_530000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part53-520000000_to_530000000.hdf5", - "start_idx": 520000000, - "end_idx": 530000000, - "file_size": "30.7 GB" - }, - { - "file_number": "54", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part54-530000000_to_540000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part54-530000000_to_540000000.hdf5", - "start_idx": 530000000, - "end_idx": 540000000, - "file_size": "30.7 GB" - }, - { - "file_number": "55", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part55-540000000_to_550000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part55-540000000_to_550000000.hdf5", - "start_idx": 540000000, - "end_idx": 550000000, - "file_size": "30.7 GB" - }, - { - "file_number": "56", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part56-550000000_to_560000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part56-550000000_to_560000000.hdf5", - "start_idx": 550000000, - "end_idx": 560000000, - "file_size": "30.7 GB" - }, - { - "file_number": "57", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part57-560000000_to_570000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part57-560000000_to_570000000.hdf5", - "start_idx": 560000000, - "end_idx": 570000000, - "file_size": "30.7 GB" - }, - { - "file_number": "58", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part58-570000000_to_580000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part58-570000000_to_580000000.hdf5", - "start_idx": 570000000, - "end_idx": 580000000, - "file_size": "30.7 GB" - }, - { - "file_number": "59", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part59-580000000_to_590000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part59-580000000_to_590000000.hdf5", - "start_idx": 580000000, - "end_idx": 590000000, - "file_size": "30.7 GB" - }, - { - "file_number": "6", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part6-50000000_to_60000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part6-50000000_to_60000000.hdf5", - "start_idx": 50000000, - "end_idx": 60000000, - "file_size": "30.7 GB" - }, - { - "file_number": "60", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part60-590000000_to_600000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part60-590000000_to_600000000.hdf5", - "start_idx": 590000000, - "end_idx": 600000000, - "file_size": "30.7 GB" - }, - { - "file_number": "61", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part61-600000000_to_610000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part61-600000000_to_610000000.hdf5", - "start_idx": 600000000, - "end_idx": 610000000, - "file_size": "30.7 GB" - }, - { - "file_number": "62", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part62-610000000_to_620000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part62-610000000_to_620000000.hdf5", - "start_idx": 610000000, - "end_idx": 620000000, - "file_size": "30.7 GB" - }, - { - "file_number": "63", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part63-620000000_to_630000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part63-620000000_to_630000000.hdf5", - "start_idx": 620000000, - "end_idx": 630000000, - "file_size": "30.7 GB" - }, - { - "file_number": "64", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part64-630000000_to_640000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part64-630000000_to_640000000.hdf5", - "start_idx": 630000000, - "end_idx": 640000000, - "file_size": "30.7 GB" - }, - { - "file_number": "65", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part65-640000000_to_650000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part65-640000000_to_650000000.hdf5", - "start_idx": 640000000, - "end_idx": 650000000, - "file_size": "30.7 GB" - }, - { - "file_number": "66", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part66-650000000_to_660000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part66-650000000_to_660000000.hdf5", - "start_idx": 650000000, - "end_idx": 660000000, - "file_size": "30.7 GB" - }, - { - "file_number": "67", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part67-660000000_to_670000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part67-660000000_to_670000000.hdf5", - "start_idx": 660000000, - "end_idx": 670000000, - "file_size": "30.7 GB" - }, - { - "file_number": "68", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part68-670000000_to_680000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part68-670000000_to_680000000.hdf5", - "start_idx": 670000000, - "end_idx": 680000000, - "file_size": "30.7 GB" - }, - { - "file_number": "69", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part69-680000000_to_690000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part69-680000000_to_690000000.hdf5", - "start_idx": 680000000, - "end_idx": 690000000, - "file_size": "30.7 GB" - }, - { - "file_number": "7", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part7-60000000_to_70000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part7-60000000_to_70000000.hdf5", - "start_idx": 60000000, - "end_idx": 70000000, - "file_size": "30.7 GB" - }, - { - "file_number": "70", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part70-690000000_to_700000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part70-690000000_to_700000000.hdf5", - "start_idx": 690000000, - "end_idx": 700000000, - "file_size": "30.7 GB" - }, - { - "file_number": "71", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part71-700000000_to_710000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part71-700000000_to_710000000.hdf5", - "start_idx": 700000000, - "end_idx": 710000000, - "file_size": "30.7 GB" - }, - { - "file_number": "72", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part72-710000000_to_720000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part72-710000000_to_720000000.hdf5", - "start_idx": 710000000, - "end_idx": 720000000, - "file_size": "30.7 GB" - }, - { - "file_number": "73", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part73-720000000_to_730000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part73-720000000_to_730000000.hdf5", - "start_idx": 720000000, - "end_idx": 730000000, - "file_size": "30.7 GB" - }, - { - "file_number": "74", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part74-730000000_to_740000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part74-730000000_to_740000000.hdf5", - "start_idx": 730000000, - "end_idx": 740000000, - "file_size": "30.7 GB" - }, - { - "file_number": "75", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part75-740000000_to_750000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part75-740000000_to_750000000.hdf5", - "start_idx": 740000000, - "end_idx": 750000000, - "file_size": "30.7 GB" - }, - { - "file_number": "76", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part76-750000000_to_760000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part76-750000000_to_760000000.hdf5", - "start_idx": 750000000, - "end_idx": 760000000, - "file_size": "30.7 GB" - }, - { - "file_number": "77", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part77-760000000_to_770000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part77-760000000_to_770000000.hdf5", - "start_idx": 760000000, - "end_idx": 770000000, - "file_size": "30.7 GB" - }, - { - "file_number": "78", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part78-770000000_to_780000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part78-770000000_to_780000000.hdf5", - "start_idx": 770000000, - "end_idx": 780000000, - "file_size": "30.7 GB" - }, - { - "file_number": "79", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part79-780000000_to_790000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part79-780000000_to_790000000.hdf5", - "start_idx": 780000000, - "end_idx": 790000000, - "file_size": "30.7 GB" - }, - { - "file_number": "8", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part8-70000000_to_80000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part8-70000000_to_80000000.hdf5", - "start_idx": 70000000, - "end_idx": 80000000, - "file_size": "30.7 GB" - }, - { - "file_number": "80", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part80-790000000_to_800000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part80-790000000_to_800000000.hdf5", - "start_idx": 790000000, - "end_idx": 800000000, - "file_size": "30.7 GB" - }, - { - "file_number": "81", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part81-800000000_to_810000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part81-800000000_to_810000000.hdf5", - "start_idx": 800000000, - "end_idx": 810000000, - "file_size": "30.7 GB" - }, - { - "file_number": "82", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part82-810000000_to_820000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part82-810000000_to_820000000.hdf5", - "start_idx": 810000000, - "end_idx": 820000000, - "file_size": "30.7 GB" - }, - { - "file_number": "83", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part83-820000000_to_830000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part83-820000000_to_830000000.hdf5", - "start_idx": 820000000, - "end_idx": 830000000, - "file_size": "30.7 GB" - }, - { - "file_number": "84", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part84-830000000_to_840000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part84-830000000_to_840000000.hdf5", - "start_idx": 830000000, - "end_idx": 840000000, - "file_size": "30.7 GB" - }, - { - "file_number": "85", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part85-840000000_to_850000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part85-840000000_to_850000000.hdf5", - "start_idx": 840000000, - "end_idx": 850000000, - "file_size": "30.7 GB" - }, - { - "file_number": "86", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part86-850000000_to_860000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part86-850000000_to_860000000.hdf5", - "start_idx": 850000000, - "end_idx": 860000000, - "file_size": "30.7 GB" - }, - { - "file_number": "87", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part87-860000000_to_870000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part87-860000000_to_870000000.hdf5", - "start_idx": 860000000, - "end_idx": 870000000, - "file_size": "30.7 GB" - }, - { - "file_number": "88", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part88-870000000_to_880000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part88-870000000_to_880000000.hdf5", - "start_idx": 870000000, - "end_idx": 880000000, - "file_size": "30.7 GB" - }, - { - "file_number": "89", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part89-880000000_to_890000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part89-880000000_to_890000000.hdf5", - "start_idx": 880000000, - "end_idx": 890000000, - "file_size": "30.7 GB" - }, - { - "file_number": "9", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part9-80000000_to_90000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part9-80000000_to_90000000.hdf5", - "start_idx": 80000000, - "end_idx": 90000000, - "file_size": "30.7 GB" - }, - { - "file_number": "90", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part90-890000000_to_900000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part90-890000000_to_900000000.hdf5", - "start_idx": 890000000, - "end_idx": 900000000, - "file_size": "30.7 GB" - }, - { - "file_number": "91", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part91-900000000_to_910000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part91-900000000_to_910000000.hdf5", - "start_idx": 900000000, - "end_idx": 910000000, - "file_size": "30.7 GB" - }, - { - "file_number": "92", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part92-910000000_to_920000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part92-910000000_to_920000000.hdf5", - "start_idx": 910000000, - "end_idx": 920000000, - "file_size": "30.7 GB" - }, - { - "file_number": "93", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part93-920000000_to_930000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part93-920000000_to_930000000.hdf5", - "start_idx": 920000000, - "end_idx": 930000000, - "file_size": "30.7 GB" - }, - { - "file_number": "94", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part94-930000000_to_940000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part94-930000000_to_940000000.hdf5", - "start_idx": 930000000, - "end_idx": 940000000, - "file_size": "30.7 GB" - }, - { - "file_number": "95", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part95-940000000_to_950000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part95-940000000_to_950000000.hdf5", - "start_idx": 940000000, - "end_idx": 950000000, - "file_size": "30.7 GB" - }, - { - "file_number": "96", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part96-950000000_to_960000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part96-950000000_to_960000000.hdf5", - "start_idx": 950000000, - "end_idx": 960000000, - "file_size": "30.7 GB" - }, - { - "file_number": "97", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part97-960000000_to_970000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part97-960000000_to_970000000.hdf5", - "start_idx": 960000000, - "end_idx": 970000000, - "file_size": "30.7 GB" - }, - { - "file_number": "98", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part98-970000000_to_980000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part98-970000000_to_980000000.hdf5", - "start_idx": 970000000, - "end_idx": 980000000, - "file_size": "30.7 GB" - }, - { - "file_number": "99", - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part99-980000000_to_990000000.hdf5", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part99-980000000_to_990000000.hdf5", - "start_idx": 980000000, - "end_idx": 990000000, - "file_size": "30.7 GB" - } - ], - "queries": [ - { - "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", - "link": "https://s3.amazonaws.com/benchmarks.redislabs/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", - "file_size": "38.7 MB" - } - ] - } -}, - { - "name": "gist-960-angular", - "vector_size": 960, - "distance": "dot", - "type": "h5", - "path": "gist-960-angular/gist-960-angular.hdf5", - "link": "http://ann-benchmarks.com/gist-960-euclidean.hdf5" + "data": [ + { + "file_number": "1", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part1-0_to_10000000.hdf5", + "start_idx": 0, + "end_idx": 10000000, + "file_size": "30.7 GB" + }, + { + "file_number": "10", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part10-90000000_to_100000000.hdf5", + "start_idx": 90000000, + "end_idx": 100000000, + "file_size": "30.7 GB" + }, + { + "file_number": "100", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part100-990000000_to_1000000000.hdf5", + "start_idx": 990000000, + "end_idx": 1000000000, + "file_size": "30.7 GB" + }, + { + "file_number": "11", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part11-100000000_to_110000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part11-100000000_to_110000000.hdf5", + "start_idx": 100000000, + "end_idx": 110000000, + "file_size": "30.7 GB" + }, + { + "file_number": "12", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part12-110000000_to_120000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part12-110000000_to_120000000.hdf5", + "start_idx": 110000000, + "end_idx": 120000000, + "file_size": "30.7 GB" + }, + { + "file_number": "13", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part13-120000000_to_130000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part13-120000000_to_130000000.hdf5", + "start_idx": 120000000, + "end_idx": 130000000, + "file_size": "30.7 GB" + }, + { + "file_number": "14", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part14-130000000_to_140000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part14-130000000_to_140000000.hdf5", + "start_idx": 130000000, + "end_idx": 140000000, + "file_size": "30.7 GB" + }, + { + "file_number": "15", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part15-140000000_to_150000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part15-140000000_to_150000000.hdf5", + "start_idx": 140000000, + "end_idx": 150000000, + "file_size": "30.7 GB" + }, + { + "file_number": "16", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part16-150000000_to_160000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part16-150000000_to_160000000.hdf5", + "start_idx": 150000000, + "end_idx": 160000000, + "file_size": "30.7 GB" + }, + { + "file_number": "17", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part17-160000000_to_170000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part17-160000000_to_170000000.hdf5", + "start_idx": 160000000, + "end_idx": 170000000, + "file_size": "30.7 GB" + }, + { + "file_number": "18", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part18-170000000_to_180000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part18-170000000_to_180000000.hdf5", + "start_idx": 170000000, + "end_idx": 180000000, + "file_size": "30.7 GB" + }, + { + "file_number": "19", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part19-180000000_to_190000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part19-180000000_to_190000000.hdf5", + "start_idx": 180000000, + "end_idx": 190000000, + "file_size": "30.7 GB" + }, + { + "file_number": "2", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part2-10000000_to_20000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part2-10000000_to_20000000.hdf5", + "start_idx": 10000000, + "end_idx": 20000000, + "file_size": "30.7 GB" + }, + { + "file_number": "20", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part20-190000000_to_200000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part20-190000000_to_200000000.hdf5", + "start_idx": 190000000, + "end_idx": 200000000, + "file_size": "30.7 GB" + }, + { + "file_number": "21", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part21-200000000_to_210000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part21-200000000_to_210000000.hdf5", + "start_idx": 200000000, + "end_idx": 210000000, + "file_size": "30.7 GB" + }, + { + "file_number": "22", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part22-210000000_to_220000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part22-210000000_to_220000000.hdf5", + "start_idx": 210000000, + "end_idx": 220000000, + "file_size": "30.7 GB" + }, + { + "file_number": "23", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part23-220000000_to_230000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part23-220000000_to_230000000.hdf5", + "start_idx": 220000000, + "end_idx": 230000000, + "file_size": "30.7 GB" + }, + { + "file_number": "24", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part24-230000000_to_240000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part24-230000000_to_240000000.hdf5", + "start_idx": 230000000, + "end_idx": 240000000, + "file_size": "30.7 GB" + }, + { + "file_number": "25", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part25-240000000_to_250000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part25-240000000_to_250000000.hdf5", + "start_idx": 240000000, + "end_idx": 250000000, + "file_size": "30.7 GB" + }, + { + "file_number": "26", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part26-250000000_to_260000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part26-250000000_to_260000000.hdf5", + "start_idx": 250000000, + "end_idx": 260000000, + "file_size": "30.7 GB" + }, + { + "file_number": "27", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part27-260000000_to_270000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part27-260000000_to_270000000.hdf5", + "start_idx": 260000000, + "end_idx": 270000000, + "file_size": "30.7 GB" + }, + { + "file_number": "28", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part28-270000000_to_280000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part28-270000000_to_280000000.hdf5", + "start_idx": 270000000, + "end_idx": 280000000, + "file_size": "30.7 GB" + }, + { + "file_number": "29", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part29-280000000_to_290000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part29-280000000_to_290000000.hdf5", + "start_idx": 280000000, + "end_idx": 290000000, + "file_size": "30.7 GB" + }, + { + "file_number": "3", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part3-20000000_to_30000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part3-20000000_to_30000000.hdf5", + "start_idx": 20000000, + "end_idx": 30000000, + "file_size": "30.7 GB" + }, + { + "file_number": "30", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part30-290000000_to_300000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part30-290000000_to_300000000.hdf5", + "start_idx": 290000000, + "end_idx": 300000000, + "file_size": "30.7 GB" + }, + { + "file_number": "31", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part31-300000000_to_310000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part31-300000000_to_310000000.hdf5", + "start_idx": 300000000, + "end_idx": 310000000, + "file_size": "30.7 GB" + }, + { + "file_number": "32", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part32-310000000_to_320000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part32-310000000_to_320000000.hdf5", + "start_idx": 310000000, + "end_idx": 320000000, + "file_size": "30.7 GB" + }, + { + "file_number": "33", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part33-320000000_to_330000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part33-320000000_to_330000000.hdf5", + "start_idx": 320000000, + "end_idx": 330000000, + "file_size": "30.7 GB" + }, + { + "file_number": "34", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part34-330000000_to_340000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part34-330000000_to_340000000.hdf5", + "start_idx": 330000000, + "end_idx": 340000000, + "file_size": "30.7 GB" + }, + { + "file_number": "35", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part35-340000000_to_350000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part35-340000000_to_350000000.hdf5", + "start_idx": 340000000, + "end_idx": 350000000, + "file_size": "30.7 GB" + }, + { + "file_number": "36", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part36-350000000_to_360000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part36-350000000_to_360000000.hdf5", + "start_idx": 350000000, + "end_idx": 360000000, + "file_size": "30.7 GB" + }, + { + "file_number": "37", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part37-360000000_to_370000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part37-360000000_to_370000000.hdf5", + "start_idx": 360000000, + "end_idx": 370000000, + "file_size": "30.7 GB" + }, + { + "file_number": "38", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part38-370000000_to_380000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part38-370000000_to_380000000.hdf5", + "start_idx": 370000000, + "end_idx": 380000000, + "file_size": "30.7 GB" + }, + { + "file_number": "39", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part39-380000000_to_390000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part39-380000000_to_390000000.hdf5", + "start_idx": 380000000, + "end_idx": 390000000, + "file_size": "30.7 GB" + }, + { + "file_number": "4", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part4-30000000_to_40000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part4-30000000_to_40000000.hdf5", + "start_idx": 30000000, + "end_idx": 40000000, + "file_size": "30.7 GB" + }, + { + "file_number": "40", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part40-390000000_to_400000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part40-390000000_to_400000000.hdf5", + "start_idx": 390000000, + "end_idx": 400000000, + "file_size": "30.7 GB" + }, + { + "file_number": "41", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part41-400000000_to_410000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part41-400000000_to_410000000.hdf5", + "start_idx": 400000000, + "end_idx": 410000000, + "file_size": "30.7 GB" + }, + { + "file_number": "42", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part42-410000000_to_420000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part42-410000000_to_420000000.hdf5", + "start_idx": 410000000, + "end_idx": 420000000, + "file_size": "30.7 GB" + }, + { + "file_number": "43", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part43-420000000_to_430000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part43-420000000_to_430000000.hdf5", + "start_idx": 420000000, + "end_idx": 430000000, + "file_size": "30.7 GB" + }, + { + "file_number": "44", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part44-430000000_to_440000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part44-430000000_to_440000000.hdf5", + "start_idx": 430000000, + "end_idx": 440000000, + "file_size": "30.7 GB" + }, + { + "file_number": "45", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part45-440000000_to_450000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part45-440000000_to_450000000.hdf5", + "start_idx": 440000000, + "end_idx": 450000000, + "file_size": "30.7 GB" + }, + { + "file_number": "46", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part46-450000000_to_460000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part46-450000000_to_460000000.hdf5", + "start_idx": 450000000, + "end_idx": 460000000, + "file_size": "30.7 GB" + }, + { + "file_number": "47", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part47-460000000_to_470000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part47-460000000_to_470000000.hdf5", + "start_idx": 460000000, + "end_idx": 470000000, + "file_size": "30.7 GB" + }, + { + "file_number": "48", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part48-470000000_to_480000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part48-470000000_to_480000000.hdf5", + "start_idx": 470000000, + "end_idx": 480000000, + "file_size": "30.7 GB" + }, + { + "file_number": "49", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part49-480000000_to_490000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part49-480000000_to_490000000.hdf5", + "start_idx": 480000000, + "end_idx": 490000000, + "file_size": "30.7 GB" + }, + { + "file_number": "5", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part5-40000000_to_50000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part5-40000000_to_50000000.hdf5", + "start_idx": 40000000, + "end_idx": 50000000, + "file_size": "30.7 GB" + }, + { + "file_number": "50", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part50-490000000_to_500000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part50-490000000_to_500000000.hdf5", + "start_idx": 490000000, + "end_idx": 500000000, + "file_size": "30.7 GB" + }, + { + "file_number": "51", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part51-500000000_to_510000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part51-500000000_to_510000000.hdf5", + "start_idx": 500000000, + "end_idx": 510000000, + "file_size": "30.7 GB" + }, + { + "file_number": "52", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part52-510000000_to_520000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part52-510000000_to_520000000.hdf5", + "start_idx": 510000000, + "end_idx": 520000000, + "file_size": "30.7 GB" + }, + { + "file_number": "53", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part53-520000000_to_530000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part53-520000000_to_530000000.hdf5", + "start_idx": 520000000, + "end_idx": 530000000, + "file_size": "30.7 GB" + }, + { + "file_number": "54", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part54-530000000_to_540000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part54-530000000_to_540000000.hdf5", + "start_idx": 530000000, + "end_idx": 540000000, + "file_size": "30.7 GB" + }, + { + "file_number": "55", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part55-540000000_to_550000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part55-540000000_to_550000000.hdf5", + "start_idx": 540000000, + "end_idx": 550000000, + "file_size": "30.7 GB" + }, + { + "file_number": "56", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part56-550000000_to_560000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part56-550000000_to_560000000.hdf5", + "start_idx": 550000000, + "end_idx": 560000000, + "file_size": "30.7 GB" + }, + { + "file_number": "57", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part57-560000000_to_570000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part57-560000000_to_570000000.hdf5", + "start_idx": 560000000, + "end_idx": 570000000, + "file_size": "30.7 GB" + }, + { + "file_number": "58", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part58-570000000_to_580000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part58-570000000_to_580000000.hdf5", + "start_idx": 570000000, + "end_idx": 580000000, + "file_size": "30.7 GB" + }, + { + "file_number": "59", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part59-580000000_to_590000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part59-580000000_to_590000000.hdf5", + "start_idx": 580000000, + "end_idx": 590000000, + "file_size": "30.7 GB" + }, + { + "file_number": "6", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part6-50000000_to_60000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part6-50000000_to_60000000.hdf5", + "start_idx": 50000000, + "end_idx": 60000000, + "file_size": "30.7 GB" + }, + { + "file_number": "60", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part60-590000000_to_600000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part60-590000000_to_600000000.hdf5", + "start_idx": 590000000, + "end_idx": 600000000, + "file_size": "30.7 GB" + }, + { + "file_number": "61", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part61-600000000_to_610000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part61-600000000_to_610000000.hdf5", + "start_idx": 600000000, + "end_idx": 610000000, + "file_size": "30.7 GB" + }, + { + "file_number": "62", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part62-610000000_to_620000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part62-610000000_to_620000000.hdf5", + "start_idx": 610000000, + "end_idx": 620000000, + "file_size": "30.7 GB" + }, + { + "file_number": "63", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part63-620000000_to_630000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part63-620000000_to_630000000.hdf5", + "start_idx": 620000000, + "end_idx": 630000000, + "file_size": "30.7 GB" + }, + { + "file_number": "64", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part64-630000000_to_640000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part64-630000000_to_640000000.hdf5", + "start_idx": 630000000, + "end_idx": 640000000, + "file_size": "30.7 GB" + }, + { + "file_number": "65", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part65-640000000_to_650000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part65-640000000_to_650000000.hdf5", + "start_idx": 640000000, + "end_idx": 650000000, + "file_size": "30.7 GB" + }, + { + "file_number": "66", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part66-650000000_to_660000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part66-650000000_to_660000000.hdf5", + "start_idx": 650000000, + "end_idx": 660000000, + "file_size": "30.7 GB" + }, + { + "file_number": "67", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part67-660000000_to_670000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part67-660000000_to_670000000.hdf5", + "start_idx": 660000000, + "end_idx": 670000000, + "file_size": "30.7 GB" + }, + { + "file_number": "68", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part68-670000000_to_680000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part68-670000000_to_680000000.hdf5", + "start_idx": 670000000, + "end_idx": 680000000, + "file_size": "30.7 GB" + }, + { + "file_number": "69", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part69-680000000_to_690000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part69-680000000_to_690000000.hdf5", + "start_idx": 680000000, + "end_idx": 690000000, + "file_size": "30.7 GB" + }, + { + "file_number": "7", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part7-60000000_to_70000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part7-60000000_to_70000000.hdf5", + "start_idx": 60000000, + "end_idx": 70000000, + "file_size": "30.7 GB" + }, + { + "file_number": "70", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part70-690000000_to_700000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part70-690000000_to_700000000.hdf5", + "start_idx": 690000000, + "end_idx": 700000000, + "file_size": "30.7 GB" + }, + { + "file_number": "71", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part71-700000000_to_710000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part71-700000000_to_710000000.hdf5", + "start_idx": 700000000, + "end_idx": 710000000, + "file_size": "30.7 GB" + }, + { + "file_number": "72", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part72-710000000_to_720000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part72-710000000_to_720000000.hdf5", + "start_idx": 710000000, + "end_idx": 720000000, + "file_size": "30.7 GB" + }, + { + "file_number": "73", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part73-720000000_to_730000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part73-720000000_to_730000000.hdf5", + "start_idx": 720000000, + "end_idx": 730000000, + "file_size": "30.7 GB" + }, + { + "file_number": "74", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part74-730000000_to_740000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part74-730000000_to_740000000.hdf5", + "start_idx": 730000000, + "end_idx": 740000000, + "file_size": "30.7 GB" + }, + { + "file_number": "75", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part75-740000000_to_750000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part75-740000000_to_750000000.hdf5", + "start_idx": 740000000, + "end_idx": 750000000, + "file_size": "30.7 GB" + }, + { + "file_number": "76", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part76-750000000_to_760000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part76-750000000_to_760000000.hdf5", + "start_idx": 750000000, + "end_idx": 760000000, + "file_size": "30.7 GB" + }, + { + "file_number": "77", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part77-760000000_to_770000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part77-760000000_to_770000000.hdf5", + "start_idx": 760000000, + "end_idx": 770000000, + "file_size": "30.7 GB" + }, + { + "file_number": "78", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part78-770000000_to_780000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part78-770000000_to_780000000.hdf5", + "start_idx": 770000000, + "end_idx": 780000000, + "file_size": "30.7 GB" + }, + { + "file_number": "79", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part79-780000000_to_790000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part79-780000000_to_790000000.hdf5", + "start_idx": 780000000, + "end_idx": 790000000, + "file_size": "30.7 GB" + }, + { + "file_number": "8", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part8-70000000_to_80000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part8-70000000_to_80000000.hdf5", + "start_idx": 70000000, + "end_idx": 80000000, + "file_size": "30.7 GB" + }, + { + "file_number": "80", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part80-790000000_to_800000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part80-790000000_to_800000000.hdf5", + "start_idx": 790000000, + "end_idx": 800000000, + "file_size": "30.7 GB" + }, + { + "file_number": "81", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part81-800000000_to_810000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part81-800000000_to_810000000.hdf5", + "start_idx": 800000000, + "end_idx": 810000000, + "file_size": "30.7 GB" + }, + { + "file_number": "82", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part82-810000000_to_820000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part82-810000000_to_820000000.hdf5", + "start_idx": 810000000, + "end_idx": 820000000, + "file_size": "30.7 GB" + }, + { + "file_number": "83", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part83-820000000_to_830000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part83-820000000_to_830000000.hdf5", + "start_idx": 820000000, + "end_idx": 830000000, + "file_size": "30.7 GB" + }, + { + "file_number": "84", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part84-830000000_to_840000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part84-830000000_to_840000000.hdf5", + "start_idx": 830000000, + "end_idx": 840000000, + "file_size": "30.7 GB" + }, + { + "file_number": "85", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part85-840000000_to_850000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part85-840000000_to_850000000.hdf5", + "start_idx": 840000000, + "end_idx": 850000000, + "file_size": "30.7 GB" + }, + { + "file_number": "86", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part86-850000000_to_860000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part86-850000000_to_860000000.hdf5", + "start_idx": 850000000, + "end_idx": 860000000, + "file_size": "30.7 GB" + }, + { + "file_number": "87", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part87-860000000_to_870000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part87-860000000_to_870000000.hdf5", + "start_idx": 860000000, + "end_idx": 870000000, + "file_size": "30.7 GB" + }, + { + "file_number": "88", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part88-870000000_to_880000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part88-870000000_to_880000000.hdf5", + "start_idx": 870000000, + "end_idx": 880000000, + "file_size": "30.7 GB" + }, + { + "file_number": "89", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part89-880000000_to_890000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part89-880000000_to_890000000.hdf5", + "start_idx": 880000000, + "end_idx": 890000000, + "file_size": "30.7 GB" + }, + { + "file_number": "9", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part9-80000000_to_90000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part9-80000000_to_90000000.hdf5", + "start_idx": 80000000, + "end_idx": 90000000, + "file_size": "30.7 GB" + }, + { + "file_number": "90", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part90-890000000_to_900000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part90-890000000_to_900000000.hdf5", + "start_idx": 890000000, + "end_idx": 900000000, + "file_size": "30.7 GB" + }, + { + "file_number": "91", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part91-900000000_to_910000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part91-900000000_to_910000000.hdf5", + "start_idx": 900000000, + "end_idx": 910000000, + "file_size": "30.7 GB" + }, + { + "file_number": "92", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part92-910000000_to_920000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part92-910000000_to_920000000.hdf5", + "start_idx": 910000000, + "end_idx": 920000000, + "file_size": "30.7 GB" + }, + { + "file_number": "93", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part93-920000000_to_930000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part93-920000000_to_930000000.hdf5", + "start_idx": 920000000, + "end_idx": 930000000, + "file_size": "30.7 GB" + }, + { + "file_number": "94", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part94-930000000_to_940000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part94-930000000_to_940000000.hdf5", + "start_idx": 930000000, + "end_idx": 940000000, + "file_size": "30.7 GB" + }, + { + "file_number": "95", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part95-940000000_to_950000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part95-940000000_to_950000000.hdf5", + "start_idx": 940000000, + "end_idx": 950000000, + "file_size": "30.7 GB" + }, + { + "file_number": "96", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part96-950000000_to_960000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part96-950000000_to_960000000.hdf5", + "start_idx": 950000000, + "end_idx": 960000000, + "file_size": "30.7 GB" + }, + { + "file_number": "97", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part97-960000000_to_970000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part97-960000000_to_970000000.hdf5", + "start_idx": 960000000, + "end_idx": 970000000, + "file_size": "30.7 GB" + }, + { + "file_number": "98", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part98-970000000_to_980000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part98-970000000_to_980000000.hdf5", + "start_idx": 970000000, + "end_idx": 980000000, + "file_size": "30.7 GB" + }, + { + "file_number": "99", + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-data-part99-980000000_to_990000000.hdf5", + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-data-part99-980000000_to_990000000.hdf5", + "start_idx": 980000000, + "end_idx": 990000000, + "file_size": "30.7 GB" + } + ], + "queries": [ + { + "path": "laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", + "link": "https://s3.amazonaws.com/benchmarks.redislabs/vecsim/laion-1b/laion-img-emb-768d-1Billion-cosine-queries.hdf5", + "file_size": "38.7 MB" + } + ], + "description": "Image embeddings" + }, + "description": "Image embeddings" }, { "name": "laion-small-clip", @@ -945,7 +968,9 @@ "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/laion-small-clip.tgz", "schema": { "similarity": "float" - } + }, + "vector_count": 100000, + "description": "Image embeddings" }, { "name": "dbpedia-openai-1M-1536-angular", @@ -953,7 +978,9 @@ "distance": "cosine", "type": "tar", "path": "dbpedia-openai-1M-1536-angular/dbpedia_openai_1M", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/dbpedia_openai_1M.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/dbpedia_openai_1M.tgz", + "vector_count": 1000000, + "description": "Knowledge embeddings" }, { "name": "dbpedia-openai-1M-1536-angular-100neighbors", @@ -961,7 +988,9 @@ "distance": "cosine", "type": "tar", "path": "dbpedia-openai-1M-1536-angular-100neighbors/dbpedia_openai_1M", - "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/dbpedia_openai_1M.tgz" + "link": "http://benchmarks.redislabs.s3.amazonaws.com/vecsim/laion400m/dbpedia_openai_1M.tgz", + "vector_count": 1000000, + "description": "Knowledge embeddings" }, { "name": "h-and-m-2048-angular-filters", @@ -995,7 +1024,9 @@ "garment_group_no": "int", "garment_group_name": "keyword", "detail_desc": "text" - } + }, + "vector_count": 105542, + "description": "Fashion product embeddings" }, { "name": "h-and-m-2048-angular-no-filters", @@ -1003,7 +1034,9 @@ "distance": "cosine", "type": "tar", "path": "h-and-m-2048-angular-no-filters/hnm_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/hnm_no_filters.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/hnm_no_filters.tgz", + "vector_count": 105542, + "description": "Fashion product embeddings" }, { "name": "arxiv-titles-384-angular-filters", @@ -1016,15 +1049,19 @@ "update_date_ts": "int", "labels": "keyword", "submitter": "keyword" - } + }, + "vector_count": 2205995, + "description": "Academic paper embeddings" }, - { + { "name": "arxiv-titles-384-angular-no-filters", "vector_size": 384, "distance": "cosine", "type": "tar", "path": "arxiv-titles-384-angular/arxiv_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/arxiv_no_filters.tar.gz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/arxiv_no_filters.tar.gz", + "vector_count": 2205995, + "description": "Academic paper embeddings" }, { "name": "random-match-keyword-100-angular-filters", @@ -1036,15 +1073,19 @@ "schema": { "a": "keyword", "b": "keyword" - } + }, + "vector_count": 1000000, + "description": "Synthetic keyword matching" }, - { + { "name": "random-match-keyword-100-angular-no-filters", "vector_size": 100, "distance": "cosine", "type": "tar", "path": "random-match-keyword-100-angular/random_keywords_1m_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_keywords_1m_no_filters.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_keywords_1m_no_filters.tgz", + "vector_count": 1000000, + "description": "Synthetic keyword matching" }, { "name": "random-match-int-100-angular-filters", @@ -1056,7 +1097,9 @@ "schema": { "a": "int", "b": "int" - } + }, + "vector_count": 1000000, + "description": "Synthetic integer matching" }, { "name": "random-match-int-100-angular-no-filters", @@ -1064,7 +1107,9 @@ "distance": "cosine", "type": "tar", "path": "random-match-int-100-angular/random_ints_1m_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_ints_1m_no_filters.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_ints_1m_no_filters.tgz", + "vector_count": 1000000, + "description": "Synthetic integer matching" }, { "name": "random-range-100-angular-filters", @@ -1076,7 +1121,9 @@ "schema": { "a": "float", "b": "float" - } + }, + "vector_count": 1000000, + "description": "Synthetic range queries" }, { "name": "random-range-100-angular-no-filters", @@ -1084,7 +1131,9 @@ "distance": "cosine", "type": "tar", "path": "random-range-100-angular/random_float_1m_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_float_1m_no_filters.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_float_1m_no_filters.tgz", + "vector_count": 1000000, + "description": "Synthetic range queries" }, { "name": "random-geo-radius-100-angular-filters", @@ -1096,15 +1145,19 @@ "schema": { "a": "geo", "b": "geo" - } + }, + "vector_count": 1000000, + "description": "Synthetic geo queries" }, - { + { "name": "random-geo-radius-100-angular-no-filters", "vector_size": 100, "distance": "cosine", "type": "tar", "path": "random-geo-radius-100-angular/random_geo_1m_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_geo_1m_no_filters.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_geo_1m_no_filters.tgz", + "vector_count": 1000000, + "description": "Synthetic geo queries" }, { "name": "random-match-keyword-2048-angular-filters", @@ -1116,7 +1169,9 @@ "schema": { "a": "keyword", "b": "keyword" - } + }, + "vector_count": 100000, + "description": "Synthetic keyword matching" }, { "name": "random-match-keyword-2048-angular-no-filters", @@ -1124,7 +1179,9 @@ "distance": "cosine", "type": "tar", "path": "random-match-keyword-2048-angular/random_keywords_100k_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_keywords_100k_no_filters.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_keywords_100k_no_filters.tgz", + "vector_count": 100000, + "description": "Synthetic keyword matching" }, { "name": "random-match-int-2048-angular-filters", @@ -1136,7 +1193,9 @@ "schema": { "a": "int", "b": "int" - } + }, + "vector_count": 100000, + "description": "Synthetic integer matching" }, { "name": "random-match-int-2048-angular-no-filters", @@ -1144,7 +1203,9 @@ "distance": "cosine", "type": "tar", "path": "random-match-int-2048-angular/random_ints_100k_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_ints_100k_no_filters.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_ints_100k_no_filters.tgz", + "vector_count": 100000, + "description": "Synthetic integer matching" }, { "name": "random-range-2048-angular-filters", @@ -1156,15 +1217,19 @@ "schema": { "a": "float", "b": "float" - } + }, + "vector_count": 100000, + "description": "Synthetic range queries" }, - { + { "name": "random-range-2048-angular-no-filters", "vector_size": 2048, "distance": "cosine", "type": "tar", "path": "random-range-2048-angular/random_float_100k_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_float_100k_no_filters.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_float_100k_no_filters.tgz", + "vector_count": 100000, + "description": "Synthetic range queries" }, { "name": "random-geo-radius-2048-angular-filters", @@ -1176,29 +1241,37 @@ "schema": { "a": "geo", "b": "geo" - } + }, + "vector_count": 100000, + "description": "Synthetic geo queries" }, - { + { "name": "random-geo-radius-2048-angular-no-filters", "vector_size": 2048, "distance": "cosine", "type": "tar", "path": "random-geo-radius-2048-angular/random_geo_100k_no_filters", - "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_geo_100k_no_filters.tgz" + "link": "https://storage.googleapis.com/ann-filtered-benchmark/datasets/random_geo_100k_no_filters.tgz", + "vector_count": 100000, + "description": "Synthetic geo queries" }, { "name": "random-100", "vector_size": 100, "distance": "cosine", "type": "jsonl", - "path": "random-100/" + "path": "random-100/", + "vector_count": 100, + "description": "Synthetic data" }, { "name": "random-100-euclidean", "vector_size": 100, "distance": "l2", "type": "jsonl", - "path": "random-100/" + "path": "random-100/", + "vector_count": 100, + "description": "Synthetic data" }, { "name": "random-100-match-kw-small-vocab-filters", @@ -1210,7 +1283,9 @@ "schema": { "a": "keyword", "b": "keyword" - } + }, + "vector_count": 100, + "description": "Synthetic data" }, { "name": "random-100-match-kw-small-vocab-no-filters", @@ -1218,6 +1293,8 @@ "distance": "cosine", "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" + "path": "random-100-match-kw-small-vocab/random_keywords_1m_vocab_10_no_filters", + "vector_count": 100, + "description": "Synthetic data" } -] +] \ No newline at end of file diff --git a/docker-build.sh b/docker-build.sh new file mode 100755 index 00000000..fa7aecd5 --- /dev/null +++ b/docker-build.sh @@ -0,0 +1,181 @@ +#!/bin/bash + +# Docker build script for vector-db-benchmark +# This script builds the Docker image with proper Git information + +set -e + +# Default values +IMAGE_NAME="filipe958/vector-db-benchmark" +TAG="latest" +PLATFORM="" +PUSH=false + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +# Function to print colored output +print_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +print_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +# Function to show usage +usage() { + echo "Usage: $0 [OPTIONS]" + echo "" + echo "Options:" + echo " -n, --name NAME Docker image name (default: redis-performance/vector-db-benchmark)" + echo " -t, --tag TAG Docker image tag (default: latest)" + echo " -p, --platform PLATFORM Target platform (e.g., linux/amd64,linux/arm64)" + echo " --push Push image to Docker Hub after building" + echo " -h, --help Show this help message" + echo "" + echo "Examples:" + echo " $0 # Build with defaults" + echo " $0 -t v1.0.0 --push # Build and push with custom tag" + echo " $0 -p linux/amd64,linux/arm64 --push # Multi-platform build and push" + echo "" + echo "Docker Hub Repository: redis-performance/vector-db-benchmark" +} + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + -n|--name) + IMAGE_NAME="$2" + shift 2 + ;; + -t|--tag) + TAG="$2" + shift 2 + ;; + -p|--platform) + PLATFORM="$2" + shift 2 + ;; + --push) + PUSH=true + shift + ;; + -h|--help) + usage + exit 0 + ;; + *) + print_error "Unknown option: $1" + usage + exit 1 + ;; + esac +done + +# Get Git information +print_info "Gathering Git information..." +GIT_SHA=$(git rev-parse HEAD 2>/dev/null || echo "unknown") +GIT_DIRTY=$(git diff --no-ext-diff 2>/dev/null | wc -l || echo "0") + +print_info "Git SHA: $GIT_SHA" +print_info "Git Dirty: $GIT_DIRTY" + +# Build Docker image +FULL_IMAGE_NAME="${IMAGE_NAME}:${TAG}" +print_info "Building Docker image: $FULL_IMAGE_NAME" + +# Prepare build command +if [[ -n "$PLATFORM" ]]; then + # Multi-platform build requires buildx + print_info "Target platform(s): $PLATFORM" + print_info "Setting up Docker Buildx for multi-platform build..." + + # Create buildx builder if it doesn't exist + if ! docker buildx ls | grep -q "multiplatform"; then + print_info "Creating multiplatform builder..." + docker buildx create --name multiplatform --use --bootstrap + else + print_info "Using existing multiplatform builder..." + docker buildx use multiplatform + fi + + BUILD_CMD="docker buildx build --platform $PLATFORM" + if [[ "$PUSH" == "true" ]]; then + BUILD_CMD="$BUILD_CMD --push" + else + BUILD_CMD="$BUILD_CMD --load" + print_warning "Multi-platform builds without --push will only load the native platform image" + fi +else + # Single platform build uses regular docker build + BUILD_CMD="docker build" +fi + +# Add build arguments and tags +BUILD_CMD="$BUILD_CMD --build-arg GIT_SHA=$GIT_SHA --build-arg GIT_DIRTY=$GIT_DIRTY -t $FULL_IMAGE_NAME ." + +print_info "Executing: $BUILD_CMD" + +# Execute build +if eval $BUILD_CMD; then + print_info "✅ Docker image built successfully: $FULL_IMAGE_NAME" + + # Show image size (only for single platform builds or when image is loaded locally) + if [[ -z "$PLATFORM" ]] || [[ "$PUSH" != "true" ]]; then + IMAGE_SIZE=$(docker images --format "table {{.Size}}" $FULL_IMAGE_NAME 2>/dev/null | tail -n 1) + if [[ -n "$IMAGE_SIZE" && "$IMAGE_SIZE" != "SIZE" ]]; then + print_info "Image size: $IMAGE_SIZE" + fi + fi + + # Handle push for single platform builds (multi-platform builds push automatically with buildx) + if [[ "$PUSH" == "true" && -z "$PLATFORM" ]]; then + print_info "🚀 Pushing image to Docker Hub..." + + # Check if logged in to Docker Hub + if ! docker info | grep -q "Username:"; then + print_warning "Not logged in to Docker Hub. Please run: docker login" + print_info "Or set DOCKER_USERNAME and DOCKER_PASSWORD environment variables" + + if [[ -n "$DOCKER_USERNAME" && -n "$DOCKER_PASSWORD" ]]; then + print_info "Using environment variables for Docker login..." + echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin + else + print_error "❌ Docker Hub authentication required" + exit 1 + fi + fi + + # Push the image + if docker push $FULL_IMAGE_NAME; then + print_info "✅ Image pushed successfully to Docker Hub: $FULL_IMAGE_NAME" + else + print_error "❌ Failed to push image to Docker Hub" + exit 1 + fi + elif [[ "$PUSH" == "true" && -n "$PLATFORM" ]]; then + print_info "✅ Multi-platform image pushed successfully to Docker Hub: $FULL_IMAGE_NAME" + fi + + echo "" + print_info "To run the container:" + echo " docker run --rm $FULL_IMAGE_NAME run.py --help" + echo "" + print_info "To run with Redis connection:" + echo " docker run --rm --network=host $FULL_IMAGE_NAME run.py --host localhost --engines redis" + echo "" + if [[ "$PUSH" == "true" ]]; then + print_info "Image available on Docker Hub: https://hub.docker.com/r/redis-performance/vector-db-benchmark" + fi +else + print_error "❌ Docker build failed" + exit 1 +fi diff --git a/docker-run.sh b/docker-run.sh new file mode 100755 index 00000000..1d2b08b3 --- /dev/null +++ b/docker-run.sh @@ -0,0 +1,163 @@ +#!/bin/bash + +# Docker run script for vector-db-benchmark +# This script provides convenient ways to run the benchmark in Docker + +set -e + +# Default values +IMAGE_NAME="filipe958/vector-db-benchmark:latest" +REDIS_HOST="localhost" +REDIS_PORT="6379" +ENGINES="redis" +DATASET="random-100" +EXPERIMENT="redis-default-simple" +NETWORK="" +EXTRA_ARGS="" + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Function to print colored output +print_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +print_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +print_example() { + echo -e "${BLUE}[EXAMPLE]${NC} $1" +} + +# Function to show usage +usage() { + echo "Usage: $0 [OPTIONS] [-- EXTRA_ARGS]" + echo "" + echo "Options:" + echo " -i, --image IMAGE Docker image name (default: redis-performance/vector-db-benchmark:latest)" + echo " -H, --host HOST Redis host (default: localhost)" + echo " -p, --port PORT Redis port (default: 6379)" + echo " -e, --engines ENGINES Engines to test (default: redis)" + echo " -d, --dataset DATASET Dataset to use (default: random-100)" + echo " -x, --experiment EXP Experiment configuration (default: redis-default-simple)" + echo " -n, --network NET Docker network to use" + echo " -h, --help Show this help message" + echo "" + echo "Examples:" + print_example "$0 # Run with defaults (help)" + print_example "$0 -H redis -e redis -d random-100 -x redis-default-simple # Basic Redis benchmark" + print_example "$0 -n redis-net -H redis-server # Use custom network" + print_example "$0 -- --skip-upload --skip-search # Pass extra arguments" + echo "" + echo "Common Redis setups:" + print_example "# Start Redis container first:" + print_example "docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm" + echo "" + print_example "# Then run benchmark:" + print_example "$0 -H localhost -e redis -d random-100" + echo "" + print_example "# With results output (mount current directory):" + print_example "docker run --rm -v \$(pwd)/results:/app/results --network host filipe958/vector-db-benchmark:latest run.py --host localhost --engines redis" +} + +# Parse command line arguments +while [[ $# -gt 0 ]]; do + case $1 in + -i|--image) + IMAGE_NAME="$2" + shift 2 + ;; + -H|--host) + REDIS_HOST="$2" + shift 2 + ;; + -p|--port) + REDIS_PORT="$2" + shift 2 + ;; + -e|--engines) + ENGINES="$2" + shift 2 + ;; + -d|--dataset) + DATASET="$2" + shift 2 + ;; + -x|--experiment) + EXPERIMENT="$2" + shift 2 + ;; + -n|--network) + NETWORK="$2" + shift 2 + ;; + -h|--help) + usage + exit 0 + ;; + --) + shift + EXTRA_ARGS="$*" + break + ;; + *) + print_error "Unknown option: $1" + usage + exit 1 + ;; + esac +done + +# Build Docker run command +DOCKER_CMD="docker run --rm -it" + +# Add network if specified +if [[ -n "$NETWORK" ]]; then + DOCKER_CMD="$DOCKER_CMD --network $NETWORK" + print_info "Using Docker network: $NETWORK" +fi + +# Mount results directory +DOCKER_CMD="$DOCKER_CMD -v \$(pwd)/results:/app/results" + +# Add image +DOCKER_CMD="$DOCKER_CMD $IMAGE_NAME" + +# If no extra args provided, show help +if [[ -z "$EXTRA_ARGS" && "$ENGINES" == "redis" && "$DATASET" == "random-100" && "$EXPERIMENT" == "redis-default-simple" && "$REDIS_HOST" == "localhost" ]]; then + print_info "No specific configuration provided, showing help:" + DOCKER_CMD="$DOCKER_CMD run.py --help" +else + # Add benchmark arguments + DOCKER_CMD="$DOCKER_CMD run.py --host $REDIS_HOST --engines $ENGINES --dataset $DATASET --experiment $EXPERIMENT" + + # Add extra arguments if provided + if [[ -n "$EXTRA_ARGS" ]]; then + DOCKER_CMD="$DOCKER_CMD $EXTRA_ARGS" + fi + + print_info "Configuration:" + print_info " Redis: $REDIS_HOST:$REDIS_PORT" + print_info " Engines: $ENGINES" + print_info " Dataset: $DATASET" + print_info " Experiment: $EXPERIMENT" + if [[ -n "$EXTRA_ARGS" ]]; then + print_info " Extra args: $EXTRA_ARGS" + fi +fi + +print_info "Executing: $DOCKER_CMD" +echo "" + +# Execute the command +eval $DOCKER_CMD diff --git a/docker-test.sh b/docker-test.sh new file mode 100755 index 00000000..db571965 --- /dev/null +++ b/docker-test.sh @@ -0,0 +1,160 @@ +#!/bin/bash + +# Docker test script for local validation +# This script mimics the GitHub Action validation locally + +set -e + +# Colors for output +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Function to print colored output +print_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +print_warning() { + echo -e "${YELLOW}[WARNING]${NC} $1" +} + +print_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +print_step() { + echo -e "${BLUE}[STEP]${NC} $1" +} + +# Configuration +IMAGE_NAME="vector-db-benchmark-test" +TAG="local-test" +FULL_IMAGE_NAME="${IMAGE_NAME}:${TAG}" + +print_info "Starting Docker validation tests..." + +# Step 0: Check Docker Hub credentials (optional for local testing) +print_step "Checking Docker Hub credentials..." +if [[ -n "$DOCKER_USERNAME" && -n "$DOCKER_PASSWORD" ]]; then + print_info "✅ Docker Hub credentials found in environment" +elif docker info | grep -q "Username:"; then + print_info "✅ Already logged in to Docker Hub" +else + print_warning "⚠️ Docker Hub credentials not found" + print_info "Set DOCKER_USERNAME and DOCKER_PASSWORD environment variables or run 'docker login' for publishing" +fi + +# Step 1: Build the image +print_step "Building Docker image..." +if ./docker-build.sh -n "$IMAGE_NAME" -t "$TAG"; then + print_info "✅ Docker build successful" +else + print_error "❌ Docker build failed" + exit 1 +fi + +# Step 2: Test basic functionality +print_step "Testing basic functionality..." + +# Test help command +print_info "Testing --help command..." +if docker run --rm "$FULL_IMAGE_NAME" run.py --help > /dev/null; then + print_info "✅ Help command works" +else + print_error "❌ Help command failed" + exit 1 +fi + +# Test Python environment +print_info "Testing Python environment..." +if docker run --rm "$FULL_IMAGE_NAME" -c "import sys; print(f'Python {sys.version}'); import redis; print('Redis module available')" > /dev/null; then + print_info "✅ Python environment works" +else + print_error "❌ Python environment test failed" + exit 1 +fi + +# Step 3: Test with Redis using Docker +print_step "Testing Redis connectivity and benchmark execution..." +print_info "Starting Redis container for testing..." + +# Start Redis container +REDIS_CONTAINER_NAME="vector-benchmark-test-redis" +if docker run -d --name "$REDIS_CONTAINER_NAME" -p 6379:6379 redis:8.2-rc1-bookworm > /dev/null 2>&1; then + print_info "Redis container started successfully" + + # Wait for Redis to be ready + print_info "Waiting for Redis to be ready..." + sleep 5 + + # Test basic connection + if timeout 10 docker run --rm --network=host "$FULL_IMAGE_NAME" \ + -c "import redis; r = redis.Redis(host='localhost', port=6379); r.ping(); print('Redis connection successful')" > /dev/null 2>&1; then + print_info "✅ Redis connectivity test passed" + + # Test benchmark execution with specific configuration + print_info "Testing benchmark execution with redis-default-simple configuration..." + if timeout 120 docker run --rm --network=host -v "$(pwd)/results:/app/results" "$FULL_IMAGE_NAME" \ + run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple > /dev/null 2>&1; then + print_info "✅ Benchmark execution test passed" + else + print_warning "⚠️ Benchmark execution test failed (this may be expected without proper dataset setup)" + fi + else + print_warning "⚠️ Redis connectivity test failed" + fi + + # Clean up Redis container + print_info "Stopping and removing Redis test container..." + docker stop "$REDIS_CONTAINER_NAME" > /dev/null 2>&1 + docker rm "$REDIS_CONTAINER_NAME" > /dev/null 2>&1 +else + print_warning "⚠️ Failed to start Redis container, skipping connectivity test" +fi + +# Step 4: Test file output permissions +print_step "Testing file output permissions..." +TEMP_DIR=$(mktemp -d) +if docker run --rm -v "$TEMP_DIR:/app/results" "$FULL_IMAGE_NAME" \ + -c "import os; os.makedirs('/app/results', exist_ok=True); open('/app/results/test.txt', 'w').write('test'); print('File write successful')" > /dev/null 2>&1; then + if [ -f "$TEMP_DIR/test.txt" ]; then + print_info "✅ File output test passed" + else + print_warning "⚠️ Test file not created" + fi +else + print_warning "⚠️ File output test completed with warnings" +fi +rm -rf "$TEMP_DIR" + +# Step 5: Test image size +print_step "Checking image size..." +IMAGE_SIZE=$(docker images --format "table {{.Size}}" "$FULL_IMAGE_NAME" | tail -n 1) +print_info "Image size: $IMAGE_SIZE" + +# Step 6: Test benchmark configuration loading +print_step "Testing benchmark configuration loading..." +if docker run --rm "$FULL_IMAGE_NAME" \ + -c "import json; import os; print('Configuration loading test'); print(os.listdir('/app'))" > /dev/null 2>&1; then + print_info "✅ Configuration loading test passed" +else + print_warning "⚠️ Configuration loading test completed with warnings" +fi + +# Step 7: Clean up +print_step "Cleaning up..." +docker rmi "$FULL_IMAGE_NAME" > /dev/null 2>&1 || true + +print_info "🎉 All Docker validation tests completed successfully!" +print_info "" +print_info "Summary:" +print_info " ✅ Docker build successful" +print_info " ✅ Basic functionality tests passed" +print_info " ✅ Redis container connectivity tested" +print_info " ✅ Benchmark execution tested" +print_info " ✅ Image size: $IMAGE_SIZE" +print_info "" +print_info "The Docker setup is ready for production use!" diff --git a/docs/dataset-validation.md b/docs/dataset-validation.md new file mode 100644 index 00000000..fa17fca2 --- /dev/null +++ b/docs/dataset-validation.md @@ -0,0 +1,128 @@ +# Dataset Validation + +This document describes the dataset validation system for the vector-db-benchmark project. + +## Overview + +The validation system ensures that: +- All datasets in `datasets/datasets.json` have the required fields +- Field types and values are correct and reasonable +- Dataset names are unique +- The `--describe` functionality works correctly + +## Validation Components + +### 1. Local Validation Script + +**File**: `validate_datasets.py` + +Run locally to validate datasets: + +```bash +# Basic validation +python validate_datasets.py + +# Strict mode (treat warnings as errors) +python validate_datasets.py --strict +``` + +**What it checks:** +- JSON structure and syntax +- Required fields: `name`, `vector_size`, `distance`, `type`, `path`, `vector_count`, `description` +- Field types (handles special cases like `h5-multi` datasets with dict paths) +- Data consistency (positive vector sizes/counts, valid distance metrics) +- Unique dataset names +- `--describe datasets` and `--describe engines` functionality + +### 2. GitHub Action + +**File**: `.github/workflows/validate-datasets.yml` + +Automatically runs on: +- Push to files: `datasets/datasets.json`, `run.py`, `benchmark/dataset.py` +- Pull requests affecting the same files + +The action simply runs the validation script: +```yaml +- name: Validate datasets.json + run: python validate_datasets.py +``` + +## Required Dataset Fields + +Each dataset in `datasets/datasets.json` must have: + +| Field | Type | Description | Example | +|-------|------|-------------|---------| +| `name` | string | Unique dataset identifier | `"glove-100-angular"` | +| `vector_size` | integer | Vector dimensions | `100` | +| `distance` | string | Distance metric | `"cosine"`, `"l2"`, `"dot"`, `"euclidean"` | +| `type` | string | Dataset format | `"h5"`, `"tar"`, `"jsonl"`, `"h5-multi"` | +| `path` | string/dict | File path or multi-file structure | `"glove-100/file.hdf5"` | +| `vector_count` | integer/null | Number of vectors | `1183514` or `null` | +| `description` | string/null | Human-readable description | `"Word vectors"` or `null` | + +### Optional Fields + +| Field | Type | Description | +|-------|------|-------------| +| `link` | string | Download URL | +| `schema` | dict | Additional metadata fields | + +## Special Cases + +### Multi-file Datasets (h5-multi) + +For large datasets split across multiple files, the `path` field can be a dictionary: + +```json +{ + "name": "laion-img-emb-768d-1Billion-cosine", + "type": "h5-multi", + "path": { + "data": [ + { + "file_number": "1", + "path": "laion-1b/part1.hdf5", + "link": "http://example.com/part1.hdf5", + "start_idx": 0, + "end_idx": 10000000 + } + ], + "queries": [ + { + "path": "laion-1b/queries.hdf5", + "link": "http://example.com/queries.hdf5" + } + ] + } +} +``` + +## Validation Warnings + +The validator may show warnings for: +- **Round vector counts**: Numbers like 1,000,000 that look like estimates +- **Missing descriptions**: Datasets with `null` descriptions +- **Missing download links**: Non-local datasets without download URLs +- **Large vector sizes**: Dimensions > 4096 (flagged for verification) + +Warnings don't fail validation but should be reviewed. + +## Adding New Datasets + +1. Add your dataset to `datasets/datasets.json` +2. Run `python validate_datasets.py` locally +3. Fix any errors or warnings +4. Commit and push (GitHub Action will validate automatically) + +## Testing Describe Functionality + +The validation includes testing the `--describe` commands: + +```bash +python run.py --describe datasets +python run.py --describe engines +``` + +This ensures the new dataset display functionality works correctly. diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 4f097bfc..436e5db0 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -2,7 +2,7 @@ import os from datetime import datetime from pathlib import Path -from typing import List +from typing import List, Dict, Any, Optional import warnings from benchmark import ROOT_DIR @@ -19,6 +19,64 @@ DETAILED_RESULTS = bool(int(os.getenv("DETAILED_RESULTS", False))) REPETITIONS = int(os.getenv("REPETITIONS", 3)) + + +def format_precision_key(precision_value: float) -> str: + """Format precision value according to the rule: 0.01 increments up to 0.97, then 0.0025 increments from 0.97 to 1.0""" + if precision_value <= 0.97: + # Round to nearest 0.01 for values up to 0.97 + rounded = round(precision_value, 2) + return f"{rounded:.2f}" + else: + # Round to nearest 0.0025 for values from 0.97 to 1.0 + # 0.0025 = 1/400, so multiply by 400, round, then divide by 400 + rounded = round(precision_value * 400) / 400 + return f"{rounded:.4f}" + + +def analyze_precision_performance(search_results: Dict[str, Any]) -> Dict[str, Dict[str, Any]]: + """Analyze search results to find best RPS at each actual precision level achieved.""" + precision_dict = {} + + # First, collect all actual precision levels achieved by experiments and format them + precision_mapping = {} # Maps formatted precision to actual precision + for experiment_data in search_results.values(): + mean_precision = experiment_data["results"]["mean_precisions"] + formatted_precision = format_precision_key(mean_precision) + + # Keep track of the best (highest) actual precision for each formatted precision + if formatted_precision not in precision_mapping or mean_precision > precision_mapping[formatted_precision]: + precision_mapping[formatted_precision] = mean_precision + + # For each formatted precision level, find the best RPS among experiments that round to this level + for formatted_precision in precision_mapping.keys(): + best_rps = 0 + best_config = None + best_experiment_id = None + + for experiment_id, experiment_data in search_results.items(): + mean_precision = experiment_data["results"]["mean_precisions"] + rps = experiment_data["results"]["rps"] + + # Check if this experiment's precision rounds to the current formatted precision + if format_precision_key(mean_precision) == formatted_precision and rps > best_rps: + best_rps = rps + best_config = { + "parallel": experiment_data["params"]["parallel"], + "search_params": experiment_data["params"]["search_params"] + } + best_experiment_id = experiment_id + + # Add to precision dict with the formatted precision as key + if best_config is not None: + precision_dict[formatted_precision] = { + "rps": best_rps, + "config": best_config, + "experiment_id": best_experiment_id + } + + return precision_dict + warnings.filterwarnings("ignore", category=DeprecationWarning) @@ -43,14 +101,11 @@ def save_search_results( now = datetime.now() timestamp = now.strftime("%Y-%m-%d-%H-%M-%S") pid = os.getpid() # Get the current process ID + experiment_id = f"{self.name}-{dataset_name}-search-{search_id}-{pid}-{timestamp}" experiments_file = ( - f"{self.name}-{dataset_name}-search-{search_id}-{pid}-{timestamp}.json" + f"{experiment_id}.json" ) - result_path = RESULTS_DIR / experiments_file - with open(result_path, "w") as out: - out.write( - json.dumps( - { + experiment_result = { "params": { "dataset": dataset_name, "experiment": self.name, @@ -58,11 +113,16 @@ def save_search_results( **search_params, }, "results": results, - }, + } + result_path = RESULTS_DIR / experiments_file + with open(result_path, "w") as out: + out.write( + json.dumps( + experiment_result, indent=2, ) ) - return result_path + return result_path,experiment_id,experiment_result def save_upload_results( self, dataset_name: str, results: dict, upload_params: dict,upload_start_idx:int,upload_end_idx:int, @@ -96,6 +156,7 @@ def run_experiment( num_queries: int = -1, ef_runtime: List[int] = [], ): + results = {"upload": {}, "search": {}} execution_params = self.configurator.execution_params( distance=dataset.config.distance, vector_size=dataset.config.vector_size ) @@ -202,12 +263,44 @@ def run_experiment( search_stats.pop("latencies", None) search_stats.pop("precisions", None) - self.save_search_results( + result_path,experiment_id,experiment_result = self.save_search_results( dataset.config.name, search_stats, search_id, search_params ) + results["search"][experiment_id] = experiment_result + + # Print single line summary with QPS, P50, and P95 latency + qps = round(search_stats.get("rps", 0),1) + p50_latency = round(search_stats.get("p50_time", 0) * 1000,3) # Convert to ms + p95_latency = round(search_stats.get("p95_time", 0) * 1000,3) # Convert to ms + precision = search_stats.get("mean_precisions", 0) + print( + f"\t→ QPS: {qps:.1f}, P50: {p50_latency:.2f}ms, P95: {p95_latency:.2f}ms, Precision: {precision:.4f}" + ) + + print( + f"\tSaved {experiment_id} in {result_path}" + ) print("Experiment stage: Done") + + # Add precision analysis if search results exist + if results["search"]: + precision_analysis = analyze_precision_performance(results["search"]) + if precision_analysis: # Only add if we have precision data + results["precision"] = precision_analysis + print(f"Added precision analysis with {len(precision_analysis)} precision thresholds") + + summary_file = f"{self.name}-{dataset.config.name}-summary.json" + summary_path = RESULTS_DIR / summary_file + with open(summary_path, "w") as out: + out.write( + json.dumps( + results, + indent=2, + ) + ) print("Results saved to: ", RESULTS_DIR) + print("Summary saved to: ", summary_path) def delete_client(self): self.uploader.delete_client() diff --git a/experiments/configurations/redis-single-node.json b/experiments/configurations/redis-single-node.json index 30632555..2877f929 100644 --- a/experiments/configurations/redis-single-node.json +++ b/experiments/configurations/redis-single-node.json @@ -1,4 +1,16 @@ [ + { + "name": "redis-default-simple", + "engine": "redis", + "connection_params": {}, + "collection_params": { + "hnsw_config": { } + }, + "search_params": [ + { "parallel": 100, "search_params": { "ef": 64 } }, { "parallel": 100, "search_params": { "ef": 128 } }, { "parallel": 100, "search_params": { "ef": 256 } }, { "parallel": 100, "search_params": { "ef": 512 } } + ], + "upload_params": { "parallel": 32 } + }, { "name": "redis-m-16-ef-64", "engine": "redis", diff --git a/poetry.lock b/poetry.lock index c35d4fd8..8a1d562e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,279 +2,214 @@ [[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]] name = "anyio" -version = "4.3.0" +version = "4.9.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.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.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)"] - -[[package]] -name = "appnope" -version = "0.1.4" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = ">=3.6" -files = [ - {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, - {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" +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -dev = ["cogapp", "pre-commit", "pytest", "wheel"] -tests = ["pytest"] +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)", "uvloop (>=0.21)"] +trio = ["trio (>=0.26.1)"] [[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.0" +version = "1.6.0" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.6.0-py2.py3-none-any.whl", hash = "sha256:91685589498f79e8655e8a8947431ad6288831d643f11c55c2143ffcc738048d"}, + {file = "authlib-1.6.0.tar.gz", hash = "sha256:4367d32031b7af175ad3a323d571dc7257b7099d55978087ceae4a0d88cd3210"}, ] [package.dependencies] cryptography = "*" [[package]] -name = "azure-core" -version = "1.30.1" -description = "Microsoft Azure Core Library for Python" +name = "backoff" +version = "2.2.1" +description = "Function decoration for backoff and retry" optional = false -python-versions = ">=3.7" +python-versions = ">=3.7,<4.0" 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"}, + {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, + {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, ] -[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" +name = "boto3" +version = "1.39.4" +description = "The AWS SDK for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" 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"}, + {file = "boto3-1.39.4-py3-none-any.whl", hash = "sha256:f8e9534b429121aa5c5b7c685c6a94dd33edf14f87926e9a182d5b50220ba284"}, + {file = "boto3-1.39.4.tar.gz", hash = "sha256:6c955729a1d70181bc8368e02a7d3f350884290def63815ebca8408ee6d47571"}, ] [package.dependencies] -azure-core = ">=1.28.0,<2.0.0" -cryptography = ">=2.1.4" -isodate = ">=0.6.1" -typing-extensions = ">=4.3.0" +botocore = ">=1.39.4,<1.40.0" +jmespath = ">=0.7.1,<2.0.0" +s3transfer = ">=0.13.0,<0.14.0" [package.extras] -aio = ["azure-core[aio] (>=1.28.0,<2.0.0)"] +crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] [[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" +name = "botocore" +version = "1.39.4" +description = "Low-level, data-driven core of boto 3." optional = false -python-versions = "*" +python-versions = ">=3.9" files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, + {file = "botocore-1.39.4-py3-none-any.whl", hash = "sha256:c41e167ce01cfd1973c3fa9856ef5244a51ddf9c82cb131120d8617913b6812a"}, + {file = "botocore-1.39.4.tar.gz", hash = "sha256:e662ac35c681f7942a93f2ec7b4cde8f8b56dd399da47a79fa3e370338521a56"}, ] -[[package]] -name = "backoff" -version = "2.2.1" -description = "Function decoration for backoff and retry" -optional = false -python-versions = ">=3.7,<4.0" -files = [ - {file = "backoff-2.2.1-py3-none-any.whl", hash = "sha256:63579f9a0628e06278f7e47b7d7d5b6ce20dc65c5e96a6f3ca99a6adca0396e8"}, - {file = "backoff-2.2.1.tar.gz", hash = "sha256:03f829f5bb1923180821643f8753b0502c3b682293992485b0eef2807afa5cba"}, +[package.dependencies] +jmespath = ">=0.7.1,<2.0.0" +python-dateutil = ">=2.1,<3.0.0" +urllib3 = [ + {version = ">=1.25.4,<1.27", markers = "python_version < \"3.10\""}, + {version = ">=1.25.4,<2.2.0 || >2.2.0,<3", markers = "python_version >= \"3.10\""}, ] +[package.extras] +crt = ["awscrt (==0.23.8)"] + [[package]] name = "certifi" -version = "2024.2.2" +version = "2025.7.9" description = "Python package for providing Mozilla's CA Bundle." optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" 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-2025.7.9-py3-none-any.whl", hash = "sha256:d842783a14f8fdd646895ac26f719a061408834473cfc10203f6a575beb15d39"}, + {file = "certifi-2025.7.9.tar.gz", hash = "sha256:c1d2ec05395148ee10cf672ffc28cd37ea0ab0d99f9cc74c43e588cbd111b079"}, ] [[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] @@ -293,112 +228,114 @@ files = [ [[package]] name = "charset-normalizer" -version = "3.3.2" +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.0" -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"}, +python-versions = ">=3.7" +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]] 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] @@ -417,43 +354,38 @@ files = [ [[package]] name = "cryptography" -version = "42.0.5" +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.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-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] @@ -466,40 +398,54 @@ 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]] 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]] +name = "deprecation" +version = "2.1.0" +description = "A library to handle automated deprecations" +optional = false +python-versions = "*" +files = [ + {file = "deprecation-2.1.0-py2.py3-none-any.whl", hash = "sha256:a10811591210e1fb0e768a8c25517cabeabcba6f0bf96564f8ff45189f90b14a"}, + {file = "deprecation-2.1.0.tar.gz", hash = "sha256:72b3bde64e5d778694b0cf68178aed03d15e15477116add3fb773e581f9518ff"}, +] + +[package.dependencies] +packaging = "*" + [[package]] name = "distlib" -version = "0.3.8" +version = "0.3.9" 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"}, + {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.12.0" +version = "8.17.1" 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.12.0.tar.gz", hash = "sha256:48839b942fcce199eece1558ecea6272e116c58da87ca8d495ef12eb61effaf7"}, - {file = "elastic_transport-8.12.0-py3-none-any.whl", hash = "sha256:87d9dc9dee64a05235e7624ed7e6ab6e5ca16619aa7a6d22e853273b9f1cfbee"}, + {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] @@ -507,70 +453,69 @@ 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", "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.18.1" description = "Python client for Elasticsearch" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" 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.18.1-py3-none-any.whl", hash = "sha256:1a8c8b5ec3ce5be88f96d2f898375671648e96272978bce0dee3137d9326aabb"}, + {file = "elasticsearch-8.18.1.tar.gz", hash = "sha256:998035f17a8c1fba7ae26b183dca797dcf95db86da6a7ecba56d31afc40f07c7"}, ] [package.dependencies] -elastic-transport = ">=8,<9" +elastic-transport = ">=8.15.1,<9" +python-dateutil = "*" +typing-extensions = "*" [package.extras] async = ["aiohttp (>=3,<4)"] -requests = ["requests (>=2.4.0,<3.0.0)"] +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)"] +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" +name = "events" +version = "0.5" +description = "Bringing the elegance of C# EventHandler to Python" optional = false -python-versions = ">=3.6" +python-versions = "*" files = [ - {file = "environs-9.5.0-py2.py3-none-any.whl", hash = "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124"}, - {file = "environs-9.5.0.tar.gz", hash = "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9"}, + {file = "Events-0.5-py3-none-any.whl", hash = "sha256:a7286af378ba3e46640ac9825156c93bdba7502174dd696090fdfcd4d80a1abd"}, ] -[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 = "exceptiongroup" -version = "1.2.0" +version = "1.3.0" 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.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, + {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, ] +[package.dependencies] +typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} + [package.extras] test = ["pytest (>=6)"] [[package]] name = "executing" -version = "2.0.1" +version = "2.2.0" description = "Get the currently executing AST node of a frame, and other information" optional = false -python-versions = ">=3.5" +python-versions = ">=3.8" files = [ - {file = "executing-2.0.1-py2.py3-none-any.whl", hash = "sha256:eac49ca94516ccc753f9fb5ce82603156e590b27525a8bc32cce8ae302eb61bc"}, - {file = "executing-2.0.1.tar.gz", hash = "sha256:35afe2ce3affba8ee97f2d69927fa823b08b472b7b994e36a52a964b93d16147"}, + {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] @@ -578,273 +523,276 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "filelock" -version = "3.13.1" +version = "3.18.0" description = "A platform independent file lock." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.18.0-py3-none-any.whl", hash = "sha256:c401f4f8377c4464e6db25fff06205fd89bdd83b65eb0488ed1b160f780e21de"}, + {file = "filelock-3.18.0.tar.gz", hash = "sha256:adbc88eabb99d2fec8c9c1b229b171f18afa655400173ddc653d5d01501fb9f2"}, ] [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)"] -typing = ["typing-extensions (>=4.8)"] +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)"] [[package]] name = "grpcio" -version = "1.60.0" +version = "1.67.1" 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.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.60.0)"] +protobuf = ["grpcio-tools (>=1.67.1)"] [[package]] name = "grpcio-health-checking" -version = "1.60.0" +version = "1.67.1" 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.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.60.0" -protobuf = ">=4.21.6" +grpcio = ">=1.67.1" +protobuf = ">=5.26.1,<6.0dev" [[package]] name = "grpcio-tools" -version = "1.60.0" +version = "1.67.1" 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.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.60.0" -protobuf = ">=4.21.6,<5.0dev" +grpcio = ">=1.67.1" +protobuf = ">=5.26.1,<6.0dev" 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" 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]] name = "h2" -version = "4.1.0" -description = "HTTP/2 State-Machine based protocol implementation" +version = "4.2.0" +description = "Pure-Python HTTP/2 protocol implementation" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.9" files = [ - {file = "h2-4.1.0-py3-none-any.whl", hash = "sha256:03a46bcf682256c95b5fd9e9a99c1323584c3eec6440d379b9903d709476bc6d"}, - {file = "h2-4.1.0.tar.gz", hash = "sha256:a83aca08fbe7aacb79fec788c9c0bac936343560ed9ec18b82a13a12c28d2abb"}, + {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.0,<5" -hyperframe = ">=6.0,<7" +hpack = ">=4.1,<5" +hyperframe = ">=6.1,<7" [[package]] name = "h5py" -version = "3.10.0" +version = "3.14.0" description = "Read and write HDF5 files from Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.14.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:24df6b2622f426857bda88683b16630014588a0e4155cba44e872eb011c4eaed"}, + {file = "h5py-3.14.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ff2389961ee5872de697054dd5a033b04284afc3fb52dc51d94561ece2c10c6"}, + {file = "h5py-3.14.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:016e89d3be4c44f8d5e115fab60548e518ecd9efe9fa5c5324505a90773e6f03"}, + {file = "h5py-3.14.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1223b902ef0b5d90bcc8a4778218d6d6cd0f5561861611eda59fa6c52b922f4d"}, + {file = "h5py-3.14.0-cp310-cp310-win_amd64.whl", hash = "sha256:852b81f71df4bb9e27d407b43071d1da330d6a7094a588efa50ef02553fa7ce4"}, + {file = "h5py-3.14.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f30dbc58f2a0efeec6c8836c97f6c94afd769023f44e2bb0ed7b17a16ec46088"}, + {file = "h5py-3.14.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:543877d7f3d8f8a9828ed5df6a0b78ca3d8846244b9702e99ed0d53610b583a8"}, + {file = "h5py-3.14.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c497600c0496548810047257e36360ff551df8b59156d3a4181072eed47d8ad"}, + {file = "h5py-3.14.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:723a40ee6505bd354bfd26385f2dae7bbfa87655f4e61bab175a49d72ebfc06b"}, + {file = "h5py-3.14.0-cp311-cp311-win_amd64.whl", hash = "sha256:d2744b520440a996f2dae97f901caa8a953afc055db4673a993f2d87d7f38713"}, + {file = "h5py-3.14.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e0045115d83272090b0717c555a31398c2c089b87d212ceba800d3dc5d952e23"}, + {file = "h5py-3.14.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6da62509b7e1d71a7d110478aa25d245dd32c8d9a1daee9d2a42dba8717b047a"}, + {file = "h5py-3.14.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:554ef0ced3571366d4d383427c00c966c360e178b5fb5ee5bb31a435c424db0c"}, + {file = "h5py-3.14.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cbd41f4e3761f150aa5b662df991868ca533872c95467216f2bec5fcad84882"}, + {file = "h5py-3.14.0-cp312-cp312-win_amd64.whl", hash = "sha256:bf4897d67e613ecf5bdfbdab39a1158a64df105827da70ea1d90243d796d367f"}, + {file = "h5py-3.14.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aa4b7bbce683379b7bf80aaba68e17e23396100336a8d500206520052be2f812"}, + {file = "h5py-3.14.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9603a501a04fcd0ba28dd8f0995303d26a77a980a1f9474b3417543d4c6174"}, + {file = "h5py-3.14.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8cbaf6910fa3983c46172666b0b8da7b7bd90d764399ca983236f2400436eeb"}, + {file = "h5py-3.14.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d90e6445ab7c146d7f7981b11895d70bc1dd91278a4f9f9028bc0c95e4a53f13"}, + {file = "h5py-3.14.0-cp313-cp313-win_amd64.whl", hash = "sha256:ae18e3de237a7a830adb76aaa68ad438d85fe6e19e0d99944a3ce46b772c69b3"}, + {file = "h5py-3.14.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f5cc1601e78027cedfec6dd50efb4802f018551754191aeb58d948bd3ec3bd7a"}, + {file = "h5py-3.14.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e59d2136a8b302afd25acdf7a89b634e0eb7c66b1a211ef2d0457853768a2ef"}, + {file = "h5py-3.14.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:573c33ad056ac7c1ab6d567b6db9df3ffc401045e3f605736218f96c1e0490c6"}, + {file = "h5py-3.14.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ccbe17dc187c0c64178f1a10aa274ed3a57d055117588942b8a08793cc448216"}, + {file = "h5py-3.14.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f025cf30ae738c4c4e38c7439a761a71ccfcce04c2b87b2a2ac64e8c5171d43"}, + {file = "h5py-3.14.0.tar.gz", hash = "sha256:2372116b2e0d5d3e5e705b7f663f7c8d96fa79a4052d250484ef91d24d6a08f4"}, ] [package.dependencies] -numpy = ">=1.17.3" +numpy = ">=1.19.3" [[package]] name = "hpack" -version = "4.0.0" -description = "Pure-Python HPACK header compression" +version = "4.1.0" +description = "Pure-Python HPACK header encoding" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.9" files = [ - {file = "hpack-4.0.0-py3-none-any.whl", hash = "sha256:84a076fad3dc9a9f8063ccb8041ef100867b1878b25ef0ee63847a5d53818a6c"}, - {file = "hpack-4.0.0.tar.gz", hash = "sha256:fc41de0c63e687ebffde81187a948221294896f6bdc0ae2312708df339430095"}, + {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.4" +version = "1.0.9" 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.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)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.25.0)"] +trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" -version = "0.27.0" +version = "0.28.1" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, - {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, + {file = "httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad"}, + {file = "httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc"}, ] [package.dependencies] @@ -853,34 +801,34 @@ certifi = "*" h2 = {version = ">=3,<5", optional = true, markers = "extra == \"http2\""} httpcore = "==1.*" idna = "*" -sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] http2 = ["h2 (>=3,<5)"] socks = ["socksio (==1.*)"] +zstd = ["zstandard (>=0.18.0)"] [[package]] name = "hyperframe" -version = "6.0.1" -description = "HTTP/2 framing layer for Python" +version = "6.1.0" +description = "Pure-Python HTTP/2 framing" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.9" files = [ - {file = "hyperframe-6.0.1-py3-none-any.whl", hash = "sha256:0ec6bafd80d8ad2195c4f03aacba3a8265e57bc4cff261e802bf39970ed02a15"}, - {file = "hyperframe-6.0.1.tar.gz", hash = "sha256:ae510046231dc8e9ecb1a6586f63d2347bf4c8905914aa84ba585ae85f28a914"}, + {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.5.35" +version = "2.6.12" description = "File identification library for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.6.12-py2.py3-none-any.whl", hash = "sha256:ad9672d5a72e0d2ff7c5c8809b62dfa60458626352fb0eb7b55e69bdc45334a2"}, + {file = "identify-2.6.12.tar.gz", hash = "sha256:d8de45749f1efb108badef65ee8386f0f7bb19a7f26185f74de6367bffbaf0e6"}, ] [package.extras] @@ -888,24 +836,27 @@ license = ["ukkonen"] [[package]] name = "idna" -version = "3.6" +version = "3.10" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" files = [ - {file = "idna-3.6-py3-none-any.whl", hash = "sha256:c05567e9c24a6b9faaa835c4821bad0590fbb9d5779e7caa6e1cc4978e7eb24f"}, - {file = "idna-3.6.tar.gz", hash = "sha256:9ecdbbd083b06798ae1e86adcbfe8ab1479cf864e4ee30fe4e46a003d12491ca"}, + {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, + {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, ] +[package.extras] +all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] + [[package]] name = "iniconfig" -version = "2.0.0" +version = "2.1.0" description = "brain-dead simple config-ini parsing" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, + {file = "iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760"}, + {file = "iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7"}, ] [[package]] @@ -926,75 +877,70 @@ tomli = {version = "*", markers = "python_version > \"3.6\" and python_version < [[package]] name = "ipython" -version = "8.12.3" +version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "ipython-8.12.3-py3-none-any.whl", hash = "sha256:b0340d46a933d27c657b211a329d0be23793c36595acf9e6ef4164bc01a1804c"}, - {file = "ipython-8.12.3.tar.gz", hash = "sha256:3910c4b54543c2ad73d06579aa771041b7d5707b033bd488669b4cf544e3b363"}, + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] [package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" 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\""} -pickleshare = "*" -prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0" +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", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] +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", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] +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 = ["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 = "*" +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 = "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 = "jmespath" +version = "1.0.1" +description = "JSON Matching Expressions" +optional = false +python-versions = ">=3.7" +files = [ + {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, + {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, +] [[package]] name = "jsons" @@ -1013,88 +959,68 @@ typish = ">=1.9.2" [package.extras] test = ["attrs", "codecov", "coverage", "dataclasses", "pytest", "scons", "tzdata"] -[[package]] -name = "marshmallow" -version = "3.21.1" -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"}, -] - -[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.2.6)", "sphinx-issues (==4.0.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.5.1" +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.5.1-py3-none-macosx_10_9_x86_64.whl", hash = "sha256:6b014453200ba977be37ba660cb2d021030375fa6a35bc53c2e1d92980a0c512"}, + {file = "milvus_lite-2.5.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:a2e031088bf308afe5f8567850412d618cfb05a65238ed1a6117f60decccc95a"}, + {file = "milvus_lite-2.5.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:a13277e9bacc6933dea172e42231f7e6135bd3bdb073dd2688ee180418abd8d9"}, + {file = "milvus_lite-2.5.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:25ce13f4b8d46876dd2b7ac8563d7d8306da7ff3999bb0d14b116b30f71d706c"}, ] [package.dependencies] -argon2-cffi = "*" -certifi = "*" -pycryptodome = "*" -typing-extensions = "*" -urllib3 = "*" +tqdm = "*" [[package]] name = "ml-dtypes" -version = "0.4.0" +version = "0.4.1" description = "" optional = false python-versions = ">=3.9" files = [ - {file = "ml_dtypes-0.4.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:93afe37f3a879d652ec9ef1fc47612388890660a2657fbb5747256c3b818fd81"}, - {file = "ml_dtypes-0.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2bb83fd064db43e67e67d021e547698af4c8d5c6190f2e9b1c53c09f6ff5531d"}, - {file = "ml_dtypes-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03e7cda6ef164eed0abb31df69d2c00c3a5ab3e2610b6d4c42183a43329c72a5"}, - {file = "ml_dtypes-0.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:a15d96d090aebb55ee85173d1775ae325a001aab607a76c8ea0b964ccd6b5364"}, - {file = "ml_dtypes-0.4.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:bdf689be7351cc3c95110c910c1b864002f113e682e44508910c849e144f3df1"}, - {file = "ml_dtypes-0.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c83e4d443962d891d51669ff241d5aaad10a8d3d37a81c5532a45419885d591c"}, - {file = "ml_dtypes-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e2f4237b459a63c97c2c9f449baa637d7e4c20addff6a9bac486f22432f3b6"}, - {file = "ml_dtypes-0.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:75b4faf99d0711b81f393db36d210b4255fd419f6f790bc6c1b461f95ffb7a9e"}, - {file = "ml_dtypes-0.4.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ee9f91d4c4f9959a7e1051c141dc565f39e54435618152219769e24f5e9a4d06"}, - {file = "ml_dtypes-0.4.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad6849a2db386b38e4d54fe13eb3293464561780531a918f8ef4c8169170dd49"}, - {file = "ml_dtypes-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eaa32979ebfde3a0d7c947cafbf79edc1ec77ac05ad0780ee86c1d8df70f2259"}, - {file = "ml_dtypes-0.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:3b67ec73a697c88c1122038e0de46520e48dc2ec876d42cf61bc5efe3c0b7675"}, - {file = "ml_dtypes-0.4.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:41affb38fdfe146e3db226cf2953021184d6f0c4ffab52136613e9601706e368"}, - {file = "ml_dtypes-0.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:43cf4356a0fe2eeac6d289018d0734e17a403bdf1fd911953c125dd0358edcc0"}, - {file = "ml_dtypes-0.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f1724ddcdf5edbaf615a62110af47407f1719b8d02e68ccee60683acb5f74da1"}, - {file = "ml_dtypes-0.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:723af6346447268a3cf0b7356e963d80ecb5732b5279b2aa3fa4b9fc8297c85e"}, - {file = "ml_dtypes-0.4.0.tar.gz", hash = "sha256:eaf197e72f4f7176a19fe3cb8b61846b38c6757607e7bf9cd4b1d84cd3e74deb"}, + {file = "ml_dtypes-0.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1fe8b5b5e70cd67211db94b05cfd58dace592f24489b038dc6f9fe347d2e07d5"}, + {file = "ml_dtypes-0.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c09a6d11d8475c2a9fd2bc0695628aec105f97cab3b3a3fb7c9660348ff7d24"}, + {file = "ml_dtypes-0.4.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5e8f75fa371020dd30f9196e7d73babae2abd51cf59bdd56cb4f8de7e13354"}, + {file = "ml_dtypes-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:15fdd922fea57e493844e5abb930b9c0bd0af217d9edd3724479fc3d7ce70e3f"}, + {file = "ml_dtypes-0.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2d55b588116a7085d6e074cf0cdb1d6fa3875c059dddc4d2c94a4cc81c23e975"}, + {file = "ml_dtypes-0.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e138a9b7a48079c900ea969341a5754019a1ad17ae27ee330f7ebf43f23877f9"}, + {file = "ml_dtypes-0.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74c6cfb5cf78535b103fde9ea3ded8e9f16f75bc07789054edc7776abfb3d752"}, + {file = "ml_dtypes-0.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:274cc7193dd73b35fb26bef6c5d40ae3eb258359ee71cd82f6e96a8c948bdaa6"}, + {file = "ml_dtypes-0.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:827d3ca2097085cf0355f8fdf092b888890bb1b1455f52801a2d7756f056f54b"}, + {file = "ml_dtypes-0.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:772426b08a6172a891274d581ce58ea2789cc8abc1c002a27223f314aaf894e7"}, + {file = "ml_dtypes-0.4.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:126e7d679b8676d1a958f2651949fbfa182832c3cd08020d8facd94e4114f3e9"}, + {file = "ml_dtypes-0.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:df0fb650d5c582a9e72bb5bd96cfebb2cdb889d89daff621c8fbc60295eba66c"}, + {file = "ml_dtypes-0.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e35e486e97aee577d0890bc3bd9e9f9eece50c08c163304008587ec8cfe7575b"}, + {file = "ml_dtypes-0.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:560be16dc1e3bdf7c087eb727e2cf9c0e6a3d87e9f415079d2491cc419b3ebf5"}, + {file = "ml_dtypes-0.4.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad0b757d445a20df39035c4cdeed457ec8b60d236020d2560dbc25887533cf50"}, + {file = "ml_dtypes-0.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:ef0d7e3fece227b49b544fa69e50e607ac20948f0043e9f76b44f35f229ea450"}, + {file = "ml_dtypes-0.4.1.tar.gz", hash = "sha256:fad5f2de464fd09127e49b7fd1252b9006fb43d2edc1ff112d390c324af5ca7a"}, ] [package.dependencies] numpy = [ - {version = ">=1.23.3", markers = "python_version >= \"3.11\""}, - {version = ">=1.21.2", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">1.20", markers = "python_version < \"3.10\""}, + {version = ">=1.21.2", markers = "python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.23.3", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] [package.extras] @@ -1102,171 +1028,267 @@ dev = ["absl-py", "pyink", "pylint (>=2.6.0)", "pytest", "pytest-xdist"] [[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" +version = "2.0.2" description = "Fundamental package for array computing in Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79fc682a374c4a8ed08b331bef9c5f582585d1048fa6d80bc6c35bc384eee9b4"}, - {file = "numpy-1.24.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ffe43c74893dbf38c2b0a1f5428760a1a9c98285553c89e12d70a96a7f3a4d6"}, - {file = "numpy-1.24.4-cp310-cp310-win32.whl", hash = "sha256:4c21decb6ea94057331e111a5bed9a79d335658c27ce2adb580fb4d54f2ad9bc"}, - {file = "numpy-1.24.4-cp310-cp310-win_amd64.whl", hash = "sha256:b4bea75e47d9586d31e892a7401f76e909712a0fd510f58f5337bea9572c571e"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f136bab9c2cfd8da131132c2cf6cc27331dd6fae65f95f69dcd4ae3c3639c810"}, - {file = "numpy-1.24.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e2926dac25b313635e4d6cf4dc4e51c8c0ebfed60b801c799ffc4c32bf3d1254"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:222e40d0e2548690405b0b3c7b21d1169117391c2e82c378467ef9ab4c8f0da7"}, - {file = "numpy-1.24.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7215847ce88a85ce39baf9e89070cb860c98fdddacbaa6c0da3ffb31b3350bd5"}, - {file = "numpy-1.24.4-cp311-cp311-win32.whl", hash = "sha256:4979217d7de511a8d57f4b4b5b2b965f707768440c17cb70fbf254c4b225238d"}, - {file = "numpy-1.24.4-cp311-cp311-win_amd64.whl", hash = "sha256:b7b1fc9864d7d39e28f41d089bfd6353cb5f27ecd9905348c24187a768c79694"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1452241c290f3e2a312c137a9999cdbf63f78864d63c79039bda65ee86943f61"}, - {file = "numpy-1.24.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:04640dab83f7c6c85abf9cd729c5b65f1ebd0ccf9de90b270cd61935eef0197f"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5425b114831d1e77e4b5d812b69d11d962e104095a5b9c3b641a218abcc050e"}, - {file = "numpy-1.24.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd80e219fd4c71fc3699fc1dadac5dcf4fd882bfc6f7ec53d30fa197b8ee22dc"}, - {file = "numpy-1.24.4-cp38-cp38-win32.whl", hash = "sha256:4602244f345453db537be5314d3983dbf5834a9701b7723ec28923e2889e0bb2"}, - {file = "numpy-1.24.4-cp38-cp38-win_amd64.whl", hash = "sha256:692f2e0f55794943c5bfff12b3f56f99af76f902fc47487bdfe97856de51a706"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2541312fbf09977f3b3ad449c4e5f4bb55d0dbf79226d7724211acc905049400"}, - {file = "numpy-1.24.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9667575fb6d13c95f1b36aca12c5ee3356bf001b714fc354eb5465ce1609e62f"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a86ed21e4f87050382c7bc96571755193c4c1392490744ac73d660e8f564a9"}, - {file = "numpy-1.24.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d11efb4dbecbdf22508d55e48d9c8384db795e1b7b51ea735289ff96613ff74d"}, - {file = "numpy-1.24.4-cp39-cp39-win32.whl", hash = "sha256:6620c0acd41dbcb368610bb2f4d83145674040025e5536954782467100aa8835"}, - {file = "numpy-1.24.4-cp39-cp39-win_amd64.whl", hash = "sha256:befe2bf740fd8373cf56149a5c23a0f601e82869598d41f8e188a0e9869926f8"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:31f13e25b4e304632a4619d0e0777662c2ffea99fcae2029556b17d8ff958aef"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95f7ac6540e95bc440ad77f56e520da5bf877f87dca58bd095288dce8940532a"}, - {file = "numpy-1.24.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:e98f220aa76ca2a977fe435f5b04d7b3470c0a2e6312907b37ba6068f26787f2"}, - {file = "numpy-1.24.4.tar.gz", hash = "sha256:80f5e3a4e498641401868df4208b74581206afbee7cf7b8329daae82676d9463"}, + {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.3.1" +description = "Fundamental package for array computing in Python" +optional = false +python-versions = ">=3.11" +files = [ + {file = "numpy-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6ea9e48336a402551f52cd8f593343699003d2353daa4b72ce8d34f66b722070"}, + {file = "numpy-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ccb7336eaf0e77c1635b232c141846493a588ec9ea777a7c24d7166bb8533ae"}, + {file = "numpy-2.3.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0bb3a4a61e1d327e035275d2a993c96fa786e4913aa089843e6a2d9dd205c66a"}, + {file = "numpy-2.3.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:e344eb79dab01f1e838ebb67aab09965fb271d6da6b00adda26328ac27d4a66e"}, + {file = "numpy-2.3.1-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:467db865b392168ceb1ef1ffa6f5a86e62468c43e0cfb4ab6da667ede10e58db"}, + {file = "numpy-2.3.1-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:afed2ce4a84f6b0fc6c1ce734ff368cbf5a5e24e8954a338f3bdffa0718adffb"}, + {file = "numpy-2.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0025048b3c1557a20bc80d06fdeb8cc7fc193721484cca82b2cfa072fec71a93"}, + {file = "numpy-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5ee121b60aa509679b682819c602579e1df14a5b07fe95671c8849aad8f2115"}, + {file = "numpy-2.3.1-cp311-cp311-win32.whl", hash = "sha256:a8b740f5579ae4585831b3cf0e3b0425c667274f82a484866d2adf9570539369"}, + {file = "numpy-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:d4580adadc53311b163444f877e0789f1c8861e2698f6b2a4ca852fda154f3ff"}, + {file = "numpy-2.3.1-cp311-cp311-win_arm64.whl", hash = "sha256:ec0bdafa906f95adc9a0c6f26a4871fa753f25caaa0e032578a30457bff0af6a"}, + {file = "numpy-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2959d8f268f3d8ee402b04a9ec4bb7604555aeacf78b360dc4ec27f1d508177d"}, + {file = "numpy-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:762e0c0c6b56bdedfef9a8e1d4538556438288c4276901ea008ae44091954e29"}, + {file = "numpy-2.3.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:867ef172a0976aaa1f1d1b63cf2090de8b636a7674607d514505fb7276ab08fc"}, + {file = "numpy-2.3.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:4e602e1b8682c2b833af89ba641ad4176053aaa50f5cacda1a27004352dde943"}, + {file = "numpy-2.3.1-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8e333040d069eba1652fb08962ec5b76af7f2c7bce1df7e1418c8055cf776f25"}, + {file = "numpy-2.3.1-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e7cbf5a5eafd8d230a3ce356d892512185230e4781a361229bd902ff403bc660"}, + {file = "numpy-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5f1b8f26d1086835f442286c1d9b64bb3974b0b1e41bb105358fd07d20872952"}, + {file = "numpy-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ee8340cb48c9b7a5899d1149eece41ca535513a9698098edbade2a8e7a84da77"}, + {file = "numpy-2.3.1-cp312-cp312-win32.whl", hash = "sha256:e772dda20a6002ef7061713dc1e2585bc1b534e7909b2030b5a46dae8ff077ab"}, + {file = "numpy-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:cfecc7822543abdea6de08758091da655ea2210b8ffa1faf116b940693d3df76"}, + {file = "numpy-2.3.1-cp312-cp312-win_arm64.whl", hash = "sha256:7be91b2239af2658653c5bb6f1b8bccafaf08226a258caf78ce44710a0160d30"}, + {file = "numpy-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:25a1992b0a3fdcdaec9f552ef10d8103186f5397ab45e2d25f8ac51b1a6b97e8"}, + {file = "numpy-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7dea630156d39b02a63c18f508f85010230409db5b2927ba59c8ba4ab3e8272e"}, + {file = "numpy-2.3.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bada6058dd886061f10ea15f230ccf7dfff40572e99fef440a4a857c8728c9c0"}, + {file = "numpy-2.3.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:a894f3816eb17b29e4783e5873f92faf55b710c2519e5c351767c51f79d8526d"}, + {file = "numpy-2.3.1-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:18703df6c4a4fee55fd3d6e5a253d01c5d33a295409b03fda0c86b3ca2ff41a1"}, + {file = "numpy-2.3.1-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:5902660491bd7a48b2ec16c23ccb9124b8abfd9583c5fdfa123fe6b421e03de1"}, + {file = "numpy-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:36890eb9e9d2081137bd78d29050ba63b8dab95dff7912eadf1185e80074b2a0"}, + {file = "numpy-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a780033466159c2270531e2b8ac063704592a0bc62ec4a1b991c7c40705eb0e8"}, + {file = "numpy-2.3.1-cp313-cp313-win32.whl", hash = "sha256:39bff12c076812595c3a306f22bfe49919c5513aa1e0e70fac756a0be7c2a2b8"}, + {file = "numpy-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:8d5ee6eec45f08ce507a6570e06f2f879b374a552087a4179ea7838edbcbfa42"}, + {file = "numpy-2.3.1-cp313-cp313-win_arm64.whl", hash = "sha256:0c4d9e0a8368db90f93bd192bfa771ace63137c3488d198ee21dfb8e7771916e"}, + {file = "numpy-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:b0b5397374f32ec0649dd98c652a1798192042e715df918c20672c62fb52d4b8"}, + {file = "numpy-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c5bdf2015ccfcee8253fb8be695516ac4457c743473a43290fd36eba6a1777eb"}, + {file = "numpy-2.3.1-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d70f20df7f08b90a2062c1f07737dd340adccf2068d0f1b9b3d56e2038979fee"}, + {file = "numpy-2.3.1-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:2fb86b7e58f9ac50e1e9dd1290154107e47d1eef23a0ae9145ded06ea606f992"}, + {file = "numpy-2.3.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:23ab05b2d241f76cb883ce8b9a93a680752fbfcbd51c50eff0b88b979e471d8c"}, + {file = "numpy-2.3.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:ce2ce9e5de4703a673e705183f64fd5da5bf36e7beddcb63a25ee2286e71ca48"}, + {file = "numpy-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c4913079974eeb5c16ccfd2b1f09354b8fed7e0d6f2cab933104a09a6419b1ee"}, + {file = "numpy-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:010ce9b4f00d5c036053ca684c77441f2f2c934fd23bee058b4d6f196efd8280"}, + {file = "numpy-2.3.1-cp313-cp313t-win32.whl", hash = "sha256:6269b9edfe32912584ec496d91b00b6d34282ca1d07eb10e82dfc780907d6c2e"}, + {file = "numpy-2.3.1-cp313-cp313t-win_amd64.whl", hash = "sha256:2a809637460e88a113e186e87f228d74ae2852a2e0c44de275263376f17b5bdc"}, + {file = "numpy-2.3.1-cp313-cp313t-win_arm64.whl", hash = "sha256:eccb9a159db9aed60800187bc47a6d3451553f0e1b08b068d8b277ddfbb9b244"}, + {file = "numpy-2.3.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:ad506d4b09e684394c42c966ec1527f6ebc25da7f4da4b1b056606ffe446b8a3"}, + {file = "numpy-2.3.1-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:ebb8603d45bc86bbd5edb0d63e52c5fd9e7945d3a503b77e486bd88dde67a19b"}, + {file = "numpy-2.3.1-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:15aa4c392ac396e2ad3d0a2680c0f0dee420f9fed14eef09bdb9450ee6dcb7b7"}, + {file = "numpy-2.3.1-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c6e0bf9d1a2f50d2b65a7cf56db37c095af17b59f6c132396f7c6d5dd76484df"}, + {file = "numpy-2.3.1-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:eabd7e8740d494ce2b4ea0ff05afa1b7b291e978c0ae075487c51e8bd93c0c68"}, + {file = "numpy-2.3.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:e610832418a2bc09d974cc9fecebfa51e9532d6190223bc5ef6a7402ebf3b5cb"}, + {file = "numpy-2.3.1.tar.gz", hash = "sha256:1ec9ae20a4226da374362cca3c62cd753faf2f951440b0e3b98e93c235441d2b"}, ] [[package]] name = "opensearch-py" -version = "2.4.2" +version = "2.8.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.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 = "*" -urllib3 = ">=1.26.18" +requests = ">=2.32.0,<3.0.0" +urllib3 = [ + {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,<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"] -kerberos = ["requests-kerberos"] +async = ["aiohttp (>=3.9.4,<4)"] +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 = "packaging" -version = "24.0" +version = "25.0" 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-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, + {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, ] [[package]] name = "pandas" -version = "2.0.3" +version = "2.3.1" description = "Powerful data structures for data analysis, time series, and statistics" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce0c6f76a0f1ba361551f3e6dceaff06bde7514a374aa43e33b588ec10420183"}, - {file = "pandas-2.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba619e410a21d8c387a1ea6e8a0e49bb42216474436245718d7f2e88a2f8d7c0"}, - {file = "pandas-2.0.3-cp310-cp310-win32.whl", hash = "sha256:3ef285093b4fe5058eefd756100a367f27029913760773c8bf1d2d8bebe5d210"}, - {file = "pandas-2.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:9ee1a69328d5c36c98d8e74db06f4ad518a1840e8ccb94a4ba86920986bb617e"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b084b91d8d66ab19f5bb3256cbd5ea661848338301940e17f4492b2ce0801fe8"}, - {file = "pandas-2.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:37673e3bdf1551b95bf5d4ce372b37770f9529743d2498032439371fc7b7eb26"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b9cb1e14fdb546396b7e1b923ffaeeac24e4cedd14266c3497216dd4448e4f2d"}, - {file = "pandas-2.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9cd88488cceb7635aebb84809d087468eb33551097d600c6dad13602029c2df"}, - {file = "pandas-2.0.3-cp311-cp311-win32.whl", hash = "sha256:694888a81198786f0e164ee3a581df7d505024fbb1f15202fc7db88a71d84ebd"}, - {file = "pandas-2.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:6a21ab5c89dcbd57f78d0ae16630b090eec626360085a4148693def5452d8a6b"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9e4da0d45e7f34c069fe4d522359df7d23badf83abc1d1cef398895822d11061"}, - {file = "pandas-2.0.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:32fca2ee1b0d93dd71d979726b12b61faa06aeb93cf77468776287f41ff8fdc5"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:258d3624b3ae734490e4d63c430256e716f488c4fcb7c8e9bde2d3aa46c29089"}, - {file = "pandas-2.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9eae3dc34fa1aa7772dd3fc60270d13ced7346fcbcfee017d3132ec625e23bb0"}, - {file = "pandas-2.0.3-cp38-cp38-win32.whl", hash = "sha256:f3421a7afb1a43f7e38e82e844e2bca9a6d793d66c1a7f9f0ff39a795bbc5e02"}, - {file = "pandas-2.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:69d7f3884c95da3a31ef82b7618af5710dba95bb885ffab339aad925c3e8ce78"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5247fb1ba347c1261cbbf0fcfba4a3121fbb4029d95d9ef4dc45406620b25c8b"}, - {file = "pandas-2.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:81af086f4543c9d8bb128328b5d32e9986e0c84d3ee673a2ac6fb57fd14f755e"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1994c789bf12a7c5098277fb43836ce090f1073858c10f9220998ac74f37c69b"}, - {file = "pandas-2.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ec591c48e29226bcbb316e0c1e9423622bc7a4eaf1ef7c3c9fa1a3981f89641"}, - {file = "pandas-2.0.3-cp39-cp39-win32.whl", hash = "sha256:04dbdbaf2e4d46ca8da896e1805bc04eb85caa9a82e259e8eed00254d5e0c682"}, - {file = "pandas-2.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:1168574b036cd8b93abc746171c9b4f1b83467438a5e45909fed645cf8692dbc"}, - {file = "pandas-2.0.3.tar.gz", hash = "sha256:c02f372a88e0d17f36d3093a644c73cfc1788e876a7c4bcb4020a77512e2043c"}, + {file = "pandas-2.3.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:22c2e866f7209ebc3a8f08d75766566aae02bcc91d196935a1d9e59c7b990ac9"}, + {file = "pandas-2.3.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3583d348546201aff730c8c47e49bc159833f971c2899d6097bce68b9112a4f1"}, + {file = "pandas-2.3.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f951fbb702dacd390561e0ea45cdd8ecfa7fb56935eb3dd78e306c19104b9b0"}, + {file = "pandas-2.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cd05b72ec02ebfb993569b4931b2e16fbb4d6ad6ce80224a3ee838387d83a191"}, + {file = "pandas-2.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:1b916a627919a247d865aed068eb65eb91a344b13f5b57ab9f610b7716c92de1"}, + {file = "pandas-2.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:fe67dc676818c186d5a3d5425250e40f179c2a89145df477dd82945eaea89e97"}, + {file = "pandas-2.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:2eb789ae0274672acbd3c575b0598d213345660120a257b47b5dafdc618aec83"}, + {file = "pandas-2.3.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2b0540963d83431f5ce8870ea02a7430adca100cec8a050f0811f8e31035541b"}, + {file = "pandas-2.3.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fe7317f578c6a153912bd2292f02e40c1d8f253e93c599e82620c7f69755c74f"}, + {file = "pandas-2.3.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e6723a27ad7b244c0c79d8e7007092d7c8f0f11305770e2f4cd778b3ad5f9f85"}, + {file = "pandas-2.3.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3462c3735fe19f2638f2c3a40bd94ec2dc5ba13abbb032dd2fa1f540a075509d"}, + {file = "pandas-2.3.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:98bcc8b5bf7afed22cc753a28bc4d9e26e078e777066bc53fac7904ddef9a678"}, + {file = "pandas-2.3.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4d544806b485ddf29e52d75b1f559142514e60ef58a832f74fb38e48d757b299"}, + {file = "pandas-2.3.1-cp311-cp311-win_amd64.whl", hash = "sha256:b3cd4273d3cb3707b6fffd217204c52ed92859533e31dc03b7c5008aa933aaab"}, + {file = "pandas-2.3.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:689968e841136f9e542020698ee1c4fbe9caa2ed2213ae2388dc7b81721510d3"}, + {file = "pandas-2.3.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:025e92411c16cbe5bb2a4abc99732a6b132f439b8aab23a59fa593eb00704232"}, + {file = "pandas-2.3.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9b7ff55f31c4fcb3e316e8f7fa194566b286d6ac430afec0d461163312c5841e"}, + {file = "pandas-2.3.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7dcb79bf373a47d2a40cf7232928eb7540155abbc460925c2c96d2d30b006eb4"}, + {file = "pandas-2.3.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:56a342b231e8862c96bdb6ab97170e203ce511f4d0429589c8ede1ee8ece48b8"}, + {file = "pandas-2.3.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ca7ed14832bce68baef331f4d7f294411bed8efd032f8109d690df45e00c4679"}, + {file = "pandas-2.3.1-cp312-cp312-win_amd64.whl", hash = "sha256:ac942bfd0aca577bef61f2bc8da8147c4ef6879965ef883d8e8d5d2dc3e744b8"}, + {file = "pandas-2.3.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9026bd4a80108fac2239294a15ef9003c4ee191a0f64b90f170b40cfb7cf2d22"}, + {file = "pandas-2.3.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6de8547d4fdb12421e2d047a2c446c623ff4c11f47fddb6b9169eb98ffba485a"}, + {file = "pandas-2.3.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:782647ddc63c83133b2506912cc6b108140a38a37292102aaa19c81c83db2928"}, + {file = "pandas-2.3.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2ba6aff74075311fc88504b1db890187a3cd0f887a5b10f5525f8e2ef55bfdb9"}, + {file = "pandas-2.3.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e5635178b387bd2ba4ac040f82bc2ef6e6b500483975c4ebacd34bec945fda12"}, + {file = "pandas-2.3.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6f3bf5ec947526106399a9e1d26d40ee2b259c66422efdf4de63c848492d91bb"}, + {file = "pandas-2.3.1-cp313-cp313-win_amd64.whl", hash = "sha256:1c78cf43c8fde236342a1cb2c34bcff89564a7bfed7e474ed2fffa6aed03a956"}, + {file = "pandas-2.3.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:8dfc17328e8da77be3cf9f47509e5637ba8f137148ed0e9b5241e1baf526e20a"}, + {file = "pandas-2.3.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ec6c851509364c59a5344458ab935e6451b31b818be467eb24b0fe89bd05b6b9"}, + {file = "pandas-2.3.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:911580460fc4884d9b05254b38a6bfadddfcc6aaef856fb5859e7ca202e45275"}, + {file = "pandas-2.3.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2f4d6feeba91744872a600e6edbbd5b033005b431d5ae8379abee5bcfa479fab"}, + {file = "pandas-2.3.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fe37e757f462d31a9cd7580236a82f353f5713a80e059a29753cf938c6775d96"}, + {file = "pandas-2.3.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5db9637dbc24b631ff3707269ae4559bce4b7fd75c1c4d7e13f40edc42df4444"}, + {file = "pandas-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4645f770f98d656f11c69e81aeb21c6fca076a44bed3dcbb9396a4311bc7f6d8"}, + {file = "pandas-2.3.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:342e59589cc454aaff7484d75b816a433350b3d7964d7847327edda4d532a2e3"}, + {file = "pandas-2.3.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d12f618d80379fde6af007f65f0c25bd3e40251dbd1636480dfffce2cf1e6da"}, + {file = "pandas-2.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd71c47a911da120d72ef173aeac0bf5241423f9bfea57320110a978457e069e"}, + {file = "pandas-2.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:09e3b1587f0f3b0913e21e8b32c3119174551deb4a4eba4a89bc7377947977e7"}, + {file = "pandas-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2323294c73ed50f612f67e2bf3ae45aea04dce5690778e08a09391897f35ff88"}, + {file = "pandas-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:b4b0de34dc8499c2db34000ef8baad684cfa4cbd836ecee05f323ebfba348c7d"}, + {file = "pandas-2.3.1.tar.gz", hash = "sha256:0a95b9ac964fe83ce317827f80304d37388ea77616b1425f0ae41c9d2d0d7bb2"}, ] [package.dependencies] numpy = [ - {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.20.3", markers = "python_version < \"3.10\""}, + {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.1" +tzdata = ">=2022.7" [package.extras] -all = ["PyQt5 (>=5.15.1)", "SQLAlchemy (>=1.4.16)", "beautifulsoup4 (>=4.9.3)", "bottleneck (>=1.3.2)", "brotlipy (>=0.7.0)", "fastparquet (>=0.6.3)", "fsspec (>=2021.07.0)", "gcsfs (>=2021.07.0)", "html5lib (>=1.1)", "hypothesis (>=6.34.2)", "jinja2 (>=3.0.0)", "lxml (>=4.6.3)", "matplotlib (>=3.6.1)", "numba (>=0.53.1)", "numexpr (>=2.7.3)", "odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pandas-gbq (>=0.15.0)", "psycopg2 (>=2.8.6)", "pyarrow (>=7.0.0)", "pymysql (>=1.0.2)", "pyreadstat (>=1.1.2)", "pytest (>=7.3.2)", "pytest-asyncio (>=0.17.0)", "pytest-xdist (>=2.2.0)", "python-snappy (>=0.6.0)", "pyxlsb (>=1.0.8)", "qtpy (>=2.2.0)", "s3fs (>=2021.08.0)", "scipy (>=1.7.1)", "tables (>=3.6.1)", "tabulate (>=0.8.9)", "xarray (>=0.21.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)", "zstandard (>=0.15.2)"] -aws = ["s3fs (>=2021.08.0)"] -clipboard = ["PyQt5 (>=5.15.1)", "qtpy (>=2.2.0)"] -compression = ["brotlipy (>=0.7.0)", "python-snappy (>=0.6.0)", "zstandard (>=0.15.2)"] -computation = ["scipy (>=1.7.1)", "xarray (>=0.21.0)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.0.7)", "pyxlsb (>=1.0.8)", "xlrd (>=2.0.1)", "xlsxwriter (>=1.4.3)"] -feather = ["pyarrow (>=7.0.0)"] -fss = ["fsspec (>=2021.07.0)"] -gcp = ["gcsfs (>=2021.07.0)", "pandas-gbq (>=0.15.0)"] -hdf5 = ["tables (>=3.6.1)"] -html = ["beautifulsoup4 (>=4.9.3)", "html5lib (>=1.1)", "lxml (>=4.6.3)"] -mysql = ["SQLAlchemy (>=1.4.16)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.0.0)", "tabulate (>=0.8.9)"] -parquet = ["pyarrow (>=7.0.0)"] -performance = ["bottleneck (>=1.3.2)", "numba (>=0.53.1)", "numexpr (>=2.7.1)"] -plot = ["matplotlib (>=3.6.1)"] -postgresql = ["SQLAlchemy (>=1.4.16)", "psycopg2 (>=2.8.6)"] -spss = ["pyreadstat (>=1.1.2)"] -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)"] +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.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" @@ -1295,56 +1317,46 @@ files = [ [package.dependencies] numpy = "*" -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - [[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.3.8" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.3.8-py3-none-any.whl", hash = "sha256:ff7059bb7eb1179e2685604f4aaf157cfd9535242bd23742eadc3c13542139b4"}, + {file = "platformdirs-4.3.8.tar.gz", hash = "sha256:3d512d96e16bcb959a814c9f348431070822a6496326a4be0911c40b5a74c2bc"}, ] [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)"] +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.4.0" +version = "1.6.0" description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, ] [package.extras] dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +testing = ["coverage", "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] @@ -1375,13 +1387,13 @@ virtualenv = ">=20.10.0" [[package]] name = "prompt-toolkit" -version = "3.0.43" +version = "3.0.51" description = "Library for building powerful interactive command lines in Python" optional = false -python-versions = ">=3.7.0" +python-versions = ">=3.8" 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.51-py3-none-any.whl", hash = "sha256:52742911fde84e2d423e2f9a4cf1de7d7ac4e51958f648d9540e0fb8db077b07"}, + {file = "prompt_toolkit-3.0.51.tar.gz", hash = "sha256:931a162e3b27fc90c86f1b48bb1fb2c528c2761475e57c9c06de13311c7b54ed"}, ] [package.dependencies] @@ -1389,120 +1401,120 @@ wcwidth = "*" [[package]] name = "protobuf" -version = "4.25.3" +version = "5.29.5" 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.29.5-cp310-abi3-win32.whl", hash = "sha256:3f1c6468a2cfd102ff4703976138844f78ebd1fb45f49011afc5139e9e283079"}, + {file = "protobuf-5.29.5-cp310-abi3-win_amd64.whl", hash = "sha256:3f76e3a3675b4a4d867b52e4a5f5b78a2ef9565549d4037e06cf7b0942b1d3fc"}, + {file = "protobuf-5.29.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e38c5add5a311f2a6eb0340716ef9b039c1dfa428b28f25a7838ac329204a671"}, + {file = "protobuf-5.29.5-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:fa18533a299d7ab6c55a238bf8629311439995f2e7eca5caaff08663606e9015"}, + {file = "protobuf-5.29.5-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:63848923da3325e1bf7e9003d680ce6e14b07e55d0473253a690c3a8b8fd6e61"}, + {file = "protobuf-5.29.5-cp38-cp38-win32.whl", hash = "sha256:ef91363ad4faba7b25d844ef1ada59ff1604184c0bcd8b39b8a6bef15e1af238"}, + {file = "protobuf-5.29.5-cp38-cp38-win_amd64.whl", hash = "sha256:7318608d56b6402d2ea7704ff1e1e4597bee46d760e7e4dd42a3d45e24b87f2e"}, + {file = "protobuf-5.29.5-cp39-cp39-win32.whl", hash = "sha256:6f642dc9a61782fa72b90878af134c5afe1917c89a568cd3476d758d3c3a0736"}, + {file = "protobuf-5.29.5-cp39-cp39-win_amd64.whl", hash = "sha256:470f3af547ef17847a28e1f47200a1cbf0ba3ff57b7de50d22776607cd2ea353"}, + {file = "protobuf-5.29.5-py3-none-any.whl", hash = "sha256:6cf42630262c59b2d8de33954443d94b746c952b01434fc58a417fdbd2e84bd5"}, + {file = "protobuf-5.29.5.tar.gz", hash = "sha256:bc1463bafd4b0929216c35f437a8e28731a2b7fe3d98bb77a600efced5a15c84"}, ] [[package]] name = "psycopg" -version = "3.1.18" +version = "3.2.9" description = "PostgreSQL database adapter for Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" 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.2.9-py3-none-any.whl", hash = "sha256:01a8dadccdaac2123c916208c96e06631641c0566b22005493f09663c7a8d3b6"}, + {file = "psycopg-3.2.9.tar.gz", hash = "sha256:2fbb46fcd17bc81f993f28c47f1ebea38d66ae97cc2dbc3cad73b37cefbff700"}, ] [package.dependencies] -psycopg-binary = {version = "3.1.18", optional = true, markers = "implementation_name != \"pypy\" and extra == \"binary\""} -typing-extensions = ">=4.1" +psycopg-binary = {version = "3.2.9", 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.18)"] -c = ["psycopg-c (==3.1.18)"] -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.9)"] +c = ["psycopg-c (==3.2.9)"] +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 (>=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.14)", "pproxy (>=2.7)", "pytest (>=6.2.5)", "pytest-cov (>=3.0)", "pytest-randomly (>=3.5)"] [[package]] name = "psycopg-binary" -version = "3.1.18" +version = "3.2.9" 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.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.2.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:528239bbf55728ba0eacbd20632342867590273a9bacedac7538ebff890f1093"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4978c01ca4c208c9d6376bd585e2c0771986b76ff7ea518f6d2b51faece75e8"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ed2bab85b505d13e66a914d0f8cdfa9475c16d3491cf81394e0748b77729af2"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:799fa1179ab8a58d1557a95df28b492874c8f4135101b55133ec9c55fc9ae9d7"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb37ac3955d19e4996c3534abfa4f23181333974963826db9e0f00731274b695"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:001e986656f7e06c273dd4104e27f4b4e0614092e544d950c7c938d822b1a894"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa5c80d8b4cbf23f338db88a7251cef8bb4b68e0f91cf8b6ddfa93884fdbb0c1"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:39a127e0cf9b55bd4734a8008adf3e01d1fd1cb36339c6a9e2b2cbb6007c50ee"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fb7599e436b586e265bea956751453ad32eb98be6a6e694252f4691c31b16edb"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5d2c9fe14fe42b3575a0b4e09b081713e83b762c8dc38a3771dd3265f8f110e7"}, + {file = "psycopg_binary-3.2.9-cp310-cp310-win_amd64.whl", hash = "sha256:7e4660fad2807612bb200de7262c88773c3483e85d981324b3c647176e41fdc8"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2504e9fd94eabe545d20cddcc2ff0da86ee55d76329e1ab92ecfcc6c0a8156c4"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:093a0c079dd6228a7f3c3d82b906b41964eaa062a9a8c19f45ab4984bf4e872b"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:387c87b51d72442708e7a853e7e7642717e704d59571da2f3b29e748be58c78a"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d9ac10a2ebe93a102a326415b330fff7512f01a9401406896e78a81d75d6eddc"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:72fdbda5b4c2a6a72320857ef503a6589f56d46821592d4377c8c8604810342b"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f34e88940833d46108f949fdc1fcfb74d6b5ae076550cd67ab59ef47555dba95"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a3e0f89fe35cb03ff1646ab663dabf496477bab2a072315192dbaa6928862891"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6afb3e62f2a3456f2180a4eef6b03177788df7ce938036ff7f09b696d418d186"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:cc19ed5c7afca3f6b298bfc35a6baa27adb2019670d15c32d0bb8f780f7d560d"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bc75f63653ce4ec764c8f8c8b0ad9423e23021e1c34a84eb5f4ecac8538a4a4a"}, + {file = "psycopg_binary-3.2.9-cp311-cp311-win_amd64.whl", hash = "sha256:3db3ba3c470801e94836ad78bf11fd5fab22e71b0c77343a1ee95d693879937a"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:be7d650a434921a6b1ebe3fff324dbc2364393eb29d7672e638ce3e21076974e"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6a76b4722a529390683c0304501f238b365a46b1e5fb6b7249dbc0ad6fea51a0"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96a551e4683f1c307cfc3d9a05fec62c00a7264f320c9962a67a543e3ce0d8ff"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:61d0a6ceed8f08c75a395bc28cb648a81cf8dee75ba4650093ad1a24a51c8724"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ad280bbd409bf598683dda82232f5215cfc5f2b1bf0854e409b4d0c44a113b1d"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:76eddaf7fef1d0994e3d536ad48aa75034663d3a07f6f7e3e601105ae73aeff6"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:52e239cd66c4158e412318fbe028cd94b0ef21b0707f56dcb4bdc250ee58fd40"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:08bf9d5eabba160dd4f6ad247cf12f229cc19d2458511cab2eb9647f42fa6795"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:1b2cf018168cad87580e67bdde38ff5e51511112f1ce6ce9a8336871f465c19a"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:14f64d1ac6942ff089fc7e926440f7a5ced062e2ed0949d7d2d680dc5c00e2d4"}, + {file = "psycopg_binary-3.2.9-cp312-cp312-win_amd64.whl", hash = "sha256:7a838852e5afb6b4126f93eb409516a8c02a49b788f4df8b6469a40c2157fa21"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:98bbe35b5ad24a782c7bf267596638d78aa0e87abc7837bdac5b2a2ab954179e"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:72691a1615ebb42da8b636c5ca9f2b71f266be9e172f66209a361c175b7842c5"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:25ab464bfba8c401f5536d5aa95f0ca1dd8257b5202eede04019b4415f491351"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e8aeefebe752f46e3c4b769e53f1d4ad71208fe1150975ef7662c22cca80fab"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7e4e4dd177a8665c9ce86bc9caae2ab3aa9360b7ce7ec01827ea1baea9ff748"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7fc2915949e5c1ea27a851f7a472a7da7d0a40d679f0a31e42f1022f3c562e87"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a1fa38a4687b14f517f049477178093c39c2a10fdcced21116f47c017516498f"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5be8292d07a3ab828dc95b5ee6b69ca0a5b2e579a577b39671f4f5b47116dfd2"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:778588ca9897b6c6bab39b0d3034efff4c5438f5e3bd52fda3914175498202f9"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f0d5b3af045a187aedbd7ed5fc513bd933a97aaff78e61c3745b330792c4345b"}, + {file = "psycopg_binary-3.2.9-cp313-cp313-win_amd64.whl", hash = "sha256:2290bc146a1b6a9730350f695e8b670e1d1feb8446597bed0bbe7c3c30e0abcb"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4df22ec17390ec5ccb38d211fb251d138d37a43344492858cea24de8efa15003"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eac3a6e926421e976c1c2653624e1294f162dc67ac55f9addbe8f7b8d08ce603"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cf789be42aea5752ee396d58de0538d5fcb76795c85fb03ab23620293fb81b6f"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e0f05b9dafa5670a7503abc715af081dbbb176a8e6770de77bccaeb9024206c5"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2d7a6646d41228e9049978be1f3f838b557a1bde500b919906d54c4390f5086"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a4d76e28df27ce25dc19583407f5c6c6c2ba33b443329331ab29b6ef94c8736d"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:418f52b77b715b42e8ec43ee61ca74abc6765a20db11e8576e7f6586488a266f"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:1f1736d5b21f69feefeef8a75e8d3bf1f0a1e17c165a7488c3111af9d6936e91"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5918c0fab50df764812f3ca287f0d716c5c10bedde93d4da2cefc9d40d03f3aa"}, + {file = "psycopg_binary-3.2.9-cp38-cp38-win_amd64.whl", hash = "sha256:7b617b81f08ad8def5edd110de44fd6d326f969240cc940c6f6b3ef21fe9c59f"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:587a3f19954d687a14e0c8202628844db692dbf00bba0e6d006659bf1ca91cbe"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:791759138380df21d356ff991265fde7fe5997b0c924a502847a9f9141e68786"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:95315b8c8ddfa2fdcb7fe3ddea8a595c1364524f512160c604e3be368be9dd07"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18ac08475c9b971237fcc395b0a6ee4e8580bb5cf6247bc9b8461644bef5d9f4"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ac2c04b6345e215e65ca6aef5c05cc689a960b16674eaa1f90a8f86dfaee8c04"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1ab25e3134774f1e476d4bb9050cdec25f10802e63e92153906ae934578734"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4bfec4a73e8447d8fe8854886ffa78df2b1c279a7592241c2eb393d4499a17e2"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:166acc57af5d2ff0c0c342aed02e69a0cd5ff216cae8820c1059a6f3b7cf5f78"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:413f9e46259fe26d99461af8e1a2b4795a4e27cc8ac6f7919ec19bcee8945074"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:354dea21137a316b6868ee41c2ae7cce001e104760cf4eab3ec85627aed9b6cd"}, + {file = "psycopg_binary-3.2.9-cp39-cp39-win_amd64.whl", hash = "sha256:24ddb03c1ccfe12d000d950c9aba93a7297993c4e3905d9f2c9795bb0764d523"}, ] [[package]] @@ -1518,223 +1530,156 @@ 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] 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.11.7" description = "Data validation using Python type hints" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.11.7-py3-none-any.whl", hash = "sha256:dde5df002701f6de26248661f6835bbe296a47bf73990135c7d07ce741b9623b"}, + {file = "pydantic-2.11.7.tar.gz", hash = "sha256:d989c3c6cb79469287b1569f7447a17848c998458d49ebe294e975b9baf0f0db"}, ] [package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.16.3" -typing-extensions = ">=4.6.1" +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"] [[package]] name = "pydantic-core" -version = "2.16.3" -description = "" +version = "2.33.2" +description = "Core functionality for Pydantic validation and serialization" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.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] @@ -1742,42 +1687,60 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pygments" -version = "2.17.2" +version = "2.19.2" 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.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, + {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, ] [package.extras] -plugins = ["importlib-metadata"] 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" +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.3.7" +version = "2.5.12" 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.5.12-py3-none-any.whl", hash = "sha256:ef77a4a0076469a30b05f0bb23b5a058acfbdca83d82af9574ca651764017f44"}, + {file = "pymilvus-2.5.12.tar.gz", hash = "sha256:79ec7dc0616c2484f77abe98bca8deafb613645b5703c492b51961afd4f985d8"}, ] [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.67.1" +milvus-lite = {version = ">=2.4.0", markers = "sys_platform != \"win32\""} pandas = ">=1.2.4" protobuf = ">=3.20.0" -pyarrow = ">=12.0.0" -requests = "*" -setuptools = ">=67" +python-dotenv = ">=1.0.1,<2.0.0" +setuptools = ">69" 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 = ["pymilvus.model (>=0.3.0)"] + [[package]] name = "pytest" version = "7.4.4" @@ -1816,13 +1779,13 @@ six = ">=1.5" [[package]] name = "python-dotenv" -version = "1.0.1" +version = "1.1.1" description = "Read key-value pairs from a .env file and set them as environment variables" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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"}, + {file = "python_dotenv-1.1.1-py3-none-any.whl", hash = "sha256:31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc"}, + {file = "python_dotenv-1.1.1.tar.gz", hash = "sha256:a8a6399716257f45be6a007360200409fce5cda2661e3dec71d23dc15f6189ab"}, ] [package.extras] @@ -1830,153 +1793,164 @@ cli = ["click (>=5.0)"] [[package]] name = "pytz" -version = "2024.1" +version = "2025.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-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, + {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, ] [[package]] name = "pywin32" -version = "306" +version = "310" 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"}, + {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.1" +version = "6.0.2" description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" 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 = "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]] name = "qdrant-client" -version = "1.8.0" +version = "1.14.3" description = "Client library for the Qdrant vector search engine" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.14.3-py3-none-any.whl", hash = "sha256:66faaeae00f9b5326946851fe4ca4ddb1ad226490712e2f05142266f68dfc04d"}, + {file = "qdrant_client-1.14.3.tar.gz", hash = "sha256:bb899e3e065b79c04f5e47053d59176150c0a5dabc09d7f476c8ce8e52f4d281"}, ] [package.dependencies] grpcio = ">=1.41.0" -grpcio-tools = ">=1.41.0" -httpx = {version = ">=0.14.0", extras = ["http2"]} -numpy = {version = ">=1.21", markers = "python_version >= \"3.8\" and python_version < \"3.12\""} +httpx = {version = ">=0.20.0", extras = ["http2"]} +numpy = [ + {version = ">=1.21,<2.1.0", markers = "python_version < \"3.10\""}, + {version = ">=1.21", markers = "python_version >= \"3.10\" and python_version < \"3.12\""}, + {version = ">=1.26", markers = "python_version == \"3.12\""}, + {version = ">=2.1.0", markers = "python_version >= \"3.13\""}, +] portalocker = ">=2.7.0,<3.0.0" -pydantic = ">=1.10.8" +protobuf = ">=3.20.0" +pydantic = ">=1.10.8,<2.0.dev0 || >2.2.0" urllib3 = ">=1.26.14,<3" [package.extras] -fastembed = ["fastembed (==0.2.2)"] +fastembed = ["fastembed (>=0.7,<0.8)"] +fastembed-gpu = ["fastembed-gpu (>=0.7,<0.8)"] [[package]] name = "redis" -version = "5.0.3" +version = "5.3.0" 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.3-py3-none-any.whl", hash = "sha256:5da9b8fe9e1254293756c16c008e8620b3d15fcc6dde6babde9541850e72a32d"}, - {file = "redis-5.0.3.tar.gz", hash = "sha256:4973bae7444c0fbed64a06b87446f79361cb7e4ec1538c022d696ed7a5015580"}, + {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 (>=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" -version = "2.31.0" +version = "2.32.4" 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.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c"}, + {file = "requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422"}, ] [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" +charset_normalizer = ">=2,<4" idna = ">=2.5,<4" urllib3 = ">=1.21.1,<3" @@ -1984,31 +1958,52 @@ urllib3 = ">=1.21.1,<3" socks = ["PySocks (>=1.5.6,!=1.5.7)"] use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +[[package]] +name = "s3transfer" +version = "0.13.0" +description = "An Amazon S3 Transfer Manager" +optional = false +python-versions = ">=3.9" +files = [ + {file = "s3transfer-0.13.0-py3-none-any.whl", hash = "sha256:0148ef34d6dd964d0d8cf4311b2b21c474693e57c2e069ec708ce043d2b527be"}, + {file = "s3transfer-0.13.0.tar.gz", hash = "sha256:f5e6db74eb7776a37208001113ea7aa97695368242b364d73e91c981ac522177"}, +] + +[package.dependencies] +botocore = ">=1.37.4,<2.0a.0" + +[package.extras] +crt = ["botocore[crt] (>=1.37.4,<2.0a.0)"] + [[package]] name = "setuptools" -version = "69.2.0" +version = "80.9.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, + {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, ] [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"] +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)"] +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]] @@ -2053,49 +2048,80 @@ 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.2" +version = "4.67.1" 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.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"] [[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" @@ -2119,15 +2145,29 @@ 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" -description = "Backported and Experimental Type Hints for Python 3.8+" +version = "4.14.1" +description = "Backported and Experimental Type Hints for Python 3.9+" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76"}, + {file = "typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36"}, ] +[[package]] +name = "typing-inspection" +version = "0.4.1" +description = "Runtime typing introspection tools" +optional = false +python-versions = ">=3.9" +files = [ + {file = "typing_inspection-0.4.1-py3-none-any.whl", hash = "sha256:389055682238f53b04f7badcb49b989835495a96700ced5dab2d8feae4b26f51"}, + {file = "typing_inspection-0.4.1.tar.gz", hash = "sha256:6ae134cc0203c33377d43188d4064e9b357dba58cff3185f22924610e70a9d28"}, +] + +[package.dependencies] +typing-extensions = ">=4.12.0" + [[package]] name = "typish" version = "1.9.3" @@ -2143,98 +2183,127 @@ test = ["codecov", "coverage", "mypy", "nptyping (>=1.3.0)", "numpy", "pycodesty [[package]] name = "tzdata" -version = "2024.1" +version = "2025.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-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, + {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, ] [[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 = "2.2.1" +version = "1.26.20" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = ">=3.8" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" 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-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"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "urllib3" +version = "2.5.0" +description = "HTTP library with thread-safe connection pooling, file post, and more." +optional = false +python-versions = ">=3.9" +files = [ + {file = "urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc"}, + {file = "urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760"}, ] [package.extras] @@ -2245,35 +2314,27 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "validators" -version = "0.22.0" +version = "0.34.0" 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.34.0-py3-none-any.whl", hash = "sha256:c804b476e3e6d3786fa07a30073a4ef694e617805eb1946ceee3fe5a9b8b1321"}, + {file = "validators-0.34.0.tar.gz", hash = "sha256:647fe407b45af9a74d245b943b18e6a816acf4926974278f6dd617778e1e781f"}, ] [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)"] +crypto-eth-addresses = ["eth-hash[pycryptodome] (>=0.7.0)"] [[package]] name = "virtualenv" -version = "20.25.1" +version = "20.31.2" description = "Virtual Python Environment builder" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" 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.31.2-py3-none-any.whl", hash = "sha256:36efd0d9650ee985f0cad72065001e66d49a6f24eb44d98980f630686243cf11"}, + {file = "virtualenv-20.31.2.tar.gz", hash = "sha256:e10c0a9d02835e592521be48b332b6caee6887f332c111aa79a09b9e79efc2af"}, ] [package.dependencies] @@ -2282,7 +2343,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]] @@ -2298,26 +2359,29 @@ files = [ [[package]] name = "weaviate-client" -version = "4.5.3" +version = "4.15.4" description = "A python native Weaviate client" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" 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.15.4-py3-none-any.whl", hash = "sha256:870b73495b8e5849003690f7c36f2795b90765e62482f07ab71275dbd21b271d"}, + {file = "weaviate_client-4.15.4.tar.gz", hash = "sha256:005e7a6cee52ff4ac66f244a572b5ed98dd0e15bfda380979a88fddf692720df"}, ] [package.dependencies] 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" -pydantic = ">=2.5.0,<3.0.0" -requests = ">=2.30.0,<3.0.0" -validators = "0.22.0" +deprecation = ">=2.1.0,<3.0.0" +grpcio = ">=1.66.2,<2.0.0" +grpcio-health-checking = ">=1.66.2,<2.0.0" +grpcio-tools = ">=1.66.2,<2.0.0" +httpx = ">=0.26.0,<0.29.0" +pydantic = ">=2.8.0,<3.0.0" +validators = "0.34.0" + +[package.extras] +agents = ["weaviate-agents (>=0.3.0,<1.0.0)"] [metadata] lock-version = "2.0" -python-versions = ">=3.9,<3.12" -content-hash = "2cd84469db2650a089454f7537304f184f3e7df8b60e32f53e33cd98f1921b4a" +python-versions = ">=3.9,<3.14" +content-hash = "c27fc7ef817ac943a34447d7780b83f84446e2c3e3d0d1ba259dd22f9c255785" diff --git a/pyproject.toml b/pyproject.toml index 7b245e57..0109cfb8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,7 +5,7 @@ description = "" authors = ["Kacper Łukawski "] [tool.poetry.dependencies] -python = ">=3.9,<3.12" +python = ">=3.9,<3.14" qdrant-client = "^1.8.0" typer = "^0.6.1" jsons = "^1.6.3" @@ -22,9 +22,10 @@ backoff = "^2.2.1" psycopg = {extras = ["binary"], version = "^3.1.17"} pgvector = "^0.2.4" ml-dtypes = "^0.4.0" +boto3 = "^1.39.4" -[tool.poetry.dev-dependencies] +[tool.poetry.group.dev.dependencies] pre-commit = "^2.20.0" pytest = "^7.1" diff --git a/run.py b/run.py index 5a33d288..0f43ec68 100644 --- a/run.py +++ b/run.py @@ -28,11 +28,27 @@ def run( upload_end_idx: int = -1, queries: int = typer.Option(-1, help="Number of queries to run. If the available queries are fewer, they will be reused."), ef_runtime: List[int] = typer.Option([], help="Filter search experiments by ef runtime values. Only experiments with these ef values will be run."), + describe: str = typer.Option(None, help="Describe available options: 'datasets' or 'engines'. When used, shows information and exits."), + verbose: bool = typer.Option(False, "--verbose", "-v", help="Show detailed information when using --describe"), ): """ Example: python3 run.py --engines *-m-16-* --engines qdrant-* --datasets glove-* + python3 run.py --describe datasets + python3 run.py --describe engines --verbose """ + # Handle describe option first + if describe: + if describe.lower() == "datasets": + describe_datasets(datasets[0] if datasets != ["*"] else "*", verbose) + return + elif describe.lower() == "engines": + describe_engines(engines[0] if engines != ["*"] else "*", verbose) + return + else: + typer.echo(f"Error: Unknown describe target '{describe}'. Use 'datasets' or 'engines'.", err=True) + raise typer.Exit(1) + all_engines = read_engine_configs() all_datasets = read_dataset_config() @@ -99,5 +115,207 @@ def run( continue +def describe_datasets(filter_pattern: str = "*", verbose: bool = False): + """Display information about available datasets.""" + try: + all_datasets = read_dataset_config() + except Exception as e: + typer.echo(f"Error reading dataset configuration: {e}", err=True) + raise typer.Exit(1) + + # Filter datasets + filtered_datasets = { + name: config + for name, config in all_datasets.items() + if fnmatch.fnmatch(name, filter_pattern) + } + + if not filtered_datasets: + typer.echo(f"No datasets found matching pattern '{filter_pattern}'") + return + + typer.echo(f"\n📊 Available Datasets ({len(filtered_datasets)} found)") + typer.echo("=" * 80) + + # Sort datasets by dimension, then by vector count, then by name + def get_sort_key(item): + name, config = item + # Get dimension (vector_size) + dimension = config.get('vector_size', 0) + if dimension == 'N/A': + dimension = 0 + + # Get vector count from config, fallback to 0 if None or missing + vector_count = config.get('vector_count', 0) + if vector_count is None: + vector_count = 0 + + return (dimension, vector_count, name.lower()) + + sorted_datasets = sorted(filtered_datasets.items(), key=get_sort_key) + + if verbose: + # Detailed view + for name, config in sorted_datasets: + typer.echo(f"\n🔹 {name}") + typer.echo(f" Vector Size: {config.get('vector_size', 'N/A')}") + typer.echo(f" Distance: {config.get('distance', 'N/A')}") + typer.echo(f" Type: {config.get('type', 'N/A')}") + typer.echo(f" Path: {config.get('path', 'N/A')}") + if 'link' in config: + typer.echo(f" Download: {config['link']}") + if 'schema' in config: + typer.echo(f" Schema: {config['schema']}") + else: + # Compact table view with proper columnar formatting + col_widths = [35, 6, 8, 12, 30, 20] # Dataset Name, Dims, Distance, Vector Count, Description, Schema + headers = ["Dataset Name ", "Dims ", "Distance ", "Vector Count ", "Description ", "Schema "] + + # Print headers + header_line = "" + for header, width in zip(headers, col_widths): + header_line += f"{header:<{width}}" + typer.echo(header_line) + typer.echo("-" * sum(col_widths)) + + for name, config in sorted_datasets: + dimensions = str(config.get('vector_size', 'N/A')) + distance = config.get('distance', 'N/A') + + # Get vector count + vector_count = config.get('vector_count') + if vector_count is None: + vector_count_str = 'N/A' + else: + # Format large numbers with appropriate suffixes + if vector_count >= 1000000000: + vector_count_str = f"{vector_count / 1000000000:.1f}B" + elif vector_count >= 1000000: + vector_count_str = f"{vector_count / 1000000:.1f}M" + elif vector_count >= 1000: + vector_count_str = f"{vector_count / 1000:.1f}K" + else: + vector_count_str = str(vector_count) + + # Get description from config + description = config.get('description', 'N/A') + + # Truncate description if too long + if len(description) > col_widths[4] - 1: + description = description[:col_widths[4] - 4] + "..." + + # Get schema information - always show field count first + schema_info = "" + if 'schema' in config: + schema = config['schema'] + if isinstance(schema, dict): + field_count = len(schema) + + # Always start with field count + if field_count == 0: + schema_info = "0 fields" + elif field_count == 1: + schema_info = "1 field" + else: + schema_info = f"{field_count} fields" + + # Try to add details if they fit + if field_count > 0: + if field_count <= 2: + # For small schemas, try to show field names + field_names = ", ".join(schema.keys()) + test_info = f"{schema_info}: {field_names}" + if len(test_info) <= col_widths[4] - 1: + schema_info = test_info + else: + # For larger schemas, try to show types + field_types = sorted(set(schema.values())) + types_str = ", ".join(field_types) + test_info = f"{schema_info} ({types_str})" + if len(test_info) <= col_widths[4] - 1: + schema_info = test_info + else: + schema_info = str(schema) + + # Final truncation if still too long + if len(schema_info) > col_widths[4] - 1: + schema_info = schema_info[:col_widths[4] - 4] + "..." + + # Truncate name if too long + display_name = name + if len(display_name) > col_widths[0] - 1: + display_name = display_name[:col_widths[0] - 4] + "..." + + # Print row with proper column alignment + row_line = "" + values = [display_name, dimensions, distance, vector_count_str, description, schema_info] + for value, width in zip(values, col_widths): + row_line += f"{value:<{width}}" + typer.echo(row_line) + + typer.echo(f"\nTotal: {len(filtered_datasets)} datasets") + if filter_pattern != "*": + typer.echo(f"Filter: '{filter_pattern}'") + typer.echo("\nUse --verbose for detailed information") + + +def describe_engines(filter_pattern: str = "*", verbose: bool = False): + """Display information about available engines.""" + try: + all_engines = read_engine_configs() + except Exception as e: + typer.echo(f"Error reading engine configuration: {e}", err=True) + raise typer.Exit(1) + + # Filter engines + filtered_engines = { + name: config + for name, config in all_engines.items() + if fnmatch.fnmatch(name, filter_pattern) + } + + if not filtered_engines: + typer.echo(f"No engines found matching pattern '{filter_pattern}'") + return + + typer.echo(f"\n🚀 Available Engines ({len(filtered_engines)} found)") + typer.echo("=" * 80) + + if verbose: + # Detailed view + for name, config in sorted(filtered_engines.items()): + typer.echo(f"\n🔹 {name}") + typer.echo(f" Engine: {config.get('engine', 'N/A')}") + typer.echo(f" Module: {config.get('module', 'N/A')}") + if 'docker' in config: + typer.echo(f" Docker: {config['docker']}") + if 'search_params' in config: + search_params = config['search_params'] + typer.echo(f" Search Params:") + for param, values in search_params.items(): + if isinstance(values, list): + typer.echo(f" {param}: {values}") + else: + typer.echo(f" {param}: {values}") + if 'upload_params' in config: + upload_params = config['upload_params'] + typer.echo(f" Upload Params:") + for param, value in upload_params.items(): + typer.echo(f" {param}: {value}") + else: + # Compact table view + typer.echo(f"{'Engine Name':<40} {'Engine Type':<15} {'Module':<25}") + typer.echo("-" * 80) + for name, config in sorted(filtered_engines.items()): + engine_type = config.get('engine', 'N/A') + module = config.get('module', 'N/A') + typer.echo(f"{name:<40} {engine_type:<15} {module:<25}") + + typer.echo(f"\nTotal: {len(filtered_engines)} engines") + if filter_pattern != "*": + typer.echo(f"Filter: '{filter_pattern}'") + typer.echo("\nUse --verbose for detailed information") + + if __name__ == "__main__": app() diff --git a/scripts/update_datasets.py b/scripts/update_datasets.py new file mode 100644 index 00000000..cbfc4aa8 --- /dev/null +++ b/scripts/update_datasets.py @@ -0,0 +1,136 @@ +#!/usr/bin/env python3 +""" +Script to add missing vector_count and description fields to datasets.json +""" + +import json +import re + +def estimate_vector_count(name): + """Estimate vector count from dataset name patterns""" + name_lower = name.lower() + + # Direct patterns + if '1b' in name_lower or '1billion' in name_lower or '1g' in name_lower: + return 1000000000 + elif '400m' in name_lower: + return 400000000 + elif '200m' in name_lower: + return 200000000 + elif '100m' in name_lower: + return 100000000 + elif '40m' in name_lower: + return 40000000 + elif '20m' in name_lower: + return 20000000 + elif '10m' in name_lower: + return 10000000 + elif '1m' in name_lower: + return 1000000 + elif '100k' in name_lower: + return 100000 + elif '10k' in name_lower: + return 10000 + elif '1k' in name_lower: + return 1000 + elif 'random-100' in name_lower: + return 100 + + # Special cases + if 'glove' in name_lower: + return 1183514 # Standard GloVe size + elif 'deep-image' in name_lower: + return 9990000 # Standard deep image size + elif 'gist' in name_lower: + return 1000000 # Standard GIST size + elif 'yandex' in name_lower and '100k' in name_lower: + return 100000 + elif 'dbpedia' in name_lower: + return 1000000 + elif 'h-and-m' in name_lower: + return 105542 + elif 'arxiv' in name_lower: + return 2205995 + elif 'laion-small-clip' in name_lower: + return 100000 + elif 'random-match' in name_lower or 'random-range' in name_lower or 'random-geo' in name_lower: + if '2048' in name_lower: + return 100000 # 2048D synthetic datasets + else: + return 1000000 # 100D synthetic datasets + elif 'random-100-match' in name_lower: + return 100 # Small vocab datasets + + # Default for unknown patterns + return None + +def generate_description(name): + """Generate description from dataset name patterns""" + name_lower = name.lower() + + if 'laion' in name_lower: + return 'Image embeddings' + elif 'glove' in name_lower: + return 'Word vectors' + elif 'deep-image' in name_lower: + return 'CNN image features' + elif 'gist' in name_lower: + return 'Image descriptors' + elif 'dbpedia' in name_lower: + return 'Knowledge embeddings' + elif 'yandex' in name_lower: + return 'Text-to-image embeddings' + elif 'arxiv' in name_lower: + return 'Academic paper embeddings' + elif 'h-and-m' in name_lower: + return 'Fashion product embeddings' + elif 'random' in name_lower: + if 'match' in name_lower and 'keyword' in name_lower: + return 'Synthetic keyword matching' + elif 'match' in name_lower and 'int' in name_lower: + return 'Synthetic integer matching' + elif 'range' in name_lower: + return 'Synthetic range queries' + elif 'geo' in name_lower: + return 'Synthetic geo queries' + else: + return 'Synthetic data' + else: + return None + +def main(): + # Read the datasets.json file + with open('datasets/datasets.json', 'r') as f: + datasets = json.load(f) + + updated_count = 0 + + for dataset in datasets: + updated = False + + # Add vector_count if missing + if 'vector_count' not in dataset: + vector_count = estimate_vector_count(dataset['name']) + dataset['vector_count'] = vector_count + updated = True + print(f"Added vector_count {vector_count} to {dataset['name']}") + + # Add description if missing + if 'description' not in dataset: + description = generate_description(dataset['name']) + dataset['description'] = description + updated = True + print(f"Added description '{description}' to {dataset['name']}") + + if updated: + updated_count += 1 + + # Write back the updated datasets.json + with open('datasets/datasets.json', 'w') as f: + json.dump(datasets, f, indent=2) + + print(f"\nUpdated {updated_count} datasets") + print("datasets.json has been updated with missing vector_count and description fields") + +if __name__ == "__main__": + main() diff --git a/scripts/validate_datasets.py b/scripts/validate_datasets.py new file mode 100644 index 00000000..c252e439 --- /dev/null +++ b/scripts/validate_datasets.py @@ -0,0 +1,231 @@ +#!/usr/bin/env python3 +""" +Dataset validation script for vector-db-benchmark + +This script validates the datasets.json file to ensure: +1. All required fields are present +2. Field types are correct +3. Values are reasonable +4. Dataset names are unique +5. The --describe functionality works + +Usage: + python validate_datasets.py + python validate_datasets.py --strict # Exit on warnings too +""" + +import json +import sys +import argparse +from pathlib import Path +from typing import List, Tuple, Any + + +def load_datasets() -> List[dict]: + """Load and parse datasets.json file.""" + datasets_file = Path('datasets/datasets.json') + if not datasets_file.exists(): + print('❌ datasets/datasets.json not found') + sys.exit(1) + + try: + with open(datasets_file, 'r') as f: + datasets = json.load(f) + except json.JSONDecodeError as e: + print(f'❌ Invalid JSON in datasets.json: {e}') + sys.exit(1) + + if not isinstance(datasets, list): + print('❌ datasets.json must contain a list of datasets') + sys.exit(1) + + return datasets + + +def validate_dataset_structure(datasets: List[dict]) -> Tuple[List[str], List[str]]: + """Validate dataset structure and required fields.""" + required_fields = { + 'name': str, + 'vector_size': int, + 'distance': str, + 'type': str, + 'path': (str, dict), # Can be string or dict for h5-multi type + 'vector_count': (int, type(None)), + 'description': (str, type(None)) + } + + valid_distances = ['cosine', 'l2', 'dot', 'euclidean'] + valid_types = ['h5', 'tar', 'jsonl', 'h5-multi'] + + errors = [] + warnings = [] + + for i, dataset in enumerate(datasets): + dataset_name = dataset.get('name', f'Dataset #{i+1}') + + # Check required fields + for field, expected_type in required_fields.items(): + if field not in dataset: + errors.append(f'❌ {dataset_name}: Missing required field "{field}"') + continue + + value = dataset[field] + + # Handle tuple types (multiple allowed types) + if isinstance(expected_type, tuple): + if not isinstance(value, expected_type): + type_names = [t.__name__ if t != type(None) else 'null' for t in expected_type] + errors.append(f'❌ {dataset_name}: Field "{field}" must be {" or ".join(type_names)}, got {type(value).__name__}') + elif not isinstance(value, expected_type): + errors.append(f'❌ {dataset_name}: Field "{field}" must be {expected_type.__name__}, got {type(value).__name__}') + + # Validate specific field values + distance = dataset.get('distance') + if distance and distance not in valid_distances: + errors.append(f'❌ {dataset_name}: Invalid distance "{distance}", must be one of {valid_distances}') + + data_type = dataset.get('type') + if data_type and data_type not in valid_types: + warnings.append(f'⚠️ {dataset_name}: Unusual type "{data_type}", expected one of {valid_types}') + + # Validate numeric values + vector_size = dataset.get('vector_size') + if isinstance(vector_size, int): + if vector_size <= 0: + errors.append(f'❌ {dataset_name}: vector_size must be positive, got {vector_size}') + elif vector_size > 4096: + warnings.append(f'⚠️ {dataset_name}: Very large vector_size ({vector_size}) - verify this is correct') + + vector_count = dataset.get('vector_count') + if isinstance(vector_count, int): + if vector_count <= 0: + errors.append(f'❌ {dataset_name}: vector_count must be positive, got {vector_count}') + elif vector_count >= 1000000 and vector_count % 1000000 == 0: + warnings.append(f'⚠️ {dataset_name}: vector_count {vector_count} looks like an estimate (very round number)') + elif vector_count is None: + warnings.append(f'⚠️ {dataset_name}: vector_count is None - consider adding actual count') + + # Check for missing descriptions + if dataset.get('description') is None: + warnings.append(f'⚠️ {dataset_name}: description is None - consider adding description') + + # Check for missing links on downloadable datasets + if not dataset.get('link') and data_type in ['h5', 'tar', 'h5-multi']: + warnings.append(f'⚠️ {dataset_name}: No download link provided for {data_type} dataset') + + return errors, warnings + + +def validate_unique_names(datasets: List[dict]) -> List[str]: + """Check that all dataset names are unique.""" + names = [d.get('name') for d in datasets if d.get('name')] + duplicates = [name for name in set(names) if names.count(name) > 1] + + errors = [] + if duplicates: + errors.append(f'❌ Found duplicate dataset names: {duplicates}') + + return errors + + +def test_describe_functionality() -> List[str]: + """Test that the --describe functionality works.""" + import subprocess + + errors = [] + + try: + # Test describe datasets + print("🔍 Testing --describe datasets functionality...") + result = subprocess.run( + [sys.executable, 'run.py', '--describe', 'datasets'], + capture_output=True, + text=True, + timeout=30 + ) + + if result.returncode != 0: + errors.append(f'❌ --describe datasets failed with exit code {result.returncode}') + if result.stderr: + errors.append(f' Error: {result.stderr.strip()}') + elif not result.stdout or 'Available Datasets' not in result.stdout: + errors.append('❌ --describe datasets output missing expected content') + else: + print("✅ --describe datasets works correctly") + + # Test describe engines + print("🔍 Testing --describe engines functionality...") + result = subprocess.run( + [sys.executable, 'run.py', '--describe', 'engines'], + capture_output=True, + text=True, + timeout=30 + ) + + if result.returncode != 0: + errors.append(f'❌ --describe engines failed with exit code {result.returncode}') + if result.stderr: + errors.append(f' Error: {result.stderr.strip()}') + elif not result.stdout or 'Available Engines' not in result.stdout: + errors.append('❌ --describe engines output missing expected content') + else: + print("✅ --describe engines works correctly") + + except subprocess.TimeoutExpired: + errors.append('❌ --describe command timed out') + except Exception as e: + errors.append(f'❌ Error testing --describe functionality: {e}') + + return errors + + +def main(): + parser = argparse.ArgumentParser(description='Validate datasets.json file') + parser.add_argument('--strict', action='store_true', + help='Exit with error code on warnings too') + args = parser.parse_args() + + print("🔍 Validating datasets.json...") + + # Load datasets + datasets = load_datasets() + print(f"✅ Loaded {len(datasets)} datasets from datasets.json") + + # Validate structure + structure_errors, structure_warnings = validate_dataset_structure(datasets) + + # Validate unique names + name_errors = validate_unique_names(datasets) + + # Test describe functionality + describe_errors = test_describe_functionality() + + # Combine all errors and warnings + all_errors = structure_errors + name_errors + describe_errors + all_warnings = structure_warnings + + # Print results + if all_warnings: + print("\n⚠️ Warnings:") + for warning in all_warnings: + print(f" {warning}") + + if all_errors: + print("\n❌ Errors:") + for error in all_errors: + print(f" {error}") + print(f"\n❌ Validation failed with {len(all_errors)} errors") + sys.exit(1) + else: + print(f"\n✅ All validations passed!") + if all_warnings: + print(f"⚠️ Found {len(all_warnings)} warnings (non-blocking)") + if args.strict: + print("❌ Strict mode: treating warnings as errors") + sys.exit(1) + + print(f"📊 Summary: {len(datasets)} datasets validated successfully") + + +if __name__ == "__main__": + main() From cbe4c8363e31b4a2be6dcf0cb85f9601386b0716 Mon Sep 17 00:00:00 2001 From: "Filipe Oliveira (Personal)" Date: Sun, 13 Jul 2025 14:47:03 +0100 Subject: [PATCH 206/209] Fixed docker permissions on results folder. (#33) * Add comprehensive Docker CI/CD pipeline - Enhanced Dockerfile with multi-stage build and security best practices - Added Docker build, run, and test scripts with Redis-specific configurations - Created GitHub Actions workflows for PR validation, master publishing, and release publishing - Added docker-compose.yml for local development with Redis - Updated documentation with Docker usage examples - Configured for redis-performance/vector-db-benchmark Docker Hub repository - Default configuration: engines=redis, dataset=random-100, experiment=redis-m-16-ef-64 - Multi-platform support (linux/amd64, linux/arm64) - Security scanning with Trivy for releases * Update Docker workflows for update-redisearch default branch - Updated PR validation to trigger on update-redisearch branch - Updated publishing workflow to use update-redisearch branch instead of master - Updated Docker tags to use update-redisearch-{sha} format - Updated documentation to reflect correct default branch * Corrected docker repo, base branch, and test-image of redis. * fixed missing redis container * feat: enhance benchmark functionality with dataset discovery, validation, and performance monitoring - Add --describe command for datasets and engines with columnar display - Implement real-time performance summaries (QPS, P50/P95 latency) - Add comprehensive dataset validation system with GitHub Actions - Complete dataset metadata with vector_count and description fields - Improve download reliability with proper HTTP headers - Standardize precision formatting (0.01 increments up to 0.97, then 0.0025) - Enhanced Docker configurations for better Redis testing defaults - Add validation documentation and automated CI/CD checks This maintains backward compatibility while significantly improving usability, data quality, and performance insights for vector database benchmarking. * Moved validate and update datasets to scripts folder * Moved validate and update datasets to scripts folder * fix: use Poetry with --no-root flag for GitHub Action dependencies - Add Poetry installation to validate-datasets workflow - Use --no-root to install dependencies without packaging the project - Run validation script with 'poetry run' to access all dependencies - Fixes ModuleNotFoundError for stopit and other dependencies when testing --describe functionality * Added boto3 dependency * Added basic test for RediSearch * Updated deps to work for python 3.12. fixed deprecation warnings * Updated poetry lock * Adding redis-tools to the verify step (redis-cli) * Adding python3 3.13 to the test matrix * Using random-100 for faster testing * Updated poetry lock * Using random-100 for faster testing * Added Redis Vector Sets checks on CI * Fixed docker permissions on results folder. --------- Co-authored-by: fcostaoliveira --- Dockerfile | 23 ++++++++++++++++------- README.md | 47 +++++++++++++++++++++++++---------------------- 2 files changed, 41 insertions(+), 29 deletions(-) diff --git a/Dockerfile b/Dockerfile index 38aa4560..d2b702fc 100644 --- a/Dockerfile +++ b/Dockerfile @@ -63,9 +63,6 @@ RUN apt-get update && apt-get install -y \ wget \ && rm -rf /var/lib/apt/lists/* -# Create non-root user -RUN groupadd -g 1001 -r appgroup && \ - useradd -u 1001 -r -g appgroup appuser # Set working directory WORKDIR /app @@ -79,11 +76,21 @@ COPY --from=builder /code /app # Create directories with proper permissions RUN mkdir -p /app/results /app/datasets && \ - chown -R appuser:appgroup /app && \ + + chmod -R 777 /app/results /app/datasets && \ chmod -R 755 /app -# Switch to non-root user -USER appuser +# Create entrypoint script to handle user permissions +RUN echo '#!/bin/bash\n\ +# Handle user permissions for volume mounts\n\ +if [ "$1" = "run.py" ]; then\n\ + # Ensure results directory is writable\n\ + mkdir -p /app/results\n\ + chmod 777 /app/results\n\ +fi\n\ +exec python "$@"' > /app/entrypoint.sh && \ + chmod +x /app/entrypoint.sh + # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ @@ -93,7 +100,9 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ EXPOSE 6379 6380 # Set entrypoint -ENTRYPOINT ["python"] + +ENTRYPOINT ["/app/entrypoint.sh"] + # Default command (show help) CMD ["run.py", "--help"] diff --git a/README.md b/README.md index 2f7ab5b2..7a1e32eb 100644 --- a/README.md +++ b/README.md @@ -84,14 +84,16 @@ docker pull filipe958/vector-db-benchmark:latest # Run with help docker run --rm filipe958/vector-db-benchmark:latest run.py --help -# Basic Redis benchmark with local Redis -docker run --rm --network=host filipe958/vector-db-benchmark:latest \ - run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple -# With results output (mount current directory) +# Basic Redis benchmark with local Redis (recommended) docker run --rm -v $(pwd)/results:/app/results --network=host \ filipe958/vector-db-benchmark:latest \ - run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple + run.py --host localhost --engines redis-default-simple --dataset random-100 + +# Without results output +docker run --rm --network=host filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis-default-simple --dataset random-100 + ``` ### Using with Redis @@ -103,11 +105,14 @@ For testing with Redis, start a Redis container first: docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm # Run benchmark against Redis -docker run --rm --network=host filipe958/vector-db-benchmark:latest \ - run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple + +docker run --rm -v $(pwd)/results:/app/results --network=host \ + filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis-default-simple --dataset random-100 # Or use the convenience script -./docker-run.sh -H localhost -e redis -d random-100 -x redis-default-simple +./docker-run.sh -H localhost -e redis-default-simple -d random-100 + # Clean up Redis container when done docker stop redis-test && docker rm redis-test @@ -149,20 +154,18 @@ poetry install Run the benchmark: ```bash -Usage: run.py [OPTIONS] - - Example: python3 -m run --engines *-m-16-* --datasets glove-* - -Options: - --engines TEXT [default: *] - --datasets TEXT [default: *] - --host TEXT [default: localhost] - --skip-upload / --no-skip-upload - [default: no-skip-upload] - --install-completion Install completion for the current shell. - --show-completion Show completion for the current shell, to - copy it or customize the installation. - --help Show this message and exit. +# Basic usage examples +python run.py --engines redis-default-simple --dataset random-100 +python run.py --engines redis-default-simple --dataset glove-25-angular +python run.py --engines "*-m-16-*" --dataset "glove-*" + +# Docker usage (recommended) +docker run --rm -v $(pwd)/results:/app/results --network=host \ + filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis-default-simple --dataset random-100 + +# Get help +python run.py --help ``` Command allows you to specify wildcards for engines and datasets. From 6ebf3388de13ae26e8a035d362a2c12d40010dda Mon Sep 17 00:00:00 2001 From: "Filipe Oliveira (Personal)" Date: Sun, 13 Jul 2025 16:27:49 +0100 Subject: [PATCH 207/209] feat: add precision-summary field with clean QPS, P50, P95 metrics (#34) * feat: add precision-summary field with clean QPS, P50, P95 metrics - Add precision-summary field alongside existing precision field - Contains simplified dict with just qps, p50, p95 for each precision level - P50/P95 values converted to milliseconds for consistency - QPS rounded to 1 decimal place for readability - Maintains backward compatibility with existing precision field - Enables easier parsing and analysis of performance metrics * Update README.md to include easy docker steps and how to check results fast. --------- Co-authored-by: fcostaoliveira --- README.md | 131 +++++++++++++++++++++-------------- engine/base_client/client.py | 29 ++++++-- 2 files changed, 103 insertions(+), 57 deletions(-) diff --git a/README.md b/README.md index 7a1e32eb..4dc18973 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,84 @@ scenario against which it should be tested. A specific scenario may assume running the server in a single or distributed mode, a different client implementation and the number of client instances. + +## Quick Start + +### Quick Start with Docker + +The easiest way to run vector-db-benchmark is using Docker. We provide pre-built images on Docker Hub. + +```bash +# Pull the latest image +docker pull filipe958/vector-db-benchmark:latest + +# Run with help +docker run --rm filipe958/vector-db-benchmark:latest run.py --help + +# Check which datasets are available +docker run --rm filipe958/vector-db-benchmark:latest run.py --describe datasets + +# Basic Redis benchmark with local Redis +docker run --rm -v $(pwd)/results:/app/results --network=host \ + filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis-default-simple --datasets glove-25-angular + +# At the end of the run, you will find the results in the `results` directory. Lets open the summary one, in the precision summary + +$ jq ".precision_summary" results/*-summary.json +{ + "0.91": { + "qps": 1924.5, + "p50": 49.828, + "p95": 58.427 + }, + "0.94": { + "qps": 1819.9, + "p50": 51.68, + "p95": 66.83 + }, + "0.9775": { + "qps": 1477.8, + "p50": 65.368, + "p95": 73.849 + }, + "0.9950": { + "qps": 1019.8, + "p50": 95.115, + "p95": 106.73 + } +} +``` + +### Using with Redis + +For testing with Redis, start a Redis container first: + +```bash +# Start Redis container +docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm + +# Run benchmark against Redis + +docker run --rm -v $(pwd)/results:/app/results --network=host \ + filipe958/vector-db-benchmark:latest \ + run.py --host localhost --engines redis-default-simple --dataset random-100 + +# Or use the convenience script +./docker-run.sh -H localhost -e redis-default-simple -d random-100 + + +# Clean up Redis container when done +docker stop redis-test && docker rm redis-test +``` + +### Available Docker Images + +- **Latest**: `filipe958/vector-db-benchmark:latest` + +For detailed Docker setup and publishing information, see [DOCKER_SETUP.md](DOCKER_SETUP.md). + + ## Data sets We have a number of precomputed data sets. All data sets have been pre-split into train/test and include ground truth data for the top-100 nearest neighbors. @@ -71,59 +149,6 @@ We have a number of precomputed data sets. All data sets have been pre-split int | Random Match Keyword Small Vocab-256: Small vocabulary keyword matching (no filters) | 256 | 1,000,000 | 10,000 | 100 | Cosine | -## 🐳 Docker Usage - -The easiest way to run vector-db-benchmark is using Docker. We provide pre-built images on Docker Hub. - -### Quick Start with Docker - -```bash -# Pull the latest image -docker pull filipe958/vector-db-benchmark:latest - -# Run with help -docker run --rm filipe958/vector-db-benchmark:latest run.py --help - - -# Basic Redis benchmark with local Redis (recommended) -docker run --rm -v $(pwd)/results:/app/results --network=host \ - filipe958/vector-db-benchmark:latest \ - run.py --host localhost --engines redis-default-simple --dataset random-100 - -# Without results output -docker run --rm --network=host filipe958/vector-db-benchmark:latest \ - run.py --host localhost --engines redis-default-simple --dataset random-100 - -``` - -### Using with Redis - -For testing with Redis, start a Redis container first: - -```bash -# Start Redis container -docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm - -# Run benchmark against Redis - -docker run --rm -v $(pwd)/results:/app/results --network=host \ - filipe958/vector-db-benchmark:latest \ - run.py --host localhost --engines redis-default-simple --dataset random-100 - -# Or use the convenience script -./docker-run.sh -H localhost -e redis-default-simple -d random-100 - - -# Clean up Redis container when done -docker stop redis-test && docker rm redis-test -``` - -### Available Docker Images - -- **Latest**: `filipe958/vector-db-benchmark:latest` - -For detailed Docker setup and publishing information, see [DOCKER_SETUP.md](DOCKER_SETUP.md). - ## How to run a benchmark? Benchmarks are implemented in server-client mode, meaning that the server is diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 436e5db0..2222be50 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -34,9 +34,16 @@ def format_precision_key(precision_value: float) -> str: return f"{rounded:.4f}" -def analyze_precision_performance(search_results: Dict[str, Any]) -> Dict[str, Dict[str, Any]]: - """Analyze search results to find best RPS at each actual precision level achieved.""" +def analyze_precision_performance(search_results: Dict[str, Any]) -> tuple[Dict[str, Dict[str, Any]], Dict[str, Dict[str, float]]]: + """Analyze search results to find best RPS at each actual precision level achieved. + + Returns: + tuple: (precision_dict, precision_summary_dict) + - precision_dict: Full precision analysis with config details + - precision_summary_dict: Simplified summary with just QPS, P50, P95 + """ precision_dict = {} + precision_summary_dict = {} # First, collect all actual precision levels achieved by experiments and format them precision_mapping = {} # Maps formatted precision to actual precision @@ -53,6 +60,8 @@ def analyze_precision_performance(search_results: Dict[str, Any]) -> Dict[str, D best_rps = 0 best_config = None best_experiment_id = None + best_p50_time = 0 + best_p95_time = 0 for experiment_id, experiment_data in search_results.items(): mean_precision = experiment_data["results"]["mean_precisions"] @@ -66,16 +75,26 @@ def analyze_precision_performance(search_results: Dict[str, Any]) -> Dict[str, D "search_params": experiment_data["params"]["search_params"] } best_experiment_id = experiment_id + best_p50_time = experiment_data["results"]["p50_time"] + best_p95_time = experiment_data["results"]["p95_time"] # Add to precision dict with the formatted precision as key if best_config is not None: + # Full precision analysis (existing format) precision_dict[formatted_precision] = { "rps": best_rps, "config": best_config, "experiment_id": best_experiment_id } - return precision_dict + # Simplified precision summary + precision_summary_dict[formatted_precision] = { + "qps": round(best_rps, 1), + "p50": round(best_p50_time * 1000, 3), # Convert to ms + "p95": round(best_p95_time * 1000, 3) # Convert to ms + } + + return precision_dict, precision_summary_dict warnings.filterwarnings("ignore", category=DeprecationWarning) @@ -285,10 +304,12 @@ def run_experiment( # Add precision analysis if search results exist if results["search"]: - precision_analysis = analyze_precision_performance(results["search"]) + precision_analysis, precision_summary = analyze_precision_performance(results["search"]) if precision_analysis: # Only add if we have precision data results["precision"] = precision_analysis + results["precision_summary"] = precision_summary print(f"Added precision analysis with {len(precision_analysis)} precision thresholds") + print(f"Added precision summary with {len(precision_summary)} precision levels") summary_file = f"{self.name}-{dataset.config.name}-summary.json" summary_path = RESULTS_DIR / summary_file From 340c9e67ea349c213f2017180bc1d24d4a2c42e6 Mon Sep 17 00:00:00 2001 From: "Filipe Oliveira (Redis)" Date: Mon, 14 Jul 2025 11:38:37 +0100 Subject: [PATCH 208/209] Updated docker org to redis. Included extra docs and visualization features (#35) * feat: comprehensive Docker improvements and precision summary enhancements - Simplify Docker tagging strategy to only latest and version tags - Change Docker image repository from filipe958/vector-db-benchmark to redis/vector-db-benchmark - Fix Docker volume permission issues with smart entrypoint script - Add precision_summary field with clean QPS, P50, P95 metrics - Update Python version support to include 3.13 - Add comprehensive Redis environment variables (REDIS_AUTH, REDIS_USER, REDIS_CLUSTER) - Create Docker-specific README with Redis 8.2 examples - Update all documentation to use redis/vector-db-benchmark consistently - Enhance GitHub Actions with Redis CLI installation and Poetry support * Including QPS per precision chart on cli. --- .github/workflows/docker-publish-master.yml | 8 +- .github/workflows/docker-publish-release.yml | 7 +- DOCKER_README.md | 176 +++++++++++++++++++ DOCKER_SETUP.md | 27 ++- README.md | 59 ++++++- docker-build.sh | 25 ++- docker-run.sh | 6 +- engine/base_client/client.py | 113 ++++++++++++ 8 files changed, 369 insertions(+), 52 deletions(-) create mode 100644 DOCKER_README.md diff --git a/.github/workflows/docker-publish-master.yml b/.github/workflows/docker-publish-master.yml index ab96f4d3..4e2c62a6 100644 --- a/.github/workflows/docker-publish-master.yml +++ b/.github/workflows/docker-publish-master.yml @@ -1,4 +1,4 @@ -name: Docker Publish - update.redisearch branch +name: Docker Publish - Latest on: push: @@ -11,7 +11,7 @@ on: env: REGISTRY: docker.io - IMAGE_NAME: filipe958/vector-db-benchmark + IMAGE_NAME: redis/vector-db-benchmark jobs: docker-publish: @@ -61,8 +61,6 @@ jobs: images: ${{ env.IMAGE_NAME }} tags: | type=raw,value=latest - type=raw,value=update-redisearch-{{sha}} - type=raw,value=update-redisearch-{{date 'YYYYMMDD-HHmmss'}} - name: Build and push Docker image uses: docker/build-push-action@v5 @@ -95,4 +93,4 @@ jobs: echo "docker run --rm ${{ env.IMAGE_NAME }}:latest run.py --help" >> $GITHUB_STEP_SUMMARY echo "\`\`\`" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - echo "🔗 [View on Docker Hub](https://hub.docker.com/r/filipe958/vector-db-benchmark)" >> $GITHUB_STEP_SUMMARY + echo "🔗 [View on Docker Hub](https://hub.docker.com/r/redis/vector-db-benchmark)" >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/docker-publish-release.yml b/.github/workflows/docker-publish-release.yml index dc0ad5ae..b4c99b96 100644 --- a/.github/workflows/docker-publish-release.yml +++ b/.github/workflows/docker-publish-release.yml @@ -6,7 +6,7 @@ on: env: REGISTRY: docker.io - IMAGE_NAME: filipe958/vector-db-benchmark + IMAGE_NAME: redis/vector-db-benchmark jobs: docker-publish: @@ -57,9 +57,6 @@ jobs: tags: | type=ref,event=tag type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - type=raw,value=latest,enable={{is_default_branch}} - name: Build and push Docker image uses: docker/build-push-action@v5 @@ -110,5 +107,5 @@ jobs: echo "docker run --rm ${{ env.IMAGE_NAME }}:latest run.py --help" >> $GITHUB_STEP_SUMMARY echo "\`\`\`" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY - echo "🔗 [View on Docker Hub](https://hub.docker.com/r/filipe958/vector-db-benchmark)" >> $GITHUB_STEP_SUMMARY + echo "🔗 [View on Docker Hub](https://hub.docker.com/r/redis/vector-db-benchmark)" >> $GITHUB_STEP_SUMMARY echo "🔒 [Security Scan Results](https://github.com/${{ github.repository }}/security/code-scanning)" >> $GITHUB_STEP_SUMMARY diff --git a/DOCKER_README.md b/DOCKER_README.md new file mode 100644 index 00000000..b7685bd4 --- /dev/null +++ b/DOCKER_README.md @@ -0,0 +1,176 @@ +# Redis Vector Database Benchmark + +A comprehensive benchmarking tool for vector databases, including Redis (both RediSearch and Vector Sets), Weaviate, Milvus, Qdrant, OpenSearch, Postgres, and others... + +In a one-liner cli tool you can get this and much more: + +``` +docker run --rm --network=host redis/vector-db-benchmark:latest run.py --host localhost --engines vectorsets-fp32-default --datasets glove-100-angular --parallels 100 +(...) +================================================================================ +BENCHMARK RESULTS SUMMARY +Experiment: vectorsets-fp32-default - glove-100-angular +================================================================================ + +Precision vs Performance Trade-off: +-------------------------------------------------- +Precision QPS P50 (ms) P95 (ms) +-------------------------------------------------- +0.86 1408.3 61.877 107.548 +0.80 2136.3 38.722 69.102 +0.72 2954.3 25.820 48.072 +0.68 3566.5 20.229 38.581 + +QPS vs Precision Trade-off - vectorsets-fp32-default - glove-100-angular (up and to the right is better): + + 3566 │● + │ ● + │ + 2594 │ + │ ● + │ + 1621 │ ● + │ + │ + 648 │ + │ + │ + 0 │ + └──────────────────────────────────────────────────────────── + 0.680 0.726 0.772 0.817 + Precision (0.0 = 0%, 1.0 = 100%) +================================================================================ + +``` + +## Quick Start + +```bash +# Pull the latest image +docker pull redis/vector-db-benchmark:latest + +# Run with help +docker run --rm redis/vector-db-benchmark:latest run.py --help + +# Check available datasets +docker run --rm redis/vector-db-benchmark:latest run.py --describe datasets + +# Basic Redis benchmark (requires local Redis) +docker run --rm -v $(pwd)/results:/app/results --network=host \ + redis/vector-db-benchmark:latest \ + run.py --host localhost --engines redis-default-simple --dataset random-100 +``` + +## Features + +- **42+ Datasets**: Pre-configured datasets from 25 to 1B+ vectors +- **Multiple Engines**: Redis, Qdrant, Weaviate, Milvus, and more +- **Real-time Monitoring**: Live performance metrics during benchmarks +- **Precision Analysis**: Detailed accuracy vs performance trade-offs +- **Easy Discovery**: `--describe` commands for datasets and engines + +## Available Tags + +- `latest` - Latest development build from update.redisearch branch + +## Redis quick start + +### Redis 8.2 with RediSearch +```bash +# Start Redis 8.2 with built-in vector support +docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm + +# Run benchmark +docker run --rm -v $(pwd)/results:/app/results --network=host \ + redis/vector-db-benchmark:latest \ + run.py --host localhost --engines redis-default-simple --dataset glove-25-angular +``` + + +## Common Usage Patterns + +### Explore Available Options +```bash +# List all datasets +docker run --rm redis/vector-db-benchmark:latest run.py --describe datasets + +# List all engines +docker run --rm redis/vector-db-benchmark:latest run.py --describe engines +``` + +### Run Benchmarks +```bash +# Quick test with small dataset +docker run --rm -v $(pwd)/results:/app/results --network=host \ + redis/vector-db-benchmark:latest \ + run.py --host localhost --engines redis-default-simple --dataset random-100 + +# Comprehensive benchmark with multiple configurations +docker run --rm -v $(pwd)/results:/app/results --network=host \ + redis/vector-db-benchmark:latest \ + run.py --host localhost --engines "*redis*" --dataset glove-25-angular + +# With Redis authentication +docker run --rm -v $(pwd)/results:/app/results --network=host \ + -e REDIS_AUTH=mypassword -e REDIS_USER=myuser \ + redis/vector-db-benchmark:latest \ + run.py --host localhost --engines redis-default-simple --dataset random-100 +``` + +### Results Analysis +```bash +# View precision summary +jq '.precision_summary' results/*-summary.json + +# View detailed results +jq '.search' results/*-summary.json +``` + +## Volume Mounts + +- `/app/results` - Benchmark results (JSON files) +- `/app/datasets` - Dataset storage (optional, auto-downloaded) + +## Environment Variables + +- `REDIS_HOST` - Redis server hostname (default: localhost) +- `REDIS_PORT` - Redis server port (default: 6379) +- `REDIS_AUTH` - Redis password (default: None) +- `REDIS_USER` - Redis username (default: None) +- `REDIS_CLUSTER` - Enable Redis cluster mode (default: 0) + +## Performance Tips + +1. **Use `--network=host`** for best performance with local Redis +2. **Mount results volume** to persist benchmark data +3. **Start with small datasets** (random-100, glove-25-angular) for testing +4. **Use wildcard patterns** to test multiple configurations: `--engines "*-m-16-*"` + +## Example Output + +```json +{ + "precision_summary": { + "0.91": { + "qps": 1924.5, + "p50": 49.828, + "p95": 58.427 + }, + "0.94": { + "qps": 1819.9, + "p50": 51.68, + "p95": 66.83 + } + } +} +``` + +## Support + +- **GitHub**: [redis-performance/vector-db-benchmark](https://github.com/redis-performance/vector-db-benchmark) +- **Issues**: Report bugs and feature requests on GitHub +- **Documentation**: Full documentation available in the repository + +## License + +This project is licensed under the MIT License - see the repository for details. diff --git a/DOCKER_SETUP.md b/DOCKER_SETUP.md index 21e545b0..24d55b19 100644 --- a/DOCKER_SETUP.md +++ b/DOCKER_SETUP.md @@ -1,6 +1,6 @@ # Docker Setup and Publishing Guide -This guide explains how to set up Docker publishing for the `vector-db-benchmark` project to Docker Hub repository `filipe958/vector-db-benchmark`. +This guide explains how to set up Docker publishing for the `vector-db-benchmark` project to Docker Hub repository `redis/vector-db-benchmark`. ## 🔐 Required GitHub Secrets @@ -57,11 +57,8 @@ Once secrets are configured, Docker images will be automatically published: ### Example Tags for Release v1.2.3 ``` -filipe958/vector-db-benchmark:v1.2.3 -filipe958/vector-db-benchmark:1.2.3 -filipe958/vector-db-benchmark:1.2 -filipe958/vector-db-benchmark:1 -filipe958/vector-db-benchmark:latest +redis/vector-db-benchmark:v1.2.3 +redis/vector-db-benchmark:latest ``` ## 🛠️ Manual Building and Publishing @@ -100,32 +97,32 @@ export DOCKER_PASSWORD=your_access_token ### Pull and Run ```bash # Latest version -docker pull filipe958/vector-db-benchmark:latest -docker run --rm filipe958/vector-db-benchmark:latest run.py --help +docker pull redis/vector-db-benchmark:latest +docker run --rm redis/vector-db-benchmark:latest run.py --help # Specific version -docker pull filipe958/vector-db-benchmark:v1.2.3 -docker run --rm filipe958/vector-db-benchmark:v1.2.3 run.py --help +docker pull redis/vector-db-benchmark:v1.2.3 +docker run --rm redis/vector-db-benchmark:v1.2.3 run.py --help ``` ### Example Usage ```bash # Basic Redis benchmark -docker run --rm --network=host filipe958/vector-db-benchmark:latest \ +docker run --rm --network=host redis/vector-db-benchmark:latest \ run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple # With custom Redis host -docker run --rm filipe958/vector-db-benchmark:latest \ +docker run --rm redis/vector-db-benchmark:latest \ run.py --host redis-server --engines redis --dataset random-100 --experiment redis-default-simple # With results output (mount current directory) docker run --rm -v $(pwd)/results:/app/results --network=host \ - filipe958/vector-db-benchmark:latest \ + redis/vector-db-benchmark:latest \ run.py --host localhost --engines redis --dataset random-100 --experiment redis-default-simple # Using with Redis container docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm -docker run --rm --network=host filipe958/vector-db-benchmark:latest \ +docker run --rm --network=host redis/vector-db-benchmark:latest \ run.py --host localhost --engines redis --experiment redis-default-simple docker stop redis-test && docker rm redis-test ``` @@ -145,7 +142,7 @@ docker stop redis-test && docker rm redis-test - Prevents merging PRs with broken Docker builds ### Docker Hub -- View images at: https://hub.docker.com/r/filipe958/vector-db-benchmark +- View images at: https://hub.docker.com/r/redis/vector-db-benchmark - Check image sizes and platforms - Review vulnerability scan results diff --git a/README.md b/README.md index 4dc18973..7bd110f9 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,49 @@ # vector-db-benchmark -![Screenshot from 2022-08-23 14-10-01](https://user-images.githubusercontent.com/1935623/186516524-a61098d4-bca6-4aeb-acbe-d969cf30674e.png) +A comprehensive benchmarking tool for vector databases, including Redis (both RediSearch and Vector Sets), Weaviate, Milvus, Qdrant, OpenSearch, Postgres, and others... -> [View results](https://qdrant.tech/benchmarks/) +In a one-liner cli tool you can get this and much more: + +``` +docker run --rm --network=host redis/vector-db-benchmark:latest run.py --host localhost --engines vectorsets-fp32-default --datasets glove-100-angular --parallels 100 +(...) +================================================================================ +BENCHMARK RESULTS SUMMARY +Experiment: vectorsets-fp32-default - glove-100-angular +================================================================================ + +Precision vs Performance Trade-off: +-------------------------------------------------- +Precision QPS P50 (ms) P95 (ms) +-------------------------------------------------- +0.86 1408.3 61.877 107.548 +0.80 2136.3 38.722 69.102 +0.72 2954.3 25.820 48.072 +0.68 3566.5 20.229 38.581 + +QPS vs Precision Trade-off - vectorsets-fp32-default - glove-100-angular (up and to the right is better): + + 3566 │● + │ ● + │ + 2594 │ + │ ● + │ + 1621 │ ● + │ + │ + 648 │ + │ + │ + 0 │ + └──────────────────────────────────────────────────────────── + 0.680 0.726 0.772 0.817 + Precision (0.0 = 0%, 1.0 = 100%) +================================================================================ + +``` + +> [View results](https://redis.io/blog/benchmarking-results-for-vector-databases/) There are various vector search engines available, and each of them may offer a different set of features and efficiency. But how do we measure the @@ -25,17 +66,17 @@ The easiest way to run vector-db-benchmark is using Docker. We provide pre-built ```bash # Pull the latest image -docker pull filipe958/vector-db-benchmark:latest +docker pull redis/vector-db-benchmark:latest # Run with help -docker run --rm filipe958/vector-db-benchmark:latest run.py --help +docker run --rm redis/vector-db-benchmark:latest run.py --help # Check which datasets are available -docker run --rm filipe958/vector-db-benchmark:latest run.py --describe datasets +docker run --rm redis/vector-db-benchmark:latest run.py --describe datasets # Basic Redis benchmark with local Redis docker run --rm -v $(pwd)/results:/app/results --network=host \ - filipe958/vector-db-benchmark:latest \ + redis/vector-db-benchmark:latest \ run.py --host localhost --engines redis-default-simple --datasets glove-25-angular # At the end of the run, you will find the results in the `results` directory. Lets open the summary one, in the precision summary @@ -76,7 +117,7 @@ docker run -d --name redis-test -p 6379:6379 redis:8.2-rc1-bookworm # Run benchmark against Redis docker run --rm -v $(pwd)/results:/app/results --network=host \ - filipe958/vector-db-benchmark:latest \ + redis/vector-db-benchmark:latest \ run.py --host localhost --engines redis-default-simple --dataset random-100 # Or use the convenience script @@ -89,7 +130,7 @@ docker stop redis-test && docker rm redis-test ### Available Docker Images -- **Latest**: `filipe958/vector-db-benchmark:latest` +- **Latest**: `redis/vector-db-benchmark:latest` For detailed Docker setup and publishing information, see [DOCKER_SETUP.md](DOCKER_SETUP.md). @@ -186,7 +227,7 @@ python run.py --engines "*-m-16-*" --dataset "glove-*" # Docker usage (recommended) docker run --rm -v $(pwd)/results:/app/results --network=host \ - filipe958/vector-db-benchmark:latest \ + redis/vector-db-benchmark:latest \ run.py --host localhost --engines redis-default-simple --dataset random-100 # Get help diff --git a/docker-build.sh b/docker-build.sh index fa7aecd5..c5834f16 100755 --- a/docker-build.sh +++ b/docker-build.sh @@ -6,7 +6,7 @@ set -e # Default values -IMAGE_NAME="filipe958/vector-db-benchmark" +IMAGE_NAME="redis/vector-db-benchmark" TAG="latest" PLATFORM="" PUSH=false @@ -35,18 +35,18 @@ usage() { echo "Usage: $0 [OPTIONS]" echo "" echo "Options:" - echo " -n, --name NAME Docker image name (default: redis-performance/vector-db-benchmark)" + echo " -n, --name NAME Docker image name (default: redis/vector-db-benchmark)" echo " -t, --tag TAG Docker image tag (default: latest)" echo " -p, --platform PLATFORM Target platform (e.g., linux/amd64,linux/arm64)" echo " --push Push image to Docker Hub after building" echo " -h, --help Show this help message" echo "" echo "Examples:" - echo " $0 # Build with defaults" - echo " $0 -t v1.0.0 --push # Build and push with custom tag" + echo " $0 # Build with defaults (latest tag)" + echo " $0 -t v1.0.0 --push # Build and push version tag" echo " $0 -p linux/amd64,linux/arm64 --push # Multi-platform build and push" echo "" - echo "Docker Hub Repository: redis-performance/vector-db-benchmark" + echo "Docker Hub Repository: redis/vector-db-benchmark" } # Parse command line arguments @@ -80,13 +80,8 @@ while [[ $# -gt 0 ]]; do esac done -# Get Git information -print_info "Gathering Git information..." -GIT_SHA=$(git rev-parse HEAD 2>/dev/null || echo "unknown") -GIT_DIRTY=$(git diff --no-ext-diff 2>/dev/null | wc -l || echo "0") - -print_info "Git SHA: $GIT_SHA" -print_info "Git Dirty: $GIT_DIRTY" +# Prepare for build +print_info "Preparing Docker build..." # Build Docker image FULL_IMAGE_NAME="${IMAGE_NAME}:${TAG}" @@ -119,8 +114,8 @@ else BUILD_CMD="docker build" fi -# Add build arguments and tags -BUILD_CMD="$BUILD_CMD --build-arg GIT_SHA=$GIT_SHA --build-arg GIT_DIRTY=$GIT_DIRTY -t $FULL_IMAGE_NAME ." +# Add tags +BUILD_CMD="$BUILD_CMD -t $FULL_IMAGE_NAME ." print_info "Executing: $BUILD_CMD" @@ -173,7 +168,7 @@ if eval $BUILD_CMD; then echo " docker run --rm --network=host $FULL_IMAGE_NAME run.py --host localhost --engines redis" echo "" if [[ "$PUSH" == "true" ]]; then - print_info "Image available on Docker Hub: https://hub.docker.com/r/redis-performance/vector-db-benchmark" + print_info "Image available on Docker Hub: https://hub.docker.com/r/redis/vector-db-benchmark" fi else print_error "❌ Docker build failed" diff --git a/docker-run.sh b/docker-run.sh index 1d2b08b3..920fb8a7 100755 --- a/docker-run.sh +++ b/docker-run.sh @@ -6,7 +6,7 @@ set -e # Default values -IMAGE_NAME="filipe958/vector-db-benchmark:latest" +IMAGE_NAME="redis/vector-db-benchmark:latest" REDIS_HOST="localhost" REDIS_PORT="6379" ENGINES="redis" @@ -44,7 +44,7 @@ usage() { echo "Usage: $0 [OPTIONS] [-- EXTRA_ARGS]" echo "" echo "Options:" - echo " -i, --image IMAGE Docker image name (default: redis-performance/vector-db-benchmark:latest)" + echo " -i, --image IMAGE Docker image name (default: redis/vector-db-benchmark:latest)" echo " -H, --host HOST Redis host (default: localhost)" echo " -p, --port PORT Redis port (default: 6379)" echo " -e, --engines ENGINES Engines to test (default: redis)" @@ -67,7 +67,7 @@ usage() { print_example "$0 -H localhost -e redis -d random-100" echo "" print_example "# With results output (mount current directory):" - print_example "docker run --rm -v \$(pwd)/results:/app/results --network host filipe958/vector-db-benchmark:latest run.py --host localhost --engines redis" + print_example "docker run --rm -v \$(pwd)/results:/app/results --network host redis/vector-db-benchmark:latest run.py --host localhost --engines redis" } # Parse command line arguments diff --git a/engine/base_client/client.py b/engine/base_client/client.py index 2222be50..761f148e 100644 --- a/engine/base_client/client.py +++ b/engine/base_client/client.py @@ -311,6 +311,9 @@ def run_experiment( print(f"Added precision analysis with {len(precision_analysis)} precision thresholds") print(f"Added precision summary with {len(precision_summary)} precision levels") + # Display results table and chart + self._display_results_summary(precision_summary, dataset.config.name) + summary_file = f"{self.name}-{dataset.config.name}-summary.json" summary_path = RESULTS_DIR / summary_file with open(summary_path, "w") as out: @@ -323,6 +326,116 @@ def run_experiment( print("Results saved to: ", RESULTS_DIR) print("Summary saved to: ", summary_path) + def _display_results_summary(self, precision_summary: Dict[str, Dict[str, float]], dataset_name: str = ""): + """Display results table and ASCII chart after benchmark completion.""" + if not precision_summary: + return + + print("\n" + "="*80) + print("BENCHMARK RESULTS SUMMARY") + if dataset_name: + print(f"Experiment: {self.name} - {dataset_name}") + print("="*80) + + # Results table + print("\nPrecision vs Performance Trade-off:") + print("-" * 50) + print(f"{'Precision':<10} {'QPS':<8} {'P50 (ms)':<10} {'P95 (ms)':<10}") + print("-" * 50) + + # Sort by precision (descending for better readability) + sorted_data = sorted(precision_summary.items(), key=lambda x: float(x[0]), reverse=True) + + for precision, metrics in sorted_data: + qps = metrics.get('qps', 0) + p50 = metrics.get('p50', 0) + p95 = metrics.get('p95', 0) + print(f"{precision:<10} {qps:<8.1f} {p50:<10.3f} {p95:<10.3f}") + + # ASCII scatter plot + print(f"\n{self._create_ascii_scatter_plot(precision_summary, dataset_name)}") + print("="*80 + "\n") + + def _create_ascii_scatter_plot(self, precision_summary: Dict[str, Dict[str, float]], dataset_name: str = "") -> str: + """Create simple ASCII scatter plot with precision on X-axis and QPS on Y-axis.""" + if not precision_summary: + return "No data available for chart." + + # Sort by precision + sorted_data = sorted(precision_summary.items(), key=lambda x: float(x[0])) + + # Extract data + precisions = [float(data[0]) for data in sorted_data] + qps_values = [data[1].get('qps', 0) for data in sorted_data] + + if not precisions or not qps_values: + return "No valid data for chart." + + # Chart dimensions + width = 60 + height = 12 + + # Calculate scales + min_precision = min(precisions) + max_precision = max(precisions) + min_qps = 0 # Always start from 0 for proper perspective + max_qps = max(qps_values) + + precision_range = max_precision - min_precision + qps_range = max_qps - min_qps + + if precision_range == 0: + precision_range = 0.1 + if qps_range == 0: + qps_range = 100 + + # Create grid + grid = [[' ' for _ in range(width)] for _ in range(height)] + + # Plot points + for precision, qps in zip(precisions, qps_values): + # Convert to grid coordinates + x = int((precision - min_precision) / precision_range * (width - 1)) + y = int((max_qps - qps) / qps_range * (height - 1)) # Flip Y axis + + # Ensure within bounds + x = max(0, min(width - 1, x)) + y = max(0, min(height - 1, y)) + + grid[y][x] = '●' + + # Build chart + experiment_info = f" - {self.name}" + if dataset_name: + experiment_info += f" - {dataset_name}" + chart = f"QPS vs Precision Trade-off{experiment_info} (up and to the right is better):\n\n" + + # Y-axis labels and grid + for i, row in enumerate(grid): + if i % 3 == 0: # Show Y labels every 3 rows + qps_val = max_qps - (i / (height - 1)) * qps_range + chart += f"{qps_val:>6.0f} │" + else: + chart += " │" + + chart += "".join(row) + "\n" + + # Add 0 line at the bottom + chart += f" 0 │" + " " * width + "\n" + + # X-axis + chart += " └" + "─" * width + "\n" + chart += " " + + # X-axis labels + for i in range(0, width, 15): # Show X labels every 15 chars + precision_val = min_precision + (i / (width - 1)) * precision_range + chart += f"{precision_val:.3f}".ljust(15) + + chart += "\n Precision (0.0 = 0%, 1.0 = 100%)" + + return chart + def delete_client(self): self.uploader.delete_client() self.configurator.delete_client() From a9a748835e7ff89d5c1656ea42ef36db4f84cb64 Mon Sep 17 00:00:00 2001 From: Paulo Sousa Date: Fri, 25 Jul 2025 09:43:43 +0100 Subject: [PATCH 209/209] perf: fix multiprocessing timing measurement (#37) - Move vector-to-bytes conversion outside timing measurements - Track actual worker start times for accurate parallel timing - Refactor worker function for compatibility with newer Python versions --- engine/base_client/search.py | 58 +++++++++++++++-------------- engine/clients/vectorsets/search.py | 3 +- 2 files changed, 31 insertions(+), 30 deletions(-) diff --git a/engine/base_client/search.py b/engine/base_client/search.py index c50b3391..f63047b1 100644 --- a/engine/base_client/search.py +++ b/engine/base_client/search.py @@ -75,8 +75,12 @@ def search_all( search_one = functools.partial(self.__class__._search_one, top=top) # Convert queries to a list for potential reuse - queries_list = list(queries) - + # Also, converts query vectors to bytes beforehand, preparing them for sending to client without affecting search time measurements + queries_list = [] + for query in queries: + query.vector = np.array(query.vector).astype(np.float32).tobytes() + queries_list.append(query) + # Handle MAX_QUERIES environment variable if MAX_QUERIES > 0: queries_list = queries_list[:MAX_QUERIES] @@ -114,12 +118,12 @@ def cycling_query_generator(queries, total_count): total_query_count = len(used_queries) if parallel == 1: - # Single-threaded execution - start = time.perf_counter() - # Create a progress bar with the correct total pbar = tqdm.tqdm(total=total_query_count, desc="Processing queries", unit="queries") + # Single-threaded execution + start = time.perf_counter() + # Process queries with progress updates results = [] for query in used_queries: @@ -148,42 +152,32 @@ def cycling_query_generator(queries, total_count): # For lists, we can use the chunked_iterable function query_chunks = list(chunked_iterable(used_queries, chunk_size)) - # Function to be executed by each worker process - def worker_function(chunk, result_queue): - self.__class__.init_client( - self.host, - distance, - self.connection_params, - self.search_params, - ) - self.setup_search() - results = process_chunk(chunk, search_one) - result_queue.put(results) - # Create a queue to collect results result_queue = Queue() # Create worker processes processes = [] for chunk in query_chunks: - process = Process(target=worker_function, args=(chunk, result_queue)) + process = Process(target=worker_function, args=(self, distance, search_one, chunk, result_queue)) processes.append(process) - # Start measuring time for the critical work - start = time.perf_counter() - # Start worker processes for process in processes: process.start() # Collect results from all worker processes results = [] + min_start_time = time.perf_counter() for _ in processes: - chunk_results = result_queue.get() + proc_start_time, chunk_results = result_queue.get() results.extend(chunk_results) + + # Update min_start_time if necessary + if proc_start_time < min_start_time: + min_start_time = proc_start_time # Stop measuring time for the critical work - total_time = time.perf_counter() - start + total_time = time.perf_counter() - min_start_time # Wait for all worker processes to finish for process in processes: @@ -226,13 +220,21 @@ def chunked_iterable(iterable, size): while chunk := list(islice(it, size)): yield chunk +# Function to be executed by each worker process +def worker_function(self, distance, search_one, chunk, result_queue): + self.init_client( + self.host, + distance, + self.connection_params, + self.search_params, + ) + self.setup_search() + + start_time = time.perf_counter() + results = process_chunk(chunk, search_one) + result_queue.put((start_time, results)) def process_chunk(chunk, search_one): """Process a chunk of queries using the search_one function.""" # No progress bar in worker processes to avoid cluttering the output return [search_one(query) for query in chunk] - - -def process_chunk_wrapper(chunk, search_one): - """Wrapper to process a chunk of queries.""" - return process_chunk(chunk, search_one) diff --git a/engine/clients/vectorsets/search.py b/engine/clients/vectorsets/search.py index 836a128d..6f45e1fc 100644 --- a/engine/clients/vectorsets/search.py +++ b/engine/clients/vectorsets/search.py @@ -1,7 +1,6 @@ import random from typing import List, Tuple -import numpy as np from redis import Redis, RedisCluster @@ -42,7 +41,7 @@ def init_client(cls, host, distance, connection_params: dict, search_params: dic @classmethod def search_one(cls, vector, meta_conditions, top) -> List[Tuple[int, float]]: ef = cls.search_params["search_params"]["ef"] - response = cls.client.execute_command("VSIM", "idx", "FP32", np.array(vector).astype(np.float32).tobytes(), "WITHSCORES", "COUNT", top, "EF", ef) + response = cls.client.execute_command("VSIM", "idx", "FP32", vector, "WITHSCORES", "COUNT", top, "EF", ef) # decode responses # every even cell is id, every odd is the score # scores needs to be 1 - scores since on vector sets 1 is identical, 0 is opposite vector