{"version":3,"file":"misc.cjs","names":["ChatMessage"],"sources":["../../src/utils/misc.ts"],"sourcesContent":["import type { OpenAI as OpenAIClient } from \"openai\";\nimport {\n  BaseMessage,\n  ChatMessage,\n  ContentBlock,\n  Data,\n} from \"@langchain/core/messages\";\n\nexport const iife = <T>(fn: () => T) => fn();\n\nexport function isReasoningModel(model?: string) {\n  if (!model) return false;\n  if (/^o\\d/.test(model ?? \"\")) return true;\n  if (model.startsWith(\"gpt-5\") && !model.startsWith(\"gpt-5-chat\")) return true;\n  return false;\n}\n\nexport function extractGenericMessageCustomRole(message: ChatMessage) {\n  if (\n    message.role !== \"system\" &&\n    message.role !== \"developer\" &&\n    message.role !== \"assistant\" &&\n    message.role !== \"user\" &&\n    message.role !== \"function\" &&\n    message.role !== \"tool\"\n  ) {\n    console.warn(`Unknown message role: ${message.role}`);\n  }\n\n  return message.role as OpenAIClient.ChatCompletionRole;\n}\n\nexport function getFilenameFromMetadata(\n  block:\n    | ContentBlock.Multimodal.File\n    | ContentBlock.Multimodal.Video\n    | Data.StandardFileBlock\n): string | undefined {\n  return (block.metadata?.filename ??\n    block.metadata?.name ??\n    block.metadata?.title) as string;\n}\n\nexport const LC_AUTOGENERATED_FILENAME = \"LC_AUTOGENERATED\";\n\nexport function getRequiredFilenameFromMetadata(\n  block:\n    | ContentBlock.Multimodal.File\n    | ContentBlock.Multimodal.Video\n    | Data.StandardFileBlock\n): string {\n  const filename = (block.metadata?.filename ??\n    block.metadata?.name ??\n    block.metadata?.title) as string;\n\n  if (!filename) {\n    console.warn(\n      \"OpenAI may require a filename for file uploads. Specify a filename \" +\n        \"in the content block metadata, e.g.: { type: 'file', mimeType: \" +\n        \"'...', data: '...', metadata: { filename: 'my-file.pdf' } }. \" +\n        \"Using placeholder filename 'LC_AUTOGENERATED'.\"\n    );\n    return LC_AUTOGENERATED_FILENAME;\n  }\n\n  return filename;\n}\nexport function messageToOpenAIRole(\n  message: BaseMessage\n): OpenAIClient.ChatCompletionRole {\n  const type = message._getType();\n  switch (type) {\n    case \"system\":\n      return \"system\";\n    case \"ai\":\n      return \"assistant\";\n    case \"human\":\n      return \"user\";\n    case \"function\":\n      return \"function\";\n    case \"tool\":\n      return \"tool\";\n    case \"generic\": {\n      if (!ChatMessage.isInstance(message))\n        throw new Error(\"Invalid generic chat message\");\n      return extractGenericMessageCustomRole(message);\n    }\n    default:\n      throw new Error(`Unknown message type: ${type}`);\n  }\n}\n\nexport function _modelPrefersResponsesAPI(model: string): boolean {\n  if (model.includes(\"gpt-5.2-pro\")) return true;\n  if (model.includes(\"gpt-5.4-pro\")) return true;\n  // Codex models are Responses API only\n  if (model.includes(\"codex\")) return true;\n  return false;\n}\n"],"mappings":";;AAQA,MAAa,QAAW,OAAgB,IAAI;AAE5C,SAAgB,iBAAiB,OAAgB;AAC/C,KAAI,CAAC,MAAO,QAAO;AACnB,KAAI,OAAO,KAAK,SAAS,GAAG,CAAE,QAAO;AACrC,KAAI,MAAM,WAAW,QAAQ,IAAI,CAAC,MAAM,WAAW,aAAa,CAAE,QAAO;AACzE,QAAO;;AAGT,SAAgB,gCAAgC,SAAsB;AACpE,KACE,QAAQ,SAAS,YACjB,QAAQ,SAAS,eACjB,QAAQ,SAAS,eACjB,QAAQ,SAAS,UACjB,QAAQ,SAAS,cACjB,QAAQ,SAAS,OAEjB,SAAQ,KAAK,yBAAyB,QAAQ,OAAO;AAGvD,QAAO,QAAQ;;AAGjB,SAAgB,wBACd,OAIoB;AACpB,QAAQ,MAAM,UAAU,YACtB,MAAM,UAAU,QAChB,MAAM,UAAU;;AAGpB,MAAa,4BAA4B;AAEzC,SAAgB,gCACd,OAIQ;CACR,MAAM,WAAY,MAAM,UAAU,YAChC,MAAM,UAAU,QAChB,MAAM,UAAU;AAElB,KAAI,CAAC,UAAU;AACb,UAAQ,KACN,gPAID;AACD,SAAO;;AAGT,QAAO;;AAET,SAAgB,oBACd,SACiC;CACjC,MAAM,OAAO,QAAQ,UAAU;AAC/B,SAAQ,MAAR;EACE,KAAK,SACH,QAAO;EACT,KAAK,KACH,QAAO;EACT,KAAK,QACH,QAAO;EACT,KAAK,WACH,QAAO;EACT,KAAK,OACH,QAAO;EACT,KAAK;AACH,OAAI,CAACA,yBAAAA,YAAY,WAAW,QAAQ,CAClC,OAAM,IAAI,MAAM,+BAA+B;AACjD,UAAO,gCAAgC,QAAQ;EAEjD,QACE,OAAM,IAAI,MAAM,yBAAyB,OAAO;;;AAItD,SAAgB,0BAA0B,OAAwB;AAChE,KAAI,MAAM,SAAS,cAAc,CAAE,QAAO;AAC1C,KAAI,MAAM,SAAS,cAAc,CAAE,QAAO;AAE1C,KAAI,MAAM,SAAS,QAAQ,CAAE,QAAO;AACpC,QAAO"}