@functional-systems/lambdadb 0.3.4-dev.0 → 0.4.0

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 (70) hide show
  1. package/README.md +50 -7
  2. package/dist/commonjs/compat/qdrant/client.d.ts +210 -0
  3. package/dist/commonjs/compat/qdrant/client.d.ts.map +1 -0
  4. package/dist/commonjs/compat/qdrant/client.js +573 -0
  5. package/dist/commonjs/compat/qdrant/client.js.map +1 -0
  6. package/dist/commonjs/compat/qdrant/conversions.d.ts +40 -0
  7. package/dist/commonjs/compat/qdrant/conversions.d.ts.map +1 -0
  8. package/dist/commonjs/compat/qdrant/conversions.js +386 -0
  9. package/dist/commonjs/compat/qdrant/conversions.js.map +1 -0
  10. package/dist/commonjs/compat/qdrant/errors.d.ts +10 -0
  11. package/dist/commonjs/compat/qdrant/errors.d.ts.map +1 -0
  12. package/dist/commonjs/compat/qdrant/errors.js +25 -0
  13. package/dist/commonjs/compat/qdrant/errors.js.map +1 -0
  14. package/dist/commonjs/compat/qdrant/filters.d.ts +10 -0
  15. package/dist/commonjs/compat/qdrant/filters.d.ts.map +1 -0
  16. package/dist/commonjs/compat/qdrant/filters.js +172 -0
  17. package/dist/commonjs/compat/qdrant/filters.js.map +1 -0
  18. package/dist/commonjs/compat/qdrant/models.d.ts +198 -0
  19. package/dist/commonjs/compat/qdrant/models.d.ts.map +1 -0
  20. package/dist/commonjs/compat/qdrant/models.js +205 -0
  21. package/dist/commonjs/compat/qdrant/models.js.map +1 -0
  22. package/dist/commonjs/compat/qdrant.d.ts +4 -0
  23. package/dist/commonjs/compat/qdrant.d.ts.map +1 -0
  24. package/dist/commonjs/compat/qdrant.js +45 -0
  25. package/dist/commonjs/compat/qdrant.js.map +1 -0
  26. package/dist/commonjs/models/indexconfigsunion.d.ts +2 -2
  27. package/dist/commonjs/models/indexconfigsunion.d.ts.map +1 -1
  28. package/dist/commonjs/models/indexconfigsunion.js +4 -4
  29. package/dist/commonjs/models/indexconfigsunion.js.map +1 -1
  30. package/dist/esm/compat/qdrant/client.d.ts +210 -0
  31. package/dist/esm/compat/qdrant/client.d.ts.map +1 -0
  32. package/dist/esm/compat/qdrant/client.js +536 -0
  33. package/dist/esm/compat/qdrant/client.js.map +1 -0
  34. package/dist/esm/compat/qdrant/conversions.d.ts +40 -0
  35. package/dist/esm/compat/qdrant/conversions.d.ts.map +1 -0
  36. package/dist/esm/compat/qdrant/conversions.js +336 -0
  37. package/dist/esm/compat/qdrant/conversions.js.map +1 -0
  38. package/dist/esm/compat/qdrant/errors.d.ts +10 -0
  39. package/dist/esm/compat/qdrant/errors.d.ts.map +1 -0
  40. package/dist/esm/compat/qdrant/errors.js +19 -0
  41. package/dist/esm/compat/qdrant/errors.js.map +1 -0
  42. package/dist/esm/compat/qdrant/filters.d.ts +10 -0
  43. package/dist/esm/compat/qdrant/filters.d.ts.map +1 -0
  44. package/dist/esm/compat/qdrant/filters.js +169 -0
  45. package/dist/esm/compat/qdrant/filters.js.map +1 -0
  46. package/dist/esm/compat/qdrant/models.d.ts +198 -0
  47. package/dist/esm/compat/qdrant/models.d.ts.map +1 -0
  48. package/dist/esm/compat/qdrant/models.js +185 -0
  49. package/dist/esm/compat/qdrant/models.js.map +1 -0
  50. package/dist/esm/compat/qdrant.d.ts +4 -0
  51. package/dist/esm/compat/qdrant.d.ts.map +1 -0
  52. package/dist/esm/compat/qdrant.js +4 -0
  53. package/dist/esm/compat/qdrant.js.map +1 -0
  54. package/dist/esm/models/indexconfigsunion.d.ts +2 -2
  55. package/dist/esm/models/indexconfigsunion.d.ts.map +1 -1
  56. package/dist/esm/models/indexconfigsunion.js +4 -4
  57. package/dist/esm/models/indexconfigsunion.js.map +1 -1
  58. package/jsr.json +3 -1
  59. package/package.json +32 -1
  60. package/src/compat/qdrant/client.ts +901 -0
  61. package/src/compat/qdrant/conversions.ts +422 -0
  62. package/src/compat/qdrant/errors.ts +20 -0
  63. package/src/compat/qdrant/filters.ts +213 -0
  64. package/src/compat/qdrant/models.ts +317 -0
  65. package/src/compat/qdrant.ts +3 -0
  66. package/src/models/indexconfigsunion.ts +6 -6
  67. package/test/integration/qdrant-compat-external.test.mjs +226 -0
  68. package/test/integration/qdrant-compat-live.test.mjs +122 -0
  69. package/test/public-api.test.mjs +145 -4
  70. package/test/qdrant-compat.test.mjs +402 -0
