{"version":3,"sources":["../../src/backend/message.ts"],"names":["isText","content","type","isImage","isFile","isToolCall","isToolResult","Message","Serializable","id","meta","undefined","createdAt","Date","fromString","Array","isArray","chunk","assertContent","watchArray","onAdd","of","role","text","UserMessage","AssistantMessage","SystemMessage","ToolMessage","CustomMessage","getTexts","map","c","join","filter","createSnapshot","shallowCopy","loadSnapshot","snapshot","Object","assign","toPlain","merge","other","push","fromChunks","chunks","instance","forEach","Symbol","iterator","register","getToolCalls","key","getOwnPropertyDescriptor","args","popProp","hasProp","Logger","root","warn","input","safeDefineProperty","getToolResults","schema","z","object","literal","toolName","string","toolCallId","and","output","any","or","result","success","data","safeParse","ValueError","isError","isString","value","includes","getImages","getFiles","Role","ASSISTANT","SYSTEM","USER"],"mappings":"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","file":"message.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 { FilePart, ImagePart, TextPart, ToolCallPart, ToolResultPart } from \"ai\";\nimport { z } from \"zod\";\nimport { ValueError } from \"@/errors.js\";\nimport { hasProp, popProp, safeDefineProperty } from \"@/internals/helpers/object.js\";\nimport { Logger } from \"@/logger/logger.js\";\nimport { isString } from \"remeda\";\nimport { watchArray } from \"@/internals/helpers/array.js\";\n\nexport type MessageRole = \"user\" | \"system\" | \"tool\" | \"assistant\";\nexport type MessageContentPart = TextPart | ToolCallPart | ImagePart | FilePart | ToolResultPart;\n\nexport interface MessageMeta {\n  [key: string]: any;\n  createdAt?: Date;\n}\n\nexport interface MessageInput {\n  id?: string;\n  role: MessageRole;\n  text: string; // TODO\n  meta?: MessageMeta;\n}\n\nfunction isText(content: MessageContentPart): content is TextPart {\n  return content.type === \"text\";\n}\nfunction isImage(content: MessageContentPart): content is ImagePart {\n  return content.type === \"image\";\n}\nfunction isFile(content: MessageContentPart): content is FilePart {\n  return content.type === \"file\";\n}\nfunction isToolCall(content: MessageContentPart): content is ToolCallPart {\n  return content.type === \"tool-call\";\n}\nfunction isToolResult(content: MessageContentPart): content is ToolResultPart {\n  return content.type === \"tool-result\";\n}\n\nexport abstract class Message<\n  T extends MessageContentPart = MessageContentPart,\n  R extends string = MessageRole | string,\n> extends Serializable {\n  public id: string | undefined;\n  public abstract readonly role: R;\n  public readonly content: T[];\n\n  constructor(\n    content: T | T[] | string,\n    public readonly meta: MessageMeta = {},\n    id: string | undefined = undefined,\n  ) {\n    super();\n    this.id = id;\n    if (!meta?.createdAt) {\n      meta.createdAt = new Date();\n    }\n    if (typeof content === \"string\") {\n      this.content = [this.fromString(content)];\n    } else {\n      this.content = Array.isArray(content) ? content : [content];\n    }\n    for (const chunk of this.content) {\n      this.assertContent(chunk);\n    }\n    this.content = watchArray(this.content, {\n      onAdd: this.assertContent,\n    });\n  }\n\n  protected assertContent(content: T): asserts content is T {}\n\n  protected abstract fromString(input: string): T;\n\n  static of({ role, text, meta, id }: MessageInput): Message {\n    if (role === \"user\") {\n      return new UserMessage(text, meta, id);\n    } else if (role === \"assistant\") {\n      return new AssistantMessage(text, meta, id);\n    } else if (role === \"system\") {\n      return new SystemMessage(text, meta, id);\n    } else if (role === \"tool\") {\n      return new ToolMessage(text, meta, id);\n    } else {\n      return new CustomMessage(role, text, meta, id);\n    }\n  }\n\n  get text() {\n    return this.getTexts()\n      .map((c) => c.text)\n      .join(\"\");\n  }\n\n  getTexts() {\n    return this.content.filter(isText) as TextPart[];\n  }\n\n  createSnapshot() {\n    return {\n      id: this.id,\n      content: shallowCopy(this.content),\n      meta: shallowCopy(this.meta),\n      role: this.role,\n    };\n  }\n\n  loadSnapshot(snapshot: ReturnType<typeof this.createSnapshot>) {\n    Object.assign(this, snapshot);\n  }\n\n  toPlain() {\n    return { id: this.id, role: this.role, content: shallowCopy(this.content) } as const;\n  }\n\n  merge(other: Message<T, R>) {\n    this.id = this.id || other.id;\n    Object.assign(this, other.meta);\n    this.content.push(...other.content);\n  }\n\n  static fromChunks<M2 extends Message>(this: new (...args: any[]) => M2, chunks: M2[]): M2 {\n    const instance = new this([]);\n    chunks.forEach((chunk) => instance.merge(chunk));\n    return instance;\n  }\n\n  [Symbol.iterator](): Iterator<T> {\n    return this.content[Symbol.iterator]();\n  }\n}\n\nexport class AssistantMessage extends Message<TextPart | ToolCallPart | FilePart> {\n  public readonly role = \"assistant\";\n\n  static {\n    this.register();\n  }\n\n  getToolCalls() {\n    return this.content.filter(isToolCall);\n  }\n\n  protected fromString(text: string): TextPart {\n    return { type: \"text\", text };\n  }\n\n  protected assertContent(\n    content: TextPart | ToolCallPart | FilePart,\n  ): asserts content is TextPart | ToolCallPart | FilePart {\n    if (content.type === \"tool-call\") {\n      const key = \"args\";\n      if (!Object.getOwnPropertyDescriptor(content, key)) {\n        const args = popProp(content as any, key);\n\n        if (args !== null && !hasProp(content, \"input\")) {\n          Logger.root.warn(\n            `The '${key}' property in the AssistantMessage class is deprecated and will be removed. Use the 'input' property for Tool Call content chunks instead.`,\n          );\n          content.input = args;\n        }\n      }\n\n      safeDefineProperty(content, key as keyof typeof content, () => {\n        Logger.root.warn(\n          `The '${key}' property in the Tool Call is deprecated and will be removed. Use the 'input' property instead.`,\n        );\n        return content.input;\n      });\n    }\n  }\n}\n\nexport class ToolMessage extends Message<ToolResultPart> {\n  public readonly role = \"tool\";\n\n  static {\n    this.register();\n  }\n\n  getToolResults() {\n    return this.content.filter(isToolResult);\n  }\n\n  protected fromString(text: string): ToolResultPart {\n    const schema = z\n      .object({\n        type: z.literal(\"tool-result\"),\n        toolName: z.string(),\n        toolCallId: z.string(),\n      })\n      .and(z.object({ output: z.any() }).or(z.object({ result: z.any() })));\n\n    const { success, data } = schema.safeParse(text);\n    if (!success) {\n      throw new ValueError(`ToolMessage cannot be created from '${text}'!`);\n    }\n\n    return data as ToolResultPart;\n  }\n\n  protected assertContent(content: ToolResultPart): asserts content is ToolResultPart {\n    const result = popProp(content as any, \"result\", null);\n    const isError = popProp(content as any, \"isError\", false);\n\n    if (result !== null && !hasProp(content, \"output\")) {\n      Logger.root.warn(\n        \"The 'result' property in the ToolMessage class is deprecated and will be removed. Use the 'output' property for content chunks instead.\",\n      );\n      if (isString(result)) {\n        content.output = { type: isError ? \"error-text\" : \"text\", value: result };\n      } else {\n        content.output = { type: isError ? \"error-json\" : \"json\", value: result };\n      }\n    }\n\n    safeDefineProperty(content, \"result\" as any, () => {\n      Logger.root.warn(\n        \"The 'result' property of Tool Message is deprecated and will be removed. Use the 'output.value' property instead.\",\n      );\n      if (\"value\" in content.output) {\n        return content.output.value;\n      }\n      return null;\n    });\n    safeDefineProperty(content, \"isError\" as any, () => {\n      Logger.root.warn(\n        \"The 'isError' property of Tool Message is deprecated and will be removed. Use the 'output.type' property instead.\",\n      );\n      return content.output.type.includes(\"error\");\n    });\n  }\n}\n\nexport class SystemMessage extends Message<TextPart> {\n  public readonly role: MessageRole = \"system\";\n\n  static {\n    this.register();\n  }\n\n  protected fromString(text: string): TextPart {\n    return { type: \"text\", text };\n  }\n}\n\nexport class UserMessage extends Message<TextPart | ImagePart | FilePart> {\n  public readonly role = \"user\";\n\n  static {\n    this.register();\n  }\n\n  getImages() {\n    return this.content.filter(isImage);\n  }\n\n  getFiles() {\n    return this.content.filter(isFile);\n  }\n\n  protected fromString(text: string): TextPart {\n    return { type: \"text\", text };\n  }\n}\n\nexport const Role = {\n  ASSISTANT: \"assistant\",\n  SYSTEM: \"system\",\n  USER: \"user\",\n} as const;\n\nexport class CustomMessage extends Message<MessageContentPart, string> {\n  public role: string;\n\n  constructor(\n    role: string,\n    content: MessageContentPart | string,\n    meta: MessageMeta = {},\n    id?: string,\n  ) {\n    super(content, meta, id);\n    if (!role) {\n      throw new ValueError(`Role \"${role}\" must be specified!`);\n    }\n    this.role = role;\n  }\n\n  protected fromString(input: string): MessageContentPart {\n    return { type: \"text\", text: input };\n  }\n}\n"]}