{"version":3,"file":"llama_cpp.cjs","names":["Embeddings","inputs: LlamaCppEmbeddingsParams","inputs: LlamaBaseCppInputs","createLlamaModel","createLlamaEmbeddingContext","texts: string[]","embeddings: number[][]","text: string"],"sources":["../../src/embeddings/llama_cpp.ts"],"sourcesContent":["import { LlamaModel, LlamaEmbeddingContext, getLlama } from \"node-llama-cpp\";\nimport { Embeddings, type EmbeddingsParams } from \"@langchain/core/embeddings\";\nimport {\n  LlamaBaseCppInputs,\n  createLlamaModel,\n  createLlamaEmbeddingContext,\n} from \"../utils/llama_cpp.js\";\n\n/**\n * Note that the modelPath is the only required parameter. For testing you\n * can set this in the environment variable `LLAMA_PATH`.\n */\nexport interface LlamaCppEmbeddingsParams\n  extends LlamaBaseCppInputs,\n    EmbeddingsParams {}\n\n/**\n * @example\n * ```typescript\n * // Initialize LlamaCppEmbeddings with the path to the model file\n * const embeddings = await LlamaCppEmbeddings.initialize({\n *   modelPath: llamaPath,\n * });\n *\n * // Embed a query string using the Llama embeddings\n * const res = embeddings.embedQuery(\"Hello Llama!\");\n *\n * // Output the resulting embeddings\n * console.log(res);\n *\n * ```\n */\nexport class LlamaCppEmbeddings extends Embeddings {\n  _model: LlamaModel;\n\n  _embeddingContext: LlamaEmbeddingContext;\n\n  public constructor(inputs: LlamaCppEmbeddingsParams) {\n    super(inputs);\n    const _inputs = inputs;\n    _inputs.embedding = true;\n  }\n\n  /**\n   * Initializes the llama_cpp model for usage in the embeddings wrapper.\n   * @param inputs - the inputs passed onto the model.\n   * @returns A Promise that resolves to the LlamaCppEmbeddings type class.\n   */\n  public static async initialize(\n    inputs: LlamaBaseCppInputs\n  ): Promise<LlamaCppEmbeddings> {\n    const instance = new LlamaCppEmbeddings(inputs);\n    const llama = await getLlama();\n\n    instance._model = await createLlamaModel(inputs, llama);\n    instance._embeddingContext = await createLlamaEmbeddingContext(\n      instance._model,\n      inputs\n    );\n\n    return instance;\n  }\n\n  /**\n   * Generates embeddings for an array of texts.\n   * @param texts - An array of strings to generate embeddings for.\n   * @returns A Promise that resolves to an array of embeddings.\n   */\n  async embedDocuments(texts: string[]): Promise<number[][]> {\n    const embeddings: number[][] = [];\n\n    for (const text of texts) {\n      const embedding = await this.caller.call(() =>\n        this._embeddingContext.getEmbeddingFor(text)\n      );\n      embeddings.push(Array.from(embedding.vector));\n    }\n\n    return embeddings;\n  }\n\n  /**\n   * Generates an embedding for a single text.\n   * @param text - A string to generate an embedding for.\n   * @returns A Promise that resolves to an array of numbers representing the embedding.\n   */\n  async embedQuery(text: string): Promise<number[]> {\n    const embedding = await this.caller.call(() =>\n      this._embeddingContext.getEmbeddingFor(text)\n    );\n    return Array.from(embedding.vector);\n  }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAgCA,IAAa,qBAAb,MAAa,2BAA2BA,uCAAW;CACjD;CAEA;CAEA,AAAO,YAAYC,QAAkC;EACnD,MAAM,OAAO;EACb,MAAM,UAAU;EAChB,QAAQ,YAAY;CACrB;;;;;;CAOD,aAAoB,WAClBC,QAC6B;EAC7B,MAAM,WAAW,IAAI,mBAAmB;EACxC,MAAM,QAAQ,oCAAgB;EAE9B,SAAS,SAAS,MAAMC,mCAAiB,QAAQ,MAAM;EACvD,SAAS,oBAAoB,MAAMC,8CACjC,SAAS,QACT,OACD;AAED,SAAO;CACR;;;;;;CAOD,MAAM,eAAeC,OAAsC;EACzD,MAAMC,aAAyB,CAAE;AAEjC,OAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,YAAY,MAAM,KAAK,OAAO,KAAK,MACvC,KAAK,kBAAkB,gBAAgB,KAAK,CAC7C;GACD,WAAW,KAAK,MAAM,KAAK,UAAU,OAAO,CAAC;EAC9C;AAED,SAAO;CACR;;;;;;CAOD,MAAM,WAAWC,MAAiC;EAChD,MAAM,YAAY,MAAM,KAAK,OAAO,KAAK,MACvC,KAAK,kBAAkB,gBAAgB,KAAK,CAC7C;AACD,SAAO,MAAM,KAAK,UAAU,OAAO;CACpC;AACF"}