package/README.md CHANGED
@@ -23,6 +23,7 @@ LambdaDB API: LambdaDB Open API Spec
23
23
  * [SDK Installation](#sdk-installation)
24
24
  * [Requirements](#requirements)
25
25
  * [SDK Example Usage](#sdk-example-usage)
26
+ * [Qdrant Compatibility](#qdrant-compatibility)
26
27
  * [Authentication](#authentication)
27
28
  * [Available Resources and Operations](#available-resources-and-operations)
28
29
  * [Standalone functions](#standalone-functions)
@@ -103,7 +104,8 @@ async function run() {
103
104
  await collection.get();
104
105
  await collection.docs.list({ size: 20 });
105
106
  await collection.docs.upsert({ docs: [{ id: "1", text: "hello" }] });
106
- // For large document sets (up to 200MB), use bulkUpsertDocs for a single-call flow
107
+ // For large document sets (up to 200MB), use bulkUpsertDocs for a single-call flow.
108
+ // Bulk upsert is not supported for collections with managed embedding vector fields.
107
109
  // await collection.docs.bulkUpsertDocs({ docs: largeDocArray });
108
110
  }
109
111
 
@@ -190,6 +192,47 @@ const input = createQueryInput({ text: "hello" }, { size: 10 });
190
192
  const result = await collection.query(input);
191
193
  ```
192
194
 
195
+ ### Qdrant Compatibility
196
+
197
+ For common Qdrant JavaScript client migration paths, use the explicit
198
+ Qdrant-style compatibility adapter:
199
+
200
+ ```typescript
201
+ import { QdrantCompatClient, models } from "@functional-systems/lambdadb/compat/qdrant";
202
+
203
+ const client = new QdrantCompatClient({
204
+ projectApiKey: "<YOUR_PROJECT_API_KEY>",
205
+ projectName: "playground",
206
+ });
207
+
208
+ await client.createCollection("docs", {
209
+ vectorsConfig: new models.VectorParams({
210
+ size: 3,
211
+ distance: models.Distance.COSINE,
212
+ }),
213
+ });
214
+ ```
215
+
216
+ The adapter covers the common dense-vector RAG subset and is not a full Qdrant
217
+ client replacement. See [docs/compatibility/qdrant.md](docs/compatibility/qdrant.md)
218
+ for supported methods, data mapping, and unsupported features.
219
+
220
+ Live Qdrant compatibility smoke tests can load credentials from a local `.env`
221
+ file:
222
+
223
+ ```bash
224
+ cp .env.example .env
225
+ # Fill in LAMBDADB_PROJECT_API_KEY and set LAMBDADB_RUN_LIVE_TESTS=1.
226
+ npm run test:live:qdrant
227
+ ```
228
+
229
+ External integration smoke tests for LangChain JS and LlamaIndex TS use an
230
+ in-process fake LambdaDB transport and do not require credentials:
231
+
232
+ ```bash
233
+ npm run test:external:qdrant
234
+ ```
235
+
193
236
  ### Managed embeddings
194
237
 
195
238
  Managed embedding vector fields generate vectors from a configured source text field. Create the collection with a text field and a managed vector field, then query that vector field with `knn.queryText`.
@@ -281,9 +324,9 @@ run();
281
324
 
282
325
  * [listDocs](docs/sdks/docs/README.md#listdocs) - List documents in a collection.
283
326
  * [upsert](docs/sdks/docs/README.md#upsert) - Upsert documents into a collection. Note that the maximum supported payload size is 6MB.
284
- * [bulkUpsertDocs](docs/sdks/docs/README.md#bulkupsertdocs) - Bulk upsert documents in one call (up to 200MB); use this for best DX when you have a document list.
285
- * [getBulkUpsert](docs/sdks/docs/README.md#getbulkupsert) - Request required info to upload documents.
286
- * [bulkUpsert](docs/sdks/docs/README.md#bulkupsert) - Bulk upsert documents into a collection. Note that the maximum supported object size is 200MB.
327
+ * [bulkUpsertDocs](docs/sdks/docs/README.md#bulkupsertdocs) - Bulk upsert documents in one call (up to 200MB); use this for best DX when you have a document list. Not supported for collections with managed embedding vector fields.
328
+ * [getBulkUpsert](docs/sdks/docs/README.md#getbulkupsert) - Request required info to upload documents. Bulk upsert is not supported for collections with managed embedding vector fields.
329
+ * [bulkUpsert](docs/sdks/docs/README.md#bulkupsert) - Bulk upsert documents into a collection. Note that the maximum supported object size is 200MB. Bulk upsert is not supported for collections with managed embedding vector fields.
287
330
  * [update](docs/sdks/docs/README.md#update) - Update documents in a collection. Note that the maximum supported payload size is 6MB.
288
331
  * [delete](docs/sdks/docs/README.md#delete) - Delete documents by document IDs or query filter from a collection.
289
332
  * [fetch](docs/sdks/docs/README.md#fetch) - Lookup and return documents by document IDs from a collection.
@@ -322,10 +365,10 @@ To read more about standalone functions, check [FUNCTIONS.md](./FUNCTIONS.md).
322
365
 
323
366
  - [`collectionsCreate`](docs/sdks/collections/README.md#create) - Create a collection.
324
367
  - [`collectionsDelete`](docs/sdks/collections/README.md#delete) - Delete an existing collection.
325
- - [`collectionsDocsBulkUpsert`](docs/sdks/docs/README.md#bulkupsert) - Bulk upsert documents into a collection. Note that the maximum supported object size is 200MB.
368
+ - [`collectionsDocsBulkUpsert`](docs/sdks/docs/README.md#bulkupsert) - Bulk upsert documents into a collection. Note that the maximum supported object size is 200MB. Bulk upsert is not supported for collections with managed embedding vector fields.
326
369
  - [`collectionsDocsDelete`](docs/sdks/docs/README.md#delete) - Delete documents by document IDs or query filter from a collection.
327
370
  - [`collectionsDocsFetch`](docs/sdks/docs/README.md#fetch) - Lookup and return documents by document IDs from a collection.
328
- - [`collectionsDocsGetBulkUpsert`](docs/sdks/docs/README.md#getbulkupsert) - Request required info to upload documents.
371
+ - [`collectionsDocsGetBulkUpsert`](docs/sdks/docs/README.md#getbulkupsert) - Request required info to upload documents. Bulk upsert is not supported for collections with managed embedding vector fields.
329
372
  - [`collectionsDocsListDocs`](docs/sdks/docs/README.md#listdocs) - List documents in a collection.
330
373
  - [`collectionsDocsUpdate`](docs/sdks/docs/README.md#update) - Update documents in a collection. Note that the maximum supported payload size is 6MB.
331
374
  - [`collectionsDocsUpsert`](docs/sdks/docs/README.md#upsert) - Upsert documents into a collection. Note that the maximum supported payload size is 6MB.
@@ -512,7 +555,7 @@ Available Safe methods: `listCollectionsSafe`, `createCollectionSafe`, `collecti
512
555
 
513
556
 
514
557
  **Inherit from [`LambdaDBError`](./src/models/errors/lambdadberror.ts)**:
515
- * [`BadRequestError`](./src/models/errors/badrequesterror.ts): Bad request. Status code `400`. Applicable to 9 of 13 methods.*
558
+ * [`BadRequestError`](./src/models/errors/badrequesterror.ts): Bad request. Status code `400`. Applicable to 10 of 13 methods.*
516
559
  * [`ResourceAlreadyExistsError`](./src/models/errors/resourcealreadyexistserror.ts): Resource already exists. Status code `409`. Applicable to 1 of 13 methods.*
517
560
  * [`ResponseValidationError`](./src/models/errors/responsevalidationerror.ts): Type mismatch between the data returned from the server and the structure expected by the SDK. See `error.rawValue` for the raw value and `error.pretty()` for a nicely formatted multi-line string.
518
561
 
@@ -0,0 +1,210 @@
1
+ import { type LambdaDBClientOptions } from "../../client.js";
2
+ import type { CreateCollectionInput } from "../../types/public.js";
3
+ import { type IndexConfigs } from "./conversions.js";
4
+ import * as models from "./models.js";
5
+ type JsonObject = {
6
+ [key: string]: unknown;
7
+ };
8
+ type CollectionLike = {
9
+ get(): Promise<{
10
+ collection: JsonObject;
11
+ }>;
12
+ update(body: {
13
+ indexConfigs: IndexConfigs;
14
+ }): Promise<unknown>;
15
+ delete(): Promise<unknown>;
16
+ query(body: JsonObject): Promise<{
17
+ docs: unknown[];
18
+ }>;
19
+ docs: {
20
+ upsert(body: {
21
+ docs: JsonObject[];
22
+ }): Promise<unknown>;
23
+ fetch(body: JsonObject): Promise<{
24
+ docs: unknown[];
25
+ }>;
26
+ delete(body: {
27
+ ids?: string[];
28
+ filter?: JsonObject;
29
+ }): Promise<unknown>;
30
+ list(body?: {
31
+ size?: number;
32
+ pageToken?: string;
33
+ }): Promise<{
34
+ docs: unknown[];
35
+ nextPageToken?: string | undefined;
36
+ }>;
37
+ };
38
+ };
39
+ type LambdaDBLike = {
40
+ createCollection(request: CreateCollectionInput): Promise<unknown>;
41
+ listCollections?(): Promise<{
42
+ collections: Array<{
43
+ collectionName?: string;
44
+ name?: string;
45
+ }>;
46
+ }>;
47
+ collection(name: string): CollectionLike;
48
+ };
49
+ type CompatConstructorOptions = LambdaDBClientOptions & {
50
+ project_api_key?: string | undefined;
51
+ apiKey?: string | undefined;
52
+ api_key?: string | undefined;
53
+ base_url?: string | undefined;
54
+ project_name?: string | undefined;
55
+ url?: string | undefined;
56
+ timeout?: number | undefined;
57
+ path?: string | undefined;
58
+ location?: string | undefined;
59
+ host?: string | undefined;
60
+ port?: number | undefined;
61
+ https?: boolean | undefined;
62
+ prefix?: string | undefined;
63
+ [key: string]: unknown;
64
+ };
65
+ type CreateCollectionOptions = {
66
+ vectorsConfig?: unknown;
67
+ vectors_config?: unknown;
68
+ payloadSchema?: unknown;
69
+ payload_schema?: unknown;
70
+ payloadIndexes?: unknown;
71
+ payload_indexes?: unknown;
72
+ payloadIndexConfigs?: unknown;
73
+ payload_index_configs?: unknown;
74
+ timeout?: number | undefined;
75
+ initFrom?: unknown;
76
+ init_from?: unknown;
77
+ [key: string]: unknown;
78
+ };
79
+ type QueryPointsOptions = {
80
+ query: unknown;
81
+ queryFilter?: models.Filter | JsonObject | null;
82
+ query_filter?: models.Filter | JsonObject | null;
83
+ limit?: number | undefined;
84
+ withPayload?: boolean | undefined;
85
+ with_payload?: boolean | undefined;
86
+ withVectors?: boolean | undefined;
87
+ with_vectors?: boolean | undefined;
88
+ using?: string | undefined;
89
+ searchParams?: models.SearchParams | JsonObject | null;
90
+ search_params?: models.SearchParams | JsonObject | null;
91
+ offset?: number | undefined;
92
+ scoreThreshold?: number | undefined;
93
+ score_threshold?: number | undefined;
94
+ consistency?: unknown;
95
+ shardKeySelector?: unknown;
96
+ shard_key_selector?: unknown;
97
+ [key: string]: unknown;
98
+ };
99
+ export declare class QdrantCompatClient {
100
+ private readonly client;
101
+ constructor(clientOrOptions?: LambdaDBLike | CompatConstructorOptions);
102
+ collectionExists(collectionName: string): Promise<boolean>;
103
+ collection_exists(collectionName: string): Promise<boolean>;
104
+ getCollection(collectionName: string): Promise<JsonObject>;
105
+ get_collection(collectionName: string): Promise<JsonObject>;
106
+ getCollections(): Promise<{
107
+ collections: Array<{
108
+ name: string;
109
+ }>;
110
+ }>;
111
+ createCollection(collectionNameOrInput: string | (CreateCollectionOptions & {
112
+ collectionName?: string;
113
+ collection_name?: string;
114
+ }), options?: CreateCollectionOptions): Promise<boolean>;
115
+ create_collection(collectionNameOrInput: Parameters<QdrantCompatClient["createCollection"]>[0], options?: Parameters<QdrantCompatClient["createCollection"]>[1]): Promise<boolean>;
116
+ recreateCollection(collectionNameOrInput: string | (CreateCollectionOptions & {
117
+ collectionName?: string;
118
+ collection_name?: string;
119
+ }), options?: CreateCollectionOptions): Promise<boolean>;
120
+ recreate_collection(collectionNameOrInput: Parameters<QdrantCompatClient["recreateCollection"]>[0], options?: Parameters<QdrantCompatClient["recreateCollection"]>[1]): Promise<boolean>;
121
+ deleteCollection(collectionName: string): Promise<boolean>;
122
+ delete_collection(collectionName: string): Promise<boolean>;
123
+ createPayloadIndex(collectionName: string, fieldName: string, fieldSchema: unknown, options?: {
124
+ wait?: boolean | undefined;
125
+ timeout?: number | undefined;
126
+ [key: string]: unknown;
127
+ }): Promise<boolean>;
128
+ create_payload_index(collectionName: string, fieldName: string, fieldSchema: unknown, options?: Parameters<QdrantCompatClient["createPayloadIndex"]>[3]): Promise<boolean>;
129
+ upsert(collectionName: string, options: {
130
+ points: Iterable<unknown>;
131
+ wait?: boolean | undefined;
132
+ [key: string]: unknown;
133
+ }): Promise<models.UpdateResult>;
134
+ uploadPoints(collectionName: string, options: {
135
+ points: Iterable<unknown>;
136
+ batchSize?: number | undefined;
137
+ batch_size?: number | undefined;
138
+ wait?: boolean | undefined;
139
+ parallel?: number | undefined;
140
+ maxRetries?: number | undefined;
141
+ max_retries?: number | undefined;
142
+ shardKeySelector?: unknown;
143
+ shard_key_selector?: unknown;
144
+ [key: string]: unknown;
145
+ }): Promise<void>;
146
+ upload_points(collectionName: string, options: Parameters<QdrantCompatClient["uploadPoints"]>[1]): Promise<void>;
147
+ uploadCollection(collectionName: string, options: {
148
+ vectors: Iterable<unknown>;
149
+ ids?: Iterable<models.PointId> | undefined;
150
+ payload?: Iterable<JsonObject | null | undefined> | undefined;
151
+ batchSize?: number | undefined;
152
+ batch_size?: number | undefined;
153
+ [key: string]: unknown;
154
+ }): Promise<void>;
155
+ upload_collection(collectionName: string, options: Parameters<QdrantCompatClient["uploadCollection"]>[1]): Promise<void>;
156
+ retrieve(collectionName: string, options: {
157
+ ids: models.PointId[];
158
+ withPayload?: boolean | undefined;
159
+ with_payload?: boolean | undefined;
160
+ withVectors?: boolean | undefined;
161
+ with_vectors?: boolean | undefined;
162
+ [key: string]: unknown;
163
+ }): Promise<models.Record[]>;
164
+ delete(collectionName: string, options?: {
165
+ pointsSelector?: unknown;
166
+ points_selector?: unknown;
167
+ points?: unknown;
168
+ ids?: unknown;
169
+ filter?: models.Filter | JsonObject | null;
170
+ wait?: boolean | undefined;
171
+ [key: string]: unknown;
172
+ }): Promise<models.UpdateResult>;
173
+ queryPoints(collectionName: string, options: QueryPointsOptions): Promise<models.QueryResponse>;
174
+ query_points(collectionName: string, options: Parameters<QdrantCompatClient["queryPoints"]>[1]): Promise<models.QueryResponse>;
175
+ query(collectionName: string, options: {
176
+ query: unknown;
177
+ limit?: number | undefined;
178
+ filter?: models.Filter | JsonObject | null;
179
+ with_payload?: boolean | unknown[] | undefined;
180
+ withPayload?: boolean | unknown[] | undefined;
181
+ with_vector?: boolean | undefined;
182
+ withVectors?: boolean | undefined;
183
+ params?: unknown;
184
+ [key: string]: unknown;
185
+ }): Promise<models.QueryResponse>;
186
+ search(collectionName: string, options: Omit<QueryPointsOptions, "query"> & {
187
+ queryVector?: unknown;
188
+ query_vector?: unknown;
189
+ }): Promise<models.ScoredPoint[]>;
190
+ scroll(collectionName: string, options?: {
191
+ scrollFilter?: models.Filter | JsonObject | null;
192
+ scroll_filter?: models.Filter | JsonObject | null;
193
+ limit?: number | undefined;
194
+ withPayload?: boolean | undefined;
195
+ with_payload?: boolean | undefined;
196
+ withVectors?: boolean | undefined;
197
+ with_vectors?: boolean | undefined;
198
+ [key: string]: unknown;
199
+ }): Promise<[models.Record[], string | undefined]>;
200
+ count(collectionName: string, options?: {
201
+ countFilter?: models.Filter | JsonObject | null;
202
+ count_filter?: models.Filter | JsonObject | null;
203
+ [key: string]: unknown;
204
+ }): Promise<models.CountResult>;
205
+ private currentCollection;
206
+ private waitForCollectionActive;
207
+ }
208
+ export declare const QdrantClient: typeof QdrantCompatClient;
209
+ export {};
210
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/compat/qdrant/client.ts"],"names":[],"mappings":"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"}