@@ -399,21 +399,34 @@ def collection_list(self):
399399 return self .client .list_collections ()
400400
401401 @auto_recover
402- def select_collection (self , collection_name : str ):
402+ def select_collection (self , collection_name : str , metadata : dict = None ):
403403 """
404404 Selects (or creates if not existent) a collection within the storage by name.
405405
406406 Parameters:
407407 collection_name (str): The name of the collection to select or create.
408+ metadata (dict, optional): Metadata to apply to the collection. Defaults to {"hnsw:space": "cosine"}.
408409
409410 Raises:
410411 ValueError: If there's an error in getting or creating the collection.
411412 """
412413 try :
413414 collection_name = validate_collection_name (collection_name )
414- self .collection = self .client .get_or_create_collection (name = collection_name ,
415- embedding_function = self .embedding ,
416- metadata = {"hnsw:space" : "cosine" })
415+ # 1.5.8 Fix: allow metadata override, default to cosine space
416+ collection_metadata = metadata if metadata is not None else {"hnsw:space" : "cosine" }
417+
418+ self .collection = self .client .get_or_create_collection (
419+ name = collection_name ,
420+ embedding_function = self .embedding ,
421+ metadata = collection_metadata
422+ )
423+
424+ # 1.5.8 Fix: get_or_create_collection no longer overwrites metadata for existing collections.
425+ # Explicitly modify it to guarantee enforcement if it already existed.
426+ try :
427+ self .collection .modify (metadata = collection_metadata )
428+ except Exception :
429+ pass # Silently ignore if collection doesn't permit metadata change
417430 except Exception as e :
418431 raise ValueError (f"\n \n Error getting or creating collection. Error: { e } " )
419432
@@ -463,6 +476,13 @@ def peek(self, collection_name: str):
463476
464477 if num_results > 0 :
465478 result = self .collection .peek ()
479+
480+ # 1.5.8 Fix: Convert numpy array embeddings back into standard Python lists
481+ if result and result .get ('embeddings' ) is not None :
482+ result ['embeddings' ] = [
483+ e .tolist () if hasattr (e , 'tolist' ) else e
484+ for e in result ['embeddings' ]
485+ ]
466486 else :
467487 result = {'documents' : "No Results!" }
468488
@@ -500,6 +520,14 @@ def load_collection(self, collection_name: str, include: list = None, where: dic
500520 try :
501521 self .select_collection (collection_name )
502522 data = self .collection .get (** params )
523+
524+ # 1.5.8 Fix: Convert numpy array embeddings back into standard Python lists
525+ if data and data .get ('embeddings' ) is not None :
526+ data ['embeddings' ] = [
527+ e .tolist () if hasattr (e , 'tolist' ) else e
528+ for e in data ['embeddings' ]
529+ ]
530+
503531 logger .debug (
504532 f"\n Collection: { collection_name } "
505533 f"\n Data: { data } " ,
@@ -609,7 +637,14 @@ def query_storage(self, collection_name: str, query: Optional[Union[str, list]]
609637 if unformatted_result :
610638 for key , value in unformatted_result .items ():
611639 if value :
612- result [key ] = value [0 ]
640+ # 1.5.8 Fix: Convert nested numpy arrays inside value[0] back into standard Python lists
641+ if key == 'embeddings' and value [0 ] is not None :
642+ result [key ] = [
643+ e .tolist () if hasattr (e , 'tolist' ) else e
644+ for e in value [0 ]
645+ ]
646+ else :
647+ result [key ] = value [0 ]
613648
614649 return result
615650
0 commit comments