ai 5.0.0-beta.2 → 5.0.0-beta.20

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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/bin/ai.ts","../../src/generate-text/stream-text.ts","../../src/error/no-output-specified-error.ts","../../src/util/prepare-headers.ts","../../src/text-stream/create-text-stream-response.ts","../../src/util/write-to-server-response.ts","../../src/text-stream/pipe-text-stream-to-response.ts","../../src/ui-message-stream/json-to-sse-transform-stream.ts","../../src/ui-message-stream/ui-message-stream-headers.ts","../../src/ui-message-stream/create-ui-message-stream-response.ts","../../src/ui-message-stream/get-response-ui-message-id.ts","../../src/ui/process-ui-message-stream.ts","../../src/ui-message-stream/ui-message-chunks.ts","../../src/util/merge-objects.ts","../../src/util/parse-partial-json.ts","../../src/util/fix-json.ts","../../src/ui/ui-messages.ts","../../src/ui-message-stream/handle-ui-message-stream-finish.ts","../../src/ui-message-stream/pipe-ui-message-stream-to-response.ts","../../src/util/as-array.ts","../../src/util/async-iterable-stream.ts","../../src/util/consume-stream.ts","../../src/util/create-resolvable-promise.ts","../../src/util/create-stitchable-stream.ts","../../src/util/delayed-promise.ts","../../src/util/now.ts","../../src/error/invalid-argument-error.ts","../../src/util/retry-with-exponential-backoff.ts","../../src/util/retry-error.ts","../../src/util/prepare-retries.ts","../../src/prompt/convert-to-language-model-prompt.ts","../../src/util/detect-media-type.ts","../../src/util/download-error.ts","../../src/util/download.ts","../../src/prompt/data-content.ts","../../src/prompt/split-data-url.ts","../../src/prompt/invalid-message-role-error.ts","../../src/prompt/prepare-call-settings.ts","../../src/prompt/prepare-tools-and-tool-choice.ts","../../src/util/is-non-empty-object.ts","../../src/prompt/resolve-language-model.ts","../../src/error/index.ts","../../src/error/invalid-tool-input-error.ts","../../src/error/no-such-tool-error.ts","../../src/error/tool-call-repair-error.ts","../../src/error/unsupported-model-version-error.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/prompt/wrap-gateway-error.ts","../../src/telemetry/assemble-operation-name.ts","../../src/telemetry/get-base-telemetry-attributes.ts","../../src/telemetry/get-tracer.ts","../../src/telemetry/noop-tracer.ts","../../src/telemetry/record-span.ts","../../src/telemetry/select-telemetry-attributes.ts","../../src/telemetry/stringify-for-telemetry.ts","../../src/types/usage.ts","../../src/generate-text/run-tools-transformation.ts","../../src/generate-text/generated-file.ts","../../src/generate-text/parse-tool-call.ts","../../src/generate-text/step-result.ts","../../src/generate-text/stop-condition.ts","../../src/prompt/create-tool-model-output.ts","../../src/generate-text/to-response-messages.ts"],"sourcesContent":["import { streamText } from '../generate-text/stream-text';\nimport { readFileSync, existsSync } from 'fs';\nimport { resolve } from 'path';\nimport { gateway } from '@ai-sdk/gateway';\n\ninterface FileAttachment {\n name: string;\n content: string;\n mediaType?: string;\n}\n\ninterface CLIOptions {\n model: string;\n files: string[];\n system?: string;\n help: boolean;\n version: boolean;\n verbose: boolean;\n prompt?: string;\n}\n\nexport function isStdinAvailable(): boolean {\n return !process.stdin.isTTY;\n}\n\nasync function readStdin(): Promise<string> {\n return new Promise(resolve => {\n let data = '';\n process.stdin.setEncoding('utf8');\n process.stdin.on('data', chunk => {\n data += chunk;\n });\n process.stdin.on('end', () => {\n resolve(data.trim());\n });\n });\n}\n\nexport function getMediaType(filePath: string): string {\n const ext = filePath.split('.').pop()?.toLowerCase();\n const mimeTypes: Record<string, string> = {\n js: 'application/javascript',\n ts: 'application/typescript',\n jsx: 'text/jsx',\n tsx: 'text/tsx',\n json: 'application/json',\n md: 'text/markdown',\n txt: 'text/plain',\n py: 'text/x-python',\n html: 'text/html',\n css: 'text/css',\n xml: 'application/xml',\n yaml: 'application/yaml',\n yml: 'application/yaml',\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 bmp: 'image/bmp',\n tiff: 'image/tiff',\n tif: 'image/tiff',\n };\n\n return mimeTypes[ext || ''] || 'text/plain';\n}\n\nexport function readFileContent(filePath: string): FileAttachment {\n const absolutePath = resolve(filePath);\n\n if (!existsSync(absolutePath)) {\n throw new Error(`File not found: ${filePath}`);\n }\n\n const mediaType = getMediaType(filePath);\n const isImage = mediaType.startsWith('image/');\n\n let content: string;\n if (isImage) {\n const buffer = readFileSync(absolutePath);\n content = `data:${mediaType};base64,${buffer.toString('base64')}`;\n } else {\n content = readFileSync(absolutePath, 'utf8');\n }\n\n return {\n name: filePath,\n content,\n mediaType,\n };\n}\n\nexport function parseArgs(): CLIOptions {\n const args = process.argv.slice(2);\n\n const options: CLIOptions = {\n model: process.env.AI_MODEL || 'openai/gpt-4',\n files: [],\n help: false,\n version: false,\n verbose: process.env.AI_VERBOSE === 'true',\n system: process.env.AI_SYSTEM,\n };\n\n const promptArgs: string[] = [];\n let i = 0;\n\n while (i < args.length) {\n const arg = args[i];\n\n switch (arg) {\n case '-h':\n case '--help':\n options.help = true;\n break;\n case '-V':\n case '--version':\n options.version = true;\n break;\n case '-v':\n case '--verbose':\n options.verbose = true;\n break;\n case '-m':\n case '--model':\n if (i + 1 < args.length) {\n options.model = args[i + 1];\n i++;\n } else {\n throw new Error('Model option requires a value');\n }\n break;\n case '-f':\n case '--file':\n if (i + 1 < args.length) {\n options.files.push(args[i + 1]);\n i++;\n } else {\n throw new Error('File option requires a value');\n }\n break;\n case '-s':\n case '--system':\n if (i + 1 < args.length) {\n options.system = args[i + 1];\n i++;\n } else {\n throw new Error('System option requires a value');\n }\n break;\n default:\n if (arg.startsWith('-')) {\n throw new Error(`Unknown option: ${arg}`);\n } else {\n promptArgs.push(arg);\n }\n }\n i++;\n }\n\n if (promptArgs.length > 0) {\n options.prompt = promptArgs.join(' ');\n }\n\n return options;\n}\n\nexport function showHelp(): void {\n console.log(`Usage: ai [options] [prompt]\n\nAI CLI - Stream text generation from various AI models\n\nArguments:\n prompt The prompt to send to the AI model (optional if using stdin)\n\nOptions:\n -m, --model <model> Model to use. Format: provider/model or just model name.\n Examples: openai/gpt-4o, anthropic/claude-3-5-sonnet-20241022\n (default: \"openai/gpt-4\")\n -f, --file <file> Attach a file to the prompt (can be used multiple times)\n -s, --system <message> System message to set context\n -v, --verbose Show detailed information (model, usage, etc.)\n -h, --help Display help for command\n -V, --version Output the version number\n\nEnvironment Variables:\n - AI_MODEL: Default model to use\n - AI_SYSTEM: Default system message \n - AI_VERBOSE: Set to 'true' to enable verbose output\n\nAuthentication (choose one):\n - VERCEL_OIDC_TOKEN: Vercel OIDC token (for Vercel projects)\n - AI_GATEWAY_API_KEY: AI Gateway API key\n\nSetting Environment Variables:\n # Option 1: Export in current session\n export AI_GATEWAY_API_KEY=\"your-key-here\"\n export AI_MODEL=\"anthropic/claude-3-5-sonnet-20241022\"\n\n # Option 2: Inline for single command\n AI_GATEWAY_API_KEY=\"your-key\" ai \"Hello world\"\n\n # Option 3: Add to shell profile (~/.bashrc, ~/.zshrc)\n echo 'export AI_GATEWAY_API_KEY=\"your-key\"' >> ~/.bashrc\n\nExamples:\n npx ai \"Hello, world!\"\n npx ai \"Write a poem\" -m anthropic/claude-3-5-sonnet-20241022\n npx ai \"Explain quantum physics\" -m groq/llama-3.1-8b-instant\n npx ai \"Explain this code\" -f script.js -f README.md\n echo \"What is life?\" | npx ai\n cat file.txt | npx ai \"Summarize this content\"\n npx ai -f package.json \"What dependencies does this project have?\"\n\nUnix-style piping:\n echo \"Hello world\" | npx ai \"Translate to French\"\n cat README.md | npx ai \"Summarize this\"\n curl -s https://api.github.com/repos/vercel/ai | npx ai \"What is this repository about?\"\n\nAuthentication Setup:\n This CLI uses the Vercel AI Gateway. You need ONE of these for authentication:\n\n OIDC Token (for Vercel projects):\n - Automatically available in Vercel deployments \n - For local development: run 'vercel env pull' or use 'vercel dev'\n \n API Key (for any environment):\n - Get your key from the AI Gateway dashboard\n - Set: export AI_GATEWAY_API_KEY=\"your-key-here\"\n \n The gateway supports OpenAI, Anthropic, Google, Groq, and more providers.`);\n}\n\nexport function showVersion() {\n console.log('1.0.0');\n}\n\nexport function resolveModel(modelString: string) {\n return gateway.languageModel(modelString);\n}\n\nexport function formatAttachedFiles(files: FileAttachment[]): string {\n if (files.length === 0) return '';\n\n const textFiles = files.filter(f => !f.mediaType?.startsWith('image/'));\n\n if (textFiles.length === 0) return '';\n\n let result = '\\n\\nAttached files:\\n';\n\n for (const file of textFiles) {\n result += `\\n--- ${file.name} ---\\n`;\n result += file.content;\n result += '\\n';\n }\n\n return result;\n}\n\nasync function main(): Promise<void> {\n try {\n const options = parseArgs();\n\n if (options.help) {\n showHelp();\n return;\n }\n\n if (options.version) {\n showVersion();\n return;\n }\n\n let prompt = options.prompt || '';\n\n if (isStdinAvailable()) {\n const stdinContent = await readStdin();\n if (stdinContent) {\n prompt = prompt ? `${stdinContent}\\n\\n${prompt}` : stdinContent;\n }\n }\n\n if (!prompt.trim()) {\n console.error(\n 'Error: No prompt provided. Use --help for usage information.',\n );\n process.exit(1);\n }\n\n const attachedFiles: FileAttachment[] = [];\n for (const filePath of options.files) {\n try {\n const file = readFileContent(filePath);\n attachedFiles.push(file);\n } catch (error) {\n console.error(\n `Error reading file ${filePath}: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n process.exit(1);\n }\n }\n\n const textPrompt = prompt + formatAttachedFiles(attachedFiles);\n const imageFiles = attachedFiles.filter(f =>\n f.mediaType?.startsWith('image/'),\n );\n\n if (imageFiles.length > 0 && options.model === 'openai/gpt-4') {\n options.model = 'openai/gpt-4o';\n }\n\n if (options.verbose) {\n console.error(`Using model: ${options.model}`);\n if (attachedFiles.length > 0) {\n console.error(\n `Attached files: ${attachedFiles.map(f => f.name).join(', ')}`,\n );\n }\n console.error('');\n }\n\n const model = resolveModel(options.model);\n\n let messages;\n if (imageFiles.length > 0) {\n const content: Array<\n { type: 'text'; text: string } | { type: 'image'; image: string }\n > = [{ type: 'text' as const, text: textPrompt }];\n\n for (const img of imageFiles) {\n content.push({\n type: 'image' as const,\n image: img.content,\n });\n }\n\n messages = [{ role: 'user' as const, content }];\n }\n\n const result = await streamText(\n messages\n ? {\n model,\n messages,\n system: options.system,\n }\n : {\n model,\n prompt: textPrompt,\n system: options.system,\n },\n );\n\n for await (const chunk of result.textStream) {\n process.stdout.write(chunk);\n }\n\n process.stdout.write('\\n');\n\n if (options.verbose) {\n const usage = await result.usage;\n if (usage) {\n console.error(\n `\\nUsage: ${usage.inputTokens} prompt + ${usage.outputTokens} completion = ${usage.totalTokens} total tokens`,\n );\n }\n }\n } catch (error) {\n console.error(\n `Error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n process.exit(1);\n }\n}\n\nprocess.on('SIGINT', () => {\n process.exit(0);\n});\n\nprocess.on('SIGTERM', () => {\n process.exit(0);\n});\n\nmain().catch(error => {\n console.error(\n `Fatal error: ${error instanceof Error ? error.message : 'Unknown error'}`,\n );\n process.exit(1);\n});\n","import {\n getErrorMessage,\n LanguageModelV2,\n LanguageModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport {\n createIdGenerator,\n IdGenerator,\n ProviderOptions,\n} from '@ai-sdk/provider-utils';\nimport { Span } from '@opentelemetry/api';\nimport { ServerResponse } from 'node:http';\nimport { NoOutputSpecifiedError } from '../../src/error/no-output-specified-error';\nimport { createTextStreamResponse } from '../../src/text-stream/create-text-stream-response';\nimport { pipeTextStreamToResponse } from '../../src/text-stream/pipe-text-stream-to-response';\nimport { UIMessage } from '../../src/ui';\nimport { createUIMessageStreamResponse } from '../../src/ui-message-stream/create-ui-message-stream-response';\nimport { getResponseUIMessageId } from '../../src/ui-message-stream/get-response-ui-message-id';\nimport { handleUIMessageStreamFinish } from '../../src/ui-message-stream/handle-ui-message-stream-finish';\nimport { pipeUIMessageStreamToResponse } from '../../src/ui-message-stream/pipe-ui-message-stream-to-response';\nimport {\n InferUIMessageChunk,\n UIMessageChunk,\n} from '../../src/ui-message-stream/ui-message-chunks';\nimport { UIMessageStreamResponseInit } from '../../src/ui-message-stream/ui-message-stream-response-init';\nimport {\n InferUIMessageData,\n InferUIMessageMetadata,\n} from '../../src/ui/ui-messages';\nimport { asArray } from '../../src/util/as-array';\nimport {\n AsyncIterableStream,\n createAsyncIterableStream,\n} from '../../src/util/async-iterable-stream';\nimport { consumeStream } from '../../src/util/consume-stream';\nimport { createStitchableStream } from '../../src/util/create-stitchable-stream';\nimport { DelayedPromise } from '../../src/util/delayed-promise';\nimport { now as originalNow } from '../../src/util/now';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareToolsAndToolChoice } from '../prompt/prepare-tools-and-tool-choice';\nimport { Prompt } from '../prompt/prompt';\nimport { resolveLanguageModel } from '../prompt/resolve-language-model';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { LanguageModelRequestMetadata } from '../types';\nimport {\n CallWarning,\n FinishReason,\n LanguageModel,\n ToolChoice,\n} from '../types/language-model';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport { addLanguageModelUsage, LanguageModelUsage } from '../types/usage';\nimport { ContentPart } from './content-part';\nimport { Output } from './output';\nimport { PrepareStepFunction } from './prepare-step';\nimport { ResponseMessage } from './response-message';\nimport {\n runToolsTransformation,\n SingleRequestTextStreamPart,\n} from './run-tools-transformation';\nimport { DefaultStepResult, StepResult } from './step-result';\nimport {\n isStopConditionMet,\n stepCountIs,\n StopCondition,\n} from './stop-condition';\nimport {\n ConsumeStreamOptions,\n StreamTextResult,\n TextStreamPart,\n UIMessageStreamOptions,\n} from './stream-text-result';\nimport { toResponseMessages } from './to-response-messages';\nimport { ToolCallUnion } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair-function';\nimport { ToolOutput } from './tool-output';\nimport { ToolSet } from './tool-set';\n\nconst originalGenerateId = createIdGenerator({\n prefix: 'aitxt',\n size: 24,\n});\n\n/**\nA transformation that is applied to the stream.\n\n@param stopStream - A function that stops the source stream.\n@param tools - The tools that are accessible to and can be called by the model. The model needs to support calling tools.\n */\nexport type StreamTextTransform<TOOLS extends ToolSet> = (options: {\n tools: TOOLS; // for type inference\n stopStream: () => void;\n}) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;\n\n/**\nCallback that is set using the `onError` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnErrorCallback = (event: {\n error: unknown;\n}) => Promise<void> | void;\n\n/**\nCallback that is set using the `onStepFinish` option.\n\n@param stepResult - The result of the step.\n */\nexport type StreamTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n stepResult: StepResult<TOOLS>,\n) => Promise<void> | void;\n\n/**\nCallback that is set using the `onChunk` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnChunkCallback<TOOLS extends ToolSet> = (event: {\n chunk: Extract<\n TextStreamPart<TOOLS>,\n {\n type:\n | 'text'\n | 'reasoning'\n | 'source'\n | 'tool-call'\n | 'tool-input-start'\n | 'tool-input-delta'\n | 'tool-result'\n | 'raw';\n }\n >;\n}) => Promise<void> | void;\n\n/**\nCallback that is set using the `onFinish` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnFinishCallback<TOOLS extends ToolSet> = (\n event: StepResult<TOOLS> & {\n /**\nDetails for all steps.\n */\n readonly steps: StepResult<TOOLS>[];\n\n /**\nTotal usage for all steps. This is the sum of the usage of all steps.\n */\n readonly totalUsage: LanguageModelUsage;\n },\n) => Promise<void> | void;\n\n/**\nGenerate a text and call tools for a given prompt using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateText` instead.\n\n@param model - The language model to use.\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxOutputTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param maxSteps - Maximum number of sequential LLM calls (steps), e.g. when you use tool calls.\n\n@param onChunk - Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.\n@param onError - Callback that is called when an error occurs during streaming. You can use it to log errors.\n@param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n@param onFinish - Callback that is called when the LLM response and all request tool executions\n(for tools that have an `execute` function) are finished.\n\n@return\nA result object for accessing different stream types and additional information.\n */\nexport function streamText<\n TOOLS extends ToolSet,\n OUTPUT = never,\n PARTIAL_OUTPUT = never,\n>({\n model,\n tools,\n toolChoice,\n system,\n prompt,\n messages,\n maxRetries,\n abortSignal,\n headers,\n stopWhen = stepCountIs(1),\n experimental_output: output,\n experimental_telemetry: telemetry,\n prepareStep,\n providerOptions,\n experimental_activeTools,\n activeTools = experimental_activeTools,\n experimental_repairToolCall: repairToolCall,\n experimental_transform: transform,\n includeRawChunks = false,\n onChunk,\n onError = ({ error }) => {\n console.error(error);\n },\n onFinish,\n onStepFinish,\n _internal: {\n now = originalNow,\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n } = {},\n ...settings\n}: CallSettings &\n Prompt & {\n /**\nThe language model to use.\n */\n model: LanguageModel;\n\n /**\nThe tools that the model can call. The model needs to support calling tools.\n */\n tools?: TOOLS;\n\n /**\nThe tool choice strategy. Default: 'auto'.\n */\n toolChoice?: ToolChoice<TOOLS>;\n\n /**\nCondition for stopping the generation when there are tool results in the last step.\nWhen the condition is an array, any of the conditions can be met to stop the generation.\n\n@default stepCountIs(1)\n */\n stopWhen?:\n | StopCondition<NoInfer<TOOLS>>\n | Array<StopCondition<NoInfer<TOOLS>>>;\n\n /**\nOptional telemetry configuration (experimental).\n */\n experimental_telemetry?: TelemetrySettings;\n\n /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * @deprecated Use `activeTools` instead.\n */\n experimental_activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n /**\n Limits the tools that are available for the model to call without\n changing the tool call and result types in the result.\n */\n activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n /**\nOptional specification for parsing structured outputs from the LLM response.\n */\n experimental_output?: Output<OUTPUT, PARTIAL_OUTPUT>;\n\n /**\nOptional function that you can use to provide different settings for a step.\n\n@param options - The options for the step.\n@param options.steps - The steps that have been executed so far.\n@param options.stepNumber - The number of the step that is being executed.\n@param options.model - The model that is being used.\n\n@returns An object that contains the settings for the step.\nIf you return undefined (or for undefined settings), the settings from the outer level will be used.\n */\n prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n /**\nA function that attempts to repair a tool call that failed to parse.\n */\n experimental_repairToolCall?: ToolCallRepairFunction<TOOLS>;\n\n /**\nOptional stream transformations.\nThey are applied in the order they are provided.\nThe stream transformations must maintain the stream structure for streamText to work correctly.\n */\n experimental_transform?:\n | StreamTextTransform<TOOLS>\n | Array<StreamTextTransform<TOOLS>>;\n\n /**\nWhether to include raw chunks from the provider in the stream.\nWhen enabled, you will receive raw chunks with type 'raw' that contain the unprocessed data from the provider.\nThis allows access to cutting-edge provider features not yet wrapped by the AI SDK.\nDefaults to false.\n */\n includeRawChunks?: boolean;\n\n /**\nCallback that is called for each chunk of the stream.\nThe stream processing will pause until the callback promise is resolved.\n */\n onChunk?: StreamTextOnChunkCallback<TOOLS>;\n\n /**\nCallback that is invoked when an error occurs during streaming.\nYou can use it to log errors.\nThe stream processing will pause until the callback promise is resolved.\n */\n onError?: StreamTextOnErrorCallback;\n\n /**\nCallback that is called when the LLM response and all request tool executions\n(for tools that have an `execute` function) are finished.\n\nThe usage is the combined usage of all steps.\n */\n onFinish?: StreamTextOnFinishCallback<TOOLS>;\n\n /**\nCallback that is called when each step (LLM call) is finished, including intermediate steps.\n */\n onStepFinish?: StreamTextOnStepFinishCallback<TOOLS>;\n\n /**\nInternal. For test use only. May change without notice.\n */\n _internal?: {\n now?: () => number;\n generateId?: IdGenerator;\n currentDate?: () => Date;\n };\n }): StreamTextResult<TOOLS, PARTIAL_OUTPUT> {\n return new DefaultStreamTextResult<TOOLS, OUTPUT, PARTIAL_OUTPUT>({\n model: resolveLanguageModel(model),\n telemetry,\n headers,\n settings,\n maxRetries,\n abortSignal,\n system,\n prompt,\n messages,\n tools,\n toolChoice,\n transforms: asArray(transform),\n activeTools,\n repairToolCall,\n stopConditions: asArray(stopWhen),\n output,\n providerOptions,\n prepareStep,\n includeRawChunks,\n onChunk,\n onError,\n onFinish,\n onStepFinish,\n now,\n currentDate,\n generateId,\n });\n}\n\ntype EnrichedStreamPart<TOOLS extends ToolSet, PARTIAL_OUTPUT> = {\n part: TextStreamPart<TOOLS>;\n partialOutput: PARTIAL_OUTPUT | undefined;\n};\n\nfunction createOutputTransformStream<\n TOOLS extends ToolSet,\n OUTPUT,\n PARTIAL_OUTPUT,\n>(\n output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined,\n): TransformStream<\n TextStreamPart<TOOLS>,\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n> {\n if (!output) {\n return new TransformStream<\n TextStreamPart<TOOLS>,\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n >({\n transform(chunk, controller) {\n controller.enqueue({ part: chunk, partialOutput: undefined });\n },\n });\n }\n\n let firstTextChunkId: string | undefined = undefined;\n let text = '';\n let textChunk = '';\n let lastPublishedJson = '';\n\n function publishTextChunk({\n controller,\n partialOutput = undefined,\n }: {\n controller: TransformStreamDefaultController<\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n >;\n partialOutput?: PARTIAL_OUTPUT;\n }) {\n controller.enqueue({\n part: {\n type: 'text',\n id: firstTextChunkId!,\n text: textChunk,\n },\n partialOutput,\n });\n textChunk = '';\n }\n\n return new TransformStream<\n TextStreamPart<TOOLS>,\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n >({\n async transform(chunk, controller) {\n // ensure that we publish the last text chunk before the step finish:\n if (chunk.type === 'finish-step' && textChunk.length > 0) {\n publishTextChunk({ controller });\n }\n\n if (\n chunk.type !== 'text' &&\n chunk.type !== 'text-start' &&\n chunk.type !== 'text-end'\n ) {\n controller.enqueue({ part: chunk, partialOutput: undefined });\n return;\n }\n\n // we have to pick a text chunk which contains the json text\n // since we are streaming, we have to pick the first text chunk\n if (firstTextChunkId == null) {\n firstTextChunkId = chunk.id;\n } else if (chunk.id !== firstTextChunkId) {\n controller.enqueue({ part: chunk, partialOutput: undefined });\n return;\n }\n\n if (chunk.type === 'text-start') {\n controller.enqueue({ part: chunk, partialOutput: undefined });\n return;\n }\n\n if (chunk.type === 'text-end') {\n if (textChunk.length > 0) {\n publishTextChunk({ controller });\n }\n controller.enqueue({ part: chunk, partialOutput: undefined });\n return;\n }\n\n text += chunk.text;\n textChunk += chunk.text;\n\n // only publish if partial json can be parsed:\n const result = await output.parsePartial({ text });\n if (result != null) {\n // only send new json if it has changed:\n const currentJson = JSON.stringify(result.partial);\n if (currentJson !== lastPublishedJson) {\n publishTextChunk({ controller, partialOutput: result.partial });\n lastPublishedJson = currentJson;\n }\n }\n },\n });\n}\n\nclass DefaultStreamTextResult<TOOLS extends ToolSet, OUTPUT, PARTIAL_OUTPUT>\n implements StreamTextResult<TOOLS, PARTIAL_OUTPUT>\n{\n private readonly _totalUsage = new DelayedPromise<\n Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['usage']>\n >();\n private readonly _finishReason = new DelayedPromise<\n Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['finishReason']>\n >();\n private readonly _steps = new DelayedPromise<\n Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['steps']>\n >();\n\n private readonly addStream: (\n stream: ReadableStream<TextStreamPart<TOOLS>>,\n ) => void;\n\n private readonly closeStream: () => void;\n\n private baseStream: ReadableStream<EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>>;\n\n private output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined;\n\n private includeRawChunks: boolean;\n\n private generateId: () => string;\n\n constructor({\n model,\n telemetry,\n headers,\n settings,\n maxRetries: maxRetriesArg,\n abortSignal,\n system,\n prompt,\n messages,\n tools,\n toolChoice,\n transforms,\n activeTools,\n repairToolCall,\n stopConditions,\n output,\n providerOptions,\n prepareStep,\n includeRawChunks,\n now,\n currentDate,\n generateId,\n onChunk,\n onError,\n onFinish,\n onStepFinish,\n }: {\n model: LanguageModelV2;\n telemetry: TelemetrySettings | undefined;\n headers: Record<string, string | undefined> | undefined;\n settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n maxRetries: number | undefined;\n abortSignal: AbortSignal | undefined;\n system: Prompt['system'];\n prompt: Prompt['prompt'];\n messages: Prompt['messages'];\n tools: TOOLS | undefined;\n toolChoice: ToolChoice<TOOLS> | undefined;\n transforms: Array<StreamTextTransform<TOOLS>>;\n activeTools: Array<keyof TOOLS> | undefined;\n repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;\n stopConditions: Array<StopCondition<NoInfer<TOOLS>>>;\n output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined;\n providerOptions: ProviderOptions | undefined;\n prepareStep: PrepareStepFunction<NoInfer<TOOLS>> | undefined;\n includeRawChunks: boolean;\n now: () => number;\n currentDate: () => Date;\n generateId: () => string;\n\n // callbacks:\n onChunk: undefined | StreamTextOnChunkCallback<TOOLS>;\n onError: StreamTextOnErrorCallback;\n onFinish: undefined | StreamTextOnFinishCallback<TOOLS>;\n onStepFinish: undefined | StreamTextOnStepFinishCallback<TOOLS>;\n }) {\n this.output = output;\n this.includeRawChunks = includeRawChunks;\n this.generateId = generateId;\n\n // promise to ensure that the step has been fully processed by the event processor\n // before a new step is started. This is required because the continuation condition\n // needs the updated steps to determine if another step is needed.\n let stepFinish!: DelayedPromise<void>;\n\n let recordedContent: Array<ContentPart<TOOLS>> = [];\n const recordedResponseMessages: Array<ResponseMessage> = [];\n let recordedFinishReason: FinishReason | undefined = undefined;\n let recordedTotalUsage: LanguageModelUsage | undefined = undefined;\n let recordedRequest: LanguageModelRequestMetadata = {};\n let recordedWarnings: Array<CallWarning> = [];\n const recordedSteps: StepResult<TOOLS>[] = [];\n\n let rootSpan!: Span;\n\n let activeTextContent: Record<\n string,\n {\n type: 'text';\n text: string;\n providerMetadata: ProviderMetadata | undefined;\n }\n > = {};\n\n let activeReasoningContent: Record<\n string,\n {\n type: 'reasoning';\n text: string;\n providerMetadata: ProviderMetadata | undefined;\n }\n > = {};\n\n const eventProcessor = new TransformStream<\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n >({\n async transform(chunk, controller) {\n controller.enqueue(chunk); // forward the chunk to the next stream\n\n const { part } = chunk;\n\n if (\n part.type === 'text' ||\n part.type === 'reasoning' ||\n part.type === 'source' ||\n part.type === 'tool-call' ||\n part.type === 'tool-result' ||\n part.type === 'tool-input-start' ||\n part.type === 'tool-input-delta' ||\n part.type === 'raw'\n ) {\n await onChunk?.({ chunk: part });\n }\n\n if (part.type === 'error') {\n await onError({ error: wrapGatewayError(part.error) });\n }\n\n if (part.type === 'text-start') {\n activeTextContent[part.id] = {\n type: 'text',\n text: '',\n providerMetadata: part.providerMetadata,\n };\n\n recordedContent.push(activeTextContent[part.id]);\n }\n\n if (part.type === 'text') {\n const activeText = activeTextContent[part.id];\n\n if (activeText == null) {\n controller.enqueue({\n part: {\n type: 'error',\n error: `text part ${part.id} not found`,\n },\n partialOutput: undefined,\n });\n return;\n }\n\n activeText.text += part.text;\n activeText.providerMetadata = part.providerMetadata;\n }\n\n if (part.type === 'text-end') {\n delete activeTextContent[part.id];\n }\n\n if (part.type === 'reasoning-start') {\n activeReasoningContent[part.id] = {\n type: 'reasoning',\n text: '',\n providerMetadata: part.providerMetadata,\n };\n\n recordedContent.push(activeReasoningContent[part.id]);\n }\n\n if (part.type === 'reasoning') {\n const activeReasoning = activeReasoningContent[part.id];\n\n if (activeReasoning == null) {\n controller.enqueue({\n part: {\n type: 'error',\n error: `reasoning part ${part.id} not found`,\n },\n partialOutput: undefined,\n });\n return;\n }\n\n activeReasoning.text += part.text;\n activeReasoning.providerMetadata =\n part.providerMetadata ?? activeReasoning.providerMetadata;\n }\n\n if (part.type === 'reasoning-end') {\n const activeReasoning = activeReasoningContent[part.id];\n\n if (activeReasoning == null) {\n controller.enqueue({\n part: {\n type: 'error',\n error: `reasoning part ${part.id} not found`,\n },\n partialOutput: undefined,\n });\n return;\n }\n\n activeReasoning.providerMetadata =\n part.providerMetadata ?? activeReasoning.providerMetadata;\n\n delete activeReasoningContent[part.id];\n }\n\n if (part.type === 'file') {\n recordedContent.push({ type: 'file', file: part.file });\n }\n\n if (part.type === 'source') {\n recordedContent.push(part);\n }\n\n if (part.type === 'tool-call') {\n recordedContent.push(part);\n }\n\n if (part.type === 'tool-result') {\n recordedContent.push(part);\n }\n\n if (part.type === 'tool-error') {\n recordedContent.push(part);\n }\n\n if (part.type === 'start-step') {\n recordedRequest = part.request;\n recordedWarnings = part.warnings;\n }\n\n if (part.type === 'finish-step') {\n const stepMessages = toResponseMessages({\n content: recordedContent,\n tools,\n });\n\n // Add step information (after response messages are updated):\n const currentStepResult: StepResult<TOOLS> = new DefaultStepResult({\n content: recordedContent,\n finishReason: part.finishReason,\n usage: part.usage,\n warnings: recordedWarnings,\n request: recordedRequest,\n response: {\n ...part.response,\n messages: [...recordedResponseMessages, ...stepMessages],\n },\n providerMetadata: part.providerMetadata,\n });\n\n await onStepFinish?.(currentStepResult);\n\n recordedSteps.push(currentStepResult);\n\n recordedContent = [];\n activeReasoningContent = {};\n activeTextContent = {};\n\n recordedResponseMessages.push(...stepMessages);\n\n // resolve the promise to signal that the step has been fully processed\n // by the event processor:\n stepFinish.resolve();\n }\n\n if (part.type === 'finish') {\n recordedTotalUsage = part.totalUsage;\n recordedFinishReason = part.finishReason;\n }\n },\n\n async flush(controller) {\n try {\n if (recordedSteps.length === 0) {\n return; // no steps recorded (e.g. in error scenario)\n }\n\n // derived:\n const finishReason = recordedFinishReason ?? 'unknown';\n const totalUsage = recordedTotalUsage ?? {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n };\n\n // from finish:\n self._finishReason.resolve(finishReason);\n self._totalUsage.resolve(totalUsage);\n\n // aggregate results:\n self._steps.resolve(recordedSteps);\n\n // call onFinish callback:\n const finalStep = recordedSteps[recordedSteps.length - 1];\n await onFinish?.({\n finishReason,\n totalUsage,\n usage: finalStep.usage,\n content: finalStep.content,\n text: finalStep.text,\n reasoningText: finalStep.reasoningText,\n reasoning: finalStep.reasoning,\n files: finalStep.files,\n sources: finalStep.sources,\n toolCalls: finalStep.toolCalls,\n toolResults: finalStep.toolResults,\n request: finalStep.request,\n response: finalStep.response,\n warnings: finalStep.warnings,\n providerMetadata: finalStep.providerMetadata,\n steps: recordedSteps,\n });\n\n // Add response information to the root span:\n rootSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': finishReason,\n 'ai.response.text': { output: () => finalStep.text },\n 'ai.response.toolCalls': {\n output: () =>\n finalStep.toolCalls?.length\n ? JSON.stringify(finalStep.toolCalls)\n : undefined,\n },\n 'ai.response.providerMetadata': JSON.stringify(\n finalStep.providerMetadata,\n ),\n\n 'ai.usage.inputTokens': totalUsage.inputTokens,\n 'ai.usage.outputTokens': totalUsage.outputTokens,\n 'ai.usage.totalTokens': totalUsage.totalTokens,\n 'ai.usage.reasoningTokens': totalUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens': totalUsage.cachedInputTokens,\n },\n }),\n );\n } catch (error) {\n controller.error(error);\n } finally {\n rootSpan.end();\n }\n },\n });\n\n // initialize the stitchable stream and the transformed stream:\n const stitchableStream = createStitchableStream<TextStreamPart<TOOLS>>();\n this.addStream = stitchableStream.addStream;\n this.closeStream = stitchableStream.close;\n\n let stream = stitchableStream.stream;\n\n // add a stream that emits a start event:\n stream = stream.pipeThrough(\n new TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>({\n start(controller) {\n controller.enqueue({ type: 'start' });\n },\n }),\n );\n\n // transform the stream before output parsing\n // to enable replacement of stream segments:\n for (const transform of transforms) {\n stream = stream.pipeThrough(\n transform({\n tools: tools as TOOLS,\n stopStream() {\n stitchableStream.terminate();\n },\n }),\n );\n }\n\n this.baseStream = stream\n .pipeThrough(createOutputTransformStream(output))\n .pipeThrough(eventProcessor);\n\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n });\n\n const tracer = getTracer(telemetry);\n\n const callSettings = prepareCallSettings(settings);\n\n const baseTelemetryAttributes = getBaseTelemetryAttributes({\n model,\n telemetry,\n headers,\n settings: { ...callSettings, maxRetries },\n });\n\n const self = this;\n\n recordSpan({\n name: 'ai.streamText',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({ operationId: 'ai.streamText', telemetry }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.prompt': {\n input: () => JSON.stringify({ system, prompt, messages }),\n },\n },\n }),\n tracer,\n endWhenDone: false,\n fn: async rootSpanArg => {\n rootSpan = rootSpanArg;\n\n async function streamStep({\n currentStep,\n responseMessages,\n usage,\n }: {\n currentStep: number;\n responseMessages: Array<ResponseMessage>;\n usage: LanguageModelUsage;\n }) {\n const includeRawChunks = self.includeRawChunks;\n\n stepFinish = new DelayedPromise<void>();\n\n const initialPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n });\n\n const stepInputMessages = [\n ...initialPrompt.messages,\n ...responseMessages,\n ];\n\n const prepareStepResult = await prepareStep?.({\n model,\n steps: recordedSteps,\n stepNumber: recordedSteps.length,\n messages: stepInputMessages,\n });\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: {\n system: prepareStepResult?.system ?? initialPrompt.system,\n messages: prepareStepResult?.messages ?? stepInputMessages,\n },\n supportedUrls: await model.supportedUrls,\n });\n\n const stepModel = resolveLanguageModel(\n prepareStepResult?.model ?? model,\n );\n\n const { toolChoice: stepToolChoice, tools: stepTools } =\n prepareToolsAndToolChoice({\n tools,\n toolChoice: prepareStepResult?.toolChoice ?? toolChoice,\n activeTools: prepareStepResult?.activeTools ?? activeTools,\n });\n\n const {\n result: { stream, response, request },\n doStreamSpan,\n startTimestampMs,\n } = await retry(() =>\n recordSpan({\n name: 'ai.streamText.doStream',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.streamText.doStream',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // model:\n 'ai.model.provider': stepModel.provider,\n 'ai.model.id': stepModel.modelId,\n // prompt:\n 'ai.prompt.messages': {\n input: () => stringifyForTelemetry(promptMessages),\n },\n 'ai.prompt.tools': {\n // convert the language model level tools:\n input: () => stepTools?.map(tool => JSON.stringify(tool)),\n },\n 'ai.prompt.toolChoice': {\n input: () =>\n stepToolChoice != null\n ? JSON.stringify(stepToolChoice)\n : undefined,\n },\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.system': stepModel.provider,\n 'gen_ai.request.model': stepModel.modelId,\n 'gen_ai.request.frequency_penalty':\n callSettings.frequencyPenalty,\n 'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n 'gen_ai.request.presence_penalty':\n callSettings.presencePenalty,\n 'gen_ai.request.stop_sequences': callSettings.stopSequences,\n 'gen_ai.request.temperature': callSettings.temperature,\n 'gen_ai.request.top_k': callSettings.topK,\n 'gen_ai.request.top_p': callSettings.topP,\n },\n }),\n tracer,\n endWhenDone: false,\n fn: async doStreamSpan => {\n return {\n startTimestampMs: now(), // get before the call\n doStreamSpan,\n result: await stepModel.doStream({\n ...callSettings,\n tools: stepTools,\n toolChoice: stepToolChoice,\n responseFormat: output?.responseFormat,\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers,\n includeRawChunks,\n }),\n };\n },\n }),\n );\n\n const streamWithToolResults = runToolsTransformation({\n tools,\n generatorStream: stream,\n tracer,\n telemetry,\n system,\n messages: stepInputMessages,\n repairToolCall,\n abortSignal,\n });\n\n const stepRequest = request ?? {};\n const stepToolCalls: ToolCallUnion<TOOLS>[] = [];\n const stepToolOutputs: ToolOutput<TOOLS>[] = [];\n let warnings: LanguageModelV2CallWarning[] | undefined;\n\n const activeToolCallToolNames: Record<string, string> = {};\n\n let stepFinishReason: FinishReason = 'unknown';\n let stepUsage: LanguageModelUsage = {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n };\n let stepProviderMetadata: ProviderMetadata | undefined;\n let stepFirstChunk = true;\n let stepResponse: { id: string; timestamp: Date; modelId: string } = {\n id: generateId(),\n timestamp: currentDate(),\n modelId: model.modelId,\n };\n\n // raw text as it comes from the provider. recorded for telemetry.\n let activeText = '';\n\n self.addStream(\n streamWithToolResults.pipeThrough(\n new TransformStream<\n SingleRequestTextStreamPart<TOOLS>,\n TextStreamPart<TOOLS>\n >({\n async transform(chunk, controller): Promise<void> {\n if (chunk.type === 'stream-start') {\n warnings = chunk.warnings;\n return; // stream start chunks are sent immediately and do not count as first chunk\n }\n\n if (stepFirstChunk) {\n // Telemetry for first chunk:\n const msToFirstChunk = now() - startTimestampMs;\n\n stepFirstChunk = false;\n\n doStreamSpan.addEvent('ai.stream.firstChunk', {\n 'ai.response.msToFirstChunk': msToFirstChunk,\n });\n\n doStreamSpan.setAttributes({\n 'ai.response.msToFirstChunk': msToFirstChunk,\n });\n\n // Step start:\n controller.enqueue({\n type: 'start-step',\n request: stepRequest,\n warnings: warnings ?? [],\n });\n }\n\n const chunkType = chunk.type;\n switch (chunkType) {\n case 'text-start':\n case 'text-end': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'text-delta': {\n if (chunk.delta.length > 0) {\n controller.enqueue({\n type: 'text',\n id: chunk.id,\n text: chunk.delta,\n providerMetadata: chunk.providerMetadata,\n });\n activeText += chunk.delta;\n }\n break;\n }\n\n case 'reasoning-start':\n case 'reasoning-end': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'reasoning-delta': {\n controller.enqueue({\n type: 'reasoning',\n id: chunk.id,\n text: chunk.delta,\n providerMetadata: chunk.providerMetadata,\n });\n break;\n }\n\n case 'tool-call': {\n controller.enqueue(chunk);\n // store tool calls for onFinish callback and toolCalls promise:\n stepToolCalls.push(chunk);\n break;\n }\n\n case 'tool-result': {\n controller.enqueue(chunk);\n stepToolOutputs.push(chunk);\n break;\n }\n\n case 'tool-error': {\n controller.enqueue(chunk);\n stepToolOutputs.push(chunk);\n break;\n }\n\n case 'response-metadata': {\n stepResponse = {\n id: chunk.id ?? stepResponse.id,\n timestamp: chunk.timestamp ?? stepResponse.timestamp,\n modelId: chunk.modelId ?? stepResponse.modelId,\n };\n break;\n }\n\n case 'finish': {\n // Note: tool executions might not be finished yet when the finish event is emitted.\n // store usage and finish reason for promises and onFinish callback:\n stepUsage = chunk.usage;\n stepFinishReason = chunk.finishReason;\n stepProviderMetadata = chunk.providerMetadata;\n\n // Telemetry for finish event timing\n // (since tool executions can take longer and distort calculations)\n const msToFinish = now() - startTimestampMs;\n doStreamSpan.addEvent('ai.stream.finish');\n doStreamSpan.setAttributes({\n 'ai.response.msToFinish': msToFinish,\n 'ai.response.avgOutputTokensPerSecond':\n (1000 * (stepUsage.outputTokens ?? 0)) / msToFinish,\n });\n\n break;\n }\n\n case 'file': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'source': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'tool-input-start': {\n activeToolCallToolNames[chunk.id] = chunk.toolName;\n\n const tool = tools?.[chunk.toolName];\n if (tool?.onInputStart != null) {\n await tool.onInputStart({\n toolCallId: chunk.id,\n messages: stepInputMessages,\n abortSignal,\n });\n }\n\n controller.enqueue(chunk);\n break;\n }\n\n case 'tool-input-end': {\n delete activeToolCallToolNames[chunk.id];\n controller.enqueue(chunk);\n break;\n }\n\n case 'tool-input-delta': {\n const toolName = activeToolCallToolNames[chunk.id];\n const tool = tools?.[toolName];\n\n if (tool?.onInputDelta != null) {\n await tool.onInputDelta({\n inputTextDelta: chunk.delta,\n toolCallId: chunk.id,\n messages: stepInputMessages,\n abortSignal,\n });\n }\n\n controller.enqueue(chunk);\n break;\n }\n\n case 'error': {\n controller.enqueue(chunk);\n stepFinishReason = 'error';\n break;\n }\n\n case 'raw': {\n if (includeRawChunks) {\n controller.enqueue(chunk);\n }\n break;\n }\n\n default: {\n const exhaustiveCheck: never = chunkType;\n throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n\n // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n async flush(controller) {\n const stepToolCallsJson =\n stepToolCalls.length > 0\n ? JSON.stringify(stepToolCalls)\n : undefined;\n\n // record telemetry information first to ensure best effort timing\n try {\n doStreamSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': stepFinishReason,\n 'ai.response.text': {\n output: () => activeText,\n },\n 'ai.response.toolCalls': {\n output: () => stepToolCallsJson,\n },\n 'ai.response.id': stepResponse.id,\n 'ai.response.model': stepResponse.modelId,\n 'ai.response.timestamp':\n stepResponse.timestamp.toISOString(),\n 'ai.response.providerMetadata':\n JSON.stringify(stepProviderMetadata),\n\n 'ai.usage.inputTokens': stepUsage.inputTokens,\n 'ai.usage.outputTokens': stepUsage.outputTokens,\n 'ai.usage.totalTokens': stepUsage.totalTokens,\n 'ai.usage.reasoningTokens': stepUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens':\n stepUsage.cachedInputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [stepFinishReason],\n 'gen_ai.response.id': stepResponse.id,\n 'gen_ai.response.model': stepResponse.modelId,\n 'gen_ai.usage.input_tokens': stepUsage.inputTokens,\n 'gen_ai.usage.output_tokens': stepUsage.outputTokens,\n },\n }),\n );\n } catch (error) {\n // ignore error setting telemetry attributes\n } finally {\n // finish doStreamSpan before other operations for correct timing:\n doStreamSpan.end();\n }\n\n controller.enqueue({\n type: 'finish-step',\n finishReason: stepFinishReason,\n usage: stepUsage,\n providerMetadata: stepProviderMetadata,\n response: {\n ...stepResponse,\n headers: response?.headers,\n },\n });\n\n const combinedUsage = addLanguageModelUsage(usage, stepUsage);\n\n // wait for the step to be fully processed by the event processor\n // to ensure that the recorded steps are complete:\n await stepFinish.promise;\n\n const clientToolCalls = stepToolCalls.filter(\n toolCall => toolCall.providerExecuted !== true,\n );\n const clientToolOutputs = stepToolOutputs.filter(\n toolOutput => toolOutput.providerExecuted !== true,\n );\n\n if (\n clientToolCalls.length > 0 &&\n // all current tool calls have outputs (incl. execution errors):\n clientToolOutputs.length === clientToolCalls.length &&\n // continue until a stop condition is met:\n !(await isStopConditionMet({\n stopConditions,\n steps: recordedSteps,\n }))\n ) {\n // append to messages for the next step:\n responseMessages.push(\n ...toResponseMessages({\n content:\n // use transformed content to create the messages for the next step:\n recordedSteps[recordedSteps.length - 1].content,\n tools,\n }),\n );\n\n try {\n await streamStep({\n currentStep: currentStep + 1,\n responseMessages,\n usage: combinedUsage,\n });\n } catch (error) {\n controller.enqueue({\n type: 'error',\n error,\n });\n\n self.closeStream();\n }\n } else {\n controller.enqueue({\n type: 'finish',\n finishReason: stepFinishReason,\n totalUsage: combinedUsage,\n });\n\n self.closeStream(); // close the stitchable stream\n }\n },\n }),\n ),\n );\n }\n\n // add the initial stream to the stitchable stream\n await streamStep({\n currentStep: 0,\n responseMessages: [],\n usage: {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n },\n });\n },\n }).catch(error => {\n // add an error stream part and close the streams:\n self.addStream(\n new ReadableStream({\n start(controller) {\n controller.enqueue({ type: 'error', error });\n controller.close();\n },\n }),\n );\n self.closeStream();\n });\n }\n\n get steps() {\n return this._steps.promise;\n }\n\n private get finalStep() {\n return this.steps.then(steps => steps[steps.length - 1]);\n }\n\n get content() {\n return this.finalStep.then(step => step.content);\n }\n\n get warnings() {\n return this.finalStep.then(step => step.warnings);\n }\n\n get providerMetadata() {\n return this.finalStep.then(step => step.providerMetadata);\n }\n\n get text() {\n return this.finalStep.then(step => step.text);\n }\n\n get reasoningText() {\n return this.finalStep.then(step => step.reasoningText);\n }\n\n get reasoning() {\n return this.finalStep.then(step => step.reasoning);\n }\n\n get sources() {\n return this.finalStep.then(step => step.sources);\n }\n\n get files() {\n return this.finalStep.then(step => step.files);\n }\n\n get toolCalls() {\n return this.finalStep.then(step => step.toolCalls);\n }\n\n get toolResults() {\n return this.finalStep.then(step => step.toolResults);\n }\n\n get usage() {\n return this.finalStep.then(step => step.usage);\n }\n\n get request() {\n return this.finalStep.then(step => step.request);\n }\n\n get response() {\n return this.finalStep.then(step => step.response);\n }\n\n get totalUsage() {\n return this._totalUsage.promise;\n }\n\n get finishReason() {\n return this._finishReason.promise;\n }\n\n /**\nSplit out a new stream from the original stream.\nThe original stream is replaced to allow for further splitting,\nsince we do not know how many times the stream will be split.\n\nNote: this leads to buffering the stream content on the server.\nHowever, the LLM results are expected to be small enough to not cause issues.\n */\n private teeStream() {\n const [stream1, stream2] = this.baseStream.tee();\n this.baseStream = stream2;\n return stream1;\n }\n\n get textStream(): AsyncIterableStream<string> {\n return createAsyncIterableStream(\n this.teeStream().pipeThrough(\n new TransformStream<EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>, string>({\n transform({ part }, controller) {\n if (part.type === 'text') {\n controller.enqueue(part.text);\n }\n },\n }),\n ),\n );\n }\n\n get fullStream(): AsyncIterableStream<TextStreamPart<TOOLS>> {\n return createAsyncIterableStream(\n this.teeStream().pipeThrough(\n new TransformStream<\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n TextStreamPart<TOOLS>\n >({\n transform({ part }, controller) {\n controller.enqueue(part);\n },\n }),\n ),\n );\n }\n\n async consumeStream(options?: ConsumeStreamOptions): Promise<void> {\n try {\n await consumeStream({\n stream: this.fullStream,\n onError: options?.onError,\n });\n } catch (error) {\n options?.onError?.(error);\n }\n }\n\n get experimental_partialOutputStream(): AsyncIterableStream<PARTIAL_OUTPUT> {\n if (this.output == null) {\n throw new NoOutputSpecifiedError();\n }\n\n return createAsyncIterableStream(\n this.teeStream().pipeThrough(\n new TransformStream<\n EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n PARTIAL_OUTPUT\n >({\n transform({ partialOutput }, controller) {\n if (partialOutput != null) {\n controller.enqueue(partialOutput);\n }\n },\n }),\n ),\n );\n }\n\n toUIMessageStream<UI_MESSAGE extends UIMessage>({\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning = true,\n sendSources = false,\n sendStart = true,\n sendFinish = true,\n onError = getErrorMessage,\n }: UIMessageStreamOptions<UI_MESSAGE> = {}): ReadableStream<\n InferUIMessageChunk<UI_MESSAGE>\n > {\n const responseMessageId = getResponseUIMessageId({\n originalMessages,\n responseMessageId: this.generateId,\n });\n\n const baseStream = this.fullStream.pipeThrough(\n new TransformStream<\n TextStreamPart<TOOLS>,\n UIMessageChunk<\n InferUIMessageMetadata<UI_MESSAGE>,\n InferUIMessageData<UI_MESSAGE>\n >\n >({\n transform: async (part, controller) => {\n const messageMetadataValue = messageMetadata?.({ part });\n\n const partType = part.type;\n switch (partType) {\n case 'text-start': {\n controller.enqueue({ type: 'text-start', id: part.id });\n break;\n }\n\n case 'text': {\n controller.enqueue({\n type: 'text-delta',\n id: part.id,\n delta: part.text,\n });\n break;\n }\n\n case 'text-end': {\n controller.enqueue({ type: 'text-end', id: part.id });\n break;\n }\n\n case 'reasoning-start': {\n controller.enqueue({\n type: 'reasoning-start',\n id: part.id,\n providerMetadata: part.providerMetadata,\n });\n break;\n }\n\n case 'reasoning': {\n if (sendReasoning) {\n controller.enqueue({\n type: 'reasoning-delta',\n id: part.id,\n delta: part.text,\n providerMetadata: part.providerMetadata,\n });\n }\n break;\n }\n\n case 'reasoning-end': {\n controller.enqueue({\n type: 'reasoning-end',\n id: part.id,\n providerMetadata: part.providerMetadata,\n });\n break;\n }\n\n case 'file': {\n controller.enqueue({\n type: 'file',\n mediaType: part.file.mediaType,\n url: `data:${part.file.mediaType};base64,${part.file.base64}`,\n });\n break;\n }\n\n case 'source': {\n if (sendSources && part.sourceType === 'url') {\n controller.enqueue({\n type: 'source-url',\n sourceId: part.id,\n url: part.url,\n title: part.title,\n providerMetadata: part.providerMetadata,\n });\n }\n\n if (sendSources && part.sourceType === 'document') {\n controller.enqueue({\n type: 'source-document',\n sourceId: part.id,\n mediaType: part.mediaType,\n title: part.title,\n filename: part.filename,\n providerMetadata: part.providerMetadata,\n });\n }\n break;\n }\n\n case 'tool-input-start': {\n controller.enqueue({\n type: 'tool-input-start',\n toolCallId: part.id,\n toolName: part.toolName,\n providerExecuted: part.providerExecuted,\n });\n break;\n }\n\n case 'tool-input-delta': {\n controller.enqueue({\n type: 'tool-input-delta',\n toolCallId: part.id,\n inputTextDelta: part.delta,\n });\n break;\n }\n\n case 'tool-call': {\n controller.enqueue({\n type: 'tool-input-available',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n providerExecuted: part.providerExecuted,\n });\n break;\n }\n\n case 'tool-result': {\n controller.enqueue({\n type: 'tool-output-available',\n toolCallId: part.toolCallId,\n output: part.output,\n providerExecuted: part.providerExecuted,\n });\n break;\n }\n\n case 'tool-error': {\n controller.enqueue({\n type: 'tool-output-error',\n toolCallId: part.toolCallId,\n errorText: onError(part.error),\n providerExecuted: part.providerExecuted,\n });\n break;\n }\n\n case 'error': {\n controller.enqueue({\n type: 'error',\n errorText: onError(part.error),\n });\n break;\n }\n\n case 'start-step': {\n controller.enqueue({ type: 'start-step' });\n break;\n }\n\n case 'finish-step': {\n controller.enqueue({ type: 'finish-step' });\n break;\n }\n\n case 'start': {\n if (sendStart) {\n controller.enqueue({\n type: 'start',\n messageId: responseMessageId,\n messageMetadata: messageMetadataValue,\n });\n }\n break;\n }\n\n case 'finish': {\n if (sendFinish) {\n controller.enqueue({\n type: 'finish',\n messageMetadata: messageMetadataValue,\n });\n }\n break;\n }\n\n case 'tool-input-end': {\n break;\n }\n\n case 'raw': {\n // Raw chunks are not included in UI message streams\n // as they contain provider-specific data for developer use\n break;\n }\n\n default: {\n const exhaustiveCheck: never = partType;\n throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n }\n }\n\n // start and finish events already have metadata\n // so we only need to send metadata for other parts\n if (\n messageMetadataValue != null &&\n partType !== 'start' &&\n partType !== 'finish'\n ) {\n controller.enqueue({\n type: 'message-metadata',\n messageMetadata: messageMetadataValue,\n });\n }\n },\n }),\n );\n\n return handleUIMessageStreamFinish<UI_MESSAGE>({\n stream: baseStream,\n messageId: responseMessageId ?? generateMessageId?.(),\n originalMessages,\n onFinish,\n onError,\n });\n }\n\n pipeUIMessageStreamToResponse<UI_MESSAGE extends UIMessage>(\n response: ServerResponse,\n {\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n }: UIMessageStreamResponseInit & UIMessageStreamOptions<UI_MESSAGE> = {},\n ) {\n pipeUIMessageStreamToResponse({\n response,\n stream: this.toUIMessageStream({\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n }),\n ...init,\n });\n }\n\n pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n pipeTextStreamToResponse({\n response,\n textStream: this.textStream,\n ...init,\n });\n }\n\n toUIMessageStreamResponse<UI_MESSAGE extends UIMessage>({\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n }: UIMessageStreamResponseInit &\n UIMessageStreamOptions<UI_MESSAGE> = {}): Response {\n return createUIMessageStreamResponse({\n stream: this.toUIMessageStream({\n originalMessages,\n generateMessageId,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n }),\n ...init,\n });\n }\n\n toTextStreamResponse(init?: ResponseInit): Response {\n return createTextStreamResponse({\n textStream: this.textStream,\n ...init,\n });\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_NoOutputSpecifiedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\nThrown when no output type is specified and output-related methods are called.\n */\nexport class NoOutputSpecifiedError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n constructor({ message = 'No output specified.' }: { message?: string } = {}) {\n super({ name, message });\n }\n\n static isInstance(error: unknown): error is NoOutputSpecifiedError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","export function prepareHeaders(\n headers: HeadersInit | undefined,\n defaultHeaders: Record<string, string>,\n): Headers {\n const responseHeaders = new Headers(headers ?? {});\n\n for (const [key, value] of Object.entries(defaultHeaders)) {\n if (!responseHeaders.has(key)) {\n responseHeaders.set(key, value);\n }\n }\n\n return responseHeaders;\n}\n","import { prepareHeaders } from '../util/prepare-headers';\n\nexport function createTextStreamResponse({\n status,\n statusText,\n headers,\n textStream,\n}: ResponseInit & {\n textStream: ReadableStream<string>;\n}): Response {\n return new Response(textStream.pipeThrough(new TextEncoderStream()), {\n status: status ?? 200,\n statusText,\n headers: prepareHeaders(headers, {\n 'content-type': 'text/plain; charset=utf-8',\n }),\n });\n}\n","import { ServerResponse } from 'node:http';\n\n/**\n * Writes the content of a stream to a server response.\n */\nexport function writeToServerResponse({\n response,\n status,\n statusText,\n headers,\n stream,\n}: {\n response: ServerResponse;\n status?: number;\n statusText?: string;\n headers?: Record<string, string | number | string[]>;\n stream: ReadableStream<Uint8Array>;\n}): void {\n response.writeHead(status ?? 200, statusText, headers);\n\n const reader = stream.getReader();\n const read = async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n response.write(value);\n }\n } catch (error) {\n throw error;\n } finally {\n response.end();\n }\n };\n\n read();\n}\n","import { ServerResponse } from 'node:http';\nimport { prepareHeaders } from '../util/prepare-headers';\nimport { writeToServerResponse } from '../util/write-to-server-response';\n\nexport function pipeTextStreamToResponse({\n response,\n status,\n statusText,\n headers,\n textStream,\n}: {\n response: ServerResponse;\n textStream: ReadableStream<string>;\n} & ResponseInit): void {\n writeToServerResponse({\n response,\n status,\n statusText,\n headers: Object.fromEntries(\n prepareHeaders(headers, {\n 'content-type': 'text/plain; charset=utf-8',\n }).entries(),\n ),\n stream: textStream.pipeThrough(new TextEncoderStream()),\n });\n}\n","export class JsonToSseTransformStream extends TransformStream<unknown, string> {\n constructor() {\n super({\n transform(part, controller) {\n controller.enqueue(`data: ${JSON.stringify(part)}\\n\\n`);\n },\n flush(controller) {\n controller.enqueue('data: [DONE]\\n\\n');\n },\n });\n }\n}\n","export const UI_MESSAGE_STREAM_HEADERS = {\n 'content-type': 'text/event-stream',\n 'cache-control': 'no-cache',\n connection: 'keep-alive',\n 'x-vercel-ai-ui-message-stream': 'v1',\n 'x-accel-buffering': 'no', // disable nginx buffering\n};\n","import { prepareHeaders } from '../util/prepare-headers';\nimport { JsonToSseTransformStream } from './json-to-sse-transform-stream';\nimport { UI_MESSAGE_STREAM_HEADERS } from './ui-message-stream-headers';\nimport { UIMessageChunk } from './ui-message-chunks';\nimport { UIMessageStreamResponseInit } from './ui-message-stream-response-init';\n\nexport function createUIMessageStreamResponse({\n status,\n statusText,\n headers,\n stream,\n consumeSseStream,\n}: UIMessageStreamResponseInit & {\n stream: ReadableStream<UIMessageChunk>;\n}): Response {\n let sseStream = stream.pipeThrough(new JsonToSseTransformStream());\n\n // when the consumeSseStream is provided, we need to tee the stream\n // and send the second part to the consumeSseStream function\n // so that it can be consumed by the client independently\n if (consumeSseStream) {\n const [stream1, stream2] = sseStream.tee();\n sseStream = stream1;\n consumeSseStream({ stream: stream2 }); // no await (do not block the response)\n }\n\n return new Response(sseStream.pipeThrough(new TextEncoderStream()), {\n status,\n statusText,\n headers: prepareHeaders(headers, UI_MESSAGE_STREAM_HEADERS),\n });\n}\n","import { IdGenerator } from '@ai-sdk/provider-utils';\nimport { UIMessage } from '../ui/ui-messages';\n\nexport function getResponseUIMessageId({\n originalMessages,\n responseMessageId,\n}: {\n originalMessages: UIMessage[] | undefined;\n responseMessageId: string | IdGenerator;\n}) {\n // when there are no original messages (i.e. no persistence),\n // the assistant message id generation is handled on the client side.\n if (originalMessages == null) {\n return undefined;\n }\n\n const lastMessage = originalMessages[originalMessages.length - 1];\n\n return lastMessage?.role === 'assistant'\n ? lastMessage.id\n : typeof responseMessageId === 'function'\n ? responseMessageId()\n : responseMessageId;\n}\n","import {\n StandardSchemaV1,\n ToolCall,\n validateTypes,\n Validator,\n} from '@ai-sdk/provider-utils';\nimport {\n InferUIMessageChunk,\n DataUIMessageChunk,\n isDataUIMessageChunk,\n UIMessageChunk,\n} from '../ui-message-stream/ui-message-chunks';\nimport { ErrorHandler } from '../util/error-handler';\nimport { mergeObjects } from '../util/merge-objects';\nimport { parsePartialJson } from '../util/parse-partial-json';\nimport { UIDataTypesToSchemas } from './chat';\nimport {\n DataUIPart,\n getToolName,\n InferUIMessageData,\n InferUIMessageMetadata,\n InferUIMessageTools,\n isToolUIPart,\n ReasoningUIPart,\n TextUIPart,\n ToolUIPart,\n UIMessage,\n UIMessagePart,\n} from './ui-messages';\n\nexport type StreamingUIMessageState<UI_MESSAGE extends UIMessage> = {\n message: UI_MESSAGE;\n activeTextParts: Record<string, TextUIPart>;\n activeReasoningParts: Record<string, ReasoningUIPart>;\n partialToolCalls: Record<\n string,\n { text: string; index: number; toolName: string }\n >;\n};\n\nexport function createStreamingUIMessageState<UI_MESSAGE extends UIMessage>({\n lastMessage,\n messageId,\n}: {\n lastMessage: UI_MESSAGE | undefined;\n messageId: string;\n}): StreamingUIMessageState<UI_MESSAGE> {\n return {\n message:\n lastMessage?.role === 'assistant'\n ? lastMessage\n : ({\n id: messageId,\n metadata: undefined,\n role: 'assistant',\n parts: [] as UIMessagePart<\n InferUIMessageData<UI_MESSAGE>,\n InferUIMessageTools<UI_MESSAGE>\n >[],\n } as UI_MESSAGE),\n activeTextParts: {},\n activeReasoningParts: {},\n partialToolCalls: {},\n };\n}\n\nexport function processUIMessageStream<UI_MESSAGE extends UIMessage>({\n stream,\n onToolCall,\n messageMetadataSchema,\n dataPartSchemas,\n runUpdateMessageJob,\n onError,\n onData,\n}: {\n // input stream is not fully typed yet:\n stream: ReadableStream<UIMessageChunk>;\n messageMetadataSchema?:\n | Validator<InferUIMessageMetadata<UI_MESSAGE>>\n | StandardSchemaV1<InferUIMessageMetadata<UI_MESSAGE>>;\n dataPartSchemas?: UIDataTypesToSchemas<InferUIMessageData<UI_MESSAGE>>;\n onToolCall?: (options: {\n toolCall: ToolCall<string, unknown>;\n }) => void | Promise<unknown> | unknown;\n onData?: (dataPart: DataUIPart<InferUIMessageData<UI_MESSAGE>>) => void;\n runUpdateMessageJob: (\n job: (options: {\n state: StreamingUIMessageState<UI_MESSAGE>;\n write: () => void;\n }) => Promise<void>,\n ) => Promise<void>;\n onError: ErrorHandler;\n}): ReadableStream<InferUIMessageChunk<UI_MESSAGE>> {\n return stream.pipeThrough(\n new TransformStream<UIMessageChunk, InferUIMessageChunk<UI_MESSAGE>>({\n async transform(part, controller) {\n await runUpdateMessageJob(async ({ state, write }) => {\n function updateToolInvocationPart(\n options: {\n toolName: keyof InferUIMessageTools<UI_MESSAGE> & string;\n toolCallId: string;\n providerExecuted?: boolean;\n } & (\n | {\n state: 'input-streaming';\n input: unknown;\n providerExecuted?: boolean;\n }\n | {\n state: 'input-available';\n input: unknown;\n providerExecuted?: boolean;\n }\n | {\n state: 'output-available';\n input: unknown;\n output: unknown;\n providerExecuted?: boolean;\n }\n | {\n state: 'output-error';\n input: unknown;\n errorText: string;\n providerExecuted?: boolean;\n }\n ),\n ) {\n const part = state.message.parts.find(\n part =>\n isToolUIPart(part) && part.toolCallId === options.toolCallId,\n ) as ToolUIPart<InferUIMessageTools<UI_MESSAGE>> | undefined;\n\n const anyOptions = options as any;\n const anyPart = part as any;\n\n if (part != null) {\n part.state = options.state;\n anyPart.input = anyOptions.input;\n anyPart.output = anyOptions.output;\n anyPart.errorText = anyOptions.errorText;\n\n // once providerExecuted is set, it stays for streaming\n anyPart.providerExecuted =\n anyOptions.providerExecuted ?? part.providerExecuted;\n } else {\n state.message.parts.push({\n type: `tool-${options.toolName}`,\n toolCallId: options.toolCallId,\n state: options.state,\n input: anyOptions.input,\n output: anyOptions.output,\n errorText: anyOptions.errorText,\n providerExecuted: anyOptions.providerExecuted,\n } as ToolUIPart<InferUIMessageTools<UI_MESSAGE>>);\n }\n }\n\n async function updateMessageMetadata(metadata: unknown) {\n if (metadata != null) {\n const mergedMetadata =\n state.message.metadata != null\n ? mergeObjects(state.message.metadata, metadata)\n : metadata;\n\n if (messageMetadataSchema != null) {\n await validateTypes({\n value: mergedMetadata,\n schema: messageMetadataSchema,\n });\n }\n\n state.message.metadata =\n mergedMetadata as InferUIMessageMetadata<UI_MESSAGE>;\n }\n }\n\n switch (part.type) {\n case 'text-start': {\n const textPart: TextUIPart = {\n type: 'text',\n text: '',\n state: 'streaming',\n };\n state.activeTextParts[part.id] = textPart;\n state.message.parts.push(textPart);\n write();\n break;\n }\n\n case 'text-delta': {\n state.activeTextParts[part.id].text += part.delta;\n write();\n break;\n }\n\n case 'text-end': {\n const textPart = state.activeTextParts[part.id];\n textPart.state = 'done';\n delete state.activeTextParts[part.id];\n write();\n break;\n }\n\n case 'reasoning-start': {\n const reasoningPart: ReasoningUIPart = {\n type: 'reasoning',\n text: '',\n providerMetadata: part.providerMetadata,\n state: 'streaming',\n };\n state.activeReasoningParts[part.id] = reasoningPart;\n state.message.parts.push(reasoningPart);\n write();\n break;\n }\n\n case 'reasoning-delta': {\n const reasoningPart = state.activeReasoningParts[part.id];\n reasoningPart.text += part.delta;\n reasoningPart.providerMetadata =\n part.providerMetadata ?? reasoningPart.providerMetadata;\n write();\n break;\n }\n\n case 'reasoning-end': {\n const reasoningPart = state.activeReasoningParts[part.id];\n reasoningPart.providerMetadata =\n part.providerMetadata ?? reasoningPart.providerMetadata;\n reasoningPart.state = 'done';\n delete state.activeReasoningParts[part.id];\n\n write();\n break;\n }\n\n case 'file': {\n state.message.parts.push({\n type: 'file',\n mediaType: part.mediaType,\n url: part.url,\n });\n\n write();\n break;\n }\n\n case 'source-url': {\n state.message.parts.push({\n type: 'source-url',\n sourceId: part.sourceId,\n url: part.url,\n title: part.title,\n providerMetadata: part.providerMetadata,\n });\n\n write();\n break;\n }\n\n case 'source-document': {\n state.message.parts.push({\n type: 'source-document',\n sourceId: part.sourceId,\n mediaType: part.mediaType,\n title: part.title,\n filename: part.filename,\n providerMetadata: part.providerMetadata,\n });\n\n write();\n break;\n }\n\n case 'tool-input-start': {\n const toolInvocations = state.message.parts.filter(isToolUIPart);\n\n // add the partial tool call to the map\n state.partialToolCalls[part.toolCallId] = {\n text: '',\n toolName: part.toolName,\n index: toolInvocations.length,\n };\n\n updateToolInvocationPart({\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n state: 'input-streaming',\n input: undefined,\n providerExecuted: part.providerExecuted,\n });\n\n write();\n break;\n }\n\n case 'tool-input-delta': {\n const partialToolCall = state.partialToolCalls[part.toolCallId];\n\n partialToolCall.text += part.inputTextDelta;\n\n const { value: partialArgs } = await parsePartialJson(\n partialToolCall.text,\n );\n\n updateToolInvocationPart({\n toolCallId: part.toolCallId,\n toolName: partialToolCall.toolName,\n state: 'input-streaming',\n input: partialArgs,\n });\n\n write();\n break;\n }\n\n case 'tool-input-available': {\n updateToolInvocationPart({\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n state: 'input-available',\n input: part.input,\n providerExecuted: part.providerExecuted,\n });\n\n write();\n\n // invoke the onToolCall callback if it exists. This is blocking.\n // In the future we should make this non-blocking, which\n // requires additional state management for error handling etc.\n // Skip calling onToolCall for provider-executed tools since they are already executed\n if (onToolCall && !part.providerExecuted) {\n const result = await onToolCall({\n toolCall: part,\n });\n if (result != null) {\n updateToolInvocationPart({\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n state: 'output-available',\n input: part.input,\n output: result,\n });\n\n write();\n }\n }\n break;\n }\n\n case 'tool-output-available': {\n const toolInvocations = state.message.parts.filter(isToolUIPart);\n\n if (toolInvocations == null) {\n throw new Error('tool_result must be preceded by a tool_call');\n }\n\n // find if there is any tool invocation with the same toolCallId\n // and replace it with the result\n const toolInvocationIndex = toolInvocations.findIndex(\n invocation => invocation.toolCallId === part.toolCallId,\n );\n\n if (toolInvocationIndex === -1) {\n throw new Error(\n 'tool_result must be preceded by a tool_call with the same toolCallId',\n );\n }\n\n const toolName = getToolName(\n toolInvocations[toolInvocationIndex],\n );\n\n updateToolInvocationPart({\n toolCallId: part.toolCallId,\n toolName,\n state: 'output-available',\n input: (toolInvocations[toolInvocationIndex] as any).input,\n output: part.output,\n providerExecuted: part.providerExecuted,\n });\n\n write();\n break;\n }\n\n case 'tool-output-error': {\n const toolInvocations = state.message.parts.filter(isToolUIPart);\n\n if (toolInvocations == null) {\n throw new Error('tool_result must be preceded by a tool_call');\n }\n\n // find if there is any tool invocation with the same toolCallId\n // and replace it with the result\n const toolInvocationIndex = toolInvocations.findIndex(\n invocation => invocation.toolCallId === part.toolCallId,\n );\n\n if (toolInvocationIndex === -1) {\n throw new Error(\n 'tool_result must be preceded by a tool_call with the same toolCallId',\n );\n }\n\n const toolName = getToolName(\n toolInvocations[toolInvocationIndex],\n );\n\n updateToolInvocationPart({\n toolCallId: part.toolCallId,\n toolName,\n state: 'output-error',\n input: (toolInvocations[toolInvocationIndex] as any).input,\n errorText: part.errorText,\n providerExecuted: part.providerExecuted,\n });\n\n write();\n break;\n }\n\n case 'start-step': {\n // add a step boundary part to the message\n state.message.parts.push({ type: 'step-start' });\n break;\n }\n\n case 'finish-step': {\n // reset the current text and reasoning parts\n state.activeTextParts = {};\n state.activeReasoningParts = {};\n break;\n }\n\n case 'start': {\n if (part.messageId != null) {\n state.message.id = part.messageId;\n }\n\n await updateMessageMetadata(part.messageMetadata);\n\n if (part.messageId != null || part.messageMetadata != null) {\n write();\n }\n break;\n }\n\n case 'finish': {\n await updateMessageMetadata(part.messageMetadata);\n if (part.messageMetadata != null) {\n write();\n }\n break;\n }\n\n case 'message-metadata': {\n await updateMessageMetadata(part.messageMetadata);\n if (part.messageMetadata != null) {\n write();\n }\n break;\n }\n\n case 'error': {\n onError?.(new Error(part.errorText));\n break;\n }\n\n default: {\n if (isDataUIMessageChunk(part)) {\n // TODO validate against dataPartSchemas\n const dataPart = part as DataUIMessageChunk<\n InferUIMessageData<UI_MESSAGE>\n >;\n\n // transient parts are not added to the message state\n if (dataPart.transient) {\n onData?.(dataPart);\n break;\n }\n\n // TODO improve type safety\n const existingPart: any =\n dataPart.id != null\n ? state.message.parts.find(\n (partArg: any) =>\n dataPart.type === partArg.type &&\n dataPart.id === partArg.id,\n )\n : undefined;\n\n if (existingPart != null) {\n // TODO validate merged data against dataPartSchemas\n existingPart.data =\n isObject(existingPart.data) && isObject(dataPart.data)\n ? mergeObjects(existingPart.data, dataPart.data)\n : dataPart.data;\n } else {\n state.message.parts.push(dataPart);\n }\n\n onData?.(dataPart);\n\n write();\n }\n }\n }\n\n controller.enqueue(part as InferUIMessageChunk<UI_MESSAGE>);\n });\n },\n }),\n );\n}\n\nfunction isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null;\n}\n","import { z } from 'zod/v4';\nimport { ValueOf } from '../util/value-of';\nimport {\n InferUIMessageData,\n InferUIMessageMetadata,\n UIDataTypes,\n UIMessage,\n} from '../ui/ui-messages';\nimport { ProviderMetadata } from '../types/provider-metadata';\n\nexport const uiMessageChunkSchema = z.union([\n z.strictObject({\n type: z.literal('text-start'),\n id: z.string(),\n }),\n z.strictObject({\n type: z.literal('text-delta'),\n id: z.string(),\n delta: z.string(),\n }),\n z.strictObject({\n type: z.literal('text-end'),\n id: z.string(),\n }),\n z.strictObject({\n type: z.literal('error'),\n errorText: z.string(),\n }),\n z.strictObject({\n type: z.literal('tool-input-start'),\n toolCallId: z.string(),\n toolName: z.string(),\n providerExecuted: z.boolean().optional(),\n }),\n z.strictObject({\n type: z.literal('tool-input-delta'),\n toolCallId: z.string(),\n inputTextDelta: z.string(),\n }),\n z.strictObject({\n type: z.literal('tool-input-available'),\n toolCallId: z.string(),\n toolName: z.string(),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n }),\n z.strictObject({\n type: z.literal('tool-output-available'),\n toolCallId: z.string(),\n output: z.unknown(),\n providerExecuted: z.boolean().optional(),\n }),\n z.strictObject({\n type: z.literal('tool-output-error'),\n toolCallId: z.string(),\n errorText: z.string(),\n providerExecuted: z.boolean().optional(),\n }),\n z.strictObject({\n type: z.literal('reasoning'),\n text: z.string(),\n providerMetadata: z.record(z.string(), z.any()).optional(),\n }),\n z.strictObject({\n type: z.literal('reasoning-start'),\n id: z.string(),\n providerMetadata: z.record(z.string(), z.any()).optional(),\n }),\n z.strictObject({\n type: z.literal('reasoning-delta'),\n id: z.string(),\n delta: z.string(),\n providerMetadata: z.record(z.string(), z.any()).optional(),\n }),\n z.strictObject({\n type: z.literal('reasoning-end'),\n id: z.string(),\n providerMetadata: z.record(z.string(), z.any()).optional(),\n }),\n z.strictObject({\n type: z.literal('reasoning-part-finish'),\n }),\n z.strictObject({\n type: z.literal('source-url'),\n sourceId: z.string(),\n url: z.string(),\n title: z.string().optional(),\n providerMetadata: z.any().optional(), // Use z.any() for generic metadata\n }),\n z.strictObject({\n type: z.literal('source-document'),\n sourceId: z.string(),\n mediaType: z.string(),\n title: z.string(),\n filename: z.string().optional(),\n providerMetadata: z.any().optional(), // Use z.any() for generic metadata\n }),\n z.strictObject({\n type: z.literal('file'),\n url: z.string(),\n mediaType: z.string(),\n }),\n z.strictObject({\n type: z.string().startsWith('data-'),\n id: z.string().optional(),\n data: z.unknown(),\n transient: z.boolean().optional(),\n }),\n z.strictObject({\n type: z.literal('start-step'),\n }),\n z.strictObject({\n type: z.literal('finish-step'),\n }),\n z.strictObject({\n type: z.literal('start'),\n messageId: z.string().optional(),\n messageMetadata: z.unknown().optional(),\n }),\n z.strictObject({\n type: z.literal('finish'),\n messageMetadata: z.unknown().optional(),\n }),\n z.strictObject({\n type: z.literal('message-metadata'),\n messageMetadata: z.unknown(),\n }),\n]);\n\nexport type DataUIMessageChunk<DATA_TYPES extends UIDataTypes> = ValueOf<{\n [NAME in keyof DATA_TYPES & string]: {\n type: `data-${NAME}`;\n id?: string;\n data: DATA_TYPES[NAME];\n transient?: boolean;\n };\n}>;\n\nexport type UIMessageChunk<\n METADATA = unknown,\n DATA_TYPES extends UIDataTypes = UIDataTypes,\n> =\n | { type: 'text-start'; id: string }\n | { type: 'text-delta'; delta: string; id: string }\n | { type: 'text-end'; id: string }\n | { type: 'reasoning-start'; id: string; providerMetadata?: ProviderMetadata }\n | {\n type: 'reasoning-delta';\n id: string;\n delta: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'reasoning-end';\n id: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'error';\n errorText: string;\n }\n | {\n type: 'tool-input-available';\n toolCallId: string;\n toolName: string;\n input: unknown;\n providerExecuted?: boolean;\n }\n | {\n type: 'tool-output-available';\n toolCallId: string;\n output: unknown;\n providerExecuted?: boolean;\n }\n | {\n type: 'tool-output-error';\n toolCallId: string;\n errorText: string;\n providerExecuted?: boolean;\n }\n | {\n type: 'tool-input-start';\n toolCallId: string;\n toolName: string;\n providerExecuted?: boolean;\n }\n | {\n type: 'tool-input-delta';\n toolCallId: string;\n inputTextDelta: string;\n }\n | {\n type: 'source-url';\n sourceId: string;\n url: string;\n title?: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'source-document';\n sourceId: string;\n mediaType: string;\n title: string;\n filename?: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'file';\n url: string;\n mediaType: string;\n }\n | DataUIMessageChunk<DATA_TYPES>\n | {\n type: 'start-step';\n }\n | {\n type: 'finish-step';\n }\n | {\n type: 'start';\n messageId?: string;\n messageMetadata?: METADATA;\n }\n | {\n type: 'finish';\n messageMetadata?: METADATA;\n }\n | {\n type: 'message-metadata';\n messageMetadata: METADATA;\n };\n\nexport function isDataUIMessageChunk(\n chunk: UIMessageChunk,\n): chunk is DataUIMessageChunk<UIDataTypes> {\n return chunk.type.startsWith('data-');\n}\n\nexport type InferUIMessageChunk<T extends UIMessage> = UIMessageChunk<\n InferUIMessageMetadata<T>,\n InferUIMessageData<T>\n>;\n","/**\n * Deeply merges two objects together.\n * - Properties from the `overrides` object override those in the `base` object with the same key.\n * - For nested objects, the merge is performed recursively (deep merge).\n * - Arrays are replaced, not merged.\n * - Primitive values are replaced.\n * - If both `base` and `overrides` are undefined, returns undefined.\n * - If one of `base` or `overrides` is undefined, returns the other.\n *\n * @param base The target object to merge into\n * @param overrides The source object to merge from\n * @returns A new object with the merged properties, or undefined if both inputs are undefined\n */\nexport function mergeObjects<T extends object, U extends object>(\n base: T | undefined,\n overrides: U | undefined,\n): (T & U) | T | U | undefined {\n // If both inputs are undefined, return undefined\n if (base === undefined && overrides === undefined) {\n return undefined;\n }\n\n // If target is undefined, return source\n if (base === undefined) {\n return overrides;\n }\n\n // If source is undefined, return target\n if (overrides === undefined) {\n return base;\n }\n\n // Create a new object to avoid mutating the inputs\n const result = { ...base } as T & U;\n\n // Iterate through all keys in the source object\n for (const key in overrides) {\n if (Object.prototype.hasOwnProperty.call(overrides, key)) {\n const overridesValue = overrides[key];\n\n // Skip if the overrides value is undefined\n if (overridesValue === undefined) continue;\n\n // Get the base value if it exists\n const baseValue =\n key in base ? base[key as unknown as keyof T] : undefined;\n\n // Check if both values are objects that can be deeply merged\n const isSourceObject =\n overridesValue !== null &&\n typeof overridesValue === 'object' &&\n !Array.isArray(overridesValue) &&\n !(overridesValue instanceof Date) &&\n !(overridesValue instanceof RegExp);\n\n const isTargetObject =\n baseValue !== null &&\n baseValue !== undefined &&\n typeof baseValue === 'object' &&\n !Array.isArray(baseValue) &&\n !(baseValue instanceof Date) &&\n !(baseValue instanceof RegExp);\n\n // If both values are mergeable objects, merge them recursively\n if (isSourceObject && isTargetObject) {\n result[key as keyof (T & U)] = mergeObjects(\n baseValue as object,\n overridesValue as object,\n ) as any;\n } else {\n // For primitives, arrays, or when one value is not a mergeable object,\n // simply override with the source value\n result[key as keyof (T & U)] = overridesValue as any;\n }\n }\n }\n\n return result;\n}\n","import { JSONValue } from '@ai-sdk/provider';\nimport { safeParseJSON } from '@ai-sdk/provider-utils';\nimport { fixJson } from './fix-json';\n\nexport async function parsePartialJson(jsonText: string | undefined): Promise<{\n value: JSONValue | undefined;\n state:\n | 'undefined-input'\n | 'successful-parse'\n | 'repaired-parse'\n | 'failed-parse';\n}> {\n if (jsonText === undefined) {\n return { value: undefined, state: 'undefined-input' };\n }\n\n let result = await safeParseJSON({ text: jsonText });\n\n if (result.success) {\n return { value: result.value, state: 'successful-parse' };\n }\n\n result = await safeParseJSON({ text: fixJson(jsonText) });\n\n if (result.success) {\n return { value: result.value, state: 'repaired-parse' };\n }\n\n return { value: undefined, state: 'failed-parse' };\n}\n","type State =\n | 'ROOT'\n | 'FINISH'\n | 'INSIDE_STRING'\n | 'INSIDE_STRING_ESCAPE'\n | 'INSIDE_LITERAL'\n | 'INSIDE_NUMBER'\n | 'INSIDE_OBJECT_START'\n | 'INSIDE_OBJECT_KEY'\n | 'INSIDE_OBJECT_AFTER_KEY'\n | 'INSIDE_OBJECT_BEFORE_VALUE'\n | 'INSIDE_OBJECT_AFTER_VALUE'\n | 'INSIDE_OBJECT_AFTER_COMMA'\n | 'INSIDE_ARRAY_START'\n | 'INSIDE_ARRAY_AFTER_VALUE'\n | 'INSIDE_ARRAY_AFTER_COMMA';\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n const stack: State[] = ['ROOT'];\n let lastValidIndex = -1;\n let literalStart: number | null = null;\n\n function processValueStart(char: string, i: number, swapState: State) {\n {\n switch (char) {\n case '\"': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_STRING');\n break;\n }\n\n case 'f':\n case 't':\n case 'n': {\n lastValidIndex = i;\n literalStart = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_LITERAL');\n break;\n }\n\n case '-': {\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_NUMBER');\n break;\n }\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_NUMBER');\n break;\n }\n\n case '{': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_OBJECT_START');\n break;\n }\n\n case '[': {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push('INSIDE_ARRAY_START');\n break;\n }\n }\n }\n }\n\n function processAfterObjectValue(char: string, i: number) {\n switch (char) {\n case ',': {\n stack.pop();\n stack.push('INSIDE_OBJECT_AFTER_COMMA');\n break;\n }\n case '}': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n function processAfterArrayValue(char: string, i: number) {\n switch (char) {\n case ',': {\n stack.pop();\n stack.push('INSIDE_ARRAY_AFTER_COMMA');\n break;\n }\n case ']': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n }\n\n for (let i = 0; i < input.length; i++) {\n const char = input[i];\n const currentState = stack[stack.length - 1];\n\n switch (currentState) {\n case 'ROOT':\n processValueStart(char, i, 'FINISH');\n break;\n\n case 'INSIDE_OBJECT_START': {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push('INSIDE_OBJECT_KEY');\n break;\n }\n case '}': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_AFTER_COMMA': {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push('INSIDE_OBJECT_KEY');\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_KEY': {\n switch (char) {\n case '\"': {\n stack.pop();\n stack.push('INSIDE_OBJECT_AFTER_KEY');\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_AFTER_KEY': {\n switch (char) {\n case ':': {\n stack.pop();\n stack.push('INSIDE_OBJECT_BEFORE_VALUE');\n\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_OBJECT_BEFORE_VALUE': {\n processValueStart(char, i, 'INSIDE_OBJECT_AFTER_VALUE');\n break;\n }\n\n case 'INSIDE_OBJECT_AFTER_VALUE': {\n processAfterObjectValue(char, i);\n break;\n }\n\n case 'INSIDE_STRING': {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n\n case '\\\\': {\n stack.push('INSIDE_STRING_ESCAPE');\n break;\n }\n\n default: {\n lastValidIndex = i;\n }\n }\n\n break;\n }\n\n case 'INSIDE_ARRAY_START': {\n switch (char) {\n case ']': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n break;\n }\n }\n break;\n }\n\n case 'INSIDE_ARRAY_AFTER_VALUE': {\n switch (char) {\n case ',': {\n stack.pop();\n stack.push('INSIDE_ARRAY_AFTER_COMMA');\n break;\n }\n\n case ']': {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n\n default: {\n lastValidIndex = i;\n break;\n }\n }\n\n break;\n }\n\n case 'INSIDE_ARRAY_AFTER_COMMA': {\n processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n break;\n }\n\n case 'INSIDE_STRING_ESCAPE': {\n stack.pop();\n lastValidIndex = i;\n\n break;\n }\n\n case 'INSIDE_NUMBER': {\n switch (char) {\n case '0':\n case '1':\n case '2':\n case '3':\n case '4':\n case '5':\n case '6':\n case '7':\n case '8':\n case '9': {\n lastValidIndex = i;\n break;\n }\n\n case 'e':\n case 'E':\n case '-':\n case '.': {\n break;\n }\n\n case ',': {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i);\n }\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case '}': {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i);\n }\n\n break;\n }\n\n case ']': {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i);\n }\n\n break;\n }\n\n default: {\n stack.pop();\n break;\n }\n }\n\n break;\n }\n\n case 'INSIDE_LITERAL': {\n const partialLiteral = input.substring(literalStart!, i + 1);\n\n if (\n !'false'.startsWith(partialLiteral) &&\n !'true'.startsWith(partialLiteral) &&\n !'null'.startsWith(partialLiteral)\n ) {\n stack.pop();\n\n if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n processAfterObjectValue(char, i);\n } else if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n processAfterArrayValue(char, i);\n }\n } else {\n lastValidIndex = i;\n }\n\n break;\n }\n }\n }\n\n let result = input.slice(0, lastValidIndex + 1);\n\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n\n switch (state) {\n case 'INSIDE_STRING': {\n result += '\"';\n break;\n }\n\n case 'INSIDE_OBJECT_KEY':\n case 'INSIDE_OBJECT_AFTER_KEY':\n case 'INSIDE_OBJECT_AFTER_COMMA':\n case 'INSIDE_OBJECT_START':\n case 'INSIDE_OBJECT_BEFORE_VALUE':\n case 'INSIDE_OBJECT_AFTER_VALUE': {\n result += '}';\n break;\n }\n\n case 'INSIDE_ARRAY_START':\n case 'INSIDE_ARRAY_AFTER_COMMA':\n case 'INSIDE_ARRAY_AFTER_VALUE': {\n result += ']';\n break;\n }\n\n case 'INSIDE_LITERAL': {\n const partialLiteral = input.substring(literalStart!, input.length);\n\n if ('true'.startsWith(partialLiteral)) {\n result += 'true'.slice(partialLiteral.length);\n } else if ('false'.startsWith(partialLiteral)) {\n result += 'false'.slice(partialLiteral.length);\n } else if ('null'.startsWith(partialLiteral)) {\n result += 'null'.slice(partialLiteral.length);\n }\n }\n }\n }\n\n return result;\n}\n","import { InferToolInput, InferToolOutput, Tool } from '@ai-sdk/provider-utils';\nimport { ToolSet } from '../generate-text';\nimport { DeepPartial } from '../util/deep-partial';\nimport { ValueOf } from '../util/value-of';\n\n/**\nThe data types that can be used in the UI message for the UI message data parts.\n */\nexport type UIDataTypes = Record<string, unknown>;\n\nexport type UITool = {\n input: unknown;\n output: unknown | undefined;\n};\n\n/**\n * Infer the input and output types of a tool so it can be used as a UI tool.\n */\nexport type InferUITool<TOOL extends Tool> = {\n input: InferToolInput<TOOL>;\n output: InferToolOutput<TOOL>;\n};\n\n/**\n * Infer the input and output types of a tool set so it can be used as a UI tool set.\n */\nexport type InferUITools<TOOLS extends ToolSet> = {\n [NAME in keyof TOOLS & string]: InferUITool<TOOLS[NAME]>;\n};\n\nexport type UITools = Record<string, UITool>;\n\n/**\nAI SDK UI Messages. They are used in the client and to communicate between the frontend and the API routes.\n */\nexport interface UIMessage<\n METADATA = unknown,\n DATA_PARTS extends UIDataTypes = UIDataTypes,\n TOOLS extends UITools = UITools,\n> {\n /**\nA unique identifier for the message.\n */\n id: string;\n\n /**\nThe role of the message.\n */\n role: 'system' | 'user' | 'assistant';\n\n /**\nThe metadata of the message.\n */\n metadata?: METADATA;\n\n /**\nThe parts of the message. Use this for rendering the message in the UI.\n\nSystem messages should be avoided (set the system prompt on the server instead).\nThey can have text parts.\n\nUser messages can have text parts and file parts.\n\nAssistant messages can have text, reasoning, tool invocation, and file parts.\n */\n parts: Array<UIMessagePart<DATA_PARTS, TOOLS>>;\n}\n\nexport type UIMessagePart<\n DATA_TYPES extends UIDataTypes,\n TOOLS extends UITools,\n> =\n | TextUIPart\n | ReasoningUIPart\n | ToolUIPart<TOOLS>\n | SourceUrlUIPart\n | SourceDocumentUIPart\n | FileUIPart\n | DataUIPart<DATA_TYPES>\n | StepStartUIPart;\n\n/**\n * A text part of a message.\n */\nexport type TextUIPart = {\n type: 'text';\n\n /**\n * The text content.\n */\n text: string;\n\n /**\n * The state of the text part.\n */\n state?: 'streaming' | 'done';\n};\n\n/**\n * A reasoning part of a message.\n */\nexport type ReasoningUIPart = {\n type: 'reasoning';\n\n /**\n * The reasoning text.\n */\n text: string;\n\n /**\n * The state of the reasoning part.\n */\n state?: 'streaming' | 'done';\n\n /**\n * The provider metadata.\n */\n providerMetadata?: Record<string, any>;\n};\n\n/**\n * A source part of a message.\n */\nexport type SourceUrlUIPart = {\n type: 'source-url';\n sourceId: string;\n url: string;\n title?: string;\n providerMetadata?: Record<string, any>;\n};\n\n/**\n * A document source part of a message.\n */\nexport type SourceDocumentUIPart = {\n type: 'source-document';\n sourceId: string;\n mediaType: string;\n title: string;\n filename?: string;\n providerMetadata?: Record<string, any>;\n};\n\n/**\n * A file part of a message.\n */\nexport type FileUIPart = {\n type: 'file';\n\n /**\n * IANA media type of the file.\n *\n * @see https://www.iana.org/assignments/media-types/media-types.xhtml\n */\n mediaType: string;\n\n /**\n * Optional filename of the file.\n */\n filename?: string;\n\n /**\n * The URL of the file.\n * It can either be a URL to a hosted file or a [Data URL](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs).\n */\n url: string;\n};\n\n/**\n * A step boundary part of a message.\n */\nexport type StepStartUIPart = {\n type: 'step-start';\n};\n\nexport type DataUIPart<DATA_TYPES extends UIDataTypes> = ValueOf<{\n [NAME in keyof DATA_TYPES & string]: {\n type: `data-${NAME}`;\n id?: string;\n data: DATA_TYPES[NAME];\n };\n}>;\n\nexport type ToolUIPart<TOOLS extends UITools = UITools> = ValueOf<{\n [NAME in keyof TOOLS & string]: {\n type: `tool-${NAME}`;\n toolCallId: string;\n } & (\n | {\n state: 'input-streaming';\n input: DeepPartial<TOOLS[NAME]['input']> | undefined;\n providerExecuted?: boolean;\n output?: never;\n errorText?: never;\n }\n | {\n state: 'input-available';\n input: TOOLS[NAME]['input'];\n providerExecuted?: boolean;\n output?: never;\n errorText?: never;\n }\n | {\n state: 'output-available';\n input: TOOLS[NAME]['input'];\n output: TOOLS[NAME]['output'];\n errorText?: never;\n providerExecuted?: boolean;\n }\n | {\n state: 'output-error';\n input: TOOLS[NAME]['input'];\n output?: never;\n errorText: string;\n providerExecuted?: boolean;\n }\n );\n}>;\n\nexport function isToolUIPart<TOOLS extends UITools>(\n part: UIMessagePart<UIDataTypes, TOOLS>,\n): part is ToolUIPart<TOOLS> {\n return part.type.startsWith('tool-');\n}\n\nexport function getToolName<TOOLS extends UITools>(\n part: ToolUIPart<TOOLS>,\n): keyof TOOLS {\n return part.type.split('-')[1] as keyof TOOLS;\n}\n\nexport type InferUIMessageMetadata<T extends UIMessage> =\n T extends UIMessage<infer METADATA> ? METADATA : unknown;\n\nexport type InferUIMessageData<T extends UIMessage> =\n T extends UIMessage<unknown, infer DATA_TYPES> ? DATA_TYPES : UIDataTypes;\n\nexport type InferUIMessageTools<T extends UIMessage> =\n T extends UIMessage<unknown, UIDataTypes, infer TOOLS> ? TOOLS : UITools;\n","import {\n createStreamingUIMessageState,\n processUIMessageStream,\n StreamingUIMessageState,\n} from '../ui/process-ui-message-stream';\nimport { UIMessage } from '../ui/ui-messages';\nimport { ErrorHandler } from '../util/error-handler';\nimport { InferUIMessageChunk, UIMessageChunk } from './ui-message-chunks';\n\nexport function handleUIMessageStreamFinish<UI_MESSAGE extends UIMessage>({\n messageId,\n originalMessages = [],\n onFinish,\n onError,\n stream,\n}: {\n stream: ReadableStream<InferUIMessageChunk<UI_MESSAGE>>;\n\n /**\n * The message ID to use for the response message.\n * If not provided, no id will be set for the response message.\n */\n messageId?: string;\n\n /**\n * The original messages.\n */\n originalMessages?: UI_MESSAGE[];\n\n onError: ErrorHandler;\n\n onFinish?: (options: {\n /**\n * The updates list of UI messages.\n */\n messages: UI_MESSAGE[];\n\n /**\n * Indicates whether the response message is a continuation of the last original message,\n * or if a new message was created.\n */\n isContinuation: boolean;\n\n /**\n * The message that was sent to the client as a response\n * (including the original message if it was extended).\n */\n responseMessage: UI_MESSAGE;\n }) => void;\n}): ReadableStream<InferUIMessageChunk<UI_MESSAGE>> {\n // last message is only relevant for assistant messages\n let lastMessage: UI_MESSAGE | undefined =\n originalMessages?.[originalMessages.length - 1];\n if (lastMessage?.role !== 'assistant') {\n lastMessage = undefined;\n } else {\n // appending to the last message, so we need to use the same id\n messageId = lastMessage.id;\n }\n\n const idInjectedStream = stream.pipeThrough(\n new TransformStream<\n InferUIMessageChunk<UI_MESSAGE>,\n InferUIMessageChunk<UI_MESSAGE>\n >({\n transform(chunk, controller) {\n // when there is no messageId in the start chunk,\n // but the user checked for persistence,\n // inject the messageId into the chunk\n if (chunk.type === 'start') {\n const startChunk = chunk as UIMessageChunk & { type: 'start' };\n if (startChunk.messageId == null && messageId != null) {\n startChunk.messageId = messageId;\n }\n }\n\n controller.enqueue(chunk);\n },\n }),\n );\n\n if (onFinish == null) {\n return idInjectedStream;\n }\n\n const state = createStreamingUIMessageState<UI_MESSAGE>({\n lastMessage: lastMessage\n ? (structuredClone(lastMessage) as UI_MESSAGE)\n : undefined,\n messageId: messageId ?? '', // will be overridden by the stream\n });\n\n const runUpdateMessageJob = async (\n job: (options: {\n state: StreamingUIMessageState<UI_MESSAGE>;\n write: () => void;\n }) => Promise<void>,\n ) => {\n await job({ state, write: () => {} });\n };\n\n return processUIMessageStream<UI_MESSAGE>({\n stream: idInjectedStream,\n runUpdateMessageJob,\n onError,\n }).pipeThrough(\n new TransformStream<\n InferUIMessageChunk<UI_MESSAGE>,\n InferUIMessageChunk<UI_MESSAGE>\n >({\n transform(chunk, controller) {\n controller.enqueue(chunk);\n },\n\n flush() {\n const isContinuation = state.message.id === lastMessage?.id;\n onFinish({\n isContinuation,\n responseMessage: state.message as UI_MESSAGE,\n messages: [\n ...(isContinuation\n ? originalMessages.slice(0, -1)\n : originalMessages),\n state.message,\n ] as UI_MESSAGE[],\n });\n },\n }),\n );\n}\n","import { ServerResponse } from 'node:http';\nimport { prepareHeaders } from '../util/prepare-headers';\nimport { writeToServerResponse } from '../util/write-to-server-response';\nimport { JsonToSseTransformStream } from './json-to-sse-transform-stream';\nimport { UI_MESSAGE_STREAM_HEADERS } from './ui-message-stream-headers';\nimport { UIMessageChunk } from './ui-message-chunks';\nimport { UIMessageStreamResponseInit } from './ui-message-stream-response-init';\n\nexport function pipeUIMessageStreamToResponse({\n response,\n status,\n statusText,\n headers,\n stream,\n consumeSseStream,\n}: {\n response: ServerResponse;\n stream: ReadableStream<UIMessageChunk>;\n} & UIMessageStreamResponseInit): void {\n let sseStream = stream.pipeThrough(new JsonToSseTransformStream());\n\n // when the consumeSseStream is provided, we need to tee the stream\n // and send the second part to the consumeSseStream function\n // so that it can be consumed by the client independently\n if (consumeSseStream) {\n const [stream1, stream2] = sseStream.tee();\n sseStream = stream1;\n consumeSseStream({ stream: stream2 }); // no await (do not block the response)\n }\n\n writeToServerResponse({\n response,\n status,\n statusText,\n headers: Object.fromEntries(\n prepareHeaders(headers, UI_MESSAGE_STREAM_HEADERS).entries(),\n ),\n stream: sseStream.pipeThrough(new TextEncoderStream()),\n });\n}\n","export function asArray<T>(value: T | T[] | undefined): T[] {\n return value === undefined ? [] : Array.isArray(value) ? value : [value];\n}\n","export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;\n\nexport function createAsyncIterableStream<T>(\n source: ReadableStream<T>,\n): AsyncIterableStream<T> {\n const stream = source.pipeThrough(new TransformStream<T, T>());\n\n (stream as AsyncIterableStream<T>)[Symbol.asyncIterator] = () => {\n const reader = stream.getReader();\n return {\n async next(): Promise<IteratorResult<T>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n };\n\n return stream as AsyncIterableStream<T>;\n}\n","/**\n * Consumes a ReadableStream until it's fully read.\n *\n * This function reads the stream chunk by chunk until the stream is exhausted.\n * It doesn't process or return the data from the stream; it simply ensures\n * that the entire stream is read.\n *\n * @param {ReadableStream} stream - The ReadableStream to be consumed.\n * @returns {Promise<void>} A promise that resolves when the stream is fully consumed.\n */\nexport async function consumeStream({\n stream,\n onError,\n}: {\n stream: ReadableStream;\n onError?: (error: unknown) => void;\n}): Promise<void> {\n const reader = stream.getReader();\n try {\n while (true) {\n const { done } = await reader.read();\n if (done) break;\n }\n } catch (error) {\n onError?.(error);\n } finally {\n reader.releaseLock();\n }\n}\n","import { ErrorHandler } from './error-handler';\n\n/**\n * Creates a Promise with externally accessible resolve and reject functions.\n *\n * @template T - The type of the value that the Promise will resolve to.\n * @returns An object containing:\n * - promise: A Promise that can be resolved or rejected externally.\n * - resolve: A function to resolve the Promise with a value of type T.\n * - reject: A function to reject the Promise with an error.\n */\nexport function createResolvablePromise<T = any>(): {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: ErrorHandler;\n} {\n let resolve: (value: T) => void;\n let reject: ErrorHandler;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return {\n promise,\n resolve: resolve!,\n reject: reject!,\n };\n}\n","import { createResolvablePromise } from './create-resolvable-promise';\n\n/**\n * Creates a stitchable stream that can pipe one stream at a time.\n *\n * @template T - The type of values emitted by the streams.\n * @returns {Object} An object containing the stitchable stream and control methods.\n */\nexport function createStitchableStream<T>(): {\n stream: ReadableStream<T>;\n addStream: (innerStream: ReadableStream<T>) => void;\n close: () => void;\n terminate: () => void;\n} {\n let innerStreamReaders: ReadableStreamDefaultReader<T>[] = [];\n let controller: ReadableStreamDefaultController<T> | null = null;\n let isClosed = false;\n let waitForNewStream = createResolvablePromise<void>();\n\n const processPull = async () => {\n // Case 1: Outer stream is closed and no more inner streams\n if (isClosed && innerStreamReaders.length === 0) {\n controller?.close();\n return;\n }\n\n // Case 2: No inner streams available, but outer stream is open\n // wait for a new inner stream to be added or the outer stream to close\n if (innerStreamReaders.length === 0) {\n waitForNewStream = createResolvablePromise<void>();\n await waitForNewStream.promise;\n return processPull();\n }\n\n try {\n const { value, done } = await innerStreamReaders[0].read();\n\n if (done) {\n // Case 3: Current inner stream is done\n innerStreamReaders.shift(); // Remove the finished stream\n\n // Continue pulling from the next stream if available\n if (innerStreamReaders.length > 0) {\n await processPull();\n } else if (isClosed) {\n controller?.close();\n }\n } else {\n // Case 4: Current inner stream returns an item\n controller?.enqueue(value);\n }\n } catch (error) {\n // Case 5: Current inner stream throws an error\n controller?.error(error);\n innerStreamReaders.shift(); // Remove the errored stream\n\n if (isClosed && innerStreamReaders.length === 0) {\n controller?.close();\n }\n }\n };\n\n return {\n stream: new ReadableStream<T>({\n start(controllerParam) {\n controller = controllerParam;\n },\n pull: processPull,\n async cancel() {\n for (const reader of innerStreamReaders) {\n await reader.cancel();\n }\n innerStreamReaders = [];\n isClosed = true;\n },\n }),\n addStream: (innerStream: ReadableStream<T>) => {\n if (isClosed) {\n throw new Error('Cannot add inner stream: outer stream is closed');\n }\n\n innerStreamReaders.push(innerStream.getReader());\n waitForNewStream.resolve();\n },\n\n /**\n * Gracefully close the outer stream. This will let the inner streams\n * finish processing and then close the outer stream.\n */\n close: () => {\n isClosed = true;\n waitForNewStream.resolve();\n\n if (innerStreamReaders.length === 0) {\n controller?.close();\n }\n },\n\n /**\n * Immediately close the outer stream. This will cancel all inner streams\n * and close the outer stream.\n */\n terminate: () => {\n isClosed = true;\n waitForNewStream.resolve();\n\n innerStreamReaders.forEach(reader => reader.cancel());\n innerStreamReaders = [];\n controller?.close();\n },\n };\n}\n","/**\n * Delayed promise. It is only constructed once the value is accessed.\n * This is useful to avoid unhandled promise rejections when the promise is created\n * but not accessed.\n */\nexport class DelayedPromise<T> {\n private status:\n | { type: 'pending' }\n | { type: 'resolved'; value: T }\n | { type: 'rejected'; error: unknown } = { type: 'pending' };\n private _promise: Promise<T> | undefined;\n private _resolve: undefined | ((value: T) => void) = undefined;\n private _reject: undefined | ((error: unknown) => void) = undefined;\n\n get promise(): Promise<T> {\n if (this._promise) {\n return this._promise;\n }\n\n this._promise = new Promise<T>((resolve, reject) => {\n if (this.status.type === 'resolved') {\n resolve(this.status.value);\n } else if (this.status.type === 'rejected') {\n reject(this.status.error);\n }\n\n this._resolve = resolve;\n this._reject = reject;\n });\n\n return this._promise;\n }\n\n resolve(value: T): void {\n this.status = { type: 'resolved', value };\n\n if (this._promise) {\n this._resolve?.(value);\n }\n }\n\n reject(error: unknown): void {\n this.status = { type: 'rejected', error };\n\n if (this._promise) {\n this._reject?.(error);\n }\n }\n}\n","// Shim for performance.now() to support environments that don't have it:\nexport function now(): number {\n return globalThis?.performance?.now() ?? Date.now();\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 { 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\n/**\n * Determines the retry delay for a failed API call by checking rate limit headers.\n *\n * This matches the implementation used by both Anthropic and OpenAI client SDKs:\n * - First checks for 'retry-after-ms' header (milliseconds)\n * - Falls back to 'retry-after' header (seconds or HTTP date)\n * - Only uses the header value if it's reasonable (between 0 and 60 seconds)\n * - Falls back to exponential backoff if no valid headers or if the delay is unreasonable\n *\n * @param error - The API call error containing response headers\n * @param exponentialBackoffDelay - The calculated exponential backoff delay to use as fallback\n * @returns The delay in milliseconds to wait before retrying\n */\nfunction getRetryDelay(\n error: APICallError,\n exponentialBackoffDelay: number,\n): number {\n const headers = error.responseHeaders;\n if (!headers) return exponentialBackoffDelay;\n\n let timeoutMillis: number | undefined;\n\n // Note the `retry-after-ms` header may not be standard, but is a good idea and we'd like proactive support for it.\n const retryAfterMs = headers['retry-after-ms'];\n if (retryAfterMs) {\n const timeoutMs = parseFloat(retryAfterMs);\n if (!Number.isNaN(timeoutMs)) {\n timeoutMillis = 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 && timeoutMillis === undefined) {\n const timeoutSeconds = parseFloat(retryAfter);\n if (!Number.isNaN(timeoutSeconds)) {\n timeoutMillis = timeoutSeconds * 1000;\n } else {\n timeoutMillis = Date.parse(retryAfter) - Date.now();\n }\n }\n\n // If the API asks us to wait a certain amount of time (and it's a reasonable amount),\n // just do what it says, but otherwise calculate a default\n if (\n timeoutMillis !== undefined &&\n 0 <= timeoutMillis &&\n timeoutMillis < 60 * 1000\n ) {\n return timeoutMillis;\n }\n\n return exponentialBackoffDelay;\n}\n\n/**\nThe `retryWithExponentialBackoffRespectingRetryHeaders` strategy retries a failed API call with an exponential backoff,\nwhile respecting rate limit headers (retry-after-ms and retry-after) if they are provided and reasonable (0-60 seconds).\nYou 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 } = {}): RetryFunction =>\n async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n _retryWithExponentialBackoff(f, {\n maxRetries,\n delayInMs: initialDelayInMs,\n backoffFactor,\n });\n\nasync function _retryWithExponentialBackoff<OUTPUT>(\n f: () => PromiseLike<OUTPUT>,\n {\n maxRetries,\n delayInMs,\n backoffFactor,\n }: { maxRetries: number; delayInMs: number; backoffFactor: number },\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 // Check for rate limit headers and use them if reasonable (0-60s)\n const actualDelay = getRetryDelay(error, delayInMs);\n\n await delay(actualDelay);\n return _retryWithExponentialBackoff(\n f,\n { maxRetries, delayInMs: backoffFactor * delayInMs, backoffFactor },\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 '../../src/error/invalid-argument-error';\nimport {\n RetryFunction,\n retryWithExponentialBackoffRespectingRetryHeaders,\n} from '../../src/util/retry-with-exponential-backoff';\n\n/**\n * Validate and prepare retries.\n */\nexport function prepareRetries({\n maxRetries,\n}: {\n maxRetries: number | 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 }),\n };\n}\n","import {\n LanguageModelV2FilePart,\n LanguageModelV2Message,\n LanguageModelV2Prompt,\n LanguageModelV2TextPart,\n} from '@ai-sdk/provider';\nimport {\n DataContent,\n FilePart,\n ImagePart,\n isUrlSupported,\n ModelMessage,\n TextPart,\n} from '@ai-sdk/provider-utils';\nimport {\n detectMediaType,\n imageMediaTypeSignatures,\n} from '../../src/util/detect-media-type';\nimport { download } from '../../src/util/download';\nimport { convertToLanguageModelV2DataContent } from './data-content';\nimport { InvalidMessageRoleError } from './invalid-message-role-error';\nimport { StandardizedPrompt } from './standardize-prompt';\n\nexport async function convertToLanguageModelPrompt({\n prompt,\n supportedUrls,\n downloadImplementation = download,\n}: {\n prompt: StandardizedPrompt;\n supportedUrls: Record<string, RegExp[]>;\n downloadImplementation?: typeof download;\n}): Promise<LanguageModelV2Prompt> {\n const downloadedAssets = await downloadAssets(\n prompt.messages,\n downloadImplementation,\n supportedUrls,\n );\n\n return [\n ...(prompt.system != null\n ? [{ role: 'system' as const, content: prompt.system }]\n : []),\n ...prompt.messages.map(message =>\n convertToLanguageModelMessage({ message, downloadedAssets }),\n ),\n ];\n}\n\n/**\n * Convert a ModelMessage to a LanguageModelV2Message.\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}: {\n message: ModelMessage;\n downloadedAssets: Record<\n string,\n { mediaType: string | undefined; data: Uint8Array }\n >;\n}): LanguageModelV2Message {\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 return {\n role: 'user',\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 }\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 return {\n role: 'assistant',\n content: message.content\n .filter(\n // remove empty text parts:\n part => part.type !== 'text' || part.text !== '',\n )\n .map(part => {\n const providerOptions = part.providerOptions;\n\n switch (part.type) {\n case 'file': {\n const { data, mediaType } = convertToLanguageModelV2DataContent(\n part.data,\n );\n return {\n type: 'file',\n data,\n filename: part.filename,\n mediaType: mediaType ?? part.mediaType,\n providerOptions,\n };\n }\n case 'reasoning': {\n return {\n type: 'reasoning',\n text: part.text,\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: part.output,\n providerOptions,\n };\n }\n }\n }),\n providerOptions: message.providerOptions,\n };\n }\n\n case 'tool': {\n return {\n role: 'tool',\n content: message.content.map(part => ({\n type: 'tool-result' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: part.output,\n providerOptions: part.providerOptions,\n })),\n providerOptions: message.providerOptions,\n };\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 downloadImplementation: typeof download,\n supportedUrls: Record<string, RegExp[]>,\n): Promise<\n Record<string, { mediaType: string | undefined; data: Uint8Array }>\n> {\n const urls = 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 (ignored) {}\n }\n\n return { mediaType, data };\n })\n /**\n * Filter out URLs that the model supports natively, so we don't download them.\n */\n .filter(\n (part): part is { mediaType: string; data: URL } =>\n part.data instanceof URL &&\n part.mediaType != null &&\n !isUrlSupported({\n url: part.data.toString(),\n mediaType: part.mediaType,\n supportedUrls,\n }),\n )\n .map(part => part.data);\n\n // download in parallel:\n const downloadedImages = await Promise.all(\n urls.map(async url => ({\n url,\n data: await downloadImplementation({ url }),\n })),\n );\n\n return Object.fromEntries(\n downloadedImages.map(({ url, data }) => [url.toString(), data]),\n );\n}\n\n/**\n * Convert part of a message to a LanguageModelV2Part.\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 *\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): LanguageModelV2TextPart | LanguageModelV2FilePart {\n if (part.type === 'text') {\n return {\n type: 'text',\n text: part.text,\n providerOptions: part.providerOptions,\n };\n }\n\n let originalData: DataContent | URL;\n const type = part.type;\n switch (type) {\n case 'image':\n originalData = part.image;\n break;\n case 'file':\n originalData = part.data;\n\n break;\n default:\n throw new Error(`Unsupported part type: ${type}`);\n }\n\n const { data: convertedData, mediaType: convertedMediaType } =\n convertToLanguageModelV2DataContent(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 LanguageModelV2Part.\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","import { convertBase64ToUint8Array } from '@ai-sdk/provider-utils';\n\nexport const imageMediaTypeSignatures = [\n {\n mediaType: 'image/gif' as const,\n bytesPrefix: [0x47, 0x49, 0x46],\n base64Prefix: 'R0lG',\n },\n {\n mediaType: 'image/png' as const,\n bytesPrefix: [0x89, 0x50, 0x4e, 0x47],\n base64Prefix: 'iVBORw',\n },\n {\n mediaType: 'image/jpeg' as const,\n bytesPrefix: [0xff, 0xd8],\n base64Prefix: '/9j/',\n },\n {\n mediaType: 'image/webp' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46],\n base64Prefix: 'UklGRg',\n },\n {\n mediaType: 'image/bmp' as const,\n bytesPrefix: [0x42, 0x4d],\n base64Prefix: 'Qk',\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x49, 0x49, 0x2a, 0x00],\n base64Prefix: 'SUkqAA',\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x4d, 0x4d, 0x00, 0x2a],\n base64Prefix: 'TU0AKg',\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 base64Prefix: 'AAAAIGZ0eXBhdmlm',\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 base64Prefix: 'AAAAIGZ0eXBoZWlj',\n },\n] as const;\n\nexport const audioMediaTypeSignatures = [\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfb],\n base64Prefix: '//s=',\n },\n {\n mediaType: 'audio/wav' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46],\n base64Prefix: 'UklGR',\n },\n {\n mediaType: 'audio/ogg' as const,\n bytesPrefix: [0x4f, 0x67, 0x67, 0x53],\n base64Prefix: 'T2dnUw',\n },\n {\n mediaType: 'audio/flac' as const,\n bytesPrefix: [0x66, 0x4c, 0x61, 0x43],\n base64Prefix: 'ZkxhQw',\n },\n {\n mediaType: 'audio/aac' as const,\n bytesPrefix: [0x40, 0x15, 0x00, 0x00],\n base64Prefix: 'QBUA',\n },\n {\n mediaType: 'audio/mp4' as const,\n bytesPrefix: [0x66, 0x74, 0x79, 0x70],\n base64Prefix: 'ZnR5cA',\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 */\nexport function detectMediaType({\n data,\n signatures,\n}: {\n data: Uint8Array | string;\n signatures: typeof audioMediaTypeSignatures | typeof imageMediaTypeSignatures;\n}): (typeof signatures)[number]['mediaType'] | undefined {\n const processedData = stripID3TagsIfPresent(data);\n\n for (const signature of signatures) {\n if (\n typeof processedData === 'string'\n ? processedData.startsWith(signature.base64Prefix)\n : processedData.length >= signature.bytesPrefix.length &&\n signature.bytesPrefix.every(\n (byte, index) => processedData[index] === byte,\n )\n ) {\n return signature.mediaType;\n }\n }\n\n return undefined;\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_DownloadError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class DownloadError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly url: string;\n readonly statusCode?: number;\n readonly statusText?: string;\n\n constructor({\n url,\n statusCode,\n statusText,\n cause,\n message = cause == null\n ? `Failed to download ${url}: ${statusCode} ${statusText}`\n : `Failed to download ${url}: ${cause}`,\n }: {\n url: string;\n statusCode?: number;\n statusText?: string;\n message?: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n\n this.url = url;\n this.statusCode = statusCode;\n this.statusText = statusText;\n }\n\n static isInstance(error: unknown): error is DownloadError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { DownloadError } from './download-error';\n\nexport async function download({ url }: { url: URL }): Promise<{\n data: Uint8Array;\n mediaType: string | undefined;\n}> {\n const urlText = url.toString();\n try {\n const response = await fetch(urlText);\n\n if (!response.ok) {\n throw new DownloadError({\n url: urlText,\n statusCode: response.status,\n statusText: response.statusText,\n });\n }\n\n return {\n data: new Uint8Array(await response.arrayBuffer()),\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","import { AISDKError, LanguageModelV2DataContent } 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 convertToLanguageModelV2DataContent(\n content: DataContent | URL,\n): {\n data: LanguageModelV2DataContent;\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 (error) {\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/**\nConverts 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/**\nConverts 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 (error) {\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 (error) {\n return {\n mediaType: undefined,\n base64Content: undefined,\n };\n }\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 { InvalidArgumentError } from '../../src/error/invalid-argument-error';\nimport { CallSettings } from './call-settings';\n\n/**\n * Validates call settings and returns a new object with limited values.\n */\nexport function prepareCallSettings({\n maxOutputTokens,\n temperature,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n seed,\n stopSequences,\n}: Omit<CallSettings, 'abortSignal' | 'headers' | 'maxRetries'>): Omit<\n CallSettings,\n 'abortSignal' | 'headers' | 'maxRetries'\n> {\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 };\n}\n","import {\n LanguageModelV2FunctionTool,\n LanguageModelV2ProviderDefinedTool,\n LanguageModelV2ToolChoice,\n} from '@ai-sdk/provider';\nimport { asSchema } from '@ai-sdk/provider-utils';\nimport { isNonEmptyObject } from '../../src/util/is-non-empty-object';\nimport { ToolSet } from '../generate-text';\nimport { ToolChoice } from '../types/language-model';\n\nexport function prepareToolsAndToolChoice<TOOLS extends ToolSet>({\n tools,\n toolChoice,\n activeTools,\n}: {\n tools: TOOLS | undefined;\n toolChoice: ToolChoice<TOOLS> | undefined;\n activeTools: Array<keyof TOOLS> | undefined;\n}): {\n tools:\n | Array<LanguageModelV2FunctionTool | LanguageModelV2ProviderDefinedTool>\n | undefined;\n toolChoice: LanguageModelV2ToolChoice | undefined;\n} {\n if (!isNonEmptyObject(tools)) {\n return {\n tools: undefined,\n toolChoice: undefined,\n };\n }\n\n // when activeTools is provided, we only include the tools that are in the list:\n const filteredTools =\n activeTools != null\n ? Object.entries(tools).filter(([name]) =>\n activeTools.includes(name as keyof TOOLS),\n )\n : Object.entries(tools);\n\n return {\n tools: filteredTools.map(([name, tool]) => {\n const toolType = tool.type;\n switch (toolType) {\n case undefined:\n case 'function':\n return {\n type: 'function' as const,\n name,\n description: tool.description,\n inputSchema: asSchema(tool.inputSchema).jsonSchema,\n };\n case 'provider-defined':\n return {\n type: 'provider-defined' as const,\n name,\n id: tool.id,\n args: tool.args,\n };\n default: {\n const exhaustiveCheck: never = toolType;\n throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);\n }\n }\n }),\n toolChoice:\n toolChoice == null\n ? { type: 'auto' }\n : typeof toolChoice === 'string'\n ? { type: toolChoice }\n : { type: 'tool' as const, toolName: toolChoice.toolName as string },\n };\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 { gateway } from '@ai-sdk/gateway';\nimport { LanguageModelV2 } from '@ai-sdk/provider';\nimport { UnsupportedModelVersionError } from '../error';\nimport { LanguageModel } from '../types/language-model';\n\nexport function resolveLanguageModel(model: LanguageModel): LanguageModelV2 {\n if (typeof model !== 'string') {\n if (model.specificationVersion !== 'v2') {\n throw new UnsupportedModelVersionError({\n version: model.specificationVersion,\n provider: model.provider,\n modelId: model.modelId,\n });\n }\n\n return model;\n }\n\n const globalProvider = globalThis.AI_SDK_DEFAULT_PROVIDER;\n return (globalProvider ?? gateway).languageModel(model);\n}\n","export {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n NoContentGeneratedError,\n NoSuchModelError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\n\nexport { InvalidArgumentError } from './invalid-argument-error';\nexport { InvalidStreamPartError } from './invalid-stream-part-error';\nexport { InvalidToolInputError } from './invalid-tool-input-error';\nexport { MCPClientError } from './mcp-client-error';\nexport { NoImageGeneratedError } from './no-image-generated-error';\nexport { NoObjectGeneratedError } from './no-object-generated-error';\nexport { NoOutputSpecifiedError } from './no-output-specified-error';\nexport { NoSuchToolError } from './no-such-tool-error';\nexport { ToolCallRepairError } from './tool-call-repair-error';\nexport { UnsupportedModelVersionError } from './unsupported-model-version-error';\n\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 '../util/download-error';\nexport { RetryError } from '../util/retry-error';\n","import { AISDKError, getErrorMessage } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidToolInputError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidToolInputError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly toolName: string;\n readonly toolInput: string;\n\n constructor({\n toolInput,\n toolName,\n cause,\n message = `Invalid input for tool ${toolName}: ${getErrorMessage(cause)}`,\n }: {\n message?: string;\n toolInput: string;\n toolName: string;\n cause: unknown;\n }) {\n super({ name, message, cause });\n\n this.toolInput = toolInput;\n this.toolName = toolName;\n }\n\n static isInstance(error: unknown): error is InvalidToolInputError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_NoSuchToolError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class NoSuchToolError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly toolName: string;\n readonly availableTools: string[] | undefined;\n\n constructor({\n toolName,\n availableTools = undefined,\n message = `Model tried to call unavailable tool '${toolName}'. ${\n availableTools === undefined\n ? 'No tools are available.'\n : `Available tools: ${availableTools.join(', ')}.`\n }`,\n }: {\n toolName: string;\n availableTools?: string[] | undefined;\n message?: string;\n }) {\n super({ name, message });\n\n this.toolName = toolName;\n this.availableTools = availableTools;\n }\n\n static isInstance(error: unknown): error is NoSuchToolError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError, getErrorMessage } from '@ai-sdk/provider';\nimport { InvalidToolInputError } from './invalid-tool-input-error';\nimport { NoSuchToolError } from './no-such-tool-error';\n\nconst name = 'AI_ToolCallRepairError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class ToolCallRepairError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly originalError: NoSuchToolError | InvalidToolInputError;\n\n constructor({\n cause,\n originalError,\n message = `Error repairing tool call: ${getErrorMessage(cause)}`,\n }: {\n message?: string;\n cause: unknown;\n originalError: NoSuchToolError | InvalidToolInputError;\n }) {\n super({ name, message, cause });\n this.originalError = originalError;\n }\n\n static isInstance(error: unknown): error is ToolCallRepairError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\n/**\nError 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 { InvalidPromptError } from '@ai-sdk/provider';\nimport { ModelMessage, safeValidateTypes } 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;\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\n if (prompt.system != null && typeof prompt.system !== 'string') {\n throw new InvalidPromptError({\n prompt,\n message: 'system must be a string',\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:\n 'The messages must be a ModelMessage[]. ' +\n 'If you have passed a UIMessage[], you can use convertToModelMessages to convert them.',\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 filePartSchema,\n imagePartSchema,\n reasoningPartSchema,\n textPartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n} from './content-part';\n\n/**\n@deprecated Use `SystemModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreSystemMessage = SystemModelMessage;\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\n/**\n@deprecated Use `systemModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreSystemMessageSchema = systemModelMessageSchema;\n\n/**\n@deprecated Use `UserModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreUserMessage = UserModelMessage;\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\n/**\n@deprecated Use `userModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreUserMessageSchema = userModelMessageSchema;\n\n/**\n@deprecated Use `AssistantModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreAssistantMessage = AssistantModelMessage;\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 filePartSchema,\n reasoningPartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n ]),\n ),\n ]),\n providerOptions: providerMetadataSchema.optional(),\n });\n\n/**\n@deprecated Use `assistantModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreAssistantMessageSchema = assistantModelMessageSchema;\n\n/**\n@deprecated Use `ToolModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreToolMessage = ToolModelMessage;\n\nexport const toolModelMessageSchema: z.ZodType<ToolModelMessage> = z.object({\n role: z.literal('tool'),\n content: z.array(toolResultPartSchema),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@deprecated Use `toolModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreToolMessageSchema = toolModelMessageSchema;\n\n/**\n@deprecated Use `ModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreMessage = ModelMessage;\n\nexport const modelMessageSchema: z.ZodType<ModelMessage> = z.union([\n systemModelMessageSchema,\n userModelMessageSchema,\n assistantModelMessageSchema,\n toolModelMessageSchema,\n]);\n\n/**\n@deprecated Use `modelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreMessageSchema: z.ZodType<CoreMessage> = modelMessageSchema;\n","import {\n SharedV2ProviderMetadata,\n SharedV2ProviderOptions,\n} from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from './json-value';\n\n/**\nAdditional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be\nfully encapsulated in the provider.\n */\nexport type ProviderMetadata = SharedV2ProviderMetadata;\n\nexport const providerMetadataSchema: z.ZodType<ProviderMetadata> = z.record(\n z.string(),\n z.record(z.string(), jsonValueSchema),\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),\n z.array(jsonValueSchema),\n ]),\n);\n\nexport type JSONValue = OriginalJSONValue;\n","import { LanguageModelV2ToolResultOutput } from '@ai-sdk/provider';\nimport {\n FilePart,\n ImagePart,\n ProviderOptions,\n ReasoningPart,\n TextPart,\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\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([dataContentSchema, z.instanceof(URL)]),\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([dataContentSchema, z.instanceof(URL)]),\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/**\nTool 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 /**\nID of the tool call. This ID is used to match the tool call with the tool result.\n */\n toolCallId: string;\n\n /**\nName of the tool that is being called.\n */\n toolName: string;\n\n /**\nArguments of the tool call. This is a JSON-serializable object that matches the tool's input schema.\n */\n input: unknown;\n\n /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality 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<LanguageModelV2ToolResultOutput> =\n z.discriminatedUnion('type', [\n z.object({\n type: z.literal('text'),\n value: z.string(),\n }),\n z.object({\n type: z.literal('json'),\n value: jsonValueSchema,\n }),\n z.object({\n type: z.literal('error-text'),\n value: z.string(),\n }),\n z.object({\n type: z.literal('error-json'),\n value: jsonValueSchema,\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 }),\n z.object({\n type: z.literal('media'),\n data: z.string(),\n mediaType: z.string(),\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","import {\n GatewayAuthenticationError,\n GatewayModelNotFoundError,\n} from '@ai-sdk/gateway';\nimport { AISDKError } from '@ai-sdk/provider';\n\nexport function wrapGatewayError(error: unknown): unknown {\n if (\n GatewayAuthenticationError.isInstance(error) ||\n GatewayModelNotFoundError.isInstance(error)\n ) {\n return new AISDKError({\n name: 'GatewayError',\n message:\n 'Vercel AI Gateway access failed. ' +\n 'If you want to use AI SDK providers directly, use the providers, e.g. @ai-sdk/openai, ' +\n 'or register a different global default provider.',\n cause: error,\n });\n }\n\n return error;\n}\n","import { TelemetrySettings } from './telemetry-settings';\n\nexport function assembleOperationName({\n operationId,\n telemetry,\n}: {\n operationId: string;\n telemetry?: TelemetrySettings;\n}) {\n return {\n // standardized operation and resource name:\n 'operation.name': `${operationId}${\n telemetry?.functionId != null ? ` ${telemetry.functionId}` : ''\n }`,\n 'resource.name': telemetry?.functionId,\n\n // detailed, AI SDK specific data:\n 'ai.operationId': operationId,\n 'ai.telemetry.functionId': telemetry?.functionId,\n };\n}\n","import { Attributes } from '@opentelemetry/api';\nimport { CallSettings } from '../prompt/call-settings';\nimport { TelemetrySettings } from './telemetry-settings';\n\nexport function getBaseTelemetryAttributes({\n model,\n settings,\n telemetry,\n headers,\n}: {\n model: { modelId: string; provider: string };\n settings: Omit<CallSettings, 'abortSignal' | 'headers' | 'temperature'>;\n telemetry: TelemetrySettings | undefined;\n headers: Record<string, string | undefined> | undefined;\n}): Attributes {\n return {\n 'ai.model.provider': model.provider,\n 'ai.model.id': model.modelId,\n\n // settings:\n ...Object.entries(settings).reduce((attributes, [key, value]) => {\n attributes[`ai.settings.${key}`] = value;\n return attributes;\n }, {} as Attributes),\n\n // add metadata as attributes:\n ...Object.entries(telemetry?.metadata ?? {}).reduce(\n (attributes, [key, value]) => {\n attributes[`ai.telemetry.metadata.${key}`] = value;\n return attributes;\n },\n {} as Attributes,\n ),\n\n // request headers\n ...Object.entries(headers ?? {}).reduce((attributes, [key, value]) => {\n if (value !== undefined) {\n attributes[`ai.request.headers.${key}`] = value;\n }\n return attributes;\n }, {} as Attributes),\n };\n}\n","import { Tracer, trace } from '@opentelemetry/api';\nimport { noopTracer } from './noop-tracer';\n\nexport function getTracer({\n isEnabled = false,\n tracer,\n}: {\n isEnabled?: boolean;\n tracer?: Tracer;\n} = {}): Tracer {\n if (!isEnabled) {\n return noopTracer;\n }\n\n if (tracer) {\n return tracer;\n }\n\n return trace.getTracer('ai');\n}\n","import { Span, SpanContext, Tracer } from '@opentelemetry/api';\n\n/**\n * Tracer implementation that does nothing (null object).\n */\nexport const noopTracer: Tracer = {\n startSpan(): Span {\n return noopSpan;\n },\n\n startActiveSpan<F extends (span: Span) => unknown>(\n name: unknown,\n arg1: unknown,\n arg2?: unknown,\n arg3?: F,\n ): ReturnType<any> {\n if (typeof arg1 === 'function') {\n return arg1(noopSpan);\n }\n if (typeof arg2 === 'function') {\n return arg2(noopSpan);\n }\n if (typeof arg3 === 'function') {\n return arg3(noopSpan);\n }\n },\n};\n\nconst noopSpan: Span = {\n spanContext() {\n return noopSpanContext;\n },\n setAttribute() {\n return this;\n },\n setAttributes() {\n return this;\n },\n addEvent() {\n return this;\n },\n addLink() {\n return this;\n },\n addLinks() {\n return this;\n },\n setStatus() {\n return this;\n },\n updateName() {\n return this;\n },\n end() {\n return this;\n },\n isRecording() {\n return false;\n },\n recordException() {\n return this;\n },\n};\n\nconst noopSpanContext: SpanContext = {\n traceId: '',\n spanId: '',\n traceFlags: 0,\n};\n","import { Attributes, Span, Tracer, SpanStatusCode } from '@opentelemetry/api';\n\nexport function recordSpan<T>({\n name,\n tracer,\n attributes,\n fn,\n endWhenDone = true,\n}: {\n name: string;\n tracer: Tracer;\n attributes: Attributes;\n fn: (span: Span) => Promise<T>;\n endWhenDone?: boolean;\n}) {\n return tracer.startActiveSpan(name, { attributes }, async span => {\n try {\n const result = await fn(span);\n\n if (endWhenDone) {\n span.end();\n }\n\n return result;\n } catch (error) {\n try {\n recordErrorOnSpan(span, error);\n } finally {\n // always stop the span when there is an error:\n span.end();\n }\n\n throw error;\n }\n });\n}\n\n/**\n * Record an error on a span. If the error is an instance of Error, an exception event will be recorded on the span, otherwise\n * the span will be set to an error status.\n *\n * @param span - The span to record the error on.\n * @param error - The error to record on the span.\n */\nexport function recordErrorOnSpan(span: Span, error: unknown) {\n if (error instanceof Error) {\n span.recordException({\n name: error.name,\n message: error.message,\n stack: error.stack,\n });\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error.message,\n });\n } else {\n span.setStatus({ code: SpanStatusCode.ERROR });\n }\n}\n","import type { Attributes, AttributeValue } from '@opentelemetry/api';\nimport type { TelemetrySettings } from './telemetry-settings';\n\nexport function selectTelemetryAttributes({\n telemetry,\n attributes,\n}: {\n telemetry?: TelemetrySettings;\n attributes: {\n [attributeKey: string]:\n | AttributeValue\n | { input: () => AttributeValue | undefined }\n | { output: () => AttributeValue | undefined }\n | undefined;\n };\n}): Attributes {\n // when telemetry is disabled, return an empty object to avoid serialization overhead:\n if (telemetry?.isEnabled !== true) {\n return {};\n }\n\n return Object.entries(attributes).reduce((attributes, [key, value]) => {\n if (value == null) {\n return attributes;\n }\n\n // input value, check if it should be recorded:\n if (\n typeof value === 'object' &&\n 'input' in value &&\n typeof value.input === 'function'\n ) {\n // default to true:\n if (telemetry?.recordInputs === false) {\n return attributes;\n }\n\n const result = value.input();\n\n return result == null ? attributes : { ...attributes, [key]: result };\n }\n\n // output value, check if it should be recorded:\n if (\n typeof value === 'object' &&\n 'output' in value &&\n typeof value.output === 'function'\n ) {\n // default to true:\n if (telemetry?.recordOutputs === false) {\n return attributes;\n }\n\n const result = value.output();\n\n return result == null ? attributes : { ...attributes, [key]: result };\n }\n\n // value is an attribute value already:\n return { ...attributes, [key]: value };\n }, {});\n}\n","import {\n LanguageModelV2Message,\n LanguageModelV2Prompt,\n} from '@ai-sdk/provider';\nimport { convertDataContentToBase64String } from '../prompt/data-content';\n\n/**\n * Helper utility to serialize prompt content for OpenTelemetry tracing.\n * It is initially created because normalized LanguageModelV1Prompt carries\n * images as Uint8Arrays, on which JSON.stringify acts weirdly, converting\n * them to objects with stringified indices as keys, e.g. {\"0\": 42, \"1\": 69 }.\n */\nexport function stringifyForTelemetry(prompt: LanguageModelV2Prompt): string {\n return JSON.stringify(\n prompt.map((message: LanguageModelV2Message) => ({\n ...message,\n content:\n typeof message.content === 'string'\n ? message.content\n : message.content.map(part =>\n part.type === 'file'\n ? {\n ...part,\n data:\n part.data instanceof Uint8Array\n ? convertDataContentToBase64String(part.data)\n : part.data,\n }\n : part,\n ),\n })),\n );\n}\n","import { LanguageModelV2Usage } from '@ai-sdk/provider';\n\n/**\nRepresents the number of tokens used in a prompt and completion.\n */\nexport type LanguageModelUsage = LanguageModelV2Usage;\n\n/**\nRepresents the number of tokens used in an embedding.\n */\n// TODO replace with EmbeddingModelV2Usage\nexport type EmbeddingModelUsage = {\n /**\nThe number of tokens used in the embedding.\n */\n tokens: number;\n};\n\nexport function addLanguageModelUsage(\n usage1: LanguageModelUsage,\n usage2: LanguageModelUsage,\n): LanguageModelUsage {\n return {\n inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),\n outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),\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","import {\n LanguageModelV2CallWarning,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport { generateId, ModelMessage } from '@ai-sdk/provider-utils';\nimport { SpanStatusCode, Tracer } from '@opentelemetry/api';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { recordErrorOnSpan, recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { FinishReason, LanguageModelUsage, ProviderMetadata } from '../types';\nimport { DefaultGeneratedFileWithType, GeneratedFile } from './generated-file';\nimport { parseToolCall } from './parse-tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair-function';\nimport { ToolErrorUnion, ToolResultUnion } from './tool-output';\nimport { ToolSet } from './tool-set';\nimport { Source } from '../types/language-model';\nimport { ToolCallUnion } from './tool-call';\n\nexport type SingleRequestTextStreamPart<TOOLS extends ToolSet> =\n // Text blocks:\n | {\n type: 'text-start';\n providerMetadata?: ProviderMetadata;\n id: string;\n }\n | {\n type: 'text-delta';\n id: string;\n providerMetadata?: ProviderMetadata;\n delta: string;\n }\n | {\n type: 'text-end';\n providerMetadata?: ProviderMetadata;\n id: string;\n }\n\n // Reasoning blocks:\n | {\n type: 'reasoning-start';\n providerMetadata?: ProviderMetadata;\n id: string;\n }\n | {\n type: 'reasoning-delta';\n id: string;\n providerMetadata?: ProviderMetadata;\n delta: string;\n }\n | {\n type: 'reasoning-end';\n id: string;\n providerMetadata?: ProviderMetadata;\n }\n\n // Tool calls:\n | {\n type: 'tool-input-start';\n id: string;\n toolName: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'tool-input-delta';\n id: string;\n delta: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'tool-input-end';\n id: string;\n providerMetadata?: ProviderMetadata;\n }\n | ({ type: 'source' } & Source)\n | { type: 'file'; file: GeneratedFile } // different because of GeneratedFile object\n | ({ type: 'tool-call' } & ToolCallUnion<TOOLS>)\n | ({ type: 'tool-result' } & ToolResultUnion<TOOLS>)\n | ({ type: 'tool-error' } & ToolErrorUnion<TOOLS>)\n | { type: 'file'; file: GeneratedFile } // different because of GeneratedFile object\n | { type: 'stream-start'; warnings: LanguageModelV2CallWarning[] }\n | {\n type: 'response-metadata';\n id?: string;\n timestamp?: Date;\n modelId?: string;\n }\n | {\n type: 'finish';\n finishReason: FinishReason;\n usage: LanguageModelUsage;\n providerMetadata?: ProviderMetadata;\n }\n | { type: 'error'; error: unknown }\n | { type: 'raw'; rawValue: unknown };\n\nexport function runToolsTransformation<TOOLS extends ToolSet>({\n tools,\n generatorStream,\n tracer,\n telemetry,\n system,\n messages,\n abortSignal,\n repairToolCall,\n}: {\n tools: TOOLS | undefined;\n generatorStream: ReadableStream<LanguageModelV2StreamPart>;\n tracer: Tracer;\n telemetry: TelemetrySettings | undefined;\n system: string | undefined;\n messages: ModelMessage[];\n abortSignal: AbortSignal | undefined;\n repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;\n}): ReadableStream<SingleRequestTextStreamPart<TOOLS>> {\n // tool results stream\n let toolResultsStreamController: ReadableStreamDefaultController<\n SingleRequestTextStreamPart<TOOLS>\n > | null = null;\n const toolResultsStream = new ReadableStream<\n SingleRequestTextStreamPart<TOOLS>\n >({\n start(controller) {\n toolResultsStreamController = controller;\n },\n });\n\n // keep track of outstanding tool results for stream closing:\n const outstandingToolResults = new Set<string>();\n\n // keep track of tool inputs for provider-side tool results\n const toolInputs = new Map<string, unknown>();\n\n let canClose = false;\n let finishChunk:\n | (SingleRequestTextStreamPart<TOOLS> & { type: 'finish' })\n | undefined = undefined;\n\n function attemptClose() {\n // close the tool results controller if no more outstanding tool calls\n if (canClose && outstandingToolResults.size === 0) {\n // we delay sending the finish chunk until all tool results (incl. delayed ones)\n // are received to ensure that the frontend receives tool results before a message\n // finish event arrives.\n if (finishChunk != null) {\n toolResultsStreamController!.enqueue(finishChunk);\n }\n\n toolResultsStreamController!.close();\n }\n }\n\n // forward stream\n const forwardStream = new TransformStream<\n LanguageModelV2StreamPart,\n SingleRequestTextStreamPart<TOOLS>\n >({\n async transform(\n chunk: LanguageModelV2StreamPart,\n controller: TransformStreamDefaultController<\n SingleRequestTextStreamPart<TOOLS>\n >,\n ) {\n const chunkType = chunk.type;\n\n switch (chunkType) {\n // forward:\n case 'stream-start':\n case 'text-start':\n case 'text-delta':\n case 'text-end':\n case 'reasoning-start':\n case 'reasoning-delta':\n case 'reasoning-end':\n case 'tool-input-start':\n case 'tool-input-delta':\n case 'tool-input-end':\n case 'source':\n case 'response-metadata':\n case 'error':\n case 'raw': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'file': {\n controller.enqueue({\n type: 'file',\n file: new DefaultGeneratedFileWithType({\n data: chunk.data,\n mediaType: chunk.mediaType,\n }),\n });\n break;\n }\n\n case 'finish': {\n finishChunk = {\n type: 'finish',\n finishReason: chunk.finishReason,\n usage: chunk.usage,\n providerMetadata: chunk.providerMetadata,\n };\n break;\n }\n\n // process tool call:\n case 'tool-call': {\n try {\n const toolCall = await parseToolCall({\n toolCall: chunk,\n tools,\n repairToolCall,\n system,\n messages,\n });\n\n controller.enqueue(toolCall);\n\n const tool = tools![toolCall.toolName];\n\n toolInputs.set(toolCall.toolCallId, toolCall.input);\n\n if (tool.onInputAvailable != null) {\n await tool.onInputAvailable({\n input: toolCall.input,\n toolCallId: toolCall.toolCallId,\n messages,\n abortSignal,\n });\n }\n\n // Only execute tools that are not provider-executed:\n if (tool.execute != null && toolCall.providerExecuted !== true) {\n const toolExecutionId = generateId(); // use our own id to guarantee uniqueness\n outstandingToolResults.add(toolExecutionId);\n\n // Note: we don't await the tool execution here (by leaving out 'await' on recordSpan),\n // because we want to process the next chunk as soon as possible.\n // This is important for the case where the tool execution takes a long time.\n recordSpan({\n name: 'ai.toolCall',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.toolCall',\n telemetry,\n }),\n 'ai.toolCall.name': toolCall.toolName,\n 'ai.toolCall.id': toolCall.toolCallId,\n 'ai.toolCall.input': {\n output: () => JSON.stringify(toolCall.input),\n },\n },\n }),\n tracer,\n fn: async span => {\n let output: unknown;\n\n try {\n output = await tool.execute!(toolCall.input, {\n toolCallId: toolCall.toolCallId,\n messages,\n abortSignal,\n });\n } catch (error) {\n recordErrorOnSpan(span, error);\n toolResultsStreamController!.enqueue({\n ...toolCall,\n type: 'tool-error',\n error,\n } satisfies ToolErrorUnion<TOOLS>);\n\n outstandingToolResults.delete(toolExecutionId);\n attemptClose();\n return;\n }\n\n toolResultsStreamController!.enqueue({\n ...toolCall,\n type: 'tool-result',\n output,\n } satisfies ToolResultUnion<TOOLS>);\n\n outstandingToolResults.delete(toolExecutionId);\n attemptClose();\n\n // record telemetry\n try {\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.toolCall.output': {\n output: () => JSON.stringify(output),\n },\n },\n }),\n );\n } catch (ignored) {\n // JSON stringify might fail if the result is not serializable,\n // in which case we just ignore it. In the future we might want to\n // add an optional serialize method to the tool interface and warn\n // if the result is not serializable.\n }\n },\n });\n }\n } catch (error) {\n toolResultsStreamController!.enqueue({ type: 'error', error });\n }\n\n break;\n }\n\n case 'tool-result': {\n const toolName = chunk.toolName as keyof TOOLS & string;\n\n if (chunk.isError) {\n toolResultsStreamController!.enqueue({\n type: 'tool-error',\n toolCallId: chunk.toolCallId,\n toolName,\n input: toolInputs.get(chunk.toolCallId),\n providerExecuted: chunk.providerExecuted,\n error: chunk.result,\n } as ToolErrorUnion<TOOLS>);\n } else {\n controller.enqueue({\n type: 'tool-result',\n toolCallId: chunk.toolCallId,\n toolName,\n input: toolInputs.get(chunk.toolCallId),\n output: chunk.result,\n providerExecuted: chunk.providerExecuted,\n } as ToolResultUnion<TOOLS>);\n }\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = chunkType;\n throw new Error(`Unhandled chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n\n flush() {\n canClose = true;\n attemptClose();\n },\n });\n\n // combine the generator stream and the tool results stream\n return new ReadableStream<SingleRequestTextStreamPart<TOOLS>>({\n async start(controller) {\n // need to wait for both pipes so there are no dangling promises that\n // can cause uncaught promise rejections when the stream is aborted\n return Promise.all([\n generatorStream.pipeThrough(forwardStream).pipeTo(\n new WritableStream({\n write(chunk) {\n controller.enqueue(chunk);\n },\n close() {\n // the generator stream controller is automatically closed when it's consumed\n },\n }),\n ),\n toolResultsStream.pipeTo(\n new WritableStream({\n write(chunk) {\n controller.enqueue(chunk);\n },\n close() {\n controller.close();\n },\n }),\n ),\n ]);\n },\n });\n}\n","import {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n} from '@ai-sdk/provider-utils';\n\n/**\n * A generated file.\n */\nexport interface GeneratedFile {\n /**\nFile as a base64 encoded string.\n */\n readonly base64: string;\n\n /**\nFile as a Uint8Array.\n */\n readonly uint8Array: Uint8Array;\n\n /**\nThe IANA media type of the file.\n\n@see https://www.iana.org/assignments/media-types/media-types.xhtml\n */\n readonly mediaType: string;\n}\n\nexport class DefaultGeneratedFile implements GeneratedFile {\n private base64Data: string | undefined;\n private uint8ArrayData: Uint8Array | undefined;\n\n readonly mediaType: string;\n\n constructor({\n data,\n mediaType,\n }: {\n data: string | Uint8Array;\n mediaType: string;\n }) {\n const isUint8Array = data instanceof Uint8Array;\n this.base64Data = isUint8Array ? undefined : data;\n this.uint8ArrayData = isUint8Array ? data : undefined;\n this.mediaType = mediaType;\n }\n\n // lazy conversion with caching to avoid unnecessary conversion overhead:\n get base64() {\n if (this.base64Data == null) {\n this.base64Data = convertUint8ArrayToBase64(this.uint8ArrayData!);\n }\n return this.base64Data;\n }\n\n // lazy conversion with caching to avoid unnecessary conversion overhead:\n get uint8Array() {\n if (this.uint8ArrayData == null) {\n this.uint8ArrayData = convertBase64ToUint8Array(this.base64Data!);\n }\n return this.uint8ArrayData;\n }\n}\n\nexport class DefaultGeneratedFileWithType extends DefaultGeneratedFile {\n readonly type = 'file';\n\n constructor(options: { data: string | Uint8Array; mediaType: string }) {\n super(options);\n }\n}\n","import { LanguageModelV2ToolCall } from '@ai-sdk/provider';\nimport {\n asSchema,\n safeParseJSON,\n safeValidateTypes,\n} from '@ai-sdk/provider-utils';\nimport { InvalidToolInputError } from '../../src/error/invalid-tool-input-error';\nimport { NoSuchToolError } from '../../src/error/no-such-tool-error';\nimport { ToolCallRepairError } from '../../src/error/tool-call-repair-error';\nimport { ModelMessage } from '../prompt';\nimport { ToolCallUnion } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair-function';\nimport { ToolSet } from './tool-set';\n\nexport async function parseToolCall<TOOLS extends ToolSet>({\n toolCall,\n tools,\n repairToolCall,\n system,\n messages,\n}: {\n toolCall: LanguageModelV2ToolCall;\n tools: TOOLS | undefined;\n repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;\n system: string | undefined;\n messages: ModelMessage[];\n}): Promise<ToolCallUnion<TOOLS>> {\n if (tools == null) {\n throw new NoSuchToolError({ toolName: toolCall.toolName });\n }\n\n try {\n return await doParseToolCall({ toolCall, tools });\n } catch (error) {\n if (\n repairToolCall == null ||\n !(\n NoSuchToolError.isInstance(error) ||\n InvalidToolInputError.isInstance(error)\n )\n ) {\n throw error;\n }\n\n let repairedToolCall: LanguageModelV2ToolCall | null = null;\n\n try {\n repairedToolCall = await repairToolCall({\n toolCall,\n tools,\n inputSchema: ({ toolName }) => {\n const { inputSchema } = tools[toolName];\n return asSchema(inputSchema).jsonSchema;\n },\n system,\n messages,\n error,\n });\n } catch (repairError) {\n throw new ToolCallRepairError({\n cause: repairError,\n originalError: error,\n });\n }\n\n // no repaired tool call returned\n if (repairedToolCall == null) {\n throw error;\n }\n\n return await doParseToolCall({ toolCall: repairedToolCall, tools });\n }\n}\n\nasync function doParseToolCall<TOOLS extends ToolSet>({\n toolCall,\n tools,\n}: {\n toolCall: LanguageModelV2ToolCall;\n tools: TOOLS;\n}): Promise<ToolCallUnion<TOOLS>> {\n const toolName = toolCall.toolName as keyof TOOLS & string;\n\n const tool = tools[toolName];\n\n if (tool == null) {\n throw new NoSuchToolError({\n toolName: toolCall.toolName,\n availableTools: Object.keys(tools),\n });\n }\n\n const schema = asSchema(tool.inputSchema);\n\n // when the tool call has no arguments, we try passing an empty object to the schema\n // (many LLMs generate empty strings for tool calls with no arguments)\n const parseResult =\n toolCall.input.trim() === ''\n ? await safeValidateTypes({ value: {}, schema })\n : await safeParseJSON({ text: toolCall.input, schema });\n\n if (parseResult.success === false) {\n throw new InvalidToolInputError({\n toolName,\n toolInput: toolCall.input,\n cause: parseResult.error,\n });\n }\n\n return {\n type: 'tool-call',\n toolCallId: toolCall.toolCallId,\n toolName,\n input: parseResult.value,\n providerExecuted: toolCall.providerExecuted,\n providerMetadata: toolCall.providerMetadata,\n };\n}\n","import { ReasoningPart } from '@ai-sdk/provider-utils';\nimport {\n CallWarning,\n FinishReason,\n LanguageModelRequestMetadata,\n LanguageModelResponseMetadata,\n ProviderMetadata,\n} from '../types';\nimport { Source } from '../types/language-model';\nimport { LanguageModelUsage } from '../types/usage';\nimport { ContentPart } from './content-part';\nimport { GeneratedFile } from './generated-file';\nimport { ResponseMessage } from './response-message';\nimport { ToolCallArray } from './tool-call';\nimport { ToolResultArray } from './tool-output';\nimport { ToolSet } from './tool-set';\n\n/**\n * The result of a single step in the generation process.\n */\nexport type StepResult<TOOLS extends ToolSet> = {\n /**\nThe content that was generated in the last step.\n */\n readonly content: Array<ContentPart<TOOLS>>;\n\n /**\nThe generated text.\n*/\n readonly text: string;\n\n /**\nThe reasoning that was generated during the generation.\n*/\n readonly reasoning: Array<ReasoningPart>;\n\n /**\nThe reasoning text that was generated during the generation.\n*/\n readonly reasoningText: string | undefined;\n\n /**\nThe files that were generated during the generation.\n*/\n readonly files: Array<GeneratedFile>;\n\n /**\nThe sources that were used to generate the text.\n*/\n readonly sources: Array<Source>;\n\n /**\nThe tool calls that were made during the generation.\n*/\n readonly toolCalls: ToolCallArray<TOOLS>;\n\n /**\nThe results of the tool calls.\n*/\n readonly toolResults: ToolResultArray<TOOLS>;\n\n /**\nThe reason why the generation finished.\n*/\n readonly finishReason: FinishReason;\n\n /**\nThe token usage of the generated text.\n*/\n readonly usage: LanguageModelUsage;\n\n /**\nWarnings from the model provider (e.g. unsupported settings).\n*/\n readonly warnings: CallWarning[] | undefined;\n\n /**\nAdditional request information.\n */\n readonly request: LanguageModelRequestMetadata;\n\n /**\nAdditional response information.\n*/\n readonly response: LanguageModelResponseMetadata & {\n /**\nThe response messages that were generated during the call.\nResponse messages can be either assistant messages or tool messages.\nThey contain a generated id.\n*/\n readonly messages: Array<ResponseMessage>;\n\n /**\nResponse body (available only for providers that use HTTP requests).\n */\n body?: unknown;\n };\n\n /**\nAdditional provider-specific metadata. They are passed through\nfrom the provider to the AI SDK and enable provider-specific\nresults that can be fully encapsulated in the provider.\n */\n readonly providerMetadata: ProviderMetadata | undefined;\n};\n\nexport class DefaultStepResult<TOOLS extends ToolSet>\n implements StepResult<TOOLS>\n{\n readonly content: StepResult<TOOLS>['content'];\n readonly finishReason: StepResult<TOOLS>['finishReason'];\n readonly usage: StepResult<TOOLS>['usage'];\n readonly warnings: StepResult<TOOLS>['warnings'];\n readonly request: StepResult<TOOLS>['request'];\n readonly response: StepResult<TOOLS>['response'];\n readonly providerMetadata: StepResult<TOOLS>['providerMetadata'];\n\n constructor({\n content,\n finishReason,\n usage,\n warnings,\n request,\n response,\n providerMetadata,\n }: {\n content: StepResult<TOOLS>['content'];\n finishReason: StepResult<TOOLS>['finishReason'];\n usage: StepResult<TOOLS>['usage'];\n warnings: StepResult<TOOLS>['warnings'];\n request: StepResult<TOOLS>['request'];\n response: StepResult<TOOLS>['response'];\n providerMetadata: StepResult<TOOLS>['providerMetadata'];\n }) {\n this.content = content;\n this.finishReason = finishReason;\n this.usage = usage;\n this.warnings = warnings;\n this.request = request;\n this.response = response;\n this.providerMetadata = providerMetadata;\n }\n\n get text() {\n return this.content\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join('');\n }\n\n get reasoning() {\n return this.content.filter(part => part.type === 'reasoning');\n }\n\n get reasoningText() {\n return this.reasoning.length === 0\n ? undefined\n : this.reasoning.map(part => part.text).join('');\n }\n\n get files() {\n return this.content\n .filter(part => part.type === 'file')\n .map(part => part.file);\n }\n\n get sources() {\n return this.content.filter(part => part.type === 'source');\n }\n\n get toolCalls() {\n return this.content.filter(part => part.type === 'tool-call');\n }\n\n get toolResults() {\n return this.content.filter(part => part.type === 'tool-result');\n }\n}\n","import { StepResult } from './step-result';\nimport { ToolSet } from './tool-set';\n\nexport type StopCondition<TOOLS extends ToolSet> = (options: {\n steps: Array<StepResult<TOOLS>>;\n}) => PromiseLike<boolean> | boolean;\n\nexport function stepCountIs(stepCount: number): StopCondition<any> {\n return ({ steps }) => steps.length === stepCount;\n}\n\nexport function hasToolCall(toolName: string): StopCondition<any> {\n return ({ steps }) =>\n steps[steps.length - 1]?.toolCalls?.some(\n toolCall => toolCall.toolName === toolName,\n ) ?? false;\n}\n\nexport async function isStopConditionMet<TOOLS extends ToolSet>({\n stopConditions,\n steps,\n}: {\n stopConditions: Array<StopCondition<TOOLS>>;\n steps: Array<StepResult<TOOLS>>;\n}): Promise<boolean> {\n return (\n await Promise.all(stopConditions.map(condition => condition({ steps })))\n ).some(result => result);\n}\n","import {\n getErrorMessage,\n JSONValue,\n LanguageModelV2ToolResultOutput,\n} from '@ai-sdk/provider';\nimport { Tool } from '@ai-sdk/provider-utils';\n\nexport function createToolModelOutput({\n output,\n tool,\n errorMode,\n}: {\n output: unknown;\n tool: Tool | undefined;\n errorMode: 'none' | 'text' | 'json';\n}): LanguageModelV2ToolResultOutput {\n if (errorMode === 'text') {\n return { type: 'error-text', value: getErrorMessage(output) };\n } else if (errorMode === 'json') {\n return { type: 'error-json', value: output as JSONValue };\n }\n\n if (tool?.toModelOutput) {\n return tool.toModelOutput(output);\n }\n\n return typeof output === 'string'\n ? { type: 'text', value: output }\n : { type: 'json', value: output as JSONValue };\n}\n","import {\n AssistantContent,\n AssistantModelMessage,\n ToolContent,\n ToolModelMessage,\n} from '../prompt';\nimport { createToolModelOutput } from '../prompt/create-tool-model-output';\nimport { ContentPart } from './content-part';\nimport { ToolSet } from './tool-set';\n\n/**\nConverts the result of a `generateText` or `streamText` call to a list of response messages.\n */\nexport function toResponseMessages<TOOLS extends ToolSet>({\n content: inputContent,\n tools,\n}: {\n content: Array<ContentPart<TOOLS>>;\n tools: TOOLS | undefined;\n}): Array<AssistantModelMessage | ToolModelMessage> {\n const responseMessages: Array<AssistantModelMessage | ToolModelMessage> = [];\n\n const content: AssistantContent = inputContent\n .filter(part => part.type !== 'source')\n .filter(\n part =>\n (part.type !== 'tool-result' || part.providerExecuted) &&\n (part.type !== 'tool-error' || part.providerExecuted),\n )\n .filter(part => part.type !== 'text' || part.text.length > 0)\n .map(part => {\n switch (part.type) {\n case 'text':\n return part;\n case 'reasoning':\n return {\n type: 'reasoning',\n text: part.text,\n providerOptions: part.providerMetadata,\n };\n case 'file':\n return {\n type: 'file',\n data: part.file.base64,\n mediaType: part.file.mediaType,\n providerOptions: part.providerMetadata,\n };\n case 'tool-call':\n return {\n type: 'tool-call',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n providerExecuted: part.providerExecuted,\n providerOptions: part.providerMetadata,\n };\n case 'tool-result':\n return {\n type: 'tool-result',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: createToolModelOutput({\n tool: tools?.[part.toolName],\n output: part.output,\n errorMode: 'none',\n }),\n providerExecuted: true,\n providerOptions: part.providerMetadata,\n };\n case 'tool-error':\n return {\n type: 'tool-result',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: createToolModelOutput({\n tool: tools?.[part.toolName],\n output: part.error,\n errorMode: 'json',\n }),\n providerOptions: part.providerMetadata,\n };\n }\n });\n\n if (content.length > 0) {\n responseMessages.push({\n role: 'assistant',\n content,\n });\n }\n\n const toolResultContent: ToolContent = inputContent\n .filter(part => part.type === 'tool-result' || part.type === 'tool-error')\n .filter(part => !part.providerExecuted)\n .map(toolResult => ({\n type: 'tool-result',\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName,\n output: createToolModelOutput({\n tool: tools?.[toolResult.toolName],\n output:\n toolResult.type === 'tool-result'\n ? toolResult.output\n : toolResult.error,\n errorMode: toolResult.type === 'tool-error' ? 'text' : 'none',\n }),\n }));\n\n if (toolResultContent.length > 0) {\n responseMessages.push({\n role: 'tool',\n content: toolResultContent,\n });\n }\n\n return responseMessages;\n}\n"],"mappings":"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","names":["import_provider","import_provider_utils","import_provider_utils","_a","part","resolve","resolve","_a","_a","import_provider","name","marker","symbol","_a","import_provider","import_provider_utils","import_provider","name","marker","symbol","_a","import_provider_utils","import_provider_utils","import_provider","name","marker","symbol","_a","_a","import_provider","import_provider_utils","import_v4","_a","import_provider","name","marker","symbol","_a","_a","import_provider_utils","name","import_provider","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","import_provider","import_provider_utils","import_v4","import_v4","import_v4","import_v4","import_v4","import_gateway","import_provider","_a","name","import_api","name","attributes","import_provider_utils","import_provider_utils","import_provider_utils","import_provider","now","generateId","_a","includeRawChunks","stream","doStreamSpan","_b","_c","_d","import_gateway","resolve","_a"]}