1+ import uuid
2+
13from qdrant_client import QdrantClient
24from qdrant_client .http import models as qdrant_models
35from qdrant_client .models import Distance
46
57from ..schema import EmbeddedDocument
68from .base import BaseStorageDocument , BaseStorageQuerySet , StorageProvider
79
10+ # Key used for storing original content in metadata
11+ CONTENT_METADATA_KEY = "dj_ai_core_content"
12+
813
914class QdrantQuerySet (BaseStorageQuerySet ["QdrantProvider" ]):
1015 def get_instance (self , val ) -> BaseStorageDocument :
1116 if self .model :
12- metadata = val ["metadata" ]
17+ metadata = val .payload
18+ content = metadata .pop (CONTENT_METADATA_KEY )
1319 return self .model (
14- document_key = val [ "key " ],
15- content = "" ,
20+ document_key = metadata [ "document_key " ],
21+ content = content ,
1622 metadata = metadata ,
23+ score = val .score ,
1724 )
1825 else :
19- return val
26+ return val . payload
2027
2128 def run_query (self ):
2229 if not self .storage_provider :
@@ -51,7 +58,7 @@ def run_query(self):
5158 query_filter = qdrant_models .Filter (must = filters ),
5259 )
5360
54- for vector in response [ "vectors" ] :
61+ for vector in response :
5562 yield self .get_instance (vector )
5663
5764
@@ -89,7 +96,13 @@ def add(self, documents: list["EmbeddedDocument"]):
8996 for doc in documents :
9097 points .append (
9198 qdrant_models .PointStruct (
92- id = doc .document_key , vector = doc .vector , payload = doc .metadata
99+ id = str (uuid .uuid4 ()),
100+ vector = doc .vector ,
101+ payload = {
102+ ** doc .metadata ,
103+ CONTENT_METADATA_KEY : doc .content ,
104+ "document_key" : doc .document_key ,
105+ },
93106 )
94107 )
95108
@@ -99,7 +112,16 @@ def delete(self, document_keys: list[str]):
99112 """Delete documents by their keys."""
100113 self .client .delete (
101114 collection_name = self .index_name ,
102- points_selector = qdrant_models .PointIdsList (points = document_keys ),
115+ points_selector = qdrant_models .FilterSelector (
116+ filter = qdrant_models .Filter (
117+ must = [
118+ qdrant_models .FieldCondition (
119+ key = "document_key" ,
120+ match = qdrant_models .MatchAny (any = document_keys ),
121+ )
122+ ]
123+ )
124+ ),
103125 )
104126
105127 def clear (self ):
0 commit comments