{"version":3,"file":"index.cjs","names":["chunk: ChatAgentChunk","response: ChatAgentResponse","parts: LanguageModelV3Content[]","prompt: LanguageModelV3Prompt","messages: ChatAgentResponse['messages']","msg: LanguageModelV3UserMessage","messageIndex: number","msg: LanguageModelV3AssistantMessage","startIndex: number","messages: ChatAgentMessage[]","msg: LanguageModelV3ToolMessage","output: LanguageModelV3ToolResultPart['output']","initialParts: LanguageModelV3StreamPart[]","last: LanguageModelV3StreamPart | null","applyDeltaBoundaryTransform: DatabricksStreamPartTransformer<\n  LanguageModelV3StreamPart\n>","out: LanguageModelV3StreamPart[]","part?: LanguageModelV3StreamPart | null","part: LanguageModelV3StreamPart | null","part: DeltaPart","type: LanguageModelV3StreamPart['type']","part: LanguageModelV3StreamPart","id: string | undefined","group: ReturnType<typeof getDeltaGroup>","modelId: string","config: DatabricksLanguageModelConfig","options: Parameters<LanguageModelV3['doGenerate']>[0]","options: Parameters<LanguageModelV3['doStream']>[0]","finishReason: LanguageModelV3FinishReason","chunk: ResponsesAgentChunk","options: ConvertChunkOptions","parts: LanguageModelV3StreamPart[]","item: OutputItemDoneItem","response: ResponsesAgentResponse","options: ConvertResponseOptions","parts: LanguageModelV3Content[]","input: ResponsesInput","warnings: Array<SharedV3Warning>","_exhaustiveCheck: never","output: LanguageModelV3ToolResultPart['output']","responsesTools: Array<ResponsesTool>","toolChoice: LanguageModelV3ToolChoice | undefined","options: LanguageModelV3CallOptions","warnings: SharedV3Warning[]","args: ResponsesBodyArgs","unified: LanguageModelV3FinishReason['unified']","modelId: string","config: DatabricksLanguageModelConfig","options: Parameters<LanguageModelV3['doGenerate']>[0]","options: Parameters<LanguageModelV3['doStream']>[0]","finishReason: LanguageModelV3FinishReason","usage: LanguageModelV3Usage","allParts: LanguageModelV3StreamPart[]","incomingParts: LanguageModelV3StreamPart[]","previousParts: LanguageModelV3StreamPart[]","chunk: FmapiChunk","toolCallIdsByIndex?: Map<number, string>","parts: LanguageModelV3StreamPart[]","response: FmapiResponse","options: FmapiConvertOptions","parts: LanguageModelV3Content[]","toolCall: FmapiToolCall","items: FmapiContentItem[]","id: string","prompt: LanguageModelV3Message[]","messages: Array<FmapiInputMessage>","message: LanguageModelV3SystemMessage","message: LanguageModelV3UserMessage","content: FmapiContentItem[]","message: LanguageModelV3AssistantMessage","contentItems: FmapiContentItem[]","toolCalls: Array<{\n    id: string\n    type: 'function'\n    function: { name: string; arguments: string }\n  }>","message: LanguageModelV3ToolMessage","messages: FmapiInputMessage[]","data: URL | string | Uint8Array","output: LanguageModelV3ToolResultPart['output']","part: LanguageModelV3ToolCallPart","finishReason: string | null | undefined","options: LanguageModelV3CallOptions","warnings: SharedV3Warning[]","args: FmapiBodyArgs","modelId: string","config: DatabricksLanguageModelConfig","options: Parameters<LanguageModelV3['doGenerate']>[0]","options: Parameters<LanguageModelV3['doStream']>[0]","finishReason: LanguageModelV3FinishReason","usage: LanguageModelV3Usage","tool: LanguageModelV3FunctionTool | LanguageModelV3ProviderTool","toolChoice: LanguageModelV3ToolChoice","settings: DatabricksProviderSettings","modelId: string","name: string"],"sources":["../src/chat-agent-language-model/chat-agent-schema.ts","../src/chat-agent-language-model/chat-agent-convert-to-message-parts.ts","../src/chat-agent-language-model/chat-agent-convert-to-input.ts","../src/stream-transformers/compose-stream-part-transformers.ts","../src/stream-transformers/databricks-delta-boundary.ts","../src/stream-transformers/databricks-stream-transformer.ts","../src/chat-agent-language-model/chat-agent-language-model.ts","../src/responses-agent-language-model/responses-agent-schema.ts","../src/responses-agent-language-model/responses-convert-to-message-parts.ts","../src/responses-agent-language-model/responses-convert-to-input.ts","../src/responses-agent-language-model/responses-prepare-tools.ts","../src/responses-agent-language-model/call-options-to-responses-args.ts","../src/responses-agent-language-model/responses-agent-language-model.ts","../src/fmapi-language-model/fmapi-schema.ts","../src/fmapi-language-model/fmapi-convert-to-message-parts.ts","../src/fmapi-language-model/fmapi-convert-to-input.ts","../src/fmapi-language-model/fmapi-finish-reason.ts","../src/fmapi-language-model/call-options-to-fmapi-args.ts","../src/fmapi-language-model/fmapi-language-model.ts","../src/databricks-provider.ts"],"sourcesContent":["import { z } from 'zod/v4'\n\n// Tool call schema\nconst chatAgentToolCallSchema = z.object({\n  type: z.literal('function'),\n  function: z.object({\n    name: z.string(),\n    arguments: z.string(),\n  }),\n  id: z.string(),\n})\n\n// Message schemas (discriminated by role)\nconst chatAgentAssistantMessageSchema = z.object({\n  role: z.literal('assistant'),\n  content: z.string(), // required, empty string allowed\n  id: z.string(),\n  name: z.string().optional(),\n  tool_calls: z.array(chatAgentToolCallSchema).optional(),\n})\n\nconst chatAgentToolMessageSchema = z.object({\n  role: z.literal('tool'),\n  name: z.string(),\n  content: z.string(),\n  tool_call_id: z.string(),\n  id: z.string(),\n  attachments: z.record(z.string(), z.unknown()).optional(),\n})\n\nconst chatAgentUserMessageSchema = z.object({\n  role: z.literal('user'),\n  content: z.string(),\n  id: z.string(),\n})\n\nexport const chatAgentMessageSchema = z.discriminatedUnion('role', [\n  chatAgentAssistantMessageSchema,\n  chatAgentToolMessageSchema,\n  chatAgentUserMessageSchema,\n])\n\n// Stream chunk schema (used for SSE parsing)\nexport const chatAgentChunkSchema = z.object({\n  id: z.string(),\n  delta: chatAgentMessageSchema,\n})\n\n// Full response schema (not used in streaming handler, but kept for completeness)\nexport const chatAgentResponseSchema = z.object({\n  id: z.string(),\n  messages: z.array(chatAgentMessageSchema),\n})\n\n// Exported types for type-only imports in other modules\nexport type ChatAgentChunk = z.infer<typeof chatAgentChunkSchema>\nexport type ChatAgentResponse = z.infer<typeof chatAgentResponseSchema>\nexport type ChatAgentMessage = z.infer<typeof chatAgentMessageSchema>\n","import type { LanguageModelV3Content, LanguageModelV3StreamPart } from '@ai-sdk/provider'\nimport type { ChatAgentChunk, ChatAgentResponse } from './chat-agent-schema'\n\nexport const convertChatAgentChunkToMessagePart = (\n  chunk: ChatAgentChunk\n): LanguageModelV3StreamPart[] => {\n  const parts = [] as LanguageModelV3StreamPart[]\n  if (chunk.delta.role === 'assistant') {\n    if (chunk.delta.content) {\n      parts.push({\n        type: 'text-delta',\n        id: chunk.delta.id,\n        delta: chunk.delta.content,\n      })\n    }\n    chunk.delta.tool_calls?.forEach((toolCall) => {\n      parts.push({\n        type: 'tool-call',\n        toolCallId: toolCall.id,\n        input: toolCall.function.arguments,\n        toolName: toolCall.function.name,\n        dynamic: true,\n        providerExecuted: true,\n      })\n    })\n  } else if (chunk.delta.role === 'tool') {\n    parts.push({\n      type: 'tool-result',\n      toolCallId: chunk.delta.tool_call_id,\n      result: chunk.delta.content,\n      toolName: chunk.delta.name ?? 'unknown',\n    })\n  }\n  return parts\n}\n\nexport const convertChatAgentResponseToMessagePart = (\n  response: ChatAgentResponse\n): LanguageModelV3Content[] => {\n  const parts: LanguageModelV3Content[] = []\n  for (const message of response.messages) {\n    if (message.role === 'assistant') {\n      parts.push({\n        type: 'text',\n        text: message.content,\n      })\n      for (const part of message.tool_calls ?? []) {\n        parts.push({\n          type: 'tool-call',\n          toolCallId: part.id,\n          input: part.function.arguments,\n          toolName: part.function.name,\n          dynamic: true,\n          providerExecuted: true,\n        })\n      }\n    } else if (message.role === 'tool') {\n      parts.push({\n        type: 'tool-result',\n        toolCallId: message.tool_call_id,\n        result: message.content,\n        toolName: message.name ?? 'unknown',\n      })\n    }\n  }\n  return parts\n}\n","import type { LanguageModelV3Prompt, LanguageModelV3ToolResultPart } from '@ai-sdk/provider'\nimport type { ChatAgentResponse } from './chat-agent-schema'\n\ntype ChatAgentMessage = ChatAgentResponse['messages'][number]\ntype LanguageModelV3UserMessage = Extract<LanguageModelV3Prompt[number], { role: 'user' }>\ntype LanguageModelV3AssistantMessage = Extract<LanguageModelV3Prompt[number], { role: 'assistant' }>\ntype LanguageModelV3ToolMessage = Extract<LanguageModelV3Prompt[number], { role: 'tool' }>\n\nexport const convertLanguageModelV3PromptToChatAgentResponse = (\n  prompt: LanguageModelV3Prompt\n): ChatAgentResponse['messages'] => {\n  const messages: ChatAgentResponse['messages'] = []\n  let messageIndex = 0\n\n  for (const msg of prompt) {\n    switch (msg.role) {\n      case 'system':\n        // System messages are prompt-only; they don't exist in ChatAgent responses.\n        break\n\n      case 'user': {\n        const converted = convertUserMessage(msg, messageIndex)\n        messages.push(converted)\n        messageIndex++\n        break\n      }\n\n      case 'assistant': {\n        const converted = convertAssistantMessage(msg, messageIndex)\n        messages.push(...converted)\n        messageIndex += converted.length\n        break\n      }\n\n      case 'tool': {\n        const converted = convertToolMessage(msg, messageIndex)\n        messages.push(...converted)\n        messageIndex += converted.length\n        break\n      }\n    }\n  }\n\n  return messages\n}\n\nconst convertUserMessage = (\n  msg: LanguageModelV3UserMessage,\n  messageIndex: number\n): ChatAgentMessage => {\n  const text = (msg.content ?? [])\n    .filter((part): part is Extract<typeof part, { type: 'text' }> => part.type === 'text')\n    .map((part) => part.text)\n    .join('\\n')\n\n  return {\n    role: 'user',\n    content: text,\n    id: `user-${messageIndex}`,\n  }\n}\n\nconst convertAssistantMessage = (\n  msg: LanguageModelV3AssistantMessage,\n  startIndex: number\n): ChatAgentMessage[] => {\n  const messages: ChatAgentMessage[] = []\n  let messageIndex = startIndex\n\n  const textContent = (msg.content ?? [])\n    .filter((part) => part.type === 'text' || part.type === 'reasoning')\n    .map((part) => (part.type === 'text' ? part.text : part.text))\n    .join('\\n')\n\n  const toolCalls = (msg.content ?? [])\n    .filter(\n      (part): part is Extract<typeof part, { type: 'tool-call' }> => part.type === 'tool-call'\n    )\n    .map((call) => ({\n      type: 'function' as const,\n      id: call.toolCallId,\n      function: {\n        name: call.toolName,\n        arguments: typeof call.input === 'string' ? call.input : JSON.stringify(call.input ?? {}),\n      },\n    }))\n\n  messages.push({\n    role: 'assistant',\n    content: textContent,\n    id: `assistant-${messageIndex++}`,\n    tool_calls: toolCalls.length > 0 ? toolCalls : undefined,\n  })\n\n  // Convert any tool results embedded in the assistant message into separate tool messages.\n  for (const part of msg.content ?? []) {\n    if (part.type === 'tool-result') {\n      messages.push({\n        role: 'tool',\n        name: part.toolName,\n        content: convertToolResultOutput(part.output),\n        tool_call_id: part.toolCallId,\n        id: `tool-${messageIndex++}`,\n      })\n    }\n  }\n\n  return messages\n}\n\nconst convertToolMessage = (\n  msg: LanguageModelV3ToolMessage,\n  startIndex: number\n): ChatAgentMessage[] => {\n  const messages: ChatAgentMessage[] = []\n  let messageIndex = startIndex\n\n  for (const part of msg.content ?? []) {\n    if (part.type === 'tool-result') {\n      messages.push({\n        role: 'tool',\n        name: part.toolName,\n        content: convertToolResultOutput(part.output),\n        tool_call_id: part.toolCallId,\n        id: `tool-${messageIndex++}`,\n      })\n    }\n  }\n\n  return messages\n}\n\nconst convertToolResultOutput = (output: LanguageModelV3ToolResultPart['output']): string => {\n  switch (output.type) {\n    case 'text':\n    case 'error-text':\n      return output.value\n    case 'json':\n    case 'error-json':\n      return JSON.stringify(output.value)\n    case 'content':\n      return output.value\n        .map((p) => (p.type === 'text' ? p.text : ''))\n        .filter(Boolean)\n        .join('\\n')\n    default:\n      return ''\n  }\n}\n","import type { LanguageModelV3StreamPart } from '@ai-sdk/provider'\n\nexport type DatabricksStreamPartTransformer<Out extends LanguageModelV3StreamPart> = (\n  parts: LanguageModelV3StreamPart[],\n  last: LanguageModelV3StreamPart | null\n) => {\n  out: Out[]\n}\n\n/* -----------------------------------------------------------------\n   Tiny helpers for the type‑level plumbing\n   ----------------------------------------------------------------- */\n\n/** Extract the element type (`Out`) from a concrete transformer. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Required for conditional type inference\ntype OutElement<TFn> = TFn extends (parts: any, last: any) => { out: (infer O)[] } ? O : never\n\n/** Return the last element of a tuple type. */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Standard TypeScript tuple manipulation pattern\ntype Last<T extends any[]> = T extends [...any[], infer L] ? L : never\n\n/**\n * Compose an arbitrary number of `DatabricksStreamPartTransformer`s.\n *\n * The returned function has the exact same signature as a normal transformer,\n * but its `out`‑element type is inferred from the **last** transformer you pass\n * in.\n *\n * Runtime behaviour:\n *   1️⃣ Call the first transformer with the supplied `parts` and the\n *      caller‑provided `last` (usually `null`).\n *   2️⃣ Take its `out` and `last` and feed them to the next transformer.\n *   3️⃣ …repeat until the last transformer runs.\n *   4️⃣ Return the `out`/`last` of that final transformer.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Transformers have varying Out types\nexport function composeDatabricksStreamPartTransformers<\n  T extends DatabricksStreamPartTransformer<any>[],\n>(...transformers: T): DatabricksStreamPartTransformer<OutElement<Last<T>>> {\n  // The generic `OutElement<Last<T>>` is the element type of the **last**\n  // transformer, so the returned function has the correct inferred type.\n  return (\n    initialParts: LanguageModelV3StreamPart[],\n    last: LanguageModelV3StreamPart | null = null\n  ) => {\n    // ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑-\n    // Runtime state that moves through the pipeline\n    // ‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑‑-\n    let currentParts = initialParts\n\n    // Execute each transformer in order, threading the two values.\n    for (const fn of transformers) {\n      const result = fn(currentParts, last)\n      currentParts = result.out as LanguageModelV3StreamPart[]\n    }\n\n    // `OutElement<Last<T>>` is exactly the element type that the *last*\n    // transformer emitted, so the cast is safe.\n    return {\n      out: currentParts as OutElement<Last<T>>[],\n    }\n  }\n}\n","import type { LanguageModelV3StreamPart } from '@ai-sdk/provider'\nimport type { DatabricksStreamPartTransformer } from './compose-stream-part-transformers'\n\ntype DeltaType = 'text' | 'reasoning'\n\n/**\n * Injects start/end deltas for sequential streams.\n */\nexport const applyDeltaBoundaryTransform: DatabricksStreamPartTransformer<\n  LanguageModelV3StreamPart\n> = (parts, last) => {\n  const out: LanguageModelV3StreamPart[] = []\n\n  const lastDeltaType = maybeGetDeltaType(last)\n  for (const incoming of parts) {\n    const incomingDeltaType = maybeGetDeltaType(incoming)\n    const incomingId = getPartId(incoming)\n    const lastId = getPartId(last)\n\n    // When continuous deltas are detected, we don't need to inject start/end deltas\n    const incomingMatchesLast =\n      // Only treat as a continuation when both are actual *-delta parts\n      Boolean(isDeltaPart(last) && isDeltaPart(incoming)) &&\n      Boolean(lastDeltaType && incomingDeltaType) &&\n      Boolean(lastDeltaType === incomingDeltaType) && // Same delta group (text/reasoning)\n      Boolean(incomingId && lastId && incomingId === lastId) // Same id\n\n    if (incomingMatchesLast) {\n      out.push(incoming)\n      continue\n    }\n\n    // If there's no delta continuation, and the last part is a delta, we need to end it\n    if (isDeltaPart(last)) {\n      out.push({ type: `${getDeltaType(last)}-end`, id: last.id })\n    }\n\n    // If there's a new delta, we need to start it\n    if (isDeltaPart(incoming)) {\n      out.push({ type: `${getDeltaType(incoming)}-start`, id: incoming.id }, incoming)\n      continue\n    }\n\n    // Otherwise, just push the incoming part\n    out.push(incoming)\n    continue\n  }\n\n  return { out }\n}\n\ntype DeltaPart = Extract<LanguageModelV3StreamPart, { type: `${DeltaType}-${string}` }>\nconst isDeltaIsh = (part?: LanguageModelV3StreamPart | null): part is DeltaPart =>\n  part?.type.startsWith('text-') || part?.type.startsWith('reasoning-') || false\n\nconst maybeGetDeltaType = (part: LanguageModelV3StreamPart | null) => {\n  if (!isDeltaIsh(part)) return null\n  if (part.type.startsWith('text-')) return 'text'\n  if (part.type.startsWith('reasoning-')) return 'reasoning'\n  return null\n}\n\nconst getDeltaType = (part: DeltaPart) => {\n  if (part.type.startsWith('text-')) return 'text'\n  if (part.type.startsWith('reasoning-')) return 'reasoning'\n  throw new Error(`Unknown delta type: ${part.type}`)\n}\n\nconst isDeltaPart = (\n  part: LanguageModelV3StreamPart | null\n): part is Extract<LanguageModelV3StreamPart, { type: `${DeltaType}-delta` }> =>\n  part?.type === 'text-delta' || part?.type === 'reasoning-delta'\n\nconst getPartId = (part: LanguageModelV3StreamPart | null): string | undefined => {\n  if (part && 'id' in part) return part.id\n  return undefined\n}\n","import type { LanguageModelV3StreamPart } from '@ai-sdk/provider'\n\nimport { composeDatabricksStreamPartTransformers } from './compose-stream-part-transformers'\nimport { applyDeltaBoundaryTransform } from './databricks-delta-boundary'\n\n/**\n * Allows stream transformations to be composed together.\n *\n * Currently only used to automatically inject start/end\n * deltas since the APIs does not supply the necessary events.\n */\nexport const getDatabricksLanguageModelTransformStream = () => {\n  let lastChunk = null as LanguageModelV3StreamPart | null\n  const deltaEndByTypeAndId = new Set<string>()\n  const transformerStreamParts = composeDatabricksStreamPartTransformers(\n    applyDeltaBoundaryTransform\n  )\n  return new TransformStream<LanguageModelV3StreamPart, LanguageModelV3StreamPart>({\n    transform(chunk, controller) {\n      // Raw chunks (from includeRawChunks) must be transparent to delta boundary tracking.\n      // Pass them through without running the transform or updating lastChunk.\n      if (chunk.type === 'raw') {\n        controller.enqueue(chunk)\n        return\n      }\n\n      // Apply transformation functions to the incoming chunks\n      const { out } = transformerStreamParts([chunk], lastChunk)\n\n      // Enqueue the transformed chunks with deduplication\n      out.forEach((transformedChunk) => {\n        const group = getDeltaGroup(transformedChunk.type)\n        const endKey = makeEndKey(getPartId(transformedChunk), group)\n        if (endKey && deltaEndByTypeAndId.has(endKey)) {\n          // If we already ended this specific group (text/reasoning) for this id, skip further parts of the same group\n          return\n        }\n        if (transformedChunk.type === 'text-end' || transformedChunk.type === 'reasoning-end') {\n          /**\n           * We register when a delta ends.\n           * We rely on response.output_item.done chunks to display non streamed data\n           * so we need to deduplicate them with their corresponding delta chunks.\n           */\n          const endGroup = getDeltaGroup(transformedChunk.type)\n          const key = makeEndKey(getPartId(transformedChunk), endGroup)\n          if (key) deltaEndByTypeAndId.add(key)\n        }\n        controller.enqueue(transformedChunk)\n      })\n\n      // Update the last chunk (skip raw chunks — already handled above)\n      lastChunk = out[out.length - 1] ?? lastChunk\n    },\n    flush(controller) {\n      // Finally, if there's a dangling text-delta, close it\n      if (lastChunk?.type === 'text-delta') {\n        controller.enqueue({ type: 'text-end', id: lastChunk.id })\n      }\n      if (lastChunk?.type === 'reasoning-delta') {\n        controller.enqueue({ type: 'reasoning-end', id: lastChunk.id })\n      }\n    },\n  })\n}\n\n// Utility functions\nconst getDeltaGroup = (type: LanguageModelV3StreamPart['type']): 'text' | 'reasoning' | null => {\n  if (type.startsWith('text-')) return 'text'\n  if (type.startsWith('reasoning-')) return 'reasoning'\n  return null\n}\nconst getPartId = (part: LanguageModelV3StreamPart): string | undefined => {\n  if ('id' in part) return part.id\n  return undefined\n}\nconst makeEndKey = (id: string | undefined, group: ReturnType<typeof getDeltaGroup>) =>\n  id && group ? `${group}:${id}` : null\n","import type {\n  LanguageModelV3,\n  LanguageModelV3CallOptions,\n  LanguageModelV3FinishReason,\n  LanguageModelV3StreamPart,\n} from '@ai-sdk/provider'\nimport {\n  type ParseResult,\n  combineHeaders,\n  createEventSourceResponseHandler,\n  createJsonResponseHandler,\n  createJsonErrorResponseHandler,\n  postJsonToApi,\n} from '@ai-sdk/provider-utils'\nimport { z } from 'zod/v4'\nimport type { DatabricksLanguageModelConfig } from '../databricks-provider'\nimport { chatAgentResponseSchema, chatAgentChunkSchema } from './chat-agent-schema'\nimport {\n  convertChatAgentChunkToMessagePart,\n  convertChatAgentResponseToMessagePart,\n} from './chat-agent-convert-to-message-parts'\nimport { convertLanguageModelV3PromptToChatAgentResponse } from './chat-agent-convert-to-input'\nimport { getDatabricksLanguageModelTransformStream } from '../stream-transformers/databricks-stream-transformer'\n\nexport class DatabricksChatAgentLanguageModel implements LanguageModelV3 {\n  readonly specificationVersion = 'v3'\n\n  readonly modelId: string\n\n  private readonly config: DatabricksLanguageModelConfig\n\n  constructor(modelId: string, config: DatabricksLanguageModelConfig) {\n    this.modelId = modelId\n    this.config = config\n  }\n\n  get provider(): string {\n    return this.config.provider\n  }\n\n  readonly supportedUrls: Record<string, RegExp[]> = {}\n\n  async doGenerate(\n    options: Parameters<LanguageModelV3['doGenerate']>[0]\n  ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n    const networkArgs = this.getArgs({\n      config: this.config,\n      options,\n      stream: false,\n      modelId: this.modelId,\n    })\n\n    const { value: response } = await postJsonToApi({\n      ...networkArgs,\n      successfulResponseHandler: createJsonResponseHandler(chatAgentResponseSchema),\n      failedResponseHandler: createJsonErrorResponseHandler({\n        errorSchema: z.any(),\n        errorToMessage: (error) => JSON.stringify(error),\n        isRetryable: () => false,\n      }),\n    })\n\n    return {\n      content: convertChatAgentResponseToMessagePart(response),\n      finishReason: { raw: undefined, unified: 'stop' },\n      usage: {\n        inputTokens: { total: 0, noCache: 0, cacheRead: 0, cacheWrite: 0 },\n        outputTokens: { total: 0, text: 0, reasoning: 0 },\n      },\n      warnings: [],\n    }\n  }\n\n  async doStream(\n    options: Parameters<LanguageModelV3['doStream']>[0]\n  ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n    const networkArgs = this.getArgs({\n      config: this.config,\n      options,\n      stream: true,\n      modelId: this.modelId,\n    })\n\n    const { responseHeaders, value: response } = await postJsonToApi({\n      ...networkArgs,\n      failedResponseHandler: createJsonErrorResponseHandler({\n        errorSchema: z.any(),\n        errorToMessage: (error) => JSON.stringify(error),\n        isRetryable: () => false,\n      }),\n      successfulResponseHandler: createEventSourceResponseHandler(chatAgentChunkSchema),\n    })\n\n    let finishReason: LanguageModelV3FinishReason = { raw: undefined, unified: 'other' }\n\n    return {\n      stream: response\n        .pipeThrough(\n          new TransformStream<\n            ParseResult<z.infer<typeof chatAgentChunkSchema>>,\n            LanguageModelV3StreamPart\n          >({\n            start(controller) {\n              controller.enqueue({ type: 'stream-start', warnings: [] })\n            },\n\n            transform(chunk, controller) {\n              if (options.includeRawChunks) {\n                controller.enqueue({ type: 'raw', rawValue: chunk.rawValue })\n              }\n\n              // // handle failed chunk parsing / validation:\n              if (!chunk.success) {\n                finishReason = { raw: undefined, unified: 'error' }\n                controller.enqueue({ type: 'error', error: chunk.error })\n                return\n              }\n\n              const parts = convertChatAgentChunkToMessagePart(chunk.value)\n              for (const part of parts) {\n                controller.enqueue(part)\n              }\n            },\n\n            flush(controller) {\n              controller.enqueue({\n                type: 'finish',\n                finishReason,\n                usage: {\n                  inputTokens: { total: 0, noCache: 0, cacheRead: 0, cacheWrite: 0 },\n                  outputTokens: { total: 0, text: 0, reasoning: 0 },\n                },\n              })\n            },\n          })\n        )\n        .pipeThrough(getDatabricksLanguageModelTransformStream()),\n      request: { body: networkArgs.body },\n      response: { headers: responseHeaders },\n    }\n  }\n\n  private getArgs({\n    config,\n    options,\n    stream,\n    modelId,\n  }: {\n    options: LanguageModelV3CallOptions\n    config: DatabricksLanguageModelConfig\n    stream: boolean\n    modelId: string\n  }) {\n    return {\n      body: {\n        model: modelId,\n        stream,\n        messages: convertLanguageModelV3PromptToChatAgentResponse(options.prompt),\n      },\n      url: config.url({\n        path: '/completions',\n      }),\n      headers: combineHeaders(config.headers(), options.headers),\n      fetch: config.fetch,\n      abortSignal: options.abortSignal,\n    }\n  }\n}\n","import { z } from 'zod/v4'\n\n/**\n * Response schema\n */\nconst responsesAgentMessageSchema = z.object({\n  type: z.literal('message'),\n  role: z.literal('assistant'),\n  id: z.string(),\n  content: z.array(\n    z.object({\n      type: z.literal('output_text'),\n      text: z.string(),\n      logprobs: z.unknown().nullish(),\n      annotations: z\n        .array(\n          z.discriminatedUnion('type', [\n            z.object({\n              type: z.literal('url_citation'),\n              start_index: z.number(),\n              end_index: z.number(),\n              url: z.string(),\n              title: z.string(),\n            }),\n          ])\n        )\n        .optional(),\n    })\n  ),\n})\n\nconst responsesAgentFunctionCallSchema = z.object({\n  type: z.literal('function_call'),\n  call_id: z.string(),\n  name: z.string(),\n  arguments: z.string(),\n  id: z.string(),\n})\n\nconst responsesAgentReasoningSchema = z.object({\n  type: z.literal('reasoning'),\n  id: z.string(),\n  encrypted_content: z.string().nullish(),\n  summary: z.array(\n    z.object({\n      type: z.literal('summary_text'),\n      text: z.string(),\n    })\n  ),\n})\n\nconst responsesAgentFunctionCallOutputSchema = z.object({\n  type: z.literal('function_call_output'),\n  call_id: z.string(),\n  output: z.any(),\n})\n\nconst responsesAgentMcpApprovalRequestSchema = z.object({\n  type: z.literal('mcp_approval_request'),\n  id: z.string(),\n  name: z.string(),\n  arguments: z.string(),\n  server_label: z.string(),\n})\n\nconst responsesAgentMcpApprovalResponseSchema = z.object({\n  type: z.literal('mcp_approval_response'),\n  id: z.string().optional(),\n  approval_request_id: z.string(),\n  approve: z.boolean(),\n  reason: z.string().nullish(),\n})\n\nconst responsesAgentOutputItem = z.discriminatedUnion('type', [\n  responsesAgentMessageSchema,\n  responsesAgentFunctionCallSchema,\n  responsesAgentReasoningSchema,\n  responsesAgentFunctionCallOutputSchema,\n  responsesAgentMcpApprovalRequestSchema,\n  responsesAgentMcpApprovalResponseSchema,\n])\n\nexport const responsesAgentResponseSchema = z\n  .object({\n    id: z.string().optional(),\n    created_at: z.number().optional(),\n    error: z\n      .object({\n        code: z.string(),\n        message: z.string(),\n      })\n      .nullish(),\n    model: z.string().optional(),\n    output: z.array(responsesAgentOutputItem),\n    incomplete_details: z\n      .object({\n        reason: z.string().nullish().optional(),\n      })\n      .nullish(),\n    usage: z\n      .object({\n        input_tokens: z.number(),\n        output_tokens: z.number(),\n        total_tokens: z.number(),\n      })\n      .optional(),\n  })\n  .passthrough()\n\n/**\n * Chunk schema\n */\n\nconst textDeltaChunkSchema = z.object({\n  type: z.literal('response.output_text.delta'),\n  item_id: z.string(),\n  delta: z.string(),\n  logprobs: z.unknown().nullish(),\n})\n\nconst errorChunkSchema = z.object({\n  type: z.literal('error'),\n  code: z.string(),\n  message: z.string(),\n  param: z.string().nullish(),\n  sequence_number: z.number(),\n})\n\nexport const simpleErrorChunkSchema = z.object({\n  type: z.undefined().optional(),\n  error: z.string(),\n})\n\nconst responseOutputItemDoneSchema = z\n  .object({\n    type: z.literal('response.output_item.done'),\n    output_index: z.number().optional(),\n    item: responsesAgentOutputItem,\n    id: z.string().optional(),\n  })\n  .passthrough()\n\nconst responseAnnotationAddedSchema = z.object({\n  type: z.literal('response.output_text.annotation.added'),\n  annotation: z.discriminatedUnion('type', [\n    z.object({\n      type: z.literal('url_citation'),\n      url: z.string(),\n      title: z.string(),\n    }),\n  ]),\n})\n\nconst responseReasoningSummaryTextDeltaSchema = z.object({\n  type: z.literal('response.reasoning_summary_text.delta'),\n  item_id: z.string(),\n  summary_index: z.number(),\n  delta: z.string(),\n})\n\nconst responseFunctionCallArgumentsDeltaSchema = z.object({\n  type: z.literal('response.function_call_arguments.delta'),\n  item_id: z.string(),\n  delta: z.string(),\n  output_index: z.number(),\n  sequence_number: z.number(),\n})\n\nconst functionCallOutputChunkSchema = z.object({\n  type: z.literal('function_call_output'),\n  call_id: z.string(),\n  output: z.any(),\n})\n\nconst responsesCompletedSchema = z.object({\n  type: z.literal('responses.completed'),\n  response: z.object({\n    id: z.string(),\n    status: z\n      .enum(['completed', 'failed', 'in_progress', 'cancelled', 'queued', 'incomplete'])\n      .optional(),\n    incomplete_details: z\n      .object({\n        reason: z.string().nullish().optional(),\n      })\n      .nullish(),\n    usage: z.object({\n      input_tokens: z.number(),\n      output_tokens: z.number(),\n      total_tokens: z.number(),\n    }),\n  }),\n})\n\nexport const responsesAgentChunkSchema = z.union([\n  textDeltaChunkSchema,\n  responseOutputItemDoneSchema,\n  responseAnnotationAddedSchema,\n  responseReasoningSummaryTextDeltaSchema,\n  responseFunctionCallArgumentsDeltaSchema,\n  functionCallOutputChunkSchema,\n  errorChunkSchema,\n  responsesCompletedSchema,\n  simpleErrorChunkSchema,\n])\n\n/**\n * We use a loose schema for response validation to handle unknown chunks.\n */\nexport const looseResponseAgentChunkSchema = z.union([\n  responsesAgentChunkSchema,\n  z.object({}).loose(), // fallback for unknown chunks (e.g. {\"trace_id\":\"...\"} without a type field)\n])\n\n// Exported types for type-only imports in other modules\nexport type ResponsesAgentChunk = z.infer<typeof responsesAgentChunkSchema>\nexport type ResponsesAgentResponse = z.infer<typeof responsesAgentResponseSchema>\n","import type { JSONValue, LanguageModelV3Content, LanguageModelV3StreamPart } from '@ai-sdk/provider'\nimport { randomUUID } from 'node:crypto'\nimport { type ResponsesAgentChunk, type ResponsesAgentResponse } from './responses-agent-schema'\n\nexport type ConvertChunkOptions = {\n  useRemoteToolCalling: boolean\n  toolNamesByCallId?: Map<string, string>\n}\n\nexport const convertResponsesAgentChunkToMessagePart = (\n  chunk: ResponsesAgentChunk,\n  options: ConvertChunkOptions = { useRemoteToolCalling: false }\n): LanguageModelV3StreamPart[] => {\n  const parts: LanguageModelV3StreamPart[] = []\n\n  if ('error' in chunk) {\n    parts.push({\n      type: 'error',\n      error: chunk.error,\n    })\n    return parts\n  }\n\n  switch (chunk.type) {\n    case 'response.output_text.delta':\n      parts.push({\n        type: 'text-delta',\n        id: chunk.item_id,\n        delta: chunk.delta,\n        providerMetadata: {\n          databricks: {\n            itemId: chunk.item_id,\n          },\n        },\n      })\n      break\n\n    case 'response.reasoning_summary_text.delta':\n      parts.push({\n        type: 'reasoning-delta',\n        id: chunk.item_id,\n        delta: chunk.delta,\n        providerMetadata: {\n          databricks: {\n            itemId: chunk.item_id,\n          },\n        },\n      })\n      break\n\n    case 'function_call_output':\n      parts.push({\n        type: 'tool-result',\n        toolCallId: chunk.call_id,\n        result: chunk.output != null ? (chunk.output as NonNullable<JSONValue>) : {},\n        toolName: options.toolNamesByCallId?.get(chunk.call_id) ?? 'unknown',\n      })\n      break\n\n    case 'response.output_item.done':\n      parts.push(...convertOutputItemDone(chunk.item, options))\n      break\n    case 'response.output_text.annotation.added':\n      parts.push({\n        type: 'source',\n        url: chunk.annotation.url,\n        title: chunk.annotation.title,\n        id: randomUUID(),\n        sourceType: 'url',\n      })\n      break\n\n    case 'error':\n      parts.push({\n        type: 'error',\n        error: chunk,\n      })\n      break\n\n    default: {\n      void (chunk as never)\n      break\n    }\n  }\n\n  return parts\n}\n\ntype OutputItemDoneItem = Extract<\n  ResponsesAgentChunk,\n  { type: 'response.output_item.done' }\n>['item']\n\nconst convertOutputItemDone = (\n  item: OutputItemDoneItem,\n  options: ConvertChunkOptions\n): LanguageModelV3StreamPart[] => {\n  switch (item.type) {\n    case 'message': {\n      const firstContent = item.content[0]\n      if (!firstContent) return []\n      return [\n        {\n          type: 'text-delta',\n          id: item.id,\n          delta: firstContent.text,\n          providerMetadata: {\n            databricks: {\n              itemId: item.id,\n              itemType: 'response.output_item.done',\n            },\n          },\n        },\n      ]\n    }\n\n    case 'function_call':\n      return [\n        {\n          type: 'tool-call',\n          toolCallId: item.call_id,\n          toolName: item.name,\n          input: item.arguments,\n          ...(options.useRemoteToolCalling && {\n            dynamic: true,\n            providerExecuted: true,\n          }),\n          providerMetadata: {\n            databricks: {\n              itemId: item.id,\n            },\n          },\n        },\n      ]\n\n    case 'function_call_output':\n      return [\n        {\n          type: 'tool-result',\n          toolCallId: item.call_id,\n          result: item.output != null ? (item.output as NonNullable<JSONValue>) : {},\n          toolName: options.toolNamesByCallId?.get(item.call_id) ?? 'unknown',\n        },\n      ]\n\n    case 'reasoning': {\n      const firstSummary = item.summary[0]\n      if (!firstSummary) return []\n      return [\n        {\n          type: 'reasoning-start',\n          id: item.id,\n        },\n        {\n          type: 'reasoning-delta',\n          id: item.id,\n          delta: firstSummary.text,\n          providerMetadata: {\n            databricks: {\n              itemId: item.id,\n            },\n          },\n        },\n        {\n          type: 'reasoning-end',\n          id: item.id,\n        },\n      ]\n    }\n\n    case 'mcp_approval_request':\n      return [\n        {\n          type: 'tool-call',\n          toolCallId: item.id,\n          toolName: item.name,\n          input: item.arguments,\n          providerExecuted: true,\n          dynamic: true,\n          providerMetadata: {\n            databricks: {\n              itemId: item.id,\n              serverLabel: item.server_label,\n              approvalRequestId: item.id,\n            },\n          },\n        },\n        {\n          type: 'tool-approval-request',\n          approvalId: item.id,\n          toolCallId: item.id,\n        },\n      ]\n\n    case 'mcp_approval_response':\n      // MCP approval responses are handled via tool-approval-response in AI SDK v6\n      // We emit a tool-result for backwards compatibility\n      return [\n        {\n          type: 'tool-result',\n          toolCallId: item.approval_request_id,\n          toolName: options.toolNamesByCallId?.get(item.approval_request_id) ?? 'mcp_approval',\n          result: { approved: item.approve },\n          providerMetadata: {\n            databricks: {\n              itemId: item.id ?? item.approval_request_id,\n            },\n          },\n        },\n      ]\n\n    default:\n      void (item satisfies never)\n      return []\n  }\n}\n\nexport type ConvertResponseOptions = {\n  useRemoteToolCalling: boolean\n}\n\nexport const convertResponsesAgentResponseToMessagePart = (\n  response: ResponsesAgentResponse,\n  options: ConvertResponseOptions = { useRemoteToolCalling: false }\n): LanguageModelV3Content[] => {\n  const parts: LanguageModelV3Content[] = []\n\n  // Build a map of call_id -> tool_name from function_call outputs\n  const toolNamesByCallId = new Map<string, string>()\n  for (const output of response.output) {\n    if (output.type === 'function_call') {\n      toolNamesByCallId.set(output.call_id, output.name)\n    } else if (output.type === 'mcp_approval_request') {\n      toolNamesByCallId.set(output.id, output.name)\n    }\n  }\n\n  for (const output of response.output) {\n    switch (output.type) {\n      case 'message': {\n        for (const content of output.content) {\n          if (content.type === 'output_text') {\n            parts.push({\n              type: 'text',\n              text: content.text,\n              providerMetadata: {\n                databricks: {\n                  itemId: output.id,\n                },\n              },\n            })\n          }\n        }\n        break\n      }\n\n      case 'function_call':\n        parts.push({\n          type: 'tool-call',\n          toolCallId: output.call_id,\n          toolName: output.name,\n          input: output.arguments,\n          ...(options.useRemoteToolCalling && {\n            dynamic: true,\n            providerExecuted: true,\n          }),\n          providerMetadata: {\n            databricks: {\n              itemId: output.id,\n            },\n          },\n        })\n        break\n\n      case 'reasoning':\n        for (const summary of output.summary) {\n          if (summary.type === 'summary_text') {\n            parts.push({\n              type: 'reasoning',\n              text: summary.text,\n              providerMetadata: {\n                databricks: {\n                  itemId: output.id,\n                },\n              },\n            })\n          }\n        }\n        break\n\n      case 'function_call_output':\n        parts.push({\n          type: 'tool-result',\n          result: output.output as NonNullable<JSONValue>,\n          toolCallId: output.call_id,\n          toolName: toolNamesByCallId.get(output.call_id) ?? 'unknown',\n        })\n        break\n\n      case 'mcp_approval_request':\n        parts.push({\n          type: 'tool-call',\n          toolCallId: output.id,\n          toolName: output.name,\n          input: output.arguments,\n          providerExecuted: true,\n          dynamic: true,\n          providerMetadata: {\n            databricks: {\n              itemId: output.id,\n              serverLabel: output.server_label,\n              approvalRequestId: output.id,\n            },\n          },\n        })\n        parts.push({\n          type: 'tool-approval-request',\n          approvalId: output.id,\n          toolCallId: output.id,\n        })\n        break\n\n      case 'mcp_approval_response':\n        // MCP approval responses are handled via tool-approval-response in AI SDK v6\n        // We emit a tool-result for backwards compatibility\n        parts.push({\n          type: 'tool-result',\n          toolCallId: output.approval_request_id,\n          toolName: toolNamesByCallId.get(output.approval_request_id) ?? 'mcp_approval',\n          result: { approved: output.approve },\n          providerMetadata: {\n            databricks: {\n              itemId: output.id ?? output.approval_request_id,\n            },\n          },\n        })\n        break\n      default: {\n        void (output satisfies never)\n        break\n      }\n    }\n  }\n\n  return parts\n}\n","import {\n  UnsupportedFunctionalityError,\n  type SharedV3Warning,\n  type LanguageModelV3Prompt,\n  type LanguageModelV3ToolResultPart,\n} from '@ai-sdk/provider'\nimport { parseProviderOptions } from '@ai-sdk/provider-utils'\nimport { z } from 'zod/v4'\nimport type { ResponsesInput } from './responses-api-types'\n\nexport async function convertToResponsesInput({\n  prompt,\n  systemMessageMode,\n}: {\n  prompt: LanguageModelV3Prompt\n  systemMessageMode: 'system' | 'developer' | 'remove'\n}): Promise<{\n  input: ResponsesInput\n  warnings: Array<SharedV3Warning>\n}> {\n  const input: ResponsesInput = []\n  const warnings: Array<SharedV3Warning> = []\n\n  // Track processed approval IDs to avoid duplicates\n  const processedApprovalIds = new Set<string>()\n\n  // Track which approval IDs have a function_call_output (tool result)\n  // If we have a function_call_output for an MCP approval, we should NOT also send mcp_approval_response\n  // because the function_call_output already implies approval and sending both causes\n  // \"each tool_use must have a single result\" error\n  const approvalIdsWithToolResult = new Set<string>()\n\n  // Map tool call results to a map by tool call id so we can insert them into the input in the correct order,\n  // right after the tool call that produced them.\n  const toolCallResultsByToolCallId = prompt\n    .filter((p) => p.role === 'tool')\n    .flatMap((p) => p.content)\n    .reduce(\n      (reduction, toolCallResult) => {\n        if (toolCallResult.type === 'tool-result') {\n          reduction[toolCallResult.toolCallId] = toolCallResult\n        }\n        return reduction\n      },\n      {} as Record<string, LanguageModelV3ToolResultPart>\n    )\n\n  for (const { role, content } of prompt) {\n    switch (role) {\n      case 'system': {\n        switch (systemMessageMode) {\n          case 'system':\n            input.push({ role: 'system', content })\n            break\n\n          case 'developer':\n            input.push({ role: 'developer', content })\n            break\n\n          case 'remove':\n            warnings.push({\n              type: 'other',\n              message: 'system messages are removed for this model',\n            })\n            break\n\n          default: {\n            const _exhaustiveCheck: never = systemMessageMode\n            throw new Error(`Unsupported system message mode: ${String(_exhaustiveCheck)}`)\n          }\n        }\n        break\n      }\n\n      case 'user':\n        input.push({\n          role: 'user',\n          content: content.map((part) => {\n            switch (part.type) {\n              case 'text':\n                return { type: 'input_text', text: part.text }\n              default:\n                throw new UnsupportedFunctionalityError({\n                  functionality: `part ${JSON.stringify(part)}`,\n                })\n            }\n          }),\n        })\n        break\n\n      case 'assistant':\n        for (const part of content) {\n          const providerOptions = await parseProviderOptions({\n            provider: 'databricks',\n            providerOptions: part.providerOptions,\n            schema: ProviderOptionsSchema,\n          })\n          const itemId = providerOptions?.itemId ?? undefined\n          switch (part.type) {\n            case 'text': {\n              input.push({\n                role: 'assistant',\n                content: [{ type: 'output_text', text: part.text }],\n                id: itemId,\n              })\n              break\n            }\n            case 'tool-call': {\n              const toolName = providerOptions?.toolName ?? part.toolName\n              const approvalRequestId = providerOptions?.approvalRequestId\n\n              // Check if this is an MCP approval request (has approvalRequestId in metadata)\n              if (approvalRequestId) {\n                const serverLabel = providerOptions?.serverLabel ?? ''\n                input.push({\n                  type: 'mcp_approval_request',\n                  id: approvalRequestId,\n                  name: toolName,\n                  arguments: JSON.stringify(part.input),\n                  server_label: serverLabel,\n                })\n                // Don't add tool result here - it will be handled via tool-approval-response\n                break\n              }\n\n              input.push({\n                type: 'function_call',\n                call_id: part.toolCallId,\n                name: toolName,\n                arguments: JSON.stringify(part.input),\n                id: itemId,\n              })\n              const toolCallResult = toolCallResultsByToolCallId[part.toolCallId]\n              if (toolCallResult) {\n                input.push({\n                  type: 'function_call_output',\n                  call_id: part.toolCallId,\n                  output: convertToolResultOutputToString(toolCallResult.output),\n                })\n              }\n              break\n            }\n\n            case 'tool-result': {\n              input.push({\n                type: 'function_call_output',\n                call_id: part.toolCallId,\n                output: convertToolResultOutputToString(part.output),\n              })\n              // Track this tool call ID - if it matches an MCP approval request,\n              // we should NOT also generate an mcp_approval_response\n              approvalIdsWithToolResult.add(part.toolCallId)\n              break\n            }\n\n            case 'reasoning': {\n              if (!itemId) break\n              input.push({\n                type: 'reasoning',\n                summary: [{ type: 'summary_text', text: part.text }],\n                id: itemId,\n              })\n              break\n            }\n          }\n        }\n        break\n\n      case 'tool':\n        // Handle tool-approval-response parts (from AI SDK v6 native tool approval)\n        for (const part of content) {\n          if (part.type === 'tool-approval-response') {\n            // Skip if already processed\n            if (processedApprovalIds.has(part.approvalId)) {\n              continue\n            }\n            processedApprovalIds.add(part.approvalId)\n\n            // Skip if there's already a function_call_output for this approval ID\n            // The function_call_output implies the tool was approved and executed,\n            // so we don't need a separate mcp_approval_response (which would cause\n            // \"each tool_use must have a single result\" error)\n            if (approvalIdsWithToolResult.has(part.approvalId)) {\n              continue\n            }\n\n            input.push({\n              type: 'mcp_approval_response',\n              id: part.approvalId,\n              approval_request_id: part.approvalId,\n              approve: part.approved,\n              ...(part.reason && { reason: part.reason }),\n            })\n          }\n          // Note: tool-result parts are handled when processing the corresponding\n          // tool-call in the assistant message, so we skip them here.\n        }\n        break\n\n      default: {\n        const _exhaustiveCheck: never = role\n        throw new Error(`Unsupported role: ${String(_exhaustiveCheck)}`)\n      }\n    }\n  }\n\n  return { input, warnings }\n}\n\nconst ProviderOptionsSchema = z.object({\n  itemId: z.string().nullish(),\n  toolName: z.string().nullish(),\n  serverLabel: z.string().nullish(),\n  approvalRequestId: z.string().nullish(),\n})\n\nexport type ProviderOptions = z.infer<typeof ProviderOptionsSchema>\n\nconst convertToolResultOutputToString = (\n  output: LanguageModelV3ToolResultPart['output']\n): string => {\n  switch (output.type) {\n    case 'text':\n    case 'error-text':\n      return output.value\n    case 'execution-denied':\n      return output.reason ?? 'Execution denied'\n    case 'json':\n    case 'error-json':\n    case 'content':\n      return JSON.stringify(output.value)\n  }\n}\n","import type {\n  LanguageModelV3FunctionTool,\n  LanguageModelV3ProviderTool,\n  LanguageModelV3ToolChoice,\n} from '@ai-sdk/provider'\n\nexport type ResponsesTool = {\n  type: 'function'\n  name: string\n  description?: string\n  parameters?: unknown\n  strict?: boolean\n}\n\nexport type ResponsesToolChoice = 'auto' | 'none' | 'required' | { type: 'function'; name: string }\n\n/**\n * Prepare tools for the Responses API format.\n * Unlike the chat completions API, the responses API expects function tools\n * with name, description, and parameters at the top level (not nested under 'function').\n */\nexport function prepareResponsesTools({\n  tools,\n  toolChoice,\n}: {\n  tools?: Array<LanguageModelV3FunctionTool | LanguageModelV3ProviderTool>\n  toolChoice?: LanguageModelV3ToolChoice\n}): {\n  tools?: Array<ResponsesTool>\n  toolChoice?: ResponsesToolChoice\n} {\n  // When the tools array is empty, change it to undefined to prevent errors\n  if (!tools || tools.length === 0) {\n    return { tools: undefined, toolChoice: undefined }\n  }\n\n  const responsesTools: Array<ResponsesTool> = []\n\n  for (const tool of tools) {\n    if (tool.type === 'provider') {\n      // Skip provider-defined tools\n      continue\n    }\n\n    // Function tools - responses API format has properties at top level\n    responsesTools.push({\n      type: 'function',\n      name: tool.name,\n      description: tool.description,\n      parameters: tool.inputSchema,\n    })\n  }\n\n  if (responsesTools.length === 0) {\n    return { tools: undefined, toolChoice: undefined }\n  }\n\n  // Convert tool choice\n  const convertedToolChoice = convertResponsesToolChoice(toolChoice)\n\n  return {\n    tools: responsesTools,\n    toolChoice: convertedToolChoice,\n  }\n}\n\nfunction convertResponsesToolChoice(\n  toolChoice: LanguageModelV3ToolChoice | undefined\n): ResponsesToolChoice | undefined {\n  if (!toolChoice) {\n    return undefined\n  }\n\n  switch (toolChoice.type) {\n    case 'auto':\n      return 'auto'\n    case 'none':\n      return 'none'\n    case 'required':\n      return 'required'\n    case 'tool':\n      return { type: 'function', name: toolChoice.toolName }\n    default:\n      return undefined\n  }\n}\n","import type { LanguageModelV3CallOptions, SharedV3Warning } from '@ai-sdk/provider'\n\n/**\n * Response body parameters for the Databricks Responses API.\n * Based on: https://docs.databricks.com/aws/en/machine-learning/foundation-model-apis/api-reference#responses-api-request\n */\nexport type ResponsesBodyArgs = {\n  max_output_tokens?: number\n  temperature?: number\n  top_p?: number\n  parallel_tool_calls?: boolean\n  metadata?: Record<string, string>\n  reasoning?: {\n    effort?: 'low' | 'medium' | 'high'\n  }\n  text?: {\n    format?:\n      | { type: 'text' }\n      | { type: 'json_object' }\n      | { type: 'json_schema'; json_schema: unknown }\n  }\n  databricks_options?: {\n    return_trace?: boolean\n  }\n}\n\n/**\n * Databricks-specific provider options that can be passed via providerOptions.databricks\n */\nexport type DatabricksProviderOptions = {\n  parallelToolCalls?: boolean\n  metadata?: Record<string, string>\n  reasoning?: {\n    effort?: 'low' | 'medium' | 'high'\n  }\n  includeTrace?: boolean\n}\n\n/**\n * Converts AI SDK LanguageModelV3CallOptions to Databricks Responses API body parameters.\n *\n * Inspired by the getArgs method in:\n * https://github.com/vercel/ai/blob/main/packages/openai/src/responses/openai-responses-language-model.ts#L118\n *\n * Complies with the API described in:\n * https://docs.databricks.com/aws/en/machine-learning/foundation-model-apis/api-reference#responses-api-request\n */\nexport function callOptionsToResponsesArgs(options: LanguageModelV3CallOptions): {\n  args: ResponsesBodyArgs\n  warnings: SharedV3Warning[]\n} {\n  const warnings: SharedV3Warning[] = []\n\n  // Extract Databricks-specific provider options\n  const databricksOptions = options.providerOptions?.databricks as\n    | DatabricksProviderOptions\n    | undefined\n\n  // Generate warnings for unsupported options\n  if (options.topK != null) {\n    warnings.push({\n      type: 'unsupported',\n      feature: 'topK',\n      details: 'topK is not supported by the Databricks Responses API',\n    })\n  }\n\n  if (options.presencePenalty != null) {\n    warnings.push({\n      type: 'unsupported',\n      feature: 'presencePenalty',\n      details: 'presencePenalty is not supported by the Databricks Responses API',\n    })\n  }\n\n  if (options.frequencyPenalty != null) {\n    warnings.push({\n      type: 'unsupported',\n      feature: 'frequencyPenalty',\n      details: 'frequencyPenalty is not supported by the Databricks Responses API',\n    })\n  }\n\n  if (options.seed != null) {\n    warnings.push({\n      type: 'unsupported',\n      feature: 'seed',\n      details: 'seed is not supported by the Databricks Responses API',\n    })\n  }\n\n  if (options.stopSequences != null && options.stopSequences.length > 0) {\n    warnings.push({\n      type: 'unsupported',\n      feature: 'stopSequences',\n      details: 'stopSequences is not supported by the Databricks Responses API',\n    })\n  }\n\n  // Build the response body args\n  const args: ResponsesBodyArgs = {}\n\n  if (options.maxOutputTokens != null) {\n    args.max_output_tokens = options.maxOutputTokens\n  }\n\n  if (options.temperature != null) {\n    args.temperature = options.temperature\n  }\n\n  if (options.topP != null) {\n    args.top_p = options.topP\n  }\n\n  // Handle response format\n  if (options.responseFormat != null) {\n    switch (options.responseFormat.type) {\n      case 'text':\n        args.text = { format: { type: 'text' } }\n        break\n      case 'json':\n        if (options.responseFormat.schema != null) {\n          args.text = {\n            format: {\n              type: 'json_schema',\n              json_schema: {\n                name: options.responseFormat.name ?? 'response',\n                description: options.responseFormat.description,\n                schema: options.responseFormat.schema as unknown,\n                strict: true,\n              },\n            },\n          }\n        } else {\n          args.text = { format: { type: 'json_object' } }\n        }\n        break\n    }\n  }\n\n  // Handle Databricks-specific provider options\n  if (databricksOptions?.parallelToolCalls != null) {\n    args.parallel_tool_calls = databricksOptions.parallelToolCalls\n  }\n\n  if (databricksOptions?.metadata != null) {\n    args.metadata = databricksOptions.metadata\n  }\n\n  if (databricksOptions?.reasoning != null) {\n    args.reasoning = databricksOptions.reasoning\n  }\n\n  if (databricksOptions?.includeTrace != null) {\n    args.databricks_options = { return_trace: databricksOptions.includeTrace }\n  }\n\n  return { args, warnings }\n}\n","import type {\n  LanguageModelV3,\n  LanguageModelV3CallOptions,\n  LanguageModelV3FinishReason,\n  LanguageModelV3StreamPart,\n  LanguageModelV3Usage,\n} from '@ai-sdk/provider'\nimport {\n  type ParseResult,\n  combineHeaders,\n  createEventSourceResponseHandler,\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  postJsonToApi,\n} from '@ai-sdk/provider-utils'\nimport { z } from 'zod/v4'\nimport type { DatabricksLanguageModelConfig } from '../databricks-provider'\nimport {\n  responsesAgentResponseSchema,\n  looseResponseAgentChunkSchema,\n  type responsesAgentChunkSchema,\n} from './responses-agent-schema'\nimport {\n  convertResponsesAgentChunkToMessagePart,\n  convertResponsesAgentResponseToMessagePart,\n} from './responses-convert-to-message-parts'\nimport { convertToResponsesInput } from './responses-convert-to-input'\nimport { getDatabricksLanguageModelTransformStream } from '../stream-transformers/databricks-stream-transformer'\nimport { prepareResponsesTools } from './responses-prepare-tools'\nimport { callOptionsToResponsesArgs } from './call-options-to-responses-args'\n\nfunction mapResponsesFinishReason({\n  finishReason,\n  hasToolCalls,\n}: {\n  finishReason: string | null | undefined\n  hasToolCalls: boolean\n}): LanguageModelV3FinishReason {\n  let unified: LanguageModelV3FinishReason['unified']\n  switch (finishReason) {\n    case undefined:\n    case null:\n      unified = hasToolCalls ? 'tool-calls' : 'stop'\n      break\n    case 'max_output_tokens':\n      unified = 'length'\n      break\n    case 'content_filter':\n      unified = 'content-filter'\n      break\n    default:\n      unified = hasToolCalls ? 'tool-calls' : 'other'\n  }\n  return { raw: finishReason ?? undefined, unified }\n}\n\nexport class DatabricksResponsesAgentLanguageModel implements LanguageModelV3 {\n  readonly specificationVersion = 'v3'\n\n  readonly modelId: string\n\n  private readonly config: DatabricksLanguageModelConfig\n\n  constructor(modelId: string, config: DatabricksLanguageModelConfig) {\n    this.modelId = modelId\n    this.config = config\n  }\n\n  get provider(): string {\n    return this.config.provider\n  }\n\n  readonly supportedUrls: Record<string, RegExp[]> = {}\n\n  async doGenerate(\n    options: Parameters<LanguageModelV3['doGenerate']>[0]\n  ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n    const { warnings, ...networkArgs } = await this.getArgs({\n      config: this.config,\n      options,\n      stream: false,\n      modelId: this.modelId,\n    })\n\n    const { value: response } = await postJsonToApi({\n      ...networkArgs,\n      successfulResponseHandler: createJsonResponseHandler(responsesAgentResponseSchema),\n      failedResponseHandler: createJsonErrorResponseHandler({\n        errorSchema: z.any(),\n        errorToMessage: (error) => JSON.stringify(error),\n        isRetryable: () => false,\n      }),\n    })\n\n    const content = convertResponsesAgentResponseToMessagePart(response)\n    const hasToolCalls = content.some((p) => p.type === 'tool-call')\n\n    return {\n      content,\n      finishReason: mapResponsesFinishReason({\n        finishReason: response.incomplete_details?.reason,\n        hasToolCalls,\n      }),\n      usage: {\n        inputTokens: {\n          total: response.usage?.input_tokens ?? 0,\n          noCache: 0,\n          cacheRead: 0,\n          cacheWrite: 0,\n        },\n        outputTokens: { total: response.usage?.output_tokens ?? 0, text: 0, reasoning: 0 },\n      },\n      warnings,\n      response: {\n        body: response,\n      },\n    }\n  }\n\n  async doStream(\n    options: Parameters<LanguageModelV3['doStream']>[0]\n  ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n    const { warnings, ...networkArgs } = await this.getArgs({\n      config: this.config,\n      options,\n      stream: true,\n      modelId: this.modelId,\n    })\n\n    const { responseHeaders, value: response } = await postJsonToApi({\n      ...networkArgs,\n      failedResponseHandler: createJsonErrorResponseHandler({\n        errorSchema: z.any(),\n        errorToMessage: (error) => JSON.stringify(error),\n        isRetryable: () => false,\n      }),\n      successfulResponseHandler: createEventSourceResponseHandler(looseResponseAgentChunkSchema),\n      abortSignal: options.abortSignal,\n    })\n\n    let finishReason: LanguageModelV3FinishReason = {\n      raw: undefined,\n      unified: 'stop',\n    }\n    const usage: LanguageModelV3Usage = {\n      inputTokens: {\n        total: 0,\n        noCache: 0,\n        cacheRead: 0,\n        cacheWrite: 0,\n      },\n      outputTokens: {\n        total: 0,\n        text: 0,\n        reasoning: 0,\n      },\n    }\n\n    const allParts: LanguageModelV3StreamPart[] = []\n    const useRemoteToolCalling = this.config.useRemoteToolCalling ?? false\n    // Track tool call IDs to tool names for looking up tool names in function_call_output events\n    const toolNamesByCallId = new Map<string, string>()\n\n    return {\n      stream: response\n        .pipeThrough(\n          new TransformStream<\n            ParseResult<z.infer<typeof responsesAgentChunkSchema>>,\n            LanguageModelV3StreamPart\n          >({\n            start(controller) {\n              controller.enqueue({ type: 'stream-start', warnings })\n            },\n\n            transform(chunk, controller) {\n              if (options.includeRawChunks) {\n                controller.enqueue({ type: 'raw', rawValue: chunk.rawValue })\n              }\n\n              // handle failed chunk parsing / validation:\n              if (!chunk.success) {\n                finishReason = { raw: undefined, unified: 'error' }\n                controller.enqueue({ type: 'error', error: chunk.error })\n                return\n              }\n\n              if (chunk.value.type === 'responses.completed') {\n                const hasToolCalls = allParts.some((p) => p.type === 'tool-call')\n                finishReason = mapResponsesFinishReason({\n                  finishReason: chunk.value.response.incomplete_details?.reason,\n                  hasToolCalls,\n                })\n                usage.inputTokens.total = chunk.value.response.usage.input_tokens\n                usage.outputTokens.total = chunk.value.response.usage.output_tokens\n                return\n              }\n\n              // Track tool call IDs to names from response.output_item.done function_call events\n              if (\n                chunk.value.type === 'response.output_item.done' &&\n                chunk.value.item.type === 'function_call'\n              ) {\n                toolNamesByCallId.set(chunk.value.item.call_id, chunk.value.item.name)\n              }\n\n              const parts = convertResponsesAgentChunkToMessagePart(chunk.value, {\n                useRemoteToolCalling,\n                toolNamesByCallId,\n              })\n\n              allParts.push(...parts)\n              /**\n               * Check if the last chunk was a tool result without a tool call\n               * This is a special case for MCP approval requests where the tool result\n               * is sent in a separate call after the tool call was approved/denied.\n               */\n              if (parts.length === 0) {\n                return\n              }\n              const part = parts[0]\n              if (part.type === 'tool-result') {\n                // First check if the tool call is in the current stream parts\n                const matchingToolCallInParts = parts.find(\n                  (c) => c.type === 'tool-call' && c.toolCallId === part.toolCallId\n                )\n                // Also check if the tool call was emitted earlier in this stream\n                const matchingToolCallInStream = allParts.find(\n                  (c) => c.type === 'tool-call' && c.toolCallId === part.toolCallId\n                )\n                if (!matchingToolCallInParts && !matchingToolCallInStream) {\n                  // Find the tool call in the prompt (previous messages)\n                  const toolCallFromPreviousMessages = options.prompt\n                    .flatMap((message) => {\n                      if (typeof message.content === 'string') return []\n                      return message.content.filter(\n                        (p): p is typeof p & { type: 'tool-call' } => p.type === 'tool-call'\n                      )\n                    })\n                    .find((p) => p.toolCallId === part.toolCallId)\n                  if (!toolCallFromPreviousMessages) {\n                    throw new Error('No matching tool call found in previous message')\n                  }\n                  controller.enqueue({\n                    type: 'tool-call',\n                    toolCallId: toolCallFromPreviousMessages.toolCallId,\n                    toolName: toolCallFromPreviousMessages.toolName,\n                    input: JSON.stringify(toolCallFromPreviousMessages.input),\n                    // Mark as provider-executed so AI SDK doesn't try to validate the tool\n                    providerExecuted: true,\n                    dynamic: true,\n                  })\n                }\n              }\n              // Dedupe logic for messages sent via response.output_item.done\n              // MAS relies on sending text via response.output_item.done ONLY without any delta chunks\n              // We have to decide when to display these messages in the UI\n              if (shouldDedupeOutputItemDone(parts, allParts.slice(0, -parts.length))) {\n                return\n              }\n              for (const part of parts) {\n                controller.enqueue(part)\n              }\n            },\n\n            flush(controller) {\n              // When useRemoteToolCalling=false, find all tool calls that don't have\n              // matching tool results and re-emit them with providerExecuted: true\n              // so the AI SDK doesn't expect a client-side result for them.\n              // When useRemoteToolCalling=true, tool calls already have providerExecuted: true.\n              // Skip MCP approval requests since they intentionally pause for user approval.\n              if (!useRemoteToolCalling) {\n                const toolCalls = allParts.filter(\n                  (p): p is Extract<LanguageModelV3StreamPart, { type: 'tool-call' }> =>\n                    p.type === 'tool-call'\n                )\n                const toolResults = allParts.filter(\n                  (p): p is Extract<LanguageModelV3StreamPart, { type: 'tool-result' }> =>\n                    p.type === 'tool-result'\n                )\n\n                for (const toolCall of toolCalls) {\n                  // Skip MCP approval requests - they intentionally wait for user approval\n                  const isMcpApprovalRequest =\n                    toolCall.providerMetadata?.databricks?.approvalRequestId != null\n                  if (isMcpApprovalRequest) {\n                    continue\n                  }\n\n                  const hasResult = toolResults.some((r) => r.toolCallId === toolCall.toolCallId)\n                  if (!hasResult) {\n                    // Re-emit the tool call with providerExecuted: true and dynamic: true\n                    // This tells the AI SDK not to expect a client-side result\n                    controller.enqueue({\n                      ...toolCall,\n                      providerExecuted: true,\n                      dynamic: true,\n                    })\n                  }\n                }\n              }\n\n              controller.enqueue({\n                type: 'finish',\n                finishReason,\n                usage,\n              })\n            },\n          })\n        )\n        .pipeThrough(getDatabricksLanguageModelTransformStream()),\n      request: { body: networkArgs.body },\n      response: {\n        headers: responseHeaders,\n      },\n    }\n  }\n\n  private async getArgs({\n    config,\n    options,\n    stream,\n    modelId,\n  }: {\n    options: LanguageModelV3CallOptions\n    config: DatabricksLanguageModelConfig\n    stream: boolean\n    modelId: string\n  }) {\n    const { input } = await convertToResponsesInput({\n      prompt: options.prompt,\n      systemMessageMode: 'system',\n    })\n\n    // Prepare tools for the Responses API format\n    const { tools, toolChoice } = prepareResponsesTools({\n      tools: options.tools,\n      toolChoice: options.toolChoice,\n    })\n\n    // Convert call options to Responses API args\n    const { args: callArgs, warnings } = callOptionsToResponsesArgs(options)\n\n    return {\n      url: config.url({\n        path: '/responses',\n      }),\n      headers: combineHeaders(config.headers(), options.headers),\n      body: {\n        model: modelId,\n        input,\n        stream,\n        ...(tools ? { tools } : {}),\n        ...(toolChoice && tools ? { tool_choice: toolChoice } : {}),\n        ...callArgs,\n      },\n      warnings,\n      fetch: config.fetch,\n    }\n  }\n}\n\nexport function shouldDedupeOutputItemDone(\n  incomingParts: LanguageModelV3StreamPart[],\n  previousParts: LanguageModelV3StreamPart[]\n): boolean {\n  // Determine if the incoming parts contain a text-delta that is a response.output_item.done\n  const doneTextDelta = incomingParts.find(\n    (p) =>\n      p.type === 'text-delta' &&\n      p.providerMetadata?.databricks?.itemType === 'response.output_item.done'\n  )\n\n  // If the incoming parts do not contain a text-delta that is a response.output_item.done, return false\n  if (!doneTextDelta || doneTextDelta.type !== 'text-delta' || !doneTextDelta.id) {\n    return false\n  }\n\n  /**\n   * To determine if the text in response.output_item.done is a duplicate, we need to reconstruct the text from the\n   * previous consecutive text-deltas and check if the .done text is already present in what we've streamed.\n   *\n   * The caveat is that the response.output_item.done text uses GFM footnote syntax, where as the streamed content\n   * uses response.output_text.delta and response.output_text.annotation.added events. So we reconstruct all the\n   * delta text and check if the .done text is contained in it (meaning we've already streamed it).\n   *\n   * We only consider text-deltas that came AFTER the last response.output_item.done event, since each .done\n   * corresponds to a specific message and we should only compare against text streamed for that message.\n   */\n  // 1. Find the index after the last response.output_item.done event using findLastIndex\n  const lastDoneIndex = previousParts.findLastIndex(\n    (part) =>\n      part.type === 'text-delta' &&\n      part.providerMetadata?.databricks?.itemType === 'response.output_item.done'\n  )\n  const partsAfterLastDone = previousParts.slice(lastDoneIndex + 1)\n\n  // 2. Reconstruct text blocks from parts after the last .done event, separated by non-text-delta parts\n  const { texts: reconstructuredTexts, current } = partsAfterLastDone.reduce<{\n    texts: string[]\n    current: string\n  }>(\n    (acc, part) => {\n      if (part.type === 'text-delta') {\n        return { ...acc, current: acc.current + part.delta }\n      } else if (acc.current.trim().length > 0) {\n        return { texts: [...acc.texts, acc.current.trim()], current: '' }\n      }\n      return acc\n    },\n    { texts: [], current: '' }\n  )\n  // Only push current if it has content (avoid pushing empty strings)\n  if (current.length > 0) {\n    reconstructuredTexts.push(current)\n  }\n\n  // 3. Check if the .done text contains all reconstructed text blocks in order\n  // If there are no text-deltas to compare against, don't dedupe - this is new content\n  if (reconstructuredTexts.length === 0) {\n    return false\n  }\n\n  const allTextsFoundInOrder = reconstructuredTexts.reduce<{ found: boolean; lastIndex: number }>(\n    (acc, text) => {\n      if (!acc.found) return acc\n      const index = doneTextDelta.delta.indexOf(text, acc.lastIndex)\n      if (index === -1) return { found: false, lastIndex: acc.lastIndex }\n      return { found: true, lastIndex: index + text.length }\n    },\n    { found: true, lastIndex: 0 }\n  )\n\n  return allTextsFoundInOrder.found\n}\n","import { z } from 'zod/v4'\n\n// Tool call schema for OpenAI-compatible format\nexport const toolCallSchema = z.object({\n  id: z.string(),\n  type: z.literal('function'),\n  function: z.object({\n    name: z.string(),\n    arguments: z.string(), // JSON string of arguments\n  }),\n})\n\n// Zod schemas mirroring FMAPI chat chunk types\nexport const reasoningSummarySchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal('summary_text'),\n    text: z.string(),\n    signature: z.string().optional(),\n  }),\n  z.object({\n    type: z.literal('summary_encrypted_text'),\n    data: z.string(),\n  }),\n])\n\nexport const contentItemSchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal('text'),\n    text: z.string(),\n    citation: z.unknown().optional(),\n  }),\n  z.object({\n    type: z.literal('image'),\n    image_url: z.string(),\n  }),\n  z.object({\n    type: z.literal('reasoning'),\n    summary: z.array(reasoningSummarySchema),\n  }),\n])\n\n// Tool call delta for streaming\nexport const toolCallDeltaSchema = z.object({\n  index: z.number(),\n  id: z.string().optional(),\n  type: z.literal('function').optional(),\n  function: z\n    .object({\n      name: z.string().optional(),\n      arguments: z.string().optional(),\n    })\n    .optional(),\n})\n\nexport const fmapiChunkSchema = z.object({\n  id: z.string(),\n  created: z.number(),\n  model: z.string(),\n  usage: z\n    .object({\n      prompt_tokens: z.number().nullable().optional(),\n      completion_tokens: z.number().nullable().optional(),\n      total_tokens: z.number().nullable().optional(),\n    })\n    .nullable()\n    .optional(),\n  object: z.literal('chat.completion.chunk'),\n  choices: z.array(\n    z.object({\n      index: z.number(),\n      delta: z.object({\n        role: z.union([z.literal('assistant'), z.null(), z.undefined()]).optional(),\n        // content can be string, array of content items, null (when tool_calls present), or omitted\n        content: z.union([z.string(), z.array(contentItemSchema), z.null()]).optional(),\n        tool_calls: z.array(toolCallDeltaSchema).optional(),\n      }),\n      finish_reason: z.union([z.string(), z.null()]).optional(),\n    })\n  ),\n})\n\nexport const fmapiResponseSchema = z.object({\n  id: z.string(),\n  created: z.number(),\n  model: z.string(),\n  usage: z\n    .object({\n      prompt_tokens: z.number(),\n      completion_tokens: z.number(),\n      total_tokens: z.number(),\n    })\n    .nullable()\n    .optional(),\n  choices: z.array(\n    z.object({\n      message: z.object({\n        role: z.union([z.literal('assistant'), z.literal('user'), z.literal('tool')]),\n        content: z.union([z.string(), z.array(contentItemSchema), z.null()]).optional(),\n        tool_calls: z.array(toolCallSchema).optional(),\n      }),\n      finish_reason: z.union([z.string(), z.null()]).optional(),\n    })\n  ),\n})\n\n// Input message schema for requests (different from response format)\n// Tool messages in requests need tool_call_id at the message level\nexport type FmapiInputMessage =\n  | {\n      role: 'system' | 'user' | 'assistant'\n      content: string | z.infer<typeof contentItemSchema>[] | null\n      tool_calls?: z.infer<typeof toolCallSchema>[]\n    }\n  | {\n      role: 'tool'\n      tool_call_id: string\n      content: string\n    }\n\n// Exported types for type-only imports in other modules\nexport type FmapiChunk = z.infer<typeof fmapiChunkSchema>\nexport type FmapiResponse = z.infer<typeof fmapiResponseSchema>\nexport type FmapiMessage = FmapiResponse['choices'][number]['message']\nexport type FmapiContentItem = z.infer<typeof contentItemSchema>\nexport type FmapiToolCall = z.infer<typeof toolCallSchema>\n","import type { LanguageModelV3Content, LanguageModelV3StreamPart } from '@ai-sdk/provider'\nimport type { FmapiChunk, FmapiContentItem, FmapiResponse, FmapiToolCall } from './fmapi-schema'\n\nexport type FmapiConvertOptions = {\n  useRemoteToolCalling: boolean\n}\n\nexport const convertFmapiChunkToMessagePart = (\n  chunk: FmapiChunk,\n  toolCallIdsByIndex?: Map<number, string>\n): LanguageModelV3StreamPart[] => {\n  const parts: LanguageModelV3StreamPart[] = []\n  if (chunk.choices.length === 0) return parts\n  const choice = chunk.choices[0]\n\n  // Handle streaming tool calls\n  if (choice.delta.tool_calls && choice.delta.tool_calls.length > 0) {\n    for (const toolCallDelta of choice.delta.tool_calls) {\n      const index = toolCallDelta.index\n\n      // If this is the start of a tool call (has id and name), track the ID\n      if (toolCallDelta.id && toolCallDelta.function?.name) {\n        toolCallIdsByIndex?.set(index, toolCallDelta.id)\n        parts.push({\n          type: 'tool-input-start',\n          id: toolCallDelta.id,\n          toolName: toolCallDelta.function.name,\n        })\n      }\n\n      // If this has argument delta, use tracked ID or fallback\n      if (toolCallDelta.function?.arguments) {\n        const id = toolCallDelta.id ?? toolCallIdsByIndex?.get(index) ?? `tool-call-${index}`\n        parts.push({\n          type: 'tool-input-delta',\n          id,\n          delta: toolCallDelta.function.arguments,\n        })\n      }\n    }\n  }\n\n  if (typeof choice.delta.content === 'string') {\n    // Skip empty string content to avoid spurious text-start/text-end cycles\n    if (choice.delta.content) {\n      parts.push({ type: 'text-delta', id: chunk.id, delta: choice.delta.content })\n    }\n  } else if (Array.isArray(choice.delta.content)) {\n    parts.push(...mapContentItemsToStreamParts(choice.delta.content, chunk.id))\n  }\n\n  return parts\n}\n\nexport const convertFmapiResponseToMessagePart = (\n  response: FmapiResponse,\n  options: FmapiConvertOptions = { useRemoteToolCalling: false }\n): LanguageModelV3Content[] => {\n  const parts: LanguageModelV3Content[] = []\n  if (response.choices.length === 0) return parts\n  const choice = response.choices[0]\n\n  // Handle OpenAI-format tool_calls first\n  if (choice.message.tool_calls && choice.message.tool_calls.length > 0) {\n    for (const toolCall of choice.message.tool_calls) {\n      parts.push(convertToolCallToContent(toolCall, options))\n    }\n    // If there's also text content, include it\n    if (typeof choice.message.content === 'string' && choice.message.content) {\n      parts.push({ type: 'text', text: choice.message.content })\n    }\n    return parts\n  }\n\n  if (typeof choice.message.content === 'string') {\n    parts.push({ type: 'text', text: choice.message.content })\n  } else {\n    parts.push(...mapContentItemsToProviderContent(choice.message.content ?? []))\n  }\n\n  return parts\n}\n\nconst convertToolCallToContent = (\n  toolCall: FmapiToolCall,\n  options: FmapiConvertOptions\n): LanguageModelV3Content => {\n  return {\n    type: 'tool-call',\n    toolCallId: toolCall.id,\n    toolName: toolCall.function.name,\n    input: toolCall.function.arguments,\n    ...(options.useRemoteToolCalling && {\n      dynamic: true,\n      providerExecuted: true,\n    }),\n  }\n}\n\nconst mapContentItemsToStreamParts = (\n  items: FmapiContentItem[],\n  id: string\n): LanguageModelV3StreamPart[] => {\n  const parts: LanguageModelV3StreamPart[] = []\n  for (const item of items) {\n    switch (item.type) {\n      case 'text':\n        parts.push({ type: 'text-delta', id, delta: item.text })\n        break\n      case 'image':\n        // Images are currently not supported in stream parts\n        break\n      case 'reasoning': {\n        for (const summary of item.summary.filter((s) => s.type === 'summary_text')) {\n          parts.push({ type: 'reasoning-delta', id, delta: summary.text })\n        }\n        break\n      }\n    }\n  }\n  return parts\n}\n\nconst mapContentItemsToProviderContent = (items: FmapiContentItem[]): LanguageModelV3Content[] => {\n  const parts: LanguageModelV3Content[] = []\n  for (const item of items) {\n    switch (item.type) {\n      case 'text':\n        parts.push({ type: 'text', text: item.text })\n        break\n      case 'image':\n        // Images are currently not supported in content parts\n        break\n      case 'reasoning': {\n        for (const summary of item.summary.filter((s) => s.type === 'summary_text')) {\n          parts.push({ type: 'reasoning', text: summary.text })\n        }\n        break\n      }\n    }\n  }\n  return parts\n}\n","import type {\n  LanguageModelV3Message,\n  LanguageModelV3ToolResultPart,\n  LanguageModelV3ToolCallPart,\n} from '@ai-sdk/provider'\nimport { parseProviderOptions } from '@ai-sdk/provider-utils'\nimport { z } from 'zod/v4'\nimport type { FmapiInputMessage, FmapiContentItem } from './fmapi-schema'\n\ntype LanguageModelV3SystemMessage = Extract<LanguageModelV3Message, { role: 'system' }>\ntype LanguageModelV3UserMessage = Extract<LanguageModelV3Message, { role: 'user' }>\ntype LanguageModelV3AssistantMessage = Extract<LanguageModelV3Message, { role: 'assistant' }>\ntype LanguageModelV3ToolMessage = Extract<LanguageModelV3Message, { role: 'tool' }>\n\nexport const convertPromptToFmapiMessages = async (\n  prompt: LanguageModelV3Message[]\n): Promise<{ messages: Array<FmapiInputMessage> }> => {\n  const messages: Array<FmapiInputMessage> = []\n\n  for (const message of prompt) {\n    switch (message.role) {\n      case 'system':\n        messages.push(convertSystemMessage(message))\n        break\n      case 'user':\n        messages.push(convertUserMessage(message))\n        break\n      case 'assistant':\n        messages.push(await convertAssistantMessage(message))\n        break\n      case 'tool':\n        // Tool messages need special handling - one message per tool result\n        messages.push(...convertToolMessages(message))\n        break\n    }\n  }\n\n  return { messages }\n}\n\nconst convertSystemMessage = (message: LanguageModelV3SystemMessage): FmapiInputMessage => {\n  return {\n    role: 'system',\n    content: [{ type: 'text', text: message.content }],\n  }\n}\n\nconst convertUserMessage = (message: LanguageModelV3UserMessage): FmapiInputMessage => {\n  const content: FmapiContentItem[] = []\n\n  for (const part of message.content) {\n    switch (part.type) {\n      case 'text':\n        content.push({ type: 'text', text: part.text })\n        break\n      case 'file':\n        if (part.mediaType.startsWith('image/')) {\n          const url = toHttpUrlString(part.data)\n          if (url) content.push({ type: 'image', image_url: url })\n        }\n        break\n    }\n  }\n\n  return { role: 'user', content }\n}\n\nconst convertAssistantMessage = async (\n  message: LanguageModelV3AssistantMessage\n): Promise<FmapiInputMessage> => {\n  const contentItems: FmapiContentItem[] = []\n  const toolCalls: Array<{\n    id: string\n    type: 'function'\n    function: { name: string; arguments: string }\n  }> = []\n\n  for (const part of message.content) {\n    switch (part.type) {\n      case 'text':\n        contentItems.push({ type: 'text', text: part.text })\n        break\n      case 'file':\n        if (part.mediaType.startsWith('image/')) {\n          const url = toHttpUrlString(part.data)\n          if (url) contentItems.push({ type: 'image', image_url: url })\n        }\n        break\n      case 'reasoning':\n        contentItems.push({\n          type: 'reasoning',\n          summary: [{ type: 'summary_text', text: part.text }],\n        })\n        break\n      case 'tool-call': {\n        // Parse provider options to get the actual tool name\n        const toolName = await getToolNameFromPart(part)\n        // Convert to OpenAI tool_calls format\n        toolCalls.push({\n          id: part.toolCallId,\n          type: 'function',\n          function: {\n            name: toolName,\n            arguments: typeof part.input === 'string' ? part.input : JSON.stringify(part.input),\n          },\n        })\n        break\n      }\n    }\n  }\n\n  return {\n    role: 'assistant',\n    // Use null instead of empty string when there's no text content\n    content: contentItems.length === 0 ? null : contentItems,\n    ...(toolCalls.length > 0 ? { tool_calls: toolCalls } : {}),\n  }\n}\n\nconst convertToolMessages = (message: LanguageModelV3ToolMessage): FmapiInputMessage[] => {\n  const messages: FmapiInputMessage[] = []\n\n  for (const part of message.content) {\n    if (part.type === 'tool-result') {\n      // Each tool result becomes a separate tool message with tool_call_id\n      const content = convertToolResultOutputToContentValue(part.output)\n      messages.push({\n        role: 'tool',\n        tool_call_id: part.toolCallId,\n        content: typeof content === 'string' ? content : JSON.stringify(content),\n      })\n    }\n  }\n\n  return messages\n}\n\nconst toHttpUrlString = (data: URL | string | Uint8Array): string | null => {\n  if (data instanceof URL) return data.toString()\n  if (typeof data === 'string') {\n    if (data.startsWith('http://') || data.startsWith('https://')) return data\n  }\n  return null\n}\n\nconst convertToolResultOutputToContentValue = (\n  output: LanguageModelV3ToolResultPart['output']\n): unknown => {\n  switch (output.type) {\n    case 'text':\n    case 'error-text':\n      return output.value\n    case 'json':\n    case 'error-json':\n      return output.value\n    case 'content':\n      return output.value\n    default:\n      return null\n  }\n}\n\nconst ProviderOptionsSchema = z.object({\n  toolName: z.string().nullish(),\n})\n\nconst getToolNameFromPart = async (part: LanguageModelV3ToolCallPart): Promise<string> => {\n  const providerOptions = await parseProviderOptions({\n    provider: 'databricks',\n    providerOptions: part.providerOptions,\n    schema: ProviderOptionsSchema,\n  })\n  // Use the actual tool name from provider metadata if available,\n  // otherwise fall back to part.toolName\n  return providerOptions?.toolName ?? part.toolName\n}\n","import { LanguageModelV3FinishReason } from '@ai-sdk/provider'\n\nexport function mapFmapiFinishReason(\n  finishReason: string | null | undefined\n): LanguageModelV3FinishReason {\n  switch (finishReason) {\n    case 'stop':\n      return {\n        raw: finishReason,\n        unified: 'stop',\n      }\n    case 'length':\n      return {\n        raw: finishReason,\n        unified: 'length',\n      }\n    case 'content_filter':\n      return {\n        raw: finishReason,\n        unified: 'content-filter',\n      }\n    case 'function_call':\n    case 'tool_calls':\n      return {\n        raw: finishReason,\n        unified: 'tool-calls',\n      }\n    default:\n      return {\n        raw: finishReason ?? undefined,\n        unified: 'other',\n      }\n  }\n}\n","import type { LanguageModelV3CallOptions, SharedV3Warning } from '@ai-sdk/provider'\n\n/**\n * Response body parameters for the Databricks FMAPI (Chat Completions) API.\n * Based on: https://docs.databricks.com/aws/en/machine-learning/foundation-model-apis/api-reference#chat-request\n */\nexport type FmapiBodyArgs = {\n  max_tokens?: number\n  temperature?: number\n  top_p?: number\n  top_k?: number\n  stop?: string[]\n  n?: number\n  response_format?:\n    | { type: 'text' }\n    | { type: 'json_object' }\n    | { type: 'json_schema'; json_schema: unknown }\n  logprobs?: boolean\n  top_logprobs?: number\n  reasoning_effort?: 'low' | 'medium' | 'high'\n}\n\n/**\n * Databricks-specific provider options for FMAPI\n */\nexport type DatabricksFmapiProviderOptions = {\n  topK?: number\n  n?: number\n  logprobs?: boolean\n  topLogprobs?: number\n  reasoningEffort?: 'low' | 'medium' | 'high'\n}\n\n/**\n * Converts AI SDK LanguageModelV3CallOptions to Databricks FMAPI body parameters.\n *\n * Inspired by the getArgs method in:\n * https://github.com/vercel/ai/blob/main/packages/openai/src/chat/openai-chat-language-model.ts#L71\n *\n * Complies with the API described in:\n * https://docs.databricks.com/aws/en/machine-learning/foundation-model-apis/api-reference#chat-request\n */\nexport function callOptionsToFmapiArgs(options: LanguageModelV3CallOptions): {\n  args: FmapiBodyArgs\n  warnings: SharedV3Warning[]\n} {\n  const warnings: SharedV3Warning[] = []\n\n  const databricksOptions = options.providerOptions?.databricks as\n    | DatabricksFmapiProviderOptions\n    | undefined\n\n  // Generate warnings for unsupported options\n  if (options.presencePenalty != null) {\n    warnings.push({\n      type: 'unsupported',\n      feature: 'presencePenalty',\n      details: 'presencePenalty is not supported by the Databricks FMAPI',\n    })\n  }\n\n  if (options.frequencyPenalty != null) {\n    warnings.push({\n      type: 'unsupported',\n      feature: 'frequencyPenalty',\n      details: 'frequencyPenalty is not supported by the Databricks FMAPI',\n    })\n  }\n\n  if (options.seed != null) {\n    warnings.push({\n      type: 'unsupported',\n      feature: 'seed',\n      details: 'seed is not supported by the Databricks FMAPI',\n    })\n  }\n\n  // Build the args\n  const args: FmapiBodyArgs = {}\n\n  if (options.maxOutputTokens != null) {\n    args.max_tokens = options.maxOutputTokens\n  }\n\n  if (options.temperature != null) {\n    args.temperature = options.temperature\n  }\n\n  if (options.topP != null) {\n    args.top_p = options.topP\n  }\n\n  if (options.topK != null) {\n    args.top_k = options.topK\n  }\n\n  if (options.stopSequences != null && options.stopSequences.length > 0) {\n    args.stop = options.stopSequences\n  }\n\n  // Handle response format\n  if (options.responseFormat != null) {\n    switch (options.responseFormat.type) {\n      case 'text':\n        args.response_format = { type: 'text' }\n        break\n      case 'json':\n        if (options.responseFormat.schema != null) {\n          args.response_format = {\n            type: 'json_schema',\n            json_schema: {\n              name: options.responseFormat.name ?? 'response',\n              description: options.responseFormat.description,\n              schema: options.responseFormat.schema as unknown,\n              strict: true,\n            },\n          }\n        } else {\n          args.response_format = { type: 'json_object' }\n        }\n        break\n    }\n  }\n\n  // Handle Databricks-specific provider options (can override standard options)\n  if (databricksOptions?.topK != null) {\n    args.top_k = databricksOptions.topK\n  }\n\n  if (databricksOptions?.n != null) {\n    args.n = databricksOptions.n\n  }\n\n  if (databricksOptions?.logprobs != null) {\n    args.logprobs = databricksOptions.logprobs\n  }\n\n  if (databricksOptions?.topLogprobs != null) {\n    args.top_logprobs = databricksOptions.topLogprobs\n  }\n\n  if (databricksOptions?.reasoningEffort != null) {\n    args.reasoning_effort = databricksOptions.reasoningEffort\n  }\n\n  return { args, warnings }\n}\n","import type {\n  LanguageModelV3,\n  LanguageModelV3CallOptions,\n  LanguageModelV3FinishReason,\n  LanguageModelV3FunctionTool,\n  LanguageModelV3ProviderTool,\n  LanguageModelV3StreamPart,\n  LanguageModelV3ToolChoice,\n  LanguageModelV3Usage,\n} from '@ai-sdk/provider'\nimport {\n  type ParseResult,\n  combineHeaders,\n  createEventSourceResponseHandler,\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  postJsonToApi,\n} from '@ai-sdk/provider-utils'\nimport { z } from 'zod/v4'\nimport type { DatabricksLanguageModelConfig } from '../databricks-provider'\nimport { fmapiChunkSchema, fmapiResponseSchema } from './fmapi-schema'\nimport {\n  convertFmapiChunkToMessagePart,\n  convertFmapiResponseToMessagePart,\n} from './fmapi-convert-to-message-parts'\nimport { convertPromptToFmapiMessages } from './fmapi-convert-to-input'\nimport { getDatabricksLanguageModelTransformStream } from '../stream-transformers/databricks-stream-transformer'\nimport { mapFmapiFinishReason } from './fmapi-finish-reason'\nimport { callOptionsToFmapiArgs } from './call-options-to-fmapi-args'\n\nexport class DatabricksFmapiLanguageModel implements LanguageModelV3 {\n  readonly specificationVersion = 'v3'\n\n  readonly modelId: string\n\n  private readonly config: DatabricksLanguageModelConfig\n\n  constructor(modelId: string, config: DatabricksLanguageModelConfig) {\n    this.modelId = modelId\n    this.config = config\n  }\n\n  get provider(): string {\n    return this.config.provider\n  }\n\n  readonly supportedUrls: Record<string, RegExp[]> = {}\n\n  async doGenerate(\n    options: Parameters<LanguageModelV3['doGenerate']>[0]\n  ): Promise<Awaited<ReturnType<LanguageModelV3['doGenerate']>>> {\n    const { warnings, ...networkArgs } = await this.getArgs({\n      config: this.config,\n      options,\n      stream: false,\n      modelId: this.modelId,\n    })\n\n    const { value: response } = await postJsonToApi({\n      ...networkArgs,\n      successfulResponseHandler: createJsonResponseHandler(fmapiResponseSchema),\n      failedResponseHandler: createJsonErrorResponseHandler({\n        errorSchema: z.any(),\n        errorToMessage: (error) => JSON.stringify(error),\n        isRetryable: () => false,\n      }),\n    })\n\n    // Determine finish reason from response\n    const choice = response.choices[0]\n    const finishReason = mapFmapiFinishReason(choice?.finish_reason)\n\n    const useRemoteToolCalling = this.config.useRemoteToolCalling ?? false\n    return {\n      content: convertFmapiResponseToMessagePart(response, { useRemoteToolCalling }),\n      finishReason,\n      usage: {\n        inputTokens: {\n          total: response.usage?.prompt_tokens ?? 0,\n          noCache: 0,\n          cacheRead: 0,\n          cacheWrite: 0,\n        },\n        outputTokens: {\n          total: response.usage?.completion_tokens ?? 0,\n          text: 0,\n          reasoning: 0,\n        },\n      },\n      warnings,\n    }\n  }\n\n  async doStream(\n    options: Parameters<LanguageModelV3['doStream']>[0]\n  ): Promise<Awaited<ReturnType<LanguageModelV3['doStream']>>> {\n    const { warnings, ...networkArgs } = await this.getArgs({\n      config: this.config,\n      options,\n      stream: true,\n      modelId: this.modelId,\n    })\n\n    const { responseHeaders, value: response } = await postJsonToApi({\n      ...networkArgs,\n      failedResponseHandler: createJsonErrorResponseHandler({\n        errorSchema: z.any(),\n        errorToMessage: (error) => JSON.stringify(error),\n        isRetryable: () => false,\n      }),\n      successfulResponseHandler: createEventSourceResponseHandler(fmapiChunkSchema),\n      abortSignal: options.abortSignal,\n    })\n\n    let finishReason: LanguageModelV3FinishReason = {\n      raw: undefined,\n      unified: 'other',\n    }\n    let usage: LanguageModelV3Usage = {\n      inputTokens: {\n        total: 0,\n        noCache: 0,\n        cacheRead: 0,\n        cacheWrite: 0,\n      },\n      outputTokens: {\n        total: 0,\n        text: 0,\n        reasoning: 0,\n      },\n    }\n    // Track tool call IDs by index for streaming (OpenAI only sends ID in first chunk)\n    const toolCallIdsByIndex = new Map<number, string>()\n    // Track tool call names by ID\n    const toolCallNamesById = new Map<string, string>()\n    // Track accumulated tool call inputs by ID\n    const toolCallInputsById = new Map<string, string>()\n    const useRemoteToolCalling = this.config.useRemoteToolCalling ?? false\n\n    return {\n      stream: response\n        .pipeThrough(\n          new TransformStream<\n            ParseResult<z.infer<typeof fmapiChunkSchema>>,\n            LanguageModelV3StreamPart\n          >({\n            start(controller) {\n              controller.enqueue({ type: 'stream-start', warnings })\n            },\n\n            transform(chunk, controller) {\n              if (options.includeRawChunks) {\n                controller.enqueue({ type: 'raw', rawValue: chunk.rawValue })\n              }\n\n              // handle failed chunk parsing / validation:\n              if (!chunk.success) {\n                finishReason = {\n                  raw: undefined,\n                  unified: 'error',\n                }\n                controller.enqueue({ type: 'error', error: chunk.error })\n                return\n              }\n\n              // Track finish reason from chunk\n              const choice = chunk.value.choices[0]\n              finishReason = mapFmapiFinishReason(choice?.finish_reason)\n\n              // Track usage from chunk\n              if (chunk.value.usage) {\n                usage = {\n                  inputTokens: {\n                    total: chunk.value.usage.prompt_tokens ?? 0,\n                    noCache: 0,\n                    cacheRead: 0,\n                    cacheWrite: 0,\n                  },\n                  outputTokens: {\n                    total: chunk.value.usage.completion_tokens ?? 0,\n                    text: 0,\n                    reasoning: 0,\n                  },\n                }\n              }\n\n              const parts = convertFmapiChunkToMessagePart(chunk.value, toolCallIdsByIndex)\n              for (const part of parts) {\n                // Track tool call info for later emission\n                if (part.type === 'tool-input-start') {\n                  toolCallNamesById.set(part.id, part.toolName)\n                  toolCallInputsById.set(part.id, '')\n                } else if (part.type === 'tool-input-delta') {\n                  const current = toolCallInputsById.get(part.id) ?? ''\n                  toolCallInputsById.set(part.id, current + part.delta)\n                }\n                controller.enqueue(part)\n              }\n            },\n\n            flush(controller) {\n              // Emit complete tool-call events for all accumulated tool calls\n              for (const [toolCallId, inputText] of toolCallInputsById) {\n                const toolName = toolCallNamesById.get(toolCallId)\n                if (toolName) {\n                  // Emit tool-input-end to signal streaming is complete\n                  controller.enqueue({ type: 'tool-input-end', id: toolCallId })\n\n                  // Emit a complete tool-call with actual tool name\n                  controller.enqueue({\n                    type: 'tool-call',\n                    toolCallId,\n                    toolName,\n                    input: inputText,\n                    ...(useRemoteToolCalling && {\n                      dynamic: true,\n                      providerExecuted: true,\n                    }),\n                  })\n                }\n              }\n\n              controller.enqueue({\n                type: 'finish',\n                finishReason,\n                usage,\n              })\n            },\n          })\n        )\n        .pipeThrough(getDatabricksLanguageModelTransformStream()),\n      request: { body: networkArgs.body },\n      response: { headers: responseHeaders },\n    }\n  }\n\n  private async getArgs({\n    config,\n    options,\n    stream,\n    modelId,\n  }: {\n    options: LanguageModelV3CallOptions\n    config: DatabricksLanguageModelConfig\n    stream: boolean\n    modelId: string\n  }) {\n    // Convert tools to OpenAI format (filter out provider-defined tools)\n    const tools = options.tools\n      ?.map((tool) => convertToolToOpenAIFormat(tool))\n      .filter((tool): tool is NonNullable<typeof tool> => tool !== undefined)\n\n    // Convert tool choice to OpenAI format\n    const toolChoice = options.toolChoice\n      ? convertToolChoiceToOpenAIFormat(options.toolChoice)\n      : undefined\n\n    const { messages } = await convertPromptToFmapiMessages(options.prompt)\n\n    // Convert call options to FMAPI args\n    const { args: callArgs, warnings } = callOptionsToFmapiArgs(options)\n\n    return {\n      url: config.url({\n        path: '/chat/completions',\n      }),\n      headers: combineHeaders(config.headers(), options.headers),\n      body: {\n        messages,\n        stream,\n        model: modelId,\n        ...(tools && tools.length > 0 ? { tools } : {}),\n        ...(toolChoice && tools && tools.length > 0 ? { tool_choice: toolChoice } : {}),\n        ...callArgs,\n      },\n      warnings,\n      fetch: config.fetch,\n    }\n  }\n}\n\n/**\n * Convert AI SDK tool to OpenAI format\n */\nfunction convertToolToOpenAIFormat(\n  tool: LanguageModelV3FunctionTool | LanguageModelV3ProviderTool\n):\n  | { type: 'function'; function: { name: string; description?: string; parameters?: unknown } }\n  | undefined {\n  if (tool.type === 'provider') {\n    // Skip provider-defined tools as they're not supported in OpenAI format\n    return undefined\n  }\n  return {\n    type: 'function',\n    function: {\n      name: tool.name,\n      description: tool.description,\n      parameters: tool.inputSchema,\n    },\n  }\n}\n\n/**\n * Convert AI SDK tool choice to OpenAI format\n */\nfunction convertToolChoiceToOpenAIFormat(\n  toolChoice: LanguageModelV3ToolChoice\n): 'auto' | 'none' | 'required' | { type: 'function'; function: { name: string } } {\n  if (toolChoice.type === 'auto') {\n    return 'auto'\n  }\n  if (toolChoice.type === 'none') {\n    return 'none'\n  }\n  if (toolChoice.type === 'required') {\n    return 'required'\n  }\n  if (toolChoice.type === 'tool') {\n    return {\n      type: 'function',\n      function: { name: toolChoice.toolName },\n    }\n  }\n  return 'auto'\n}\n","import type { LanguageModelV3, ProviderV3 } from '@ai-sdk/provider'\nimport { combineHeaders, type FetchFunction, withoutTrailingSlash } from '@ai-sdk/provider-utils'\nimport { DatabricksChatAgentLanguageModel } from './chat-agent-language-model/chat-agent-language-model'\nimport { DatabricksResponsesAgentLanguageModel } from './responses-agent-language-model/responses-agent-language-model'\nimport { DatabricksFmapiLanguageModel } from './fmapi-language-model/fmapi-language-model'\n\nexport type DatabricksLanguageModelConfig = {\n  provider: string\n  headers: () => Record<string, string | undefined>\n  url: (options: { path: string }) => string\n  fetch?: FetchFunction\n  /**\n   * When true, marks all tool calls as dynamic and provider-executed.\n   * This indicates that tool execution is handled remotely by Databricks agents.\n   * Defaults to true.\n   */\n  useRemoteToolCalling?: boolean\n}\n\nexport interface DatabricksProvider extends ProviderV3 {\n  /** Agents */\n  chatAgent(modelId: string): LanguageModelV3 // agent/v2/chat\n  responses(modelId: string): LanguageModelV3 // agent/v1/responses\n\n  /** Foundation Models */\n  chatCompletions(modelId: string): LanguageModelV3 // llm/v1/chat\n\n  /** Required overrides from ProviderV3 */\n  textEmbeddingModel(modelId: string): never\n  languageModel(modelId: string): never\n}\n\nexport interface DatabricksProviderSettings {\n  /** Base URL for the Databricks API calls. */\n  baseURL: string\n  /** Custom headers to include in the requests. */\n  headers?: Record<string, string>\n  /** Provider name. Overrides the `databricks` default name for 3rd party providers. */\n  provider?: string\n\n  /**\n   * Custom fetch implementation. You can use it as a middleware to intercept requests,\n   * or to provide a custom fetch implementation for e.g. testing.\n   * */\n  fetch?: FetchFunction\n\n  /**\n   * Optional function to format the URL\n   */\n  formatUrl?: (options: { baseUrl?: string; path: string }) => string\n\n  /**\n   * When true, marks all tool calls as dynamic and provider-executed.\n   * This indicates that tool execution is handled remotely by Databricks agents.\n   * Defaults to true.\n   */\n  useRemoteToolCalling?: boolean\n}\n\nexport const createDatabricksProvider = (\n  settings: DatabricksProviderSettings\n): DatabricksProvider => {\n  const baseUrl = withoutTrailingSlash(settings.baseURL)\n  const getHeaders = () => combineHeaders(settings.headers)\n  const fetch = settings.fetch\n  const provider = settings.provider ?? 'databricks'\n\n  const formatUrl = ({ path }: { path: string }) =>\n    settings.formatUrl?.({ baseUrl, path }) ?? `${baseUrl}${path}`\n\n  const createChatAgent = (modelId: string): LanguageModelV3 =>\n    new DatabricksChatAgentLanguageModel(modelId, {\n      url: formatUrl,\n      headers: getHeaders,\n      fetch,\n      provider,\n    })\n\n  const createResponsesAgent = (modelId: string): LanguageModelV3 =>\n    new DatabricksResponsesAgentLanguageModel(modelId, {\n      url: formatUrl,\n      headers: getHeaders,\n      fetch,\n      provider,\n      useRemoteToolCalling: settings.useRemoteToolCalling,\n    })\n\n  const createFmapi = (modelId: string): LanguageModelV3 =>\n    new DatabricksFmapiLanguageModel(modelId, {\n      url: formatUrl,\n      headers: getHeaders,\n      fetch,\n      provider,\n      useRemoteToolCalling: settings.useRemoteToolCalling,\n    })\n\n  const notImplemented = (name: string) => {\n    return () => {\n      throw new Error(`${name} is not supported yet`)\n    }\n  }\n\n  return {\n    specificationVersion: 'v3' as const,\n    responses: createResponsesAgent,\n    chatCompletions: createFmapi,\n    chatAgent: createChatAgent,\n    imageModel: notImplemented('ImageModel'),\n    textEmbeddingModel: notImplemented('TextEmbeddingModel'),\n    embeddingModel: notImplemented('EmbeddingModel'),\n    languageModel: notImplemented('LanguageModel'),\n  }\n}\n"],"mappings":"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"}