{"version":3,"file":"embeddings.cjs","names":["Embeddings"],"sources":["../src/embeddings.ts"],"sourcesContent":["import { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Embeddings, EmbeddingsParams } from \"@langchain/core/embeddings\";\n\nconst apiUrl =\n  \"https://llm.api.cloud.yandex.net/foundationModels/v1/textEmbedding\";\n\nexport interface YandexGPTEmbeddingsParams extends EmbeddingsParams {\n  /** Model name to use. */\n  model?: string;\n\n  /** Model version to use. */\n  modelVersion?: string;\n\n  /** Model version to use. */\n\n  /** Model URI to use. */\n  modelURI?: string;\n\n  /** Yandex Cloud Folder ID. */\n  folderID?: string;\n\n  /**\n   * Yandex Cloud Api Key for service account\n   * with the `ai.languageModels.user` role.\n   */\n  apiKey?: string;\n\n  /**\n   * Yandex Cloud IAM token for service or user account\n   * with the `ai.languageModels.user` role.\n   */\n  iamToken?: string;\n}\n\n/**\n * Class for generating embeddings using the YandexGPT Foundation models API. Extends the\n * Embeddings class and implements YandexGPTEmbeddings\n */\nexport class YandexGPTEmbeddings\n  extends Embeddings\n  implements YandexGPTEmbeddingsParams\n{\n  model = \"text-search-query\";\n\n  modelVersion = \"latest\";\n\n  modelURI?: string;\n\n  apiKey?: string;\n\n  iamToken?: string;\n\n  folderID?: string;\n\n  constructor(fields?: YandexGPTEmbeddingsParams) {\n    super(fields ?? {});\n\n    const apiKey = fields?.apiKey ?? getEnvironmentVariable(\"YC_API_KEY\");\n\n    const iamToken = fields?.iamToken ?? getEnvironmentVariable(\"YC_IAM_TOKEN\");\n\n    const folderID = fields?.folderID ?? getEnvironmentVariable(\"YC_FOLDER_ID\");\n\n    if (apiKey === undefined && iamToken === undefined) {\n      throw new Error(\n        \"Please set the YC_API_KEY or YC_IAM_TOKEN environment variable or pass it to the constructor as the apiKey or iamToken field.\"\n      );\n    }\n\n    this.modelURI = fields?.modelURI;\n    this.apiKey = apiKey;\n    this.iamToken = iamToken;\n    this.folderID = folderID;\n    this.model = fields?.model ?? this.model;\n    this.modelVersion = fields?.modelVersion ?? this.modelVersion;\n\n    if (this.modelURI === undefined && folderID === undefined) {\n      throw new Error(\n        \"Please set the YC_FOLDER_ID environment variable or pass Yandex GPT model URI to the constructor as the modelURI field.\"\n      );\n    }\n\n    if (!this.modelURI) {\n      this.modelURI = `emb://${this.folderID}/${this.model}/${this.modelVersion}`;\n    }\n  }\n\n  get lc_secrets(): { [key: string]: string } | undefined {\n    return {\n      apiKey: \"YC_API_KEY\",\n      iamToken: \"YC_IAM_TOKEN\",\n      folderID: \"YC_FOLDER_ID\",\n    };\n  }\n\n  /**\n   * Method to generate embeddings for an array of documents.\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    return this.embeddingWithRetry(texts);\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   * Private method to make a request to the YandexGPT API to generate\n   * embeddings. Handles the retry logic and returns the embeddings from the API.\n   * @param {string | Array<string>} texts Array of documents to generate embeddings for.\n   * @returns {Promise<MistralAIEmbeddingsResult>} Promise that resolves to a 2D array of embeddings for each document.\n   */\n  private async embeddingWithRetry(texts: string[]): Promise<number[][]> {\n    return this.caller.call(async () => {\n      const headers = {\n        \"Content-Type\": \"application/json\",\n        Authorization: \"\",\n        \"x-folder-id\": \"\",\n      };\n      if (this.apiKey !== undefined) {\n        headers.Authorization = `Api-Key ${this.apiKey}`;\n      } else {\n        headers.Authorization = `Bearer ${this.iamToken}`;\n        if (this.folderID !== undefined) {\n          headers[\"x-folder-id\"] = this.folderID;\n        }\n      }\n\n      const embeddings: number[][] = [];\n\n      for (const text of texts) {\n        const bodyData = {\n          modelUri: this.modelURI,\n          text,\n        };\n\n        try {\n          const response = await fetch(apiUrl, {\n            method: \"POST\",\n            headers,\n            body: JSON.stringify(bodyData),\n          });\n          if (!response.ok) {\n            throw new Error(\n              `Failed to fetch ${apiUrl} from YandexGPT: ${response.status}`\n            );\n          }\n\n          const responseData = await response.json();\n\n          embeddings.push(responseData.embedding);\n        } catch (error) {\n          throw new Error(`Failed to fetch ${apiUrl} from YandexGPT ${error}`);\n        }\n      }\n\n      return embeddings;\n    });\n  }\n}\n"],"mappings":";;;;;AAGA,MAAM,SACJ;;;;;AAkCF,IAAa,sBAAb,cACUA,sCAEV;CACE,QAAQ;CAER,eAAe;CAEf;CAEA;CAEA;CAEA;CAEA,YAAY,QAAoC;AAC9C,QAAM,UAAU,EAAE,CAAC;EAEnB,MAAM,SAAS,QAAQ,gEAAiC,aAAa;EAErE,MAAM,WAAW,QAAQ,kEAAmC,eAAe;EAE3E,MAAM,WAAW,QAAQ,kEAAmC,eAAe;AAE3E,MAAI,WAAW,UAAa,aAAa,OACvC,OAAM,IAAI,MACR,gIACD;AAGH,OAAK,WAAW,QAAQ;AACxB,OAAK,SAAS;AACd,OAAK,WAAW;AAChB,OAAK,WAAW;AAChB,OAAK,QAAQ,QAAQ,SAAS,KAAK;AACnC,OAAK,eAAe,QAAQ,gBAAgB,KAAK;AAEjD,MAAI,KAAK,aAAa,UAAa,aAAa,OAC9C,OAAM,IAAI,MACR,0HACD;AAGH,MAAI,CAAC,KAAK,SACR,MAAK,WAAW,SAAS,KAAK,SAAS,GAAG,KAAK,MAAM,GAAG,KAAK;;CAIjE,IAAI,aAAoD;AACtD,SAAO;GACL,QAAQ;GACR,UAAU;GACV,UAAU;GACX;;;;;;;CAQH,MAAM,eAAe,OAAsC;AACzD,SAAO,KAAK,mBAAmB,MAAM;;;;;;;;CASvC,MAAM,WAAW,MAAiC;AAEhD,UADa,MAAM,KAAK,eAAe,CAAC,KAAK,CAAC,EAClC;;;;;;;;CASd,MAAc,mBAAmB,OAAsC;AACrE,SAAO,KAAK,OAAO,KAAK,YAAY;GAClC,MAAM,UAAU;IACd,gBAAgB;IAChB,eAAe;IACf,eAAe;IAChB;AACD,OAAI,KAAK,WAAW,OAClB,SAAQ,gBAAgB,WAAW,KAAK;QACnC;AACL,YAAQ,gBAAgB,UAAU,KAAK;AACvC,QAAI,KAAK,aAAa,OACpB,SAAQ,iBAAiB,KAAK;;GAIlC,MAAM,aAAyB,EAAE;AAEjC,QAAK,MAAM,QAAQ,OAAO;IACxB,MAAM,WAAW;KACf,UAAU,KAAK;KACf;KACD;AAED,QAAI;KACF,MAAM,WAAW,MAAM,MAAM,QAAQ;MACnC,QAAQ;MACR;MACA,MAAM,KAAK,UAAU,SAAS;MAC/B,CAAC;AACF,SAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MACR,mBAAmB,OAAO,mBAAmB,SAAS,SACvD;KAGH,MAAM,eAAe,MAAM,SAAS,MAAM;AAE1C,gBAAW,KAAK,aAAa,UAAU;aAChC,OAAO;AACd,WAAM,IAAI,MAAM,mBAAmB,OAAO,kBAAkB,QAAQ;;;AAIxE,UAAO;IACP"}