@lancedb/lancedb 0.10.0-beta.1 → 0.10.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.
@@ -34,6 +34,14 @@ export interface CreateTableOptions {
34
34
  * `stable` is the new format, which is Lance format v2.
35
35
  */
36
36
  dataStorageVersion?: string;
37
+ /**
38
+ * Use the new V2 manifest paths. These paths provide more efficient
39
+ * opening of datasets with many versions on object stores. WARNING:
40
+ * turning this on will make the dataset unreadable for older versions
41
+ * of LanceDB (prior to 0.10.0). To migrate an existing dataset, instead
42
+ * use the {@link LocalTable#migrateManifestPathsV2} method.
43
+ */
44
+ enableV2ManifestPaths?: boolean;
37
45
  /**
38
46
  * If true then data files will be written with the legacy format
39
47
  *
@@ -80,7 +80,7 @@ class LocalConnection extends Connection {
80
80
  else if (options?.useLegacyFormat !== undefined) {
81
81
  dataStorageVersion = options.useLegacyFormat ? "legacy" : "stable";
82
82
  }
83
- const innerTable = await this.inner.createTable(nameOrOptions, buf, mode, cleanseStorageOptions(options?.storageOptions), dataStorageVersion);
83
+ const innerTable = await this.inner.createTable(nameOrOptions, buf, mode, cleanseStorageOptions(options?.storageOptions), dataStorageVersion, options?.enableV2ManifestPaths);
84
84
  return new table_1.LocalTable(innerTable);
85
85
  }
86
86
  async createEmptyTable(name, schema, options) {
@@ -104,7 +104,7 @@ class LocalConnection extends Connection {
104
104
  }
105
105
  const table = (0, arrow_1.makeEmptyTable)(schema, metadata);
106
106
  const buf = await (0, arrow_1.fromTableToBuffer)(table);
107
- const innerTable = await this.inner.createEmptyTable(name, buf, mode, cleanseStorageOptions(options?.storageOptions), dataStorageVersion);
107
+ const innerTable = await this.inner.createEmptyTable(name, buf, mode, cleanseStorageOptions(options?.storageOptions), dataStorageVersion, options?.enableV2ManifestPaths);
108
108
  return new table_1.LocalTable(innerTable);
109
109
  }
110
110
  async dropTable(name) {
package/dist/indices.d.ts CHANGED
@@ -92,6 +92,35 @@ export interface IvfPqOptions {
92
92
  */
93
93
  sampleRate?: number;
94
94
  }
