{"version":3,"sources":["../../src/adapters/vercel-ai.ts"],"names":["vercelToOpenAI","compress","openAIToVercel","require","createRequire"],"mappings":";;;;;;AAsCO,SAAS,kBAAA,CAAmB,OAAA,GAA2B,EAAC,EAAG;AAChE,EAAA,OAAO;AAAA,IACL,iBAAiB,OAAO;AAAA,MACtB;AAAA,KACF,KAIM;AACJ,MAAA,MAAM,SAA0B,MAAA,CAAO,MAAA;AACvC,MAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,GAAG,OAAO,MAAA;AAE3C,MAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,KAAA,IAAS,MAAA,CAAO,OAAA,IAAW,QAAA;AAGjD,MAAA,MAAM,cAAA,GAAiBA,iCAAe,MAAM,CAAA;AAG5C,MAAA,MAAM,MAAA,GAAS,MAAMC,0BAAA,CAAS,cAAA,EAAgB;AAAA,QAC5C,KAAA,EAAO,sBAAA;AAAA,QACP,GAAG,OAAA;AAAA,QACH;AAAA,OACD,CAAA;AAED,MAAA,IAAI,CAAC,MAAA,CAAO,UAAA,EAAY,OAAO,MAAA;AAG/B,MAAA,MAAM,gBAAA,GAAmBC,gCAAA,CAAe,MAAA,CAAO,QAAQ,CAAA;AAEvD,MAAA,OAAO,EAAE,GAAG,MAAA,EAAQ,MAAA,EAAQ,gBAAA,EAAiB;AAAA,IAC/C;AAAA,GACF;AACF;AAMA,eAAsB,sBAAA,CACpB,QAAA,EACA,OAAA,GAA2B,EAAC,EAC6B;AACzD,EAAA,MAAM,cAAA,GAAiBF,iCAAe,QAAQ,CAAA;AAC9C,EAAA,MAAM,MAAA,GAAS,MAAMC,0BAAA,CAAS,cAAA,EAAgB;AAAA,IAC5C,KAAA,EAAO,sBAAA;AAAA,IACP,GAAG;AAAA,GACJ,CAAA;AACD,EAAA,MAAM,cAAA,GAAiBC,gCAAA,CAAe,MAAA,CAAO,QAAQ,CAAA;AAErD,EAAA,OAAO;AAAA,IACL,GAAG,MAAA;AAAA,IACH,QAAA,EAAU;AAAA,GACZ;AACF;AAgBO,SAAS,YAAA,CACd,KAAA,EACA,OAAA,GAA2B,EAAC,EACzB;AACH,EAAA,IAAI,iBAAA;AAKJ,EAAA,IAAI;AACF,IAAA,MAAMC,QAAAA,GAAUC,sBAAA,CAAc,+PAAe,CAAA;AAC7C,IAAA,MAAM,EAAA,GAAKD,SAAQ,IAAI,CAAA;AACvB,IAAA,iBAAA,GAAoB,EAAA,CAAG,iBAAA;AAAA,EACzB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AAEA,EAAA,OAAO,iBAAA,CAAkB;AAAA,IACvB,KAAA;AAAA,IACA,UAAA,EAAY,mBAAmB,OAAO;AAAA,GACvC,CAAA;AACH","file":"vercel-ai.cjs","sourcesContent":["import { createRequire } from \"node:module\";\nimport { compress } from \"../compress.js\";\nimport type { CompressOptions, CompressResult } from \"../types.js\";\nimport { vercelToOpenAI, openAIToVercel } from \"../utils/format.js\";\n\n/**\n * Minimal structural type for Vercel AI SDK language models.\n * Compatible with both LanguageModelV1 (@ai-sdk/provider <=1.x)\n * and LanguageModelV3 (@ai-sdk/provider >=2.x).\n */\ninterface LanguageModel {\n  readonly specificationVersion: string;\n  readonly provider: string;\n  readonly modelId: string;\n  doGenerate: (...args: any[]) => any;\n  doStream: (...args: any[]) => any;\n  [key: string]: any;\n}\n\n/* eslint-disable @typescript-eslint/no-explicit-any */\ntype VercelMessage = any;\n\n/**\n * Vercel AI SDK LanguageModelV3Middleware that compresses messages\n * before they reach the LLM.\n *\n * @example\n * ```typescript\n * import { headroomMiddleware } from 'headroom-ai/vercel-ai';\n * import { wrapLanguageModel } from 'ai';\n * import { openai } from '@ai-sdk/openai';\n *\n * const model = wrapLanguageModel({\n *   model: openai('gpt-4o'),\n *   middleware: headroomMiddleware(),\n * });\n * ```\n */\nexport function headroomMiddleware(options: CompressOptions = {}) {\n  return {\n    transformParams: async ({\n      params,\n    }: {\n      params: any;\n      model: any;\n      type: string;\n    }) => {\n      const prompt: VercelMessage[] = params.prompt;\n      if (!prompt || prompt.length === 0) return params;\n\n      const model = options.model ?? params.modelId ?? \"gpt-4o\";\n\n      // Convert Vercel format → OpenAI format\n      const openaiMessages = vercelToOpenAI(prompt);\n\n      // Compress via Headroom\n      const result = await compress(openaiMessages, {\n        stack: \"adapter_ts_vercel_ai\",\n        ...options,\n        model,\n      });\n\n      if (!result.compressed) return params;\n\n      // Convert back to Vercel format\n      const compressedPrompt = openAIToVercel(result.messages);\n\n      return { ...params, prompt: compressedPrompt };\n    },\n  };\n}\n\n/**\n * Standalone: compress Vercel AI SDK ModelMessage[] directly.\n * Returns compressed messages in Vercel format + compression stats.\n */\nexport async function compressVercelMessages(\n  messages: VercelMessage[],\n  options: CompressOptions = {},\n): Promise<CompressResult & { messages: VercelMessage[] }> {\n  const openaiMessages = vercelToOpenAI(messages);\n  const result = await compress(openaiMessages, {\n    stack: \"adapter_ts_vercel_ai\",\n    ...options,\n  });\n  const vercelMessages = openAIToVercel(result.messages);\n\n  return {\n    ...result,\n    messages: vercelMessages,\n  };\n}\n\n/**\n * Wrap a Vercel AI SDK language model with Headroom compression.\n * Convenience wrapper around `wrapLanguageModel` + `headroomMiddleware`.\n *\n * @example\n * ```typescript\n * import { withHeadroom } from 'headroom-ai/vercel-ai';\n * import { openai } from '@ai-sdk/openai';\n * import { generateText } from 'ai';\n *\n * const model = withHeadroom(openai('gpt-4o'));\n * const { text } = await generateText({ model, messages });\n * ```\n */\nexport function withHeadroom<T extends LanguageModel>(\n  model: T,\n  options: CompressOptions = {},\n): T {\n  let wrapLanguageModel: (opts: {\n    model: T;\n    middleware: any;\n  }) => T;\n\n  try {\n    const require = createRequire(import.meta.url);\n    const ai = require(\"ai\");\n    wrapLanguageModel = ai.wrapLanguageModel;\n  } catch {\n    throw new Error(\n      'withHeadroom() requires the \"ai\" package. Install it with: npm install ai',\n    );\n  }\n\n  return wrapLanguageModel({\n    model,\n    middleware: headroomMiddleware(options),\n  });\n}\n"]}