{"version":3,"file":"premai.cjs","names":["Embeddings","Prem"],"sources":["../../src/embeddings/premai.ts"],"sourcesContent":["import { getEnvironmentVariable } from \"@langchain/core/utils/env\";\nimport { Embeddings, EmbeddingsParams } from \"@langchain/core/embeddings\";\nimport { chunkArray } from \"@langchain/core/utils/chunk_array\";\nimport Prem from \"@premai/prem-sdk\";\n\n/**\n * Interface for PremEmbeddings parameters. Extends EmbeddingsParams and\n * defines additional parameters specific to the PremEmbeddings class.\n */\nexport interface PremEmbeddingsParams extends EmbeddingsParams {\n  /**\n   * The Prem API key to use for requests.\n   * @default process.env.PREM_API_KEY\n   */\n  apiKey?: string;\n\n  baseUrl?: string;\n\n  /**\n   * The ID of the project to use.\n   */\n  project_id?: number | string;\n  /**\n   * The model to generate the embeddings.\n   */\n  model: string;\n\n  encoding_format?: (\"float\" | \"base64\") & string;\n\n  batchSize?: number;\n}\n\n/**\n * Class for generating embeddings using the Prem AI's API. Extends the\n * Embeddings class and implements PremEmbeddingsParams and\n */\nexport class PremEmbeddings extends Embeddings implements PremEmbeddingsParams {\n  client: Prem;\n\n  batchSize = 128;\n\n  apiKey?: string;\n\n  project_id: number;\n\n  model: string;\n\n  encoding_format?: (\"float\" | \"base64\") & string;\n\n  constructor(fields: PremEmbeddingsParams) {\n    super(fields);\n    const apiKey = fields?.apiKey || getEnvironmentVariable(\"PREM_API_KEY\");\n    if (!apiKey) {\n      throw new Error(\n        `Prem API key not found. Please set the PREM_API_KEY environment variable or provide the key into \"apiKey\"`\n      );\n    }\n\n    const projectId =\n      fields?.project_id ??\n      parseInt(getEnvironmentVariable(\"PREM_PROJECT_ID\") ?? \"-1\", 10);\n    if (!projectId || projectId === -1 || typeof projectId !== \"number\") {\n      throw new Error(\n        `Prem project ID not found. Please set the PREM_PROJECT_ID environment variable or provide the key into \"project_id\"`\n      );\n    }\n\n    this.client = new Prem({\n      apiKey,\n    });\n    this.project_id = projectId;\n    this.model = fields.model ?? this.model;\n    this.encoding_format = fields.encoding_format ?? this.encoding_format;\n  }\n\n  /**\n   * Method to generate embeddings for an array of documents. Splits the\n   * documents into batches and makes requests to the Prem 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    const mappedTexts = texts.map((text) => text);\n\n    const batches = chunkArray(mappedTexts, this.batchSize);\n\n    const batchRequests = batches.map((batch) =>\n      this.caller.call(async () =>\n        this.client.embeddings.create({\n          input: batch,\n          model: this.model,\n          encoding_format: this.encoding_format,\n          project_id: this.project_id,\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 { data: 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"],"mappings":";;;;;;;;;;;;;AAoCA,IAAa,iBAAb,cAAoCA,2BAAAA,WAA2C;CAC7E;CAEA,YAAY;CAEZ;CAEA;CAEA;CAEA;CAEA,YAAY,QAA8B;AACxC,QAAM,OAAO;EACb,MAAM,SAAS,QAAQ,WAAA,GAAA,0BAAA,wBAAiC,eAAe;AACvE,MAAI,CAAC,OACH,OAAM,IAAI,MACR,4GACD;EAGH,MAAM,YACJ,QAAQ,cACR,UAAA,GAAA,0BAAA,wBAAgC,kBAAkB,IAAI,MAAM,GAAG;AACjE,MAAI,CAAC,aAAa,cAAc,MAAM,OAAO,cAAc,SACzD,OAAM,IAAI,MACR,sHACD;AAGH,OAAK,SAAS,IAAIC,iBAAAA,QAAK,EACrB,QACD,CAAC;AACF,OAAK,aAAa;AAClB,OAAK,QAAQ,OAAO,SAAS,KAAK;AAClC,OAAK,kBAAkB,OAAO,mBAAmB,KAAK;;;;;;;;;CAUxD,MAAM,eAAe,OAAsC;EAGzD,MAAM,WAAA,GAAA,kCAAA,YAFc,MAAM,KAAK,SAAS,KAAK,EAEL,KAAK,UAAU;EAEvD,MAAM,gBAAgB,QAAQ,KAAK,UACjC,KAAK,OAAO,KAAK,YACf,KAAK,OAAO,WAAW,OAAO;GAC5B,OAAO;GACP,OAAO,KAAK;GACZ,iBAAiB,KAAK;GACtB,YAAY,KAAK;GAClB,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,MAAM,kBAAkB,eAAe;AAC/C,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"}