{"version":3,"sources":["../../../src/adapters/ollama/llm.ts"],"names":["OllamaLLMOutput","BaseLLMOutput","results","constructor","result","register","getTextContent","finalResult","response","length","LLMOutputError","customMerge","value","oldValue","total_duration","load_duration","model","done","done_reason","created_at","eval_duration","prompt_eval_duration","prompt_eval_count","safeSum","eval_count","context","merge","other","Cache","getInstance","clear","push","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toString","OllamaLLM","LLM","emitter","Emitter","root","child","namespace","creator","client","parameters","registerClient","modelId","executionOptions","cache","Client","host","getEnv","_generate","input","options","run","signalRace","generate","prepareParameters","stream","signal","abort","_stream","chunk","aborted","throwIfAborted","version","config","getPropStrict","retrieveVersion","fetch","meta","show","extractModelMeta","embed","truncate","embeddings","tokenize","tokensCount","Math","ceil","overrides","prompt","raw","format","retrieveFormat","guided"],"mappings":"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","file":"llm.cjs","sourcesContent":["/**\n * Copyright 2025 IBM Corp.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *     http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { LLM, LLMEvents, LLMInput } from \"@/llms/llm.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport {\n  AsyncStream,\n  BaseLLMOutput,\n  BaseLLMTokenizeOutput,\n  EmbeddingOptions,\n  EmbeddingOutput,\n  ExecutionOptions,\n  GenerateOptions,\n  LLMCache,\n  LLMMeta,\n  LLMOutputError,\n  StreamGenerateOptions,\n} from \"@/llms/base.js\";\nimport {\n  Config,\n  GenerateRequest,\n  GenerateResponse,\n  Ollama as Client,\n  Options as Parameters,\n} from \"ollama\";\nimport { GetRunContext } from \"@/context.js\";\nimport { Cache } from \"@/cache/decoratorCache.js\";\nimport { safeSum } from \"@/internals/helpers/number.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { signalRace } from \"@/internals/helpers/promise.js\";\nimport { customMerge, getPropStrict } from \"@/internals/helpers/object.js\";\nimport {\n  extractModelMeta,\n  registerClient,\n  retrieveFormat,\n  retrieveVersion,\n} from \"@/adapters/ollama/shared.js\";\nimport { getEnv } from \"@/internals/env.js\";\n\ninterface Input {\n  modelId: string;\n  client?: Client;\n  parameters?: Partial<Parameters>;\n  executionOptions?: ExecutionOptions;\n  cache?: LLMCache<OllamaLLMOutput>;\n}\n\nexport interface OllamaEmbeddingOptions extends EmbeddingOptions {\n  options?: Partial<Parameters>;\n  truncate?: boolean;\n}\n\nexport class OllamaLLMOutput extends BaseLLMOutput {\n  public readonly results: GenerateResponse[];\n\n  constructor(result: GenerateResponse) {\n    super();\n    this.results = [result];\n  }\n\n  static {\n    this.register();\n  }\n\n  getTextContent(): string {\n    return this.finalResult.response;\n  }\n\n  @Cache()\n  get finalResult(): Readonly<GenerateResponse> {\n    if (this.results.length === 0) {\n      throw new LLMOutputError(\"No chunks to get final result from!\");\n    }\n\n    return customMerge(this.results, {\n      response: (value = \"\", oldValue = \"\") => oldValue + value,\n      total_duration: (value, oldValue) => value ?? oldValue,\n      load_duration: (value, oldValue) => value ?? oldValue,\n      model: (value, oldValue) => value ?? oldValue,\n      done: (value, oldValue) => value ?? oldValue,\n      done_reason: (value, oldValue) => value ?? oldValue,\n      created_at: (value, oldValue) => value ?? oldValue,\n      eval_duration: (value, oldValue) => value ?? oldValue,\n      prompt_eval_duration: (value, oldValue) => value ?? oldValue,\n      prompt_eval_count: safeSum,\n      eval_count: safeSum,\n      context: (value, oldValue) => [...(value || []), ...(oldValue || [])],\n    });\n  }\n\n  merge(other: OllamaLLMOutput): void {\n    Cache.getInstance(this, \"finalResult\").clear();\n    this.results.push(...other.results);\n  }\n\n  createSnapshot() {\n    return {\n      results: shallowCopy(this.results),\n    };\n  }\n\n  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, snapshot);\n  }\n\n  toString(): string {\n    return this.getTextContent();\n  }\n}\n\nexport type OllamaLLMEvents = LLMEvents<OllamaLLMOutput>;\n\nexport class OllamaLLM extends LLM<OllamaLLMOutput> {\n  public readonly emitter = Emitter.root.child<OllamaLLMEvents>({\n    namespace: [\"ollama\", \"llm\"],\n    creator: this,\n  });\n\n  public readonly client: Client;\n  public readonly parameters: Partial<Parameters>;\n\n  static {\n    this.register();\n    registerClient();\n  }\n\n  constructor({ client, modelId, parameters, executionOptions = {}, cache }: Input) {\n    super(modelId, executionOptions, cache);\n    this.client = client ?? new Client({ host: getEnv(\"OLLAMA_HOST\") });\n    this.parameters = parameters ?? {};\n  }\n\n  protected async _generate(\n    input: LLMInput,\n    options: GenerateOptions,\n    run: GetRunContext<typeof this>,\n  ): Promise<OllamaLLMOutput> {\n    const response = await signalRace(\n      async () =>\n        this.client.generate({\n          ...(await this.prepareParameters(input, options)),\n          stream: false,\n        }),\n      run.signal,\n      () => this.client.abort(),\n    );\n\n    return new OllamaLLMOutput(response);\n  }\n\n  protected async *_stream(\n    input: LLMInput,\n    options: Partial<StreamGenerateOptions>,\n    run: GetRunContext<typeof this>,\n  ): AsyncStream<OllamaLLMOutput, void> {\n    for await (const chunk of await this.client.generate({\n      ...(await this.prepareParameters(input, options)),\n      stream: true,\n    })) {\n      if (run.signal.aborted) {\n        break;\n      }\n      yield new OllamaLLMOutput(chunk);\n    }\n    run.signal.throwIfAborted();\n  }\n\n  @Cache()\n  async version() {\n    const config = getPropStrict(this.client, \"config\") as Config;\n    return retrieveVersion(config.host, config.fetch);\n  }\n\n  async meta(): Promise<LLMMeta> {\n    const model = await this.client.show({\n      model: this.modelId,\n    });\n\n    return extractModelMeta(model);\n  }\n\n  async embed(input: LLMInput[], options: OllamaEmbeddingOptions = {}): Promise<EmbeddingOutput> {\n    const response = await this.client.embed({\n      model: this.modelId,\n      input: input,\n      options: options?.options,\n      truncate: options?.truncate,\n    });\n    return { embeddings: response.embeddings };\n  }\n\n  async tokenize(input: LLMInput): Promise<BaseLLMTokenizeOutput> {\n    return {\n      tokensCount: Math.ceil(input.length / 4),\n    };\n  }\n\n  protected async prepareParameters(\n    input: LLMInput,\n    overrides?: GenerateOptions,\n  ): Promise<GenerateRequest> {\n    return {\n      model: this.modelId,\n      prompt: input,\n      raw: true,\n      options: this.parameters,\n      format: retrieveFormat(await this.version(), overrides?.guided),\n    };\n  }\n\n  createSnapshot() {\n    return {\n      ...super.createSnapshot(),\n      modelId: this.modelId,\n      executionOptions: shallowCopy(this.executionOptions),\n      parameters: shallowCopy(this.parameters),\n      client: this.client,\n    };\n  }\n}\n"]}