@@ -54,6 +54,33 @@ def query(self, query: str, index: str, top_k: int = 0) -> list:
54
54
logger .error (f"Failed to search from Redis: index={ index } error={ e } " )
55
55
raise e
56
56
57
+ def delete_doc (self , index : str , id : str ) -> bool :
58
+ logger .debug (f"Deleting document from Redis database: index={ index } id={ id } " )
59
+ try :
60
+ # For Redis, we need to handle deletion differently since RedisDatabase.delete_doc
61
+ # takes a key and a single id
62
+ result = self .client .delete_doc (key = index , id = id )
63
+ return result
64
+ except Exception as e :
65
+ logger .error (
66
+ f"Failed to delete document from Redis database: index={ index } id={ id } error={ e } "
67
+ )
68
+ return False
69
+
70
+ def list_docs (self , index : str , offset : int = 0 , limit : int = 100 ) -> list [dict ]:
71
+ logger .debug (f"Listing documents from Redis database: index={ index } " )
72
+ try :
73
+ # Get all documents from Redis
74
+ docs = self .client .list_docs (key = index )
75
+
76
+ # Apply offset and limit for pagination
77
+ return docs [offset : offset + limit ]
78
+ except Exception as e :
79
+ logger .error (
80
+ f"Failed to list documents from Redis database: index={ index } error={ e } "
81
+ )
82
+ return []
83
+
57
84
58
85
class RelationalDatabaseAdapter :
59
86
def __init__ (self , client ):
@@ -108,6 +135,28 @@ def query(self, query: str, index: str, top_k: int) -> list[str]:
108
135
109
136
return [item ["data" ] for item in results ]
110
137
138
+ def delete_doc (self , index : str , id : str ) -> bool :
139
+ logger .debug (f"Deleting document from SQL database: table_name={ index } id={ id } " )
140
+ try :
141
+ # Convert single id to list for the client method
142
+ result = self .client .delete_doc (table = index , ids = [int (id )])
143
+ return result
144
+ except Exception as e :
145
+ logger .error (
146
+ f"Failed to delete document from SQL database: table_name={ index } id={ id } error={ e } "
147
+ )
148
+ return False
149
+
150
+ def list_docs (self , index : str , offset : int = 0 , limit : int = 100 ) -> list [dict ]:
151
+ logger .debug (f"Listing documents from SQL database: table_name={ index } " )
152
+ try :
153
+ return self .client .list_docs (table = index , offset = offset , limit = limit )
154
+ except Exception as e :
155
+ logger .error (
156
+ f"Failed to list documents from SQL database: table_name={ index } error={ e } "
157
+ )
158
+ return []
159
+
111
160
112
161
class VectorDatabaseAdapter :
113
162
def __init__ (self , client ):
@@ -152,6 +201,23 @@ def query(self, query: str, index: str, top_k: int) -> list[str]:
152
201
top_k = top_k ,
153
202
)
154
203
204
+ def delete_doc (self , index : str , id : str ) -> bool :
205
+ self ._validate_index (index )
206
+ logger .debug (f"Deleting documents from vector database: index={ index } id={ id } " )
207
+ try :
208
+ self .client .delete_by_id (collection_name = index , id = id )
209
+ return True
210
+ except Exception as e :
211
+ logger .error (
212
+ f"Failed to delete document from vector database: index={ index } id={ id } error={ e } "
213
+ )
214
+ return False
215
+
216
+ def list_docs (self , index : str , offset : int = 0 , limit : int = 1000 ) -> list [dict ]:
217
+ self ._validate_index (index )
218
+ logger .debug (f"Listing documents from vector database: index={ index } " )
219
+ return self .client .list_docs (collection_name = index , offset = offset , limit = limit )
220
+
155
221
156
222
class VikingDatabaseAdapter :
157
223
def __init__ (self , client ):
@@ -212,6 +278,16 @@ def query(self, query: str, index: str, top_k: int) -> list[str]:
212
278
213
279
return self .client .query (query , collection_name = index , top_k = top_k )
214
280
281
+ def delete_doc (self , index : str , id : str ) -> bool :
282
+ self ._validate_index (index )
283
+ logger .debug (f"Deleting documents from vector database: index={ index } id={ id } " )
284
+ return self .client .delete_by_id (collection_name = index , id = id )
285
+
286
+ def list_docs (self , index : str , offset : int , limit : int ) -> list [dict ]:
287
+ self ._validate_index (index )
288
+ logger .debug (f"Listing documents from vector database: index={ index } " )
289
+ return self .client .list_docs (collection_name = index , offset = offset , limit = limit )
290
+
215
291
216
292
class VikingMemoryDatabaseAdapter :
217
293
def __init__ (self , client ):
@@ -248,6 +324,12 @@ def query(self, query: str, index: str, top_k: int, **kwargs):
248
324
result = self .client .query (query , collection_name = index , top_k = top_k , ** kwargs )
249
325
return result
250
326
327
+ def delete_docs (self , index : str , ids : list [int ]):
328
+ raise NotImplementedError ("VikingMemoryDatabase does not support delete_docs" )
329
+
330
+ def list_docs (self , index : str ):
331
+ raise NotImplementedError ("VikingMemoryDatabase does not support list_docs" )
332
+
251
333
252
334
class LocalDatabaseAdapter :
253
335
def __init__ (self , client ):
@@ -261,6 +343,12 @@ def add(self, data: list[str], **kwargs):
261
343
def query (self , query : str , ** kwargs ):
262
344
return self .client .query (query , ** kwargs )
263
345
346
+ def delete_doc (self , index : str , id : str ) -> bool :
347
+ return self .client .delete_doc (id )
348
+
349
+ def list_docs (self , index : str , offset : int = 0 , limit : int = 100 ) -> list [dict ]:
350
+ return self .client .list_docs (offset = offset , limit = limit )
351
+
264
352
265
353
MAPPING = {
266
354
"RedisDatabase" : KVDatabaseAdapter ,
0 commit comments