{"version":3,"sources":["../../src/backend/chat.ts"],"names":["ChatModel","Serializable","cache","NullCache","parameters","middlewares","logger","Logger","root","child","name","toolChoiceSupport","toolCallFallbackViaResponseFormat","modelSupportsToolCalling","fixInvalidToolCalls","retryOnEmptyResponse","create","input","shallowCopy","stream","undefined","RunContext","enter","params","signal","abortSignal","run","tools","forceToolCallViaResponseFormat","shouldForceToolCallViaResponseFormat","isEmpty","responseFormat","generateToolUnionSchema","filterToolsByToolChoice","toolChoice","isToolChoiceSupported","warn","modelInputMessagesBackup","messages","slice","cacheEntry","createCacheAccessor","emitter","emit","result","Retryable","executor","chunks","generator","value","_createStream","toAsyncGenerator","_create","controller","AbortController","push","callbacks","abort","aborted","ChatModelOutput","fromChunks","EmptyChatModelResponseError","getToolCalls","Tool","lastMsg","at","toolCall","parseBrokenJson","text","pair","ChatModelToolCallError","generatedContent","generatedError","response","content","length","type","toolCallId","randomString","toLowerCase","toolName","tool","find","t","availableTools","map","join","JSON","stringify","isString","isToolCallValid","parse","resolve","finishReason","config","maxRetries","onRetry","_","lastError","data","AssistantMessage","tempMessage","toolNames","UserMessage","lastMessage","meta","get","error","reject","ChatModelError","middleware","createStructure","_createStructure","isFunction","fromName","options","providerId","modelId","parseModel","Target","loadModel","instance","Object","assign","schema","jsonSchema","toJsonSchema","systemTemplate","systemPromptTemplate","PromptTemplate","z","object","string","min","template","SystemMessage","render","errorTemplate","errors","expected","received","textResponse","getTextContent","validator","createSchemaValidator","success","context","output","createSnapshot","destroy","key","ObjectHashKeyFn","Serializer","serialize","msg","toPlain","isNew","task","Task","set","delete","Boolean","toolChoiceSupported","choice","includes","usage","dedupe","final","forEach","cur","merge","other","clones","cloneSync","customMerge","totalTokens","takeBigger","promptTokens","completionTokens","cachedPromptTokens","reasoningTokens","messagesById","Map","messagesByToolCallId","msgId","id","filteredChunks","chunk","size","lastToolCallId","getLast","keys","has","values","main","shift","finalToolCalls","lastId","excludedIndexes","index","lastToolCall","Error","reverse","splice","filter","r","flatMap","getTextMessages","toString","loadSnapshot","snapshot","serializable","isPromise","target","prototype","load"],"mappings":"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","file":"chat.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Serializable } from \"@/internals/serializable.js\";\nimport { shallowCopy } from \"@/serializer/utils.js\";\nimport { customMerge, getLast } from \"@/internals/helpers/object.js\";\nimport { takeBigger } from \"@/internals/helpers/number.js\";\nimport { Callback } from \"@/emitter/types.js\";\nimport { FrameworkError } from \"@/errors.js\";\nimport { Emitter } from \"@/emitter/emitter.js\";\nimport { GetRunContext, MiddlewareType, RunContext } from \"@/context.js\";\nimport { isEmpty, isFunction, isPromise, isString, randomString } from \"remeda\";\nimport { ObjectHashKeyFn } from \"@/cache/decoratorCache.js\";\nimport { Task } from \"promise-based-task\";\nimport { NullCache } from \"@/cache/nullCache.js\";\nimport { BaseCache } from \"@/cache/base.js\";\nimport {\n  filterToolsByToolChoice,\n  FullModelName,\n  generateToolUnionSchema,\n  loadModel,\n  parseModel,\n} from \"@/backend/utils.js\";\nimport { ProviderName } from \"@/backend/constants.js\";\nimport { AnyTool, Tool } from \"@/tools/base.js\";\nimport { AssistantMessage, Message, SystemMessage, UserMessage } from \"@/backend/message.js\";\n\nimport {\n  ChatModelError,\n  ChatModelToolCallError,\n  EmptyChatModelResponseError,\n} from \"@/backend/errors.js\";\nimport { z, ZodSchema, ZodType } from \"zod\";\nimport {\n  createSchemaValidator,\n  parseBrokenJson,\n  toJsonSchema,\n} from \"@/internals/helpers/schema.js\";\nimport { Retryable } from \"@/internals/helpers/retryable.js\";\nimport { SchemaObject, ValidateFunction } from \"ajv\";\nimport { PromptTemplate } from \"@/template.js\";\nimport { toAsyncGenerator } from \"@/internals/helpers/promise.js\";\nimport { Serializer } from \"@/serializer/serializer.js\";\nimport { Logger } from \"@/logger/logger.js\";\nimport { ToolCallPart } from \"ai\";\nimport { isToolCallValid } from \"@/adapters/vercel/backend/utils.js\";\n\nexport interface ChatModelParameters {\n  maxTokens?: number;\n  topP?: number;\n  frequencyPenalty?: number;\n  temperature?: number;\n  topK?: number;\n  n?: number;\n  presencePenalty?: number;\n  seed?: number;\n  stopSequences?: string[];\n  stream?: boolean;\n}\n\ninterface ResponseObjectJson {\n  type: \"object-json\";\n  schema?: SchemaObject;\n  name?: string;\n  description?: string;\n}\n\nexport interface ChatModelObjectInput<T> extends ChatModelParameters {\n  schema: z.ZodSchema<T, any, any> | ResponseObjectJson;\n  systemPromptTemplate?: PromptTemplate<ZodType<{ schema: string }>>;\n  messages: Message[];\n  abortSignal?: AbortSignal;\n  maxRetries?: number;\n}\n\nexport interface ChatModelObjectOutput<T> {\n  object: T;\n  output: ChatModelOutput;\n}\n\nexport type ChatModelToolChoice = \"auto\" | \"none\" | \"required\" | AnyTool;\n\nexport interface ChatModelInput extends ChatModelParameters {\n  tools?: AnyTool[];\n  abortSignal?: AbortSignal;\n  stopSequences?: string[];\n  responseFormat?: ZodSchema | ResponseObjectJson;\n  toolChoice?: ChatModelToolChoice;\n  messages: Message[];\n  streamPartialToolCalls?: boolean;\n  maxRetries?: number;\n}\n\nexport type ChatModelFinishReason =\n  | \"stop\"\n  | \"length\"\n  | \"content-filter\"\n  | \"tool-calls\"\n  | \"error\"\n  | \"other\"\n  | \"unknown\";\n\nexport interface ChatModelUsage {\n  promptTokens: number;\n  completionTokens: number;\n  totalTokens: number;\n  reasoningTokens?: number;\n  cachedPromptTokens?: number;\n}\n\nexport interface ChatModelEvents {\n  newToken?: Callback<{ value: ChatModelOutput; callbacks: { abort: () => void } }>;\n  success?: Callback<{ value: ChatModelOutput }>;\n  start?: Callback<{ input: ChatModelInput }>;\n  error?: Callback<{ input: ChatModelInput; error: FrameworkError }>;\n  finish?: Callback<null>;\n}\n\nexport type ChatModelEmitter<A = Record<never, never>> = Emitter<\n  ChatModelEvents & Omit<A, keyof ChatModelEvents>\n>;\n\nexport type ChatModelCache = BaseCache<Task<ChatModelOutput[]>>;\nexport type ConfigFn<T> = (value: T) => T;\nexport interface ChatConfig {\n  cache?: ChatModelCache | ConfigFn<ChatModelCache>;\n  parameters?: ChatModelParameters | ConfigFn<ChatModelParameters>;\n}\n\nexport type ChatModelToolChoiceSupport = \"required\" | \"none\" | \"single\" | \"auto\";\n\nexport abstract class ChatModel extends Serializable {\n  public abstract readonly emitter: Emitter<ChatModelEvents>;\n  public cache: ChatModelCache = new NullCache();\n  public parameters: ChatModelParameters = {};\n  public readonly middlewares: MiddlewareType<typeof this>[] = [];\n  protected readonly logger = Logger.root.child({\n    name: this.constructor.name,\n  });\n\n  public readonly toolChoiceSupport: ChatModelToolChoiceSupport[] = [\n    \"required\",\n    \"none\",\n    \"single\",\n    \"auto\",\n  ];\n  public toolCallFallbackViaResponseFormat = true;\n  public readonly modelSupportsToolCalling: boolean = true;\n  public readonly fixInvalidToolCalls: boolean = true;\n  public readonly retryOnEmptyResponse: boolean = true;\n\n  abstract get modelId(): string;\n  abstract get providerId(): string;\n\n  create(input: ChatModelInput) {\n    input = shallowCopy(input);\n    if (input.stream === undefined) {\n      input.stream = this.parameters.stream;\n    }\n\n    return RunContext.enter(\n      this,\n      { params: [input] as const, signal: input?.abortSignal },\n      async (run): Promise<ChatModelOutput> => {\n        if (!this.modelSupportsToolCalling) {\n          input.tools = [];\n        }\n\n        const forceToolCallViaResponseFormat = this.shouldForceToolCallViaResponseFormat(input);\n        if (forceToolCallViaResponseFormat && input.tools && !isEmpty(input.tools)) {\n          input.responseFormat = await generateToolUnionSchema(\n            filterToolsByToolChoice(input.tools, input.toolChoice),\n          );\n          input.toolChoice = undefined;\n        }\n\n        if (!this.isToolChoiceSupported(input.toolChoice)) {\n          this.logger.warn(\n            `The following tool choice value '${input.toolChoice}' is not supported. Ignoring.`,\n          );\n          input.toolChoice = undefined;\n        }\n\n        const modelInputMessagesBackup = input.messages.slice();\n        const cacheEntry = await this.createCacheAccessor(input);\n\n        try {\n          await run.emitter.emit(\"start\", { input });\n\n          const result = await new Retryable({\n            executor: async () => {\n              const chunks: ChatModelOutput[] = [];\n\n              const generator =\n                cacheEntry.value ??\n                (input.stream\n                  ? this._createStream(input, run)\n                  : toAsyncGenerator(this._create(input, run)));\n\n              const controller = new AbortController();\n              for await (const value of generator) {\n                chunks.push(value);\n                await run.emitter.emit(\"newToken\", {\n                  value,\n                  callbacks: { abort: () => controller.abort() },\n                });\n                if (controller.signal.aborted) {\n                  break;\n                }\n              }\n\n              const result = ChatModelOutput.fromChunks(chunks);\n              if (result.isEmpty()) {\n                throw new EmptyChatModelResponseError();\n              }\n\n              if (\n                isEmpty(result.getToolCalls()) &&\n                (forceToolCallViaResponseFormat ||\n                  input.toolChoice === \"required\" ||\n                  input.toolChoice instanceof Tool)\n              ) {\n                const lastMsg = result.messages.at(-1)!;\n                let toolCall = parseBrokenJson(lastMsg.text, { pair: [\"{\", \"}\"] });\n                if (\n                  toolCall &&\n                  !toolCall.name &&\n                  !toolCall.parameters &&\n                  input.toolChoice instanceof Tool\n                ) {\n                  toolCall = { name: input.toolChoice.name, parameters: toolCall };\n                }\n                if (!toolCall || !toolCall.name || !toolCall.parameters) {\n                  throw new ChatModelToolCallError(\n                    `Failed to produce a valid tool call. Generate output: ${lastMsg.text}`,\n                    [],\n                    {\n                      generatedContent: lastMsg.text,\n                      generatedError: \"Tool call was not produced.\",\n                      response: result,\n                    },\n                  );\n                }\n                lastMsg.content.length = 0;\n                lastMsg.content.push({\n                  type: \"tool-call\",\n                  toolCallId: `call_${randomString(8).toLowerCase()}`,\n                  toolName: toolCall.name, // todo: add types\n                  input: toolCall.parameters,\n                });\n              }\n\n              for (const toolCall of result.getToolCalls()) {\n                const tool = input.tools?.find((t) => t.name === toolCall.toolName);\n                if (!tool) {\n                  const availableTools = input.tools?.map((t) => t.name).join(\",\") || \"None\";\n                  throw new ChatModelToolCallError(\"Non existing tool call.\", [], {\n                    generatedError: `Error: Unknown tool '${toolCall.toolName}'.\\nUse on of the available tools: ${availableTools}`,\n                    generatedContent: JSON.stringify({\n                      name: toolCall.toolName,\n                      input: isString(toolCall.input)\n                        ? toolCall.input\n                        : JSON.stringify(toolCall.input),\n                    }),\n                    response: result,\n                  });\n                }\n\n                if (!isToolCallValid(toolCall)) {\n                  throw new ChatModelToolCallError(\"Malformed tool call.\", [], {\n                    generatedContent: isString(toolCall.input)\n                      ? toolCall.input\n                      : JSON.stringify(toolCall.input),\n                    generatedError: `The tool call for the '${toolCall.toolName}' tool has malformed parameters. It must be a valid JSON.`,\n                    response: result,\n                  });\n                }\n\n                if (isString(toolCall.input)) {\n                  toolCall.input = JSON.parse(toolCall.input);\n                }\n              }\n\n              cacheEntry.resolve(chunks);\n\n              if (!result.finishReason) {\n                if (result.getToolCalls().length > 0) {\n                  result.finishReason = \"tool-calls\";\n                }\n              }\n\n              return result;\n            },\n            config: { maxRetries: input.maxRetries ?? 0 },\n            onRetry: async (_, lastError) => {\n              if (this.fixInvalidToolCalls && lastError instanceof ChatModelToolCallError) {\n                input.messages = input.messages.slice();\n                if (lastError.data.generatedContent) {\n                  input.messages.push(\n                    new AssistantMessage(lastError.data.generatedContent, {\n                      tempMessage: true,\n                    }),\n                  );\n                }\n\n                const toolNames = input.tools?.map((t) => t.name).join(\", \") || \"None\";\n                input.messages.push(\n                  new UserMessage(\n                    `${lastError.data.generatedError}\\n\\nAvailable Tools: ${toolNames}`,\n                    {\n                      tempMessage: true,\n                    },\n                  ),\n                );\n              } else if (\n                this.retryOnEmptyResponse &&\n                lastError instanceof EmptyChatModelResponseError\n              ) {\n                input.messages = input.messages.slice();\n                const lastMessage = input.messages.at(-1);\n                if (\n                  lastMessage &&\n                  lastMessage instanceof AssistantMessage &&\n                  lastMessage.meta[\"tempMessage\"] &&\n                  lastMessage.text === \"\"\n                ) {\n                  input.messages.push(\n                    new UserMessage(\n                      \"No output received. Please regenerate your previous response.\",\n                      { tempMessage: true },\n                    ),\n                  );\n                } else {\n                  // Python compatibility\n                  input.messages.push(new AssistantMessage(\"\", { tempMessage: true }));\n                }\n              }\n            },\n          }).get();\n\n          input.messages = modelInputMessagesBackup;\n          await run.emitter.emit(\"success\", { value: result });\n          return result;\n        } catch (error) {\n          await run.emitter.emit(\"error\", { input, error });\n          await cacheEntry.reject(error);\n          if (error instanceof ChatModelError) {\n            throw error;\n          } else {\n            throw new ChatModelError(`The Chat Model has encountered an error.`, [error]);\n          }\n        } finally {\n          await run.emitter.emit(\"finish\", null);\n        }\n      },\n    ).middleware(...this.middlewares);\n  }\n\n  createStructure<T>(input: ChatModelObjectInput<T>) {\n    return RunContext.enter(\n      this,\n      { params: [input] as const, signal: input?.abortSignal },\n      async (run) => {\n        return await this._createStructure<T>(input, run);\n      },\n    );\n  }\n\n  config({ cache, parameters }: ChatConfig): void {\n    if (cache) {\n      this.cache = isFunction(cache) ? cache(this.cache) : cache;\n    }\n    if (parameters) {\n      this.parameters = isFunction(parameters) ? parameters(this.parameters) : parameters;\n    }\n  }\n\n  static async fromName(name: FullModelName | ProviderName, options?: ChatModelParameters) {\n    const { providerId, modelId } = parseModel(name);\n    const Target = await loadModel<ChatModel>(providerId, \"chat\");\n    const instance = new Target(modelId || undefined);\n    if (options) {\n      Object.assign(instance.parameters, options);\n    }\n    return instance;\n  }\n\n  protected abstract _create(\n    input: ChatModelInput,\n    run: GetRunContext<typeof this>,\n  ): Promise<ChatModelOutput>;\n  protected abstract _createStream(\n    input: ChatModelInput,\n    run: GetRunContext<typeof this>,\n  ): AsyncGenerator<ChatModelOutput, void>;\n\n  protected async _createStructure<T>(\n    input: ChatModelObjectInput<T>,\n    run: GetRunContext<typeof this>,\n  ): Promise<ChatModelObjectOutput<T>> {\n    const { schema, ...options } = input;\n    const jsonSchema = toJsonSchema(schema);\n\n    const systemTemplate =\n      input.systemPromptTemplate ??\n      new PromptTemplate({\n        schema: z.object({\n          schema: z.string().min(1),\n        }),\n        template: `You are a helpful assistant that generates only valid JSON adhering to the following JSON Schema.\n\n\\`\\`\\`\n{{schema}}\n\\`\\`\\`\n\nIMPORTANT: You MUST answer with a JSON object that matches the JSON schema above.`,\n      });\n\n    const messages: Message[] = [\n      new SystemMessage(systemTemplate.render({ schema: JSON.stringify(jsonSchema, null, 2) })),\n      ...input.messages,\n    ];\n\n    const errorTemplate = new PromptTemplate({\n      schema: z.object({\n        errors: z.string(),\n        expected: z.string(),\n        received: z.string(),\n      }),\n      template: `Generated object does not match the expected JSON schema!\n\nValidation Errors: {{errors}}`,\n    });\n\n    return new Retryable<ChatModelObjectOutput<T>>({\n      executor: async () => {\n        const response = await this._create(\n          {\n            ...options,\n            messages,\n            responseFormat: { type: \"object-json\" },\n          },\n          run,\n        );\n\n        const textResponse = response.getTextContent();\n        const object: T = parseBrokenJson(textResponse, { pair: [\"{\", \"}\"] });\n        const validator = createSchemaValidator(schema) as ValidateFunction<T>;\n\n        const success = validator(object);\n        if (!success) {\n          const context = {\n            expected: JSON.stringify(jsonSchema),\n            received: textResponse,\n            errors: JSON.stringify(validator.errors ?? []),\n          };\n\n          messages.push(new UserMessage(errorTemplate.render(context)));\n          throw new ChatModelError(`LLM did not produce a valid output.`, [], {\n            context,\n          });\n        }\n\n        return {\n          object,\n          output: response,\n        };\n      },\n      config: {\n        signal: run.signal,\n        maxRetries: input?.maxRetries || 1,\n      },\n    }).get();\n  }\n\n  createSnapshot() {\n    return {\n      cache: this.cache,\n      emitter: this.emitter,\n      middlewares: shallowCopy(this.middlewares) as MiddlewareType<any>[],\n      parameters: shallowCopy(this.parameters),\n      logger: this.logger,\n      toolChoiceSupport: this.toolChoiceSupport.slice(),\n      toolCallFallbackViaResponseFormat: this.toolCallFallbackViaResponseFormat,\n      modelSupportsToolCalling: this.modelSupportsToolCalling,\n      retryOnEmptyResponse: this.retryOnEmptyResponse,\n      fixInvalidToolCalls: this.fixInvalidToolCalls,\n    };\n  }\n\n  destroy() {\n    this.emitter.destroy();\n  }\n\n  protected async createCacheAccessor({\n    abortSignal: _,\n    messages,\n    tools = [],\n    ...input\n  }: ChatModelInput) {\n    const key = ObjectHashKeyFn({\n      ...input,\n      messages: await Serializer.serialize(messages.map((msg) => msg.toPlain())),\n      tools: await Serializer.serialize(tools),\n    });\n    const value = await this.cache.get(key);\n    const isNew = value === undefined;\n\n    let task: Task<ChatModelOutput[]> | null = null;\n    if (isNew) {\n      task = new Task();\n      await this.cache.set(key, task);\n    }\n\n    return {\n      key,\n      value,\n      resolve: <T2 extends ChatModelOutput>(value: T2[]) => {\n        task?.resolve?.(value);\n      },\n      reject: async (error: Error) => {\n        task?.reject?.(error);\n        if (isNew) {\n          await this.cache.delete(key);\n        }\n      },\n    };\n  }\n\n  protected shouldForceToolCallViaResponseFormat({\n    tools = [],\n    toolChoice,\n    responseFormat,\n  }: ChatModelInput) {\n    if (\n      isEmpty(tools) ||\n      !toolChoice ||\n      toolChoice === \"none\" ||\n      toolChoice === \"auto\" ||\n      !this.toolCallFallbackViaResponseFormat ||\n      Boolean(responseFormat)\n    ) {\n      return false;\n    }\n\n    const toolChoiceSupported = this.isToolChoiceSupported(toolChoice);\n    return !this.modelSupportsToolCalling || !toolChoiceSupported;\n  }\n\n  protected isToolChoiceSupported(choice?: ChatModelToolChoice): boolean {\n    return (\n      !choice ||\n      (choice instanceof Tool\n        ? this.toolChoiceSupport.includes(\"single\")\n        : this.toolChoiceSupport.includes(choice))\n    );\n  }\n}\n\nexport class ChatModelOutput extends Serializable {\n  constructor(\n    public readonly messages: Message[],\n    public usage?: ChatModelUsage,\n    public finishReason?: ChatModelFinishReason,\n  ) {\n    super();\n    this.dedupe();\n  }\n\n  static fromChunks(chunks: ChatModelOutput[]) {\n    const final = new ChatModelOutput([]);\n    chunks.forEach((cur) => final.merge(cur));\n    return final;\n  }\n\n  isEmpty() {\n    if (this.messages.length === 0) {\n      return true;\n    }\n    return this.getTextContent() === \"\" && this.getToolCalls().length === 0;\n  }\n\n  merge(other: ChatModelOutput) {\n    if (other.messages.length > 0) {\n      const clones = other.messages.map(cloneSync);\n      this.messages.push(...clones);\n      this.dedupe();\n    }\n\n    this.finishReason = other.finishReason;\n    if (this.usage && other.usage) {\n      this.usage = customMerge([this.usage, other.usage], {\n        totalTokens: takeBigger,\n        promptTokens: takeBigger,\n        completionTokens: takeBigger,\n        cachedPromptTokens: takeBigger,\n        reasoningTokens: takeBigger,\n      });\n    } else if (other.usage) {\n      this.usage = shallowCopy(other.usage);\n    }\n  }\n\n  dedupe(): void {\n    // Dedupe messages\n    if (this.messages.length > 1) {\n      const messagesById = new Map<string, Message[]>();\n      const messagesByToolCallId = new Map<string, AssistantMessage>();\n\n      for (const msg of this.messages) {\n        const msgId = msg.id || \"\";\n\n        if (msg instanceof AssistantMessage && msg.getToolCalls().length > 0) {\n          const filteredChunks: AssistantMessage[\"content\"] = [];\n          for (const chunk of msg.content) {\n            if (chunk.type !== \"tool-call\") {\n              filteredChunks.push(chunk);\n              continue;\n            }\n\n            // Assume tool calls with no id refer to the most recent tool call\n            if (!chunk.toolCallId && messagesByToolCallId.size > 0) {\n              const lastToolCallId = getLast(messagesByToolCallId.keys(), \"\");\n              if (lastToolCallId) {\n                chunk.toolCallId = lastToolCallId;\n              }\n            }\n\n            if (chunk.toolCallId && messagesByToolCallId.has(chunk.toolCallId)) {\n              messagesByToolCallId.get(chunk.toolCallId)!.content.push(chunk);\n            } else if (chunk.toolCallId) {\n              messagesByToolCallId.set(chunk.toolCallId, msg);\n              filteredChunks.push(chunk);\n            }\n          }\n\n          msg.content.length = 0;\n          msg.content.push(...filteredChunks);\n\n          if (filteredChunks.length === 0) {\n            continue; // nothing to process\n          }\n        }\n\n        if (!messagesById.has(msgId)) {\n          messagesById.set(msgId, [msg]);\n        } else {\n          messagesById.get(msgId)!.push(msg);\n        }\n      }\n\n      this.messages.length = 0;\n\n      for (const messages of messagesById.values()) {\n        const main = messages.shift()!;\n        for (const other of messages) {\n          main.merge(other);\n        }\n        this.messages.push(main);\n      }\n    }\n\n    // Dedupe tool calls\n    for (const msg of this.messages) {\n      if (!(msg instanceof AssistantMessage)) {\n        continue;\n      }\n\n      const finalToolCalls: Record<string, ToolCallPart> = {};\n      let lastId = \"\";\n\n      const excludedIndexes: number[] = [];\n      msg.content.forEach((chunk, index) => {\n        if (chunk.type !== \"tool-call\") {\n          return;\n        }\n        const id = chunk.toolCallId || lastId;\n        if (!(id in finalToolCalls)) {\n          finalToolCalls[id] = shallowCopy(chunk);\n          msg.content[index] = finalToolCalls[id];\n        } else {\n          excludedIndexes.push(index);\n          const lastToolCall = finalToolCalls[id];\n          if (isString(lastToolCall.input) && isString(chunk.input)) {\n            lastToolCall.input += chunk.input;\n          } else {\n            throw new Error(\"Chunks cannot be merged.\");\n          }\n          if (!lastToolCall.toolName) {\n            lastToolCall.toolName = chunk.toolName;\n          }\n        }\n        lastId = id;\n      });\n      excludedIndexes.reverse().forEach((index) => {\n        msg.content.splice(index, 1);\n      });\n    }\n  }\n\n  getToolCalls() {\n    return this.messages\n      .filter((r) => r instanceof AssistantMessage)\n      .flatMap((r) => r.getToolCalls())\n      .filter(Boolean);\n  }\n\n  getTextMessages(): AssistantMessage[] {\n    return this.messages.filter((r) => r instanceof AssistantMessage).filter((r) => r.text);\n  }\n\n  getTextContent(): string {\n    return this.messages\n      .filter((r) => r instanceof AssistantMessage)\n      .flatMap((r) => r.text)\n      .filter(Boolean)\n      .join(\"\");\n  }\n\n  toString() {\n    return this.getTextContent();\n  }\n\n  createSnapshot() {\n    return {\n      messages: shallowCopy(this.messages),\n      usage: shallowCopy(this.usage),\n      finishReason: this.finishReason,\n    };\n  }\n\n  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, snapshot);\n  }\n}\n\nfunction cloneSync<T extends Serializable>(serializable: T): T {\n  const snapshot = serializable.createSnapshot();\n  if (isPromise(snapshot)) {\n    throw new Error(`createSnapshot cannot be async`);\n  }\n\n  const target = Object.create(serializable.constructor.prototype) as T;\n  const load = target.loadSnapshot(snapshot);\n  if (isPromise(load)) {\n    throw new Error(`loadSnapshot cannot be async`);\n  }\n\n  return target;\n}\n"]}