Spaces:
Runtime error
Runtime error
| import { IEmbeddingFunction } from "./IEmbeddingFunction"; | |
| let googleGenAiApi: any; | |
| export class GoogleGenerativeAiEmbeddingFunction implements IEmbeddingFunction { | |
| private api_key: string; | |
| private model: string; | |
| private googleGenAiApi?: any; | |
| private taskType: string; | |
| constructor({ googleApiKey, model, taskType }: { googleApiKey: string, model?: string, taskType?: string }) { | |
| // we used to construct the client here, but we need to async import the types | |
| // for the openai npm package, and the constructor can not be async | |
| this.api_key = googleApiKey; | |
| this.model = model || "embedding-001"; | |
| this.taskType = taskType || "RETRIEVAL_DOCUMENT"; | |
| } | |
| private async loadClient() { | |
| if(this.googleGenAiApi) return; | |
| try { | |
| // eslint-disable-next-line global-require,import/no-extraneous-dependencies | |
| const { googleGenAi } = await GoogleGenerativeAiEmbeddingFunction.import(); | |
| googleGenAiApi = googleGenAi; | |
| // googleGenAiApi.init(this.api_key); | |
| googleGenAiApi = new googleGenAiApi(this.api_key); | |
| } catch (_a) { | |
| // @ts-ignore | |
| if (_a.code === 'MODULE_NOT_FOUND') { | |
| throw new Error("Please install the @google/generative-ai package to use the GoogleGenerativeAiEmbeddingFunction, `npm install -S @google/generative-ai`"); | |
| } | |
| throw _a; // Re-throw other errors | |
| } | |
| this.googleGenAiApi = googleGenAiApi; | |
| } | |
| public async generate(texts: string[]) { | |
| await this.loadClient(); | |
| const model = this.googleGenAiApi.getGenerativeModel({ model: this.model}); | |
| const response = await model.batchEmbedContents({ | |
| requests: texts.map((t) => ({ | |
| content: { parts: [{ text: t }] }, | |
| taskType: this.taskType, | |
| })), | |
| }); | |
| const embeddings = response.embeddings.map((e: any) => e.values); | |
| return embeddings; | |
| } | |
| /** @ignore */ | |
| static async import(): Promise<{ | |
| // @ts-ignore | |
| googleGenAi: typeof import("@google/generative-ai"); | |
| }> { | |
| try { | |
| // @ts-ignore | |
| const { GoogleGenerativeAI } = await import("@google/generative-ai"); | |
| const googleGenAi = GoogleGenerativeAI; | |
| return { googleGenAi }; | |
| } catch (e) { | |
| throw new Error( | |
| "Please install @google/generative-ai as a dependency with, e.g. `yarn add @google/generative-ai`" | |
| ); | |
| } | |
| } | |
| } | |