forked from MemTensor/MemOS
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathqdrant_vec_db.py
More file actions
143 lines (120 loc) · 4 KB
/
qdrant_vec_db.py
File metadata and controls
143 lines (120 loc) · 4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
import uuid
from memos import settings
from memos.configs.vec_db import VectorDBConfigFactory
from memos.vec_dbs.factory import VecDBFactory
config = VectorDBConfigFactory.model_validate(
{
"backend": "qdrant",
"config": {
"collection_name": "test_collection",
"vector_dimension": 4,
"distance_metric": "cosine",
"path": str(settings.MEMOS_DIR / "qdrant"),
},
}
)
vec_db = VecDBFactory.from_config(config)
# ============== BATCH OPERATIONS ==============
print("\n" + "=" * 50)
print("BATCH DOCUMENT ADDITION")
# Add batch data
batch_data = [
{
"id": str(uuid.uuid4()),
"vector": [0.5, 0.6, 0.7, 0.8],
"payload": {"text": "Document A", "category": "type1"},
},
{
"id": str(uuid.uuid4()),
"vector": [0.4, 0.5, 0.6, 0.7],
"payload": {"text": "Document B", "category": "type2"},
},
{
"id": str(uuid.uuid4()),
"vector": [0.3, 0.4, 0.5, 0.6],
"payload": {"text": "Document C", "category": "type1"},
},
]
vec_db.add(batch_data)
print(f"✓ Added {len(batch_data)} documents")
# ============== SEARCH OPERATIONS ==============
print("\n" + "=" * 50)
print("VECTOR SEARCH")
# Search for similar items
query_vector = [5.0, 6.0, 7.0, 8.0]
results = vec_db.search(query_vector, top_k=2)
print(f"Query vector: {query_vector}")
print("\nResults:")
for i, result in enumerate(results, 1):
print(f" {i}. ID: {result.id}")
print(f" Score: {result.score}")
print(f" Payload: {result.payload}")
# ============== COUNT OPERATIONS ==============
print("\n" + "=" * 50)
print("DOCUMENT COUNT")
# Count documents in collection
count = vec_db.count()
print(f"Total documents in collection: {count}")
# Count documents with filter
filtered_count = vec_db.count(filter={"category": "type1"})
print(f"Documents with category 'type1': {filtered_count}")
# ============== SINGLE DOCUMENT OPERATIONS ==============
print("\n" + "=" * 50)
print("DOCUMENT OPERATIONS")
# Add a document
doc_id = str(uuid.uuid4())
vec_db.add(
[
{
"id": doc_id,
"vector": [0.1, 0.2, 0.3, 0.4],
"payload": {"text": "Original document", "status": "new"},
}
]
)
print(f"✓ Added document with ID: {doc_id}")
# Update document payload
vec_db.update(doc_id, {"payload": {"text": "Updated document", "status": "updated"}})
print(f"✓ Updated document payload for ID: {doc_id}")
# Retrieve updated document
result = vec_db.get_by_id(doc_id)
print("\nRetrieved updated document:")
print(f" ID: {doc_id}")
print(f" Payload: {result.payload if result else 'Not found'}")
# Delete the document
vec_db.delete([doc_id])
print(f"\n✓ Deleted document with ID: {doc_id}")
# Verify deletion
result = vec_db.get_by_id(doc_id)
print("\nDocument after deletion:")
print(f" Result: {'Not found' if result is None else result}")
# ============== COLLECTION OPERATIONS ==============
print("\n" + "=" * 50)
print("COLLECTION OPERATIONS")
# List all collections in the database
collections = vec_db.list_collections()
print(f"Available collections: {collections}")
# ============== FILTER OPERATIONS ==============
print("\n" + "=" * 50)
print("FILTER OPERATIONS")
# Get documents by filter criteria
filter_results = vec_db.get_by_filter({"category": "type1"})
print("Documents filtered by category 'type1':")
for i, item in enumerate(filter_results, 1):
print(f" {i}. ID: {item.id}")
print(f" Payload: {item.payload}")
# Get all documents in the collection
all_docs = vec_db.get_all()
print("\nAll documents in the collection:")
for i, item in enumerate(all_docs, 1):
print(f" {i}. ID: {item.id}")
print(f" Vector: {item.vector}")
print(f" Payload: {item.payload}")
# ============== CLEANUP ==============
print("\n" + "=" * 50)
print("CLEANUP")
# Delete the collection
vec_db.delete_collection("test_collection")
print("✓ Collection deleted")
print(f"Available collections after deletion: {vec_db.list_collections()}")
print("\n" + "=" * 50)