@langchain/community
Version:
Third-party integrations for LangChain.js
1 lines • 4.92 kB
Source Map (JSON)
{"version":3,"file":"gradient_ai.cjs","names":["Embeddings","Gradient"],"sources":["../../src/embeddings/gradient_ai.ts"],"sourcesContent":["import { Gradient } from \"@gradientai/nodejs-sdk\";\nimport { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Embeddings, EmbeddingsParams } from \"@langchain/core/embeddings\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\n\n/**\n * Interface for GradientEmbeddings parameters. Extends EmbeddingsParams and\n * defines additional parameters specific to the GradientEmbeddings class.\n */\nexport interface GradientEmbeddingsParams extends EmbeddingsParams {\n /**\n * Gradient AI Access Token.\n * Provide Access Token if you do not wish to automatically pull from env.\n */\n gradientAccessKey?: string;\n /**\n * Gradient Workspace Id.\n * Provide workspace id if you do not wish to automatically pull from env.\n */\n workspaceId?: string;\n}\n\n/**\n * Class for generating embeddings using the Gradient AI's API. Extends the\n * Embeddings class and implements GradientEmbeddingsParams and\n */\nexport class GradientEmbeddings\n extends Embeddings\n implements GradientEmbeddingsParams\n{\n gradientAccessKey?: string;\n\n workspaceId?: string;\n\n batchSize = 128;\n\n // oxlint-disable-next-line typescript/no-explicit-any\n model: any;\n\n constructor(fields: GradientEmbeddingsParams) {\n super(fields);\n\n this.gradientAccessKey =\n fields?.gradientAccessKey ??\n getEnvironmentVariable(\"GRADIENT_ACCESS_TOKEN\");\n this.workspaceId =\n fields?.workspaceId ?? getEnvironmentVariable(\"GRADIENT_WORKSPACE_ID\");\n\n if (!this.gradientAccessKey) {\n throw new Error(\"Missing Gradient AI Access Token\");\n }\n\n if (!this.workspaceId) {\n throw new Error(\"Missing Gradient AI Workspace ID\");\n }\n }\n\n /**\n * Method to generate embeddings for an array of documents. Splits the\n * documents into batches and makes requests to the Gradient API to generate\n * embeddings.\n * @param texts Array of documents to generate embeddings for.\n * @returns Promise that resolves to a 2D array of embeddings for each document.\n */\n async embedDocuments(texts: string[]): Promise<number[][]> {\n await this.setModel();\n\n const mappedTexts = texts.map((text) => ({ input: text }));\n\n const batches = chunkArray(mappedTexts, this.batchSize);\n\n const batchRequests = batches.map((batch) =>\n this.caller.call(async () =>\n this.model.generateEmbeddings({\n inputs: batch,\n })\n )\n );\n const batchResponses = await Promise.all(batchRequests);\n\n const embeddings: number[][] = [];\n for (let i = 0; i < batchResponses.length; i += 1) {\n const batch = batches[i];\n const { embeddings: batchResponse } = batchResponses[i];\n for (let j = 0; j < batch.length; j += 1) {\n embeddings.push(batchResponse[j].embedding);\n }\n }\n return embeddings;\n }\n\n /**\n * Method to generate an embedding for a single document. Calls the\n * embedDocuments method with the document as the input.\n * @param text Document to generate an embedding for.\n * @returns Promise that resolves to an embedding for the document.\n */\n async embedQuery(text: string): Promise<number[]> {\n const data = await this.embedDocuments([text]);\n return data[0];\n }\n\n /**\n * Method to set the model to use for generating embeddings.\n * @sets the class' `model` value to that of the retrieved Embeddings Model.\n */\n async setModel() {\n if (this.model) return;\n\n const gradient = new Gradient({\n accessToken: this.gradientAccessKey,\n workspaceId: this.workspaceId,\n });\n this.model = await gradient.getEmbeddingsModel({\n slug: \"bge-large\",\n });\n }\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,IAAa,qBAAb,cACUA,2BAAAA,WAEV;CACE;CAEA;CAEA,YAAY;CAGZ;CAEA,YAAY,QAAkC;AAC5C,QAAM,OAAO;AAEb,OAAK,oBACH,QAAQ,sBAAA,GAAA,0BAAA,wBACe,wBAAwB;AACjD,OAAK,cACH,QAAQ,gBAAA,GAAA,0BAAA,wBAAsC,wBAAwB;AAExE,MAAI,CAAC,KAAK,kBACR,OAAM,IAAI,MAAM,mCAAmC;AAGrD,MAAI,CAAC,KAAK,YACR,OAAM,IAAI,MAAM,mCAAmC;;;;;;;;;CAWvD,MAAM,eAAe,OAAsC;AACzD,QAAM,KAAK,UAAU;EAIrB,MAAM,WAAA,GAAA,kCAAA,YAFc,MAAM,KAAK,UAAU,EAAE,OAAO,MAAM,EAAE,EAElB,KAAK,UAAU;EAEvD,MAAM,gBAAgB,QAAQ,KAAK,UACjC,KAAK,OAAO,KAAK,YACf,KAAK,MAAM,mBAAmB,EAC5B,QAAQ,OACT,CAAC,CACH,CACF;EACD,MAAM,iBAAiB,MAAM,QAAQ,IAAI,cAAc;EAEvD,MAAM,aAAyB,EAAE;AACjC,OAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK,GAAG;GACjD,MAAM,QAAQ,QAAQ;GACtB,MAAM,EAAE,YAAY,kBAAkB,eAAe;AACrD,QAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK,EACrC,YAAW,KAAK,cAAc,GAAG,UAAU;;AAG/C,SAAO;;;;;;;;CAST,MAAM,WAAW,MAAiC;AAEhD,UADa,MAAM,KAAK,eAAe,CAAC,KAAK,CAAC,EAClC;;;;;;CAOd,MAAM,WAAW;AACf,MAAI,KAAK,MAAO;AAMhB,OAAK,QAAQ,MAJI,IAAIC,uBAAAA,SAAS;GAC5B,aAAa,KAAK;GAClB,aAAa,KAAK;GACnB,CAAC,CAC0B,mBAAmB,EAC7C,MAAM,aACP,CAAC"}