@@ -29,7 +29,24 @@ class Meta:
2929
3030 class Member (BaseJsonModel , index = True ):
3131 name : str
32- embeddings : list [list [float ]] = Field ([], vector_options = vector_field_options )
32+ embeddings : list [float ] = Field ([], vector_options = vector_field_options )
33+ embeddings_score : Optional [float ] = None
34+
35+ await Migrator ().run ()
36+
37+ return Member
38+
39+
40+ @pytest_asyncio .fixture
41+ async def n (key_prefix , redis ):
42+ class BaseJsonModel (JsonModel , abc .ABC ):
43+ class Meta :
44+ global_key_prefix = key_prefix
45+ database = redis
46+
47+ class Member (BaseJsonModel , index = True ):
48+ name : str
49+ nested : list [list [float ]] = Field ([], vector_options = vector_field_options )
3350 embeddings_score : Optional [float ] = None
3451
3552 await Migrator ().run ()
@@ -45,7 +62,7 @@ def to_bytes(vectors: list[float]) -> bytes:
4562async def test_vector_field (m : Type [JsonModel ]):
4663 # Create a new instance of the Member model
4764 vectors = [0.3 for _ in range (DIMENSIONS )]
48- member = m (name = "seth" , embeddings = [ vectors ] )
65+ member = m (name = "seth" , embeddings = vectors )
4966
5067 # Save the member to Redis
5168 await member .save ()
@@ -63,3 +80,27 @@ async def test_vector_field(m: Type[JsonModel]):
6380
6481 assert len (members ) == 1
6582 assert members [0 ].embeddings_score is not None
83+
84+
85+ @py_test_mark_asyncio
86+ async def test_nested_vector_field (n : Type [JsonModel ]):
87+ # Create a new instance of the Member model
88+ vectors = [0.3 for _ in range (DIMENSIONS )]
89+ member = n (name = "seth" , nested = [vectors ])
90+
91+ # Save the member to Redis
92+ await member .save ()
93+
94+ knn = KNNExpression (
95+ k = 1 ,
96+ vector_field = n .nested ,
97+ score_field = n .embeddings_score ,
98+ reference_vector = to_bytes (vectors ),
99+ )
100+
101+ query = n .find (knn = knn )
102+
103+ members = await query .all ()
104+
105+ assert len (members ) == 1
106+ assert members [0 ].embeddings_score is not None
0 commit comments