fix(nodejs): lancedb arrow dependency (#1458)

previously if you tried to install both vectordb and @lancedb/lancedb,
you would get a peer dependency issue due to `vectordb` requiring
`14.0.2` and `@lancedb/lancedb` requiring `15.0.0`. now
`@lancedb/lancedb` should just work with any arrow version 13-17
This commit is contained in:
Cory Grinstead
2024-07-19 11:21:55 -05:00
committed by GitHub
parent ed7bd45c17
commit 3b88f15774
7 changed files with 1089 additions and 839 deletions

View File

@@ -103,12 +103,25 @@ export type IntoVector =
| number[]
| Promise<Float32Array | Float64Array | number[]>;
export type FloatLike =
| import("apache-arrow-13").Float
| import("apache-arrow-14").Float
| import("apache-arrow-15").Float
| import("apache-arrow-16").Float
| import("apache-arrow-17").Float;
export type DataTypeLike =
| import("apache-arrow-13").DataType
| import("apache-arrow-14").DataType
| import("apache-arrow-15").DataType
| import("apache-arrow-16").DataType
| import("apache-arrow-17").DataType;
export function isArrowTable(value: object): value is TableLike {
if (value instanceof ArrowTable) return true;
return "schema" in value && "batches" in value;
}
export function isDataType(value: unknown): value is DataType {
export function isDataType(value: unknown): value is DataTypeLike {
return (
value instanceof DataType ||
DataType.isNull(value) ||
@@ -743,7 +756,7 @@ export async function convertToTable(
/** Creates the Arrow Type for a Vector column with dimension `dim` */
export function newVectorType<T extends Float>(
dim: number,
innerType: T,
innerType: unknown,
): FixedSizeList<T> {
// in Lance we always default to have the elements nullable, so we need to set it to true
// otherwise we often get schema mismatches because the stored data always has schema with nullable elements

View File

@@ -15,10 +15,11 @@
import "reflect-metadata";
import {
DataType,
DataTypeLike,
Field,
FixedSizeList,
Float,
Float32,
FloatLike,
type IntoVector,
isDataType,
isFixedSizeList,
@@ -89,8 +90,8 @@ export abstract class EmbeddingFunction<
* @see {@link lancedb.LanceSchema}
*/
sourceField(
optionsOrDatatype: Partial<FieldOptions> | DataType,
): [DataType, Map<string, EmbeddingFunction>] {
optionsOrDatatype: Partial<FieldOptions> | DataTypeLike,
): [DataTypeLike, Map<string, EmbeddingFunction>] {
let datatype = isDataType(optionsOrDatatype)
? optionsOrDatatype
: optionsOrDatatype?.datatype;
@@ -169,7 +170,7 @@ export abstract class EmbeddingFunction<
}
/** The datatype of the embeddings */
abstract embeddingDataType(): Float;
abstract embeddingDataType(): FloatLike;
/**
* Creates a vector representation for the given values.