6
6
from redis .commands .search .field import TagField , VectorField , NumericField
7
7
from redis .client import Redis
8
8
9
- from gptcache .manager .vector_data .base import VectorBase , VectorData
10
- from gptcache .utils import import_redis
11
- from gptcache .utils .log import gptcache_log
12
- from gptcache .utils .collection_util import get_collection_name
13
- from gptcache .utils .collection_util import get_collection_prefix
9
+ from modelcache .manager .vector_data .base import VectorBase , VectorData
10
+ from modelcache .utils import import_redis
11
+ from modelcache .utils .log import modelcache_log
12
+ from modelcache .utils .index_util import get_index_name
13
+ from modelcache .utils .index_util import get_index_prefix
14
14
import_redis ()
15
15
16
16
@@ -21,9 +21,7 @@ def __init__(
21
21
port : str = "6379" ,
22
22
username : str = "" ,
23
23
password : str = "" ,
24
- table_suffix : str = "" ,
25
24
dimension : int = 0 ,
26
- collection_prefix : str = "gptcache" ,
27
25
top_k : int = 1 ,
28
26
namespace : str = "" ,
29
27
):
@@ -36,33 +34,28 @@ def __init__(
36
34
)
37
35
self .top_k = top_k
38
36
self .dimension = dimension
39
- self .collection_prefix = collection_prefix
40
- self .table_suffix = table_suffix
41
37
self .namespace = namespace
42
- self .doc_prefix = f"{ self .namespace } doc:" # Prefix with the specified namespace
43
- # self._create_collection(collection_name)
38
+ self .doc_prefix = f"{ self .namespace } doc:"
44
39
45
40
def _check_index_exists (self , index_name : str ) -> bool :
46
41
"""Check if Redis index exists."""
47
42
try :
48
43
self ._client .ft (index_name ).info ()
49
- except : # pylint: disable=W0702
50
- gptcache_log .info ("Index does not exist" )
44
+ except :
45
+ modelcache_log .info ("Index does not exist" )
51
46
return False
52
- gptcache_log .info ("Index already exists" )
47
+ modelcache_log .info ("Index already exists" )
53
48
return True
54
49
55
- def create_collection (self , collection_name , index_prefix ):
50
+ def create_index (self , index_name , index_prefix ):
56
51
dimension = self .dimension
57
52
print ('dimension: {}' .format (dimension ))
58
- if self ._check_index_exists (collection_name ):
59
- gptcache_log .info (
60
- "The %s already exists, and it will be used directly" , collection_name
53
+ if self ._check_index_exists (index_name ):
54
+ modelcache_log .info (
55
+ "The %s already exists, and it will be used directly" , index_name
61
56
)
62
57
return 'already_exists'
63
58
else :
64
- # id_field_name = collection_name + '_' + "id"
65
- # embedding_field_name = collection_name + '_' + "vec"
66
59
id_field_name = "data_id"
67
60
embedding_field_name = "data_vector"
68
61
@@ -76,11 +69,10 @@ def create_collection(self, collection_name, index_prefix):
76
69
}
77
70
)
78
71
fields = [id , embedding ]
79
- # definition = IndexDefinition(index_type=IndexType.HASH)
80
72
definition = IndexDefinition (prefix = [index_prefix ], index_type = IndexType .HASH )
81
73
82
74
# create Index
83
- self ._client .ft (collection_name ).create_index (
75
+ self ._client .ft (index_name ).create_index (
84
76
fields = fields , definition = definition
85
77
)
86
78
return 'create_success'
@@ -90,23 +82,14 @@ def mul_add(self, datas: List[VectorData], model=None):
90
82
for data in datas :
91
83
id : int = data .id
92
84
embedding = data .data .astype (np .float32 ).tobytes ()
93
- # id_field_name = collection_name + '_' + "id"
94
- # embedding_field_name = collection_name + '_' + "vec"
95
85
id_field_name = "data_id"
96
86
embedding_field_name = "data_vector"
97
87
obj = {id_field_name : id , embedding_field_name : embedding }
98
- index_prefix = get_collection_prefix (model , self . table_suffix )
88
+ index_prefix = get_index_prefix (model )
99
89
self ._client .hset (f"{ index_prefix } { id } " , mapping = obj )
100
90
101
- # obj = {
102
- # "vector": data.data.astype(np.float32).tobytes(),
103
- # }
104
- # pipe.hset(f"{self.doc_prefix}{key}", mapping=obj)
105
- # pipe.execute()
106
-
107
91
def search (self , data : np .ndarray , top_k : int = - 1 , model = None ):
108
- collection_name = get_collection_name (model , self .table_suffix )
109
- print ('collection_name: {}' .format (collection_name ))
92
+ index_name = get_index_name (model )
110
93
id_field_name = "data_id"
111
94
embedding_field_name = "data_vector"
112
95
@@ -119,63 +102,40 @@ def search(self, data: np.ndarray, top_k: int = -1, model=None):
119
102
)
120
103
121
104
query_params = {"vector" : data .astype (np .float32 ).tobytes ()}
122
- # print('query_params: {}'.format(query_params))
123
105
results = (
124
- self ._client .ft (collection_name )
106
+ self ._client .ft (index_name )
125
107
.search (query , query_params = query_params )
126
108
.docs
127
109
)
128
- print ('results: {}' .format (results ))
129
- for i , doc in enumerate (results ):
130
- print ('doc: {}' .format (doc ))
131
- print ("id_field_name" , getattr (doc , id_field_name ), ", distance: " , doc .distance )
132
110
return [(float (result .distance ), int (getattr (result , id_field_name ))) for result in results ]
133
111
134
112
def rebuild (self , ids = None ) -> bool :
135
113
pass
136
114
137
115
def rebuild_col (self , model ):
138
- resp_info = 'failed'
139
- if len (self .table_suffix ) == 0 :
140
- raise ValueError ('table_suffix is none error,please check!' )
141
-
142
- collection_name_model = get_collection_name (model , self .table_suffix )
143
- print ('collection_name_model: {}' .format (collection_name_model ))
144
- if self ._check_index_exists (collection_name_model ):
116
+ index_name_model = get_index_name (model )
117
+ if self ._check_index_exists (index_name_model ):
145
118
try :
146
- self ._client .ft (collection_name_model ).dropindex (delete_documents = True )
119
+ self ._client .ft (index_name_model ).dropindex (delete_documents = True )
147
120
except Exception as e :
148
121
raise ValueError (str (e ))
149
122
try :
150
- index_prefix = get_collection_prefix (model , self . table_suffix )
151
- self .create_collection ( collection_name_model , index_prefix )
123
+ index_prefix = get_index_prefix (model )
124
+ self .create_index ( index_name_model , index_prefix )
152
125
except Exception as e :
153
126
raise ValueError (str (e ))
154
127
return 'rebuild success'
155
128
156
- # print('remove collection_name_model: {}'.format(collection_name_model))
157
- # try:
158
- # self._client.ft(collection_name_model).dropindex(delete_documents=True)
159
- # resp_info = 'rebuild success'
160
- # except Exception as e:
161
- # print('exception: {}'.format(e))
162
- # resp_info = 'create only'
163
- # try:
164
- # self.create_collection(collection_name_model)
165
- # except Exception as e:
166
- # raise ValueError(str(e))
167
- # return resp_info
168
-
169
129
def delete (self , ids ) -> None :
170
130
pipe = self ._client .pipeline ()
171
131
for data_id in ids :
172
132
pipe .delete (f"{ self .doc_prefix } { data_id } " )
173
133
pipe .execute ()
174
134
175
135
def create (self , model = None ):
176
- collection_name = get_collection_name (model , self . table_suffix )
177
- index_prefix = get_collection_prefix (model , self . table_suffix )
178
- return self .create_collection ( collection_name , index_prefix )
136
+ index_name = get_index_name (model )
137
+ index_prefix = get_index_prefix (model )
138
+ return self .create_index ( index_name , index_prefix )
179
139
180
- def get_collection_by_name (self , collection_name , table_suffix ):
140
+ def get_index_by_name (self , index_name ):
181
141
pass
0 commit comments