@functional-systems/lambdadb 0.4.2 → 0.5.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (223) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/FUNCTIONS.md +7 -2
  3. package/README.md +60 -2
  4. package/RUNTIMES.md +7 -0
  5. package/USAGE.md +20 -0
  6. package/dist/commonjs/client.d.ts +25 -10
  7. package/dist/commonjs/client.d.ts.map +1 -1
  8. package/dist/commonjs/client.js +233 -59
  9. package/dist/commonjs/client.js.map +1 -1
  10. package/dist/commonjs/compat/qdrant/client.d.ts +6 -10
  11. package/dist/commonjs/compat/qdrant/client.d.ts.map +1 -1
  12. package/dist/commonjs/compat/qdrant/client.js +33 -15
  13. package/dist/commonjs/compat/qdrant/client.js.map +1 -1
  14. package/dist/commonjs/compat/qdrant/filters.js +5 -1
  15. package/dist/commonjs/compat/qdrant/filters.js.map +1 -1
  16. package/dist/commonjs/funcs/collectionsCreate.js +1 -1
  17. package/dist/commonjs/funcs/collectionsDelete.js +1 -1
  18. package/dist/commonjs/funcs/collectionsDocsGetBulkUpsert.js +4 -0
  19. package/dist/commonjs/funcs/collectionsDocsGetBulkUpsert.js.map +1 -1
  20. package/dist/commonjs/funcs/collectionsDocsListDocs.js +3 -0
  21. package/dist/commonjs/funcs/collectionsDocsListDocs.js.map +1 -1
  22. package/dist/commonjs/funcs/collectionsDocsListDocsExtended.d.ts +15 -0
  23. package/dist/commonjs/funcs/collectionsDocsListDocsExtended.d.ts.map +1 -0
  24. package/dist/commonjs/funcs/collectionsDocsListDocsExtended.js +131 -0
  25. package/dist/commonjs/funcs/collectionsDocsListDocsExtended.js.map +1 -0
  26. package/dist/commonjs/index.d.ts +4 -1
  27. package/dist/commonjs/index.d.ts.map +1 -1
  28. package/dist/commonjs/index.js +15 -1
  29. package/dist/commonjs/index.js.map +1 -1
  30. package/dist/commonjs/lib/config.d.ts +2 -2
  31. package/dist/commonjs/lib/config.js +2 -2
  32. package/dist/commonjs/lib/config.js.map +1 -1
  33. package/dist/commonjs/lib/queryInput.d.ts +3 -11
  34. package/dist/commonjs/lib/queryInput.d.ts.map +1 -1
  35. package/dist/commonjs/lib/queryInput.js.map +1 -1
  36. package/dist/commonjs/models/collectionresponse.d.ts +12 -21
  37. package/dist/commonjs/models/collectionresponse.d.ts.map +1 -1
  38. package/dist/commonjs/models/collectionresponse.js +5 -6
  39. package/dist/commonjs/models/collectionresponse.js.map +1 -1
  40. package/dist/commonjs/models/index.d.ts +1 -0
  41. package/dist/commonjs/models/index.d.ts.map +1 -1
  42. package/dist/commonjs/models/index.js +1 -0
  43. package/dist/commonjs/models/index.js.map +1 -1
  44. package/dist/commonjs/models/operations/bulkupsertdocs.d.ts +6 -0
  45. package/dist/commonjs/models/operations/bulkupsertdocs.d.ts.map +1 -1
  46. package/dist/commonjs/models/operations/bulkupsertdocs.js +2 -0
  47. package/dist/commonjs/models/operations/bulkupsertdocs.js.map +1 -1
  48. package/dist/commonjs/models/operations/createcollection.d.ts +20 -13
  49. package/dist/commonjs/models/operations/createcollection.d.ts.map +1 -1
  50. package/dist/commonjs/models/operations/createcollection.js +15 -7
  51. package/dist/commonjs/models/operations/createcollection.js.map +1 -1
  52. package/dist/commonjs/models/operations/deletedocs.d.ts +3 -0
  53. package/dist/commonjs/models/operations/deletedocs.d.ts.map +1 -1
  54. package/dist/commonjs/models/operations/deletedocs.js +1 -0
  55. package/dist/commonjs/models/operations/deletedocs.js.map +1 -1
  56. package/dist/commonjs/models/operations/fetchdocs.d.ts +3 -0
  57. package/dist/commonjs/models/operations/fetchdocs.d.ts.map +1 -1
  58. package/dist/commonjs/models/operations/fetchdocs.js +9 -0
  59. package/dist/commonjs/models/operations/fetchdocs.js.map +1 -1
  60. package/dist/commonjs/models/operations/getbulkupsertdocs.d.ts +5 -0
  61. package/dist/commonjs/models/operations/getbulkupsertdocs.d.ts.map +1 -1
  62. package/dist/commonjs/models/operations/getbulkupsertdocs.js +5 -3
  63. package/dist/commonjs/models/operations/getbulkupsertdocs.js.map +1 -1
  64. package/dist/commonjs/models/operations/listdocs.d.ts +69 -0
  65. package/dist/commonjs/models/operations/listdocs.d.ts.map +1 -1
  66. package/dist/commonjs/models/operations/listdocs.js +41 -1
  67. package/dist/commonjs/models/operations/listdocs.js.map +1 -1
  68. package/dist/commonjs/models/operations/querycollection.d.ts +3 -0
  69. package/dist/commonjs/models/operations/querycollection.d.ts.map +1 -1
  70. package/dist/commonjs/models/operations/querycollection.js +9 -0
  71. package/dist/commonjs/models/operations/querycollection.js.map +1 -1
  72. package/dist/commonjs/models/operations/updatecollection.d.ts +10 -4
  73. package/dist/commonjs/models/operations/updatecollection.d.ts.map +1 -1
  74. package/dist/commonjs/models/operations/updatecollection.js +8 -1
  75. package/dist/commonjs/models/operations/updatecollection.js.map +1 -1
  76. package/dist/commonjs/models/operations/updatedocs.d.ts +3 -0
  77. package/dist/commonjs/models/operations/updatedocs.d.ts.map +1 -1
  78. package/dist/commonjs/models/operations/updatedocs.js +1 -0
  79. package/dist/commonjs/models/operations/updatedocs.js.map +1 -1
  80. package/dist/commonjs/models/operations/upsertdocs.d.ts +3 -0
  81. package/dist/commonjs/models/operations/upsertdocs.d.ts.map +1 -1
  82. package/dist/commonjs/models/operations/upsertdocs.js +1 -0
  83. package/dist/commonjs/models/operations/upsertdocs.js.map +1 -1
  84. package/dist/commonjs/models/versioning.d.ts +100 -0
  85. package/dist/commonjs/models/versioning.d.ts.map +1 -0
  86. package/dist/commonjs/models/versioning.js +93 -0
  87. package/dist/commonjs/models/versioning.js.map +1 -0
  88. package/dist/commonjs/types/public.d.ts +86 -8
  89. package/dist/commonjs/types/public.d.ts.map +1 -1
  90. package/dist/commonjs/types/public.js +30 -7
  91. package/dist/commonjs/types/public.js.map +1 -1
  92. package/dist/commonjs/versioning.d.ts +63 -0
  93. package/dist/commonjs/versioning.d.ts.map +1 -0
  94. package/dist/commonjs/versioning.js +390 -0
  95. package/dist/commonjs/versioning.js.map +1 -0
  96. package/dist/esm/client.d.ts +25 -10
  97. package/dist/esm/client.d.ts.map +1 -1
  98. package/dist/esm/client.js +234 -61
  99. package/dist/esm/client.js.map +1 -1
  100. package/dist/esm/compat/qdrant/client.d.ts +6 -10
  101. package/dist/esm/compat/qdrant/client.d.ts.map +1 -1
  102. package/dist/esm/compat/qdrant/client.js +33 -15
  103. package/dist/esm/compat/qdrant/client.js.map +1 -1
  104. package/dist/esm/compat/qdrant/filters.js +5 -1
  105. package/dist/esm/compat/qdrant/filters.js.map +1 -1
  106. package/dist/esm/funcs/collectionsCreate.js +1 -1
  107. package/dist/esm/funcs/collectionsDelete.js +1 -1
  108. package/dist/esm/funcs/collectionsDocsGetBulkUpsert.js +5 -1
  109. package/dist/esm/funcs/collectionsDocsGetBulkUpsert.js.map +1 -1
  110. package/dist/esm/funcs/collectionsDocsListDocs.js +3 -0
  111. package/dist/esm/funcs/collectionsDocsListDocs.js.map +1 -1
  112. package/dist/esm/funcs/collectionsDocsListDocsExtended.d.ts +15 -0
  113. package/dist/esm/funcs/collectionsDocsListDocsExtended.d.ts.map +1 -0
  114. package/dist/esm/funcs/collectionsDocsListDocsExtended.js +95 -0
  115. package/dist/esm/funcs/collectionsDocsListDocsExtended.js.map +1 -0
  116. package/dist/esm/index.d.ts +4 -1
  117. package/dist/esm/index.d.ts.map +1 -1
  118. package/dist/esm/index.js +3 -1
  119. package/dist/esm/index.js.map +1 -1
  120. package/dist/esm/lib/config.d.ts +2 -2
  121. package/dist/esm/lib/config.js +2 -2
  122. package/dist/esm/lib/config.js.map +1 -1
  123. package/dist/esm/lib/queryInput.d.ts +3 -11
  124. package/dist/esm/lib/queryInput.d.ts.map +1 -1
  125. package/dist/esm/lib/queryInput.js.map +1 -1
  126. package/dist/esm/models/collectionresponse.d.ts +12 -21
  127. package/dist/esm/models/collectionresponse.d.ts.map +1 -1
  128. package/dist/esm/models/collectionresponse.js +5 -6
  129. package/dist/esm/models/collectionresponse.js.map +1 -1
  130. package/dist/esm/models/index.d.ts +1 -0
  131. package/dist/esm/models/index.d.ts.map +1 -1
  132. package/dist/esm/models/index.js +1 -0
  133. package/dist/esm/models/index.js.map +1 -1
  134. package/dist/esm/models/operations/bulkupsertdocs.d.ts +6 -0
  135. package/dist/esm/models/operations/bulkupsertdocs.d.ts.map +1 -1
  136. package/dist/esm/models/operations/bulkupsertdocs.js +2 -0
  137. package/dist/esm/models/operations/bulkupsertdocs.js.map +1 -1
  138. package/dist/esm/models/operations/createcollection.d.ts +20 -13
  139. package/dist/esm/models/operations/createcollection.d.ts.map +1 -1
  140. package/dist/esm/models/operations/createcollection.js +15 -7
  141. package/dist/esm/models/operations/createcollection.js.map +1 -1
  142. package/dist/esm/models/operations/deletedocs.d.ts +3 -0
  143. package/dist/esm/models/operations/deletedocs.d.ts.map +1 -1
  144. package/dist/esm/models/operations/deletedocs.js +1 -0
  145. package/dist/esm/models/operations/deletedocs.js.map +1 -1
  146. package/dist/esm/models/operations/fetchdocs.d.ts +3 -0
  147. package/dist/esm/models/operations/fetchdocs.d.ts.map +1 -1
  148. package/dist/esm/models/operations/fetchdocs.js +9 -0
  149. package/dist/esm/models/operations/fetchdocs.js.map +1 -1
  150. package/dist/esm/models/operations/getbulkupsertdocs.d.ts +5 -0
  151. package/dist/esm/models/operations/getbulkupsertdocs.d.ts.map +1 -1
  152. package/dist/esm/models/operations/getbulkupsertdocs.js +6 -4
  153. package/dist/esm/models/operations/getbulkupsertdocs.js.map +1 -1
  154. package/dist/esm/models/operations/listdocs.d.ts +69 -0
  155. package/dist/esm/models/operations/listdocs.d.ts.map +1 -1
  156. package/dist/esm/models/operations/listdocs.js +38 -0
  157. package/dist/esm/models/operations/listdocs.js.map +1 -1
  158. package/dist/esm/models/operations/querycollection.d.ts +3 -0
  159. package/dist/esm/models/operations/querycollection.d.ts.map +1 -1
  160. package/dist/esm/models/operations/querycollection.js +9 -0
  161. package/dist/esm/models/operations/querycollection.js.map +1 -1
  162. package/dist/esm/models/operations/updatecollection.d.ts +10 -4
  163. package/dist/esm/models/operations/updatecollection.d.ts.map +1 -1
  164. package/dist/esm/models/operations/updatecollection.js +8 -1
  165. package/dist/esm/models/operations/updatecollection.js.map +1 -1
  166. package/dist/esm/models/operations/updatedocs.d.ts +3 -0
  167. package/dist/esm/models/operations/updatedocs.d.ts.map +1 -1
  168. package/dist/esm/models/operations/updatedocs.js +1 -0
  169. package/dist/esm/models/operations/updatedocs.js.map +1 -1
  170. package/dist/esm/models/operations/upsertdocs.d.ts +3 -0
  171. package/dist/esm/models/operations/upsertdocs.d.ts.map +1 -1
  172. package/dist/esm/models/operations/upsertdocs.js +1 -0
  173. package/dist/esm/models/operations/upsertdocs.js.map +1 -1
  174. package/dist/esm/models/versioning.d.ts +100 -0
  175. package/dist/esm/models/versioning.d.ts.map +1 -0
  176. package/dist/esm/models/versioning.js +57 -0
  177. package/dist/esm/models/versioning.js.map +1 -0
  178. package/dist/esm/types/public.d.ts +86 -8
  179. package/dist/esm/types/public.d.ts.map +1 -1
  180. package/dist/esm/types/public.js +26 -7
  181. package/dist/esm/types/public.js.map +1 -1
  182. package/dist/esm/versioning.d.ts +63 -0
  183. package/dist/esm/versioning.d.ts.map +1 -0
  184. package/dist/esm/versioning.js +344 -0
  185. package/dist/esm/versioning.js.map +1 -0
  186. package/jsr.json +3 -1
  187. package/package.json +14 -2
  188. package/src/client.ts +367 -72
  189. package/src/compat/qdrant/client.ts +46 -20
  190. package/src/compat/qdrant/filters.ts +5 -3
  191. package/src/funcs/collectionsCreate.ts +1 -1
  192. package/src/funcs/collectionsDelete.ts +1 -1
  193. package/src/funcs/collectionsDocsGetBulkUpsert.ts +6 -1
  194. package/src/funcs/collectionsDocsListDocs.ts +3 -0
  195. package/src/funcs/collectionsDocsListDocsExtended.ts +201 -0
  196. package/src/index.ts +17 -0
  197. package/src/lib/config.ts +2 -2
  198. package/src/lib/queryInput.ts +3 -10
  199. package/src/models/collectionresponse.ts +17 -26
  200. package/src/models/index.ts +1 -0
  201. package/src/models/operations/bulkupsertdocs.ts +8 -0
  202. package/src/models/operations/createcollection.ts +39 -18
  203. package/src/models/operations/deletedocs.ts +4 -0
  204. package/src/models/operations/fetchdocs.ts +12 -0
  205. package/src/models/operations/getbulkupsertdocs.ts +11 -4
  206. package/src/models/operations/listdocs.ts +120 -0
  207. package/src/models/operations/querycollection.ts +12 -0
  208. package/src/models/operations/updatecollection.ts +21 -3
  209. package/src/models/operations/updatedocs.ts +4 -0
  210. package/src/models/operations/upsertdocs.ts +4 -0
  211. package/src/models/versioning.ts +118 -0
  212. package/src/types/public.ts +136 -16
  213. package/src/versioning.ts +490 -0
  214. package/examples/collectionScoped.example.ts +0 -38
  215. package/examples/collectionsList.example.ts +0 -25
  216. package/examples/package-lock.json +0 -612
  217. package/examples/package.json +0 -18
  218. package/test/integration/qdrant-compat-external.test.mjs +0 -351
  219. package/test/integration/qdrant-compat-live.test.mjs +0 -122
  220. package/test/null-response.test.mjs +0 -73
  221. package/test/public-api.test.mjs +0 -489
  222. package/test/qdrant-compat.test.mjs +0 -467
  223. package/tsconfig.json +0 -39
