{"version":3,"file":"messages.cjs","names":["HumanMessageChunk","AIMessageChunk","SystemMessageChunk","ToolMessageChunk","RemoveMessage"],"sources":["../../src/ui/messages.ts"],"sourcesContent":["import {\n  type BaseMessage,\n  BaseMessageChunk,\n  RemoveMessage,\n  convertToChunk,\n  coerceMessageLikeToMessage,\n  isBaseMessageChunk,\n  HumanMessageChunk,\n  SystemMessageChunk,\n  AIMessageChunk,\n  ToolMessageChunk,\n} from \"@langchain/core/messages\";\n\nimport type { Message } from \"../types.messages.js\";\n\nexport function tryConvertToChunk(\n  message: BaseMessage | BaseMessageChunk\n): BaseMessageChunk | null {\n  try {\n    if (isBaseMessageChunk(message)) return message;\n    return convertToChunk(message);\n  } catch {\n    return null;\n  }\n}\n\nexport function tryCoerceMessageLikeToMessage(\n  message: Omit<Message, \"type\"> & { type: string }\n): BaseMessage | BaseMessageChunk {\n  if (message.type === \"human\" || message.type === \"user\") {\n    return new HumanMessageChunk(message);\n  }\n\n  if (message.type === \"ai\" || message.type === \"assistant\") {\n    return new AIMessageChunk(message);\n  }\n\n  if (message.type === \"system\") {\n    return new SystemMessageChunk(message);\n  }\n\n  if (message.type === \"tool\" && \"tool_call_id\" in message) {\n    return new ToolMessageChunk({\n      ...message,\n      tool_call_id: message.tool_call_id as string,\n    });\n  }\n\n  if (message.type === \"remove\" && message.id != null) {\n    return new RemoveMessage({ ...message, id: message.id });\n  }\n\n  return coerceMessageLikeToMessage(message);\n}\n\nexport class MessageTupleManager {\n  chunks: Record<\n    string,\n    {\n      chunk?: BaseMessageChunk | BaseMessage;\n      metadata?: Record<string, unknown>;\n      index?: number;\n    }\n  > = {};\n\n  constructor() {\n    this.chunks = {};\n  }\n\n  add(\n    serialized: Message,\n    metadata: Record<string, unknown> | undefined\n  ): string | null {\n    // TODO: this is sometimes sent from the API\n    // figure out how to prevent this or move this to LC.js\n    if (serialized.type.endsWith(\"MessageChunk\")) {\n      // eslint-disable-next-line no-param-reassign\n      serialized.type = serialized.type\n        .slice(0, -\"MessageChunk\".length)\n        .toLowerCase() as Message[\"type\"];\n    }\n\n    const message = tryCoerceMessageLikeToMessage(serialized);\n    const chunk = tryConvertToChunk(message);\n\n    const { id } = chunk ?? message;\n    if (!id) {\n      console.warn(\n        \"No message ID found for chunk, ignoring in state\",\n        serialized\n      );\n      return null;\n    }\n\n    this.chunks[id] ??= {};\n    this.chunks[id].metadata = metadata ?? this.chunks[id].metadata;\n    if (chunk) {\n      const prev = this.chunks[id].chunk;\n      this.chunks[id].chunk =\n        (isBaseMessageChunk(prev) ? prev : null)?.concat(chunk) ?? chunk;\n    } else {\n      this.chunks[id].chunk = message;\n    }\n\n    return id;\n  }\n\n  clear() {\n    this.chunks = {};\n  }\n\n  get(id: string | null | undefined, defaultIndex?: number) {\n    if (id == null) return null;\n    if (this.chunks[id] == null) return null;\n    if (defaultIndex != null) this.chunks[id].index ??= defaultIndex;\n    return this.chunks[id];\n  }\n}\n\nexport const toMessageDict = (chunk: BaseMessage): Message => {\n  const { type, data } = chunk.toDict();\n  return { ...data, type } as Message;\n};\n"],"mappings":";;;;AAeA,SAAgB,kBACd,SACyB;AACzB,KAAI;AACF,uDAAuB,QAAQ,CAAE,QAAO;AACxC,sDAAsB,QAAQ;SACxB;AACN,SAAO;;;AAIX,SAAgB,8BACd,SACgC;AAChC,KAAI,QAAQ,SAAS,WAAW,QAAQ,SAAS,OAC/C,QAAO,IAAIA,2CAAkB,QAAQ;AAGvC,KAAI,QAAQ,SAAS,QAAQ,QAAQ,SAAS,YAC5C,QAAO,IAAIC,wCAAe,QAAQ;AAGpC,KAAI,QAAQ,SAAS,SACnB,QAAO,IAAIC,4CAAmB,QAAQ;AAGxC,KAAI,QAAQ,SAAS,UAAU,kBAAkB,QAC/C,QAAO,IAAIC,0CAAiB;EAC1B,GAAG;EACH,cAAc,QAAQ;EACvB,CAAC;AAGJ,KAAI,QAAQ,SAAS,YAAY,QAAQ,MAAM,KAC7C,QAAO,IAAIC,uCAAc;EAAE,GAAG;EAAS,IAAI,QAAQ;EAAI,CAAC;AAG1D,iEAAkC,QAAQ;;AAG5C,IAAa,sBAAb,MAAiC;CAC/B,SAOI,EAAE;CAEN,cAAc;AACZ,OAAK,SAAS,EAAE;;CAGlB,IACE,YACA,UACe;AAGf,MAAI,WAAW,KAAK,SAAS,eAAe,CAE1C,YAAW,OAAO,WAAW,KAC1B,MAAM,GAAG,IAAuB,CAChC,aAAa;EAGlB,MAAM,UAAU,8BAA8B,WAAW;EACzD,MAAM,QAAQ,kBAAkB,QAAQ;EAExC,MAAM,EAAE,OAAO,SAAS;AACxB,MAAI,CAAC,IAAI;AACP,WAAQ,KACN,oDACA,WACD;AACD,UAAO;;AAGT,OAAK,OAAO,QAAQ,EAAE;AACtB,OAAK,OAAO,IAAI,WAAW,YAAY,KAAK,OAAO,IAAI;AACvD,MAAI,OAAO;GACT,MAAM,OAAO,KAAK,OAAO,IAAI;AAC7B,QAAK,OAAO,IAAI,0DACM,KAAK,GAAG,OAAO,OAAO,OAAO,MAAM,IAAI;QAE7D,MAAK,OAAO,IAAI,QAAQ;AAG1B,SAAO;;CAGT,QAAQ;AACN,OAAK,SAAS,EAAE;;CAGlB,IAAI,IAA+B,cAAuB;AACxD,MAAI,MAAM,KAAM,QAAO;AACvB,MAAI,KAAK,OAAO,OAAO,KAAM,QAAO;AACpC,MAAI,gBAAgB,KAAM,MAAK,OAAO,IAAI,UAAU;AACpD,SAAO,KAAK,OAAO;;;AAIvB,MAAa,iBAAiB,UAAgC;CAC5D,MAAM,EAAE,MAAM,SAAS,MAAM,QAAQ;AACrC,QAAO;EAAE,GAAG;EAAM;EAAM"}