95
+ export interface HnswPqOptions {
96
+ distanceType?: "l2" | "cosine" | "dot";
97
+ numPartitions?: number;
98
+ numSubVectors?: number;
99
+ maxIterations?: number;
100
+ sampleRate?: number;
101
+ m?: number;
102
+ efConstruction?: number;
103
+ }
104
+ export interface HnswSqOptions {
105
+ distanceType?: "l2" | "cosine" | "dot";
106
+ numPartitions?: number;
107
+ maxIterations?: number;
108
+ sampleRate?: number;
109
+ m?: number;
110
+ efConstruction?: number;
111
+ }
112
+ /**
113
+ * Options to create a full text search index
114
+ */
115
+ export interface FtsOptions {
116
+ /**
117
+ * Whether to build the index with positions.
118
+ * True by default.
119
+ * If set to false, the index will not store the positions of the tokens in the text,
120
+ * which will make the index smaller and faster to build, but will not support phrase queries.
121
+ */
122
+ withPositions?: boolean;
123
+ }
95
124
  export declare class Index {
96
125
  private readonly inner;
97
126
  private constructor();
@@ -167,7 +196,19 @@ export declare class Index {
167
196
  *
168
197
  * For now, the full text search index only supports English, and doesn't support phrase search.
169
198
  */
170
- static fts(): Index;
199
+ static fts(options?: Partial<FtsOptions>): Index;
200
+ /**
201
+ *
202
+ * Create a hnswpq index
203
+ *
204
+ */
205
+ static hnswPq(options?: Partial<HnswPqOptions>): Index;
206
+ /**
207
+ *
208
+ * Create a hnswsq index
209
+ *
210
+ */
211
+ static hnswSq(options?: Partial<HnswSqOptions>): Index;
171
212
  }
172
213
  export interface IndexOptions {
173
214
  /**
package/dist/indices.js CHANGED
@@ -100,8 +100,24 @@ class Index {
100
100
  *
101
101
  * For now, the full text search index only supports English, and doesn't support phrase search.
102
102
  */
103
- static fts() {
104
- return new Index(native_1.Index.fts());
103
+ static fts(options) {
104
+ return new Index(native_1.Index.fts(options?.withPositions));
105
+ }
106
+ /**
107
+ *
108
+ * Create a hnswpq index
109
+ *
110
+ */
111
+ static hnswPq(options) {
112
+ return new Index(native_1.Index.hnswPq(options?.distanceType, options?.numPartitions, options?.numSubVectors, options?.maxIterations, options?.sampleRate, options?.m, options?.efConstruction));
113
+ }
114
+ /**
115
+ *
116
+ * Create a hnswsq index
117
+ *
118
+ */
119
+ static hnswSq(options) {
120
+ return new Index(native_1.Index.hnswSq(options?.distanceType, options?.numPartitions, options?.maxIterations, options?.sampleRate, options?.m, options?.efConstruction));
105
121
  }
106
122
  }
107
123
  exports.Index = Index;
package/dist/native.d.ts CHANGED
@@ -138,8 +138,8 @@ export class Connection {
138
138
  * - buf: The buffer containing the IPC file.
139
139
  *
140
140
  */
141
- createTable(name: string, buf: Buffer, mode: string, storageOptions?: Record<string, string> | undefined | null, dataStorageOptions?: string | undefined | null): Promise<Table>
142
- createEmptyTable(name: string, schemaBuf: Buffer, mode: string, storageOptions?: Record<string, string> | undefined | null, dataStorageOptions?: string | undefined | null): Promise<Table>
141
+ createTable(name: string, buf: Buffer, mode: string, storageOptions?: Record<string, string> | undefined | null, dataStorageOptions?: string | undefined | null, enableV2ManifestPaths?: boolean | undefined | null): Promise<Table>
142
+ createEmptyTable(name: string, schemaBuf: Buffer, mode: string, storageOptions?: Record<string, string> | undefined | null, dataStorageOptions?: string | undefined | null, enableV2ManifestPaths?: boolean | undefined | null): Promise<Table>
143
143
  openTable(name: string, storageOptions?: Record<string, string> | undefined | null, indexCacheSize?: number | undefined | null): Promise<Table>
144
144
  /** Drop table with the name. Or raise an error if the table does not exist. */
145
145
  dropTable(name: string): Promise<void>
@@ -149,7 +149,9 @@ export class Index {
149
149
  static btree(): Index
150
150
  static bitmap(): Index
151
151
  static labelList(): Index
152
- static fts(): Index
152
+ static fts(withPosition?: boolean | undefined | null): Index
153
+ static hnswPq(distanceType?: string | undefined | null, numPartitions?: number | undefined | null, numSubVectors?: number | undefined | null, maxIterations?: number | undefined | null, sampleRate?: number | undefined | null, m?: number | undefined | null, efConstruction?: number | undefined | null): Index
154
+ static hnswSq(distanceType?: string | undefined | null, numPartitions?: number | undefined | null, maxIterations?: number | undefined | null, sampleRate?: number | undefined | null, m?: number | undefined | null, efConstruction?: number | undefined | null): Index
153
155
  }
154
156
  /** Typescript-style Async Iterator over RecordBatches */
155
157
  export class RecordBatchIterator {
@@ -168,6 +170,7 @@ export class Query {
168
170
  select(columns: Array<[string, string]>): void
169
171
  selectColumns(columns: Array<string>): void
170
172
  limit(limit: number): void
173
+ offset(offset: number): void
171
174
  nearestTo(vector: Float32Array): VectorQuery
172
175
  execute(maxBatchLength?: number | undefined | null): Promise<RecordBatchIterator>
173
176
  explainPlan(verbose: boolean): Promise<string>
@@ -184,6 +187,7 @@ export class VectorQuery {
184
187
  select(columns: Array<[string, string]>): void
185
188
  selectColumns(columns: Array<string>): void
186
189
  limit(limit: number): void
190
+ offset(offset: number): void
187
191
  execute(maxBatchLength?: number | undefined | null): Promise<RecordBatchIterator>
188
192
  explainPlan(verbose: boolean): Promise<string>
189
193
  }
@@ -212,4 +216,6 @@ export class Table {
212
216
  listIndices(): Promise<Array<IndexConfig>>
213
217
  indexStats(indexName: string): Promise<IndexStatistics | null>
214
218
  mergeInsert(on: Array<string>): NativeMergeInsertBuilder
219
+ usesV2ManifestPaths(): Promise<boolean>
220
+ migrateManifestPathsV2(): Promise<void>
215
221
  }
package/dist/query.d.ts CHANGED
@@ -94,6 +94,7 @@ export declare class QueryBase<NativeQueryType extends NativeQuery | NativeVecto
94
94
  * called then every valid row from the table will be returned.
95
95
  */
96
96
  limit(limit: number): this;
97
+ offset(offset: number): this;
97
98
  protected nativeExecute(options?: Partial<QueryExecutionOptions>): Promise<NativeBatchIterator>;
98
99
  /**
99
100
  * Execute the query and return the results as an @see {@link AsyncIterator}
package/dist/query.js CHANGED
@@ -176,6 +176,10 @@ class QueryBase {
176
176
  this.doCall((inner) => inner.limit(limit));
177
177
  return this;
178
178
  }
179
+ offset(offset) {
180
+ this.doCall((inner) => inner.offset(offset));
181
+ return this;
182
+ }
179
183
  nativeExecute(options) {
180
184
  if (this.inner instanceof Promise) {
181
185
  return this.inner.then((inner) => inner.execute(options?.maxBatchLength));
package/dist/table.d.ts CHANGED
@@ -391,4 +391,25 @@ export declare class LocalTable extends Table {
391
391
  toArrow(): Promise<ArrowTable>;
392
392
  indexStats(name: string): Promise<IndexStatistics | undefined>;
393
393
  mergeInsert(on: string | string[]): MergeInsertBuilder;
394
+ /**
395
+ * Check if the table uses the new manifest path scheme.
396
+ *
397
+ * This function will return true if the table uses the V2 manifest
398
+ * path scheme.
399
+ */
400
+ usesV2ManifestPaths(): Promise<boolean>;
401
+ /**
402
+ * Migrate the table to use the new manifest path scheme.
403
+ *
404
+ * This function will rename all V1 manifests to V2 manifest paths.
405
+ * These paths provide more efficient opening of datasets with many versions
406
+ * on object stores.
407
+ *
408
+ * This function is idempotent, and can be run multiple times without
409
+ * changing the state of the object store.
410
+ *
411
+ * However, it should not be run while other concurrent operations are happening.
412
+ * And it should also run until completion before resuming other operations.
413
+ */
414
+ migrateManifestPathsV2(): Promise<void>;
394
415
  }
package/dist/table.js CHANGED
@@ -240,5 +240,30 @@ class LocalTable extends Table {
240
240
  on = Array.isArray(on) ? on : [on];
241
241
  return new merge_1.MergeInsertBuilder(this.inner.mergeInsert(on));
242
242
  }
243
+ /**
244
+ * Check if the table uses the new manifest path scheme.
245
+ *
246
+ * This function will return true if the table uses the V2 manifest
247
+ * path scheme.
248
+ */
249
+ async usesV2ManifestPaths() {
250
+ return await this.inner.usesV2ManifestPaths();
251
+ }
252
+ /**
253
+ * Migrate the table to use the new manifest path scheme.
254
+ *
255
+ * This function will rename all V1 manifests to V2 manifest paths.
256
+ * These paths provide more efficient opening of datasets with many versions
257
+ * on object stores.
258
+ *
259
+ * This function is idempotent, and can be run multiple times without
260
+ * changing the state of the object store.
261
+ *
262
+ * However, it should not be run while other concurrent operations are happening.
263
+ * And it should also run until completion before resuming other operations.
264
+ */
265
+ async migrateManifestPathsV2() {
266
+ await this.inner.migrateManifestPathsV2();
267
+ }
243
268
  }
244
269
  exports.LocalTable = LocalTable;
package/package.json CHANGED
@@ -10,7 +10,7 @@
10
10
  "vector database",
11
11
  "ann"
12
12
  ],
13
- "version": "0.10.0-beta.1",
13
+ "version": "0.10.0",
14
14
  "main": "dist/index.js",
15
15
  "exports": {
16
16
  ".": "./dist/index.js",
@@ -92,11 +92,11 @@
92
92
  "reflect-metadata": "^0.2.2"
93
93
  },
94
94
  "optionalDependencies": {
95
- "@lancedb/lancedb-darwin-arm64": "0.10.0-beta.1",
96
- "@lancedb/lancedb-linux-arm64-gnu": "0.10.0-beta.1",
97
- "@lancedb/lancedb-darwin-x64": "0.10.0-beta.1",
98
- "@lancedb/lancedb-linux-x64-gnu": "0.10.0-beta.1",
99
- "@lancedb/lancedb-win32-x64-msvc": "0.10.0-beta.1"
95
+ "@lancedb/lancedb-darwin-arm64": "0.10.0",
96
+ "@lancedb/lancedb-linux-arm64-gnu": "0.10.0",
97
+ "@lancedb/lancedb-darwin-x64": "0.10.0",
98
+ "@lancedb/lancedb-linux-x64-gnu": "0.10.0",
99
+ "@lancedb/lancedb-win32-x64-msvc": "0.10.0"
100
100
  },
101
101
  "peerDependencies": {
102
102
  "apache-arrow": ">=13.0.0 <=17.0.0"