@@ -1,467 +0,0 @@
1
- import assert from "node:assert/strict";
2
- import test from "node:test";
3
-
4
- import {
5
- QdrantClient,
6
- QdrantCompatClient,
7
- UnsupportedQdrantFeatureError,
8
- models,
9
- } from "../dist/esm/compat/qdrant.js";
10
- import { PointStruct } from "../dist/esm/compat/qdrant/models.js";
11
-
12
- class FakeDocs {
13
- constructor() {
14
- this.upserts = [];
15
- this.deletes = [];
16
- this.fetches = [];
17
- this.lists = [];
18
- }
19
-
20
- async upsert(body) {
21
- this.upserts.push(body);
22
- return { message: "ok" };
23
- }
24
-
25
- async fetch(body) {
26
- this.fetches.push(body);
27
- return {
28
- docs: [
29
- {
30
- collection: "docs",
31
- doc: {
32
- id: "1",
33
- _qdrant_id: 1,
34
- _qdrant_vector: [0.1, 0.2],
35
- tenant: "acme",
36
- },
37
- },
38
- ],
39
- };
40
- }
41
-
42
- async delete(body) {
43
- this.deletes.push(body);
44
- return { message: "ok" };
45
- }
46
-
47
- async list(body = {}) {
48
- this.lists.push(body);
49
- return {
50
- docs: [
51
- {
52
- collection: "docs",
53
- doc: {
54
- id: "1",
55
- _qdrant_id: 1,
56
- _qdrant_vector: [0.1, 0.2],
57
- _qdrant_vector_title: [0.3, 0.4],
58
- tenant: "acme",
59
- },
60
- },
61
- ],
62
- nextPageToken: undefined,
63
- };
64
- }
65
- }
66
-
67
- class FakeCollection {
68
- constructor(owner, name) {
69
- this.owner = owner;
70
- this.name = name;
71
- this.docs = new FakeDocs();
72
- this.queries = [];
73
- this.updates = [];
74
- this.deletes = [];
75
- }
76
-
77
- async get() {
78
- this.owner.gets.push({ collectionName: this.name });
79
- return {
80
- collection: {
81
- collectionName: this.name,
82
- indexConfigs: this.owner.indexConfigs,
83
- numDocs: this.owner.numDocs,
84
- collectionStatus: "ACTIVE",
85
- },
86
- };
87
- }
88
-
89
- async update(body) {
90
- this.updates.push(body);
91
- this.owner.indexConfigs = body.indexConfigs;
92
- return { collection: { collectionName: this.name, indexConfigs: body.indexConfigs } };
93
- }
94
-
95
- async delete() {
96
- this.deletes.push({});
97
- return { message: "ok" };
98
- }
99
-
100
- async query(body) {
101
- this.queries.push(body);
102
- return {
103
- docs: [
104
- {
105
- collection: this.name,
106
- score: 0.9,
107
- doc: {
108
- id: "1",
109
- _qdrant_id: 1,
110
- _qdrant_vector: [0.1, 0.2],
111
- tenant: "acme",
112
- },
113
- },
114
- ],
115
- };
116
- }
117
- }
118
-
119
- class FakeLambdaDB {
120
- constructor() {
121
- this.created = [];
122
- this.gets = [];
123
- this.indexConfigs = {};
124
- this.numDocs = 0;
125
- this.collectionsByName = new Map();
126
- }
127
-
128
- async createCollection(body) {
129
- this.created.push(body);
130
- this.indexConfigs = body.indexConfigs ?? {};
131
- return { collection: { collectionName: body.collectionName } };
132
- }
133
-
134
- collection(name) {
135
- if (!this.collectionsByName.has(name)) {
136
- this.collectionsByName.set(name, new FakeCollection(this, name));
137
- }
138
- return this.collectionsByName.get(name);
139
- }
140
- }
141
-
142
- test("qdrant compatibility exports public client and models", () => {
143
- assert.equal(QdrantClient, QdrantCompatClient);
144
- assert.equal(models.PointStruct, PointStruct);
145
-
146
- const point = new models.PointStruct({
147
- id: 1,
148
- vector: [0.1, 0.2],
149
- payload: { tenant: "acme" },
150
- });
151
- assert.equal(point.id, 1);
152
- });
153
-
154
- test("createCollection maps vector params and payload schema", async () => {
155
- const fake = new FakeLambdaDB();
156
- const client = new QdrantCompatClient(fake);
157
-
158
- assert.equal(
159
- await client.createCollection("docs", {
160
- vectorsConfig: new models.VectorParams({
161
- size: 3,
162
- distance: models.Distance.DOT,
163
- }),
164
- payloadSchema: {
165
- tenant: models.PayloadSchemaType.KEYWORD,
166
- views: models.PayloadSchemaType.INTEGER,
167
- score: models.PayloadSchemaType.FLOAT,
168
- active: models.PayloadSchemaType.BOOL,
169
- },
170
- }),
171
- true,
172
- );
173
-
174
- assert.deepEqual(fake.created, [
175
- {
176
- collectionName: "docs",
177
- indexConfigs: {
178
- _qdrant_vector: {
179
- type: "vector",
180
- dimensions: 3,
181
- similarity: "dot_product",
182
- },
183
- tenant: { type: "keyword" },
184
- views: { type: "long" },
185
- score: { type: "double" },
186
- active: { type: "boolean" },
187
- },
188
- },
189
- ]);
190
- });
191
-
192
- test("createPayloadIndex merges existing configs and rejects non-empty backfill", async () => {
193
- const fake = new FakeLambdaDB();
194
- fake.indexConfigs = {
195
- _qdrant_vector: {
196
- type: "vector",
197
- dimensions: 3,
198
- similarity: "cosine",
199
- },
200
- };
201
- const client = new QdrantCompatClient(fake);
202
-
203
- assert.equal(
204
- await client.createPayloadIndex(
205
- "docs",
206
- "tenant",
207
- models.PayloadSchemaType.KEYWORD,
208
- ),
209
- true,
210
- );
211
-
212
- assert.deepEqual(fake.collection("docs").updates, [
213
- {
214
- indexConfigs: {
215
- _qdrant_vector: {
216
- type: "vector",
217
- dimensions: 3,
218
- similarity: "cosine",
219
- },
220
- tenant: { type: "keyword" },
221
- },
222
- },
223
- ]);
224
-
225
- fake.numDocs = 3;
226
- await assert.rejects(
227
- client.createPayloadIndex("docs", "views", models.PayloadSchemaType.INTEGER),
228
- UnsupportedQdrantFeatureError,
229
- );
230
- });
231
-
232
- test("upsert maps qdrant points to LambdaDB documents", async () => {
233
- const fake = new FakeLambdaDB();
234
- const client = new QdrantCompatClient(fake);
235
-
236
- const result = await client.upsert("docs", {
237
- points: [
238
- new models.PointStruct({
239
- id: 1,
240
- vector: [0.1, 0.2],
241
- payload: { tenant: "acme" },
242
- }),
243
- ],
244
- });
245
-
246
- assert.equal(result.status, models.UpdateStatus.COMPLETED);
247
- assert.deepEqual(fake.collection("docs").docs.upserts, [
248
- {
249
- docs: [
250
- {
251
- id: "1",
252
- _qdrant_id: 1,
253
- _qdrant_vector: [0.1, 0.2],
254
- tenant: "acme",
255
- },
256
- ],
257
- },
258
- ]);
259
-
260
- await assert.rejects(
261
- client.upsert("docs", {
262
- points: [{ id: 1, vector: [0.1], payload: { _qdrant_vector: [0.2] } }],
263
- }),
264
- /reserved prefix/,
265
- );
266
-
267
- await assert.rejects(
268
- client.upsert("docs", {
269
- points: [
270
- {
271
- id: 1,
272
- vector: {
273
- sparse: new models.SparseVector({ indices: [1], values: [0.9] }),
274
- },
275
- },
276
- ],
277
- }),
278
- UnsupportedQdrantFeatureError,
279
- );
280
- });
281
-
282
- test("queryPoints maps dense vectors, filters, and responses", async () => {
283
- const fake = new FakeLambdaDB();
284
- const client = new QdrantCompatClient(fake);
285
-
286
- const response = await client.queryPoints("docs", {
287
- query: [0.1, 0.2],
288
- queryFilter: new models.Filter({
289
- must: [
290
- new models.FieldCondition({
291
- key: "tenant",
292
- match: new models.MatchValue({ value: "acme" }),
293
- }),
294
- ],
295
- mustNot: [
296
- new models.FieldCondition({
297
- key: "status",
298
- match: new models.MatchValue({ value: "deleted" }),
299
- }),
300
- ],
301
- }),
302
- limit: 5,
303
- withVectors: true,
304
- });
305
-
306
- assert.equal(response.points[0].id, 1);
307
- assert.equal(response.points[0].score, 0.9);
308
- assert.deepEqual(response.points[0].payload, { tenant: "acme" });
309
- assert.deepEqual(response.points[0].vector, [0.1, 0.2]);
310
- assert.deepEqual(fake.collection("docs").queries, [
311
- {
312
- query: {
313
- knn: {
314
- field: "_qdrant_vector",
315
- k: 5,
316
- queryVector: [0.1, 0.2],
317
- filter: {
318
- bool: [
319
- { queryString: { query: "tenant:acme" }, occur: "filter" },
320
- { queryString: { query: "status:deleted" }, occur: "must_not" },
321
- ],
322
- },
323
- },
324
- },
325
- size: 5,
326
- consistentRead: true,
327
- includeVectors: true,
328
- },
329
- ]);
330
-
331
- await assert.rejects(
332
- client.queryPoints("docs", { query: [0.1], offset: 1 }),
333
- UnsupportedQdrantFeatureError,
334
- );
335
- });
336
-
337
- test("payload and vector selectors map to LambdaDB fields and qdrant responses", async () => {
338
- const fake = new FakeLambdaDB();
339
- const collection = fake.collection("docs");
340
- collection.query = async function query(body) {
341
- this.queries.push(body);
342
- return {
343
- docs: [
344
- {
345
- collection: this.name,
346
- score: 0.9,
347
- doc: {
348
- id: "1",
349
- _qdrant_id: 1,
350
- _qdrant_vector: [0.1, 0.2],
351
- _qdrant_vector_title: [0.3, 0.4],
352
- tenant: "acme",
353
- hidden: "value",
354
- },
355
- },
356
- ],
357
- };
358
- };
359
- const client = new QdrantCompatClient(fake);
360
-
361
- const response = await client.queryPoints("docs", {
362
- query: [0.1, 0.2],
363
- limit: 1,
364
- withPayload: ["tenant"],
365
- withVectors: ["title"],
366
- });
367
-
368
- assert.deepEqual(response.points[0].payload, { tenant: "acme" });
369
- assert.deepEqual(response.points[0].vector, { title: [0.3, 0.4] });
370
- assert.deepEqual(collection.queries[0].fields, {
371
- include: ["_qdrant_id", "tenant", "_qdrant_vector_title"],
372
- });
373
- assert.equal(collection.queries[0].includeVectors, true);
374
-
375
- const records = await client.retrieve("docs", {
376
- ids: [1],
377
- withPayload: ["tenant"],
378
- withVectors: false,
379
- });
380
- assert.deepEqual(records[0].payload, { tenant: "acme" });
381
- assert.equal(records[0].vector, undefined);
382
- assert.deepEqual(collection.docs.fetches.at(-1), {
383
- ids: ["1"],
384
- consistentRead: true,
385
- includeVectors: false,
386
- fields: { include: ["_qdrant_id", "tenant"] },
387
- });
388
- });
389
-
390
- test("retrieve, delete, scroll, count, and getCollection return qdrant-style objects", async () => {
391
- const fake = new FakeLambdaDB();
392
- fake.indexConfigs = {
393
- _qdrant_vector: {
394
- type: "vector",
395
- dimensions: 2,
396
- similarity: "cosine",
397
- },
398
- };
399
- fake.numDocs = 12;
400
- const client = new QdrantCompatClient(fake);
401
-
402
- const collection = await client.getCollection("docs");
403
- assert.equal(collection.config.params.vectors.size, 2);
404
- assert.equal(collection.config.params.vectors.distance, models.Distance.COSINE);
405
-
406
- const records = await client.retrieve("docs", { ids: [1], withVectors: true });
407
- assert.equal(records[0].id, 1);
408
- assert.deepEqual(records[0].payload, { tenant: "acme" });
409
- assert.deepEqual(records[0].vector, [0.1, 0.2]);
410
- assert.deepEqual(fake.collection("docs").docs.fetches, [
411
- { ids: ["1"], consistentRead: true, includeVectors: true },
412
- ]);
413
-
414
- const deleteResult = await client.delete("docs", { pointsSelector: [1] });
415
- assert.equal(deleteResult.status, models.UpdateStatus.COMPLETED);
416
- assert.deepEqual(fake.collection("docs").docs.deletes, [{ ids: ["1"] }]);
417
-
418
- await client.delete("docs", {
419
- filter: new models.Filter({
420
- must: [
421
- new models.FieldCondition({
422
- key: "tenant",
423
- match: new models.MatchValue({ value: "acme" }),
424
- }),
425
- ],
426
- }),
427
- });
428
- await client.delete("docs", {
429
- pointsSelector: {
430
- filter: {
431
- must: [
432
- {
433
- key: "status",
434
- match: { value: "archived" },
435
- },
436
- ],
437
- },
438
- },
439
- });
440
- assert.deepEqual(fake.collection("docs").docs.deletes, [
441
- { ids: ["1"] },
442
- {
443
- filter: {
444
- queryString: { query: "tenant:acme" },
445
- },
446
- },
447
- {
448
- filter: {
449
- queryString: { query: "status:archived" },
450
- },
451
- },
452
- ]);
453
-
454
- const [scrollRecords, nextOffset] = await client.scroll("docs", {
455
- limit: 3,
456
- withPayload: ["tenant"],
457
- withVectors: ["title"],
458
- });
459
- assert.equal(scrollRecords[0].id, 1);
460
- assert.deepEqual(scrollRecords[0].payload, { tenant: "acme" });
461
- assert.deepEqual(scrollRecords[0].vector, { title: [0.3, 0.4] });
462
- assert.equal(nextOffset, undefined);
463
- assert.deepEqual(fake.collection("docs").docs.lists, [{ size: 3 }]);
464
-
465
- const count = await client.count("docs");
466
- assert.equal(count.count, 12);
467
- });
package/tsconfig.json DELETED
@@ -1,39 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "incremental": false,
4
- "target": "ES2020",
5
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
6
- "jsx": "react-jsx",
7
-
8
- "module": "Node16",
9
- "moduleResolution": "Node16",
10
-
11
- "allowJs": true,
12
-
13
- "declaration": true,
14
- "declarationMap": true,
15
- "sourceMap": true,
16
- "outDir": ".",
17
- "rootDir": "src",
18
-
19
- "strict": true,
20
- "allowUnusedLabels": false,
21
- "allowUnreachableCode": false,
22
- "exactOptionalPropertyTypes": true,
23
- "useUnknownInCatchVariables": true,
24
- "noFallthroughCasesInSwitch": true,
25
- "noImplicitOverride": true,
26
- "noImplicitReturns": true,
27
- "noPropertyAccessFromIndexSignature": true,
28
- "noUncheckedIndexedAccess": true,
29
- "noUnusedLocals": true,
30
- "noUnusedParameters": true,
31
- "isolatedModules": true,
32
- "checkJs": true,
33
- "esModuleInterop": true,
34
- "skipLibCheck": true,
35
- "forceConsistentCasingInFileNames": true
36
- },
37
- "include": ["src"],
38
- "exclude": ["node_modules"]
39
- }