add support for openai SDK version ^4.24.1

This commit is contained in:
Andrew Miracle
2023-12-25 20:29:54 +00:00
parent ee0f0611d9
commit 38a4524893
4 changed files with 409 additions and 46 deletions

View File

@@ -13,36 +13,47 @@
// limitations under the License.
import { type EmbeddingFunction } from '../index'
import type OpenAI from 'openai'
export class OpenAIEmbeddingFunction implements EmbeddingFunction<string> {
private readonly _openai: any
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 using npm install openai')
throw new Error('please install openai@^4.24.1 using npm install openai')
}
this.sourceColumn = sourceColumn
const configuration = new openai.Configuration({
const configuration = {
apiKey: openAIKey
})
this._openai = new openai.OpenAIApi(configuration)
};
this._openai = new openai(configuration);
this._modelName = modelName
console.log({ op: this._openai.embeddings.create, md: this._modelName })
}
async embed (data: string[]): Promise<number[][]> {
const response = await this._openai.createEmbedding({
const response = await this._openai.embeddings.create({
model: this._modelName,
input: data
})
console.log({ response })
const embeddings: number[][] = []
for (let i = 0; i < response.data.data.length; i++) {
embeddings.push(response.data.data[i].embedding as number[])
for (let i = 0; i < response.data.length; i++) {
embeddings.push(response.data[i].embedding as number[])
}
return embeddings
}