{"version":3,"sources":["/home/mkabumattar/work/withrawi/rawi/dist/chunk-MWCFHIO3.cjs","../src/libs/providers/ollama/ollama-chat-language-model.ts"],"names":["OllamaChatLanguageModel","modelId","settings","config","#getArguments","frequencyPenalty","maxOutputTokens","presencePenalty","prompt","providerOptions","responseFormat","seed","stopSequences","temperature","toolChoice","tools","topK","topP","warnings","baseArguments","removeUndefined","ollamaTools","toolWarnings","prepareTools","convertToOllamaChatMessages","options","args","body","responseHeaders","response","postJsonToApi","ollamaFailedResponseHandler","combineHeaders","createJsonResponseHandler"],"mappings":"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","file":"/home/mkabumattar/work/withrawi/rawi/dist/chunk-MWCFHIO3.cjs","sourcesContent":[null,"import type {\n  LanguageModelV2,\n  LanguageModelV2CallWarning,\n  LanguageModelV2Content,\n  LanguageModelV2FinishReason,\n  LanguageModelV2StreamPart,\n  LanguageModelV2Usage,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createJsonResponseHandler,\n  generateId,\n  type ParseResult,\n  postJsonToApi,\n} from '@ai-sdk/provider-utils';\nimport {z} from 'zod';\n\nimport {convertToOllamaChatMessages} from './convert-to-ollama-chat-messages.js';\nimport {InferToolCallsFromStream} from './generate-tool/infer-tool-calls-from-stream.js';\nimport {getResponseMetadata} from './get-response-metadata.js';\nimport {mapOllamaFinishReason} from './map-ollama-finish-reason.js';\nimport type {\n  OllamaChatModelId,\n  OllamaChatSettings,\n} from './ollama-chat-settings.js';\nimport {ollamaFailedResponseHandler} from './ollama-error.js';\nimport {prepareTools} from './prepare-tools.js';\nimport {\n  createJsonStreamResponseHandler,\n  removeUndefined,\n} from './utils/index.js';\n\ninterface OllamaChatConfig {\n  baseURL: string;\n  fetch?: typeof fetch;\n  headers: () => Record<string, string | undefined>;\n  provider: string;\n}\n\ntype getArgumentsProperties = Parameters<LanguageModelV2['doGenerate']>[0];\n\nexport class OllamaChatLanguageModel implements LanguageModelV2 {\n  readonly specificationVersion = 'v2';\n  readonly defaultObjectGenerationMode = 'json';\n  readonly supportsImageUrls = true;\n  readonly supportedUrls:\n    | Record<string, RegExp[]>\n    | PromiseLike<Record<string, RegExp[]>> = {};\n\n  constructor(\n    public readonly modelId: OllamaChatModelId,\n    public readonly settings: OllamaChatSettings,\n    public readonly config: OllamaChatConfig,\n  ) {}\n\n  get supportsStructuredOutputs(): boolean {\n    return this.settings.structuredOutputs ?? false;\n  }\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  async #getArguments({\n    frequencyPenalty,\n    maxOutputTokens,\n    presencePenalty,\n    prompt,\n    providerOptions,\n    responseFormat,\n    seed,\n    stopSequences,\n    temperature,\n    toolChoice,\n    tools,\n    topK,\n    topP,\n  }: getArgumentsProperties) {\n    const warnings: LanguageModelV2CallWarning[] = [];\n\n    if (\n      responseFormat !== undefined &&\n      responseFormat.type === 'json' &&\n      responseFormat.schema !== undefined &&\n      !this.supportsStructuredOutputs\n    ) {\n      warnings.push({\n        details:\n          'JSON response format schema is only supported with structuredOutputs',\n        setting: 'responseFormat',\n        type: 'unsupported-setting',\n      });\n    }\n\n    const baseArguments = {\n      format:\n        responseFormat?.type === 'json'\n          ? (responseFormat.schema ?? 'json')\n          : undefined,\n      model: this.modelId,\n      options: removeUndefined({\n        f16_kv: this.settings.f16Kv,\n        frequency_penalty: frequencyPenalty,\n        low_vram: this.settings.lowVram,\n        main_gpu: this.settings.mainGpu,\n        min_p: this.settings.minP,\n        mirostat: this.settings.mirostat,\n        mirostat_eta: this.settings.mirostatEta,\n        mirostat_tau: this.settings.mirostatTau,\n        num_batch: this.settings.numBatch,\n        num_ctx: this.settings.numCtx,\n        num_gpu: this.settings.numGpu,\n        num_keep: this.settings.numKeep,\n        num_predict: maxOutputTokens,\n        num_thread: this.settings.numThread,\n        numa: this.settings.numa,\n        penalize_newline: this.settings.penalizeNewline,\n        presence_penalty: presencePenalty,\n        repeat_last_n: this.settings.repeatLastN,\n        repeat_penalty: this.settings.repeatPenalty,\n        seed,\n        stop: stopSequences,\n        temperature,\n        tfs_z: this.settings.tfsZ,\n        top_k: topK,\n        top_p: topP,\n        typical_p: this.settings.typicalP,\n        use_mlock: this.settings.useMlock,\n        use_mmap: this.settings.useMmap,\n        vocab_only: this.settings.vocabOnly,\n      }),\n      providerOptions,\n    };\n\n    const {tools: ollamaTools, toolWarnings} = prepareTools({\n      prompt,\n      toolChoice,\n      tools,\n    });\n\n    return {\n      args: {\n        ...baseArguments,\n        messages: convertToOllamaChatMessages(prompt),\n        tools: ollamaTools,\n      },\n      warnings: [...warnings, ...toolWarnings],\n    };\n  }\n\n  async doGenerate(\n    options: Parameters<LanguageModelV2['doGenerate']>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n    const {args, warnings} = await this.#getArguments(options);\n    const body = {\n      ...args,\n      stream: false,\n    };\n\n    const {responseHeaders, value: response} = await postJsonToApi({\n      abortSignal: options.abortSignal,\n      body,\n      failedResponseHandler: ollamaFailedResponseHandler,\n      fetch: this.config.fetch,\n      headers: combineHeaders(this.config.headers(), options.headers),\n      successfulResponseHandler: createJsonResponseHandler(\n        ollamaChatResponseSchema as any,\n      ),\n      url: `${this.config.baseURL}/chat`,\n    });\n\n    const typedResponse = response as OllamaChatResponseSchema;\n\n    const content: Array<LanguageModelV2Content> = [];\n\n    if (typedResponse.message.content) {\n      content.push({\n        text: typedResponse.message.content,\n        type: 'text',\n      });\n    }\n\n    const toolCalls = typedResponse.message.tool_calls ?? [];\n    for (const toolCall of toolCalls) {\n      content.push({\n        input: JSON.stringify(toolCall.function.arguments),\n        toolCallId: toolCall.id ?? generateId(),\n        toolName: toolCall.function.name,\n        type: 'tool-call',\n      });\n    }\n\n    return {\n      content,\n      finishReason: mapOllamaFinishReason({\n        finishReason: typedResponse.done_reason,\n        hasToolCalls: toolCalls !== undefined && toolCalls.length > 0,\n      }),\n      request: {body: JSON.stringify(body)},\n      response: {\n        body: JSON.stringify(typedResponse),\n        headers: responseHeaders,\n      },\n      usage: {\n        inputTokens: typedResponse.prompt_eval_count || 0,\n        outputTokens: typedResponse.eval_count || 0,\n        totalTokens:\n          (typedResponse.prompt_eval_count || 0) +\n          (typedResponse.eval_count || 0),\n      },\n      warnings,\n    };\n  }\n\n  async doStream(\n    options: Parameters<LanguageModelV2['doStream']>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n    const {args: body, warnings} = await this.#getArguments(options);\n\n    const {responseHeaders, value: response} = await postJsonToApi({\n      abortSignal: options.abortSignal,\n      body,\n      failedResponseHandler: ollamaFailedResponseHandler,\n      fetch: this.config.fetch,\n      headers: combineHeaders(this.config.headers(), options.headers),\n      successfulResponseHandler: createJsonStreamResponseHandler(\n        ollamaChatStreamChunkSchema,\n      ),\n      url: `${this.config.baseURL}/chat`,\n    });\n\n    const inferToolCallsFromStream = new InferToolCallsFromStream({\n      tools: options.tools,\n    });\n\n    let finishReason: LanguageModelV2FinishReason = 'unknown';\n    let usage: LanguageModelV2Usage = {\n      inputTokens: undefined,\n      outputTokens: undefined,\n      totalTokens: undefined,\n    };\n\n    let isFirstChunk = true;\n    let activeText = false;\n    return {\n      request: {body: JSON.stringify(body)},\n      response: {\n        headers: responseHeaders,\n      },\n      stream: response.pipeThrough(\n        new TransformStream<\n          ParseResult<z.infer<typeof ollamaChatStreamChunkSchema>>,\n          LanguageModelV2StreamPart\n        >({\n          async flush(controller) {\n            if (activeText) {\n              controller.enqueue({id: '0', type: 'text-end'});\n            }\n\n            controller.enqueue({\n              finishReason,\n              type: 'finish',\n              usage,\n            });\n          },\n          start(controller) {\n            controller.enqueue({type: 'stream-start', warnings});\n          },\n\n          async transform(chunk, controller) {\n            if (!chunk.success) {\n              controller.enqueue({error: chunk.error, type: 'error'});\n              return;\n            }\n\n            const {value} = chunk;\n\n            if (isFirstChunk) {\n              isFirstChunk = false;\n\n              controller.enqueue({\n                type: 'response-metadata',\n                ...getResponseMetadata(value),\n              });\n            }\n\n            if (value.done) {\n              finishReason = inferToolCallsFromStream.finish({controller});\n              usage = {\n                inputTokens: value.prompt_eval_count || 0,\n                outputTokens: value.eval_count,\n                totalTokens: (value.prompt_eval_count || 0) + value.eval_count,\n              };\n\n              return;\n            }\n\n            const text = value.message.content;\n\n            if (text && text.length > 0) {\n              if (!activeText) {\n                controller.enqueue({id: '0', type: 'text-start'});\n                activeText = true;\n              }\n\n              controller.enqueue({\n                delta: text,\n                id: '0',\n                type: 'text-delta',\n              });\n            }\n\n            if (value.message.tool_calls) {\n              for (const toolCall of value.message.tool_calls) {\n                const toolCallId = toolCall.id;\n                const toolName = toolCall.function.name;\n                const input = JSON.stringify(toolCall.function.arguments);\n\n                controller.enqueue({\n                  id: toolCallId ?? generateId(),\n                  toolName,\n                  type: 'tool-input-start',\n                });\n\n                controller.enqueue({\n                  delta: input,\n                  id: toolCallId ?? generateId(),\n                  type: 'tool-input-delta',\n                });\n\n                controller.enqueue({\n                  id: toolCallId ?? generateId(),\n                  type: 'tool-input-end',\n                });\n\n                controller.enqueue({\n                  input,\n                  toolCallId: toolCallId ?? generateId(),\n                  toolName,\n                  type: 'tool-call',\n                });\n              }\n            }\n          },\n        }),\n      ),\n    };\n  }\n}\n\nconst ollamaChatResponseSchema = z.object({\n  created_at: z.string(),\n  done: z.literal(true),\n  done_reason: z.string().optional().nullable(),\n  eval_count: z.number(),\n  eval_duration: z.number(),\n  load_duration: z.number().optional(),\n  message: z.object({\n    content: z.string(),\n    images: z.array(z.string()).optional().nullable(),\n    role: z.string(),\n    tool_calls: z\n      .array(\n        z.object({\n          function: z.object({\n            arguments: z.record(z.string(), z.any()),\n            name: z.string(),\n          }),\n          id: z.string().optional(),\n        }),\n      )\n      .optional()\n      .nullable(),\n  }),\n  model: z.string(),\n  prompt_eval_count: z.number().optional(),\n  prompt_eval_duration: z.number().optional(),\n  total_duration: z.number(),\n});\n\nexport type OllamaChatResponseSchema = z.infer<typeof ollamaChatResponseSchema>;\n\nconst ollamaChatStreamChunkSchema = z.discriminatedUnion('done', [\n  z.object({\n    created_at: z.string(),\n    done: z.literal(false),\n    message: z.object({\n      content: z.string(),\n      images: z\n        .array(\n          z.object({\n            type: z.string(),\n            url: z.string(),\n          }),\n        )\n        .optional()\n        .nullable(),\n      role: z.string(),\n      thinking: z.string().optional(),\n      tool_calls: z\n        .array(\n          z.object({\n            function: z.object({\n              arguments: z.record(z.string(), z.any()),\n              name: z.string(),\n            }),\n            id: z.string().optional(),\n          }),\n        )\n        .optional()\n        .nullable(),\n      tool_name: z.string().optional(),\n    }),\n    model: z.string(),\n  }),\n  z.object({\n    created_at: z.string(),\n    done: z.literal(true),\n    eval_count: z.number(),\n    eval_duration: z.number(),\n    load_duration: z.number().optional(),\n    model: z.string(),\n    prompt_eval_count: z.number().optional(),\n    prompt_eval_duration: z.number().optional(),\n    total_duration: z.number(),\n  }),\n]);\n"]}