{"version":3,"sources":["../../../../src/runtimes/edge/converters/fromLanguageModelMessages.ts"],"sourcesContent":["import { LanguageModelV1Message } from \"@ai-sdk/provider\";\nimport { CoreMessage, ToolCallContentPart } from \"../../../types\";\n\ntype fromLanguageModelMessagesOptions = {\n  mergeSteps: boolean;\n};\n\nexport const fromLanguageModelMessages = (\n  lm: LanguageModelV1Message[],\n  { mergeSteps }: fromLanguageModelMessagesOptions,\n): CoreMessage[] => {\n  const messages: CoreMessage[] = [];\n\n  for (const lmMessage of lm) {\n    const role = lmMessage.role;\n    switch (role) {\n      case \"system\": {\n        messages.push({\n          role: \"system\",\n          content: [\n            {\n              type: \"text\",\n              text: lmMessage.content,\n            },\n          ],\n        });\n        break;\n      }\n      case \"user\": {\n        messages.push({\n          role: \"user\",\n          content: lmMessage.content.map((part) => {\n            const type = part.type;\n            switch (type) {\n              case \"text\": {\n                return {\n                  type: \"text\",\n                  text: part.text,\n                };\n              }\n              case \"image\": {\n                if (part.image instanceof URL) {\n                  return {\n                    type: \"image\",\n                    image: part.image.href,\n                  };\n                }\n                throw new Error(\"Only images with URL data are supported\");\n              }\n              case \"file\": {\n                // TODO\n                throw new Error(\"File content parts are not supported\");\n              }\n              default: {\n                const unhandledType: never = type;\n                throw new Error(`Unknown content part type: ${unhandledType}`);\n              }\n            }\n          }),\n        });\n        break;\n      }\n      case \"assistant\": {\n        const newContent = lmMessage.content.map((part) => {\n          if (part.type === \"tool-call\") {\n            return {\n              type: \"tool-call\",\n              toolCallId: part.toolCallId,\n              toolName: part.toolName,\n              argsText: JSON.stringify(part.args),\n              args: part.args as Record<string, unknown>,\n            } satisfies ToolCallContentPart;\n          }\n          return part;\n        });\n\n        if (mergeSteps) {\n          const previousMessage = messages[messages.length - 1];\n          if (previousMessage?.role === \"assistant\") {\n            previousMessage.content.push(...newContent);\n            break;\n          }\n        }\n\n        messages.push({\n          role: \"assistant\",\n          content: newContent,\n        });\n        break;\n      }\n      case \"tool\": {\n        const previousMessage = messages[messages.length - 1];\n        if (previousMessage?.role !== \"assistant\")\n          throw new Error(\n            \"A tool message must be preceded by an assistant message.\",\n          );\n\n        for (const tool of lmMessage.content) {\n          const toolCall = previousMessage.content.find(\n            (c): c is ToolCallContentPart =>\n              c.type === \"tool-call\" && c.toolCallId === tool.toolCallId,\n          );\n          if (!toolCall)\n            throw new Error(\"Received tool result for an unknown tool call.\");\n          if (toolCall.toolName !== tool.toolName)\n            throw new Error(\"Tool call name mismatch.\");\n\n          toolCall.result = tool.result;\n          if (tool.isError) {\n            toolCall.isError = true;\n          }\n        }\n\n        break;\n      }\n\n      default: {\n        const unhandledRole: never = role;\n        throw new Error(`Unknown message role: ${unhandledRole}`);\n      }\n    }\n  }\n\n  return messages;\n};\n"],"mappings":";AAOO,IAAM,4BAA4B,CACvC,IACA,EAAE,WAAW,MACK;AAClB,QAAM,WAA0B,CAAC;AAEjC,aAAW,aAAa,IAAI;AAC1B,UAAM,OAAO,UAAU;AACvB,YAAQ,MAAM;AAAA,MACZ,KAAK,UAAU;AACb,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,YACP;AAAA,cACE,MAAM;AAAA,cACN,MAAM,UAAU;AAAA,YAClB;AAAA,UACF;AAAA,QACF,CAAC;AACD;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS,UAAU,QAAQ,IAAI,CAAC,SAAS;AACvC,kBAAM,OAAO,KAAK;AAClB,oBAAQ,MAAM;AAAA,cACZ,KAAK,QAAQ;AACX,uBAAO;AAAA,kBACL,MAAM;AAAA,kBACN,MAAM,KAAK;AAAA,gBACb;AAAA,cACF;AAAA,cACA,KAAK,SAAS;AACZ,oBAAI,KAAK,iBAAiB,KAAK;AAC7B,yBAAO;AAAA,oBACL,MAAM;AAAA,oBACN,OAAO,KAAK,MAAM;AAAA,kBACpB;AAAA,gBACF;AACA,sBAAM,IAAI,MAAM,yCAAyC;AAAA,cAC3D;AAAA,cACA,KAAK,QAAQ;AAEX,sBAAM,IAAI,MAAM,sCAAsC;AAAA,cACxD;AAAA,cACA,SAAS;AACP,sBAAM,gBAAuB;AAC7B,sBAAM,IAAI,MAAM,8BAA8B,aAAa,EAAE;AAAA,cAC/D;AAAA,YACF;AAAA,UACF,CAAC;AAAA,QACH,CAAC;AACD;AAAA,MACF;AAAA,MACA,KAAK,aAAa;AAChB,cAAM,aAAa,UAAU,QAAQ,IAAI,CAAC,SAAS;AACjD,cAAI,KAAK,SAAS,aAAa;AAC7B,mBAAO;AAAA,cACL,MAAM;AAAA,cACN,YAAY,KAAK;AAAA,cACjB,UAAU,KAAK;AAAA,cACf,UAAU,KAAK,UAAU,KAAK,IAAI;AAAA,cAClC,MAAM,KAAK;AAAA,YACb;AAAA,UACF;AACA,iBAAO;AAAA,QACT,CAAC;AAED,YAAI,YAAY;AACd,gBAAM,kBAAkB,SAAS,SAAS,SAAS,CAAC;AACpD,cAAI,iBAAiB,SAAS,aAAa;AACzC,4BAAgB,QAAQ,KAAK,GAAG,UAAU;AAC1C;AAAA,UACF;AAAA,QACF;AAEA,iBAAS,KAAK;AAAA,UACZ,MAAM;AAAA,UACN,SAAS;AAAA,QACX,CAAC;AACD;AAAA,MACF;AAAA,MACA,KAAK,QAAQ;AACX,cAAM,kBAAkB,SAAS,SAAS,SAAS,CAAC;AACpD,YAAI,iBAAiB,SAAS;AAC5B,gBAAM,IAAI;AAAA,YACR;AAAA,UACF;AAEF,mBAAW,QAAQ,UAAU,SAAS;AACpC,gBAAM,WAAW,gBAAgB,QAAQ;AAAA,YACvC,CAAC,MACC,EAAE,SAAS,eAAe,EAAE,eAAe,KAAK;AAAA,UACpD;AACA,cAAI,CAAC;AACH,kBAAM,IAAI,MAAM,gDAAgD;AAClE,cAAI,SAAS,aAAa,KAAK;AAC7B,kBAAM,IAAI,MAAM,0BAA0B;AAE5C,mBAAS,SAAS,KAAK;AACvB,cAAI,KAAK,SAAS;AAChB,qBAAS,UAAU;AAAA,UACrB;AAAA,QACF;AAEA;AAAA,MACF;AAAA,MAEA,SAAS;AACP,cAAM,gBAAuB;AAC7B,cAAM,IAAI,MAAM,yBAAyB,aAAa,EAAE;AAAA,MAC1D;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;","names":[]}