ai 7.0.0-beta.111 → 7.0.0-beta.113
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +60 -0
- package/dist/index.d.ts +2640 -2457
- package/dist/index.js +1136 -640
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +324 -262
- package/dist/internal/index.js +23 -20
- package/dist/internal/index.js.map +1 -1
- package/docs/02-foundations/03-prompts.mdx +13 -10
- package/docs/03-agents/01-overview.mdx +16 -0
- package/docs/03-agents/02-building-agents.mdx +78 -14
- package/docs/03-agents/06-subagents.mdx +3 -1
- package/docs/03-agents/07-workflow-agent.mdx +130 -3
- package/docs/03-agents/index.mdx +4 -2
- package/docs/03-ai-sdk-core/05-generating-text.mdx +53 -23
- package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +154 -115
- package/docs/03-ai-sdk-core/17-runtime-and-tool-context.mdx +215 -0
- package/docs/03-ai-sdk-core/60-telemetry.mdx +115 -27
- package/docs/03-ai-sdk-core/65-event-listeners.mdx +176 -153
- package/docs/03-ai-sdk-core/index.mdx +6 -0
- package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +46 -4
- package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +43 -0
- package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +172 -128
- package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +172 -110
- package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +4 -16
- package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +4 -16
- package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +2 -2
- package/docs/07-reference/01-ai-sdk-core/15-agent.mdx +4 -4
- package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +92 -126
- package/docs/07-reference/01-ai-sdk-core/17-create-agent-ui-stream.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/18-create-agent-ui-stream-response.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/18-pipe-agent-ui-stream-to-response.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +12 -1
- package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +14 -1
- package/docs/07-reference/01-ai-sdk-core/29-filter-active-tools.mdx +14 -2
- package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +5 -2
- package/docs/07-reference/02-ai-sdk-ui/31-convert-to-model-messages.mdx +9 -0
- package/docs/07-reference/03-ai-sdk-rsc/01-stream-ui.mdx +7 -0
- package/docs/07-reference/04-ai-sdk-workflow/01-workflow-agent.mdx +48 -29
- package/docs/08-migration-guides/23-migration-guide-7-0.mdx +99 -0
- package/package.json +9 -7
- package/src/agent/agent.ts +10 -10
- package/src/agent/create-agent-ui-stream-response.ts +5 -4
- package/src/agent/create-agent-ui-stream.ts +5 -4
- package/src/agent/index.ts +0 -4
- package/src/agent/pipe-agent-ui-stream-to-response.ts +5 -4
- package/src/agent/tool-loop-agent-settings.ts +28 -41
- package/src/agent/tool-loop-agent.ts +23 -10
- package/src/embed/embed-events.ts +8 -44
- package/src/embed/embed-many.ts +14 -34
- package/src/embed/embed.ts +11 -23
- package/src/generate-object/generate-object.ts +20 -24
- package/src/generate-object/index.ts +4 -4
- package/src/generate-object/stream-object.ts +26 -27
- package/src/generate-object/structured-output-events.ts +4 -25
- package/src/generate-text/active-tools.ts +12 -0
- package/src/generate-text/content-part.ts +5 -3
- package/src/generate-text/create-execute-tools-transformation.ts +80 -38
- package/src/generate-text/execute-tool-call.ts +31 -37
- package/src/generate-text/filter-active-tools.ts +38 -0
- package/src/generate-text/{core-events.ts → generate-text-events.ts} +108 -113
- package/src/generate-text/generate-text.ts +214 -167
- package/src/generate-text/index.ts +29 -14
- package/src/generate-text/language-model-events.ts +79 -0
- package/src/generate-text/prepare-step.ts +2 -1
- package/src/generate-text/resolve-tool-approval.ts +134 -0
- package/src/generate-text/restricted-telemetry-dispatcher.ts +247 -0
- package/src/generate-text/step-result.ts +0 -9
- package/src/generate-text/stream-language-model-call.ts +245 -35
- package/src/generate-text/stream-text-result.ts +5 -0
- package/src/generate-text/stream-text.ts +168 -215
- package/src/generate-text/to-response-messages.ts +34 -2
- package/src/generate-text/tool-approval-configuration.ts +128 -0
- package/src/generate-text/tool-approval-request-output.ts +7 -0
- package/src/generate-text/tool-approval-response-output.ts +35 -0
- package/src/generate-text/tool-execution-events.ts +120 -65
- package/src/index.ts +1 -0
- package/src/prompt/convert-to-language-model-prompt.ts +1 -1
- package/src/prompt/prompt.ts +9 -0
- package/src/prompt/standardize-prompt.ts +38 -27
- package/src/rerank/index.ts +3 -3
- package/src/rerank/rerank-events.ts +8 -44
- package/src/rerank/rerank.ts +13 -33
- package/src/telemetry/{create-unified-telemetry.ts → create-telemetry-dispatcher.ts} +71 -24
- package/src/telemetry/index.ts +1 -1
- package/src/telemetry/telemetry.ts +92 -36
- package/src/ui/convert-to-model-messages.ts +21 -1
- package/src/ui/process-ui-message-stream.ts +48 -1
- package/src/ui/ui-messages.ts +10 -0
- package/src/ui/validate-ui-messages.ts +10 -0
- package/src/ui-message-stream/ui-message-chunks.ts +18 -0
- package/src/util/merge-objects.ts +5 -0
- package/src/generate-text/filter-active-tool.ts +0 -41
- package/src/generate-text/is-tool-approval-needed.ts +0 -66
- package/src/generate-text/tool-needs-approval-configuration.ts +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../internal/index.ts","../../src/util/async-iterable-stream.ts","../../src/prompt/convert-to-language-model-prompt.ts","../../src/util/detect-media-type.ts","../../src/util/download/download.ts","../../src/version.ts","../../src/util/download/download-function.ts","../../src/prompt/data-content.ts","../../src/prompt/split-data-url.ts","../../src/logger/log-warnings.ts","../../src/prompt/invalid-message-role-error.ts","../../src/error/missing-tool-result-error.ts","../../src/prompt/prepare-tool-choice.ts","../../src/prompt/prepare-tools.ts","../../src/util/is-non-empty-object.ts","../../src/prompt/standardize-prompt.ts","../../src/prompt/message.ts","../../src/types/provider-metadata.ts","../../src/types/json-value.ts","../../src/prompt/content-part.ts","../../src/error/invalid-argument-error.ts","../../src/prompt/prepare-language-model-call-options.ts","../../src/util/retry-with-exponential-backoff.ts","../../src/util/retry-error.ts","../../src/util/prepare-retries.ts","../../src/types/usage.ts","../../src/model/resolve-model.ts","../../src/error/index.ts","../../src/error/unsupported-model-version-error.ts","../../src/util/log-v2-compatibility-warning.ts","../../src/model/as-embedding-model-v3.ts","../../src/model/as-embedding-model-v4.ts","../../src/model/as-image-model-v3.ts","../../src/model/as-image-model-v4.ts","../../src/model/as-language-model-v3.ts","../../src/model/as-language-model-v4.ts","../../src/model/as-reranking-model-v4.ts","../../src/model/as-speech-model-v3.ts","../../src/model/as-speech-model-v4.ts","../../src/model/as-transcription-model-v3.ts","../../src/model/as-transcription-model-v4.ts","../../src/model/as-provider-v3.ts","../../src/model/as-provider-v4.ts","../../src/util/merge-abort-signals.ts","../../src/util/merge-callbacks.ts"],"sourcesContent":["// internal re-exports\nexport { convertAsyncIteratorToReadableStream } from '@ai-sdk/provider-utils';\n\n// internal\nexport { createAsyncIterableStream } from '../src/util/async-iterable-stream';\nexport { convertToLanguageModelPrompt } from '../src/prompt/convert-to-language-model-prompt';\nexport { prepareToolChoice } from '../src/prompt/prepare-tool-choice';\nexport { prepareTools } from '../src/prompt/prepare-tools';\nexport { standardizePrompt } from '../src/prompt/standardize-prompt';\nexport {\n prepareLanguageModelCallOptions,\n /** @deprecated Use `prepareLanguageModelCallOptions` instead. */\n prepareLanguageModelCallOptions as prepareCallSettings,\n} from '../src/prompt/prepare-language-model-call-options';\nexport { prepareRetries } from '../src/util/prepare-retries';\nexport { asLanguageModelUsage } from '../src/types/usage';\nexport { resolveLanguageModel } from '../src/model/resolve-model';\nexport { mergeAbortSignals } from '../src/util/merge-abort-signals';\nexport { mergeCallbacks } from '../src/util/merge-callbacks';\n\n// import globals\nimport '../src/global';\n","/**\n * A type that combines AsyncIterable and ReadableStream.\n * This allows a ReadableStream to be consumed using for-await-of syntax.\n */\nexport type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;\n\n/**\n * Wraps a ReadableStream and returns an object that is both a ReadableStream and an AsyncIterable.\n * This enables consumption of the stream using for-await-of, with proper resource cleanup on early exit or error.\n *\n * @template T The type of the stream's chunks.\n * @param source The source ReadableStream to wrap.\n * @returns An AsyncIterableStream that can be used as both a ReadableStream and an AsyncIterable.\n */\nexport function createAsyncIterableStream<T>(\n source: ReadableStream<T>,\n): AsyncIterableStream<T> {\n // Pipe through a TransformStream to ensure a fresh, unlocked stream.\n const stream = source.pipeThrough(new TransformStream<T, T>());\n\n /**\n * Implements the async iterator protocol for the stream.\n * Ensures proper cleanup (cancelling and releasing the reader) on completion, early exit, or error.\n */\n (stream as AsyncIterableStream<T>)[Symbol.asyncIterator] = function (\n this: ReadableStream<T>,\n ): AsyncIterator<T> {\n const reader = this.getReader();\n\n let finished = false;\n\n /**\n * Cleans up the reader by cancelling and releasing the lock.\n */\n async function cleanup(cancelStream: boolean) {\n if (finished) return;\n\n finished = true;\n try {\n if (cancelStream) {\n await reader.cancel?.();\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {}\n }\n }\n\n return {\n /**\n * Reads the next chunk from the stream.\n * @returns A promise resolving to the next IteratorResult.\n */\n async next(): Promise<IteratorResult<T>> {\n if (finished) {\n return { done: true, value: undefined };\n }\n\n const { done, value } = await reader.read();\n\n if (done) {\n await cleanup(true);\n return { done: true, value: undefined };\n }\n\n return { done: false, value };\n },\n\n /**\n * May be called on early exit (e.g., break from for-await) or after completion.\n * Ensures the stream is cancelled and resources are released.\n * @returns A promise resolving to a completed IteratorResult.\n */\n async return(): Promise<IteratorResult<T>> {\n await cleanup(true);\n return { done: true, value: undefined };\n },\n\n /**\n * Called on early exit with error.\n * Ensures the stream is cancelled and resources are released, then rethrows the error.\n * @param err The error to throw.\n * @returns A promise that rejects with the provided error.\n */\n async throw(err: unknown): Promise<IteratorResult<T>> {\n await cleanup(true);\n throw err;\n },\n };\n };\n\n return stream as AsyncIterableStream<T>;\n}\n","import {\n LanguageModelV4FilePart,\n LanguageModelV4Message,\n LanguageModelV4Prompt,\n LanguageModelV4TextPart,\n LanguageModelV4ToolResultOutput,\n} from '@ai-sdk/provider';\nimport {\n asArray,\n CustomPart,\n DataContent,\n FilePart,\n ImagePart,\n isProviderReference,\n isUrlSupported,\n ModelMessage,\n ReasoningFilePart,\n ReasoningPart,\n TextPart,\n ToolCallPart,\n ToolResultOutput,\n ToolResultPart,\n} from '@ai-sdk/provider-utils';\nimport {\n detectMediaType,\n imageMediaTypeSignatures,\n} from '../util/detect-media-type';\nimport {\n createDefaultDownloadFunction,\n DownloadFunction,\n} from '../util/download/download-function';\nimport { convertToLanguageModelV4DataContent } from './data-content';\nimport { logWarnings } from '../logger/log-warnings';\nimport type { Warning } from '../types/warning';\nimport { InvalidMessageRoleError } from './invalid-message-role-error';\nimport { StandardizedPrompt } from './standardize-prompt';\nimport { MissingToolResultsError } from '../error/missing-tool-result-error';\n\nexport async function convertToLanguageModelPrompt({\n prompt,\n supportedUrls,\n download = createDefaultDownloadFunction(),\n // `provider` is only needed here to convert legacy tool output types via `mapToolResultOutput`.\n // TODO: remove in v8 when \"file-id\" and \"image-file-id\" types are removed\n provider,\n}: {\n prompt: StandardizedPrompt;\n supportedUrls: Record<string, RegExp[]>;\n download: DownloadFunction | undefined;\n provider?: string;\n}): Promise<LanguageModelV4Prompt> {\n const downloadedAssets = await downloadAssets(\n prompt.messages,\n download,\n supportedUrls,\n );\n\n const approvalIdToToolCallId = new Map<string, string>();\n for (const message of prompt.messages) {\n if (message.role === 'assistant' && Array.isArray(message.content)) {\n for (const part of message.content) {\n if (\n part.type === 'tool-approval-request' &&\n 'approvalId' in part &&\n 'toolCallId' in part\n ) {\n approvalIdToToolCallId.set(\n part.approvalId as string,\n part.toolCallId as string,\n );\n }\n }\n }\n }\n\n const approvedToolCallIds = new Set<string>();\n for (const message of prompt.messages) {\n if (message.role === 'tool') {\n for (const part of message.content) {\n if (part.type === 'tool-approval-response') {\n const toolCallId = approvalIdToToolCallId.get(part.approvalId);\n if (toolCallId) {\n approvedToolCallIds.add(toolCallId);\n }\n }\n }\n }\n }\n\n const messages = [\n ...(prompt.system != null\n ? typeof prompt.system === 'string'\n ? [{ role: 'system' as const, content: prompt.system }]\n : asArray(prompt.system).map(message => ({\n role: 'system' as const,\n content: message.content,\n providerOptions: message.providerOptions,\n }))\n : []),\n ...prompt.messages.map(message =>\n convertToLanguageModelMessage({ message, downloadedAssets, provider }),\n ),\n ];\n\n // combine consecutive tool messages into a single tool message\n const combinedMessages = [];\n for (const message of messages) {\n if (message.role !== 'tool') {\n combinedMessages.push(message);\n continue;\n }\n\n const lastCombinedMessage = combinedMessages.at(-1);\n if (lastCombinedMessage?.role === 'tool') {\n lastCombinedMessage.content.push(...message.content);\n } else {\n combinedMessages.push(message);\n }\n }\n\n const toolCallIds = new Set<string>();\n\n for (const message of combinedMessages) {\n switch (message.role) {\n case 'assistant': {\n for (const content of message.content) {\n if (content.type === 'tool-call' && !content.providerExecuted) {\n toolCallIds.add(content.toolCallId);\n }\n }\n break;\n }\n case 'tool': {\n for (const content of message.content) {\n if (content.type === 'tool-result') {\n toolCallIds.delete(content.toolCallId);\n }\n }\n break;\n }\n case 'user':\n case 'system':\n // remove approved tool calls from the set before checking:\n for (const id of approvedToolCallIds) {\n toolCallIds.delete(id);\n }\n\n if (toolCallIds.size > 0) {\n throw new MissingToolResultsError({\n toolCallIds: Array.from(toolCallIds),\n });\n }\n break;\n }\n }\n\n // remove approved tool calls from the set before checking:\n for (const id of approvedToolCallIds) {\n toolCallIds.delete(id);\n }\n\n if (toolCallIds.size > 0) {\n throw new MissingToolResultsError({ toolCallIds: Array.from(toolCallIds) });\n }\n\n return combinedMessages.filter(\n // Filter out empty tool messages (e.g. if they only contained\n // tool-approval-response parts that were removed).\n // This prevents sending invalid empty messages to the provider.\n // Note: provider-executed tool-approval-response parts are preserved.\n message => message.role !== 'tool' || message.content.length > 0,\n );\n}\n\n/**\n * Convert a ModelMessage to a LanguageModelV4Message.\n *\n * @param message - The ModelMessage to convert.\n * @param downloadedAssets - A map of URLs to their downloaded data. Only\n * available if the model does not support URLs, null otherwise.\n */\nexport function convertToLanguageModelMessage({\n message,\n downloadedAssets,\n // `provider` is only needed here to convert legacy tool output types via `mapToolResultOutput`.\n // TODO: remove in v8 when \"file-id\" and \"image-file-id\" types are removed\n provider,\n}: {\n message: ModelMessage;\n downloadedAssets: Record<\n string,\n { mediaType: string | undefined; data: Uint8Array }\n >;\n provider?: string;\n}): LanguageModelV4Message {\n const warnings: Warning[] = [];\n\n const role = message.role;\n switch (role) {\n case 'system': {\n return {\n role: 'system',\n content: message.content,\n providerOptions: message.providerOptions,\n };\n }\n\n case 'user': {\n if (typeof message.content === 'string') {\n return {\n role: 'user',\n content: [{ type: 'text', text: message.content }],\n providerOptions: message.providerOptions,\n };\n }\n\n const converted = {\n role: 'user' as const,\n content: message.content\n .map(part => convertPartToLanguageModelPart(part, downloadedAssets))\n // remove empty text parts:\n .filter(part => part.type !== 'text' || part.text !== ''),\n providerOptions: message.providerOptions,\n };\n if (warnings.length > 0) {\n logWarnings({ warnings });\n }\n return converted;\n }\n\n case 'assistant': {\n if (typeof message.content === 'string') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text: message.content }],\n providerOptions: message.providerOptions,\n };\n }\n\n const converted = {\n role: 'assistant' as const,\n content: message.content\n .filter(\n // remove empty text parts (no text, and no provider options):\n part =>\n part.type !== 'text' ||\n part.text !== '' ||\n part.providerOptions != null,\n )\n .filter(\n (\n part,\n ): part is\n | CustomPart\n | TextPart\n | FilePart\n | ReasoningPart\n | ReasoningFilePart\n | ToolCallPart\n | ToolResultPart => part.type !== 'tool-approval-request',\n )\n .map(part => {\n const providerOptions = part.providerOptions;\n\n switch (part.type) {\n case 'custom': {\n return {\n type: 'custom' as const,\n kind: part.kind,\n providerOptions,\n };\n }\n case 'file': {\n if (\n !(part.data instanceof ArrayBuffer) &&\n isProviderReference(part.data)\n ) {\n return {\n type: 'file' as const,\n data: part.data,\n filename: part.filename,\n mediaType: part.mediaType,\n providerOptions,\n };\n }\n const { data, mediaType } = convertToLanguageModelV4DataContent(\n part.data,\n );\n return {\n type: 'file' as const,\n data,\n filename: part.filename,\n mediaType: mediaType ?? part.mediaType,\n providerOptions,\n };\n }\n case 'reasoning': {\n return {\n type: 'reasoning' as const,\n text: part.text,\n providerOptions,\n };\n }\n case 'reasoning-file': {\n const { data, mediaType } = convertToLanguageModelV4DataContent(\n part.data,\n );\n return {\n type: 'reasoning-file' as const,\n data,\n mediaType: mediaType ?? part.mediaType,\n providerOptions,\n };\n }\n case 'text': {\n return {\n type: 'text' as const,\n text: part.text,\n providerOptions,\n };\n }\n case 'tool-call': {\n return {\n type: 'tool-call' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n providerExecuted: part.providerExecuted,\n providerOptions,\n };\n }\n case 'tool-result': {\n return {\n type: 'tool-result' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: mapToolResultOutput({\n output: part.output,\n provider,\n warnings,\n }),\n providerOptions,\n };\n }\n }\n }),\n providerOptions: message.providerOptions,\n };\n if (warnings.length > 0) {\n logWarnings({ warnings });\n }\n return converted;\n }\n\n case 'tool': {\n const converted = {\n role: 'tool' as const,\n content: message.content\n .filter(\n // Only include tool-approval-response for provider-executed tools\n part =>\n part.type !== 'tool-approval-response' || part.providerExecuted,\n )\n .map(part => {\n switch (part.type) {\n case 'tool-result': {\n return {\n type: 'tool-result' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: mapToolResultOutput({\n output: part.output,\n provider,\n warnings,\n }),\n providerOptions: part.providerOptions,\n };\n }\n case 'tool-approval-response': {\n return {\n type: 'tool-approval-response' as const,\n approvalId: part.approvalId,\n approved: part.approved,\n reason: part.reason,\n };\n }\n }\n }),\n providerOptions: message.providerOptions,\n };\n if (warnings.length > 0) {\n logWarnings({ warnings });\n }\n return converted;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new InvalidMessageRoleError({ role: _exhaustiveCheck });\n }\n }\n}\n\n/**\n * Downloads images and files from URLs in the messages.\n */\nasync function downloadAssets(\n messages: ModelMessage[],\n download: DownloadFunction,\n supportedUrls: Record<string, RegExp[]>,\n): Promise<\n Record<string, { mediaType: string | undefined; data: Uint8Array }>\n> {\n const plannedDownloads = messages\n .filter(message => message.role === 'user')\n .map(message => message.content)\n .filter((content): content is Array<TextPart | ImagePart | FilePart> =>\n Array.isArray(content),\n )\n .flat()\n .filter(\n (part): part is ImagePart | FilePart =>\n part.type === 'image' || part.type === 'file',\n )\n .map(part => {\n const mediaType =\n part.mediaType ?? (part.type === 'image' ? 'image/*' : undefined);\n\n let data = part.type === 'image' ? part.image : part.data;\n if (typeof data === 'string') {\n try {\n data = new URL(data);\n } catch {}\n }\n\n return { mediaType, data };\n })\n\n .filter(\n (part): part is { mediaType: string | undefined; data: URL } =>\n part.data instanceof URL,\n )\n .map(part => ({\n url: part.data,\n isUrlSupportedByModel:\n part.mediaType != null &&\n isUrlSupported({\n url: part.data.toString(),\n mediaType: part.mediaType,\n supportedUrls,\n }),\n }));\n\n // download in parallel:\n const downloadedFiles = await download(plannedDownloads);\n\n return Object.fromEntries(\n downloadedFiles\n .map((file, index) =>\n file == null\n ? null\n : [\n plannedDownloads[index].url.toString(),\n { data: file.data, mediaType: file.mediaType },\n ],\n )\n .filter(file => file != null),\n );\n}\n\n/**\n * Convert part of a message to a LanguageModelV4Part.\n *\n * @param part - The part to convert.\n * @param downloadedAssets - A map of URLs to their downloaded data. Only\n * available if the model does not support URLs, null otherwise.\n * @returns The converted part.\n */\nfunction convertPartToLanguageModelPart(\n part: TextPart | ImagePart | FilePart,\n downloadedAssets: Record<\n string,\n { mediaType: string | undefined; data: Uint8Array }\n >,\n): LanguageModelV4TextPart | LanguageModelV4FilePart {\n if (part.type === 'text') {\n return {\n type: 'text',\n text: part.text,\n providerOptions: part.providerOptions,\n };\n }\n\n const type = part.type;\n const rawData = type === 'image' ? part.image : part.data;\n\n if (\n typeof rawData === 'object' &&\n !(rawData instanceof Uint8Array) &&\n !(rawData instanceof ArrayBuffer) &&\n !(rawData instanceof URL)\n ) {\n return {\n type: 'file',\n mediaType: part.mediaType ?? (type === 'image' ? 'image/*' : ''),\n filename: type === 'file' ? part.filename : undefined,\n data: rawData,\n providerOptions: part.providerOptions,\n };\n }\n\n const originalData: DataContent | URL = rawData;\n\n const { data: convertedData, mediaType: convertedMediaType } =\n convertToLanguageModelV4DataContent(originalData);\n\n let mediaType: string | undefined = convertedMediaType ?? part.mediaType;\n let data: Uint8Array | string | URL = convertedData; // binary | base64 | url\n\n // If the content is a URL, we check if it was downloaded:\n if (data instanceof URL) {\n const downloadedFile = downloadedAssets[data.toString()];\n if (downloadedFile) {\n data = downloadedFile.data;\n mediaType ??= downloadedFile.mediaType;\n }\n }\n\n // Now that we have the normalized data either as a URL or a Uint8Array,\n // we can create the LanguageModelV4Part.\n switch (type) {\n case 'image': {\n // When possible, try to detect the media type automatically\n // to deal with incorrect media type inputs.\n // When detection fails, use provided media type.\n if (data instanceof Uint8Array || typeof data === 'string') {\n mediaType =\n detectMediaType({ data, signatures: imageMediaTypeSignatures }) ??\n mediaType;\n }\n\n return {\n type: 'file',\n mediaType: mediaType ?? 'image/*', // any image\n filename: undefined,\n data,\n providerOptions: part.providerOptions,\n };\n }\n\n case 'file': {\n // We must have a mediaType for files, if not, throw an error.\n if (mediaType == null) {\n throw new Error(`Media type is missing for file part`);\n }\n\n return {\n type: 'file',\n mediaType,\n filename: part.filename,\n data,\n providerOptions: part.providerOptions,\n };\n }\n }\n}\n\nfunction mapToolResultOutput({\n output,\n // `provider` is only needed here to convert legacy \"file-id\" and \"image-file-id\" types to provider references, in case they are using string ID values.\n // TODO: remove in v8 when \"file-id\" and \"image-file-id\" types are removed\n provider,\n warnings = [],\n}: {\n output: ToolResultOutput;\n provider?: string;\n warnings?: Warning[];\n}): LanguageModelV4ToolResultOutput {\n if (output.type !== 'content') {\n return output;\n }\n\n return {\n type: 'content',\n value: output.value.map(item => {\n switch (item.type) {\n // The \"image-*\" types are legacy and deprecated.\n // TODO: remove migration in v8 in combination with the removal of these types from the provider utils.\n case 'image-data': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"image-data\"',\n message: `The \"image-data\" type for tool result content is deprecated. Use the \"file-data\" type instead.`,\n });\n return {\n type: 'file-data' as const,\n data: item.data,\n mediaType: item.mediaType,\n providerOptions: item.providerOptions,\n };\n }\n case 'image-url': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"image-url\"',\n message: `The \"image-url\" type for tool result content is deprecated. Use the \"file-url\" type instead.`,\n });\n return {\n type: 'file-url' as const,\n url: item.url,\n mediaType: getMediaTypeFromUrl(item.url, 'image/*'),\n providerOptions: item.providerOptions,\n };\n }\n case 'image-file-id': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"image-file-id\"',\n message: `The \"image-file-id\" type for tool result content is deprecated. Use the \"file-reference\" type instead.`,\n });\n return {\n type: 'file-reference' as const,\n providerReference: convertFileIdToProviderReference({\n fileId: item.fileId,\n provider,\n }),\n providerOptions: item.providerOptions,\n };\n }\n case 'image-file-reference': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"image-file-reference\"',\n message: `The \"image-file-reference\" type for tool result content is deprecated. Use the \"file-reference\" type instead.`,\n });\n return {\n type: 'file-reference' as const,\n providerReference: item.providerReference,\n providerOptions: item.providerOptions,\n };\n }\n case 'file-id': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"file-id\"',\n message: `The \"file-id\" type for tool result content is deprecated. Use the \"file-reference\" type instead.`,\n });\n return {\n type: 'file-reference' as const,\n providerReference: convertFileIdToProviderReference({\n fileId: item.fileId,\n provider,\n }),\n providerOptions: item.providerOptions,\n };\n }\n case 'file-url': {\n const mediaType = item.mediaType ?? getMediaTypeFromUrl(item.url);\n if (!item.mediaType) {\n const messageSuffix =\n mediaType === 'application/octet-stream'\n ? `Unable to infer media type from URL. Defaulting to 'application/octet-stream'.`\n : `Inferred media type '${mediaType}' from URL.`;\n warnings.push({\n type: 'deprecated',\n setting:\n '\"tool-result\" content of type \"file-url\" without mediaType',\n message:\n `The \"file-url\" tool result content part with URL \"${item.url}\" is missing a \"mediaType\". ` +\n messageSuffix,\n });\n }\n return {\n type: 'file-url' as const,\n url: item.url,\n mediaType,\n providerOptions: item.providerOptions,\n };\n }\n default:\n return item;\n }\n }),\n };\n}\n\nfunction convertFileIdToProviderReference({\n fileId,\n provider,\n}: {\n fileId: string | Record<string, string>;\n provider?: string;\n}): Record<string, string> {\n if (typeof fileId === 'object') {\n return fileId;\n }\n\n if (provider == null) {\n throw new Error(\n 'Cannot convert string fileId to provider reference without a provider ID. ' +\n 'Use a Record<string, string> fileId or switch to the file-reference type.',\n );\n }\n\n return { [provider]: fileId };\n}\n\n// Temporary private helper (see below).\n// TODO: remove in v8\nconst URL_EXTENSION_TO_MEDIA_TYPE: Record<string, string> = {\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n avif: 'image/avif',\n heic: 'image/heic',\n bmp: 'image/bmp',\n tiff: 'image/tiff',\n tif: 'image/tiff',\n pdf: 'application/pdf',\n mp4: 'video/mp4',\n webm: 'video/webm',\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n ogg: 'audio/ogg',\n};\n\n/*\n * Attempts to infer an IANA media type from the file extension in a URL's\n * pathname. Returns `fallbackMediaType` when the extension is absent,\n * unrecognized, or the URL cannot be parsed.\n *\n * Temporary private helper as a best-effort solution for missing media types on \"file-url\" content parts.\n * TODO: remove in v8 when \"file-url\" content parts are required to have media types, after a migration period.\n */\nfunction getMediaTypeFromUrl(\n url: string,\n fallbackMediaType = 'application/octet-stream',\n): string {\n try {\n const pathname = new URL(url).pathname;\n const ext = pathname.split('.').pop()?.toLowerCase();\n if (ext && ext in URL_EXTENSION_TO_MEDIA_TYPE) {\n return URL_EXTENSION_TO_MEDIA_TYPE[ext];\n }\n } catch {\n // ignore URL parse errors\n }\n return fallbackMediaType;\n}\n","import { convertBase64ToUint8Array } from '@ai-sdk/provider-utils';\n\nexport const imageMediaTypeSignatures = [\n {\n mediaType: 'image/gif' as const,\n bytesPrefix: [0x47, 0x49, 0x46], // GIF\n },\n {\n mediaType: 'image/png' as const,\n bytesPrefix: [0x89, 0x50, 0x4e, 0x47], // PNG\n },\n {\n mediaType: 'image/jpeg' as const,\n bytesPrefix: [0xff, 0xd8], // JPEG\n },\n {\n mediaType: 'image/webp' as const,\n bytesPrefix: [\n 0x52,\n 0x49,\n 0x46,\n 0x46, // \"RIFF\"\n null,\n null,\n null,\n null, // file size (variable)\n 0x57,\n 0x45,\n 0x42,\n 0x50, // \"WEBP\"\n ],\n },\n {\n mediaType: 'image/bmp' as const,\n bytesPrefix: [0x42, 0x4d],\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x49, 0x49, 0x2a, 0x00],\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x4d, 0x4d, 0x00, 0x2a],\n },\n {\n mediaType: 'image/avif' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66,\n ],\n },\n {\n mediaType: 'image/heic' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63,\n ],\n },\n] as const;\n\nexport const documentMediaTypeSignatures = [\n {\n mediaType: 'application/pdf' as const,\n bytesPrefix: [0x25, 0x50, 0x44, 0x46], // %PDF\n },\n] as const;\n\nexport const audioMediaTypeSignatures = [\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfb],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfa],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf3],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf2],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe3],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe2],\n },\n {\n mediaType: 'audio/wav' as const,\n bytesPrefix: [\n 0x52, // R\n 0x49, // I\n 0x46, // F\n 0x46, // F\n null,\n null,\n null,\n null,\n 0x57, // W\n 0x41, // A\n 0x56, // V\n 0x45, // E\n ],\n },\n {\n mediaType: 'audio/ogg' as const,\n bytesPrefix: [0x4f, 0x67, 0x67, 0x53],\n },\n {\n mediaType: 'audio/flac' as const,\n bytesPrefix: [0x66, 0x4c, 0x61, 0x43],\n },\n {\n mediaType: 'audio/aac' as const,\n bytesPrefix: [0x40, 0x15, 0x00, 0x00],\n },\n {\n mediaType: 'audio/mp4' as const,\n bytesPrefix: [0x66, 0x74, 0x79, 0x70],\n },\n {\n mediaType: 'audio/webm',\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3],\n },\n] as const;\n\nexport const videoMediaTypeSignatures = [\n {\n mediaType: 'video/mp4' as const,\n bytesPrefix: [\n 0x00,\n 0x00,\n 0x00,\n null,\n 0x66,\n 0x74,\n 0x79,\n 0x70, // ftyp\n ],\n },\n {\n mediaType: 'video/webm' as const,\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3], // EBML\n },\n {\n mediaType: 'video/quicktime' as const,\n bytesPrefix: [\n 0x00,\n 0x00,\n 0x00,\n 0x14,\n 0x66,\n 0x74,\n 0x79,\n 0x70,\n 0x71,\n 0x74, // ftypqt\n ],\n },\n {\n mediaType: 'video/x-msvideo' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46], // RIFF (AVI)\n },\n] as const;\n\nconst stripID3 = (data: Uint8Array | string) => {\n const bytes =\n typeof data === 'string' ? convertBase64ToUint8Array(data) : data;\n const id3Size =\n ((bytes[6] & 0x7f) << 21) |\n ((bytes[7] & 0x7f) << 14) |\n ((bytes[8] & 0x7f) << 7) |\n (bytes[9] & 0x7f);\n\n // The raw MP3 starts here\n return bytes.slice(id3Size + 10);\n};\n\nfunction stripID3TagsIfPresent(data: Uint8Array | string): Uint8Array | string {\n const hasId3 =\n (typeof data === 'string' && data.startsWith('SUQz')) ||\n (typeof data !== 'string' &&\n data.length > 10 &&\n data[0] === 0x49 && // 'I'\n data[1] === 0x44 && // 'D'\n data[2] === 0x33); // '3'\n\n return hasId3 ? stripID3(data) : data;\n}\n\n/**\n * Detect the media IANA media type of a file using a list of signatures.\n *\n * @param data - The file data.\n * @param signatures - The signatures to use for detection.\n * @returns The media type of the file.\n */\ntype MediaTypeSignatures = ReadonlyArray<{\n readonly mediaType: string;\n readonly bytesPrefix: ReadonlyArray<number | null>;\n}>;\n\nexport function detectMediaType<T extends MediaTypeSignatures>({\n data,\n signatures,\n}: {\n data: Uint8Array | string;\n signatures: T;\n}): T[number]['mediaType'] | undefined {\n const processedData = stripID3TagsIfPresent(data);\n\n // Convert the first ~18 bytes (24 base64 chars) for consistent detection logic:\n const bytes =\n typeof processedData === 'string'\n ? convertBase64ToUint8Array(\n processedData.substring(0, Math.min(processedData.length, 24)),\n )\n : processedData;\n\n for (const signature of signatures) {\n if (\n bytes.length >= signature.bytesPrefix.length &&\n signature.bytesPrefix.every(\n (byte, index) => byte === null || bytes[index] === byte,\n )\n ) {\n return signature.mediaType;\n }\n }\n\n return undefined;\n}\n","import {\n DownloadError,\n readResponseWithSizeLimit,\n DEFAULT_MAX_DOWNLOAD_SIZE,\n validateDownloadUrl,\n} from '@ai-sdk/provider-utils';\nimport {\n withUserAgentSuffix,\n getRuntimeEnvironmentUserAgent,\n} from '@ai-sdk/provider-utils';\nimport { VERSION } from '../../version';\n\n/**\n * Download a file from a URL.\n *\n * @param url - The URL to download from.\n * @param maxBytes - Maximum allowed download size in bytes. Defaults to 100 MiB.\n * @param abortSignal - An optional abort signal to cancel the download.\n * @returns The downloaded data and media type.\n *\n * @throws DownloadError if the download fails or exceeds maxBytes.\n */\nexport const download = async ({\n url,\n maxBytes,\n abortSignal,\n}: {\n url: URL;\n maxBytes?: number;\n abortSignal?: AbortSignal;\n}) => {\n const urlText = url.toString();\n validateDownloadUrl(urlText);\n try {\n const response = await fetch(urlText, {\n headers: withUserAgentSuffix(\n {},\n `ai-sdk/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n ),\n signal: abortSignal,\n });\n\n // Validate final URL after redirects to prevent SSRF via open redirect\n if (response.redirected) {\n validateDownloadUrl(response.url);\n }\n\n if (!response.ok) {\n throw new DownloadError({\n url: urlText,\n statusCode: response.status,\n statusText: response.statusText,\n });\n }\n\n const data = await readResponseWithSizeLimit({\n response,\n url: urlText,\n maxBytes: maxBytes ?? DEFAULT_MAX_DOWNLOAD_SIZE,\n });\n\n return {\n data,\n mediaType: response.headers.get('content-type') ?? undefined,\n };\n } catch (error) {\n if (DownloadError.isInstance(error)) {\n throw error;\n }\n\n throw new DownloadError({ url: urlText, cause: error });\n }\n};\n","declare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import { download as originalDownload } from './download';\n\n/**\n * Experimental. Can change in patch versions without warning.\n *\n * Download function. Called with the array of URLs and a boolean indicating\n * whether the URL is supported by the model.\n *\n * The download function can decide for each URL:\n * - to return null (which means that the URL should be passed to the model)\n * - to download the asset and return the data (incl. retries, authentication, etc.)\n *\n * Should throw DownloadError if the download fails.\n *\n * Should return an array of objects sorted by the order of the requested downloads.\n * For each object, the data should be a Uint8Array if the URL was downloaded.\n * For each object, the mediaType should be the media type of the downloaded asset.\n * For each object, the data should be null if the URL should be passed through as is.\n */\nexport type DownloadFunction = (\n options: Array<{\n url: URL;\n isUrlSupportedByModel: boolean;\n }>,\n) => PromiseLike<\n Array<{\n data: Uint8Array;\n mediaType: string | undefined;\n } | null>\n>;\n\n/**\n * Default download function.\n * Downloads the file if it is not supported by the model.\n */\nexport const createDefaultDownloadFunction =\n (download: typeof originalDownload = originalDownload): DownloadFunction =>\n requestedDownloads =>\n Promise.all(\n requestedDownloads.map(async requestedDownload =>\n requestedDownload.isUrlSupportedByModel\n ? null\n : await download(requestedDownload),\n ),\n );\n","import { AISDKError, LanguageModelV4DataContent } from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n DataContent,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { InvalidDataContentError } from './invalid-data-content-error';\nimport { splitDataUrl } from './split-data-url';\n\n/**\n * @internal\n */\nexport const dataContentSchema: z.ZodType<DataContent> = z.union([\n z.string(),\n z.instanceof(Uint8Array),\n z.instanceof(ArrayBuffer),\n z.custom<Buffer>(\n // Buffer might not be available in some environments such as CloudFlare:\n (value: unknown): value is Buffer =>\n globalThis.Buffer?.isBuffer(value) ?? false,\n { message: 'Must be a Buffer' },\n ),\n]);\n\nexport function convertToLanguageModelV4DataContent(\n content: DataContent | URL,\n): {\n data: LanguageModelV4DataContent;\n mediaType: string | undefined;\n} {\n // Buffer & Uint8Array:\n if (content instanceof Uint8Array) {\n return { data: content, mediaType: undefined };\n }\n\n // ArrayBuffer needs conversion to Uint8Array (lightweight):\n if (content instanceof ArrayBuffer) {\n return { data: new Uint8Array(content), mediaType: undefined };\n }\n\n // Attempt to create a URL from the data. If it fails, we can assume the data\n // is not a URL and likely some other sort of data.\n if (typeof content === 'string') {\n try {\n content = new URL(content);\n } catch {\n // ignored\n }\n }\n\n // Extract data from data URL:\n if (content instanceof URL && content.protocol === 'data:') {\n const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(\n content.toString(),\n );\n\n if (dataUrlMediaType == null || base64Content == null) {\n throw new AISDKError({\n name: 'InvalidDataContentError',\n message: `Invalid data URL format in content ${content.toString()}`,\n });\n }\n\n return { data: base64Content, mediaType: dataUrlMediaType };\n }\n\n return { data: content, mediaType: undefined };\n}\n\n/**\n * Converts data content to a base64-encoded string.\n *\n * @param content - Data content to convert.\n * @returns Base64-encoded string.\n */\nexport function convertDataContentToBase64String(content: DataContent): string {\n if (typeof content === 'string') {\n return content;\n }\n\n if (content instanceof ArrayBuffer) {\n return convertUint8ArrayToBase64(new Uint8Array(content));\n }\n\n return convertUint8ArrayToBase64(content);\n}\n\n/**\n * Converts data content to a Uint8Array.\n *\n * @param content - Data content to convert.\n * @returns Uint8Array.\n */\nexport function convertDataContentToUint8Array(\n content: DataContent,\n): Uint8Array {\n if (content instanceof Uint8Array) {\n return content;\n }\n\n if (typeof content === 'string') {\n try {\n return convertBase64ToUint8Array(content);\n } catch (error) {\n throw new InvalidDataContentError({\n message:\n 'Invalid data content. Content string is not a base64-encoded media.',\n content,\n cause: error,\n });\n }\n }\n\n if (content instanceof ArrayBuffer) {\n return new Uint8Array(content);\n }\n\n throw new InvalidDataContentError({ content });\n}\n\n/**\n * Converts a Uint8Array to a string of text.\n *\n * @param uint8Array - The Uint8Array to convert.\n * @returns The converted string.\n */\nexport function convertUint8ArrayToText(uint8Array: Uint8Array): string {\n try {\n return new TextDecoder().decode(uint8Array);\n } catch {\n throw new Error('Error decoding Uint8Array to text');\n }\n}\n","export function splitDataUrl(dataUrl: string): {\n mediaType: string | undefined;\n base64Content: string | undefined;\n} {\n try {\n const [header, base64Content] = dataUrl.split(',');\n return {\n mediaType: header.split(';')[0].split(':')[1],\n base64Content,\n };\n } catch {\n return {\n mediaType: undefined,\n base64Content: undefined,\n };\n }\n}\n","import { Warning } from '../types';\n\n/**\n * A function for logging warnings.\n *\n * You can assign it to the `AI_SDK_LOG_WARNINGS` global variable to use it as the default warning logger.\n *\n * @example\n * ```ts\n * globalThis.AI_SDK_LOG_WARNINGS = (options) => {\n * console.log('WARNINGS:', options.warnings, options.provider, options.model);\n * };\n * ```\n */\nexport type LogWarningsFunction = (options: {\n /**\n * The warnings returned by the model provider.\n */\n warnings: Warning[];\n\n /**\n * The provider id used for the call, if scoped to a specific provider.\n */\n provider?: string;\n\n /**\n * The model id used for the call, if scoped to a specific provider.\n */\n model?: string;\n}) => void;\n\n/**\n * Formats a warning object into a human-readable string with clear AI SDK branding.\n *\n * @param options - The options for formatting the warning.\n * @param options.warning - The warning to format.\n * @param options.provider - The provider id used for the call, if scoped to a specific provider.\n * @param options.model - The model id used for the call, if scoped to a specific provider.\n * @returns A formatted warning message string.\n */\nfunction formatWarning({\n warning,\n provider,\n model,\n}: {\n warning: Warning;\n provider?: string;\n model?: string;\n}): string {\n const scope =\n provider != null && model != null ? ` (${provider} / ${model})` : '';\n const prefix = `AI SDK Warning${scope}:`;\n\n switch (warning.type) {\n case 'unsupported': {\n let message = `${prefix} The feature \"${warning.feature}\" is not supported.`;\n if (warning.details) {\n message += ` ${warning.details}`;\n }\n return message;\n }\n\n case 'compatibility': {\n let message = `${prefix} The feature \"${warning.feature}\" is used in a compatibility mode.`;\n if (warning.details) {\n message += ` ${warning.details}`;\n }\n return message;\n }\n\n case 'deprecated': {\n return `${prefix} Deprecated: \"${warning.setting}\". ${warning.message}`;\n }\n\n case 'other': {\n return `${prefix} ${warning.message}`;\n }\n\n default: {\n // Fallback for any unknown warning types\n return `${prefix} ${JSON.stringify(warning, null, 2)}`;\n }\n }\n}\n\nexport const FIRST_WARNING_INFO_MESSAGE =\n 'AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.';\n\nlet hasLoggedBefore = false;\n\n/**\n * Logs warnings to the console or uses a custom logger if configured.\n *\n * The behavior can be customized via the `AI_SDK_LOG_WARNINGS` global variable:\n * - If set to `false`, warnings are suppressed.\n * - If set to a function, that function is called with the warnings.\n * - Otherwise, warnings are logged to the console using `console.warn`.\n *\n * @param options - The options containing warnings and context.\n * @param options.warnings - The warnings to log.\n * @param options.provider - The provider id used for the call, if scoped to a specific provider.\n * @param options.model - The model id used for the call, if scoped to a specific provider.\n */\nexport const logWarnings: LogWarningsFunction = options => {\n // if the warnings array is empty, do nothing\n if (options.warnings.length === 0) {\n return;\n }\n\n const logger = globalThis.AI_SDK_LOG_WARNINGS;\n\n // if the logger is set to false, do nothing\n if (logger === false) {\n return;\n }\n\n // use the provided logger if it is a function\n if (typeof logger === 'function') {\n logger(options);\n return;\n }\n\n // display information note on first call\n if (!hasLoggedBefore) {\n hasLoggedBefore = true;\n console.info(FIRST_WARNING_INFO_MESSAGE);\n }\n\n // default behavior: log warnings via process.emitWarning if available, otherwise console.warn\n for (const warning of options.warnings) {\n const message = formatWarning({\n warning,\n provider: options.provider,\n model: options.model,\n });\n if (\n typeof process !== 'undefined' &&\n typeof process.emitWarning === 'function'\n ) {\n process.emitWarning(message, {\n type: warning.type === 'deprecated' ? 'DeprecationWarning' : 'Warning',\n });\n } else {\n console.warn(message);\n }\n }\n};\n\n/**\n * Resets the internal logging state. Used for testing purposes.\n */\nexport const resetLogWarningsState = () => {\n hasLoggedBefore = false;\n};\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidMessageRoleError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidMessageRoleError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly role: string;\n\n constructor({\n role,\n message = `Invalid message role: '${role}'. Must be one of: \"system\", \"user\", \"assistant\", \"tool\".`,\n }: {\n role: string;\n message?: string;\n }) {\n super({ name, message });\n\n this.role = role;\n }\n\n static isInstance(error: unknown): error is InvalidMessageRoleError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_MissingToolResultsError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class MissingToolResultsError extends AISDKError {\n private readonly [symbol] = true;\n\n readonly toolCallIds: string[];\n\n constructor({ toolCallIds }: { toolCallIds: string[] }) {\n super({\n name,\n message: `Tool result${\n toolCallIds.length > 1 ? 's are' : ' is'\n } missing for tool call${toolCallIds.length > 1 ? 's' : ''} ${toolCallIds.join(\n ', ',\n )}.`,\n });\n\n this.toolCallIds = toolCallIds;\n }\n\n static isInstance(error: unknown): error is MissingToolResultsError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { LanguageModelV4ToolChoice } from '@ai-sdk/provider';\nimport { ToolChoice } from '../types/language-model';\n\nexport function prepareToolChoice({\n toolChoice,\n}: {\n // use of any because it doesn't matter for tool choice preparation\n toolChoice: ToolChoice<any> | undefined;\n}): LanguageModelV4ToolChoice {\n return toolChoice == null\n ? { type: 'auto' }\n : typeof toolChoice === 'string'\n ? { type: toolChoice }\n : { type: 'tool' as const, toolName: toolChoice.toolName as string };\n}\n","import {\n LanguageModelV4FunctionTool,\n LanguageModelV4ProviderTool,\n} from '@ai-sdk/provider';\nimport { asSchema, ToolSet } from '@ai-sdk/provider-utils';\nimport { isNonEmptyObject } from '../util/is-non-empty-object';\n\nexport async function prepareTools<TOOLS extends ToolSet>({\n tools,\n}: {\n tools: TOOLS | undefined;\n}): Promise<\n Array<LanguageModelV4FunctionTool | LanguageModelV4ProviderTool> | undefined\n> {\n if (!isNonEmptyObject(tools)) {\n return undefined;\n }\n\n const languageModelTools: Array<\n LanguageModelV4FunctionTool | LanguageModelV4ProviderTool\n > = [];\n for (const [name, tool] of Object.entries(tools)) {\n const toolType = tool.type;\n\n switch (toolType) {\n case undefined:\n case 'dynamic':\n case 'function':\n languageModelTools.push({\n type: 'function' as const,\n name,\n description: tool.description,\n inputSchema: await asSchema(tool.inputSchema).jsonSchema,\n ...(tool.inputExamples != null\n ? { inputExamples: tool.inputExamples }\n : {}),\n providerOptions: tool.providerOptions,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n });\n break;\n case 'provider':\n languageModelTools.push({\n type: 'provider' as const,\n name,\n id: tool.id,\n args: tool.args,\n });\n break;\n default: {\n const exhaustiveCheck: never = toolType as never;\n throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);\n }\n }\n }\n\n return languageModelTools;\n}\n","export function isNonEmptyObject(\n object: Record<string, unknown> | undefined | null,\n): object is Record<string, unknown> {\n return object != null && Object.keys(object).length > 0;\n}\n","import { InvalidPromptError } from '@ai-sdk/provider';\nimport {\n asArray,\n ModelMessage,\n safeValidateTypes,\n SystemModelMessage,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { modelMessageSchema } from './message';\nimport { Prompt } from './prompt';\n\nexport type StandardizedPrompt = {\n /**\n * System message.\n */\n system?: string | SystemModelMessage | Array<SystemModelMessage>;\n\n /**\n * Messages.\n */\n messages: ModelMessage[];\n};\n\nexport async function standardizePrompt(\n prompt: Prompt,\n): Promise<StandardizedPrompt> {\n if (prompt.prompt == null && prompt.messages == null) {\n throw new InvalidPromptError({\n prompt,\n message: 'prompt or messages must be defined',\n });\n }\n\n if (prompt.prompt != null && prompt.messages != null) {\n throw new InvalidPromptError({\n prompt,\n message: 'prompt and messages cannot be defined at the same time',\n });\n }\n\n // validate that system is a string or a SystemModelMessage\n if (\n prompt.system != null &&\n typeof prompt.system !== 'string' &&\n !asArray(prompt.system).every(\n message =>\n typeof message === 'object' &&\n message !== null &&\n 'role' in message &&\n message.role === 'system',\n )\n ) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'system must be a string, SystemModelMessage, or array of SystemModelMessage',\n });\n }\n\n let messages: ModelMessage[];\n\n if (prompt.prompt != null && typeof prompt.prompt === 'string') {\n messages = [{ role: 'user', content: prompt.prompt }];\n } else if (prompt.prompt != null && Array.isArray(prompt.prompt)) {\n messages = prompt.prompt;\n } else if (prompt.messages != null) {\n messages = prompt.messages;\n } else {\n throw new InvalidPromptError({\n prompt,\n message: 'prompt or messages must be defined',\n });\n }\n\n if (messages.length === 0) {\n throw new InvalidPromptError({\n prompt,\n message: 'messages must not be empty',\n });\n }\n\n const validationResult = await safeValidateTypes({\n value: messages,\n schema: z.array(modelMessageSchema),\n });\n\n if (!validationResult.success) {\n throw new InvalidPromptError({\n prompt,\n message: 'The messages do not match the ModelMessage[] schema.',\n cause: validationResult.error,\n });\n }\n\n return {\n messages,\n system: prompt.system,\n };\n}\n","import {\n AssistantModelMessage,\n ModelMessage,\n SystemModelMessage,\n ToolModelMessage,\n UserModelMessage,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport {\n customPartSchema,\n filePartSchema,\n imagePartSchema,\n reasoningFilePartSchema,\n reasoningPartSchema,\n textPartSchema,\n toolApprovalRequestSchema,\n toolCallPartSchema,\n toolApprovalResponseSchema,\n toolResultPartSchema,\n} from './content-part';\n\nexport const systemModelMessageSchema: z.ZodType<SystemModelMessage> = z.object(\n {\n role: z.literal('system'),\n content: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n },\n);\n\nexport const userModelMessageSchema: z.ZodType<UserModelMessage> = z.object({\n role: z.literal('user'),\n content: z.union([\n z.string(),\n z.array(z.union([textPartSchema, imagePartSchema, filePartSchema])),\n ]),\n providerOptions: providerMetadataSchema.optional(),\n});\n\nexport const assistantModelMessageSchema: z.ZodType<AssistantModelMessage> =\n z.object({\n role: z.literal('assistant'),\n content: z.union([\n z.string(),\n z.array(\n z.union([\n textPartSchema,\n customPartSchema,\n filePartSchema,\n reasoningPartSchema,\n reasoningFilePartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n toolApprovalRequestSchema,\n ]),\n ),\n ]),\n providerOptions: providerMetadataSchema.optional(),\n });\n\nexport const toolModelMessageSchema: z.ZodType<ToolModelMessage> = z.object({\n role: z.literal('tool'),\n content: z.array(z.union([toolResultPartSchema, toolApprovalResponseSchema])),\n providerOptions: providerMetadataSchema.optional(),\n});\n\nexport const modelMessageSchema: z.ZodType<ModelMessage> = z.union([\n systemModelMessageSchema,\n userModelMessageSchema,\n assistantModelMessageSchema,\n toolModelMessageSchema,\n]);\n","import { SharedV4ProviderMetadata } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from './json-value';\n\n/**\n * Additional provider-specific metadata that is returned from the provider.\n *\n * This is needed to enable provider-specific functionality that can be\n * fully encapsulated in the provider.\n */\nexport type ProviderMetadata = SharedV4ProviderMetadata;\n\nexport const providerMetadataSchema: z.ZodType<ProviderMetadata> = z.record(\n z.string(),\n z.record(z.string(), jsonValueSchema.optional()),\n);\n","import { JSONValue as OriginalJSONValue } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\n\nexport const jsonValueSchema: z.ZodType<JSONValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.string(),\n z.number(),\n z.boolean(),\n z.record(z.string(), jsonValueSchema.optional()),\n z.array(jsonValueSchema),\n ]),\n);\n\nexport type JSONValue = OriginalJSONValue;\n","import {\n CustomPart,\n FilePart,\n ImagePart,\n ProviderOptions,\n ReasoningFilePart,\n ReasoningPart,\n TextPart,\n ToolApprovalRequest,\n ToolApprovalResponse,\n ToolResultOutput,\n ToolResultPart,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from '../types/json-value';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport { dataContentSchema } from './data-content';\n\nconst providerReferenceSchema = z.record(z.string(), z.string());\n\n/**\n * @internal\n */\nexport const textPartSchema: z.ZodType<TextPart> = z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const imagePartSchema: z.ZodType<ImagePart> = z.object({\n type: z.literal('image'),\n image: z.union([\n dataContentSchema,\n z.instanceof(URL),\n providerReferenceSchema,\n ]),\n mediaType: z.string().optional(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const filePartSchema: z.ZodType<FilePart> = z.object({\n type: z.literal('file'),\n data: z.union([\n dataContentSchema,\n z.instanceof(URL),\n providerReferenceSchema,\n ]),\n filename: z.string().optional(),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const reasoningPartSchema: z.ZodType<ReasoningPart> = z.object({\n type: z.literal('reasoning'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const customPartSchema: z.ZodType<CustomPart> = z.object({\n type: z.literal('custom'),\n kind: z.string().transform(value => value as `${string}.${string}`),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const reasoningFilePartSchema: z.ZodType<ReasoningFilePart> = z.object({\n type: z.literal('reasoning-file'),\n data: z.union([dataContentSchema, z.instanceof(URL)]),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * Tool call content part of a prompt. It contains a tool call (usually generated by the AI model).\n */\nexport interface ToolCallPart {\n type: 'tool-call';\n\n /**\n * ID of the tool call. This ID is used to match the tool call with the tool result.\n */\n toolCallId: string;\n\n /**\n * Name of the tool that is being called.\n */\n toolName: string;\n\n /**\n * Arguments of the tool call. This is a JSON-serializable object that matches the tool's input schema.\n */\n input: unknown;\n\n /**\n * Additional provider-specific metadata. They are passed through\n * to the provider from the AI SDK and enable provider-specific\n * functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n}\n\n/**\n * @internal\n */\nexport const toolCallPartSchema: z.ZodType<ToolCallPart> = z.object({\n type: z.literal('tool-call'),\n toolCallId: z.string(),\n toolName: z.string(),\n input: z.unknown(),\n providerOptions: providerMetadataSchema.optional(),\n providerExecuted: z.boolean().optional(),\n}) as z.ZodType<ToolCallPart>; // necessary bc input is optional on Zod type\n\n/**\n * @internal\n */\nexport const outputSchema: z.ZodType<ToolResultOutput> = z.discriminatedUnion(\n 'type',\n [\n z.object({\n type: z.literal('text'),\n value: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('json'),\n value: jsonValueSchema,\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('execution-denied'),\n reason: z.string().optional(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('error-text'),\n value: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('error-json'),\n value: jsonValueSchema,\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('content'),\n value: z.array(\n z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('file-data'),\n data: z.string(),\n mediaType: z.string(),\n filename: z.string().optional(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('file-url'),\n url: z.string(),\n // Temporarily optional. TODO: make required in v8, after migration period.\n mediaType: z.string().optional(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('file-id'),\n fileId: z.union([z.string(), z.record(z.string(), z.string())]),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('file-reference'),\n providerReference: z.record(z.string(), z.string()),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('image-data'),\n data: z.string(),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('image-url'),\n url: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('image-file-id'),\n fileId: z.union([z.string(), z.record(z.string(), z.string())]),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('image-file-reference'),\n providerReference: z.record(z.string(), z.string()),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('custom'),\n providerOptions: providerMetadataSchema.optional(),\n }),\n ]),\n ),\n }),\n ],\n);\n\n/**\n * @internal\n */\nexport const toolResultPartSchema: z.ZodType<ToolResultPart> = z.object({\n type: z.literal('tool-result'),\n toolCallId: z.string(),\n toolName: z.string(),\n output: outputSchema,\n providerOptions: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolResultPart>; // necessary bc result is optional on Zod type\n\n/**\n * @internal\n */\nexport const toolApprovalRequestSchema: z.ZodType<ToolApprovalRequest> =\n z.object({\n type: z.literal('tool-approval-request'),\n approvalId: z.string(),\n toolCallId: z.string(),\n });\n\n/**\n * @internal\n */\nexport const toolApprovalResponseSchema: z.ZodType<ToolApprovalResponse> =\n z.object({\n type: z.literal('tool-approval-response'),\n approvalId: z.string(),\n approved: z.boolean(),\n reason: z.string().optional(),\n });\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidArgumentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidArgumentError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly parameter: string;\n readonly value: unknown;\n\n constructor({\n parameter,\n value,\n message,\n }: {\n parameter: string;\n value: unknown;\n message: string;\n }) {\n super({\n name,\n message: `Invalid argument for parameter ${parameter}: ${message}`,\n });\n\n this.parameter = parameter;\n this.value = value;\n }\n\n static isInstance(error: unknown): error is InvalidArgumentError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { InvalidArgumentError } from '../error/invalid-argument-error';\nimport { LanguageModelCallOptions } from './language-model-call-options';\n\n/**\n * Validates model call options and returns a new object with normalized values.\n */\nexport function prepareLanguageModelCallOptions({\n maxOutputTokens,\n temperature,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n seed,\n stopSequences,\n reasoning,\n}: LanguageModelCallOptions): LanguageModelCallOptions {\n if (maxOutputTokens != null) {\n if (!Number.isInteger(maxOutputTokens)) {\n throw new InvalidArgumentError({\n parameter: 'maxOutputTokens',\n value: maxOutputTokens,\n message: 'maxOutputTokens must be an integer',\n });\n }\n\n if (maxOutputTokens < 1) {\n throw new InvalidArgumentError({\n parameter: 'maxOutputTokens',\n value: maxOutputTokens,\n message: 'maxOutputTokens must be >= 1',\n });\n }\n }\n\n if (temperature != null) {\n if (typeof temperature !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'temperature',\n value: temperature,\n message: 'temperature must be a number',\n });\n }\n }\n\n if (topP != null) {\n if (typeof topP !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'topP',\n value: topP,\n message: 'topP must be a number',\n });\n }\n }\n\n if (topK != null) {\n if (typeof topK !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'topK',\n value: topK,\n message: 'topK must be a number',\n });\n }\n }\n\n if (presencePenalty != null) {\n if (typeof presencePenalty !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'presencePenalty',\n value: presencePenalty,\n message: 'presencePenalty must be a number',\n });\n }\n }\n\n if (frequencyPenalty != null) {\n if (typeof frequencyPenalty !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'frequencyPenalty',\n value: frequencyPenalty,\n message: 'frequencyPenalty must be a number',\n });\n }\n }\n\n if (seed != null) {\n if (!Number.isInteger(seed)) {\n throw new InvalidArgumentError({\n parameter: 'seed',\n value: seed,\n message: 'seed must be an integer',\n });\n }\n }\n\n return {\n maxOutputTokens,\n temperature,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n stopSequences,\n seed,\n reasoning,\n };\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { delay, getErrorMessage, isAbortError } from '@ai-sdk/provider-utils';\nimport { RetryError } from './retry-error';\n\nexport type RetryFunction = <OUTPUT>(\n fn: () => PromiseLike<OUTPUT>,\n) => PromiseLike<OUTPUT>;\n\nfunction getRetryDelayInMs({\n error,\n exponentialBackoffDelay,\n}: {\n error: APICallError;\n exponentialBackoffDelay: number;\n}): number {\n const headers = error.responseHeaders;\n\n if (!headers) return exponentialBackoffDelay;\n\n let ms: number | undefined;\n\n // retry-ms is more precise than retry-after and used by e.g. OpenAI\n const retryAfterMs = headers['retry-after-ms'];\n if (retryAfterMs) {\n const timeoutMs = parseFloat(retryAfterMs);\n if (!Number.isNaN(timeoutMs)) {\n ms = timeoutMs;\n }\n }\n\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfter = headers['retry-after'];\n if (retryAfter && ms === undefined) {\n const timeoutSeconds = parseFloat(retryAfter);\n if (!Number.isNaN(timeoutSeconds)) {\n ms = timeoutSeconds * 1000;\n } else {\n ms = Date.parse(retryAfter) - Date.now();\n }\n }\n\n // check that the delay is reasonable:\n if (\n ms != null &&\n !Number.isNaN(ms) &&\n 0 <= ms &&\n (ms < 60 * 1000 || ms < exponentialBackoffDelay)\n ) {\n return ms;\n }\n\n return exponentialBackoffDelay;\n}\n\n/**\n * The `retryWithExponentialBackoffRespectingRetryHeaders` strategy retries a failed API call with an exponential backoff,\n * while respecting rate limit headers (retry-after-ms and retry-after) if they are provided and reasonable (0-60 seconds).\n * You can configure the maximum number of retries, the initial delay, and the backoff factor.\n */\nexport const retryWithExponentialBackoffRespectingRetryHeaders =\n ({\n maxRetries = 2,\n initialDelayInMs = 2000,\n backoffFactor = 2,\n abortSignal,\n }: {\n maxRetries?: number;\n initialDelayInMs?: number;\n backoffFactor?: number;\n abortSignal?: AbortSignal;\n } = {}): RetryFunction =>\n async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n await _retryWithExponentialBackoff(f, {\n maxRetries,\n delayInMs: initialDelayInMs,\n backoffFactor,\n abortSignal,\n });\n\nasync function _retryWithExponentialBackoff<OUTPUT>(\n f: () => PromiseLike<OUTPUT>,\n {\n maxRetries,\n delayInMs,\n backoffFactor,\n abortSignal,\n }: {\n maxRetries: number;\n delayInMs: number;\n backoffFactor: number;\n abortSignal: AbortSignal | undefined;\n },\n errors: unknown[] = [],\n): Promise<OUTPUT> {\n try {\n return await f();\n } catch (error) {\n if (isAbortError(error)) {\n throw error; // don't retry when the request was aborted\n }\n\n if (maxRetries === 0) {\n throw error; // don't wrap the error when retries are disabled\n }\n\n const errorMessage = getErrorMessage(error);\n const newErrors = [...errors, error];\n const tryNumber = newErrors.length;\n\n if (tryNumber > maxRetries) {\n throw new RetryError({\n message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,\n reason: 'maxRetriesExceeded',\n errors: newErrors,\n });\n }\n\n if (\n error instanceof Error &&\n APICallError.isInstance(error) &&\n error.isRetryable === true &&\n tryNumber <= maxRetries\n ) {\n await delay(\n getRetryDelayInMs({\n error,\n exponentialBackoffDelay: delayInMs,\n }),\n { abortSignal },\n );\n\n return await _retryWithExponentialBackoff(\n f,\n {\n maxRetries,\n delayInMs: backoffFactor * delayInMs,\n backoffFactor,\n abortSignal,\n },\n newErrors,\n );\n }\n\n if (tryNumber === 1) {\n throw error; // don't wrap the error when a non-retryable error occurs on the first try\n }\n\n throw new RetryError({\n message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,\n reason: 'errorNotRetryable',\n errors: newErrors,\n });\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_RetryError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport type RetryErrorReason =\n | 'maxRetriesExceeded'\n | 'errorNotRetryable'\n | 'abort';\n\nexport class RetryError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n // note: property order determines debugging output\n readonly reason: RetryErrorReason;\n readonly lastError: unknown;\n readonly errors: Array<unknown>;\n\n constructor({\n message,\n reason,\n errors,\n }: {\n message: string;\n reason: RetryErrorReason;\n errors: Array<unknown>;\n }) {\n super({ name, message });\n\n this.reason = reason;\n this.errors = errors;\n\n // separate our last error to make debugging via log easier:\n this.lastError = errors[errors.length - 1];\n }\n\n static isInstance(error: unknown): error is RetryError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { InvalidArgumentError } from '../error/invalid-argument-error';\nimport {\n RetryFunction,\n retryWithExponentialBackoffRespectingRetryHeaders,\n} from '../util/retry-with-exponential-backoff';\n\n/**\n * Validate and prepare retries.\n */\nexport function prepareRetries({\n maxRetries,\n abortSignal,\n}: {\n maxRetries: number | undefined;\n abortSignal: AbortSignal | undefined;\n}): {\n maxRetries: number;\n retry: RetryFunction;\n} {\n if (maxRetries != null) {\n if (!Number.isInteger(maxRetries)) {\n throw new InvalidArgumentError({\n parameter: 'maxRetries',\n value: maxRetries,\n message: 'maxRetries must be an integer',\n });\n }\n\n if (maxRetries < 0) {\n throw new InvalidArgumentError({\n parameter: 'maxRetries',\n value: maxRetries,\n message: 'maxRetries must be >= 0',\n });\n }\n }\n\n const maxRetriesResult = maxRetries ?? 2;\n\n return {\n maxRetries: maxRetriesResult,\n retry: retryWithExponentialBackoffRespectingRetryHeaders({\n maxRetries: maxRetriesResult,\n abortSignal,\n }),\n };\n}\n","import {\n ImageModelV4Usage,\n JSONObject,\n LanguageModelV4Usage,\n} from '@ai-sdk/provider';\n\n/**\n * Represents the number of tokens used in a prompt and completion.\n */\nexport type LanguageModelUsage = {\n /**\n * The total number of input (prompt) tokens used.\n */\n inputTokens: number | undefined;\n\n /**\n * Detailed information about the input tokens.\n */\n inputTokenDetails: {\n /**\n * The number of non-cached input (prompt) tokens used.\n */\n noCacheTokens: number | undefined;\n\n /**\n * The number of cached input (prompt) tokens read.\n */\n cacheReadTokens: number | undefined;\n\n /**\n * The number of cached input (prompt) tokens written.\n */\n cacheWriteTokens: number | undefined;\n };\n\n /**\n * The number of total output (completion) tokens used.\n */\n outputTokens: number | undefined;\n\n /**\n * Detailed information about the output tokens.\n */\n outputTokenDetails: {\n /**\n * The number of text tokens used.\n */\n textTokens: number | undefined;\n\n /**\n * The number of reasoning tokens used.\n */\n reasoningTokens: number | undefined;\n };\n\n /**\n * The total number of tokens used.\n */\n totalTokens: number | undefined;\n\n /**\n * @deprecated Use outputTokenDetails.reasoningTokens instead.\n */\n reasoningTokens?: number | undefined;\n\n /**\n * @deprecated Use inputTokenDetails.cacheReadTokens instead.\n */\n cachedInputTokens?: number | undefined;\n\n /**\n * Raw usage information from the provider.\n *\n * This is the usage information in the shape that the provider returns.\n * It can include additional information that is not part of the standard usage information.\n */\n raw?: JSONObject;\n};\n\n/**\n * Represents the number of tokens used in an embedding.\n */\n// TODO replace with EmbeddingModelV4Usage once available in @ai-sdk/provider\nexport type EmbeddingModelUsage = {\n /**\n * The number of tokens used in the embedding.\n */\n tokens: number;\n};\n\nexport function asLanguageModelUsage(\n usage: LanguageModelV4Usage,\n): LanguageModelUsage {\n return {\n inputTokens: usage.inputTokens.total,\n inputTokenDetails: {\n noCacheTokens: usage.inputTokens.noCache,\n cacheReadTokens: usage.inputTokens.cacheRead,\n cacheWriteTokens: usage.inputTokens.cacheWrite,\n },\n outputTokens: usage.outputTokens.total,\n outputTokenDetails: {\n textTokens: usage.outputTokens.text,\n reasoningTokens: usage.outputTokens.reasoning,\n },\n totalTokens: addTokenCounts(\n usage.inputTokens.total,\n usage.outputTokens.total,\n ),\n raw: usage.raw,\n reasoningTokens: usage.outputTokens.reasoning,\n cachedInputTokens: usage.inputTokens.cacheRead,\n };\n}\n\nexport function createNullLanguageModelUsage(): LanguageModelUsage {\n return {\n inputTokens: undefined,\n inputTokenDetails: {\n noCacheTokens: undefined,\n cacheReadTokens: undefined,\n cacheWriteTokens: undefined,\n },\n outputTokens: undefined,\n outputTokenDetails: {\n textTokens: undefined,\n reasoningTokens: undefined,\n },\n totalTokens: undefined,\n raw: undefined,\n };\n}\n\nexport function addLanguageModelUsage(\n usage1: LanguageModelUsage,\n usage2: LanguageModelUsage,\n): LanguageModelUsage {\n return {\n inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),\n inputTokenDetails: {\n noCacheTokens: addTokenCounts(\n usage1.inputTokenDetails?.noCacheTokens,\n usage2.inputTokenDetails?.noCacheTokens,\n ),\n cacheReadTokens: addTokenCounts(\n usage1.inputTokenDetails?.cacheReadTokens,\n usage2.inputTokenDetails?.cacheReadTokens,\n ),\n cacheWriteTokens: addTokenCounts(\n usage1.inputTokenDetails?.cacheWriteTokens,\n usage2.inputTokenDetails?.cacheWriteTokens,\n ),\n },\n outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),\n outputTokenDetails: {\n textTokens: addTokenCounts(\n usage1.outputTokenDetails?.textTokens,\n usage2.outputTokenDetails?.textTokens,\n ),\n reasoningTokens: addTokenCounts(\n usage1.outputTokenDetails?.reasoningTokens,\n usage2.outputTokenDetails?.reasoningTokens,\n ),\n },\n totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),\n reasoningTokens: addTokenCounts(\n usage1.reasoningTokens,\n usage2.reasoningTokens,\n ),\n cachedInputTokens: addTokenCounts(\n usage1.cachedInputTokens,\n usage2.cachedInputTokens,\n ),\n };\n}\n\nfunction addTokenCounts(\n tokenCount1: number | undefined,\n tokenCount2: number | undefined,\n): number | undefined {\n return tokenCount1 == null && tokenCount2 == null\n ? undefined\n : (tokenCount1 ?? 0) + (tokenCount2 ?? 0);\n}\n\n/**\n * Usage information for an image model call.\n */\nexport type ImageModelUsage = ImageModelV4Usage;\n\nexport function addImageModelUsage(\n usage1: ImageModelUsage,\n usage2: ImageModelUsage,\n): ImageModelUsage {\n return {\n inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),\n outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),\n totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),\n };\n}\n","import { gateway } from '@ai-sdk/gateway';\nimport {\n EmbeddingModelV4,\n Experimental_VideoModelV4,\n ImageModelV4,\n LanguageModelV4,\n ProviderV4,\n RerankingModelV4,\n SpeechModelV4,\n TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport { UnsupportedModelVersionError } from '../error';\nimport { EmbeddingModel } from '../types/embedding-model';\nimport { LanguageModel } from '../types/language-model';\nimport { SpeechModel } from '../types/speech-model';\nimport { TranscriptionModel } from '../types/transcription-model';\nimport { asEmbeddingModelV4 } from './as-embedding-model-v4';\nimport { asImageModelV4 } from './as-image-model-v4';\nimport { asLanguageModelV4 } from './as-language-model-v4';\nimport { asRerankingModelV4 } from './as-reranking-model-v4';\nimport { asSpeechModelV4 } from './as-speech-model-v4';\nimport { asTranscriptionModelV4 } from './as-transcription-model-v4';\nimport { asVideoModelV4 } from './as-video-model-v4';\nimport { asProviderV4 } from './as-provider-v4';\nimport { ImageModel } from '../types/image-model';\nimport { RerankingModel } from '../types/reranking-model';\nimport { VideoModel } from '../types/video-model';\n\nexport function resolveLanguageModel(model: LanguageModel): LanguageModelV4 {\n if (typeof model === 'string') {\n return getGlobalProvider().languageModel(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asLanguageModelV4(model);\n}\n\nexport function resolveEmbeddingModel(model: EmbeddingModel): EmbeddingModelV4 {\n if (typeof model === 'string') {\n return getGlobalProvider().embeddingModel(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asEmbeddingModelV4(model);\n}\n\nexport function resolveTranscriptionModel(\n model: TranscriptionModel,\n): TranscriptionModelV4 | undefined {\n if (typeof model === 'string') {\n return getGlobalProvider().transcriptionModel?.(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asTranscriptionModelV4(model);\n}\n\nexport function resolveSpeechModel(\n model: SpeechModel,\n): SpeechModelV4 | undefined {\n if (typeof model === 'string') {\n return getGlobalProvider().speechModel?.(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asSpeechModelV4(model);\n}\n\nexport function resolveImageModel(model: ImageModel): ImageModelV4 {\n if (typeof model === 'string') {\n return getGlobalProvider().imageModel(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asImageModelV4(model);\n}\n\nexport function resolveVideoModel(\n model: VideoModel,\n): Experimental_VideoModelV4 {\n if (typeof model === 'string') {\n // Use raw global provider because videoModel is experimental\n // and not part of the ProviderV4 interface\n const provider = globalThis.AI_SDK_DEFAULT_PROVIDER ?? gateway;\n // TODO AI SDK v7\n // @ts-expect-error - videoModel support is experimental\n const videoModel = provider.videoModel;\n\n if (!videoModel) {\n throw new Error(\n 'The default provider does not support video models. ' +\n 'Please use a Experimental_VideoModelV4 object from a provider (e.g., vertex.video(\"model-id\")).',\n );\n }\n\n return videoModel(model);\n }\n\n if (!['v4', 'v3'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asVideoModelV4(model);\n}\n\nexport function resolveRerankingModel(model: RerankingModel): RerankingModelV4 {\n if (typeof model === 'string') {\n const provider = getGlobalProvider();\n const rerankingModel = provider.rerankingModel;\n\n if (!rerankingModel) {\n throw new Error(\n 'The default provider does not support reranking models. ' +\n 'Please use a RerankingModel object from a provider (e.g., gateway.rerankingModel(\"model-id\")).',\n );\n }\n\n return rerankingModel(model);\n }\n\n if (\n model.specificationVersion !== 'v4' &&\n model.specificationVersion !== 'v3'\n ) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asRerankingModelV4(model);\n}\n\nfunction getGlobalProvider(): ProviderV4 {\n const provider = globalThis.AI_SDK_DEFAULT_PROVIDER ?? gateway;\n return asProviderV4(provider);\n}\n","export {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n LoadSettingError,\n NoContentGeneratedError,\n NoSuchModelError,\n NoSuchProviderReferenceError,\n TooManyEmbeddingValuesForCallError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport { InvalidArgumentError } from './invalid-argument-error';\nexport { InvalidStreamPartError } from './invalid-stream-part-error';\nexport { InvalidToolApprovalError } from './invalid-tool-approval-error';\nexport { InvalidToolInputError } from './invalid-tool-input-error';\nexport { ToolCallNotFoundForApprovalError } from './tool-call-not-found-for-approval-error';\nexport { MissingToolResultsError } from './missing-tool-result-error';\nexport { NoImageGeneratedError } from './no-image-generated-error';\nexport { NoObjectGeneratedError } from './no-object-generated-error';\nexport { NoOutputGeneratedError } from './no-output-generated-error';\nexport { NoSpeechGeneratedError } from './no-speech-generated-error';\nexport { NoTranscriptGeneratedError } from './no-transcript-generated-error';\nexport { NoVideoGeneratedError } from './no-video-generated-error';\nexport { NoSuchToolError } from './no-such-tool-error';\nexport { ToolCallRepairError } from './tool-call-repair-error';\nexport { UnsupportedModelVersionError } from './unsupported-model-version-error';\nexport { UIMessageStreamError } from './ui-message-stream-error';\nexport { InvalidDataContentError } from '../prompt/invalid-data-content-error';\nexport { InvalidMessageRoleError } from '../prompt/invalid-message-role-error';\nexport { MessageConversionError } from '../prompt/message-conversion-error';\nexport { DownloadError } from '@ai-sdk/provider-utils';\nexport { RetryError } from '../util/retry-error';\n","import { AISDKError } from '@ai-sdk/provider';\n\n/**\n * Error that is thrown when a model with an unsupported version is used.\n */\nexport class UnsupportedModelVersionError extends AISDKError {\n readonly version: string;\n readonly provider: string;\n readonly modelId: string;\n\n constructor(options: { version: string; provider: string; modelId: string }) {\n super({\n name: 'AI_UnsupportedModelVersionError',\n message:\n `Unsupported model version ${options.version} for provider \"${options.provider}\" and model \"${options.modelId}\". ` +\n `AI SDK 5 only supports models that implement specification version \"v2\".`,\n });\n\n this.version = options.version;\n this.provider = options.provider;\n this.modelId = options.modelId;\n }\n}\n","import { logWarnings } from '../logger/log-warnings';\n\nexport function logV2CompatibilityWarning({\n provider,\n modelId,\n}: {\n provider: string;\n modelId: string;\n}): void {\n logWarnings({\n warnings: [\n {\n type: 'compatibility',\n feature: 'specificationVersion',\n details: `Using v2 specification compatibility mode. Some features may not be available.`,\n },\n ],\n provider,\n model: modelId,\n });\n}\n","import { EmbeddingModelV2, EmbeddingModelV3 } from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asEmbeddingModelV3(\n model: EmbeddingModelV2<string> | EmbeddingModelV3,\n): EmbeddingModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof EmbeddingModelV2<string>) {\n if (prop === 'specificationVersion') return 'v3';\n return target[prop];\n },\n }) as unknown as EmbeddingModelV3;\n}\n","import {\n EmbeddingModelV2,\n EmbeddingModelV3,\n EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport { asEmbeddingModelV3 } from './as-embedding-model-v3';\n\nexport function asEmbeddingModelV4(\n model: EmbeddingModelV2<string> | EmbeddingModelV3 | EmbeddingModelV4,\n): EmbeddingModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asEmbeddingModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof EmbeddingModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as EmbeddingModelV4;\n}\n","import { ImageModelV2, ImageModelV3 } from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asImageModelV3(\n model: ImageModelV2 | ImageModelV3,\n): ImageModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof ImageModelV2) {\n if (prop === 'specificationVersion') return 'v3';\n return target[prop];\n },\n }) as unknown as ImageModelV3;\n}\n","import { ImageModelV2, ImageModelV3, ImageModelV4 } from '@ai-sdk/provider';\nimport { asImageModelV3 } from './as-image-model-v3';\n\nexport function asImageModelV4(\n model: ImageModelV2 | ImageModelV3 | ImageModelV4,\n): ImageModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asImageModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof ImageModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as ImageModelV4;\n}\n","import {\n LanguageModelV2,\n LanguageModelV2FinishReason,\n LanguageModelV2StreamPart,\n LanguageModelV2Usage,\n LanguageModelV3,\n LanguageModelV3FinishReason,\n LanguageModelV3StreamPart,\n LanguageModelV3Usage,\n} from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asLanguageModelV3(\n model: LanguageModelV2 | LanguageModelV3,\n): LanguageModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof LanguageModelV2) {\n switch (prop) {\n case 'specificationVersion':\n return 'v3';\n case 'doGenerate':\n return async (...args: Parameters<LanguageModelV2['doGenerate']>) => {\n const result = await target.doGenerate(...args);\n return {\n ...result,\n finishReason: convertV2FinishReasonToV3(result.finishReason),\n usage: convertV2UsageToV3(result.usage),\n };\n };\n case 'doStream':\n return async (...args: Parameters<LanguageModelV2['doStream']>) => {\n const result = await target.doStream(...args);\n return {\n ...result,\n stream: convertV2StreamToV3(result.stream),\n };\n };\n default:\n return target[prop];\n }\n },\n }) as unknown as LanguageModelV3;\n}\n\nfunction convertV2StreamToV3(\n stream: ReadableStream<LanguageModelV2StreamPart>,\n): ReadableStream<LanguageModelV3StreamPart> {\n return stream.pipeThrough(\n new TransformStream<LanguageModelV2StreamPart, LanguageModelV3StreamPart>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'finish':\n controller.enqueue({\n ...chunk,\n finishReason: convertV2FinishReasonToV3(chunk.finishReason),\n usage: convertV2UsageToV3(chunk.usage),\n });\n break;\n default:\n // TODO: AI SDK 6 - no casting (stream parts need to be mapped)\n controller.enqueue(chunk as LanguageModelV3StreamPart);\n break;\n }\n },\n }),\n );\n}\n\nfunction convertV2FinishReasonToV3(\n finishReason: LanguageModelV2FinishReason,\n): LanguageModelV3FinishReason {\n return {\n unified: finishReason === 'unknown' ? 'other' : finishReason,\n raw: undefined,\n };\n}\n\nfunction convertV2UsageToV3(usage: LanguageModelV2Usage): LanguageModelV3Usage {\n return {\n inputTokens: {\n total: usage.inputTokens,\n noCache: undefined,\n cacheRead: usage.cachedInputTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: usage.outputTokens,\n text: undefined,\n reasoning: usage.reasoningTokens,\n },\n };\n}\n","import {\n LanguageModelV2,\n LanguageModelV3,\n LanguageModelV4,\n} from '@ai-sdk/provider';\nimport { asLanguageModelV3 } from './as-language-model-v3';\n\nexport function asLanguageModelV4(\n model: LanguageModelV2 | LanguageModelV3 | LanguageModelV4,\n): LanguageModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asLanguageModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof LanguageModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as LanguageModelV4;\n}\n","import { RerankingModelV3, RerankingModelV4 } from '@ai-sdk/provider';\n\nexport function asRerankingModelV4(\n model: RerankingModelV3 | RerankingModelV4,\n): RerankingModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n return new Proxy(model, {\n get(target, prop: keyof RerankingModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as RerankingModelV4;\n}\n","import { SpeechModelV2, SpeechModelV3 } from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asSpeechModelV3(\n model: SpeechModelV3 | SpeechModelV2,\n): SpeechModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof SpeechModelV2) {\n if (prop === 'specificationVersion') return 'v3';\n return target[prop];\n },\n }) as unknown as SpeechModelV3;\n}\n","import { SpeechModelV2, SpeechModelV3, SpeechModelV4 } from '@ai-sdk/provider';\nimport { asSpeechModelV3 } from './as-speech-model-v3';\n\nexport function asSpeechModelV4(\n model: SpeechModelV2 | SpeechModelV3 | SpeechModelV4,\n): SpeechModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asSpeechModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof SpeechModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as SpeechModelV4;\n}\n","import { TranscriptionModelV2, TranscriptionModelV3 } from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asTranscriptionModelV3(\n model: TranscriptionModelV3 | TranscriptionModelV2,\n): TranscriptionModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof TranscriptionModelV2) {\n if (prop === 'specificationVersion') return 'v3';\n return target[prop];\n },\n }) as unknown as TranscriptionModelV3;\n}\n","import {\n TranscriptionModelV2,\n TranscriptionModelV3,\n TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport { asTranscriptionModelV3 } from './as-transcription-model-v3';\n\nexport function asTranscriptionModelV4(\n model: TranscriptionModelV2 | TranscriptionModelV3 | TranscriptionModelV4,\n): TranscriptionModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asTranscriptionModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof TranscriptionModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as TranscriptionModelV4;\n}\n","import { ProviderV2, ProviderV3 } from '@ai-sdk/provider';\nimport { asEmbeddingModelV3 } from './as-embedding-model-v3';\nimport { asImageModelV3 } from './as-image-model-v3';\nimport { asLanguageModelV3 } from './as-language-model-v3';\nimport { asTranscriptionModelV3 } from './as-transcription-model-v3';\nimport { asSpeechModelV3 } from './as-speech-model-v3';\n\nexport function asProviderV3(provider: ProviderV2 | ProviderV3): ProviderV3 {\n if (\n 'specificationVersion' in provider &&\n provider.specificationVersion === 'v3'\n ) {\n return provider;\n }\n\n // v3 providers have already been returned\n const v2Provider: ProviderV2 = provider as ProviderV2;\n\n return {\n specificationVersion: 'v3',\n languageModel: (modelId: string) =>\n asLanguageModelV3(v2Provider.languageModel(modelId)),\n embeddingModel: (modelId: string) =>\n asEmbeddingModelV3(v2Provider.textEmbeddingModel(modelId)),\n imageModel: (modelId: string) =>\n asImageModelV3(v2Provider.imageModel(modelId)),\n transcriptionModel: v2Provider.transcriptionModel\n ? (modelId: string) =>\n asTranscriptionModelV3(v2Provider.transcriptionModel!(modelId))\n : undefined,\n speechModel: v2Provider.speechModel\n ? (modelId: string) => asSpeechModelV3(v2Provider.speechModel!(modelId))\n : undefined,\n rerankingModel: undefined, // v2 providers don't have reranking models\n };\n}\n","import { ProviderV2, ProviderV3, ProviderV4 } from '@ai-sdk/provider';\nimport { asProviderV3 } from './as-provider-v3';\nimport { asEmbeddingModelV4 } from './as-embedding-model-v4';\nimport { asImageModelV4 } from './as-image-model-v4';\nimport { asLanguageModelV4 } from './as-language-model-v4';\nimport { asRerankingModelV4 } from './as-reranking-model-v4';\nimport { asTranscriptionModelV4 } from './as-transcription-model-v4';\nimport { asSpeechModelV4 } from './as-speech-model-v4';\n\nexport function asProviderV4(\n provider: ProviderV2 | ProviderV3 | ProviderV4,\n): ProviderV4 {\n if (\n 'specificationVersion' in provider &&\n provider.specificationVersion === 'v4'\n ) {\n return provider;\n }\n\n // first ensure we have at least a v3 provider:\n const v3Provider: ProviderV3 =\n !('specificationVersion' in provider) ||\n provider.specificationVersion !== 'v3'\n ? asProviderV3(provider as ProviderV2)\n : provider;\n\n return {\n specificationVersion: 'v4',\n languageModel: (modelId: string) =>\n asLanguageModelV4(v3Provider.languageModel(modelId)),\n embeddingModel: (modelId: string) =>\n asEmbeddingModelV4(v3Provider.embeddingModel(modelId)),\n imageModel: (modelId: string) =>\n asImageModelV4(v3Provider.imageModel(modelId)),\n transcriptionModel: v3Provider.transcriptionModel\n ? (modelId: string) =>\n asTranscriptionModelV4(v3Provider.transcriptionModel!(modelId))\n : undefined,\n speechModel: v3Provider.speechModel\n ? (modelId: string) => asSpeechModelV4(v3Provider.speechModel!(modelId))\n : undefined,\n rerankingModel: v3Provider.rerankingModel\n ? (modelId: string) =>\n asRerankingModelV4(v3Provider.rerankingModel!(modelId))\n : undefined,\n };\n}\n","import { filterNullable } from '@ai-sdk/provider-utils';\n\n/**\n * Merges multiple abort sources into a single `AbortSignal`.\n * The returned signal will abort when any input signal aborts or when any\n * numeric timeout elapses, using the reason from the first source to abort.\n *\n * @param signals - Abort signals or timeout durations in milliseconds.\n * `null` and `undefined` values are ignored.\n * @returns An `AbortSignal` that aborts when any valid source aborts,\n * or `undefined` if no valid sources are provided.\n */\nexport function mergeAbortSignals(\n ...signals: (AbortSignal | null | undefined | number)[]\n): AbortSignal | undefined {\n const validSignals = filterNullable(...signals).map(signal =>\n signal instanceof AbortSignal ? signal : AbortSignal.timeout(signal),\n );\n\n return validSignals.length === 0\n ? undefined\n : validSignals.length === 1\n ? validSignals[0]\n : AbortSignal.any(validSignals);\n}\n","import type { Callback } from '../util/callback';\n\n/**\n * Creates an async callback that invokes the provided callbacks in parallel.\n * Undefined callbacks are skipped, and thrown or rejected callback errors are\n * ignored.\n *\n * @param callbacks The callbacks to invoke for each event.\n * @returns A callback that forwards each event to all callbacks and waits for\n * them to settle.\n */\nexport function mergeCallbacks<EVENT>(\n ...callbacks: Array<Callback<EVENT> | undefined>\n): Callback<EVENT> {\n return async (event: EVENT) => {\n await Promise.allSettled(\n callbacks.map(async callback => {\n await callback?.(event);\n }),\n );\n };\n}\n"],"mappings":"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","names":["_a","_a","download","convertBase64ToUint8Array","_a","AISDKError","AISDKError","name","marker","symbol","_a","download","_a","name","asArray","z","z","z","z","z","z","z","z","asArray","z","AISDKError","name","marker","symbol","_a","AISDKError","name","marker","symbol","_a","AISDKError","APICallError","InvalidPromptError","AISDKError","DownloadError","_a"]}
|
|
1
|
+
{"version":3,"sources":["../../internal/index.ts","../../src/util/async-iterable-stream.ts","../../src/prompt/convert-to-language-model-prompt.ts","../../src/util/detect-media-type.ts","../../src/util/download/download.ts","../../src/version.ts","../../src/util/download/download-function.ts","../../src/prompt/data-content.ts","../../src/prompt/split-data-url.ts","../../src/logger/log-warnings.ts","../../src/prompt/invalid-message-role-error.ts","../../src/error/missing-tool-result-error.ts","../../src/prompt/prepare-tool-choice.ts","../../src/prompt/prepare-tools.ts","../../src/util/is-non-empty-object.ts","../../src/prompt/standardize-prompt.ts","../../src/prompt/message.ts","../../src/types/provider-metadata.ts","../../src/types/json-value.ts","../../src/prompt/content-part.ts","../../src/error/invalid-argument-error.ts","../../src/prompt/prepare-language-model-call-options.ts","../../src/util/retry-with-exponential-backoff.ts","../../src/util/retry-error.ts","../../src/util/prepare-retries.ts","../../src/types/usage.ts","../../src/model/resolve-model.ts","../../src/error/index.ts","../../src/error/unsupported-model-version-error.ts","../../src/util/log-v2-compatibility-warning.ts","../../src/model/as-embedding-model-v3.ts","../../src/model/as-embedding-model-v4.ts","../../src/model/as-image-model-v3.ts","../../src/model/as-image-model-v4.ts","../../src/model/as-language-model-v3.ts","../../src/model/as-language-model-v4.ts","../../src/model/as-reranking-model-v4.ts","../../src/model/as-speech-model-v3.ts","../../src/model/as-speech-model-v4.ts","../../src/model/as-transcription-model-v3.ts","../../src/model/as-transcription-model-v4.ts","../../src/model/as-provider-v3.ts","../../src/model/as-provider-v4.ts","../../src/util/merge-abort-signals.ts","../../src/util/merge-callbacks.ts"],"sourcesContent":["// internal re-exports\nexport { convertAsyncIteratorToReadableStream } from '@ai-sdk/provider-utils';\n\n// internal\nexport { createAsyncIterableStream } from '../src/util/async-iterable-stream';\nexport { convertToLanguageModelPrompt } from '../src/prompt/convert-to-language-model-prompt';\nexport { prepareToolChoice } from '../src/prompt/prepare-tool-choice';\nexport { prepareTools } from '../src/prompt/prepare-tools';\nexport { standardizePrompt } from '../src/prompt/standardize-prompt';\nexport {\n prepareLanguageModelCallOptions,\n /** @deprecated Use `prepareLanguageModelCallOptions` instead. */\n prepareLanguageModelCallOptions as prepareCallSettings,\n} from '../src/prompt/prepare-language-model-call-options';\nexport { prepareRetries } from '../src/util/prepare-retries';\nexport { asLanguageModelUsage } from '../src/types/usage';\nexport { resolveLanguageModel } from '../src/model/resolve-model';\nexport { mergeAbortSignals } from '../src/util/merge-abort-signals';\nexport { mergeCallbacks } from '../src/util/merge-callbacks';\n\n// import globals\nimport '../src/global';\n","/**\n * A type that combines AsyncIterable and ReadableStream.\n * This allows a ReadableStream to be consumed using for-await-of syntax.\n */\nexport type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;\n\n/**\n * Wraps a ReadableStream and returns an object that is both a ReadableStream and an AsyncIterable.\n * This enables consumption of the stream using for-await-of, with proper resource cleanup on early exit or error.\n *\n * @template T The type of the stream's chunks.\n * @param source The source ReadableStream to wrap.\n * @returns An AsyncIterableStream that can be used as both a ReadableStream and an AsyncIterable.\n */\nexport function createAsyncIterableStream<T>(\n source: ReadableStream<T>,\n): AsyncIterableStream<T> {\n // Pipe through a TransformStream to ensure a fresh, unlocked stream.\n const stream = source.pipeThrough(new TransformStream<T, T>());\n\n /**\n * Implements the async iterator protocol for the stream.\n * Ensures proper cleanup (cancelling and releasing the reader) on completion, early exit, or error.\n */\n (stream as AsyncIterableStream<T>)[Symbol.asyncIterator] = function (\n this: ReadableStream<T>,\n ): AsyncIterator<T> {\n const reader = this.getReader();\n\n let finished = false;\n\n /**\n * Cleans up the reader by cancelling and releasing the lock.\n */\n async function cleanup(cancelStream: boolean) {\n if (finished) return;\n\n finished = true;\n try {\n if (cancelStream) {\n await reader.cancel?.();\n }\n } finally {\n try {\n reader.releaseLock();\n } catch {}\n }\n }\n\n return {\n /**\n * Reads the next chunk from the stream.\n * @returns A promise resolving to the next IteratorResult.\n */\n async next(): Promise<IteratorResult<T>> {\n if (finished) {\n return { done: true, value: undefined };\n }\n\n const { done, value } = await reader.read();\n\n if (done) {\n await cleanup(true);\n return { done: true, value: undefined };\n }\n\n return { done: false, value };\n },\n\n /**\n * May be called on early exit (e.g., break from for-await) or after completion.\n * Ensures the stream is cancelled and resources are released.\n * @returns A promise resolving to a completed IteratorResult.\n */\n async return(): Promise<IteratorResult<T>> {\n await cleanup(true);\n return { done: true, value: undefined };\n },\n\n /**\n * Called on early exit with error.\n * Ensures the stream is cancelled and resources are released, then rethrows the error.\n * @param err The error to throw.\n * @returns A promise that rejects with the provided error.\n */\n async throw(err: unknown): Promise<IteratorResult<T>> {\n await cleanup(true);\n throw err;\n },\n };\n };\n\n return stream as AsyncIterableStream<T>;\n}\n","import {\n LanguageModelV4FilePart,\n LanguageModelV4Message,\n LanguageModelV4Prompt,\n LanguageModelV4TextPart,\n LanguageModelV4ToolResultOutput,\n} from '@ai-sdk/provider';\nimport {\n asArray,\n CustomPart,\n DataContent,\n FilePart,\n ImagePart,\n isProviderReference,\n isUrlSupported,\n ModelMessage,\n ReasoningFilePart,\n ReasoningPart,\n TextPart,\n ToolCallPart,\n ToolResultOutput,\n ToolResultPart,\n} from '@ai-sdk/provider-utils';\nimport {\n detectMediaType,\n imageMediaTypeSignatures,\n} from '../util/detect-media-type';\nimport {\n createDefaultDownloadFunction,\n DownloadFunction,\n} from '../util/download/download-function';\nimport { convertToLanguageModelV4DataContent } from './data-content';\nimport { logWarnings } from '../logger/log-warnings';\nimport type { Warning } from '../types/warning';\nimport { InvalidMessageRoleError } from './invalid-message-role-error';\nimport { StandardizedPrompt } from './standardize-prompt';\nimport { MissingToolResultsError } from '../error/missing-tool-result-error';\n\nexport async function convertToLanguageModelPrompt({\n prompt,\n supportedUrls,\n download = createDefaultDownloadFunction(),\n // `provider` is only needed here to convert legacy tool output types via `mapToolResultOutput`.\n // TODO: remove in v8 when \"file-id\" and \"image-file-id\" types are removed\n provider,\n}: {\n prompt: StandardizedPrompt;\n supportedUrls: Record<string, RegExp[]>;\n download: DownloadFunction | undefined;\n provider?: string;\n}): Promise<LanguageModelV4Prompt> {\n const downloadedAssets = await downloadAssets(\n prompt.messages,\n download,\n supportedUrls,\n );\n\n const approvalIdToToolCallId = new Map<string, string>();\n for (const message of prompt.messages) {\n if (message.role === 'assistant' && Array.isArray(message.content)) {\n for (const part of message.content) {\n if (\n part.type === 'tool-approval-request' &&\n 'approvalId' in part &&\n 'toolCallId' in part\n ) {\n approvalIdToToolCallId.set(\n part.approvalId as string,\n part.toolCallId as string,\n );\n }\n }\n }\n }\n\n const approvedToolCallIds = new Set<string>();\n for (const message of prompt.messages) {\n if (message.role === 'tool') {\n for (const part of message.content) {\n if (part.type === 'tool-approval-response') {\n const toolCallId = approvalIdToToolCallId.get(part.approvalId);\n if (toolCallId) {\n approvedToolCallIds.add(toolCallId);\n }\n }\n }\n }\n }\n\n const messages = [\n ...(prompt.system != null\n ? typeof prompt.system === 'string'\n ? [{ role: 'system' as const, content: prompt.system }]\n : asArray(prompt.system).map(message => ({\n role: 'system' as const,\n content: message.content,\n providerOptions: message.providerOptions,\n }))\n : []),\n ...prompt.messages.map(message =>\n convertToLanguageModelMessage({ message, downloadedAssets, provider }),\n ),\n ];\n\n // combine consecutive tool messages into a single tool message\n const combinedMessages = [];\n for (const message of messages) {\n if (message.role !== 'tool') {\n combinedMessages.push(message);\n continue;\n }\n\n const lastCombinedMessage = combinedMessages.at(-1);\n if (lastCombinedMessage?.role === 'tool') {\n lastCombinedMessage.content.push(...message.content);\n } else {\n combinedMessages.push(message);\n }\n }\n\n const toolCallIds = new Set<string>();\n\n for (const message of combinedMessages) {\n switch (message.role) {\n case 'assistant': {\n for (const content of message.content) {\n if (content.type === 'tool-call' && !content.providerExecuted) {\n toolCallIds.add(content.toolCallId);\n }\n }\n break;\n }\n case 'tool': {\n for (const content of message.content) {\n if (content.type === 'tool-result') {\n toolCallIds.delete(content.toolCallId);\n }\n }\n break;\n }\n case 'user':\n case 'system':\n // remove approved tool calls from the set before checking:\n for (const id of approvedToolCallIds) {\n toolCallIds.delete(id);\n }\n\n if (toolCallIds.size > 0) {\n throw new MissingToolResultsError({\n toolCallIds: Array.from(toolCallIds),\n });\n }\n break;\n }\n }\n\n // remove approved tool calls from the set before checking:\n for (const id of approvedToolCallIds) {\n toolCallIds.delete(id);\n }\n\n if (toolCallIds.size > 0) {\n throw new MissingToolResultsError({ toolCallIds: Array.from(toolCallIds) });\n }\n\n return combinedMessages.filter(\n // Filter out empty tool messages (e.g. if they only contained\n // tool-approval-response parts that were removed).\n // This prevents sending invalid empty messages to the provider.\n // Note: provider-executed tool-approval-response parts are preserved.\n message => message.role !== 'tool' || message.content.length > 0,\n );\n}\n\n/**\n * Convert a ModelMessage to a LanguageModelV4Message.\n *\n * @param message - The ModelMessage to convert.\n * @param downloadedAssets - A map of URLs to their downloaded data. Only\n * available if the model does not support URLs, null otherwise.\n */\nexport function convertToLanguageModelMessage({\n message,\n downloadedAssets,\n // `provider` is only needed here to convert legacy tool output types via `mapToolResultOutput`.\n // TODO: remove in v8 when \"file-id\" and \"image-file-id\" types are removed\n provider,\n}: {\n message: ModelMessage;\n downloadedAssets: Record<\n string,\n { mediaType: string | undefined; data: Uint8Array }\n >;\n provider?: string;\n}): LanguageModelV4Message {\n const warnings: Warning[] = [];\n\n const role = message.role;\n switch (role) {\n case 'system': {\n return {\n role: 'system',\n content: message.content,\n providerOptions: message.providerOptions,\n };\n }\n\n case 'user': {\n if (typeof message.content === 'string') {\n return {\n role: 'user',\n content: [{ type: 'text', text: message.content }],\n providerOptions: message.providerOptions,\n };\n }\n\n const converted = {\n role: 'user' as const,\n content: message.content\n .map(part => convertPartToLanguageModelPart(part, downloadedAssets))\n // remove empty text parts:\n .filter(part => part.type !== 'text' || part.text !== ''),\n providerOptions: message.providerOptions,\n };\n if (warnings.length > 0) {\n logWarnings({ warnings });\n }\n return converted;\n }\n\n case 'assistant': {\n if (typeof message.content === 'string') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text: message.content }],\n providerOptions: message.providerOptions,\n };\n }\n\n const converted = {\n role: 'assistant' as const,\n content: message.content\n .filter(\n // remove empty text parts (no text, and no provider options):\n part =>\n part.type !== 'text' ||\n part.text !== '' ||\n part.providerOptions != null,\n )\n .filter(\n (\n part,\n ): part is\n | CustomPart\n | TextPart\n | FilePart\n | ReasoningPart\n | ReasoningFilePart\n | ToolCallPart\n | ToolResultPart => part.type !== 'tool-approval-request',\n )\n .map(part => {\n const providerOptions = part.providerOptions;\n\n switch (part.type) {\n case 'custom': {\n return {\n type: 'custom' as const,\n kind: part.kind,\n providerOptions,\n };\n }\n case 'file': {\n if (\n !(part.data instanceof ArrayBuffer) &&\n isProviderReference(part.data)\n ) {\n return {\n type: 'file' as const,\n data: part.data,\n filename: part.filename,\n mediaType: part.mediaType,\n providerOptions,\n };\n }\n const { data, mediaType } = convertToLanguageModelV4DataContent(\n part.data,\n );\n return {\n type: 'file' as const,\n data,\n filename: part.filename,\n mediaType: mediaType ?? part.mediaType,\n providerOptions,\n };\n }\n case 'reasoning': {\n return {\n type: 'reasoning' as const,\n text: part.text,\n providerOptions,\n };\n }\n case 'reasoning-file': {\n const { data, mediaType } = convertToLanguageModelV4DataContent(\n part.data,\n );\n return {\n type: 'reasoning-file' as const,\n data,\n mediaType: mediaType ?? part.mediaType,\n providerOptions,\n };\n }\n case 'text': {\n return {\n type: 'text' as const,\n text: part.text,\n providerOptions,\n };\n }\n case 'tool-call': {\n return {\n type: 'tool-call' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n providerExecuted: part.providerExecuted,\n providerOptions,\n };\n }\n case 'tool-result': {\n return {\n type: 'tool-result' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: mapToolResultOutput({\n output: part.output,\n provider,\n warnings,\n }),\n providerOptions,\n };\n }\n }\n }),\n providerOptions: message.providerOptions,\n };\n if (warnings.length > 0) {\n logWarnings({ warnings });\n }\n return converted;\n }\n\n case 'tool': {\n const converted = {\n role: 'tool' as const,\n content: message.content\n .filter(\n // Only include tool-approval-response for provider-executed tools\n part =>\n part.type !== 'tool-approval-response' || part.providerExecuted,\n )\n .map(part => {\n switch (part.type) {\n case 'tool-result': {\n return {\n type: 'tool-result' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: mapToolResultOutput({\n output: part.output,\n provider,\n warnings,\n }),\n providerOptions: part.providerOptions,\n };\n }\n case 'tool-approval-response': {\n return {\n type: 'tool-approval-response' as const,\n approvalId: part.approvalId,\n approved: part.approved,\n reason: part.reason,\n };\n }\n }\n }),\n providerOptions: message.providerOptions,\n };\n if (warnings.length > 0) {\n logWarnings({ warnings });\n }\n return converted;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new InvalidMessageRoleError({ role: _exhaustiveCheck });\n }\n }\n}\n\n/**\n * Downloads images and files from URLs in the messages.\n */\nasync function downloadAssets(\n messages: ModelMessage[],\n download: DownloadFunction,\n supportedUrls: Record<string, RegExp[]>,\n): Promise<\n Record<string, { mediaType: string | undefined; data: Uint8Array }>\n> {\n const plannedDownloads = messages\n .filter(message => message.role === 'user')\n .map(message => message.content)\n .filter((content): content is Array<TextPart | ImagePart | FilePart> =>\n Array.isArray(content),\n )\n .flat()\n .filter(\n (part): part is ImagePart | FilePart =>\n part.type === 'image' || part.type === 'file',\n )\n .map(part => {\n const mediaType =\n part.mediaType ?? (part.type === 'image' ? 'image/*' : undefined);\n\n let data = part.type === 'image' ? part.image : part.data;\n if (typeof data === 'string') {\n try {\n data = new URL(data);\n } catch {}\n }\n\n return { mediaType, data };\n })\n\n .filter(\n (part): part is { mediaType: string | undefined; data: URL } =>\n part.data instanceof URL,\n )\n .map(part => ({\n url: part.data,\n isUrlSupportedByModel:\n part.mediaType != null &&\n isUrlSupported({\n url: part.data.toString(),\n mediaType: part.mediaType,\n supportedUrls,\n }),\n }));\n\n // download in parallel:\n const downloadedFiles = await download(plannedDownloads);\n\n return Object.fromEntries(\n downloadedFiles\n .map((file, index) =>\n file == null\n ? null\n : [\n plannedDownloads[index].url.toString(),\n { data: file.data, mediaType: file.mediaType },\n ],\n )\n .filter(file => file != null),\n );\n}\n\n/**\n * Convert part of a message to a LanguageModelV4Part.\n *\n * @param part - The part to convert.\n * @param downloadedAssets - A map of URLs to their downloaded data. Only\n * available if the model does not support URLs, null otherwise.\n * @returns The converted part.\n */\nfunction convertPartToLanguageModelPart(\n part: TextPart | ImagePart | FilePart,\n downloadedAssets: Record<\n string,\n { mediaType: string | undefined; data: Uint8Array }\n >,\n): LanguageModelV4TextPart | LanguageModelV4FilePart {\n if (part.type === 'text') {\n return {\n type: 'text',\n text: part.text,\n providerOptions: part.providerOptions,\n };\n }\n\n const type = part.type;\n const rawData = type === 'image' ? part.image : part.data;\n\n if (\n typeof rawData === 'object' &&\n !(rawData instanceof Uint8Array) &&\n !(rawData instanceof ArrayBuffer) &&\n !(rawData instanceof URL)\n ) {\n return {\n type: 'file',\n mediaType: part.mediaType ?? (type === 'image' ? 'image/*' : ''),\n filename: type === 'file' ? part.filename : undefined,\n data: rawData,\n providerOptions: part.providerOptions,\n };\n }\n\n const originalData: DataContent | URL = rawData;\n\n const { data: convertedData, mediaType: convertedMediaType } =\n convertToLanguageModelV4DataContent(originalData);\n\n let mediaType: string | undefined = convertedMediaType ?? part.mediaType;\n let data: Uint8Array | string | URL = convertedData; // binary | base64 | url\n\n // If the content is a URL, we check if it was downloaded:\n if (data instanceof URL) {\n const downloadedFile = downloadedAssets[data.toString()];\n if (downloadedFile) {\n data = downloadedFile.data;\n mediaType ??= downloadedFile.mediaType;\n }\n }\n\n // Now that we have the normalized data either as a URL or a Uint8Array,\n // we can create the LanguageModelV4Part.\n switch (type) {\n case 'image': {\n // When possible, try to detect the media type automatically\n // to deal with incorrect media type inputs.\n // When detection fails, use provided media type.\n if (data instanceof Uint8Array || typeof data === 'string') {\n mediaType =\n detectMediaType({ data, signatures: imageMediaTypeSignatures }) ??\n mediaType;\n }\n\n return {\n type: 'file',\n mediaType: mediaType ?? 'image/*', // any image\n filename: undefined,\n data,\n providerOptions: part.providerOptions,\n };\n }\n\n case 'file': {\n // We must have a mediaType for files, if not, throw an error.\n if (mediaType == null) {\n throw new Error(`Media type is missing for file part`);\n }\n\n return {\n type: 'file',\n mediaType,\n filename: part.filename,\n data,\n providerOptions: part.providerOptions,\n };\n }\n }\n}\n\nfunction mapToolResultOutput({\n output,\n // `provider` is only needed here to convert legacy \"file-id\" and \"image-file-id\" types to provider references, in case they are using string ID values.\n // TODO: remove in v8 when \"file-id\" and \"image-file-id\" types are removed\n provider,\n warnings = [],\n}: {\n output: ToolResultOutput;\n provider?: string;\n warnings?: Warning[];\n}): LanguageModelV4ToolResultOutput {\n if (output.type !== 'content') {\n return output;\n }\n\n return {\n type: 'content',\n value: output.value.map(item => {\n switch (item.type) {\n // The \"image-*\" types are legacy and deprecated.\n // TODO: remove migration in v8 in combination with the removal of these types from the provider utils.\n case 'image-data': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"image-data\"',\n message: `The \"image-data\" type for tool result content is deprecated. Use the \"file-data\" type instead.`,\n });\n return {\n type: 'file-data' as const,\n data: item.data,\n mediaType: item.mediaType,\n providerOptions: item.providerOptions,\n };\n }\n case 'image-url': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"image-url\"',\n message: `The \"image-url\" type for tool result content is deprecated. Use the \"file-url\" type instead.`,\n });\n return {\n type: 'file-url' as const,\n url: item.url,\n mediaType: getMediaTypeFromUrl(item.url, 'image/*'),\n providerOptions: item.providerOptions,\n };\n }\n case 'image-file-id': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"image-file-id\"',\n message: `The \"image-file-id\" type for tool result content is deprecated. Use the \"file-reference\" type instead.`,\n });\n return {\n type: 'file-reference' as const,\n providerReference: convertFileIdToProviderReference({\n fileId: item.fileId,\n provider,\n }),\n providerOptions: item.providerOptions,\n };\n }\n case 'image-file-reference': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"image-file-reference\"',\n message: `The \"image-file-reference\" type for tool result content is deprecated. Use the \"file-reference\" type instead.`,\n });\n return {\n type: 'file-reference' as const,\n providerReference: item.providerReference,\n providerOptions: item.providerOptions,\n };\n }\n case 'file-id': {\n warnings.push({\n type: 'deprecated',\n setting: '\"tool-result\" content of type \"file-id\"',\n message: `The \"file-id\" type for tool result content is deprecated. Use the \"file-reference\" type instead.`,\n });\n return {\n type: 'file-reference' as const,\n providerReference: convertFileIdToProviderReference({\n fileId: item.fileId,\n provider,\n }),\n providerOptions: item.providerOptions,\n };\n }\n case 'file-url': {\n const mediaType = item.mediaType ?? getMediaTypeFromUrl(item.url);\n if (!item.mediaType) {\n const messageSuffix =\n mediaType === 'application/octet-stream'\n ? `Unable to infer media type from URL. Defaulting to 'application/octet-stream'.`\n : `Inferred media type '${mediaType}' from URL.`;\n warnings.push({\n type: 'deprecated',\n setting:\n '\"tool-result\" content of type \"file-url\" without mediaType',\n message:\n `The \"file-url\" tool result content part with URL \"${item.url}\" is missing a \"mediaType\". ` +\n messageSuffix,\n });\n }\n return {\n type: 'file-url' as const,\n url: item.url,\n mediaType,\n providerOptions: item.providerOptions,\n };\n }\n default:\n return item;\n }\n }),\n };\n}\n\nfunction convertFileIdToProviderReference({\n fileId,\n provider,\n}: {\n fileId: string | Record<string, string>;\n provider?: string;\n}): Record<string, string> {\n if (typeof fileId === 'object') {\n return fileId;\n }\n\n if (provider == null) {\n throw new Error(\n 'Cannot convert string fileId to provider reference without a provider ID. ' +\n 'Use a Record<string, string> fileId or switch to the file-reference type.',\n );\n }\n\n return { [provider]: fileId };\n}\n\n// Temporary private helper (see below).\n// TODO: remove in v8\nconst URL_EXTENSION_TO_MEDIA_TYPE: Record<string, string> = {\n jpg: 'image/jpeg',\n jpeg: 'image/jpeg',\n png: 'image/png',\n gif: 'image/gif',\n webp: 'image/webp',\n svg: 'image/svg+xml',\n avif: 'image/avif',\n heic: 'image/heic',\n bmp: 'image/bmp',\n tiff: 'image/tiff',\n tif: 'image/tiff',\n pdf: 'application/pdf',\n mp4: 'video/mp4',\n webm: 'video/webm',\n mp3: 'audio/mpeg',\n wav: 'audio/wav',\n ogg: 'audio/ogg',\n};\n\n/*\n * Attempts to infer an IANA media type from the file extension in a URL's\n * pathname. Returns `fallbackMediaType` when the extension is absent,\n * unrecognized, or the URL cannot be parsed.\n *\n * Temporary private helper as a best-effort solution for missing media types on \"file-url\" content parts.\n * TODO: remove in v8 when \"file-url\" content parts are required to have media types, after a migration period.\n */\nfunction getMediaTypeFromUrl(\n url: string,\n fallbackMediaType = 'application/octet-stream',\n): string {\n try {\n const pathname = new URL(url).pathname;\n const ext = pathname.split('.').pop()?.toLowerCase();\n if (ext && Object.hasOwn(URL_EXTENSION_TO_MEDIA_TYPE, ext)) {\n return URL_EXTENSION_TO_MEDIA_TYPE[ext];\n }\n } catch {\n // ignore URL parse errors\n }\n return fallbackMediaType;\n}\n","import { convertBase64ToUint8Array } from '@ai-sdk/provider-utils';\n\nexport const imageMediaTypeSignatures = [\n {\n mediaType: 'image/gif' as const,\n bytesPrefix: [0x47, 0x49, 0x46], // GIF\n },\n {\n mediaType: 'image/png' as const,\n bytesPrefix: [0x89, 0x50, 0x4e, 0x47], // PNG\n },\n {\n mediaType: 'image/jpeg' as const,\n bytesPrefix: [0xff, 0xd8], // JPEG\n },\n {\n mediaType: 'image/webp' as const,\n bytesPrefix: [\n 0x52,\n 0x49,\n 0x46,\n 0x46, // \"RIFF\"\n null,\n null,\n null,\n null, // file size (variable)\n 0x57,\n 0x45,\n 0x42,\n 0x50, // \"WEBP\"\n ],\n },\n {\n mediaType: 'image/bmp' as const,\n bytesPrefix: [0x42, 0x4d],\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x49, 0x49, 0x2a, 0x00],\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x4d, 0x4d, 0x00, 0x2a],\n },\n {\n mediaType: 'image/avif' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66,\n ],\n },\n {\n mediaType: 'image/heic' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63,\n ],\n },\n] as const;\n\nexport const documentMediaTypeSignatures = [\n {\n mediaType: 'application/pdf' as const,\n bytesPrefix: [0x25, 0x50, 0x44, 0x46], // %PDF\n },\n] as const;\n\nexport const audioMediaTypeSignatures = [\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfb],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfa],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf3],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf2],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe3],\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe2],\n },\n {\n mediaType: 'audio/wav' as const,\n bytesPrefix: [\n 0x52, // R\n 0x49, // I\n 0x46, // F\n 0x46, // F\n null,\n null,\n null,\n null,\n 0x57, // W\n 0x41, // A\n 0x56, // V\n 0x45, // E\n ],\n },\n {\n mediaType: 'audio/ogg' as const,\n bytesPrefix: [0x4f, 0x67, 0x67, 0x53],\n },\n {\n mediaType: 'audio/flac' as const,\n bytesPrefix: [0x66, 0x4c, 0x61, 0x43],\n },\n {\n mediaType: 'audio/aac' as const,\n bytesPrefix: [0x40, 0x15, 0x00, 0x00],\n },\n {\n mediaType: 'audio/mp4' as const,\n bytesPrefix: [0x66, 0x74, 0x79, 0x70],\n },\n {\n mediaType: 'audio/webm',\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3],\n },\n] as const;\n\nexport const videoMediaTypeSignatures = [\n {\n mediaType: 'video/mp4' as const,\n bytesPrefix: [\n 0x00,\n 0x00,\n 0x00,\n null,\n 0x66,\n 0x74,\n 0x79,\n 0x70, // ftyp\n ],\n },\n {\n mediaType: 'video/webm' as const,\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3], // EBML\n },\n {\n mediaType: 'video/quicktime' as const,\n bytesPrefix: [\n 0x00,\n 0x00,\n 0x00,\n 0x14,\n 0x66,\n 0x74,\n 0x79,\n 0x70,\n 0x71,\n 0x74, // ftypqt\n ],\n },\n {\n mediaType: 'video/x-msvideo' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46], // RIFF (AVI)\n },\n] as const;\n\nconst stripID3 = (data: Uint8Array | string) => {\n const bytes =\n typeof data === 'string' ? convertBase64ToUint8Array(data) : data;\n const id3Size =\n ((bytes[6] & 0x7f) << 21) |\n ((bytes[7] & 0x7f) << 14) |\n ((bytes[8] & 0x7f) << 7) |\n (bytes[9] & 0x7f);\n\n // The raw MP3 starts here\n return bytes.slice(id3Size + 10);\n};\n\nfunction stripID3TagsIfPresent(data: Uint8Array | string): Uint8Array | string {\n const hasId3 =\n (typeof data === 'string' && data.startsWith('SUQz')) ||\n (typeof data !== 'string' &&\n data.length > 10 &&\n data[0] === 0x49 && // 'I'\n data[1] === 0x44 && // 'D'\n data[2] === 0x33); // '3'\n\n return hasId3 ? stripID3(data) : data;\n}\n\n/**\n * Detect the media IANA media type of a file using a list of signatures.\n *\n * @param data - The file data.\n * @param signatures - The signatures to use for detection.\n * @returns The media type of the file.\n */\ntype MediaTypeSignatures = ReadonlyArray<{\n readonly mediaType: string;\n readonly bytesPrefix: ReadonlyArray<number | null>;\n}>;\n\nexport function detectMediaType<T extends MediaTypeSignatures>({\n data,\n signatures,\n}: {\n data: Uint8Array | string;\n signatures: T;\n}): T[number]['mediaType'] | undefined {\n const processedData = stripID3TagsIfPresent(data);\n\n // Convert the first ~18 bytes (24 base64 chars) for consistent detection logic:\n const bytes =\n typeof processedData === 'string'\n ? convertBase64ToUint8Array(\n processedData.substring(0, Math.min(processedData.length, 24)),\n )\n : processedData;\n\n for (const signature of signatures) {\n if (\n bytes.length >= signature.bytesPrefix.length &&\n signature.bytesPrefix.every(\n (byte, index) => byte === null || bytes[index] === byte,\n )\n ) {\n return signature.mediaType;\n }\n }\n\n return undefined;\n}\n","import {\n DownloadError,\n readResponseWithSizeLimit,\n DEFAULT_MAX_DOWNLOAD_SIZE,\n validateDownloadUrl,\n} from '@ai-sdk/provider-utils';\nimport {\n withUserAgentSuffix,\n getRuntimeEnvironmentUserAgent,\n} from '@ai-sdk/provider-utils';\nimport { VERSION } from '../../version';\n\n/**\n * Download a file from a URL.\n *\n * @param url - The URL to download from.\n * @param maxBytes - Maximum allowed download size in bytes. Defaults to 100 MiB.\n * @param abortSignal - An optional abort signal to cancel the download.\n * @returns The downloaded data and media type.\n *\n * @throws DownloadError if the download fails or exceeds maxBytes.\n */\nexport const download = async ({\n url,\n maxBytes,\n abortSignal,\n}: {\n url: URL;\n maxBytes?: number;\n abortSignal?: AbortSignal;\n}) => {\n const urlText = url.toString();\n validateDownloadUrl(urlText);\n try {\n const response = await fetch(urlText, {\n headers: withUserAgentSuffix(\n {},\n `ai-sdk/${VERSION}`,\n getRuntimeEnvironmentUserAgent(),\n ),\n signal: abortSignal,\n });\n\n // Validate final URL after redirects to prevent SSRF via open redirect\n if (response.redirected) {\n validateDownloadUrl(response.url);\n }\n\n if (!response.ok) {\n throw new DownloadError({\n url: urlText,\n statusCode: response.status,\n statusText: response.statusText,\n });\n }\n\n const data = await readResponseWithSizeLimit({\n response,\n url: urlText,\n maxBytes: maxBytes ?? DEFAULT_MAX_DOWNLOAD_SIZE,\n });\n\n return {\n data,\n mediaType: response.headers.get('content-type') ?? undefined,\n };\n } catch (error) {\n if (DownloadError.isInstance(error)) {\n throw error;\n }\n\n throw new DownloadError({ url: urlText, cause: error });\n }\n};\n","declare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n typeof __PACKAGE_VERSION__ !== 'undefined'\n ? __PACKAGE_VERSION__\n : '0.0.0-test';\n","import { download as originalDownload } from './download';\n\n/**\n * Experimental. Can change in patch versions without warning.\n *\n * Download function. Called with the array of URLs and a boolean indicating\n * whether the URL is supported by the model.\n *\n * The download function can decide for each URL:\n * - to return null (which means that the URL should be passed to the model)\n * - to download the asset and return the data (incl. retries, authentication, etc.)\n *\n * Should throw DownloadError if the download fails.\n *\n * Should return an array of objects sorted by the order of the requested downloads.\n * For each object, the data should be a Uint8Array if the URL was downloaded.\n * For each object, the mediaType should be the media type of the downloaded asset.\n * For each object, the data should be null if the URL should be passed through as is.\n */\nexport type DownloadFunction = (\n options: Array<{\n url: URL;\n isUrlSupportedByModel: boolean;\n }>,\n) => PromiseLike<\n Array<{\n data: Uint8Array;\n mediaType: string | undefined;\n } | null>\n>;\n\n/**\n * Default download function.\n * Downloads the file if it is not supported by the model.\n */\nexport const createDefaultDownloadFunction =\n (download: typeof originalDownload = originalDownload): DownloadFunction =>\n requestedDownloads =>\n Promise.all(\n requestedDownloads.map(async requestedDownload =>\n requestedDownload.isUrlSupportedByModel\n ? null\n : await download(requestedDownload),\n ),\n );\n","import { AISDKError, LanguageModelV4DataContent } from '@ai-sdk/provider';\nimport {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n DataContent,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { InvalidDataContentError } from './invalid-data-content-error';\nimport { splitDataUrl } from './split-data-url';\n\n/**\n * @internal\n */\nexport const dataContentSchema: z.ZodType<DataContent> = z.union([\n z.string(),\n z.instanceof(Uint8Array),\n z.instanceof(ArrayBuffer),\n z.custom<Buffer>(\n // Buffer might not be available in some environments such as CloudFlare:\n (value: unknown): value is Buffer =>\n globalThis.Buffer?.isBuffer(value) ?? false,\n { message: 'Must be a Buffer' },\n ),\n]);\n\nexport function convertToLanguageModelV4DataContent(\n content: DataContent | URL,\n): {\n data: LanguageModelV4DataContent;\n mediaType: string | undefined;\n} {\n // Buffer & Uint8Array:\n if (content instanceof Uint8Array) {\n return { data: content, mediaType: undefined };\n }\n\n // ArrayBuffer needs conversion to Uint8Array (lightweight):\n if (content instanceof ArrayBuffer) {\n return { data: new Uint8Array(content), mediaType: undefined };\n }\n\n // Attempt to create a URL from the data. If it fails, we can assume the data\n // is not a URL and likely some other sort of data.\n if (typeof content === 'string') {\n try {\n content = new URL(content);\n } catch {\n // ignored\n }\n }\n\n // Extract data from data URL:\n if (content instanceof URL && content.protocol === 'data:') {\n const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(\n content.toString(),\n );\n\n if (dataUrlMediaType == null || base64Content == null) {\n throw new AISDKError({\n name: 'InvalidDataContentError',\n message: `Invalid data URL format in content ${content.toString()}`,\n });\n }\n\n return { data: base64Content, mediaType: dataUrlMediaType };\n }\n\n return { data: content, mediaType: undefined };\n}\n\n/**\n * Converts data content to a base64-encoded string.\n *\n * @param content - Data content to convert.\n * @returns Base64-encoded string.\n */\nexport function convertDataContentToBase64String(content: DataContent): string {\n if (typeof content === 'string') {\n return content;\n }\n\n if (content instanceof ArrayBuffer) {\n return convertUint8ArrayToBase64(new Uint8Array(content));\n }\n\n return convertUint8ArrayToBase64(content);\n}\n\n/**\n * Converts data content to a Uint8Array.\n *\n * @param content - Data content to convert.\n * @returns Uint8Array.\n */\nexport function convertDataContentToUint8Array(\n content: DataContent,\n): Uint8Array {\n if (content instanceof Uint8Array) {\n return content;\n }\n\n if (typeof content === 'string') {\n try {\n return convertBase64ToUint8Array(content);\n } catch (error) {\n throw new InvalidDataContentError({\n message:\n 'Invalid data content. Content string is not a base64-encoded media.',\n content,\n cause: error,\n });\n }\n }\n\n if (content instanceof ArrayBuffer) {\n return new Uint8Array(content);\n }\n\n throw new InvalidDataContentError({ content });\n}\n\n/**\n * Converts a Uint8Array to a string of text.\n *\n * @param uint8Array - The Uint8Array to convert.\n * @returns The converted string.\n */\nexport function convertUint8ArrayToText(uint8Array: Uint8Array): string {\n try {\n return new TextDecoder().decode(uint8Array);\n } catch {\n throw new Error('Error decoding Uint8Array to text');\n }\n}\n","export function splitDataUrl(dataUrl: string): {\n mediaType: string | undefined;\n base64Content: string | undefined;\n} {\n try {\n const [header, base64Content] = dataUrl.split(',');\n return {\n mediaType: header.split(';')[0].split(':')[1],\n base64Content,\n };\n } catch {\n return {\n mediaType: undefined,\n base64Content: undefined,\n };\n }\n}\n","import { Warning } from '../types';\n\n/**\n * A function for logging warnings.\n *\n * You can assign it to the `AI_SDK_LOG_WARNINGS` global variable to use it as the default warning logger.\n *\n * @example\n * ```ts\n * globalThis.AI_SDK_LOG_WARNINGS = (options) => {\n * console.log('WARNINGS:', options.warnings, options.provider, options.model);\n * };\n * ```\n */\nexport type LogWarningsFunction = (options: {\n /**\n * The warnings returned by the model provider.\n */\n warnings: Warning[];\n\n /**\n * The provider id used for the call, if scoped to a specific provider.\n */\n provider?: string;\n\n /**\n * The model id used for the call, if scoped to a specific provider.\n */\n model?: string;\n}) => void;\n\n/**\n * Formats a warning object into a human-readable string with clear AI SDK branding.\n *\n * @param options - The options for formatting the warning.\n * @param options.warning - The warning to format.\n * @param options.provider - The provider id used for the call, if scoped to a specific provider.\n * @param options.model - The model id used for the call, if scoped to a specific provider.\n * @returns A formatted warning message string.\n */\nfunction formatWarning({\n warning,\n provider,\n model,\n}: {\n warning: Warning;\n provider?: string;\n model?: string;\n}): string {\n const scope =\n provider != null && model != null ? ` (${provider} / ${model})` : '';\n const prefix = `AI SDK Warning${scope}:`;\n\n switch (warning.type) {\n case 'unsupported': {\n let message = `${prefix} The feature \"${warning.feature}\" is not supported.`;\n if (warning.details) {\n message += ` ${warning.details}`;\n }\n return message;\n }\n\n case 'compatibility': {\n let message = `${prefix} The feature \"${warning.feature}\" is used in a compatibility mode.`;\n if (warning.details) {\n message += ` ${warning.details}`;\n }\n return message;\n }\n\n case 'deprecated': {\n return `${prefix} Deprecated: \"${warning.setting}\". ${warning.message}`;\n }\n\n case 'other': {\n return `${prefix} ${warning.message}`;\n }\n\n default: {\n // Fallback for any unknown warning types\n return `${prefix} ${JSON.stringify(warning, null, 2)}`;\n }\n }\n}\n\nexport const FIRST_WARNING_INFO_MESSAGE =\n 'AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.';\n\nlet hasLoggedBefore = false;\n\n/**\n * Logs warnings to the console or uses a custom logger if configured.\n *\n * The behavior can be customized via the `AI_SDK_LOG_WARNINGS` global variable:\n * - If set to `false`, warnings are suppressed.\n * - If set to a function, that function is called with the warnings.\n * - Otherwise, warnings are logged to the console using `console.warn`.\n *\n * @param options - The options containing warnings and context.\n * @param options.warnings - The warnings to log.\n * @param options.provider - The provider id used for the call, if scoped to a specific provider.\n * @param options.model - The model id used for the call, if scoped to a specific provider.\n */\nexport const logWarnings: LogWarningsFunction = options => {\n // if the warnings array is empty, do nothing\n if (options.warnings.length === 0) {\n return;\n }\n\n const logger = globalThis.AI_SDK_LOG_WARNINGS;\n\n // if the logger is set to false, do nothing\n if (logger === false) {\n return;\n }\n\n // use the provided logger if it is a function\n if (typeof logger === 'function') {\n logger(options);\n return;\n }\n\n // display information note on first call\n if (!hasLoggedBefore) {\n hasLoggedBefore = true;\n console.info(FIRST_WARNING_INFO_MESSAGE);\n }\n\n // default behavior: log warnings via process.emitWarning if available, otherwise console.warn\n for (const warning of options.warnings) {\n const message = formatWarning({\n warning,\n provider: options.provider,\n model: options.model,\n });\n if (\n typeof process !== 'undefined' &&\n typeof process.emitWarning === 'function'\n ) {\n process.emitWarning(message, {\n type: warning.type === 'deprecated' ? 'DeprecationWarning' : 'Warning',\n });\n } else {\n console.warn(message);\n }\n }\n};\n\n/**\n * Resets the internal logging state. Used for testing purposes.\n */\nexport const resetLogWarningsState = () => {\n hasLoggedBefore = false;\n};\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidMessageRoleError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidMessageRoleError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly role: string;\n\n constructor({\n role,\n message = `Invalid message role: '${role}'. Must be one of: \"system\", \"user\", \"assistant\", \"tool\".`,\n }: {\n role: string;\n message?: string;\n }) {\n super({ name, message });\n\n this.role = role;\n }\n\n static isInstance(error: unknown): error is InvalidMessageRoleError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_MissingToolResultsError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class MissingToolResultsError extends AISDKError {\n private readonly [symbol] = true;\n\n readonly toolCallIds: string[];\n\n constructor({ toolCallIds }: { toolCallIds: string[] }) {\n super({\n name,\n message: `Tool result${\n toolCallIds.length > 1 ? 's are' : ' is'\n } missing for tool call${toolCallIds.length > 1 ? 's' : ''} ${toolCallIds.join(\n ', ',\n )}.`,\n });\n\n this.toolCallIds = toolCallIds;\n }\n\n static isInstance(error: unknown): error is MissingToolResultsError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { LanguageModelV4ToolChoice } from '@ai-sdk/provider';\nimport { ToolChoice } from '../types/language-model';\n\nexport function prepareToolChoice({\n toolChoice,\n}: {\n // use of any because it doesn't matter for tool choice preparation\n toolChoice: ToolChoice<any> | undefined;\n}): LanguageModelV4ToolChoice {\n return toolChoice == null\n ? { type: 'auto' }\n : typeof toolChoice === 'string'\n ? { type: toolChoice }\n : { type: 'tool' as const, toolName: toolChoice.toolName as string };\n}\n","import {\n LanguageModelV4FunctionTool,\n LanguageModelV4ProviderTool,\n} from '@ai-sdk/provider';\nimport { asSchema, ToolSet } from '@ai-sdk/provider-utils';\nimport { isNonEmptyObject } from '../util/is-non-empty-object';\n\nexport async function prepareTools<TOOLS extends ToolSet>({\n tools,\n}: {\n tools: TOOLS | undefined;\n}): Promise<\n Array<LanguageModelV4FunctionTool | LanguageModelV4ProviderTool> | undefined\n> {\n if (!isNonEmptyObject(tools)) {\n return undefined;\n }\n\n const languageModelTools: Array<\n LanguageModelV4FunctionTool | LanguageModelV4ProviderTool\n > = [];\n for (const [name, tool] of Object.entries(tools)) {\n const toolType = tool.type;\n\n switch (toolType) {\n case undefined:\n case 'dynamic':\n case 'function':\n languageModelTools.push({\n type: 'function' as const,\n name,\n description: tool.description,\n inputSchema: await asSchema(tool.inputSchema).jsonSchema,\n ...(tool.inputExamples != null\n ? { inputExamples: tool.inputExamples }\n : {}),\n providerOptions: tool.providerOptions,\n ...(tool.strict != null ? { strict: tool.strict } : {}),\n });\n break;\n case 'provider':\n languageModelTools.push({\n type: 'provider' as const,\n name,\n id: tool.id,\n args: tool.args,\n });\n break;\n default: {\n const exhaustiveCheck: never = toolType as never;\n throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);\n }\n }\n }\n\n return languageModelTools;\n}\n","export function isNonEmptyObject(\n object: Record<string, unknown> | undefined | null,\n): object is Record<string, unknown> {\n return object != null && Object.keys(object).length > 0;\n}\n","import { InvalidPromptError } from '@ai-sdk/provider';\nimport {\n asArray,\n ModelMessage,\n safeValidateTypes,\n SystemModelMessage,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { modelMessageSchema } from './message';\nimport { Prompt } from './prompt';\n\nexport type StandardizedPrompt = {\n /**\n * System message.\n */\n system?: string | SystemModelMessage | Array<SystemModelMessage>;\n\n /**\n * Messages.\n */\n messages: ModelMessage[];\n};\n\n/**\n * Converts a prompt input into a standardized prompt with validated model\n * messages.\n *\n * @param prompt - The prompt definition to standardize.\n * Set `allowSystemInMessages` to true to allow system messages in the\n * `prompt` or `messages` fields. System messages in the `system` option are\n * always allowed.\n * @returns The standardized prompt.\n * @throws {InvalidPromptError} When the prompt is invalid.\n */\nexport async function standardizePrompt({\n allowSystemInMessages = false,\n system,\n prompt,\n messages,\n}: Prompt): Promise<StandardizedPrompt> {\n if (prompt == null && messages == null) {\n throw new InvalidPromptError({\n prompt,\n message: 'prompt or messages must be defined',\n });\n }\n\n if (prompt != null && messages != null) {\n throw new InvalidPromptError({\n prompt,\n message: 'prompt and messages cannot be defined at the same time',\n });\n }\n\n // validate that system is a string or a SystemModelMessage\n if (\n typeof system !== 'string' &&\n !asArray(system).every(message => message.role === 'system')\n ) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'system must be a string, SystemModelMessage, or array of SystemModelMessage',\n });\n }\n\n if (prompt != null && typeof prompt === 'string') {\n messages = [{ role: 'user', content: prompt }];\n } else if (prompt != null && Array.isArray(prompt)) {\n messages = prompt;\n } else if (messages == null) {\n throw new InvalidPromptError({\n prompt,\n message: 'prompt or messages must be defined',\n });\n }\n\n if (messages.length === 0) {\n throw new InvalidPromptError({\n prompt,\n message: 'messages must not be empty',\n });\n }\n\n if (\n !allowSystemInMessages &&\n messages.some(message => message.role === 'system')\n ) {\n throw new InvalidPromptError({\n prompt,\n message:\n 'System messages are not allowed in the prompt or messages fields. Use the system option instead.',\n });\n }\n\n const validationResult = await safeValidateTypes({\n value: messages,\n schema: z.array(modelMessageSchema),\n });\n\n if (!validationResult.success) {\n throw new InvalidPromptError({\n prompt,\n message: 'The messages do not match the ModelMessage[] schema.',\n cause: validationResult.error,\n });\n }\n\n return { messages, system };\n}\n","import {\n AssistantModelMessage,\n ModelMessage,\n SystemModelMessage,\n ToolModelMessage,\n UserModelMessage,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport {\n customPartSchema,\n filePartSchema,\n imagePartSchema,\n reasoningFilePartSchema,\n reasoningPartSchema,\n textPartSchema,\n toolApprovalRequestSchema,\n toolCallPartSchema,\n toolApprovalResponseSchema,\n toolResultPartSchema,\n} from './content-part';\n\nexport const systemModelMessageSchema: z.ZodType<SystemModelMessage> = z.object(\n {\n role: z.literal('system'),\n content: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n },\n);\n\nexport const userModelMessageSchema: z.ZodType<UserModelMessage> = z.object({\n role: z.literal('user'),\n content: z.union([\n z.string(),\n z.array(z.union([textPartSchema, imagePartSchema, filePartSchema])),\n ]),\n providerOptions: providerMetadataSchema.optional(),\n});\n\nexport const assistantModelMessageSchema: z.ZodType<AssistantModelMessage> =\n z.object({\n role: z.literal('assistant'),\n content: z.union([\n z.string(),\n z.array(\n z.union([\n textPartSchema,\n customPartSchema,\n filePartSchema,\n reasoningPartSchema,\n reasoningFilePartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n toolApprovalRequestSchema,\n ]),\n ),\n ]),\n providerOptions: providerMetadataSchema.optional(),\n });\n\nexport const toolModelMessageSchema: z.ZodType<ToolModelMessage> = z.object({\n role: z.literal('tool'),\n content: z.array(z.union([toolResultPartSchema, toolApprovalResponseSchema])),\n providerOptions: providerMetadataSchema.optional(),\n});\n\nexport const modelMessageSchema: z.ZodType<ModelMessage> = z.union([\n systemModelMessageSchema,\n userModelMessageSchema,\n assistantModelMessageSchema,\n toolModelMessageSchema,\n]);\n","import { SharedV4ProviderMetadata } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from './json-value';\n\n/**\n * Additional provider-specific metadata that is returned from the provider.\n *\n * This is needed to enable provider-specific functionality that can be\n * fully encapsulated in the provider.\n */\nexport type ProviderMetadata = SharedV4ProviderMetadata;\n\nexport const providerMetadataSchema: z.ZodType<ProviderMetadata> = z.record(\n z.string(),\n z.record(z.string(), jsonValueSchema.optional()),\n);\n","import { JSONValue as OriginalJSONValue } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\n\nexport const jsonValueSchema: z.ZodType<JSONValue> = z.lazy(() =>\n z.union([\n z.null(),\n z.string(),\n z.number(),\n z.boolean(),\n z.record(z.string(), jsonValueSchema.optional()),\n z.array(jsonValueSchema),\n ]),\n);\n\nexport type JSONValue = OriginalJSONValue;\n","import {\n CustomPart,\n FilePart,\n ImagePart,\n ProviderOptions,\n ReasoningFilePart,\n ReasoningPart,\n TextPart,\n ToolApprovalRequest,\n ToolApprovalResponse,\n ToolResultOutput,\n ToolResultPart,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from '../types/json-value';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport { dataContentSchema } from './data-content';\n\nconst providerReferenceSchema = z.record(z.string(), z.string());\n\n/**\n * @internal\n */\nexport const textPartSchema: z.ZodType<TextPart> = z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const imagePartSchema: z.ZodType<ImagePart> = z.object({\n type: z.literal('image'),\n image: z.union([\n dataContentSchema,\n z.instanceof(URL),\n providerReferenceSchema,\n ]),\n mediaType: z.string().optional(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const filePartSchema: z.ZodType<FilePart> = z.object({\n type: z.literal('file'),\n data: z.union([\n dataContentSchema,\n z.instanceof(URL),\n providerReferenceSchema,\n ]),\n filename: z.string().optional(),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const reasoningPartSchema: z.ZodType<ReasoningPart> = z.object({\n type: z.literal('reasoning'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const customPartSchema: z.ZodType<CustomPart> = z.object({\n type: z.literal('custom'),\n kind: z.string().transform(value => value as `${string}.${string}`),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const reasoningFilePartSchema: z.ZodType<ReasoningFilePart> = z.object({\n type: z.literal('reasoning-file'),\n data: z.union([dataContentSchema, z.instanceof(URL)]),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * Tool call content part of a prompt. It contains a tool call (usually generated by the AI model).\n */\nexport interface ToolCallPart {\n type: 'tool-call';\n\n /**\n * ID of the tool call. This ID is used to match the tool call with the tool result.\n */\n toolCallId: string;\n\n /**\n * Name of the tool that is being called.\n */\n toolName: string;\n\n /**\n * Arguments of the tool call. This is a JSON-serializable object that matches the tool's input schema.\n */\n input: unknown;\n\n /**\n * Additional provider-specific metadata. They are passed through\n * to the provider from the AI SDK and enable provider-specific\n * functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n}\n\n/**\n * @internal\n */\nexport const toolCallPartSchema: z.ZodType<ToolCallPart> = z.object({\n type: z.literal('tool-call'),\n toolCallId: z.string(),\n toolName: z.string(),\n input: z.unknown(),\n providerOptions: providerMetadataSchema.optional(),\n providerExecuted: z.boolean().optional(),\n}) as z.ZodType<ToolCallPart>; // necessary bc input is optional on Zod type\n\n/**\n * @internal\n */\nexport const outputSchema: z.ZodType<ToolResultOutput> = z.discriminatedUnion(\n 'type',\n [\n z.object({\n type: z.literal('text'),\n value: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('json'),\n value: jsonValueSchema,\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('execution-denied'),\n reason: z.string().optional(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('error-text'),\n value: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('error-json'),\n value: jsonValueSchema,\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('content'),\n value: z.array(\n z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('file-data'),\n data: z.string(),\n mediaType: z.string(),\n filename: z.string().optional(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('file-url'),\n url: z.string(),\n // Temporarily optional. TODO: make required in v8, after migration period.\n mediaType: z.string().optional(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('file-id'),\n fileId: z.union([z.string(), z.record(z.string(), z.string())]),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('file-reference'),\n providerReference: z.record(z.string(), z.string()),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('image-data'),\n data: z.string(),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('image-url'),\n url: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('image-file-id'),\n fileId: z.union([z.string(), z.record(z.string(), z.string())]),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('image-file-reference'),\n providerReference: z.record(z.string(), z.string()),\n providerOptions: providerMetadataSchema.optional(),\n }),\n z.object({\n type: z.literal('custom'),\n providerOptions: providerMetadataSchema.optional(),\n }),\n ]),\n ),\n }),\n ],\n);\n\n/**\n * @internal\n */\nexport const toolResultPartSchema: z.ZodType<ToolResultPart> = z.object({\n type: z.literal('tool-result'),\n toolCallId: z.string(),\n toolName: z.string(),\n output: outputSchema,\n providerOptions: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolResultPart>; // necessary bc result is optional on Zod type\n\n/**\n * @internal\n */\nexport const toolApprovalRequestSchema: z.ZodType<ToolApprovalRequest> =\n z.object({\n type: z.literal('tool-approval-request'),\n approvalId: z.string(),\n toolCallId: z.string(),\n });\n\n/**\n * @internal\n */\nexport const toolApprovalResponseSchema: z.ZodType<ToolApprovalResponse> =\n z.object({\n type: z.literal('tool-approval-response'),\n approvalId: z.string(),\n approved: z.boolean(),\n reason: z.string().optional(),\n });\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidArgumentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidArgumentError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly parameter: string;\n readonly value: unknown;\n\n constructor({\n parameter,\n value,\n message,\n }: {\n parameter: string;\n value: unknown;\n message: string;\n }) {\n super({\n name,\n message: `Invalid argument for parameter ${parameter}: ${message}`,\n });\n\n this.parameter = parameter;\n this.value = value;\n }\n\n static isInstance(error: unknown): error is InvalidArgumentError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { InvalidArgumentError } from '../error/invalid-argument-error';\nimport { LanguageModelCallOptions } from './language-model-call-options';\n\n/**\n * Validates model call options and returns a new object with normalized values.\n */\nexport function prepareLanguageModelCallOptions({\n maxOutputTokens,\n temperature,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n seed,\n stopSequences,\n reasoning,\n}: LanguageModelCallOptions): LanguageModelCallOptions {\n if (maxOutputTokens != null) {\n if (!Number.isInteger(maxOutputTokens)) {\n throw new InvalidArgumentError({\n parameter: 'maxOutputTokens',\n value: maxOutputTokens,\n message: 'maxOutputTokens must be an integer',\n });\n }\n\n if (maxOutputTokens < 1) {\n throw new InvalidArgumentError({\n parameter: 'maxOutputTokens',\n value: maxOutputTokens,\n message: 'maxOutputTokens must be >= 1',\n });\n }\n }\n\n if (temperature != null) {\n if (typeof temperature !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'temperature',\n value: temperature,\n message: 'temperature must be a number',\n });\n }\n }\n\n if (topP != null) {\n if (typeof topP !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'topP',\n value: topP,\n message: 'topP must be a number',\n });\n }\n }\n\n if (topK != null) {\n if (typeof topK !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'topK',\n value: topK,\n message: 'topK must be a number',\n });\n }\n }\n\n if (presencePenalty != null) {\n if (typeof presencePenalty !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'presencePenalty',\n value: presencePenalty,\n message: 'presencePenalty must be a number',\n });\n }\n }\n\n if (frequencyPenalty != null) {\n if (typeof frequencyPenalty !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'frequencyPenalty',\n value: frequencyPenalty,\n message: 'frequencyPenalty must be a number',\n });\n }\n }\n\n if (seed != null) {\n if (!Number.isInteger(seed)) {\n throw new InvalidArgumentError({\n parameter: 'seed',\n value: seed,\n message: 'seed must be an integer',\n });\n }\n }\n\n return {\n maxOutputTokens,\n temperature,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n stopSequences,\n seed,\n reasoning,\n };\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { delay, getErrorMessage, isAbortError } from '@ai-sdk/provider-utils';\nimport { RetryError } from './retry-error';\n\nexport type RetryFunction = <OUTPUT>(\n fn: () => PromiseLike<OUTPUT>,\n) => PromiseLike<OUTPUT>;\n\nfunction getRetryDelayInMs({\n error,\n exponentialBackoffDelay,\n}: {\n error: APICallError;\n exponentialBackoffDelay: number;\n}): number {\n const headers = error.responseHeaders;\n\n if (!headers) return exponentialBackoffDelay;\n\n let ms: number | undefined;\n\n // retry-ms is more precise than retry-after and used by e.g. OpenAI\n const retryAfterMs = headers['retry-after-ms'];\n if (retryAfterMs) {\n const timeoutMs = parseFloat(retryAfterMs);\n if (!Number.isNaN(timeoutMs)) {\n ms = timeoutMs;\n }\n }\n\n // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n const retryAfter = headers['retry-after'];\n if (retryAfter && ms === undefined) {\n const timeoutSeconds = parseFloat(retryAfter);\n if (!Number.isNaN(timeoutSeconds)) {\n ms = timeoutSeconds * 1000;\n } else {\n ms = Date.parse(retryAfter) - Date.now();\n }\n }\n\n // check that the delay is reasonable:\n if (\n ms != null &&\n !Number.isNaN(ms) &&\n 0 <= ms &&\n (ms < 60 * 1000 || ms < exponentialBackoffDelay)\n ) {\n return ms;\n }\n\n return exponentialBackoffDelay;\n}\n\n/**\n * The `retryWithExponentialBackoffRespectingRetryHeaders` strategy retries a failed API call with an exponential backoff,\n * while respecting rate limit headers (retry-after-ms and retry-after) if they are provided and reasonable (0-60 seconds).\n * You can configure the maximum number of retries, the initial delay, and the backoff factor.\n */\nexport const retryWithExponentialBackoffRespectingRetryHeaders =\n ({\n maxRetries = 2,\n initialDelayInMs = 2000,\n backoffFactor = 2,\n abortSignal,\n }: {\n maxRetries?: number;\n initialDelayInMs?: number;\n backoffFactor?: number;\n abortSignal?: AbortSignal;\n } = {}): RetryFunction =>\n async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n await _retryWithExponentialBackoff(f, {\n maxRetries,\n delayInMs: initialDelayInMs,\n backoffFactor,\n abortSignal,\n });\n\nasync function _retryWithExponentialBackoff<OUTPUT>(\n f: () => PromiseLike<OUTPUT>,\n {\n maxRetries,\n delayInMs,\n backoffFactor,\n abortSignal,\n }: {\n maxRetries: number;\n delayInMs: number;\n backoffFactor: number;\n abortSignal: AbortSignal | undefined;\n },\n errors: unknown[] = [],\n): Promise<OUTPUT> {\n try {\n return await f();\n } catch (error) {\n if (isAbortError(error)) {\n throw error; // don't retry when the request was aborted\n }\n\n if (maxRetries === 0) {\n throw error; // don't wrap the error when retries are disabled\n }\n\n const errorMessage = getErrorMessage(error);\n const newErrors = [...errors, error];\n const tryNumber = newErrors.length;\n\n if (tryNumber > maxRetries) {\n throw new RetryError({\n message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,\n reason: 'maxRetriesExceeded',\n errors: newErrors,\n });\n }\n\n if (\n error instanceof Error &&\n APICallError.isInstance(error) &&\n error.isRetryable === true &&\n tryNumber <= maxRetries\n ) {\n await delay(\n getRetryDelayInMs({\n error,\n exponentialBackoffDelay: delayInMs,\n }),\n { abortSignal },\n );\n\n return await _retryWithExponentialBackoff(\n f,\n {\n maxRetries,\n delayInMs: backoffFactor * delayInMs,\n backoffFactor,\n abortSignal,\n },\n newErrors,\n );\n }\n\n if (tryNumber === 1) {\n throw error; // don't wrap the error when a non-retryable error occurs on the first try\n }\n\n throw new RetryError({\n message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,\n reason: 'errorNotRetryable',\n errors: newErrors,\n });\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_RetryError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport type RetryErrorReason =\n | 'maxRetriesExceeded'\n | 'errorNotRetryable'\n | 'abort';\n\nexport class RetryError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n // note: property order determines debugging output\n readonly reason: RetryErrorReason;\n readonly lastError: unknown;\n readonly errors: Array<unknown>;\n\n constructor({\n message,\n reason,\n errors,\n }: {\n message: string;\n reason: RetryErrorReason;\n errors: Array<unknown>;\n }) {\n super({ name, message });\n\n this.reason = reason;\n this.errors = errors;\n\n // separate our last error to make debugging via log easier:\n this.lastError = errors[errors.length - 1];\n }\n\n static isInstance(error: unknown): error is RetryError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { InvalidArgumentError } from '../error/invalid-argument-error';\nimport {\n RetryFunction,\n retryWithExponentialBackoffRespectingRetryHeaders,\n} from '../util/retry-with-exponential-backoff';\n\n/**\n * Validate and prepare retries.\n */\nexport function prepareRetries({\n maxRetries,\n abortSignal,\n}: {\n maxRetries: number | undefined;\n abortSignal: AbortSignal | undefined;\n}): {\n maxRetries: number;\n retry: RetryFunction;\n} {\n if (maxRetries != null) {\n if (!Number.isInteger(maxRetries)) {\n throw new InvalidArgumentError({\n parameter: 'maxRetries',\n value: maxRetries,\n message: 'maxRetries must be an integer',\n });\n }\n\n if (maxRetries < 0) {\n throw new InvalidArgumentError({\n parameter: 'maxRetries',\n value: maxRetries,\n message: 'maxRetries must be >= 0',\n });\n }\n }\n\n const maxRetriesResult = maxRetries ?? 2;\n\n return {\n maxRetries: maxRetriesResult,\n retry: retryWithExponentialBackoffRespectingRetryHeaders({\n maxRetries: maxRetriesResult,\n abortSignal,\n }),\n };\n}\n","import {\n ImageModelV4Usage,\n JSONObject,\n LanguageModelV4Usage,\n} from '@ai-sdk/provider';\n\n/**\n * Represents the number of tokens used in a prompt and completion.\n */\nexport type LanguageModelUsage = {\n /**\n * The total number of input (prompt) tokens used.\n */\n inputTokens: number | undefined;\n\n /**\n * Detailed information about the input tokens.\n */\n inputTokenDetails: {\n /**\n * The number of non-cached input (prompt) tokens used.\n */\n noCacheTokens: number | undefined;\n\n /**\n * The number of cached input (prompt) tokens read.\n */\n cacheReadTokens: number | undefined;\n\n /**\n * The number of cached input (prompt) tokens written.\n */\n cacheWriteTokens: number | undefined;\n };\n\n /**\n * The number of total output (completion) tokens used.\n */\n outputTokens: number | undefined;\n\n /**\n * Detailed information about the output tokens.\n */\n outputTokenDetails: {\n /**\n * The number of text tokens used.\n */\n textTokens: number | undefined;\n\n /**\n * The number of reasoning tokens used.\n */\n reasoningTokens: number | undefined;\n };\n\n /**\n * The total number of tokens used.\n */\n totalTokens: number | undefined;\n\n /**\n * @deprecated Use outputTokenDetails.reasoningTokens instead.\n */\n reasoningTokens?: number | undefined;\n\n /**\n * @deprecated Use inputTokenDetails.cacheReadTokens instead.\n */\n cachedInputTokens?: number | undefined;\n\n /**\n * Raw usage information from the provider.\n *\n * This is the usage information in the shape that the provider returns.\n * It can include additional information that is not part of the standard usage information.\n */\n raw?: JSONObject;\n};\n\n/**\n * Represents the number of tokens used in an embedding.\n */\n// TODO replace with EmbeddingModelV4Usage once available in @ai-sdk/provider\nexport type EmbeddingModelUsage = {\n /**\n * The number of tokens used in the embedding.\n */\n tokens: number;\n};\n\nexport function asLanguageModelUsage(\n usage: LanguageModelV4Usage,\n): LanguageModelUsage {\n return {\n inputTokens: usage.inputTokens.total,\n inputTokenDetails: {\n noCacheTokens: usage.inputTokens.noCache,\n cacheReadTokens: usage.inputTokens.cacheRead,\n cacheWriteTokens: usage.inputTokens.cacheWrite,\n },\n outputTokens: usage.outputTokens.total,\n outputTokenDetails: {\n textTokens: usage.outputTokens.text,\n reasoningTokens: usage.outputTokens.reasoning,\n },\n totalTokens: addTokenCounts(\n usage.inputTokens.total,\n usage.outputTokens.total,\n ),\n raw: usage.raw,\n reasoningTokens: usage.outputTokens.reasoning,\n cachedInputTokens: usage.inputTokens.cacheRead,\n };\n}\n\nexport function createNullLanguageModelUsage(): LanguageModelUsage {\n return {\n inputTokens: undefined,\n inputTokenDetails: {\n noCacheTokens: undefined,\n cacheReadTokens: undefined,\n cacheWriteTokens: undefined,\n },\n outputTokens: undefined,\n outputTokenDetails: {\n textTokens: undefined,\n reasoningTokens: undefined,\n },\n totalTokens: undefined,\n raw: undefined,\n };\n}\n\nexport function addLanguageModelUsage(\n usage1: LanguageModelUsage,\n usage2: LanguageModelUsage,\n): LanguageModelUsage {\n return {\n inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),\n inputTokenDetails: {\n noCacheTokens: addTokenCounts(\n usage1.inputTokenDetails?.noCacheTokens,\n usage2.inputTokenDetails?.noCacheTokens,\n ),\n cacheReadTokens: addTokenCounts(\n usage1.inputTokenDetails?.cacheReadTokens,\n usage2.inputTokenDetails?.cacheReadTokens,\n ),\n cacheWriteTokens: addTokenCounts(\n usage1.inputTokenDetails?.cacheWriteTokens,\n usage2.inputTokenDetails?.cacheWriteTokens,\n ),\n },\n outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),\n outputTokenDetails: {\n textTokens: addTokenCounts(\n usage1.outputTokenDetails?.textTokens,\n usage2.outputTokenDetails?.textTokens,\n ),\n reasoningTokens: addTokenCounts(\n usage1.outputTokenDetails?.reasoningTokens,\n usage2.outputTokenDetails?.reasoningTokens,\n ),\n },\n totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),\n reasoningTokens: addTokenCounts(\n usage1.reasoningTokens,\n usage2.reasoningTokens,\n ),\n cachedInputTokens: addTokenCounts(\n usage1.cachedInputTokens,\n usage2.cachedInputTokens,\n ),\n };\n}\n\nfunction addTokenCounts(\n tokenCount1: number | undefined,\n tokenCount2: number | undefined,\n): number | undefined {\n return tokenCount1 == null && tokenCount2 == null\n ? undefined\n : (tokenCount1 ?? 0) + (tokenCount2 ?? 0);\n}\n\n/**\n * Usage information for an image model call.\n */\nexport type ImageModelUsage = ImageModelV4Usage;\n\nexport function addImageModelUsage(\n usage1: ImageModelUsage,\n usage2: ImageModelUsage,\n): ImageModelUsage {\n return {\n inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),\n outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),\n totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens),\n };\n}\n","import { gateway } from '@ai-sdk/gateway';\nimport {\n EmbeddingModelV4,\n Experimental_VideoModelV4,\n ImageModelV4,\n LanguageModelV4,\n ProviderV4,\n RerankingModelV4,\n SpeechModelV4,\n TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport { UnsupportedModelVersionError } from '../error';\nimport { EmbeddingModel } from '../types/embedding-model';\nimport { LanguageModel } from '../types/language-model';\nimport { SpeechModel } from '../types/speech-model';\nimport { TranscriptionModel } from '../types/transcription-model';\nimport { asEmbeddingModelV4 } from './as-embedding-model-v4';\nimport { asImageModelV4 } from './as-image-model-v4';\nimport { asLanguageModelV4 } from './as-language-model-v4';\nimport { asRerankingModelV4 } from './as-reranking-model-v4';\nimport { asSpeechModelV4 } from './as-speech-model-v4';\nimport { asTranscriptionModelV4 } from './as-transcription-model-v4';\nimport { asVideoModelV4 } from './as-video-model-v4';\nimport { asProviderV4 } from './as-provider-v4';\nimport { ImageModel } from '../types/image-model';\nimport { RerankingModel } from '../types/reranking-model';\nimport { VideoModel } from '../types/video-model';\n\nexport function resolveLanguageModel(model: LanguageModel): LanguageModelV4 {\n if (typeof model === 'string') {\n return getGlobalProvider().languageModel(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asLanguageModelV4(model);\n}\n\nexport function resolveEmbeddingModel(model: EmbeddingModel): EmbeddingModelV4 {\n if (typeof model === 'string') {\n return getGlobalProvider().embeddingModel(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asEmbeddingModelV4(model);\n}\n\nexport function resolveTranscriptionModel(\n model: TranscriptionModel,\n): TranscriptionModelV4 | undefined {\n if (typeof model === 'string') {\n return getGlobalProvider().transcriptionModel?.(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asTranscriptionModelV4(model);\n}\n\nexport function resolveSpeechModel(\n model: SpeechModel,\n): SpeechModelV4 | undefined {\n if (typeof model === 'string') {\n return getGlobalProvider().speechModel?.(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asSpeechModelV4(model);\n}\n\nexport function resolveImageModel(model: ImageModel): ImageModelV4 {\n if (typeof model === 'string') {\n return getGlobalProvider().imageModel(model);\n }\n\n if (!['v4', 'v3', 'v2'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asImageModelV4(model);\n}\n\nexport function resolveVideoModel(\n model: VideoModel,\n): Experimental_VideoModelV4 {\n if (typeof model === 'string') {\n // Use raw global provider because videoModel is experimental\n // and not part of the ProviderV4 interface\n const provider = globalThis.AI_SDK_DEFAULT_PROVIDER ?? gateway;\n // TODO AI SDK v7\n // @ts-expect-error - videoModel support is experimental\n const videoModel = provider.videoModel;\n\n if (!videoModel) {\n throw new Error(\n 'The default provider does not support video models. ' +\n 'Please use a Experimental_VideoModelV4 object from a provider (e.g., vertex.video(\"model-id\")).',\n );\n }\n\n return videoModel(model);\n }\n\n if (!['v4', 'v3'].includes(model.specificationVersion)) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asVideoModelV4(model);\n}\n\nexport function resolveRerankingModel(model: RerankingModel): RerankingModelV4 {\n if (typeof model === 'string') {\n const provider = getGlobalProvider();\n const rerankingModel = provider.rerankingModel;\n\n if (!rerankingModel) {\n throw new Error(\n 'The default provider does not support reranking models. ' +\n 'Please use a RerankingModel object from a provider (e.g., gateway.rerankingModel(\"model-id\")).',\n );\n }\n\n return rerankingModel(model);\n }\n\n if (\n model.specificationVersion !== 'v4' &&\n model.specificationVersion !== 'v3'\n ) {\n const unsupportedModel: any = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId,\n });\n }\n\n return asRerankingModelV4(model);\n}\n\nfunction getGlobalProvider(): ProviderV4 {\n const provider = globalThis.AI_SDK_DEFAULT_PROVIDER ?? gateway;\n return asProviderV4(provider);\n}\n","export {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n LoadSettingError,\n NoContentGeneratedError,\n NoSuchModelError,\n NoSuchProviderReferenceError,\n TooManyEmbeddingValuesForCallError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport { InvalidArgumentError } from './invalid-argument-error';\nexport { InvalidStreamPartError } from './invalid-stream-part-error';\nexport { InvalidToolApprovalError } from './invalid-tool-approval-error';\nexport { InvalidToolInputError } from './invalid-tool-input-error';\nexport { ToolCallNotFoundForApprovalError } from './tool-call-not-found-for-approval-error';\nexport { MissingToolResultsError } from './missing-tool-result-error';\nexport { NoImageGeneratedError } from './no-image-generated-error';\nexport { NoObjectGeneratedError } from './no-object-generated-error';\nexport { NoOutputGeneratedError } from './no-output-generated-error';\nexport { NoSpeechGeneratedError } from './no-speech-generated-error';\nexport { NoTranscriptGeneratedError } from './no-transcript-generated-error';\nexport { NoVideoGeneratedError } from './no-video-generated-error';\nexport { NoSuchToolError } from './no-such-tool-error';\nexport { ToolCallRepairError } from './tool-call-repair-error';\nexport { UnsupportedModelVersionError } from './unsupported-model-version-error';\nexport { UIMessageStreamError } from './ui-message-stream-error';\nexport { InvalidDataContentError } from '../prompt/invalid-data-content-error';\nexport { InvalidMessageRoleError } from '../prompt/invalid-message-role-error';\nexport { MessageConversionError } from '../prompt/message-conversion-error';\nexport { DownloadError } from '@ai-sdk/provider-utils';\nexport { RetryError } from '../util/retry-error';\n","import { AISDKError } from '@ai-sdk/provider';\n\n/**\n * Error that is thrown when a model with an unsupported version is used.\n */\nexport class UnsupportedModelVersionError extends AISDKError {\n readonly version: string;\n readonly provider: string;\n readonly modelId: string;\n\n constructor(options: { version: string; provider: string; modelId: string }) {\n super({\n name: 'AI_UnsupportedModelVersionError',\n message:\n `Unsupported model version ${options.version} for provider \"${options.provider}\" and model \"${options.modelId}\". ` +\n `AI SDK 5 only supports models that implement specification version \"v2\".`,\n });\n\n this.version = options.version;\n this.provider = options.provider;\n this.modelId = options.modelId;\n }\n}\n","import { logWarnings } from '../logger/log-warnings';\n\nexport function logV2CompatibilityWarning({\n provider,\n modelId,\n}: {\n provider: string;\n modelId: string;\n}): void {\n logWarnings({\n warnings: [\n {\n type: 'compatibility',\n feature: 'specificationVersion',\n details: `Using v2 specification compatibility mode. Some features may not be available.`,\n },\n ],\n provider,\n model: modelId,\n });\n}\n","import { EmbeddingModelV2, EmbeddingModelV3 } from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asEmbeddingModelV3(\n model: EmbeddingModelV2<string> | EmbeddingModelV3,\n): EmbeddingModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof EmbeddingModelV2<string>) {\n if (prop === 'specificationVersion') return 'v3';\n return target[prop];\n },\n }) as unknown as EmbeddingModelV3;\n}\n","import {\n EmbeddingModelV2,\n EmbeddingModelV3,\n EmbeddingModelV4,\n} from '@ai-sdk/provider';\nimport { asEmbeddingModelV3 } from './as-embedding-model-v3';\n\nexport function asEmbeddingModelV4(\n model: EmbeddingModelV2<string> | EmbeddingModelV3 | EmbeddingModelV4,\n): EmbeddingModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asEmbeddingModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof EmbeddingModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as EmbeddingModelV4;\n}\n","import { ImageModelV2, ImageModelV3 } from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asImageModelV3(\n model: ImageModelV2 | ImageModelV3,\n): ImageModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof ImageModelV2) {\n if (prop === 'specificationVersion') return 'v3';\n return target[prop];\n },\n }) as unknown as ImageModelV3;\n}\n","import { ImageModelV2, ImageModelV3, ImageModelV4 } from '@ai-sdk/provider';\nimport { asImageModelV3 } from './as-image-model-v3';\n\nexport function asImageModelV4(\n model: ImageModelV2 | ImageModelV3 | ImageModelV4,\n): ImageModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asImageModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof ImageModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as ImageModelV4;\n}\n","import {\n LanguageModelV2,\n LanguageModelV2FinishReason,\n LanguageModelV2StreamPart,\n LanguageModelV2Usage,\n LanguageModelV3,\n LanguageModelV3FinishReason,\n LanguageModelV3StreamPart,\n LanguageModelV3Usage,\n} from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asLanguageModelV3(\n model: LanguageModelV2 | LanguageModelV3,\n): LanguageModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof LanguageModelV2) {\n switch (prop) {\n case 'specificationVersion':\n return 'v3';\n case 'doGenerate':\n return async (...args: Parameters<LanguageModelV2['doGenerate']>) => {\n const result = await target.doGenerate(...args);\n return {\n ...result,\n finishReason: convertV2FinishReasonToV3(result.finishReason),\n usage: convertV2UsageToV3(result.usage),\n };\n };\n case 'doStream':\n return async (...args: Parameters<LanguageModelV2['doStream']>) => {\n const result = await target.doStream(...args);\n return {\n ...result,\n stream: convertV2StreamToV3(result.stream),\n };\n };\n default:\n return target[prop];\n }\n },\n }) as unknown as LanguageModelV3;\n}\n\nfunction convertV2StreamToV3(\n stream: ReadableStream<LanguageModelV2StreamPart>,\n): ReadableStream<LanguageModelV3StreamPart> {\n return stream.pipeThrough(\n new TransformStream<LanguageModelV2StreamPart, LanguageModelV3StreamPart>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'finish':\n controller.enqueue({\n ...chunk,\n finishReason: convertV2FinishReasonToV3(chunk.finishReason),\n usage: convertV2UsageToV3(chunk.usage),\n });\n break;\n default:\n // TODO: AI SDK 6 - no casting (stream parts need to be mapped)\n controller.enqueue(chunk as LanguageModelV3StreamPart);\n break;\n }\n },\n }),\n );\n}\n\nfunction convertV2FinishReasonToV3(\n finishReason: LanguageModelV2FinishReason,\n): LanguageModelV3FinishReason {\n return {\n unified: finishReason === 'unknown' ? 'other' : finishReason,\n raw: undefined,\n };\n}\n\nfunction convertV2UsageToV3(usage: LanguageModelV2Usage): LanguageModelV3Usage {\n return {\n inputTokens: {\n total: usage.inputTokens,\n noCache: undefined,\n cacheRead: usage.cachedInputTokens,\n cacheWrite: undefined,\n },\n outputTokens: {\n total: usage.outputTokens,\n text: undefined,\n reasoning: usage.reasoningTokens,\n },\n };\n}\n","import {\n LanguageModelV2,\n LanguageModelV3,\n LanguageModelV4,\n} from '@ai-sdk/provider';\nimport { asLanguageModelV3 } from './as-language-model-v3';\n\nexport function asLanguageModelV4(\n model: LanguageModelV2 | LanguageModelV3 | LanguageModelV4,\n): LanguageModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asLanguageModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof LanguageModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as LanguageModelV4;\n}\n","import { RerankingModelV3, RerankingModelV4 } from '@ai-sdk/provider';\n\nexport function asRerankingModelV4(\n model: RerankingModelV3 | RerankingModelV4,\n): RerankingModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n return new Proxy(model, {\n get(target, prop: keyof RerankingModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as RerankingModelV4;\n}\n","import { SpeechModelV2, SpeechModelV3 } from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asSpeechModelV3(\n model: SpeechModelV3 | SpeechModelV2,\n): SpeechModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof SpeechModelV2) {\n if (prop === 'specificationVersion') return 'v3';\n return target[prop];\n },\n }) as unknown as SpeechModelV3;\n}\n","import { SpeechModelV2, SpeechModelV3, SpeechModelV4 } from '@ai-sdk/provider';\nimport { asSpeechModelV3 } from './as-speech-model-v3';\n\nexport function asSpeechModelV4(\n model: SpeechModelV2 | SpeechModelV3 | SpeechModelV4,\n): SpeechModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asSpeechModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof SpeechModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as SpeechModelV4;\n}\n","import { TranscriptionModelV2, TranscriptionModelV3 } from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asTranscriptionModelV3(\n model: TranscriptionModelV3 | TranscriptionModelV2,\n): TranscriptionModelV3 {\n if (model.specificationVersion === 'v3') {\n return model;\n }\n\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId,\n });\n\n // TODO this could break, we need to properly map v2 to v3\n // and support all relevant v3 properties:\n return new Proxy(model, {\n get(target, prop: keyof TranscriptionModelV2) {\n if (prop === 'specificationVersion') return 'v3';\n return target[prop];\n },\n }) as unknown as TranscriptionModelV3;\n}\n","import {\n TranscriptionModelV2,\n TranscriptionModelV3,\n TranscriptionModelV4,\n} from '@ai-sdk/provider';\nimport { asTranscriptionModelV3 } from './as-transcription-model-v3';\n\nexport function asTranscriptionModelV4(\n model: TranscriptionModelV2 | TranscriptionModelV3 | TranscriptionModelV4,\n): TranscriptionModelV4 {\n if (model.specificationVersion === 'v4') {\n return model;\n }\n\n // first convert v2 to v3, then proxy v3 as v4:\n const v3Model =\n model.specificationVersion === 'v2' ? asTranscriptionModelV3(model) : model;\n\n return new Proxy(v3Model, {\n get(target, prop: keyof TranscriptionModelV3) {\n if (prop === 'specificationVersion') return 'v4';\n return target[prop];\n },\n }) as unknown as TranscriptionModelV4;\n}\n","import { ProviderV2, ProviderV3 } from '@ai-sdk/provider';\nimport { asEmbeddingModelV3 } from './as-embedding-model-v3';\nimport { asImageModelV3 } from './as-image-model-v3';\nimport { asLanguageModelV3 } from './as-language-model-v3';\nimport { asTranscriptionModelV3 } from './as-transcription-model-v3';\nimport { asSpeechModelV3 } from './as-speech-model-v3';\n\nexport function asProviderV3(provider: ProviderV2 | ProviderV3): ProviderV3 {\n if (\n 'specificationVersion' in provider &&\n provider.specificationVersion === 'v3'\n ) {\n return provider;\n }\n\n // v3 providers have already been returned\n const v2Provider: ProviderV2 = provider as ProviderV2;\n\n return {\n specificationVersion: 'v3',\n languageModel: (modelId: string) =>\n asLanguageModelV3(v2Provider.languageModel(modelId)),\n embeddingModel: (modelId: string) =>\n asEmbeddingModelV3(v2Provider.textEmbeddingModel(modelId)),\n imageModel: (modelId: string) =>\n asImageModelV3(v2Provider.imageModel(modelId)),\n transcriptionModel: v2Provider.transcriptionModel\n ? (modelId: string) =>\n asTranscriptionModelV3(v2Provider.transcriptionModel!(modelId))\n : undefined,\n speechModel: v2Provider.speechModel\n ? (modelId: string) => asSpeechModelV3(v2Provider.speechModel!(modelId))\n : undefined,\n rerankingModel: undefined, // v2 providers don't have reranking models\n };\n}\n","import { ProviderV2, ProviderV3, ProviderV4 } from '@ai-sdk/provider';\nimport { asProviderV3 } from './as-provider-v3';\nimport { asEmbeddingModelV4 } from './as-embedding-model-v4';\nimport { asImageModelV4 } from './as-image-model-v4';\nimport { asLanguageModelV4 } from './as-language-model-v4';\nimport { asRerankingModelV4 } from './as-reranking-model-v4';\nimport { asTranscriptionModelV4 } from './as-transcription-model-v4';\nimport { asSpeechModelV4 } from './as-speech-model-v4';\n\nexport function asProviderV4(\n provider: ProviderV2 | ProviderV3 | ProviderV4,\n): ProviderV4 {\n if (\n 'specificationVersion' in provider &&\n provider.specificationVersion === 'v4'\n ) {\n return provider;\n }\n\n // first ensure we have at least a v3 provider:\n const v3Provider: ProviderV3 =\n !('specificationVersion' in provider) ||\n provider.specificationVersion !== 'v3'\n ? asProviderV3(provider as ProviderV2)\n : provider;\n\n return {\n specificationVersion: 'v4',\n languageModel: (modelId: string) =>\n asLanguageModelV4(v3Provider.languageModel(modelId)),\n embeddingModel: (modelId: string) =>\n asEmbeddingModelV4(v3Provider.embeddingModel(modelId)),\n imageModel: (modelId: string) =>\n asImageModelV4(v3Provider.imageModel(modelId)),\n transcriptionModel: v3Provider.transcriptionModel\n ? (modelId: string) =>\n asTranscriptionModelV4(v3Provider.transcriptionModel!(modelId))\n : undefined,\n speechModel: v3Provider.speechModel\n ? (modelId: string) => asSpeechModelV4(v3Provider.speechModel!(modelId))\n : undefined,\n rerankingModel: v3Provider.rerankingModel\n ? (modelId: string) =>\n asRerankingModelV4(v3Provider.rerankingModel!(modelId))\n : undefined,\n };\n}\n","import { filterNullable } from '@ai-sdk/provider-utils';\n\n/**\n * Merges multiple abort sources into a single `AbortSignal`.\n * The returned signal will abort when any input signal aborts or when any\n * numeric timeout elapses, using the reason from the first source to abort.\n *\n * @param signals - Abort signals or timeout durations in milliseconds.\n * `null` and `undefined` values are ignored.\n * @returns An `AbortSignal` that aborts when any valid source aborts,\n * or `undefined` if no valid sources are provided.\n */\nexport function mergeAbortSignals(\n ...signals: (AbortSignal | null | undefined | number)[]\n): AbortSignal | undefined {\n const validSignals = filterNullable(...signals).map(signal =>\n signal instanceof AbortSignal ? signal : AbortSignal.timeout(signal),\n );\n\n return validSignals.length === 0\n ? undefined\n : validSignals.length === 1\n ? validSignals[0]\n : AbortSignal.any(validSignals);\n}\n","import type { Callback } from '../util/callback';\n\n/**\n * Creates an async callback that invokes the provided callbacks in parallel.\n * Undefined callbacks are skipped, and thrown or rejected callback errors are\n * ignored.\n *\n * @param callbacks The callbacks to invoke for each event.\n * @returns A callback that forwards each event to all callbacks and waits for\n * them to settle.\n */\nexport function mergeCallbacks<EVENT>(\n ...callbacks: Array<Callback<EVENT> | undefined>\n): Callback<EVENT> {\n return async (event: EVENT) => {\n await Promise.allSettled(\n callbacks.map(async callback => {\n await callback?.(event);\n }),\n );\n };\n}\n"],"mappings":"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","names":["_a","_a","download","convertBase64ToUint8Array","_a","AISDKError","AISDKError","name","marker","symbol","_a","download","_a","name","asArray","z","z","z","z","z","z","z","z","asArray","z","AISDKError","name","marker","symbol","_a","AISDKError","name","marker","symbol","_a","AISDKError","APICallError","InvalidPromptError","AISDKError","DownloadError","_a"]}
|