1
1
# type: ignore
2
2
import abc
3
3
import time
4
- import random
4
+ import struct
5
5
6
6
import pytest_asyncio
7
7
8
8
from aredis_om import Field , JsonModel , KNNExpression , Migrator , VectorFieldOptions
9
9
10
10
from .conftest import py_test_mark_asyncio
11
11
12
+ DIMENSIONS = 768
13
+
12
14
13
15
vector_field_options = VectorFieldOptions .flat (
14
16
type = VectorFieldOptions .TYPE .FLOAT32 ,
15
- dimension = 768 ,
17
+ dimension = DIMENSIONS ,
16
18
distance_metric = VectorFieldOptions .DISTANCE_METRIC .COSINE ,
17
19
)
18
20
@@ -26,25 +28,25 @@ class Meta:
26
28
27
29
class Member (BaseJsonModel , index = True ):
28
30
name : str
29
- embeddings : list [list [float ]] = Field ([], vector_options = vector_field_options )
31
+ embeddings : list [list [float ]] | bytes = Field (
32
+ [], vector_options = vector_field_options
33
+ )
30
34
embeddings_score : float | None = None
31
35
32
36
await Migrator ().run ()
33
37
34
38
return Member
35
39
36
40
37
- @pytest_asyncio .fixture
38
- async def embedding_bytes ():
39
- return b"\x00 " * 3072
41
+ def to_bytes (vectors : list [float ]) -> bytes :
42
+ return struct .pack (f"<{ len (vectors )} f" , * vectors )
40
43
41
44
42
45
@py_test_mark_asyncio
43
- async def test_vector_field (m : type [JsonModel ], embedding_bytes ):
46
+ async def test_vector_field (m : type [JsonModel ]):
44
47
# Create a new instance of the Member model
45
- dimensions = m .embeddings .field .vector_options .dimension
46
- embeddings = [random .uniform (- 1 , 1 ) for _ in range (dimensions )]
47
- member = m (name = "seth" , embeddings = [embeddings ])
48
+ vectors = [0.3 for _ in range (DIMENSIONS )]
49
+ member = m (name = "seth" , embeddings = [vectors ])
48
50
49
51
# Save the member to Redis
50
52
mt = await member .save ()
@@ -57,7 +59,7 @@ async def test_vector_field(m: type[JsonModel], embedding_bytes):
57
59
k = 1 ,
58
60
vector_field = m .embeddings ,
59
61
score_field = m .embeddings_score ,
60
- reference_vector = embedding_bytes ,
62
+ reference_vector = to_bytes ( vectors ) ,
61
63
)
62
64
63
65
query = m .find (knn = knn )
0 commit comments