@@ -43,13 +43,11 @@ Flow: Search + Concurrent Inserts (reuses existing data)
4343
4444** File 1: ` engine/base_client/search.py ` **
4545``` python
46- def process_chunk (chunk , search_one , insert_one , insert_fraction = 0.1 , test_set = None ):
46+ def process_chunk (chunk , search_one , insert_one , insert_fraction = 0.1 ):
4747 results = []
4848 for i, query in enumerate (chunk):
4949 if random.random() < insert_fraction:
50- # Insert: use a vector from test_set
51- vector_id, vector, metadata = test_set[i % len (test_set)]
52- result = insert_one(vector_id, vector, metadata)
50+ result = insert_one(query)
5351 else :
5452 # Search
5553 result = search_one(query)
@@ -59,35 +57,36 @@ def process_chunk(chunk, search_one, insert_one, insert_fraction=0.1, test_set=N
5957
6058** File 2: ` worker_function ` **
6159``` python
62- def worker_function (self , distance , search_one , insert_one , chunk , result_queue , insert_fraction = 0.1 , test_set = None ):
60+ def worker_function (self , distance , search_one , insert_one , chunk , result_queue , insert_fraction = 0.1 ):
6361 self .init_client(self .host, distance, self .connection_params, self .search_params)
6462 self .setup_search()
6563 start_time = time.perf_counter()
66- results = process_chunk(chunk, search_one, insert_one, insert_fraction, test_set )
64+ results = process_chunk(chunk, search_one, insert_one, insert_fraction)
6765 result_queue.put((start_time, results))
6866```
6967
7068** File 3: ` BaseSearcher.search_all() ` **
71- - When creating worker processes, pass ` search_one ` , ` insert_one ` , ` insert_fraction ` , and ` test_set ` as arguments to each worker.
69+ - When creating worker processes, pass ` search_one ` , ` insert_one ` , and ` insert_fraction ` as arguments to each worker.
7270
7371** File 4: Engine-specific ` insert_one ` implementations** (~ 5 lines each)
7472``` python
7573# Example: engine/clients/redis/search.py
7674@ classmethod
77- def insert_one (cls , vector_id : int , vector : List[float ], metadata : Optional[dict ] = None ):
78- """ Redis-specific single vector insert"""
75+ def insert_one (cls , query ):
76+ """ Redis-specific single vector insert from a Query object"""
77+ # Extract vector_id, vector, metadata from query as needed
7978 cls .client.hset(
80- str (vector_id ),
81- mapping = {" vector" : np.array( vector).astype(np.float32).tobytes() , ** (metadata or {})}
79+ str (query.id ),
80+ mapping = {" vector" : query. vector, ** (getattr (query, ' metadata' , {}) or {})}
8281 )
8382
8483# Example: engine/clients/qdrant/search.py
8584@ classmethod
86- def insert_one (cls , vector_id : int , vector : List[ float ], metadata : Optional[ dict ] = None ):
87- """ Qdrant-specific single vector insert"""
85+ def insert_one (cls , query ):
86+ """ Qdrant-specific single vector insert from a Query object """
8887 cls .client.upsert(
8988 collection_name = QDRANT_COLLECTION_NAME ,
90- points = [{" id" : vector_id , " vector" : vector, " payload" : metadata or {}}],
89+ points = [{" id" : query.id , " vector" : query. vector, " payload" : getattr (query, ' metadata' , {}) or {}}],
9190 wait = False ,
9291 )
9392```
0 commit comments