mirror of
https://github.com/lancedb/lancedb.git
synced 2026-01-10 13:52:58 +00:00
The eslint rules specify some formatting requirements that are rather strict and conflict with vscode's default formatter. I was unable to get auto-formatting to setup correctly. Also, eslint has quite recently [given up on formatting](https://eslint.org/blog/2023/10/deprecating-formatting-rules/) and recommends using a 3rd party formatter. This PR adds prettier as the formatter. It restores the eslint rules to their defaults. This does mean we now have the "no explicit any" check back on. I know that rule is pedantic but it did help me catch a few corner cases in type testing that weren't covered in the current code. Leaving in draft as this is dependent on other PRs.
62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
// Copyright 2023 Lance Developers.
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
import { type EmbeddingFunction } from "./embedding_function";
|
|
import type OpenAI from "openai";
|
|
|
|
export class OpenAIEmbeddingFunction implements EmbeddingFunction<string> {
|
|
private readonly _openai: OpenAI;
|
|
private readonly _modelName: string;
|
|
|
|
constructor(
|
|
sourceColumn: string,
|
|
openAIKey: string,
|
|
modelName: string = "text-embedding-ada-002",
|
|
) {
|
|
/**
|
|
* @type {import("openai").default}
|
|
*/
|
|
let Openai;
|
|
try {
|
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
Openai = require("openai");
|
|
} catch {
|
|
throw new Error("please install openai@^4.24.1 using npm install openai");
|
|
}
|
|
|
|
this.sourceColumn = sourceColumn;
|
|
const configuration = {
|
|
apiKey: openAIKey,
|
|
};
|
|
|
|
this._openai = new Openai(configuration);
|
|
this._modelName = modelName;
|
|
}
|
|
|
|
async embed(data: string[]): Promise<number[][]> {
|
|
const response = await this._openai.embeddings.create({
|
|
model: this._modelName,
|
|
input: data,
|
|
});
|
|
|
|
const embeddings: number[][] = [];
|
|
for (let i = 0; i < response.data.length; i++) {
|
|
embeddings.push(response.data[i].embedding);
|
|
}
|
|
return embeddings;
|
|
}
|
|
|
|
sourceColumn: string;
|
|
}
|