ai 5.0.0-alpha.5 → 5.0.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/error/index.ts","../src/error/invalid-argument-error.ts","../src/error/invalid-stream-part-error.ts","../src/error/invalid-tool-arguments-error.ts","../src/error/mcp-client-error.ts","../src/error/no-image-generated-error.ts","../src/error/no-object-generated-error.ts","../src/error/no-output-specified-error.ts","../src/error/no-such-tool-error.ts","../src/error/tool-call-repair-error.ts","../src/error/tool-execution-error.ts","../core/prompt/invalid-data-content-error.ts","../core/prompt/invalid-message-role-error.ts","../core/prompt/message-conversion-error.ts","../src/util/download-error.ts","../src/util/retry-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/append-client-message.ts","../src/ui/call-chat-api.ts","../src/ui-message-stream/ui-message-stream-parts.ts","../src/util/consume-stream.ts","../src/ui/process-ui-message-stream.ts","../src/util/merge-objects.ts","../src/util/parse-partial-json.ts","../src/util/fix-json.ts","../src/ui/extract-max-tool-invocation-step.ts","../src/ui/get-tool-invocations.ts","../src/ui/transform-text-to-ui-message-stream.ts","../src/ui/call-completion-api.ts","../src/ui/process-text-stream.ts","../src/ui/chat-store.ts","../src/ui/should-resubmit-messages.ts","../src/ui/update-tool-call-result.ts","../src/ui/chat-transport.ts","../src/ui/convert-file-list-to-file-ui-parts.ts","../src/ui/convert-to-model-messages.ts","../src/ui/default-chat-store-options.ts","../src/ui-message-stream/handle-ui-message-stream-finish.ts","../src/ui-message-stream/create-ui-message-stream.ts","../src/ui-message-stream/ui-message-stream-headers.ts","../src/ui-message-stream/json-to-sse-transform-stream.ts","../src/ui-message-stream/create-ui-message-stream-response.ts","../src/ui-message-stream/pipe-ui-message-stream-to-response.ts","../src/util/cosine-similarity.ts","../src/util/data-url.ts","../src/util/is-deep-equal-data.ts","../src/util/serial-job-executor.ts","../src/util/simulate-readable-stream.ts","../src/util/retry-with-exponential-backoff.ts","../src/util/prepare-retries.ts","../core/telemetry/assemble-operation-name.ts","../core/telemetry/get-base-telemetry-attributes.ts","../core/telemetry/get-tracer.ts","../core/telemetry/noop-tracer.ts","../core/telemetry/record-span.ts","../core/telemetry/select-telemetry-attributes.ts","../core/embed/embed.ts","../src/util/split-array.ts","../core/embed/embed-many.ts","../src/util/detect-media-type.ts","../core/generate-text/generated-file.ts","../core/generate-image/generate-image.ts","../core/generate-object/generate-object.ts","../core/generate-text/extract-content-text.ts","../core/prompt/convert-to-language-model-prompt.ts","../src/util/download.ts","../core/prompt/data-content.ts","../core/prompt/split-data-url.ts","../core/prompt/prepare-call-settings.ts","../core/prompt/standardize-prompt.ts","../core/prompt/message.ts","../core/types/provider-metadata.ts","../core/types/json-value.ts","../core/prompt/content-part.ts","../core/prompt/tool-result-content.ts","../core/telemetry/stringify-for-telemetry.ts","../core/generate-object/output-strategy.ts","../src/util/async-iterable-stream.ts","../core/generate-object/validate-object-generation-input.ts","../core/generate-object/stream-object.ts","../src/util/create-resolvable-promise.ts","../src/util/create-stitchable-stream.ts","../src/util/delayed-promise.ts","../src/util/now.ts","../src/error/no-speech-generated-error.ts","../core/generate-speech/generated-audio-file.ts","../core/generate-speech/generate-speech.ts","../core/generate-text/generate-text.ts","../src/util/as-array.ts","../core/prompt/prepare-tools-and-tool-choice.ts","../src/util/is-non-empty-object.ts","../core/types/usage.ts","../core/generate-text/as-content.ts","../core/generate-text/parse-tool-call.ts","../core/generate-text/step-result.ts","../core/generate-text/stop-condition.ts","../core/generate-text/to-response-messages.ts","../core/generate-text/output.ts","../core/generate-text/smooth-stream.ts","../core/generate-text/stream-text.ts","../core/generate-text/run-tools-transformation.ts","../core/middleware/default-settings-middleware.ts","../src/util/get-potential-start-index.ts","../core/middleware/extract-reasoning-middleware.ts","../core/middleware/simulate-streaming-middleware.ts","../core/middleware/wrap-language-model.ts","../core/registry/custom-provider.ts","../core/registry/no-such-provider-error.ts","../core/registry/provider-registry.ts","../core/tool/mcp/mcp-client.ts","../core/tool/tool.ts","../core/tool/mcp/mcp-sse-transport.ts","../core/tool/mcp/json-rpc-message.ts","../core/tool/mcp/types.ts","../core/tool/mcp/mcp-transport.ts","../src/error/no-transcript-generated-error.ts","../core/transcribe/transcribe.ts"],"sourcesContent":["// re-exports:\nexport {\n asSchema,\n createIdGenerator,\n generateId,\n jsonSchema,\n type Schema,\n type IdGenerator,\n} from '@ai-sdk/provider-utils';\n\n// directory exports\nexport * from './error';\nexport * from './text-stream';\nexport * from './ui';\nexport * from './ui-message-stream';\nexport * from './util';\n\n// directory exports from /core\nexport * from '../core/';\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 { InvalidToolArgumentsError } from './invalid-tool-arguments-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 { ToolExecutionError } from './tool-execution-error';\n\nexport { InvalidDataContentError } from '../../core/prompt/invalid-data-content-error';\nexport { InvalidMessageRoleError } from '../../core/prompt/invalid-message-role-error';\nexport { MessageConversionError } from '../../core/prompt/message-conversion-error';\nexport { DownloadError } from '../util/download-error';\nexport { RetryError } from '../util/retry-error';\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 { AISDKError } from '@ai-sdk/provider';\nimport { SingleRequestTextStreamPart } from '../../core/generate-text/run-tools-transformation';\n\nconst name = 'AI_InvalidStreamPartError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidStreamPartError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly chunk: SingleRequestTextStreamPart<any>;\n\n constructor({\n chunk,\n message,\n }: {\n chunk: SingleRequestTextStreamPart<any>;\n message: string;\n }) {\n super({ name, message });\n\n this.chunk = chunk;\n }\n\n static isInstance(error: unknown): error is InvalidStreamPartError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError, getErrorMessage } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidToolArgumentsError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidToolArgumentsError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly toolName: string;\n readonly toolArgs: string;\n\n constructor({\n toolArgs,\n toolName,\n cause,\n message = `Invalid arguments for tool ${toolName}: ${getErrorMessage(\n cause,\n )}`,\n }: {\n message?: string;\n toolArgs: string;\n toolName: string;\n cause: unknown;\n }) {\n super({ name, message, cause });\n\n this.toolArgs = toolArgs;\n this.toolName = toolName;\n }\n\n static isInstance(error: unknown): error is InvalidToolArgumentsError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_MCPClientError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * An error occurred with the MCP client.\n */\nexport class MCPClientError extends AISDKError {\n private readonly [symbol] = true;\n\n constructor({\n name = 'MCPClientError',\n message,\n cause,\n }: {\n name?: string;\n message: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n }\n\n static isInstance(error: unknown): error is MCPClientError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { ImageModelResponseMetadata } from '../../core/types/image-model-response-metadata';\n\nconst name = 'AI_NoImageGeneratedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\nThrown when no image could be generated. This can have multiple causes:\n\n- The model failed to generate a response.\n- The model generated a response that could not be parsed.\n */\nexport class NoImageGeneratedError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n /**\nThe response metadata for each call.\n */\n readonly responses: Array<ImageModelResponseMetadata> | undefined;\n\n constructor({\n message = 'No image generated.',\n cause,\n responses,\n }: {\n message?: string;\n cause?: Error;\n responses?: Array<ImageModelResponseMetadata>;\n }) {\n super({ name, message, cause });\n\n this.responses = responses;\n }\n\n static isInstance(error: unknown): error is NoImageGeneratedError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { FinishReason } from '../../core/types/language-model';\nimport { LanguageModelResponseMetadata } from '../../core/types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../../core/types/usage';\n\nconst name = 'AI_NoObjectGeneratedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\nThrown when no object could be generated. This can have several causes:\n\n- The model failed to generate a response.\n- The model generated a response that could not be parsed.\n- The model generated a response that could not be validated against the schema.\n\nThe error contains the following properties:\n\n- `text`: The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n */\nexport class NoObjectGeneratedError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n /**\n The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n */\n readonly text: string | undefined;\n\n /**\n The response metadata.\n */\n readonly response: LanguageModelResponseMetadata | undefined;\n\n /**\n The usage of the model.\n */\n readonly usage: LanguageModelUsage | undefined;\n\n /**\n Reason why the model finished generating a response.\n */\n readonly finishReason: FinishReason | undefined;\n\n constructor({\n message = 'No object generated.',\n cause,\n text,\n response,\n usage,\n finishReason,\n }: {\n message?: string;\n cause?: Error;\n text?: string;\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n }) {\n super({ name, message, cause });\n\n this.text = text;\n this.response = response;\n this.usage = usage;\n this.finishReason = finishReason;\n }\n\n static isInstance(error: unknown): error is NoObjectGeneratedError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n\nexport function verifyNoObjectGeneratedError(\n error: unknown,\n expected: {\n message: string;\n response: LanguageModelResponseMetadata & {\n body?: string;\n };\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n) {\n expect(NoObjectGeneratedError.isInstance(error)).toBeTruthy();\n const noObjectGeneratedError = error as NoObjectGeneratedError;\n expect(noObjectGeneratedError.message).toEqual(expected.message);\n expect(noObjectGeneratedError.response).toEqual(expected.response);\n expect(noObjectGeneratedError.usage).toEqual(expected.usage);\n expect(noObjectGeneratedError.finishReason).toEqual(expected.finishReason);\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","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 { InvalidToolArgumentsError } from './invalid-tool-arguments-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 | InvalidToolArgumentsError;\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 | InvalidToolArgumentsError;\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, getErrorMessage, JSONValue } from '@ai-sdk/provider';\n\nconst name = 'AI_ToolExecutionError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class ToolExecutionError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly toolName: string;\n readonly toolArgs: JSONValue | unknown;\n readonly toolCallId: string;\n\n constructor({\n toolArgs,\n toolName,\n toolCallId,\n cause,\n message = `Error executing tool ${toolName}: ${getErrorMessage(cause)}`,\n }: {\n message?: string;\n toolArgs: JSONValue | unknown;\n toolName: string;\n toolCallId: string;\n cause: unknown;\n }) {\n super({ name, message, cause });\n\n this.toolArgs = toolArgs;\n this.toolName = toolName;\n this.toolCallId = toolCallId;\n }\n\n static isInstance(error: unknown): error is ToolExecutionError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidDataContentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidDataContentError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly content: unknown;\n\n constructor({\n content,\n cause,\n message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`,\n }: {\n content: unknown;\n cause?: unknown;\n message?: string;\n }) {\n super({ name, message, cause });\n\n this.content = content;\n }\n\n static isInstance(error: unknown): error is InvalidDataContentError {\n return AISDKError.hasMarker(error, marker);\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 { AISDKError } from '@ai-sdk/provider';\nimport { UIMessage } from '../../src/ui/ui-messages';\n\nconst name = 'AI_MessageConversionError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class MessageConversionError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly originalMessage: Omit<UIMessage, 'id'>;\n\n constructor({\n originalMessage,\n message,\n }: {\n originalMessage: Omit<UIMessage, 'id'>;\n message: string;\n }) {\n super({ name, message });\n\n this.originalMessage = originalMessage;\n }\n\n static isInstance(error: unknown): error is MessageConversionError {\n return AISDKError.hasMarker(error, marker);\n }\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 { 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","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","import { UIMessage } from './ui-messages';\n\n/**\n * Appends a client message to the messages array.\n * If the last message in the array has the same id as the new message, it will be replaced.\n * Otherwise, the new message will be appended.\n */\nexport function appendClientMessage({\n messages,\n message,\n}: {\n messages: UIMessage[];\n message: UIMessage;\n}) {\n return [\n ...(messages.length > 0 && messages[messages.length - 1].id === message.id\n ? messages.slice(0, -1)\n : messages),\n message,\n ];\n}\n","import {\n IdGenerator,\n parseJsonEventStream,\n ParseResult,\n Schema,\n} from '@ai-sdk/provider-utils';\nimport {\n UIMessageStreamPart,\n uiMessageStreamPartSchema,\n} from '../ui-message-stream/ui-message-stream-parts';\nimport { consumeStream } from '../util/consume-stream';\nimport {\n createStreamingUIMessageState,\n processUIMessageStream,\n StreamingUIMessageState,\n} from './process-ui-message-stream';\nimport { transformTextToUiMessageStream } from './transform-text-to-ui-message-stream';\nimport { UIMessage } from './ui-messages';\nimport { UseChatOptions } from './use-chat';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => fetch;\n\nexport async function fetchUIMessageStream({\n api,\n body,\n credentials,\n headers,\n abortController,\n fetch = getOriginalFetch(),\n requestType = 'generate',\n}: {\n api: string;\n body: Record<string, any>;\n credentials: RequestCredentials | undefined;\n headers: HeadersInit | undefined;\n abortController: (() => AbortController | null) | undefined;\n fetch: ReturnType<typeof getOriginalFetch> | undefined;\n requestType?: 'generate' | 'resume';\n}): Promise<ReadableStream<UIMessageStreamPart>> {\n const response =\n requestType === 'resume'\n ? await fetch(`${api}?chatId=${body.chatId}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController?.()?.signal,\n credentials,\n })\n : await fetch(api, {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController?.()?.signal,\n credentials,\n });\n\n if (!response.ok) {\n throw new Error(\n (await response.text()) ?? 'Failed to fetch the chat response.',\n );\n }\n\n if (!response.body) {\n throw new Error('The response body is empty.');\n }\n\n return parseJsonEventStream({\n stream: response.body,\n schema: uiMessageStreamPartSchema,\n }).pipeThrough(\n new TransformStream<ParseResult<UIMessageStreamPart>, UIMessageStreamPart>({\n async transform(part, controller) {\n if (!part.success) {\n throw part.error;\n }\n controller.enqueue(part.value);\n },\n }),\n );\n}\n\nexport async function fetchTextStream({\n api,\n body,\n credentials,\n headers,\n abortController,\n fetch = getOriginalFetch(),\n requestType = 'generate',\n}: {\n api: string;\n body: Record<string, any>;\n credentials: RequestCredentials | undefined;\n headers: HeadersInit | undefined;\n abortController: (() => AbortController | null) | undefined;\n fetch: ReturnType<typeof getOriginalFetch> | undefined;\n requestType?: 'generate' | 'resume';\n}): Promise<ReadableStream<UIMessageStreamPart>> {\n const response =\n requestType === 'resume'\n ? await fetch(`${api}?chatId=${body.chatId}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController?.()?.signal,\n credentials,\n })\n : await fetch(api, {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController?.()?.signal,\n credentials,\n });\n\n if (!response.ok) {\n throw new Error(\n (await response.text()) ?? 'Failed to fetch the chat response.',\n );\n }\n\n if (!response.body) {\n throw new Error('The response body is empty.');\n }\n\n return transformTextToUiMessageStream({\n stream: response.body.pipeThrough(new TextDecoderStream()),\n });\n}\n\nexport async function consumeUIMessageStream<MESSAGE_METADATA>({\n stream,\n onUpdate,\n onFinish,\n onToolCall,\n generateId,\n lastMessage,\n messageMetadataSchema,\n}: {\n stream: ReadableStream<UIMessageStreamPart>;\n onUpdate: (options: { message: UIMessage<MESSAGE_METADATA> }) => void;\n onFinish: UseChatOptions<MESSAGE_METADATA>['onFinish'];\n onToolCall: UseChatOptions<MESSAGE_METADATA>['onToolCall'];\n generateId: IdGenerator;\n lastMessage: UIMessage<MESSAGE_METADATA> | undefined;\n messageMetadataSchema?: Schema<MESSAGE_METADATA>;\n}) {\n const state = createStreamingUIMessageState({\n lastMessage: lastMessage ? structuredClone(lastMessage) : undefined,\n newMessageId: generateId(),\n });\n\n const runUpdateMessageJob = async (\n job: (options: {\n state: StreamingUIMessageState<MESSAGE_METADATA>;\n write: () => void;\n }) => Promise<void>,\n ) => {\n await job({\n state,\n write: () => {\n onUpdate({ message: state.message });\n },\n });\n };\n\n await consumeStream({\n stream: processUIMessageStream({\n stream,\n onToolCall,\n messageMetadataSchema,\n runUpdateMessageJob,\n }),\n onError: error => {\n throw error;\n },\n });\n\n onFinish?.({ message: state.message });\n}\n\nexport async function callChatApi<MESSAGE_METADATA>({\n api,\n body,\n streamProtocol = 'ui-message',\n credentials,\n headers,\n abortController,\n onUpdate,\n onFinish,\n onToolCall,\n generateId,\n fetch = getOriginalFetch(),\n lastMessage,\n requestType = 'generate',\n messageMetadataSchema,\n}: {\n api: string;\n body: Record<string, any>;\n streamProtocol: 'ui-message' | 'text' | undefined;\n credentials: RequestCredentials | undefined;\n headers: HeadersInit | undefined;\n abortController: (() => AbortController | null) | undefined;\n onUpdate: (options: { message: UIMessage<MESSAGE_METADATA> }) => void;\n onFinish: UseChatOptions<MESSAGE_METADATA>['onFinish'];\n onToolCall: UseChatOptions<MESSAGE_METADATA>['onToolCall'];\n generateId: IdGenerator;\n fetch: ReturnType<typeof getOriginalFetch> | undefined;\n lastMessage: UIMessage<MESSAGE_METADATA> | undefined;\n requestType?: 'generate' | 'resume';\n messageMetadataSchema?: Schema<MESSAGE_METADATA>;\n}) {\n const stream =\n streamProtocol === 'text'\n ? await fetchTextStream({\n api,\n body,\n credentials,\n headers,\n abortController,\n fetch,\n requestType,\n })\n : await fetchUIMessageStream({\n api,\n body,\n credentials,\n headers,\n abortController,\n fetch,\n requestType,\n });\n\n await consumeUIMessageStream({\n stream,\n onUpdate,\n onFinish,\n onToolCall,\n generateId,\n lastMessage,\n messageMetadataSchema,\n });\n}\n","import { z } from 'zod';\nimport { ProviderMetadata } from '../../core';\n\nexport const uiMessageStreamPartSchema = z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('error'),\n errorText: z.string(),\n }),\n z.object({\n type: z.literal('tool-call-streaming-start'),\n toolCallId: z.string(),\n toolName: z.string(),\n }),\n z.object({\n type: z.literal('tool-call-delta'),\n toolCallId: z.string(),\n argsTextDelta: z.string(),\n }),\n z.object({\n type: z.literal('tool-call'),\n toolCallId: z.string(),\n toolName: z.string(),\n args: z.unknown(),\n }),\n z.object({\n type: z.literal('tool-result'),\n toolCallId: z.string(),\n result: z.unknown(),\n providerMetadata: z.any().optional(),\n }),\n z.object({\n type: z.literal('reasoning'),\n text: z.string(),\n providerMetadata: z.record(z.any()).optional(),\n }),\n z.object({\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.object({\n type: z.literal('file'),\n url: z.string(),\n mediaType: z.string(),\n }),\n z.object({\n type: z.string().startsWith('data-'),\n id: z.string().optional(),\n data: z.unknown(),\n }),\n z.object({\n type: z.literal('metadata'),\n value: z.object({ metadata: z.unknown() }),\n }),\n z.object({\n type: z.literal('start-step'),\n metadata: z.unknown().optional(),\n }),\n z.object({\n type: z.literal('finish-step'),\n metadata: z.unknown().optional(),\n }),\n z.object({\n type: z.literal('start'),\n messageId: z.string().optional(),\n metadata: z.unknown().optional(),\n }),\n z.object({\n type: z.literal('finish'),\n metadata: z.unknown().optional(),\n }),\n z.object({\n type: z.literal('reasoning-part-finish'),\n }),\n]);\n\nexport type DataUIMessageStreamPart = {\n type: `data-${string}`;\n id?: string;\n data: unknown;\n};\n\nexport type UIMessageStreamPart =\n | {\n type: 'text';\n text: string;\n }\n | {\n type: 'error';\n errorText: string;\n }\n | {\n type: 'tool-call';\n toolCallId: string;\n toolName: string;\n args: unknown;\n }\n | {\n type: 'tool-result';\n toolCallId: string;\n result: unknown;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'tool-call-streaming-start';\n toolCallId: string;\n toolName: string;\n }\n | {\n type: 'tool-call-delta';\n toolCallId: string;\n argsTextDelta: string;\n }\n | {\n type: 'reasoning';\n text: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'source-url';\n sourceId: string;\n url: string;\n title?: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'file';\n url: string;\n mediaType: string;\n }\n | DataUIMessageStreamPart\n | {\n type: 'metadata';\n metadata: unknown;\n }\n | {\n type: 'start-step';\n metadata?: unknown;\n }\n | {\n type: 'finish-step';\n metadata?: unknown;\n }\n | {\n type: 'start';\n messageId?: string;\n metadata?: unknown;\n }\n | {\n type: 'finish';\n metadata?: unknown;\n }\n | {\n type: 'reasoning-part-finish';\n };\n\nexport function isDataUIMessageStreamPart(\n part: UIMessageStreamPart,\n): part is DataUIMessageStreamPart {\n return part.type.startsWith('data-');\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 {\n StandardSchemaV1,\n validateTypes,\n Validator,\n} from '@ai-sdk/provider-utils';\nimport {\n isDataUIMessageStreamPart,\n UIMessageStreamPart,\n} from '../ui-message-stream/ui-message-stream-parts';\nimport { mergeObjects } from '../util/merge-objects';\nimport { parsePartialJson } from '../util/parse-partial-json';\nimport { InferUIDataParts, UIDataPartSchemas } from './chat-store';\nimport { extractMaxToolInvocationStep } from './extract-max-tool-invocation-step';\nimport { getToolInvocations } from './get-tool-invocations';\nimport type {\n ReasoningUIPart,\n TextUIPart,\n ToolInvocation,\n ToolInvocationUIPart,\n UIMessage,\n UIMessagePart,\n} from './ui-messages';\nimport { UseChatOptions } from './use-chat';\n\nexport type StreamingUIMessageState<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n> = {\n message: UIMessage<MESSAGE_METADATA, InferUIDataParts<UI_DATA_PART_SCHEMAS>>;\n activeTextPart: TextUIPart | undefined;\n activeReasoningPart: ReasoningUIPart | undefined;\n partialToolCalls: Record<\n string,\n { text: string; step: number; index: number; toolName: string }\n >;\n step: number;\n};\n\nexport function createStreamingUIMessageState<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n>({\n lastMessage,\n newMessageId = '',\n}: {\n lastMessage?: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n newMessageId?: string;\n} = {}): StreamingUIMessageState<MESSAGE_METADATA, UI_DATA_PART_SCHEMAS> {\n const isContinuation = lastMessage?.role === 'assistant';\n\n const step = isContinuation\n ? 1 + (extractMaxToolInvocationStep(getToolInvocations(lastMessage)) ?? 0)\n : 0;\n\n const message: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > = isContinuation\n ? lastMessage\n : {\n id: newMessageId,\n metadata: {} as MESSAGE_METADATA,\n role: 'assistant',\n parts: [],\n };\n\n return {\n message,\n activeTextPart: undefined,\n activeReasoningPart: undefined,\n partialToolCalls: {},\n step,\n };\n}\n\nexport function processUIMessageStream<\n MESSAGE_METADATA,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas,\n>({\n stream,\n onToolCall,\n messageMetadataSchema,\n dataPartSchemas,\n runUpdateMessageJob,\n}: {\n stream: ReadableStream<UIMessageStreamPart>;\n messageMetadataSchema?:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>;\n dataPartSchemas?: UI_DATA_PART_SCHEMAS;\n onToolCall?: UseChatOptions['onToolCall'];\n runUpdateMessageJob: (\n job: (options: {\n state: StreamingUIMessageState<\n NoInfer<MESSAGE_METADATA>,\n NoInfer<UI_DATA_PART_SCHEMAS>\n >;\n write: () => void;\n }) => Promise<void>,\n ) => Promise<void>;\n}): ReadableStream<UIMessageStreamPart> {\n return stream.pipeThrough(\n new TransformStream<UIMessageStreamPart, UIMessageStreamPart>({\n async transform(part, controller) {\n await runUpdateMessageJob(async ({ state, write }) => {\n function updateToolInvocationPart(\n toolCallId: string,\n invocation: ToolInvocation,\n ) {\n const part = state.message.parts.find(\n part =>\n isToolInvocationUIPart(part) &&\n part.toolInvocation.toolCallId === toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (part != null) {\n part.toolInvocation = invocation;\n } else {\n state.message.parts.push({\n type: 'tool-invocation',\n toolInvocation: invocation,\n });\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 = mergedMetadata as MESSAGE_METADATA;\n }\n }\n\n switch (part.type) {\n case 'text': {\n if (state.activeTextPart == null) {\n state.activeTextPart = {\n type: 'text',\n text: part.text,\n };\n state.message.parts.push(state.activeTextPart);\n } else {\n state.activeTextPart.text += part.text;\n }\n\n write();\n break;\n }\n\n case 'reasoning': {\n if (state.activeReasoningPart == null) {\n state.activeReasoningPart = {\n type: 'reasoning',\n text: part.text,\n providerMetadata: part.providerMetadata,\n };\n state.message.parts.push(state.activeReasoningPart);\n } else {\n state.activeReasoningPart.text += part.text;\n state.activeReasoningPart.providerMetadata =\n part.providerMetadata;\n }\n\n write();\n break;\n }\n\n case 'reasoning-part-finish': {\n if (state.activeReasoningPart != null) {\n state.activeReasoningPart = undefined;\n }\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 'tool-call-streaming-start': {\n const toolInvocations = getToolInvocations(state.message);\n\n // add the partial tool call to the map\n state.partialToolCalls[part.toolCallId] = {\n text: '',\n step: state.step,\n toolName: part.toolName,\n index: toolInvocations.length,\n };\n\n updateToolInvocationPart(part.toolCallId, {\n state: 'partial-call',\n step: state.step,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: undefined,\n } as const);\n\n write();\n break;\n }\n\n case 'tool-call-delta': {\n const partialToolCall = state.partialToolCalls[part.toolCallId];\n\n partialToolCall.text += part.argsTextDelta;\n\n const { value: partialArgs } = await parsePartialJson(\n partialToolCall.text,\n );\n\n updateToolInvocationPart(part.toolCallId, {\n state: 'partial-call',\n step: partialToolCall.step,\n toolCallId: part.toolCallId,\n toolName: partialToolCall.toolName,\n args: partialArgs,\n } as const);\n\n write();\n break;\n }\n\n case 'tool-call': {\n updateToolInvocationPart(part.toolCallId, {\n state: 'call',\n step: state.step,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n } as const);\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 if (onToolCall) {\n const result = await onToolCall({\n toolCall: part,\n });\n if (result != null) {\n updateToolInvocationPart(part.toolCallId, {\n state: 'result',\n step: state.step,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n result,\n } as const);\n\n write();\n }\n }\n break;\n }\n\n case 'tool-result': {\n const toolInvocations = getToolInvocations(state.message);\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 updateToolInvocationPart(part.toolCallId, {\n ...toolInvocations[toolInvocationIndex],\n state: 'result' as const,\n result: part.result,\n } as const);\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\n await updateMessageMetadata(part.metadata);\n write();\n break;\n }\n\n case 'finish-step': {\n state.step += 1;\n\n // reset the current text and reasoning parts\n state.activeTextPart = undefined;\n state.activeReasoningPart = undefined;\n\n await updateMessageMetadata(part.metadata);\n if (part.metadata != null) {\n write();\n }\n break;\n }\n\n case 'start': {\n if (part.messageId != null) {\n state.message.id = part.messageId;\n }\n\n await updateMessageMetadata(part.metadata);\n\n if (part.messageId != null || part.metadata != null) {\n write();\n }\n break;\n }\n\n case 'finish': {\n await updateMessageMetadata(part.metadata);\n if (part.metadata != null) {\n write();\n }\n break;\n }\n\n case 'metadata': {\n await updateMessageMetadata(part.metadata);\n if (part.metadata != null) {\n write();\n }\n break;\n }\n\n case 'error': {\n throw new Error(part.errorText);\n }\n\n default: {\n if (isDataUIMessageStreamPart(part)) {\n // TODO improve type safety\n const existingPart: any =\n part.id != null\n ? state.message.parts.find(\n (partArg: any) =>\n part.type === partArg.type && part.id === partArg.id,\n )\n : undefined;\n\n if (existingPart != null) {\n // TODO improve type safety\n existingPart.data =\n isObject(existingPart.data) && isObject(part.data)\n ? mergeObjects(existingPart.data, part.data)\n : part.data;\n } else {\n // TODO improve type safety\n state.message.parts.push(part as any);\n }\n write();\n }\n }\n }\n\n controller.enqueue(part);\n });\n },\n }),\n );\n}\n\n// helper function to narrow the type of a UIMessagePart\nfunction isToolInvocationUIPart(\n part: UIMessagePart<any>,\n): part is ToolInvocationUIPart {\n return part.type === 'tool-invocation';\n}\n\nfunction isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null;\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 { ToolInvocation } from './ui-messages';\n\nexport function extractMaxToolInvocationStep(\n toolInvocations: ToolInvocation[] | undefined,\n): number | undefined {\n return toolInvocations?.reduce((max, toolInvocation) => {\n return Math.max(max, toolInvocation.step ?? 0);\n }, 0);\n}\n","import { ToolInvocation, ToolInvocationUIPart, UIMessage } from './ui-messages';\n\nexport function getToolInvocations(message: UIMessage): ToolInvocation[] {\n return message.parts\n .filter(\n (part): part is ToolInvocationUIPart => part.type === 'tool-invocation',\n )\n .map(part => part.toolInvocation);\n}\n","import { UIMessageStreamPart } from '../ui-message-stream';\n\nexport function transformTextToUiMessageStream({\n stream,\n}: {\n stream: ReadableStream<string>;\n}) {\n return stream.pipeThrough(\n new TransformStream<string, UIMessageStreamPart>({\n start(controller) {\n controller.enqueue({ type: 'start' });\n controller.enqueue({ type: 'start-step' });\n },\n\n async transform(part, controller) {\n controller.enqueue({ type: 'text', text: part });\n },\n\n async flush(controller) {\n controller.enqueue({ type: 'finish-step' });\n controller.enqueue({ type: 'finish' });\n },\n }),\n );\n}\n","import { parseJsonEventStream, ParseResult } from '@ai-sdk/provider-utils';\nimport {\n UIMessageStreamPart,\n uiMessageStreamPartSchema,\n} from '../ui-message-stream/ui-message-stream-parts';\nimport { consumeStream } from '../util/consume-stream';\nimport { processTextStream } from './process-text-stream';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => fetch;\n\nexport async function callCompletionApi({\n api,\n prompt,\n credentials,\n headers,\n body,\n streamProtocol = 'data',\n setCompletion,\n setLoading,\n setError,\n setAbortController,\n onFinish,\n onError,\n fetch = getOriginalFetch(),\n}: {\n api: string;\n prompt: string;\n credentials: RequestCredentials | undefined;\n headers: HeadersInit | undefined;\n body: Record<string, any>;\n streamProtocol: 'data' | 'text' | undefined;\n setCompletion: (completion: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: Error | undefined) => void;\n setAbortController: (abortController: AbortController | null) => void;\n onFinish: ((prompt: string, completion: string) => void) | undefined;\n onError: ((error: Error) => void) | undefined;\n fetch: ReturnType<typeof getOriginalFetch> | undefined;\n}) {\n try {\n setLoading(true);\n setError(undefined);\n\n const abortController = new AbortController();\n setAbortController(abortController);\n\n // Empty the completion immediately.\n setCompletion('');\n\n const response = await fetch(api, {\n method: 'POST',\n body: JSON.stringify({\n prompt,\n ...body,\n }),\n credentials,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController.signal,\n }).catch(err => {\n throw err;\n });\n\n if (!response.ok) {\n throw new Error(\n (await response.text()) ?? 'Failed to fetch the chat response.',\n );\n }\n\n if (!response.body) {\n throw new Error('The response body is empty.');\n }\n\n let result = '';\n\n switch (streamProtocol) {\n case 'text': {\n await processTextStream({\n stream: response.body,\n onTextPart: chunk => {\n result += chunk;\n setCompletion(result);\n },\n });\n break;\n }\n case 'data': {\n await consumeStream({\n stream: parseJsonEventStream({\n stream: response.body,\n schema: uiMessageStreamPartSchema,\n }).pipeThrough(\n new TransformStream<\n ParseResult<UIMessageStreamPart>,\n UIMessageStreamPart\n >({\n async transform(part) {\n if (!part.success) {\n throw part.error;\n }\n\n const streamPart = part.value;\n if (streamPart.type === 'text') {\n result += streamPart.text;\n setCompletion(result);\n } else if (streamPart.type === 'error') {\n throw new Error(streamPart.errorText);\n }\n },\n }),\n ),\n onError: error => {\n throw error;\n },\n });\n break;\n }\n default: {\n const exhaustiveCheck: never = streamProtocol;\n throw new Error(`Unknown stream protocol: ${exhaustiveCheck}`);\n }\n }\n\n if (onFinish) {\n onFinish(prompt, result);\n }\n\n setAbortController(null);\n return result;\n } catch (err) {\n // Ignore abort errors as they are expected.\n if ((err as any).name === 'AbortError') {\n setAbortController(null);\n return null;\n }\n\n if (err instanceof Error) {\n if (onError) {\n onError(err);\n }\n }\n\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n}\n","export async function processTextStream({\n stream,\n onTextPart,\n}: {\n stream: ReadableStream<Uint8Array>;\n onTextPart: (chunk: string) => Promise<void> | void;\n}): Promise<void> {\n const reader = stream.pipeThrough(new TextDecoderStream()).getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n await onTextPart(value);\n }\n}\n","import {\n generateId as generateIdFunc,\n IdGenerator,\n StandardSchemaV1,\n ToolCall,\n Validator,\n} from '@ai-sdk/provider-utils';\nimport { consumeStream } from '../util/consume-stream';\nimport { SerialJobExecutor } from '../util/serial-job-executor';\nimport { ChatTransport } from './chat-transport';\nimport { extractMaxToolInvocationStep } from './extract-max-tool-invocation-step';\nimport { getToolInvocations } from './get-tool-invocations';\nimport {\n createStreamingUIMessageState,\n processUIMessageStream,\n StreamingUIMessageState,\n} from './process-ui-message-stream';\nimport {\n isAssistantMessageWithCompletedToolCalls,\n shouldResubmitMessages,\n} from './should-resubmit-messages';\nimport type { CreateUIMessage, UIDataTypes, UIMessage } from './ui-messages';\nimport { updateToolCallResult } from './update-tool-call-result';\nimport { ChatRequestOptions, UseChatOptions } from './use-chat';\n\nexport interface ChatStoreSubscriber {\n onChatChanged: (event: ChatStoreEvent) => void;\n}\n\nexport interface ChatStoreEvent {\n type: 'chat-messages-changed' | 'chat-status-changed';\n chatId: number | string;\n error?: Error;\n}\n\nexport type ChatStatus = 'submitted' | 'streaming' | 'ready' | 'error';\n\nexport type ActiveResponse<MESSAGE_METADATA> = {\n state: StreamingUIMessageState<MESSAGE_METADATA>;\n abortController: AbortController | undefined;\n};\n\ntype ExtendedCallOptions<\n MESSAGE_METADATA,\n DATA_TYPES extends UIDataTypes,\n> = ChatRequestOptions & {\n onError?: (error: Error) => void;\n\n /**\nOptional callback function that is invoked when a tool call is received.\nIntended for automatic client-side tool execution.\n\nYou can optionally return a result for the tool call,\neither synchronously or asynchronously.\n */\n onToolCall?: ({\n toolCall,\n }: {\n toolCall: ToolCall<string, unknown>;\n }) => void | Promise<unknown> | unknown;\n\n /**\n * Optional callback function that is called when the assistant message is finished streaming.\n *\n * @param message The message that was streamed.\n */\n onFinish?: (options: {\n message: UIMessage<MESSAGE_METADATA, DATA_TYPES>;\n }) => void;\n};\n\nexport type UIDataPartSchemas = Record<\n string,\n Validator<any> | StandardSchemaV1<any>\n>;\n\nexport type InferUIDataParts<T extends UIDataPartSchemas> = {\n [K in keyof T]: T[K] extends Validator<infer U>\n ? U\n : T[K] extends StandardSchemaV1<infer U>\n ? U\n : unknown;\n};\n\nexport type ChatFactory<\n MESSAGE_METADATA,\n DATA_TYPES extends UIDataTypes,\n> = (options: {\n messages?: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n}) => Chat<MESSAGE_METADATA, DATA_TYPES>;\n\nexport type ChatStoreOptions<\n MESSAGE_METADATA,\n DATA_PART_SCHEMAS extends UIDataPartSchemas,\n> = {\n chats?: {\n [id: string]: {\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<DATA_PART_SCHEMAS>\n >[];\n };\n };\n generateId?: UseChatOptions['generateId'];\n transport: ChatTransport<\n MESSAGE_METADATA,\n InferUIDataParts<DATA_PART_SCHEMAS>\n >;\n maxSteps?: number;\n messageMetadataSchema?:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>;\n dataPartSchemas?: DATA_PART_SCHEMAS;\n};\n\nexport type ChatStoreFactory<\n MESSAGE_METADATA,\n DATA_PART_SCHEMAS extends UIDataPartSchemas,\n> = (\n options: ChatStoreOptions<MESSAGE_METADATA, DATA_PART_SCHEMAS>,\n) => ChatStore<MESSAGE_METADATA, DATA_PART_SCHEMAS>;\n\nexport interface Chat<MESSAGE_METADATA, DATA_TYPES extends UIDataTypes> {\n readonly status: ChatStatus;\n readonly messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n readonly error: Error | undefined;\n readonly activeResponse: ActiveResponse<MESSAGE_METADATA> | undefined;\n readonly jobExecutor: SerialJobExecutor;\n\n setStatus: (status: ChatStatus) => void;\n setError: (error: Error | undefined) => void;\n setActiveResponse: (\n activeResponse: ActiveResponse<MESSAGE_METADATA> | undefined,\n ) => void;\n pushMessage: (message: UIMessage<MESSAGE_METADATA, DATA_TYPES>) => void;\n popMessage: () => void;\n replaceMessage: (\n index: number,\n message: UIMessage<MESSAGE_METADATA, DATA_TYPES>,\n ) => void;\n setMessages: (messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[]) => void;\n snapshot?: <T>(thing: T) => T;\n}\n\nexport class ChatStore<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n> {\n private chats: Map<\n string,\n Chat<MESSAGE_METADATA, InferUIDataParts<UI_DATA_PART_SCHEMAS>>\n >;\n private readonly createChat: ChatFactory<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n private subscribers: Set<ChatStoreSubscriber>;\n private generateId: IdGenerator;\n private messageMetadataSchema:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>\n | undefined;\n private dataPartSchemas: UI_DATA_PART_SCHEMAS | undefined;\n private transport: ChatTransport<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n private maxSteps: number;\n\n constructor({\n chats = {},\n generateId,\n transport,\n maxSteps = 1,\n messageMetadataSchema,\n dataPartSchemas,\n createChat,\n }: {\n chats?: {\n [id: string]: {\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[];\n };\n };\n generateId?: UseChatOptions['generateId'];\n transport: ChatTransport<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n maxSteps?: number;\n messageMetadataSchema?:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>;\n dataPartSchemas?: UI_DATA_PART_SCHEMAS;\n createChat: ChatFactory<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n }) {\n this.createChat = createChat;\n this.chats = new Map(\n Object.entries(chats).map(([id, chat]) => [\n id,\n this.createChat({ messages: chat.messages }),\n ]),\n );\n\n this.maxSteps = maxSteps;\n this.transport = transport;\n this.subscribers = new Set();\n this.generateId = generateId ?? generateIdFunc;\n this.messageMetadataSchema = messageMetadataSchema;\n this.dataPartSchemas = dataPartSchemas;\n }\n\n hasChat(id: string) {\n return this.chats.has(id);\n }\n\n addChat(\n id: string,\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[],\n ) {\n this.chats.set(id, this.createChat({ messages }));\n }\n\n getChats() {\n return Array.from(this.chats.entries());\n }\n\n get chatCount() {\n return this.chats.size;\n }\n\n getStatus(id: string): ChatStatus {\n return this.getChatState(id).status;\n }\n\n setStatus({\n id,\n status,\n error,\n }: {\n id: string;\n status: ChatStatus;\n error?: Error;\n }) {\n const state = this.getChatState(id);\n\n if (state.status === status) return;\n\n state.setStatus(status);\n state.setError(error);\n\n this.emit({ type: 'chat-status-changed', chatId: id, error });\n }\n\n getError(id: string) {\n return this.getChatState(id).error;\n }\n\n getMessages(id: string) {\n return this.getChatState(id).messages;\n }\n\n getLastMessage(id: string) {\n const chat = this.getChatState(id);\n return chat.messages[chat.messages.length - 1];\n }\n\n subscribe(subscriber: ChatStoreSubscriber): () => void {\n this.subscribers.add(subscriber);\n return () => this.subscribers.delete(subscriber);\n }\n\n setMessages({\n id,\n messages,\n }: {\n id: string;\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[];\n }) {\n this.getChatState(id).setMessages(messages);\n this.emit({ type: 'chat-messages-changed', chatId: id });\n }\n\n removeAssistantResponse(id: string) {\n const chat = this.getChatState(id);\n const lastMessage = chat.messages[chat.messages.length - 1];\n\n if (lastMessage == null) {\n throw new Error('Cannot remove assistant response from empty chat');\n }\n\n if (lastMessage.role !== 'assistant') {\n throw new Error('Last message is not an assistant message');\n }\n\n chat.popMessage();\n this.emit({ type: 'chat-messages-changed', chatId: id });\n }\n\n async submitMessage({\n chatId,\n message,\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n }: ExtendedCallOptions<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > & {\n chatId: string;\n message: CreateUIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n }) {\n const state = this.getChatState(chatId);\n state.pushMessage({ ...message, id: message.id ?? this.generateId() });\n this.emit({\n type: 'chat-messages-changed',\n chatId,\n });\n await this.triggerRequest({\n chatId,\n headers,\n body,\n requestType: 'generate',\n onError,\n onToolCall,\n onFinish,\n });\n }\n\n async resubmitLastUserMessage({\n chatId,\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n }: ExtendedCallOptions<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > & {\n chatId: string;\n }) {\n const chat = this.getChatState(chatId);\n\n if (chat.messages[chat.messages.length - 1].role === 'assistant') {\n chat.popMessage();\n this.emit({\n type: 'chat-messages-changed',\n chatId,\n });\n }\n\n if (chat.messages.length === 0) {\n return;\n }\n\n return this.triggerRequest({\n chatId,\n requestType: 'generate',\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n });\n }\n\n async resumeStream({\n chatId,\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n }: ExtendedCallOptions<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > & {\n chatId: string;\n }) {\n return this.triggerRequest({\n chatId,\n requestType: 'resume',\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n });\n }\n\n async addToolResult({\n chatId,\n toolCallId,\n result,\n }: {\n chatId: string;\n toolCallId: string;\n result: unknown;\n }) {\n const chat = this.getChatState(chatId);\n\n chat.jobExecutor.run(async () => {\n updateToolCallResult({\n messages: chat.messages,\n toolCallId,\n toolResult: result,\n });\n\n this.setMessages({\n id: chatId,\n messages: chat.messages,\n });\n\n // when the request is ongoing, the auto-submit will be triggered after the request is finished\n if (chat.status === 'submitted' || chat.status === 'streaming') {\n return;\n }\n\n // auto-submit when all tool calls in the last assistant message have results:\n const lastMessage = chat.messages[chat.messages.length - 1];\n if (isAssistantMessageWithCompletedToolCalls(lastMessage)) {\n // we do not await this call to avoid a deadlock in the serial job executor; triggerRequest also uses the job executor internally.\n this.triggerRequest({\n requestType: 'generate',\n chatId,\n });\n }\n });\n }\n\n async stopStream({ chatId }: { chatId: string }) {\n const chat = this.getChatState(chatId);\n\n if (chat.status !== 'streaming' && chat.status !== 'submitted') return;\n\n if (chat.activeResponse?.abortController) {\n chat.activeResponse.abortController.abort();\n chat.activeResponse.abortController = undefined;\n }\n }\n\n private emit(event: ChatStoreEvent) {\n for (const subscriber of this.subscribers) {\n subscriber.onChatChanged(event);\n }\n }\n\n private getChatState(\n id: string,\n ): Chat<MESSAGE_METADATA, InferUIDataParts<UI_DATA_PART_SCHEMAS>> {\n if (!this.hasChat(id)) {\n this.addChat(id, []);\n }\n return this.chats.get(id)!;\n }\n\n private async triggerRequest({\n chatId,\n requestType,\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n }: ExtendedCallOptions<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > & {\n chatId: string;\n requestType: 'generate' | 'resume';\n }) {\n const chat = this.getChatState(chatId);\n\n this.setStatus({ id: chatId, status: 'submitted', error: undefined });\n\n const messageCount = chat.messages.length;\n const maxStep = extractMaxToolInvocationStep(\n getToolInvocations(chat.messages[chat.messages.length - 1]),\n );\n\n try {\n const lastMessage = chat.messages[chat.messages.length - 1];\n const activeResponse = {\n state: createStreamingUIMessageState({\n lastMessage: chat.snapshot ? chat.snapshot(lastMessage) : lastMessage,\n newMessageId: this.generateId(),\n }),\n abortController: new AbortController(),\n };\n\n chat.setActiveResponse(activeResponse);\n\n const stream = await this.transport.submitMessages({\n chatId,\n messages: chat.messages,\n body,\n headers,\n abortController: activeResponse.abortController,\n requestType,\n });\n\n const runUpdateMessageJob = (\n job: (options: {\n state: StreamingUIMessageState<\n MESSAGE_METADATA,\n UI_DATA_PART_SCHEMAS\n >;\n write: () => void;\n }) => Promise<void>,\n ) =>\n // serialize the job execution to avoid race conditions:\n chat.jobExecutor.run(() =>\n job({\n state: activeResponse.state,\n write: () => {\n // streaming is set on first write (before it should be \"submitted\")\n this.setStatus({ id: chatId, status: 'streaming' });\n\n const replaceLastMessage =\n activeResponse.state.message.id ===\n chat.messages[chat.messages.length - 1].id;\n\n if (replaceLastMessage) {\n chat.replaceMessage(\n chat.messages.length - 1,\n activeResponse.state.message,\n );\n } else {\n chat.pushMessage(activeResponse.state.message);\n }\n\n this.emit({\n type: 'chat-messages-changed',\n chatId,\n });\n },\n }),\n );\n\n await consumeStream({\n stream: processUIMessageStream({\n stream,\n onToolCall,\n messageMetadataSchema: this.messageMetadataSchema,\n dataPartSchemas: this.dataPartSchemas,\n runUpdateMessageJob,\n }),\n onError: error => {\n throw error;\n },\n });\n\n onFinish?.({ message: activeResponse.state.message });\n\n this.setStatus({ id: chatId, status: 'ready' });\n } catch (err) {\n // Ignore abort errors as they are expected.\n if ((err as any).name === 'AbortError') {\n this.setStatus({ id: chatId, status: 'ready' });\n return null;\n }\n\n if (onError && err instanceof Error) {\n onError(err);\n }\n\n this.setStatus({ id: chatId, status: 'error', error: err as Error });\n } finally {\n chat.setActiveResponse(undefined);\n }\n\n // auto-submit when all tool calls in the last assistant message have results\n // and assistant has not answered yet\n if (\n shouldResubmitMessages({\n originalMaxToolInvocationStep: maxStep,\n originalMessageCount: messageCount,\n maxSteps: this.maxSteps,\n messages: chat.messages,\n })\n ) {\n await this.triggerRequest({\n chatId,\n requestType,\n onError,\n onToolCall,\n onFinish,\n headers,\n body,\n });\n }\n }\n}\n","import { extractMaxToolInvocationStep } from './extract-max-tool-invocation-step';\nimport { getToolInvocations } from './get-tool-invocations';\nimport { UIMessage } from './ui-messages';\n\nexport function shouldResubmitMessages({\n originalMaxToolInvocationStep,\n originalMessageCount,\n maxSteps,\n messages,\n}: {\n originalMaxToolInvocationStep: number | undefined;\n originalMessageCount: number;\n maxSteps: number;\n messages: UIMessage[];\n}) {\n const lastMessage = messages[messages.length - 1];\n return (\n // check if the feature is enabled:\n maxSteps > 1 &&\n // ensure there is a last message:\n lastMessage != null &&\n // ensure we actually have new steps (to prevent infinite loops in case of errors):\n (messages.length > originalMessageCount ||\n extractMaxToolInvocationStep(getToolInvocations(lastMessage)) !==\n originalMaxToolInvocationStep) &&\n // check that next step is possible:\n isAssistantMessageWithCompletedToolCalls(lastMessage) &&\n // limit the number of automatic steps:\n (extractMaxToolInvocationStep(getToolInvocations(lastMessage)) ?? 0) <\n maxSteps\n );\n}\n\n/**\nCheck if the message is an assistant message with completed tool calls.\nThe last step of the message must have at least one tool invocation and\nall tool invocations must have a result.\n */\nexport function isAssistantMessageWithCompletedToolCalls(\n message: UIMessage,\n): message is UIMessage & {\n role: 'assistant';\n} {\n if (message.role !== 'assistant') {\n return false;\n }\n\n const lastStepStartIndex = message.parts.reduce((lastIndex, part, index) => {\n return part.type === 'step-start' ? index : lastIndex;\n }, -1);\n\n const lastStepToolInvocations = message.parts\n .slice(lastStepStartIndex + 1)\n .filter(part => part.type === 'tool-invocation');\n\n return (\n lastStepToolInvocations.length > 0 &&\n lastStepToolInvocations.every(part => 'result' in part.toolInvocation)\n );\n}\n","import { ToolInvocationUIPart, UIMessage } from './ui-messages';\n\n/**\n * Updates the result of a specific tool invocation in the last message of the given messages array.\n *\n * @param {object} params - The parameters object.\n * @param {UIMessage[]} params.messages - An array of messages, from which the last one is updated.\n * @param {string} params.toolCallId - The unique identifier for the tool invocation to update.\n * @param {unknown} params.toolResult - The result object to attach to the tool invocation.\n * @returns {void} This function does not return anything.\n */\nexport function updateToolCallResult({\n messages,\n toolCallId,\n toolResult: result,\n}: {\n messages: UIMessage[];\n toolCallId: string;\n toolResult: unknown;\n}) {\n const lastMessage = messages[messages.length - 1];\n\n const invocationPart = lastMessage.parts.find(\n (part): part is ToolInvocationUIPart =>\n part.type === 'tool-invocation' &&\n part.toolInvocation.toolCallId === toolCallId,\n );\n\n if (invocationPart == null) {\n return;\n }\n\n invocationPart.toolInvocation = {\n ...invocationPart.toolInvocation,\n state: 'result' as const,\n result,\n };\n}\n","import { FetchFunction } from '@ai-sdk/provider-utils';\nimport { UIMessageStreamPart } from '../ui-message-stream';\nimport { fetchTextStream, fetchUIMessageStream } from './call-chat-api';\nimport { UIDataTypes, UIMessage } from './ui-messages';\n\nexport interface ChatTransport<\n MESSAGE_METADATA,\n DATA_TYPES extends UIDataTypes,\n> {\n submitMessages: (options: {\n chatId: string;\n messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n abortController: AbortController;\n body?: object;\n headers?: Record<string, string> | Headers;\n requestType: 'generate' | 'resume'; // TODO have separate functions\n }) => Promise<ReadableStream<UIMessageStreamPart>>;\n}\n\nexport class DefaultChatTransport<\n MESSAGE_METADATA,\n DATA_TYPES extends UIDataTypes,\n> implements ChatTransport<MESSAGE_METADATA, DATA_TYPES>\n{\n private api: string;\n private credentials?: RequestCredentials;\n private headers?: Record<string, string> | Headers;\n private body?: object;\n private fetch?: FetchFunction;\n private prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n requestBody?: object;\n }) => unknown;\n\n constructor({\n api,\n credentials,\n headers,\n body,\n fetch,\n prepareRequestBody,\n }: {\n api: string;\n\n /**\n * The credentials mode to be used for the fetch request.\n * Possible values are: 'omit', 'same-origin', 'include'.\n * Defaults to 'same-origin'.\n */\n credentials?: RequestCredentials;\n\n /**\n * HTTP headers to be sent with the API request.\n */\n headers?: Record<string, string> | Headers;\n\n /**\n * Extra body object to be sent with the API request.\n * @example\n * Send a `sessionId` to the API along with the messages.\n * ```js\n * useChat({\n * body: {\n * sessionId: '123',\n * }\n * })\n * ```\n */\n body?: object;\n\n /**\n Custom fetch implementation. You can use it as a middleware to intercept requests,\n or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * When a function is provided, it will be used\n * to prepare the request body for the chat API. This can be useful for\n * customizing the request body based on the messages and data in the chat.\n *\n * @param id The id of the chat.\n * @param messages The current messages in the chat.\n * @param requestBody The request body object passed in the chat request.\n */\n prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n requestBody?: object;\n }) => unknown;\n }) {\n this.api = api;\n this.credentials = credentials;\n this.headers = headers;\n this.body = body;\n this.fetch = fetch;\n this.prepareRequestBody = prepareRequestBody;\n }\n\n submitMessages({\n chatId,\n messages,\n abortController,\n body,\n headers,\n requestType,\n }: Parameters<\n ChatTransport<MESSAGE_METADATA, DATA_TYPES>['submitMessages']\n >[0]) {\n return fetchUIMessageStream({\n api: this.api,\n headers: {\n ...this.headers,\n ...headers,\n },\n body: this.prepareRequestBody?.({\n chatId,\n messages,\n ...this.body,\n ...body,\n }) ?? {\n chatId,\n messages,\n ...this.body,\n ...body,\n },\n credentials: this.credentials,\n abortController: () => abortController,\n fetch: this.fetch,\n requestType,\n });\n }\n}\n\nexport class TextStreamChatTransport<\n MESSAGE_METADATA,\n DATA_TYPES extends UIDataTypes,\n> implements ChatTransport<MESSAGE_METADATA, DATA_TYPES>\n{\n private api: string;\n private credentials?: RequestCredentials;\n private headers?: Record<string, string> | Headers;\n private body?: object;\n private fetch?: FetchFunction;\n private prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n requestBody?: object;\n }) => unknown;\n\n constructor({\n api,\n credentials,\n headers,\n body,\n fetch,\n prepareRequestBody,\n }: {\n api: string;\n\n /**\n * The credentials mode to be used for the fetch request.\n * Possible values are: 'omit', 'same-origin', 'include'.\n * Defaults to 'same-origin'.\n */\n credentials?: RequestCredentials;\n\n /**\n * HTTP headers to be sent with the API request.\n */\n headers?: Record<string, string> | Headers;\n\n /**\n * Extra body object to be sent with the API request.\n * @example\n * Send a `sessionId` to the API along with the messages.\n * ```js\n * useChat({\n * body: {\n * sessionId: '123',\n * }\n * })\n * ```\n */\n body?: object;\n\n /**\n Custom fetch implementation. You can use it as a middleware to intercept requests,\n or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * When a function is provided, it will be used\n * to prepare the request body for the chat API. This can be useful for\n * customizing the request body based on the messages and data in the chat.\n *\n * @param id The id of the chat.\n * @param messages The current messages in the chat.\n * @param requestBody The request body object passed in the chat request.\n */\n prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n requestBody?: object;\n }) => unknown;\n }) {\n this.api = api;\n this.credentials = credentials;\n this.headers = headers;\n this.body = body;\n this.fetch = fetch;\n this.prepareRequestBody = prepareRequestBody;\n }\n\n submitMessages({\n chatId,\n messages,\n abortController,\n body,\n headers,\n requestType,\n }: Parameters<\n ChatTransport<MESSAGE_METADATA, DATA_TYPES>['submitMessages']\n >[0]) {\n return fetchTextStream({\n api: this.api,\n headers: {\n ...this.headers,\n ...headers,\n },\n body: this.prepareRequestBody?.({\n chatId,\n messages,\n ...this.body,\n ...body,\n }) ?? {\n chatId,\n messages,\n ...this.body,\n ...body,\n },\n credentials: this.credentials,\n abortController: () => abortController,\n fetch: this.fetch,\n requestType,\n });\n }\n}\n","import { FileUIPart } from './ui-messages';\n\nexport async function convertFileListToFileUIParts(\n files: FileList | undefined,\n): Promise<Array<FileUIPart>> {\n if (files == null) {\n return [];\n }\n\n // React-native doesn't have a FileList global:\n if (!globalThis.FileList || !(files instanceof globalThis.FileList)) {\n throw new Error('FileList is not supported in the current environment');\n }\n\n return Promise.all(\n Array.from(files).map(async file => {\n const { name, type } = file;\n\n const dataUrl = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = readerEvent => {\n resolve(readerEvent.target?.result as string);\n };\n reader.onerror = error => reject(error);\n reader.readAsDataURL(file);\n });\n\n return {\n type: 'file',\n mediaType: type,\n filename: name,\n url: dataUrl,\n };\n }),\n );\n}\n","import { ToolSet } from '../../core/generate-text/tool-set';\nimport { ToolResultPart } from '../../core/prompt/content-part';\nimport { AssistantContent, ModelMessage } from '../../core/prompt/message';\nimport { MessageConversionError } from '../../core/prompt/message-conversion-error';\nimport {\n FileUIPart,\n ReasoningUIPart,\n TextUIPart,\n ToolInvocationUIPart,\n UIMessage,\n} from './ui-messages';\n\n/**\nConverts an array of messages from useChat into an array of CoreMessages that can be used\nwith the AI core functions (e.g. `streamText`).\n */\nexport function convertToModelMessages<TOOLS extends ToolSet = never>(\n messages: Array<Omit<UIMessage, 'id'>>,\n options?: { tools?: TOOLS },\n): ModelMessage[] {\n const tools = options?.tools ?? ({} as TOOLS);\n const modelMessages: ModelMessage[] = [];\n\n for (const message of messages) {\n switch (message.role) {\n case 'system': {\n modelMessages.push({\n role: 'system',\n content: message.parts\n .map(part => (part.type === 'text' ? part.text : ''))\n .join(''),\n });\n break;\n }\n\n case 'user': {\n modelMessages.push({\n role: 'user',\n content: message.parts\n .filter(\n (part): part is TextUIPart | FileUIPart =>\n part.type === 'text' || part.type === 'file',\n )\n .map(part =>\n part.type === 'file'\n ? {\n type: 'file' as const,\n mediaType: part.mediaType,\n filename: part.filename,\n data: part.url,\n }\n : part,\n ),\n });\n\n break;\n }\n\n case 'assistant': {\n if (message.parts != null) {\n let currentStep = 0;\n let blockHasToolInvocations = false;\n let block: Array<\n TextUIPart | ToolInvocationUIPart | ReasoningUIPart | FileUIPart\n > = [];\n\n function processBlock() {\n const content: AssistantContent = [];\n\n for (const part of block) {\n switch (part.type) {\n case 'text': {\n content.push(part);\n break;\n }\n case 'file': {\n content.push({\n type: 'file' as const,\n mediaType: part.mediaType,\n data: part.url,\n });\n break;\n }\n case 'reasoning': {\n content.push({\n type: 'reasoning' as const,\n text: part.text,\n providerOptions: part.providerMetadata,\n });\n break;\n }\n case 'tool-invocation':\n content.push({\n type: 'tool-call' as const,\n toolCallId: part.toolInvocation.toolCallId,\n toolName: part.toolInvocation.toolName,\n args: part.toolInvocation.args,\n });\n break;\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n }\n\n modelMessages.push({\n role: 'assistant',\n content,\n });\n\n // check if there are tool invocations with results in the block\n const stepInvocations = block\n .filter(\n (\n part:\n | TextUIPart\n | ToolInvocationUIPart\n | ReasoningUIPart\n | FileUIPart,\n ): part is ToolInvocationUIPart =>\n part.type === 'tool-invocation',\n )\n .map(part => part.toolInvocation);\n\n // tool message with tool results\n if (stepInvocations.length > 0) {\n modelMessages.push({\n role: 'tool',\n content: stepInvocations.map(\n (toolInvocation): ToolResultPart => {\n if (!('result' in toolInvocation)) {\n throw new MessageConversionError({\n originalMessage: message,\n message:\n 'ToolInvocation must have a result: ' +\n JSON.stringify(toolInvocation),\n });\n }\n\n const { toolCallId, toolName, result } = toolInvocation;\n\n const tool = tools[toolName];\n return tool?.experimental_toToolResultContent != null\n ? {\n type: 'tool-result',\n toolCallId,\n toolName,\n result: tool.experimental_toToolResultContent(result),\n experimental_content:\n tool.experimental_toToolResultContent(result),\n }\n : {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n },\n ),\n });\n }\n\n // updates for next block\n block = [];\n blockHasToolInvocations = false;\n currentStep++;\n }\n\n for (const part of message.parts) {\n switch (part.type) {\n case 'text': {\n if (blockHasToolInvocations) {\n processBlock(); // text must come before tool invocations\n }\n block.push(part);\n break;\n }\n case 'file':\n case 'reasoning': {\n block.push(part);\n break;\n }\n case 'tool-invocation': {\n if ((part.toolInvocation.step ?? 0) !== currentStep) {\n processBlock();\n }\n block.push(part);\n blockHasToolInvocations = true;\n break;\n }\n }\n }\n\n processBlock();\n\n break;\n }\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = message.role;\n throw new MessageConversionError({\n originalMessage: message,\n message: `Unsupported role: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n return modelMessages;\n}\n\n/**\n@deprecated Use `convertToModelMessages` instead.\n */\n// TODO remove in AI SDK 6\nexport const convertToCoreMessages = convertToModelMessages;\n","import {\n FetchFunction,\n generateId as generateIdFunc,\n IdGenerator,\n StandardSchemaV1,\n Validator,\n} from '@ai-sdk/provider-utils';\nimport {\n ChatFactory,\n ChatStoreOptions,\n InferUIDataParts,\n type UIDataPartSchemas,\n} from './chat-store';\nimport { DefaultChatTransport } from './chat-transport';\nimport { UIMessage } from './ui-messages';\n\nexport interface DefaultChatStoreOptions<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n> {\n /**\n * Schema for the message metadata. Validates the message metadata.\n * Message metadata can be undefined or must match the schema.\n */\n messageMetadataSchema?:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>;\n\n /**\n * Schema for the data types. Validates the data types.\n */\n dataPartSchemas?: UI_DATA_PART_SCHEMAS;\n\n /**\n * The API endpoint that accepts a `{ messages: Message[] }` object and returns\n * a stream of tokens of the AI chat response.\n *\n * Defaults to `/api/chat`\n */\n api?: string;\n\n /**\n * A way to provide a function that is going to be used for ids for messages and the chat.\n * If not provided the default AI SDK `generateId` is used.\n */\n generateId?: IdGenerator;\n\n /**\n * The credentials mode to be used for the fetch request.\n * Possible values are: 'omit', 'same-origin', 'include'.\n * Defaults to 'same-origin'.\n */\n credentials?: RequestCredentials;\n\n /**\n * HTTP headers to be sent with the API request.\n */\n headers?: Record<string, string> | Headers;\n\n /**\n * Extra body object to be sent with the API request.\n * @example\n * Send a `sessionId` to the API along with the messages.\n * ```js\n * useChat({\n * body: {\n * sessionId: '123',\n * }\n * })\n * ```\n */\n body?: object;\n\n /**\n Custom fetch implementation. You can use it as a middleware to intercept requests,\n or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n Maximum number of sequential LLM calls (steps), e.g. when you use tool calls.\n Must be at least 1.\n\n A maximum number is required to prevent infinite loops in the case of misconfigured tools.\n\n By default, it's set to 1, which means that only a single LLM call is made.\n */\n maxSteps?: number;\n\n /**\n * When a function is provided, it will be used\n * to prepare the request body for the chat API. This can be useful for\n * customizing the request body based on the messages and data in the chat.\n *\n * @param chatId The id of the chat.\n * @param messages The current messages in the chat.\n * @param requestBody The request body object passed in the chat request.\n */\n prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[];\n requestBody?: object;\n }) => unknown;\n\n chats?: {\n [id: string]: {\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[];\n };\n };\n}\n\nexport function defaultChatStoreOptions<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n>({\n api = '/api/chat',\n fetch,\n credentials,\n headers,\n body,\n prepareRequestBody,\n generateId = generateIdFunc,\n messageMetadataSchema,\n maxSteps = 1,\n dataPartSchemas,\n chats,\n}: DefaultChatStoreOptions<\n MESSAGE_METADATA,\n UI_DATA_PART_SCHEMAS\n>): () => ChatStoreOptions<MESSAGE_METADATA, UI_DATA_PART_SCHEMAS> {\n return () => ({\n transport: new DefaultChatTransport<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >({\n api,\n fetch,\n credentials,\n headers,\n body,\n prepareRequestBody,\n }),\n generateId,\n messageMetadataSchema,\n dataPartSchemas,\n maxSteps,\n chats,\n });\n}\n","import {\n createStreamingUIMessageState,\n processUIMessageStream,\n StreamingUIMessageState,\n} from '../ui/process-ui-message-stream';\nimport { UIMessage } from '../ui/ui-messages';\nimport { UIMessageStreamPart } from './ui-message-stream-parts';\n\nexport function handleUIMessageStreamFinish({\n newMessageId,\n originalMessages = [],\n onFinish,\n stream,\n}: {\n stream: ReadableStream<UIMessageStreamPart>;\n\n newMessageId: string;\n\n /**\n * The original messages.\n */\n originalMessages?: UIMessage[];\n\n onFinish?: (options: {\n /**\n * The updates list of UI messages.\n */\n messages: UIMessage[];\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: UIMessage;\n }) => void;\n}) {\n if (onFinish == null) {\n return stream;\n }\n\n const lastMessage = originalMessages[originalMessages.length - 1];\n const isContinuation = lastMessage?.role === 'assistant';\n const messageId = isContinuation ? lastMessage.id : newMessageId;\n\n const state = createStreamingUIMessageState({\n lastMessage: structuredClone(lastMessage),\n newMessageId: messageId,\n });\n\n const runUpdateMessageJob = async (\n job: (options: {\n state: StreamingUIMessageState;\n write: () => void;\n }) => Promise<void>,\n ) => {\n await job({ state, write: () => {} });\n };\n\n return processUIMessageStream({\n stream,\n runUpdateMessageJob,\n }).pipeThrough(\n new TransformStream({\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,\n messages: [\n ...(isContinuation\n ? originalMessages.slice(0, -1)\n : originalMessages),\n state.message,\n ],\n });\n },\n }),\n );\n}\n","import { UIMessage } from '../ui/ui-messages';\nimport { handleUIMessageStreamFinish } from './handle-ui-message-stream-finish';\nimport { UIMessageStreamPart } from './ui-message-stream-parts';\nimport { UIMessageStreamWriter } from './ui-message-stream-writer';\n\nexport function createUIMessageStream({\n execute,\n onError = () => 'An error occurred.', // mask error messages for safety by default\n originalMessages,\n onFinish,\n}: {\n execute: (options: { writer: UIMessageStreamWriter }) => Promise<void> | void;\n onError?: (error: unknown) => string;\n\n /**\n * The original messages.\n */\n originalMessages?: UIMessage[];\n\n onFinish?: (options: {\n /**\n * The updates list of UI messages.\n */\n messages: UIMessage[];\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: UIMessage;\n }) => void;\n}): ReadableStream<UIMessageStreamPart> {\n let controller!: ReadableStreamDefaultController<UIMessageStreamPart>;\n\n const ongoingStreamPromises: Promise<void>[] = [];\n\n const stream = new ReadableStream({\n start(controllerArg) {\n controller = controllerArg;\n },\n });\n\n function safeEnqueue(data: UIMessageStreamPart) {\n try {\n controller.enqueue(data);\n } catch (error) {\n // suppress errors when the stream has been closed\n }\n }\n\n try {\n const result = execute({\n writer: {\n write(part: UIMessageStreamPart) {\n safeEnqueue(part);\n },\n merge(streamArg) {\n ongoingStreamPromises.push(\n (async () => {\n const reader = streamArg.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n safeEnqueue(value);\n }\n })().catch(error => {\n safeEnqueue({ type: 'error', errorText: onError(error) });\n }),\n );\n },\n onError,\n },\n });\n\n if (result) {\n ongoingStreamPromises.push(\n result.catch(error => {\n safeEnqueue({ type: 'error', errorText: onError(error) });\n }),\n );\n }\n } catch (error) {\n safeEnqueue({ type: 'error', errorText: onError(error) });\n }\n\n // Wait until all ongoing streams are done. This approach enables merging\n // streams even after execute has returned, as long as there is still an\n // open merged stream. This is important to e.g. forward new streams and\n // from callbacks.\n const waitForStreams: Promise<void> = new Promise(async resolve => {\n while (ongoingStreamPromises.length > 0) {\n await ongoingStreamPromises.shift();\n }\n resolve();\n });\n\n waitForStreams.finally(() => {\n try {\n controller.close();\n } catch (error) {\n // suppress errors when the stream has been closed\n }\n });\n\n return handleUIMessageStreamFinish({\n stream,\n newMessageId: '',\n originalMessages,\n onFinish,\n });\n}\n","export const uiMessageStreamHeaders = {\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","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","import { prepareHeaders } from '../util/prepare-headers';\nimport { uiMessageStreamHeaders } from './ui-message-stream-headers';\nimport { UIMessageStreamPart } from './ui-message-stream-parts';\nimport { JsonToSseTransformStream } from './json-to-sse-transform-stream';\n\nexport function createUIMessageStreamResponse({\n status,\n statusText,\n headers,\n stream,\n}: ResponseInit & {\n stream: ReadableStream<UIMessageStreamPart>;\n}): Response {\n return new Response(\n stream\n .pipeThrough(new JsonToSseTransformStream())\n .pipeThrough(new TextEncoderStream()),\n {\n status,\n statusText,\n headers: prepareHeaders(headers, uiMessageStreamHeaders),\n },\n );\n}\n","import { ServerResponse } from 'node:http';\nimport { prepareHeaders } from '../util/prepare-headers';\nimport { writeToServerResponse } from '../util/write-to-server-response';\nimport { uiMessageStreamHeaders } from './ui-message-stream-headers';\nimport { UIMessageStreamPart } from './ui-message-stream-parts';\nimport { JsonToSseTransformStream } from './json-to-sse-transform-stream';\n\nexport function pipeUIMessageStreamToResponse({\n response,\n status,\n statusText,\n headers,\n stream,\n}: {\n response: ServerResponse;\n stream: ReadableStream<UIMessageStreamPart>;\n} & ResponseInit): void {\n writeToServerResponse({\n response,\n status,\n statusText,\n headers: Object.fromEntries(\n prepareHeaders(headers, uiMessageStreamHeaders).entries(),\n ),\n stream: stream\n .pipeThrough(new JsonToSseTransformStream())\n .pipeThrough(new TextEncoderStream()),\n });\n}\n","import { InvalidArgumentError } from '../../src/error/invalid-argument-error';\n\n/**\n * Calculates the cosine similarity between two vectors. This is a useful metric for\n * comparing the similarity of two vectors such as embeddings.\n *\n * @param vector1 - The first vector.\n * @param vector2 - The second vector.\n *\n * @returns The cosine similarity between vector1 and vector2.\n * @returns 0 if either vector is the zero vector.\n *\n * @throws {InvalidArgumentError} If the vectors do not have the same length.\n */\nexport function cosineSimilarity(vector1: number[], vector2: number[]): number {\n if (vector1.length !== vector2.length) {\n throw new InvalidArgumentError({\n parameter: 'vector1,vector2',\n value: { vector1Length: vector1.length, vector2Length: vector2.length },\n message: `Vectors must have the same length`,\n });\n }\n\n const n = vector1.length;\n\n if (n === 0) {\n return 0; // Return 0 for empty vectors if no error is thrown\n }\n\n let magnitudeSquared1 = 0;\n let magnitudeSquared2 = 0;\n let dotProduct = 0;\n\n for (let i = 0; i < n; i++) {\n const value1 = vector1[i];\n const value2 = vector2[i];\n\n magnitudeSquared1 += value1 * value1;\n magnitudeSquared2 += value2 * value2;\n dotProduct += value1 * value2;\n }\n\n return magnitudeSquared1 === 0 || magnitudeSquared2 === 0\n ? 0\n : dotProduct /\n (Math.sqrt(magnitudeSquared1) * Math.sqrt(magnitudeSquared2));\n}\n","/**\n * Converts a data URL of type text/* to a text string.\n */\nexport function getTextFromDataUrl(dataUrl: string): string {\n const [header, base64Content] = dataUrl.split(',');\n const mediaType = header.split(';')[0].split(':')[1];\n\n if (mediaType == null || base64Content == null) {\n throw new Error('Invalid data URL format');\n }\n\n try {\n return window.atob(base64Content);\n } catch (error) {\n throw new Error(`Error decoding data URL`);\n }\n}\n","/**\n * Performs a deep-equal comparison of two parsed JSON objects.\n *\n * @param {any} obj1 - The first object to compare.\n * @param {any} obj2 - The second object to compare.\n * @returns {boolean} - Returns true if the two objects are deeply equal, false otherwise.\n */\nexport function isDeepEqualData(obj1: any, obj2: any): boolean {\n // Check for strict equality first\n if (obj1 === obj2) return true;\n\n // Check if either is null or undefined\n if (obj1 == null || obj2 == null) return false;\n\n // Check if both are objects\n if (typeof obj1 !== 'object' && typeof obj2 !== 'object')\n return obj1 === obj2;\n\n // If they are not strictly equal, they both need to be Objects\n if (obj1.constructor !== obj2.constructor) return false;\n\n // Special handling for Date objects\n if (obj1 instanceof Date && obj2 instanceof Date) {\n return obj1.getTime() === obj2.getTime();\n }\n\n // Handle arrays: compare length and then perform a recursive deep comparison on each item\n if (Array.isArray(obj1)) {\n if (obj1.length !== obj2.length) return false;\n for (let i = 0; i < obj1.length; i++) {\n if (!isDeepEqualData(obj1[i], obj2[i])) return false;\n }\n return true; // All array elements matched\n }\n\n // Compare the set of keys in each object\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n\n // Check each key-value pair recursively\n for (const key of keys1) {\n if (!keys2.includes(key)) return false;\n if (!isDeepEqualData(obj1[key], obj2[key])) return false;\n }\n\n return true; // All keys and values matched\n}\n","import { Job } from './job';\n\nexport class SerialJobExecutor {\n private queue: Array<Job> = [];\n private isProcessing = false;\n\n private async processQueue() {\n if (this.isProcessing) {\n return;\n }\n\n this.isProcessing = true;\n\n while (this.queue.length > 0) {\n await this.queue[0]();\n this.queue.shift();\n }\n\n this.isProcessing = false;\n }\n\n async run(job: Job): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.queue.push(async () => {\n try {\n await job();\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n\n void this.processQueue();\n });\n }\n}\n","import { delay as delayFunction } from '@ai-sdk/provider-utils';\n\n/**\n * Creates a ReadableStream that emits the provided values with an optional delay between each value.\n *\n * @param options - The configuration options\n * @param options.chunks - Array of values to be emitted by the stream\n * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @returns A ReadableStream that emits the provided values\n */\nexport function simulateReadableStream<T>({\n chunks,\n initialDelayInMs = 0,\n chunkDelayInMs = 0,\n _internal,\n}: {\n chunks: T[];\n initialDelayInMs?: number | null;\n chunkDelayInMs?: number | null;\n _internal?: {\n delay?: (ms: number | null) => Promise<void>;\n };\n}): ReadableStream<T> {\n const delay = _internal?.delay ?? delayFunction;\n\n let index = 0;\n\n return new ReadableStream({\n async pull(controller) {\n if (index < chunks.length) {\n await delay(index === 0 ? initialDelayInMs : chunkDelayInMs);\n controller.enqueue(chunks[index++]);\n } else {\n controller.close();\n }\n },\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/**\nThe `retryWithExponentialBackoff` strategy retries a failed API call with an exponential backoff.\nYou can configure the maximum number of retries, the initial delay, and the backoff factor.\n */\nexport const retryWithExponentialBackoff =\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 await delay(delayInMs);\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 { InvalidArgumentError } from '../../src/error/invalid-argument-error';\nimport {\n RetryFunction,\n retryWithExponentialBackoff,\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: retryWithExponentialBackoff({ maxRetries: maxRetriesResult }),\n };\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 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 } finally {\n // always stop the span when there is an error:\n span.end();\n }\n\n throw error;\n }\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 === undefined) {\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 === undefined\n ? attributes\n : { ...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 === undefined\n ? attributes\n : { ...attributes, [key]: result };\n }\n\n // value is an attribute value already:\n return { ...attributes, [key]: value };\n }, {});\n}\n","import { prepareRetries } from '../../src/util/prepare-retries';\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 { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { EmbeddingModel, ProviderOptions } from '../types';\nimport { EmbedResult } from './embed-result';\n\n/**\nEmbed a value using an embedding model. The type of the value is defined by the embedding model.\n\n@param model - The embedding model to use.\n@param value - The value that should be embedded.\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@returns A result object that contains the embedding, the value, and additional information.\n */\nexport async function embed<VALUE>({\n model,\n value,\n providerOptions,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n experimental_telemetry: telemetry,\n}: {\n /**\nThe embedding model to use.\n */\n model: EmbeddingModel<VALUE>;\n\n /**\nThe value that should be embedded.\n */\n value: VALUE;\n\n /**\nMaximum number of retries per embedding model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n\n /**\n Additional provider-specific options. They are passed through\n to the provider from the AI SDK and enable provider-specific\n functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * Optional telemetry configuration (experimental).\n */\n experimental_telemetry?: TelemetrySettings;\n}): Promise<EmbedResult<VALUE>> {\n const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n const baseTelemetryAttributes = getBaseTelemetryAttributes({\n model,\n telemetry,\n headers,\n settings: { maxRetries },\n });\n\n const tracer = getTracer(telemetry);\n\n return recordSpan({\n name: 'ai.embed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({ operationId: 'ai.embed', telemetry }),\n ...baseTelemetryAttributes,\n 'ai.value': { input: () => JSON.stringify(value) },\n },\n }),\n tracer,\n fn: async span => {\n const { embedding, usage, response } = await retry(() =>\n // nested spans to align with the embedMany telemetry data:\n recordSpan({\n name: 'ai.embed.doEmbed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.embed.doEmbed',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.values': { input: () => [JSON.stringify(value)] },\n },\n }),\n tracer,\n fn: async doEmbedSpan => {\n const modelResponse = await model.doEmbed({\n values: [value],\n abortSignal,\n headers,\n providerOptions,\n });\n\n const embedding = modelResponse.embeddings[0];\n const usage = modelResponse.usage ?? { tokens: NaN };\n\n doEmbedSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n modelResponse.embeddings.map(embedding =>\n JSON.stringify(embedding),\n ),\n },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return {\n embedding,\n usage,\n response: modelResponse.response,\n };\n },\n }),\n );\n\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embedding': { output: () => JSON.stringify(embedding) },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return new DefaultEmbedResult({\n value,\n embedding,\n usage,\n response,\n });\n },\n });\n}\n\nclass DefaultEmbedResult<VALUE> implements EmbedResult<VALUE> {\n readonly value: EmbedResult<VALUE>['value'];\n readonly embedding: EmbedResult<VALUE>['embedding'];\n readonly usage: EmbedResult<VALUE>['usage'];\n readonly response: EmbedResult<VALUE>['response'];\n\n constructor(options: {\n value: EmbedResult<VALUE>['value'];\n embedding: EmbedResult<VALUE>['embedding'];\n usage: EmbedResult<VALUE>['usage'];\n response?: EmbedResult<VALUE>['response'];\n }) {\n this.value = options.value;\n this.embedding = options.embedding;\n this.usage = options.usage;\n this.response = options.response;\n }\n}\n","/**\n * Splits an array into chunks of a specified size.\n *\n * @template T - The type of elements in the array.\n * @param {T[]} array - The array to split.\n * @param {number} chunkSize - The size of each chunk.\n * @returns {T[][]} - A new array containing the chunks.\n */\nexport function splitArray<T>(array: T[], chunkSize: number): T[][] {\n if (chunkSize <= 0) {\n throw new Error('chunkSize must be greater than 0');\n }\n\n const result = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n\n return result;\n}\n","import { prepareRetries } from '../../src/util/prepare-retries';\nimport { splitArray } from '../../src/util/split-array';\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 { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { Embedding, EmbeddingModel, ProviderOptions } from '../types';\nimport { EmbedManyResult } from './embed-many-result';\n\n/**\nEmbed several values using an embedding model. The type of the value is defined\nby the embedding model.\n\n`embedMany` automatically splits large requests into smaller chunks if the model\nhas a limit on how many embeddings can be generated in a single call.\n\n@param model - The embedding model to use.\n@param values - The values that should be embedded.\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@returns A result object that contains the embeddings, the value, and additional information.\n */\nexport async function embedMany<VALUE>({\n model,\n values,\n maxParallelCalls = Infinity,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n providerOptions,\n experimental_telemetry: telemetry,\n}: {\n /**\nThe embedding model to use.\n */\n model: EmbeddingModel<VALUE>;\n\n /**\nThe values that should be embedded.\n */\n values: Array<VALUE>;\n\n /**\nMaximum number of retries per embedding model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n\n /**\n * Optional telemetry configuration (experimental).\n */\n experimental_telemetry?: TelemetrySettings;\n\n /**\n Additional provider-specific options. They are passed through\n to the provider from the AI SDK and enable provider-specific\n functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * Maximum number of concurrent requests.\n *\n * @default Infinity\n */\n maxParallelCalls?: number;\n}): Promise<EmbedManyResult<VALUE>> {\n const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n const baseTelemetryAttributes = getBaseTelemetryAttributes({\n model,\n telemetry,\n headers,\n settings: { maxRetries },\n });\n\n const tracer = getTracer(telemetry);\n\n return recordSpan({\n name: 'ai.embedMany',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({ operationId: 'ai.embedMany', telemetry }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.values': {\n input: () => values.map(value => JSON.stringify(value)),\n },\n },\n }),\n tracer,\n fn: async span => {\n const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([\n model.maxEmbeddingsPerCall,\n model.supportsParallelCalls,\n ]);\n\n // the model has not specified limits on\n // how many embeddings can be generated in a single call\n if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {\n const { embeddings, usage, response } = await retry(() => {\n // nested spans to align with the embedMany telemetry data:\n return recordSpan({\n name: 'ai.embedMany.doEmbed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.embedMany.doEmbed',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.values': {\n input: () => values.map(value => JSON.stringify(value)),\n },\n },\n }),\n tracer,\n fn: async doEmbedSpan => {\n const modelResponse = await model.doEmbed({\n values,\n abortSignal,\n headers,\n providerOptions,\n });\n\n const embeddings = modelResponse.embeddings;\n const usage = modelResponse.usage ?? { tokens: NaN };\n\n doEmbedSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n embeddings.map(embedding => JSON.stringify(embedding)),\n },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return {\n embeddings,\n usage,\n response: modelResponse.response,\n };\n },\n });\n });\n\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n embeddings.map(embedding => JSON.stringify(embedding)),\n },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return new DefaultEmbedManyResult({\n values,\n embeddings,\n usage,\n responses: [response],\n });\n }\n\n // split the values into chunks that are small enough for the model:\n const valueChunks = splitArray(values, maxEmbeddingsPerCall);\n\n // serially embed the chunks:\n const embeddings: Array<Embedding> = [];\n const responses: Array<\n | {\n headers?: Record<string, string>;\n body?: unknown;\n }\n | undefined\n > = [];\n let tokens = 0;\n\n const parallelChunks = splitArray(\n valueChunks,\n supportsParallelCalls ? maxParallelCalls : 1,\n );\n\n for (const parallelChunk of parallelChunks) {\n const results = await Promise.all(\n parallelChunk.map(chunk => {\n return retry(() => {\n // nested spans to align with the embedMany telemetry data:\n return recordSpan({\n name: 'ai.embedMany.doEmbed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.embedMany.doEmbed',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.values': {\n input: () => chunk.map(value => JSON.stringify(value)),\n },\n },\n }),\n tracer,\n fn: async doEmbedSpan => {\n const modelResponse = await model.doEmbed({\n values: chunk,\n abortSignal,\n headers,\n providerOptions,\n });\n\n const embeddings = modelResponse.embeddings;\n const usage = modelResponse.usage ?? { tokens: NaN };\n\n doEmbedSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n embeddings.map(embedding =>\n JSON.stringify(embedding),\n ),\n },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return {\n embeddings,\n usage,\n response: modelResponse.response,\n };\n },\n });\n });\n }),\n );\n\n for (const result of results) {\n embeddings.push(...result.embeddings);\n responses.push(result.response);\n tokens += result.usage.tokens;\n }\n }\n\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n embeddings.map(embedding => JSON.stringify(embedding)),\n },\n 'ai.usage.tokens': tokens,\n },\n }),\n );\n\n return new DefaultEmbedManyResult({\n values,\n embeddings,\n usage: { tokens },\n responses,\n });\n },\n });\n}\n\nclass DefaultEmbedManyResult<VALUE> implements EmbedManyResult<VALUE> {\n readonly values: EmbedManyResult<VALUE>['values'];\n readonly embeddings: EmbedManyResult<VALUE>['embeddings'];\n readonly usage: EmbedManyResult<VALUE>['usage'];\n readonly responses: EmbedManyResult<VALUE>['responses'];\n\n constructor(options: {\n values: EmbedManyResult<VALUE>['values'];\n embeddings: EmbedManyResult<VALUE>['embeddings'];\n usage: EmbedManyResult<VALUE>['usage'];\n responses?: EmbedManyResult<VALUE>['responses'];\n }) {\n this.values = options.values;\n this.embeddings = options.embeddings;\n this.usage = options.usage;\n this.responses = options.responses;\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 {\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 { ImageModelV2, ImageModelV2ProviderMetadata } from '@ai-sdk/provider';\nimport { NoImageGeneratedError } from '../../src/error/no-image-generated-error';\nimport {\n detectMediaType,\n imageMediaTypeSignatures,\n} from '../../src/util/detect-media-type';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport {\n DefaultGeneratedFile,\n GeneratedFile,\n} from '../generate-text/generated-file';\nimport { ImageGenerationWarning } from '../types/image-model';\nimport { ImageModelResponseMetadata } from '../types/image-model-response-metadata';\nimport { ProviderOptions } from '../types/provider-metadata';\nimport { GenerateImageResult } from './generate-image-result';\n\n/**\nGenerates images using an image model.\n\n@param model - The image model to use.\n@param prompt - The prompt that should be used to generate the image.\n@param n - Number of images to generate. Default: 1.\n@param size - Size of the images to generate. Must have the format `{width}x{height}`.\n@param aspectRatio - Aspect ratio of the images to generate. Must have the format `{width}:{height}`.\n@param seed - Seed for the image generation.\n@param providerOptions - Additional provider-specific options that are passed through to the provider\nas body parameters.\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@returns A result object that contains the generated images.\n */\nexport async function generateImage({\n model,\n prompt,\n n = 1,\n maxImagesPerCall,\n size,\n aspectRatio,\n seed,\n providerOptions,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n}: {\n /**\nThe image model to use.\n */\n model: ImageModelV2;\n\n /**\nThe prompt that should be used to generate the image.\n */\n prompt: string;\n\n /**\nNumber of images to generate.\n */\n n?: number;\n\n /**\nNumber of images to generate.\n */\n maxImagesPerCall?: number;\n\n /**\nSize of the images to generate. Must have the format `{width}x{height}`. If not provided, the default size will be used.\n */\n size?: `${number}x${number}`;\n\n /**\nAspect ratio of the images to generate. Must have the format `{width}:{height}`. If not provided, the default aspect ratio will be used.\n */\n aspectRatio?: `${number}:${number}`;\n\n /**\nSeed for the image generation. If not provided, the default seed will be used.\n */\n seed?: number;\n\n /**\nAdditional provider-specific options that are passed through to the provider\nas body parameters.\n\nThe outer record is keyed by the provider name, and the inner\nrecord is keyed by the provider-specific metadata key.\n```ts\n{\n \"openai\": {\n \"style\": \"vivid\"\n }\n}\n```\n */\n providerOptions?: ProviderOptions;\n\n /**\nMaximum number of retries per embedding model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n}): Promise<GenerateImageResult> {\n const { retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n // default to 1 if the model has not specified limits on\n // how many images can be generated in a single call\n const maxImagesPerCallWithDefault =\n maxImagesPerCall ?? (await invokeModelMaxImagesPerCall(model)) ?? 1;\n\n // parallelize calls to the model:\n const callCount = Math.ceil(n / maxImagesPerCallWithDefault);\n const callImageCounts = Array.from({ length: callCount }, (_, i) => {\n if (i < callCount - 1) {\n return maxImagesPerCallWithDefault;\n }\n\n const remainder = n % maxImagesPerCallWithDefault;\n return remainder === 0 ? maxImagesPerCallWithDefault : remainder;\n });\n\n const results = await Promise.all(\n callImageCounts.map(async callImageCount =>\n retry(() =>\n model.doGenerate({\n prompt,\n n: callImageCount,\n abortSignal,\n headers,\n size,\n aspectRatio,\n seed,\n providerOptions: providerOptions ?? {},\n }),\n ),\n ),\n );\n\n // collect result images, warnings, and response metadata\n const images: Array<DefaultGeneratedFile> = [];\n const warnings: Array<ImageGenerationWarning> = [];\n const responses: Array<ImageModelResponseMetadata> = [];\n const providerMetadata: ImageModelV2ProviderMetadata = {};\n for (const result of results) {\n images.push(\n ...result.images.map(\n image =>\n new DefaultGeneratedFile({\n data: image,\n mediaType:\n detectMediaType({\n data: image,\n signatures: imageMediaTypeSignatures,\n }) ?? 'image/png',\n }),\n ),\n );\n warnings.push(...result.warnings);\n\n if (result.providerMetadata) {\n for (const [providerName, metadata] of Object.entries<{\n images: unknown;\n }>(result.providerMetadata)) {\n providerMetadata[providerName] ??= { images: [] };\n providerMetadata[providerName].images.push(\n ...result.providerMetadata[providerName].images,\n );\n }\n }\n\n responses.push(result.response);\n }\n\n if (!images.length) {\n throw new NoImageGeneratedError({ responses });\n }\n\n return new DefaultGenerateImageResult({\n images,\n warnings,\n responses,\n providerMetadata,\n });\n}\n\nclass DefaultGenerateImageResult implements GenerateImageResult {\n readonly images: Array<GeneratedFile>;\n readonly warnings: Array<ImageGenerationWarning>;\n readonly responses: Array<ImageModelResponseMetadata>;\n readonly providerMetadata: ImageModelV2ProviderMetadata;\n\n constructor(options: {\n images: Array<GeneratedFile>;\n warnings: Array<ImageGenerationWarning>;\n responses: Array<ImageModelResponseMetadata>;\n providerMetadata: ImageModelV2ProviderMetadata;\n }) {\n this.images = options.images;\n this.warnings = options.warnings;\n this.responses = options.responses;\n this.providerMetadata = options.providerMetadata;\n }\n\n get image() {\n return this.images[0];\n }\n}\n\nasync function invokeModelMaxImagesPerCall(model: ImageModelV2) {\n const isFunction = model.maxImagesPerCall instanceof Function;\n\n if (!isFunction) {\n return model.maxImagesPerCall;\n }\n\n return model.maxImagesPerCall({\n modelId: model.modelId,\n });\n}\n","import {\n JSONParseError,\n JSONValue,\n TypeValidationError,\n} from '@ai-sdk/provider';\nimport {\n createIdGenerator,\n safeParseJSON,\n Schema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../src/error/no-object-generated-error';\nimport { prepareHeaders } from '../../src/util/prepare-headers';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport { extractContentText } from '../generate-text/extract-content-text';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\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 {\n CallWarning,\n FinishReason,\n LanguageModel,\n} from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata, ProviderOptions } from '../types/provider-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { GenerateObjectResult } from './generate-object-result';\nimport { getOutputStrategy } from './output-strategy';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\nA function that attempts to repair the raw output of the mode\nto enable JSON parsing.\n\nShould return the repaired text or null if the text cannot be repaired.\n */\nexport type RepairTextFunction = (options: {\n text: string;\n error: JSONParseError | TypeValidationError;\n}) => Promise<string | null>;\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamObject` 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 schema - The schema of the object that the model should generate.\n@param schemaName - Optional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n@param schemaDescription - Optional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n\n@param output - The type of the output.\n\n- 'object': The output is an object.\n- 'array': The output is an array.\n- 'enum': The output is an enum.\n- 'no-schema': The output is not a schema.\n\n@param experimental_repairText - A function that attempts to repair the raw output of the mode\nto enable JSON parsing.\n\n@param experimental_telemetry - Optional telemetry configuration (experimental).\n\n@param providerOptions - Additional 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@returns\nA result object that contains the generated object, the finish reason, the token usage, and additional information.\n */\nexport async function generateObject<\n RESULT extends SCHEMA extends z.Schema\n ? Output extends 'array'\n ? Array<z.infer<SCHEMA>>\n : z.infer<SCHEMA>\n : SCHEMA extends Schema<infer T>\n ? Output extends 'array'\n ? Array<T>\n : T\n : never,\n SCHEMA extends z.Schema | Schema = z.Schema<JSONValue>,\n Output extends\n | 'object'\n | 'array'\n | 'enum'\n | 'no-schema' = RESULT extends string ? 'enum' : 'object',\n>(\n options: Omit<CallSettings, 'stopSequences'> &\n Prompt &\n (Output extends 'enum'\n ? {\n /**\nThe enum values that the model should use.\n */\n enum: Array<RESULT>;\n mode?: 'json';\n output: 'enum';\n }\n : Output extends 'no-schema'\n ? {}\n : {\n /**\nThe schema of the object that the model should generate.\n */\n schema: SCHEMA;\n\n /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n */\n schemaName?: string;\n\n /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n */\n schemaDescription?: string;\n\n /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n */\n mode?: 'auto' | 'json' | 'tool';\n }) & {\n output?: Output;\n\n /**\n The language model to use.\n */\n model: LanguageModel;\n /**\n A function that attempts to repair the raw output of the mode\n to enable JSON parsing.\n */\n experimental_repairText?: RepairTextFunction;\n\n /**\n Optional telemetry configuration (experimental).\n */\n\n experimental_telemetry?: TelemetrySettings;\n\n /**\n Additional provider-specific options. They are passed through\n to the provider from the AI SDK and enable provider-specific\n functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n generateId?: () => string;\n currentDate?: () => Date;\n };\n },\n): Promise<GenerateObjectResult<RESULT>> {\n const {\n model,\n output = 'object',\n system,\n prompt,\n messages,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n experimental_repairText: repairText,\n experimental_telemetry: telemetry,\n providerOptions,\n _internal: {\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n } = {},\n ...settings\n } = options;\n\n const enumValues = 'enum' in options ? options.enum : undefined;\n const {\n schema: inputSchema,\n schemaDescription,\n schemaName,\n } = 'schema' in options ? options : {};\n\n validateObjectGenerationInput({\n output,\n schema: inputSchema,\n schemaName,\n schemaDescription,\n enumValues,\n });\n\n const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n const outputStrategy = getOutputStrategy({\n output,\n schema: inputSchema,\n enumValues,\n });\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 tracer = getTracer(telemetry);\n\n return recordSpan({\n name: 'ai.generateObject',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateObject',\n telemetry,\n }),\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 'ai.schema':\n outputStrategy.jsonSchema != null\n ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n : undefined,\n 'ai.schema.name': schemaName,\n 'ai.schema.description': schemaDescription,\n 'ai.settings.output': outputStrategy.type,\n },\n }),\n tracer,\n fn: async span => {\n let result: string;\n let finishReason: FinishReason;\n let usage: LanguageModelUsage;\n let warnings: CallWarning[] | undefined;\n let response: LanguageModelResponseMetadata;\n let request: LanguageModelRequestMetadata;\n let resultProviderMetadata: ProviderMetadata | undefined;\n\n const standardizedPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n });\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: standardizedPrompt,\n supportedUrls: await model.supportedUrls,\n });\n\n const generateResult = await retry(() =>\n recordSpan({\n name: 'ai.generateObject.doGenerate',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateObject.doGenerate',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n 'ai.prompt.messages': {\n input: () => stringifyForTelemetry(promptMessages),\n },\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.system': model.provider,\n 'gen_ai.request.model': model.modelId,\n 'gen_ai.request.frequency_penalty': callSettings.frequencyPenalty,\n 'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n 'gen_ai.request.presence_penalty': callSettings.presencePenalty,\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 fn: async span => {\n const result = await model.doGenerate({\n responseFormat: {\n type: 'json',\n schema: outputStrategy.jsonSchema,\n name: schemaName,\n description: schemaDescription,\n },\n ...prepareCallSettings(settings),\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers,\n });\n\n const responseData = {\n id: result.response?.id ?? generateId(),\n timestamp: result.response?.timestamp ?? currentDate(),\n modelId: result.response?.modelId ?? model.modelId,\n headers: result.response?.headers,\n body: result.response?.body,\n };\n\n const text = extractContentText(result.content);\n\n if (text === undefined) {\n throw new NoObjectGeneratedError({\n message:\n 'No object generated: the model did not return a response.',\n response: responseData,\n usage: result.usage,\n finishReason: result.finishReason,\n });\n }\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': result.finishReason,\n 'ai.response.object': { output: () => text },\n 'ai.response.id': responseData.id,\n 'ai.response.model': responseData.modelId,\n 'ai.response.timestamp': responseData.timestamp.toISOString(),\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': result.usage.inputTokens,\n 'ai.usage.completionTokens': result.usage.outputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [result.finishReason],\n 'gen_ai.response.id': responseData.id,\n 'gen_ai.response.model': responseData.modelId,\n 'gen_ai.usage.input_tokens': result.usage.inputTokens,\n 'gen_ai.usage.output_tokens': result.usage.outputTokens,\n },\n }),\n );\n\n return { ...result, objectText: text, responseData };\n },\n }),\n );\n\n result = generateResult.objectText;\n finishReason = generateResult.finishReason;\n usage = generateResult.usage;\n warnings = generateResult.warnings;\n resultProviderMetadata = generateResult.providerMetadata;\n request = generateResult.request ?? {};\n response = generateResult.responseData;\n\n async function processResult(result: string): Promise<RESULT> {\n const parseResult = await safeParseJSON({ text: result });\n\n if (!parseResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: could not parse the response.',\n cause: parseResult.error,\n text: result,\n response,\n usage,\n finishReason,\n });\n }\n\n const validationResult = await outputStrategy.validateFinalResult(\n parseResult.value,\n {\n text: result,\n response,\n usage,\n },\n );\n\n if (!validationResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: response did not match schema.',\n cause: validationResult.error,\n text: result,\n response,\n usage,\n finishReason,\n });\n }\n\n return validationResult.value;\n }\n\n let object: RESULT;\n try {\n object = await processResult(result);\n } catch (error) {\n if (\n repairText != null &&\n NoObjectGeneratedError.isInstance(error) &&\n (JSONParseError.isInstance(error.cause) ||\n TypeValidationError.isInstance(error.cause))\n ) {\n const repairedText = await repairText({\n text: result,\n error: error.cause,\n });\n\n if (repairedText === null) {\n throw error;\n }\n\n object = await processResult(repairedText);\n } else {\n throw error;\n }\n }\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': finishReason,\n 'ai.response.object': {\n output: () => JSON.stringify(object),\n },\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': usage.inputTokens,\n 'ai.usage.completionTokens': usage.outputTokens,\n },\n }),\n );\n\n return new DefaultGenerateObjectResult({\n object,\n finishReason,\n usage,\n warnings,\n request,\n response,\n providerMetadata: resultProviderMetadata,\n });\n },\n });\n}\n\nclass DefaultGenerateObjectResult<T> implements GenerateObjectResult<T> {\n readonly object: GenerateObjectResult<T>['object'];\n readonly finishReason: GenerateObjectResult<T>['finishReason'];\n readonly usage: GenerateObjectResult<T>['usage'];\n readonly warnings: GenerateObjectResult<T>['warnings'];\n readonly providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n readonly response: GenerateObjectResult<T>['response'];\n readonly request: GenerateObjectResult<T>['request'];\n\n constructor(options: {\n object: GenerateObjectResult<T>['object'];\n finishReason: GenerateObjectResult<T>['finishReason'];\n usage: GenerateObjectResult<T>['usage'];\n warnings: GenerateObjectResult<T>['warnings'];\n providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n response: GenerateObjectResult<T>['response'];\n request: GenerateObjectResult<T>['request'];\n }) {\n this.object = options.object;\n this.finishReason = options.finishReason;\n this.usage = options.usage;\n this.warnings = options.warnings;\n this.providerMetadata = options.providerMetadata;\n this.response = options.response;\n this.request = options.request;\n }\n\n toJsonResponse(init?: ResponseInit): Response {\n return new Response(JSON.stringify(this.object), {\n status: init?.status ?? 200,\n headers: prepareHeaders(init?.headers, {\n 'content-type': 'application/json; charset=utf-8',\n }),\n });\n }\n}\n","import { LanguageModelV2Content, LanguageModelV2Text } from '@ai-sdk/provider';\n\nexport function extractContentText(\n content: LanguageModelV2Content[],\n): string | undefined {\n const parts = content.filter(\n (content): content is LanguageModelV2Text => content.type === 'text',\n );\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.map(content => content.text).join('');\n}\n","import {\n LanguageModelV2FilePart,\n LanguageModelV2Message,\n LanguageModelV2Prompt,\n LanguageModelV2TextPart,\n} from '@ai-sdk/provider';\nimport { isUrlSupported } from '@ai-sdk/provider-utils';\nimport {\n detectMediaType,\n imageMediaTypeSignatures,\n} from '../../src/util/detect-media-type';\nimport { download } from '../../src/util/download';\nimport { ModelMessage } from '../prompt/message';\nimport { FilePart, ImagePart, TextPart } from './content-part';\nimport {\n convertToLanguageModelV2DataContent,\n DataContent,\n} 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: 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 args: part.args,\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',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result: part.result,\n content: part.experimental_content,\n isError: part.isError,\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 ?? 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 { 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} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { InvalidDataContentError } from './invalid-data-content-error';\nimport { splitDataUrl } from './split-data-url';\n\n/**\nData content. Can either be a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer.\n */\nexport type DataContent = string | Uint8Array | ArrayBuffer | Buffer;\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(\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 { 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 { InvalidPromptError } from '@ai-sdk/provider';\nimport { safeValidateTypes } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { ModelMessage, 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 { z } from 'zod';\nimport {\n providerMetadataSchema,\n ProviderOptions,\n} from '../types/provider-metadata';\nimport {\n FilePart,\n filePartSchema,\n ImagePart,\n imagePartSchema,\n ReasoningPart,\n reasoningPartSchema,\n TextPart,\n textPartSchema,\n ToolCallPart,\n toolCallPartSchema,\n ToolResultPart,\n toolResultPartSchema,\n} from './content-part';\n\n/**\n A system message. It can contain system information.\n\n Note: using the \"system\" part of the prompt is strongly preferred\n to increase the resilience against prompt injection attacks,\n and because not all providers support several system messages.\n */\nexport type SystemModelMessage = {\n role: 'system';\n content: string;\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@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/**\nA user message. It can contain text or a combination of text and images.\n */\nexport type UserModelMessage = {\n role: 'user';\n content: UserContent;\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@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/**\nContent of a user message. It can be a string or an array of text and image parts.\n */\nexport type UserContent = string | Array<TextPart | ImagePart | FilePart>;\n\n/**\nAn assistant message. It can contain text, tool calls, or a combination of text and tool calls.\n */\nexport type AssistantModelMessage = {\n role: 'assistant';\n content: AssistantContent;\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@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 ]),\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/**\nContent of an assistant message.\nIt can be a string or an array of text, image, reasoning, redacted reasoning, and tool call parts.\n */\nexport type AssistantContent =\n | string\n | Array<TextPart | FilePart | ReasoningPart | ToolCallPart>;\n\n/**\nA tool message. It contains the result of one or more tool calls.\n */\nexport type ToolModelMessage = {\n role: 'tool';\n content: ToolContent;\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@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/**\nContent of a tool message. It is an array of tool result parts.\n */\nexport type ToolContent = Array<ToolResultPart>;\n\n/**\nA message that can be used in the `messages` field of a prompt.\nIt can be a user message, an assistant message, or a tool message.\n */\nexport type ModelMessage =\n | SystemModelMessage\n | UserModelMessage\n | AssistantModelMessage\n | ToolModelMessage;\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';\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\n/**\nAdditional provider-specific options.\n\nThey are passed through to the provider from the AI SDK and enable\nprovider-specific functionality that can be fully encapsulated in the provider.\n */\nexport type ProviderOptions = SharedV2ProviderOptions;\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';\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 { z } from 'zod';\nimport {\n providerMetadataSchema,\n ProviderOptions,\n} from '../types/provider-metadata';\nimport { DataContent, dataContentSchema } from './data-content';\nimport {\n ToolResultContent,\n toolResultContentSchema,\n} from './tool-result-content';\n\n/**\nText content part of a prompt. It contains a string of text.\n */\nexport interface TextPart {\n type: 'text';\n\n /**\nThe text content.\n */\n text: string;\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 textPartSchema: z.ZodType<TextPart> = z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\nImage content part of a prompt. It contains an image.\n */\nexport interface ImagePart {\n type: 'image';\n\n /**\nImage data. Can either be:\n\n- data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer\n- URL: a URL that points to the image\n */\n image: DataContent | URL;\n\n /**\nOptional IANA media type of the image.\n\n@see https://www.iana.org/assignments/media-types/media-types.xhtml\n */\n mediaType?: string;\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 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/**\nFile content part of a prompt. It contains a file.\n */\nexport interface FilePart {\n type: 'file';\n\n /**\nFile data. Can either be:\n\n- data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer\n- URL: a URL that points to the image\n */\n data: DataContent | URL;\n\n /**\nOptional filename of the file.\n */\n filename?: string;\n\n /**\nIANA media type of the file.\n\n@see https://www.iana.org/assignments/media-types/media-types.xhtml\n */\n mediaType: string;\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 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 * Reasoning content part of a prompt. It contains a reasoning.\n */\nexport interface ReasoningPart {\n type: 'reasoning';\n\n /**\nThe reasoning text.\n */\n text: string;\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 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 args: 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 args: z.unknown(),\n providerOptions: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolCallPart>; // necessary bc args is optional on Zod type\n\n/**\nTool result content part of a prompt. It contains the result of the tool call with the matching ID.\n */\nexport interface ToolResultPart {\n type: 'tool-result';\n\n /**\nID of the tool call that this result is associated with.\n */\n toolCallId: string;\n\n /**\nName of the tool that generated this result.\n */\n toolName: string;\n\n /**\nResult of the tool call. This is a JSON-serializable object.\n */\n result: unknown;\n\n /**\nMulti-part content of the tool result. Only for tools that support multipart results.\n */\n experimental_content?: ToolResultContent;\n\n /**\nOptional flag if the result is an error or an error message.\n */\n isError?: boolean;\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 toolResultPartSchema: z.ZodType<ToolResultPart> = z.object({\n type: z.literal('tool-result'),\n toolCallId: z.string(),\n toolName: z.string(),\n result: z.unknown(),\n content: toolResultContentSchema.optional(),\n isError: z.boolean().optional(),\n providerOptions: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolResultPart>; // necessary bc result is optional on Zod type\n","import { ToolResultContent } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport type { ToolResultContent };\n\nexport const toolResultContentSchema: z.ZodType<ToolResultContent> = z.array(\n z.union([\n z.object({ type: z.literal('text'), text: z.string() }),\n z.object({\n type: z.literal('image'),\n data: z.string(),\n mediaType: z.string().optional(),\n }),\n ]),\n);\n\nexport function isToolResultContent(\n value: unknown,\n): value is ToolResultContent {\n if (!Array.isArray(value) || value.length === 0) {\n return false;\n }\n\n return value.every(part => {\n if (typeof part !== 'object' || part === null) {\n return false;\n }\n\n if (part.type === 'text') {\n return typeof part.text === 'string';\n }\n\n if (part.type === 'image') {\n return (\n typeof part.data === 'string' &&\n (part.mimeType === undefined || typeof part.mimeType === 'string')\n );\n }\n\n return false;\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 {\n isJSONArray,\n isJSONObject,\n JSONObject,\n JSONSchema7,\n JSONValue,\n TypeValidationError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n asSchema,\n safeValidateTypes,\n Schema,\n ValidationResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../src/error/no-object-generated-error';\nimport {\n AsyncIterableStream,\n createAsyncIterableStream,\n} from '../../src/util/async-iterable-stream';\nimport { DeepPartial } from '../../src/util/deep-partial';\nimport {\n FinishReason,\n LanguageModelResponseMetadata,\n LanguageModelUsage,\n} from '../types';\nimport { ObjectStreamPart } from './stream-object-result';\n\nexport interface OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM> {\n readonly type: 'object' | 'array' | 'enum' | 'no-schema';\n readonly jsonSchema: JSONSchema7 | undefined;\n\n validatePartialResult({\n value,\n textDelta,\n isFinalDelta,\n }: {\n value: JSONValue;\n textDelta: string;\n isFirstDelta: boolean;\n isFinalDelta: boolean;\n latestObject: PARTIAL | undefined;\n }): Promise<\n ValidationResult<{\n partial: PARTIAL;\n textDelta: string;\n }>\n >;\n validateFinalResult(\n value: JSONValue | undefined,\n context: {\n text: string;\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n },\n ): Promise<ValidationResult<RESULT>>;\n\n createElementStream(\n originalStream: ReadableStream<ObjectStreamPart<PARTIAL>>,\n ): ELEMENT_STREAM;\n}\n\nconst noSchemaOutputStrategy: OutputStrategy<JSONValue, JSONValue, never> = {\n type: 'no-schema',\n jsonSchema: undefined,\n\n async validatePartialResult({ value, textDelta }) {\n return { success: true, value: { partial: value, textDelta } };\n },\n\n async validateFinalResult(\n value: JSONValue | undefined,\n context: {\n text: string;\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n ): Promise<ValidationResult<JSONValue>> {\n return value === undefined\n ? {\n success: false,\n error: new NoObjectGeneratedError({\n message: 'No object generated: response did not match schema.',\n text: context.text,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason,\n }),\n }\n : { success: true, value };\n },\n\n createElementStream() {\n throw new UnsupportedFunctionalityError({\n functionality: 'element streams in no-schema mode',\n });\n },\n};\n\nconst objectOutputStrategy = <OBJECT>(\n schema: Schema<OBJECT>,\n): OutputStrategy<DeepPartial<OBJECT>, OBJECT, never> => ({\n type: 'object',\n jsonSchema: schema.jsonSchema,\n\n async validatePartialResult({ value, textDelta }) {\n return {\n success: true,\n value: {\n // Note: currently no validation of partial results:\n partial: value as DeepPartial<OBJECT>,\n textDelta,\n },\n };\n },\n\n async validateFinalResult(\n value: JSONValue | undefined,\n ): Promise<ValidationResult<OBJECT>> {\n return safeValidateTypes({ value, schema });\n },\n\n createElementStream() {\n throw new UnsupportedFunctionalityError({\n functionality: 'element streams in object mode',\n });\n },\n});\n\nconst arrayOutputStrategy = <ELEMENT>(\n schema: Schema<ELEMENT>,\n): OutputStrategy<ELEMENT[], ELEMENT[], AsyncIterableStream<ELEMENT>> => {\n // remove $schema from schema.jsonSchema:\n const { $schema, ...itemSchema } = schema.jsonSchema;\n\n return {\n type: 'enum',\n\n // wrap in object that contains array of elements, since most LLMs will not\n // be able to generate an array directly:\n // possible future optimization: use arrays directly when model supports grammar-guided generation\n jsonSchema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n elements: { type: 'array', items: itemSchema },\n },\n required: ['elements'],\n additionalProperties: false,\n },\n\n async validatePartialResult({\n value,\n latestObject,\n isFirstDelta,\n isFinalDelta,\n }) {\n // check that the value is an object that contains an array of elements:\n if (!isJSONObject(value) || !isJSONArray(value.elements)) {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be an object that contains an array of elements',\n }),\n };\n }\n\n const inputArray = value.elements as Array<JSONObject>;\n const resultArray: Array<ELEMENT> = [];\n\n for (let i = 0; i < inputArray.length; i++) {\n const element = inputArray[i];\n const result = await safeValidateTypes({ value: element, schema });\n\n // special treatment for last processed element:\n // ignore parse or validation failures, since they indicate that the\n // last element is incomplete and should not be included in the result,\n // unless it is the final delta\n if (i === inputArray.length - 1 && !isFinalDelta) {\n continue;\n }\n\n if (!result.success) {\n return result;\n }\n\n resultArray.push(result.value);\n }\n\n // calculate delta:\n const publishedElementCount = latestObject?.length ?? 0;\n\n let textDelta = '';\n\n if (isFirstDelta) {\n textDelta += '[';\n }\n\n if (publishedElementCount > 0) {\n textDelta += ',';\n }\n\n textDelta += resultArray\n .slice(publishedElementCount) // only new elements\n .map(element => JSON.stringify(element))\n .join(',');\n\n if (isFinalDelta) {\n textDelta += ']';\n }\n\n return {\n success: true,\n value: {\n partial: resultArray,\n textDelta,\n },\n };\n },\n\n async validateFinalResult(\n value: JSONValue | undefined,\n ): Promise<ValidationResult<Array<ELEMENT>>> {\n // check that the value is an object that contains an array of elements:\n if (!isJSONObject(value) || !isJSONArray(value.elements)) {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be an object that contains an array of elements',\n }),\n };\n }\n\n const inputArray = value.elements as Array<JSONObject>;\n\n // check that each element in the array is of the correct type:\n for (const element of inputArray) {\n const result = await safeValidateTypes({ value: element, schema });\n if (!result.success) {\n return result;\n }\n }\n\n return { success: true, value: inputArray as Array<ELEMENT> };\n },\n\n createElementStream(\n originalStream: ReadableStream<ObjectStreamPart<ELEMENT[]>>,\n ) {\n let publishedElements = 0;\n\n return createAsyncIterableStream(\n originalStream.pipeThrough(\n new TransformStream<ObjectStreamPart<ELEMENT[]>, ELEMENT>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'object': {\n const array = chunk.object;\n\n // publish new elements one by one:\n for (\n ;\n publishedElements < array.length;\n publishedElements++\n ) {\n controller.enqueue(array[publishedElements]);\n }\n\n break;\n }\n\n case 'text-delta':\n case 'finish':\n case 'error': // suppress error (use onError instead)\n break;\n\n default: {\n const _exhaustiveCheck: never = chunk;\n throw new Error(\n `Unsupported chunk type: ${_exhaustiveCheck}`,\n );\n }\n }\n },\n }),\n ),\n );\n },\n };\n};\n\nconst enumOutputStrategy = <ENUM extends string>(\n enumValues: Array<ENUM>,\n): OutputStrategy<string, ENUM, never> => {\n return {\n type: 'enum',\n\n // wrap in object that contains result, since most LLMs will not\n // be able to generate an enum value directly:\n // possible future optimization: use enums directly when model supports top-level enums\n jsonSchema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n result: { type: 'string', enum: enumValues },\n },\n required: ['result'],\n additionalProperties: false,\n },\n\n async validateFinalResult(\n value: JSONValue | undefined,\n ): Promise<ValidationResult<ENUM>> {\n // check that the value is an object that contains an array of elements:\n if (!isJSONObject(value) || typeof value.result !== 'string') {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause:\n 'value must be an object that contains a string in the \"result\" property.',\n }),\n };\n }\n\n const result = value.result as string;\n\n return enumValues.includes(result as ENUM)\n ? { success: true, value: result as ENUM }\n : {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be a string in the enum',\n }),\n };\n },\n\n async validatePartialResult({ value, textDelta }) {\n if (!isJSONObject(value) || typeof value.result !== 'string') {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause:\n 'value must be an object that contains a string in the \"result\" property.',\n }),\n };\n }\n\n const result = value.result as string;\n const possibleEnumValues = enumValues.filter(enumValue =>\n enumValue.startsWith(result),\n );\n\n if (value.result.length === 0 || possibleEnumValues.length === 0) {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be a string in the enum',\n }),\n };\n }\n\n return {\n success: true,\n value: {\n partial:\n possibleEnumValues.length > 1 ? result : possibleEnumValues[0],\n textDelta,\n },\n };\n },\n\n createElementStream() {\n // no streaming in enum mode\n throw new UnsupportedFunctionalityError({\n functionality: 'element streams in enum mode',\n });\n },\n };\n};\n\nexport function getOutputStrategy<SCHEMA>({\n output,\n schema,\n enumValues,\n}: {\n output: 'object' | 'array' | 'enum' | 'no-schema';\n schema?: z.Schema<SCHEMA, z.ZodTypeDef, any> | Schema<SCHEMA>;\n enumValues?: Array<SCHEMA>;\n}): OutputStrategy<any, any, any> {\n switch (output) {\n case 'object':\n return objectOutputStrategy(asSchema(schema!));\n case 'array':\n return arrayOutputStrategy(asSchema(schema!));\n case 'enum':\n return enumOutputStrategy(enumValues! as Array<string>);\n case 'no-schema':\n return noSchemaOutputStrategy;\n default: {\n const _exhaustiveCheck: never = output;\n throw new Error(`Unsupported output: ${_exhaustiveCheck}`);\n }\n }\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","import { Schema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { InvalidArgumentError } from '../../src/error/invalid-argument-error';\n\nexport function validateObjectGenerationInput({\n output,\n schema,\n schemaName,\n schemaDescription,\n enumValues,\n}: {\n output?: 'object' | 'array' | 'enum' | 'no-schema';\n schema?: z.Schema<any, z.ZodTypeDef, any> | Schema<any>;\n schemaName?: string;\n schemaDescription?: string;\n enumValues?: Array<unknown>;\n}) {\n if (\n output != null &&\n output !== 'object' &&\n output !== 'array' &&\n output !== 'enum' &&\n output !== 'no-schema'\n ) {\n throw new InvalidArgumentError({\n parameter: 'output',\n value: output,\n message: 'Invalid output type.',\n });\n }\n\n if (output === 'no-schema') {\n if (schema != null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Schema is not supported for no-schema output.',\n });\n }\n\n if (schemaDescription != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaDescription',\n value: schemaDescription,\n message: 'Schema description is not supported for no-schema output.',\n });\n }\n\n if (schemaName != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaName',\n value: schemaName,\n message: 'Schema name is not supported for no-schema output.',\n });\n }\n\n if (enumValues != null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are not supported for no-schema output.',\n });\n }\n }\n\n if (output === 'object') {\n if (schema == null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Schema is required for object output.',\n });\n }\n\n if (enumValues != null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are not supported for object output.',\n });\n }\n }\n\n if (output === 'array') {\n if (schema == null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Element schema is required for array output.',\n });\n }\n\n if (enumValues != null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are not supported for array output.',\n });\n }\n }\n\n if (output === 'enum') {\n if (schema != null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Schema is not supported for enum output.',\n });\n }\n\n if (schemaDescription != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaDescription',\n value: schemaDescription,\n message: 'Schema description is not supported for enum output.',\n });\n }\n\n if (schemaName != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaName',\n value: schemaName,\n message: 'Schema name is not supported for enum output.',\n });\n }\n\n if (enumValues == null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are required for enum output.',\n });\n }\n\n for (const value of enumValues) {\n if (typeof value !== 'string') {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value,\n message: 'Enum values must be strings.',\n });\n }\n }\n }\n}\n","import {\n JSONValue,\n LanguageModelV2CallWarning,\n LanguageModelV2FinishReason,\n LanguageModelV2StreamPart,\n LanguageModelV2Usage,\n SharedV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport { createIdGenerator, Schema } from '@ai-sdk/provider-utils';\nimport { ServerResponse } from 'http';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../src/error/no-object-generated-error';\nimport { createTextStreamResponse } from '../../src/text-stream/create-text-stream-response';\nimport { pipeTextStreamToResponse } from '../../src/text-stream/pipe-text-stream-to-response';\nimport { DeepPartial, isDeepEqualData, parsePartialJson } from '../../src/util';\nimport {\n AsyncIterableStream,\n createAsyncIterableStream,\n} from '../../src/util/async-iterable-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 { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\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 { CallWarning, LanguageModel } from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata, ProviderOptions } from '../types/provider-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { getOutputStrategy, OutputStrategy } from './output-strategy';\nimport { ObjectStreamPart, StreamObjectResult } from './stream-object-result';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\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 StreamObjectOnErrorCallback = (event: {\n error: unknown;\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 StreamObjectOnFinishCallback<RESULT> = (event: {\n /**\nThe token usage of the generated response.\n*/\n usage: LanguageModelUsage;\n\n /**\nThe generated object. Can be undefined if the final object does not match the schema.\n*/\n object: RESULT | undefined;\n\n /**\nOptional error object. This is e.g. a TypeValidationError when the final object does not match the schema.\n*/\n error: unknown | undefined;\n\n /**\nResponse metadata.\n */\n response: LanguageModelResponseMetadata;\n\n /**\nWarnings from the model provider (e.g. unsupported settings).\n*/\n warnings?: CallWarning[];\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 providerMetadata: ProviderMetadata | undefined;\n}) => Promise<void> | void;\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateObject` 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 schema - The schema of the object that the model should generate.\n@param schemaName - Optional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n@param schemaDescription - Optional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n\n@param output - The type of the output.\n\n- 'object': The output is an object.\n- 'array': The output is an array.\n- 'enum': The output is an enum.\n- 'no-schema': The output is not a schema.\n\n@param experimental_telemetry - Optional telemetry configuration (experimental).\n\n@param providerOptions - Additional 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@returns\nA result object for accessing the partial object stream and additional information.\n */\nexport function streamObject<\n RESULT extends SCHEMA extends z.Schema\n ? Output extends 'array'\n ? Array<z.infer<SCHEMA>>\n : z.infer<SCHEMA>\n : SCHEMA extends Schema<infer T>\n ? Output extends 'array'\n ? Array<T>\n : T\n : never,\n SCHEMA extends z.Schema | Schema = z.Schema<JSONValue>,\n Output extends\n | 'object'\n | 'array'\n | 'enum'\n | 'no-schema' = RESULT extends string ? 'enum' : 'object',\n>(\n options: Omit<CallSettings, 'stopSequences'> &\n Prompt &\n (Output extends 'enum'\n ? {\n /**\nThe enum values that the model should use.\n */\n enum: Array<RESULT>;\n mode?: 'json';\n output: 'enum';\n }\n : Output extends 'no-schema'\n ? {}\n : {\n /**\nThe schema of the object that the model should generate.\n */\n schema: SCHEMA;\n\n /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n */\n schemaName?: string;\n\n /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n */\n schemaDescription?: string;\n\n /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n */\n mode?: 'auto' | 'json' | 'tool';\n }) & {\n output?: Output;\n\n /**\nThe language model to use.\n */\n model: LanguageModel;\n\n /**\nOptional telemetry configuration (experimental).\n */\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 /**\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?: StreamObjectOnErrorCallback;\n\n /**\nCallback that is called when the LLM response and the final object validation are finished.\n*/\n onFinish?: StreamObjectOnFinishCallback<RESULT>;\n\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n generateId?: () => string;\n currentDate?: () => Date;\n now?: () => number;\n };\n },\n): StreamObjectResult<\n Output extends 'enum'\n ? string\n : Output extends 'array'\n ? RESULT\n : DeepPartial<RESULT>,\n Output extends 'array' ? RESULT : RESULT,\n Output extends 'array'\n ? RESULT extends Array<infer U>\n ? AsyncIterableStream<U>\n : never\n : never\n> {\n const {\n model,\n output = 'object',\n system,\n prompt,\n messages,\n maxRetries,\n abortSignal,\n headers,\n experimental_telemetry: telemetry,\n providerOptions,\n onError,\n onFinish,\n _internal: {\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n now = originalNow,\n } = {},\n ...settings\n } = options;\n\n const enumValues =\n 'enum' in options && options.enum ? options.enum : undefined;\n\n const {\n schema: inputSchema,\n schemaDescription,\n schemaName,\n } = 'schema' in options ? options : {};\n\n validateObjectGenerationInput({\n output,\n schema: inputSchema,\n schemaName,\n schemaDescription,\n enumValues,\n });\n\n const outputStrategy = getOutputStrategy({\n output,\n schema: inputSchema,\n enumValues,\n });\n\n return new DefaultStreamObjectResult({\n model,\n telemetry,\n headers,\n settings,\n maxRetries,\n abortSignal,\n outputStrategy,\n system,\n prompt,\n messages,\n schemaName,\n schemaDescription,\n providerOptions,\n onError,\n onFinish,\n generateId,\n currentDate,\n now,\n });\n}\n\nclass DefaultStreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM>\n implements StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM>\n{\n private readonly _object = new DelayedPromise<RESULT>();\n private readonly _usage = new DelayedPromise<LanguageModelUsage>();\n private readonly _providerMetadata = new DelayedPromise<\n ProviderMetadata | undefined\n >();\n private readonly _warnings = new DelayedPromise<CallWarning[] | undefined>();\n private readonly _request =\n new DelayedPromise<LanguageModelRequestMetadata>();\n private readonly _response =\n new DelayedPromise<LanguageModelResponseMetadata>();\n\n private readonly baseStream: ReadableStream<ObjectStreamPart<PARTIAL>>;\n\n private readonly outputStrategy: OutputStrategy<\n PARTIAL,\n RESULT,\n ELEMENT_STREAM\n >;\n\n constructor({\n model,\n headers,\n telemetry,\n settings,\n maxRetries: maxRetriesArg,\n abortSignal,\n outputStrategy,\n system,\n prompt,\n messages,\n schemaName,\n schemaDescription,\n providerOptions,\n onError,\n onFinish,\n generateId,\n currentDate,\n now,\n }: {\n model: LanguageModel;\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 outputStrategy: OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM>;\n system: Prompt['system'];\n prompt: Prompt['prompt'];\n messages: Prompt['messages'];\n schemaName: string | undefined;\n schemaDescription: string | undefined;\n providerOptions: ProviderOptions | undefined;\n onError: StreamObjectOnErrorCallback | undefined;\n onFinish: StreamObjectOnFinishCallback<RESULT> | undefined;\n generateId: () => string;\n currentDate: () => Date;\n now: () => number;\n }) {\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n });\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 tracer = getTracer(telemetry);\n const self = this;\n\n const stitchableStream =\n createStitchableStream<ObjectStreamPart<PARTIAL>>();\n\n const eventProcessor = new TransformStream<\n ObjectStreamPart<PARTIAL>,\n ObjectStreamPart<PARTIAL>\n >({\n transform(chunk, controller) {\n controller.enqueue(chunk);\n\n if (chunk.type === 'error') {\n onError?.({ error: chunk.error });\n }\n },\n });\n\n this.baseStream = stitchableStream.stream.pipeThrough(eventProcessor);\n\n recordSpan({\n name: 'ai.streamObject',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.streamObject',\n telemetry,\n }),\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 'ai.schema':\n outputStrategy.jsonSchema != null\n ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n : undefined,\n 'ai.schema.name': schemaName,\n 'ai.schema.description': schemaDescription,\n 'ai.settings.output': outputStrategy.type,\n },\n }),\n tracer,\n endWhenDone: false,\n fn: async rootSpan => {\n const standardizedPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n });\n\n const callOptions = {\n responseFormat: {\n type: 'json' as const,\n schema: outputStrategy.jsonSchema,\n name: schemaName,\n description: schemaDescription,\n },\n ...prepareCallSettings(settings),\n prompt: await convertToLanguageModelPrompt({\n prompt: standardizedPrompt,\n supportedUrls: await model.supportedUrls,\n }),\n providerOptions,\n abortSignal,\n headers,\n };\n\n const transformer: Transformer<\n LanguageModelV2StreamPart,\n ObjectStreamInputPart\n > = {\n transform: (chunk, controller) => {\n switch (chunk.type) {\n case 'text':\n controller.enqueue(chunk.text);\n break;\n case 'response-metadata':\n case 'finish':\n case 'error':\n controller.enqueue(chunk);\n break;\n }\n },\n };\n\n const {\n result: { stream, response, request },\n doStreamSpan,\n startTimestampMs,\n } = await retry(() =>\n recordSpan({\n name: 'ai.streamObject.doStream',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.streamObject.doStream',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n 'ai.prompt.messages': {\n input: () => stringifyForTelemetry(callOptions.prompt),\n },\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.system': model.provider,\n 'gen_ai.request.model': model.modelId,\n 'gen_ai.request.frequency_penalty':\n callSettings.frequencyPenalty,\n 'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n 'gen_ai.request.presence_penalty': callSettings.presencePenalty,\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 startTimestampMs: now(),\n doStreamSpan,\n result: await model.doStream(callOptions),\n }),\n }),\n );\n\n self._request.resolve(request ?? {});\n\n // store information for onFinish callback:\n let warnings: LanguageModelV2CallWarning[] | undefined;\n let usage: LanguageModelUsage = {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n };\n let finishReason: LanguageModelV2FinishReason | undefined;\n let providerMetadata: ProviderMetadata | undefined;\n let object: RESULT | undefined;\n let error: unknown | undefined;\n\n // pipe chunks through a transformation stream that extracts metadata:\n let accumulatedText = '';\n let textDelta = '';\n let fullResponse: {\n id: string;\n timestamp: Date;\n modelId: string;\n } = {\n id: generateId(),\n timestamp: currentDate(),\n modelId: model.modelId,\n };\n\n // Keep track of raw parse result before type validation, since e.g. Zod might\n // change the object by mapping properties.\n let latestObjectJson: JSONValue | undefined = undefined;\n let latestObject: PARTIAL | undefined = undefined;\n let isFirstChunk = true;\n let isFirstDelta = true;\n\n const transformedStream = stream\n .pipeThrough(new TransformStream(transformer))\n .pipeThrough(\n new TransformStream<\n string | ObjectStreamInputPart,\n ObjectStreamPart<PARTIAL>\n >({\n async transform(chunk, controller): Promise<void> {\n if (\n typeof chunk === 'object' &&\n chunk.type === 'stream-start'\n ) {\n warnings = chunk.warnings;\n return; // stream start chunks are sent immediately and do not count as first chunk\n }\n\n // Telemetry event for first chunk:\n if (isFirstChunk) {\n const msToFirstChunk = now() - startTimestampMs;\n\n isFirstChunk = false;\n\n doStreamSpan.addEvent('ai.stream.firstChunk', {\n 'ai.stream.msToFirstChunk': msToFirstChunk,\n });\n\n doStreamSpan.setAttributes({\n 'ai.stream.msToFirstChunk': msToFirstChunk,\n });\n }\n\n // process partial text chunks\n if (typeof chunk === 'string') {\n accumulatedText += chunk;\n textDelta += chunk;\n\n const { value: currentObjectJson, state: parseState } =\n await parsePartialJson(accumulatedText);\n\n if (\n currentObjectJson !== undefined &&\n !isDeepEqualData(latestObjectJson, currentObjectJson)\n ) {\n const validationResult =\n await outputStrategy.validatePartialResult({\n value: currentObjectJson,\n textDelta,\n latestObject,\n isFirstDelta,\n isFinalDelta: parseState === 'successful-parse',\n });\n\n if (\n validationResult.success &&\n !isDeepEqualData(\n latestObject,\n validationResult.value.partial,\n )\n ) {\n // inside inner check to correctly parse the final element in array mode:\n latestObjectJson = currentObjectJson;\n latestObject = validationResult.value.partial;\n\n controller.enqueue({\n type: 'object',\n object: latestObject,\n });\n\n controller.enqueue({\n type: 'text-delta',\n textDelta: validationResult.value.textDelta,\n });\n\n textDelta = '';\n isFirstDelta = false;\n }\n }\n\n return;\n }\n\n switch (chunk.type) {\n case 'response-metadata': {\n fullResponse = {\n id: chunk.id ?? fullResponse.id,\n timestamp: chunk.timestamp ?? fullResponse.timestamp,\n modelId: chunk.modelId ?? fullResponse.modelId,\n };\n break;\n }\n\n case 'finish': {\n // send final text delta:\n if (textDelta !== '') {\n controller.enqueue({ type: 'text-delta', textDelta });\n }\n\n // store finish reason for telemetry:\n finishReason = chunk.finishReason;\n\n // store usage and metadata for promises and onFinish callback:\n usage = chunk.usage;\n providerMetadata = chunk.providerMetadata;\n\n controller.enqueue({\n ...chunk,\n usage,\n response: fullResponse,\n });\n\n // resolve promises that can be resolved now:\n self._usage.resolve(usage);\n self._providerMetadata.resolve(providerMetadata);\n self._response.resolve({\n ...fullResponse,\n headers: response?.headers,\n });\n\n // resolve the object promise with the latest object:\n const validationResult =\n await outputStrategy.validateFinalResult(\n latestObjectJson,\n {\n text: accumulatedText,\n response: fullResponse,\n usage,\n },\n );\n\n if (validationResult.success) {\n object = validationResult.value;\n self._object.resolve(object);\n } else {\n error = new NoObjectGeneratedError({\n message:\n 'No object generated: response did not match schema.',\n cause: validationResult.error,\n text: accumulatedText,\n response: fullResponse,\n usage,\n finishReason,\n });\n self._object.reject(error);\n }\n\n break;\n }\n\n default: {\n controller.enqueue(chunk);\n break;\n }\n }\n },\n\n // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n async flush(controller) {\n try {\n const finalUsage = usage ?? {\n promptTokens: NaN,\n completionTokens: NaN,\n totalTokens: NaN,\n };\n\n doStreamSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': finishReason,\n 'ai.response.object': {\n output: () => JSON.stringify(object),\n },\n 'ai.response.id': fullResponse.id,\n 'ai.response.model': fullResponse.modelId,\n 'ai.response.timestamp':\n fullResponse.timestamp.toISOString(),\n\n 'ai.usage.inputTokens': finalUsage.inputTokens,\n 'ai.usage.outputTokens': finalUsage.outputTokens,\n 'ai.usage.totalTokens': finalUsage.totalTokens,\n 'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens':\n finalUsage.cachedInputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [finishReason],\n 'gen_ai.response.id': fullResponse.id,\n 'gen_ai.response.model': fullResponse.modelId,\n 'gen_ai.usage.input_tokens': finalUsage.inputTokens,\n 'gen_ai.usage.output_tokens': finalUsage.outputTokens,\n },\n }),\n );\n\n // finish doStreamSpan before other operations for correct timing:\n doStreamSpan.end();\n\n // Add response information to the root span:\n rootSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.usage.inputTokens': finalUsage.inputTokens,\n 'ai.usage.outputTokens': finalUsage.outputTokens,\n 'ai.usage.totalTokens': finalUsage.totalTokens,\n 'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens':\n finalUsage.cachedInputTokens,\n 'ai.response.object': {\n output: () => JSON.stringify(object),\n },\n },\n }),\n );\n\n // call onFinish callback:\n await onFinish?.({\n usage: finalUsage,\n object,\n error,\n response: {\n ...fullResponse,\n headers: response?.headers,\n },\n warnings,\n providerMetadata,\n });\n } catch (error) {\n controller.enqueue({ type: 'error', error });\n } finally {\n rootSpan.end();\n }\n },\n }),\n );\n\n stitchableStream.addStream(transformedStream);\n },\n })\n .catch(error => {\n // add an empty stream with an error to break the stream:\n stitchableStream.addStream(\n new ReadableStream({\n start(controller) {\n controller.enqueue({ type: 'error', error });\n controller.close();\n },\n }),\n );\n })\n .finally(() => {\n stitchableStream.close();\n });\n\n this.outputStrategy = outputStrategy;\n }\n\n get object() {\n return this._object.promise;\n }\n\n get usage() {\n return this._usage.promise;\n }\n\n get providerMetadata() {\n return this._providerMetadata.promise;\n }\n\n get warnings() {\n return this._warnings.promise;\n }\n\n get request() {\n return this._request.promise;\n }\n\n get response() {\n return this._response.promise;\n }\n\n get partialObjectStream(): AsyncIterableStream<PARTIAL> {\n return createAsyncIterableStream(\n this.baseStream.pipeThrough(\n new TransformStream<ObjectStreamPart<PARTIAL>, PARTIAL>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'object':\n controller.enqueue(chunk.object);\n break;\n\n case 'text-delta':\n case 'finish':\n case 'error': // suppress error (use onError instead)\n break;\n\n default: {\n const _exhaustiveCheck: never = chunk;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n }),\n ),\n );\n }\n\n get elementStream(): ELEMENT_STREAM {\n return this.outputStrategy.createElementStream(this.baseStream);\n }\n\n get textStream(): AsyncIterableStream<string> {\n return createAsyncIterableStream(\n this.baseStream.pipeThrough(\n new TransformStream<ObjectStreamPart<PARTIAL>, string>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'text-delta':\n controller.enqueue(chunk.textDelta);\n break;\n\n case 'object':\n case 'finish':\n case 'error': // suppress error (use onError instead)\n break;\n\n default: {\n const _exhaustiveCheck: never = chunk;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n }),\n ),\n );\n }\n\n get fullStream(): AsyncIterableStream<ObjectStreamPart<PARTIAL>> {\n return createAsyncIterableStream(this.baseStream);\n }\n\n pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n pipeTextStreamToResponse({\n response,\n textStream: this.textStream,\n ...init,\n });\n }\n\n toTextStreamResponse(init?: ResponseInit): Response {\n return createTextStreamResponse({\n textStream: this.textStream,\n ...init,\n });\n }\n}\n\nexport type ObjectStreamInputPart =\n | string\n | {\n type: 'stream-start';\n warnings: LanguageModelV2CallWarning[];\n }\n | {\n type: 'error';\n error: unknown;\n }\n | {\n type: 'response-metadata';\n id?: string;\n timestamp?: Date;\n modelId?: string;\n }\n | {\n type: 'finish';\n finishReason: LanguageModelV2FinishReason;\n usage: LanguageModelV2Usage;\n providerMetadata?: SharedV2ProviderMetadata;\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: (error: unknown) => void;\n} {\n let resolve: (value: T) => void;\n let reject: (error: unknown) => void;\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';\nimport { SpeechModelResponseMetadata } from '../../core/types/speech-model-response-metadata';\n\n/**\nError that is thrown when no speech audio was generated.\n */\nexport class NoSpeechGeneratedError extends AISDKError {\n readonly responses: Array<SpeechModelResponseMetadata>;\n\n constructor(options: { responses: Array<SpeechModelResponseMetadata> }) {\n super({\n name: 'AI_NoSpeechGeneratedError',\n message: 'No speech audio generated.',\n });\n\n this.responses = options.responses;\n }\n}\n","import {\n GeneratedFile,\n DefaultGeneratedFile,\n} from '../generate-text/generated-file';\n\n/**\n * A generated audio file.\n */\nexport interface GeneratedAudioFile extends GeneratedFile {\n /**\n * Audio format of the file (e.g., 'mp3', 'wav', etc.)\n */\n readonly format: string;\n}\n\nexport class DefaultGeneratedAudioFile\n extends DefaultGeneratedFile\n implements GeneratedAudioFile\n{\n readonly format: string;\n\n constructor({\n data,\n mediaType,\n }: {\n data: string | Uint8Array;\n mediaType: string;\n }) {\n super({ data, mediaType });\n let format = 'mp3';\n\n // If format is not provided, try to determine it from the media type\n if (mediaType) {\n const mediaTypeParts = mediaType.split('/');\n\n if (mediaTypeParts.length === 2) {\n // Handle special cases for audio formats\n if (mediaType !== 'audio/mpeg') {\n format = mediaTypeParts[1];\n }\n }\n }\n\n if (!format) {\n // TODO this should be an AI SDK error\n throw new Error(\n 'Audio format must be provided or determinable from media type',\n );\n }\n\n this.format = format;\n }\n}\n\nexport class DefaultGeneratedAudioFileWithType extends DefaultGeneratedAudioFile {\n readonly type = 'audio';\n\n constructor(options: {\n data: string | Uint8Array;\n mediaType: string;\n format: string;\n }) {\n super(options);\n }\n}\n","import { JSONValue, SpeechModelV1 } from '@ai-sdk/provider';\nimport { NoSpeechGeneratedError } from '../../src/error/no-speech-generated-error';\nimport {\n audioMediaTypeSignatures,\n detectMediaType,\n} from '../../src/util/detect-media-type';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport { ProviderOptions } from '../types/provider-metadata';\nimport { SpeechWarning } from '../types/speech-model';\nimport { SpeechModelResponseMetadata } from '../types/speech-model-response-metadata';\nimport { SpeechResult } from './generate-speech-result';\nimport {\n DefaultGeneratedAudioFile,\n GeneratedAudioFile,\n} from './generated-audio-file';\n\n/**\nGenerates speech audio using a speech model.\n\n@param model - The speech model to use.\n@param text - The text to convert to speech.\n@param voice - The voice to use for speech generation.\n@param outputFormat - The output format to use for speech generation e.g. \"mp3\", \"wav\", etc.\n@param instructions - Instructions for the speech generation e.g. \"Speak in a slow and steady tone\".\n@param speed - The speed of the speech generation.\n@param providerOptions - Additional provider-specific options that are passed through to the provider\nas body parameters.\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@returns A result object that contains the generated audio data.\n */\nexport async function generateSpeech({\n model,\n text,\n voice,\n outputFormat,\n instructions,\n speed,\n providerOptions = {},\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n}: {\n /**\nThe speech model to use.\n */\n model: SpeechModelV1;\n\n /**\nThe text to convert to speech.\n */\n text: string;\n\n /**\nThe voice to use for speech generation.\n */\n voice?: string;\n\n /**\n * The desired output format for the audio e.g. \"mp3\", \"wav\", etc.\n */\n outputFormat?: 'mp3' | 'wav' | (string & {});\n\n /**\n Instructions for the speech generation e.g. \"Speak in a slow and steady tone\".\n */\n instructions?: string;\n\n /**\n The speed of the speech generation.\n */\n speed?: number;\n\n /**\nAdditional provider-specific options that are passed through to the provider\nas body parameters.\n\nThe outer record is keyed by the provider name, and the inner\nrecord is keyed by the provider-specific metadata key.\n```ts\n{\n \"openai\": {}\n}\n```\n */\n providerOptions?: ProviderOptions;\n\n /**\nMaximum number of retries per speech model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n}): Promise<SpeechResult> {\n const { retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n const result = await retry(() =>\n model.doGenerate({\n text,\n voice,\n outputFormat,\n instructions,\n speed,\n abortSignal,\n headers,\n providerOptions,\n }),\n );\n\n if (!result.audio || result.audio.length === 0) {\n throw new NoSpeechGeneratedError({ responses: [result.response] });\n }\n\n return new DefaultSpeechResult({\n audio: new DefaultGeneratedAudioFile({\n data: result.audio,\n mediaType:\n detectMediaType({\n data: result.audio,\n signatures: audioMediaTypeSignatures,\n }) ?? 'audio/mp3',\n }),\n warnings: result.warnings,\n responses: [result.response],\n providerMetadata: result.providerMetadata,\n });\n}\n\nclass DefaultSpeechResult implements SpeechResult {\n readonly audio: GeneratedAudioFile;\n readonly warnings: Array<SpeechWarning>;\n readonly responses: Array<SpeechModelResponseMetadata>;\n readonly providerMetadata: Record<string, Record<string, JSONValue>>;\n\n constructor(options: {\n audio: GeneratedAudioFile;\n warnings: Array<SpeechWarning>;\n responses: Array<SpeechModelResponseMetadata>;\n providerMetadata: Record<string, Record<string, JSONValue>> | undefined;\n }) {\n this.audio = options.audio;\n this.warnings = options.warnings;\n this.responses = options.responses;\n this.providerMetadata = options.providerMetadata ?? {};\n }\n}\n","import {\n LanguageModelV2Content,\n LanguageModelV2ToolCall,\n} from '@ai-sdk/provider';\nimport { createIdGenerator, IdGenerator } from '@ai-sdk/provider-utils';\nimport { Tracer } from '@opentelemetry/api';\nimport { NoOutputSpecifiedError } from '../../src/error/no-output-specified-error';\nimport { ToolExecutionError } from '../../src/error/tool-execution-error';\nimport { asArray } from '../../src/util/as-array';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport { ModelMessage } from '../prompt';\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 { standardizePrompt } from '../prompt/standardize-prompt';\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 { LanguageModel, ProviderOptions, ToolChoice } from '../types';\nimport { addLanguageModelUsage, LanguageModelUsage } from '../types/usage';\nimport { asContent } from './as-content';\nimport { extractContentText } from './extract-content-text';\nimport { GenerateTextResult } from './generate-text-result';\nimport { Output } from './output';\nimport { parseToolCall } from './parse-tool-call';\nimport { PrepareStepFunction } from './prepare-step';\nimport { ResponseMessage } from './response-message';\nimport { DefaultStepResult, StepResult } from './step-result';\nimport {\n isStopConditionMet,\n stepCountIs,\n StopCondition,\n} from './stop-condition';\nimport { toResponseMessages } from './to-response-messages';\nimport { ToolCallArray } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair';\nimport { ToolResultArray } from './tool-result';\nimport { ToolSet } from './tool-set';\n\nconst originalGenerateId = createIdGenerator({\n prefix: 'aitxt',\n size: 24,\n});\n\n/**\nCallback that is set using the `onStepFinish` option.\n\n@param stepResult - The result of the step.\n */\nexport type GenerateTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n stepResult: StepResult<TOOLS>,\n) => Promise<void> | void;\n\n/**\nGenerate a text and call tools for a given prompt using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamText` instead.\n\n@param model - The language model to use.\n\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n@param toolChoice - The tool choice strategy. Default: 'auto'.\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 experimental_generateMessageId - Generate a unique ID for each message.\n\n@param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n\n@returns\nA result object that contains the generated text, the results of the tool calls, and additional information.\n */\nexport async function generateText<\n TOOLS extends ToolSet,\n OUTPUT = never,\n OUTPUT_PARTIAL = never,\n>({\n model,\n tools,\n toolChoice,\n system,\n prompt,\n messages,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n stopWhen = stepCountIs(1),\n experimental_output: output,\n experimental_telemetry: telemetry,\n providerOptions,\n experimental_activeTools,\n activeTools = experimental_activeTools,\n experimental_prepareStep,\n prepareStep = experimental_prepareStep,\n experimental_repairToolCall: repairToolCall,\n _internal: {\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n } = {},\n onStepFinish,\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<NoInfer<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 /**\nLimits the tools that are available for the model to call without\nchanging 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, OUTPUT_PARTIAL>;\n\n /**\n * @deprecated Use `prepareStep` instead.\n */\n experimental_prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n /**\nOptional function that you can use to provide different settings for a step.\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<NoInfer<TOOLS>>;\n\n /**\n Callback that is called when each step (LLM call) is finished, including intermediate steps.\n */\n onStepFinish?: GenerateTextOnStepFinishCallback<NoInfer<TOOLS>>;\n\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n generateId?: IdGenerator;\n currentDate?: () => Date;\n };\n }): Promise<GenerateTextResult<TOOLS, OUTPUT>> {\n const stopConditions = asArray(stopWhen);\n const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\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 initialPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n });\n\n const tracer = getTracer(telemetry);\n\n return recordSpan({\n name: 'ai.generateText',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateText',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // model:\n 'ai.model.provider': model.provider,\n 'ai.model.id': model.modelId,\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 fn: async span => {\n const callSettings = prepareCallSettings(settings);\n\n let currentModelResponse: Awaited<\n ReturnType<LanguageModel['doGenerate']>\n > & { response: { id: string; timestamp: Date; modelId: string } };\n let currentToolCalls: ToolCallArray<TOOLS> = [];\n let currentToolResults: ToolResultArray<TOOLS> = [];\n const responseMessages: Array<ResponseMessage> = [];\n const steps: GenerateTextResult<TOOLS, OUTPUT>['steps'] = [];\n\n do {\n const stepInputMessages = [\n ...initialPrompt.messages,\n ...responseMessages,\n ];\n\n const prepareStepResult = await prepareStep?.({\n model,\n steps,\n stepNumber: steps.length,\n });\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: {\n system: initialPrompt.system,\n messages: stepInputMessages,\n },\n supportedUrls: await model.supportedUrls,\n });\n\n const stepModel = prepareStepResult?.model ?? model;\n const { toolChoice: stepToolChoice, tools: stepTools } =\n prepareToolsAndToolChoice({\n tools,\n toolChoice: prepareStepResult?.toolChoice ?? toolChoice,\n activeTools: prepareStepResult?.activeTools ?? activeTools,\n });\n\n currentModelResponse = await retry(() =>\n recordSpan({\n name: 'ai.generateText.doGenerate',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateText.doGenerate',\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': settings.frequencyPenalty,\n 'gen_ai.request.max_tokens': settings.maxOutputTokens,\n 'gen_ai.request.presence_penalty': settings.presencePenalty,\n 'gen_ai.request.stop_sequences': settings.stopSequences,\n 'gen_ai.request.temperature': settings.temperature ?? undefined,\n 'gen_ai.request.top_k': settings.topK,\n 'gen_ai.request.top_p': settings.topP,\n },\n }),\n tracer,\n fn: async span => {\n const result = await stepModel.doGenerate({\n ...callSettings,\n tools: stepTools,\n toolChoice: stepToolChoice,\n responseFormat: output?.responseFormat,\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers,\n });\n\n // Fill in default values:\n const responseData = {\n id: result.response?.id ?? generateId(),\n timestamp: result.response?.timestamp ?? currentDate(),\n modelId: result.response?.modelId ?? stepModel.modelId,\n headers: result.response?.headers,\n body: result.response?.body,\n };\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': result.finishReason,\n 'ai.response.text': {\n output: () => extractContentText(result.content),\n },\n 'ai.response.toolCalls': {\n output: () => {\n const toolCalls = asToolCalls(result.content);\n return toolCalls == null\n ? undefined\n : JSON.stringify(toolCalls);\n },\n },\n 'ai.response.id': responseData.id,\n 'ai.response.model': responseData.modelId,\n 'ai.response.timestamp':\n responseData.timestamp.toISOString(),\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': result.usage.inputTokens,\n 'ai.usage.completionTokens': result.usage.outputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [result.finishReason],\n 'gen_ai.response.id': responseData.id,\n 'gen_ai.response.model': responseData.modelId,\n 'gen_ai.usage.input_tokens': result.usage.inputTokens,\n 'gen_ai.usage.output_tokens': result.usage.outputTokens,\n },\n }),\n );\n\n return { ...result, response: responseData };\n },\n }),\n );\n\n // parse tool calls:\n currentToolCalls = await Promise.all(\n currentModelResponse.content\n .filter(\n (part): part is LanguageModelV2ToolCall =>\n part.type === 'tool-call',\n )\n .map(toolCall =>\n parseToolCall({\n toolCall,\n tools,\n repairToolCall,\n system,\n messages: stepInputMessages,\n }),\n ),\n );\n\n // execute tools:\n currentToolResults =\n tools == null\n ? []\n : await executeTools({\n toolCalls: currentToolCalls,\n tools,\n tracer,\n telemetry,\n messages: stepInputMessages,\n abortSignal,\n });\n\n // content:\n const stepContent = asContent({\n content: currentModelResponse.content,\n toolCalls: currentToolCalls,\n toolResults: currentToolResults,\n });\n\n // append to messages for potential next step:\n responseMessages.push(\n ...toResponseMessages({\n content: stepContent,\n tools: tools ?? ({} as TOOLS),\n }),\n );\n\n // Add step information (after response messages are updated):\n const currentStepResult: StepResult<TOOLS> = new DefaultStepResult({\n content: stepContent,\n finishReason: currentModelResponse.finishReason,\n usage: currentModelResponse.usage,\n warnings: currentModelResponse.warnings,\n providerMetadata: currentModelResponse.providerMetadata,\n request: currentModelResponse.request ?? {},\n response: {\n ...currentModelResponse.response,\n // deep clone msgs to avoid mutating past messages in multi-step:\n messages: structuredClone(responseMessages),\n },\n });\n\n steps.push(currentStepResult);\n await onStepFinish?.(currentStepResult);\n } while (\n // there are tool calls:\n currentToolCalls.length > 0 &&\n // all current tool calls have results:\n currentToolResults.length === currentToolCalls.length &&\n // continue until a stop condition is met:\n !(await isStopConditionMet({ stopConditions, steps }))\n );\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': currentModelResponse.finishReason,\n 'ai.response.text': {\n output: () => extractContentText(currentModelResponse.content),\n },\n 'ai.response.toolCalls': {\n output: () => {\n const toolCalls = asToolCalls(currentModelResponse.content);\n return toolCalls == null\n ? undefined\n : JSON.stringify(toolCalls);\n },\n },\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': currentModelResponse.usage.inputTokens,\n 'ai.usage.completionTokens':\n currentModelResponse.usage.outputTokens,\n },\n }),\n );\n\n const lastStep = steps[steps.length - 1];\n\n return new DefaultGenerateTextResult({\n steps,\n resolvedOutput: await output?.parseOutput(\n { text: lastStep.text },\n {\n response: lastStep.response,\n usage: lastStep.usage,\n finishReason: lastStep.finishReason,\n },\n ),\n });\n },\n });\n}\n\nasync function executeTools<TOOLS extends ToolSet>({\n toolCalls,\n tools,\n tracer,\n telemetry,\n messages,\n abortSignal,\n}: {\n toolCalls: ToolCallArray<TOOLS>;\n tools: TOOLS;\n tracer: Tracer;\n telemetry: TelemetrySettings | undefined;\n messages: ModelMessage[];\n abortSignal: AbortSignal | undefined;\n}): Promise<ToolResultArray<TOOLS>> {\n const toolResults = await Promise.all(\n toolCalls.map(async ({ toolCallId, toolName, args }) => {\n const tool = tools[toolName];\n\n if (tool?.execute == null) {\n return undefined;\n }\n\n const result = await 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': toolName,\n 'ai.toolCall.id': toolCallId,\n 'ai.toolCall.args': {\n output: () => JSON.stringify(args),\n },\n },\n }),\n tracer,\n fn: async span => {\n try {\n const result = await tool.execute!(args, {\n toolCallId,\n messages,\n abortSignal,\n });\n\n try {\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.toolCall.result': {\n output: () => JSON.stringify(result),\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 return result;\n } catch (error) {\n throw new ToolExecutionError({\n toolCallId,\n toolName,\n toolArgs: args,\n cause: error,\n });\n }\n },\n });\n\n return {\n type: 'tool-result',\n toolCallId,\n toolName,\n args,\n result,\n } as ToolResultArray<TOOLS>[number];\n }),\n );\n\n return toolResults.filter(\n (result): result is NonNullable<typeof result> => result != null,\n );\n}\n\nclass DefaultGenerateTextResult<TOOLS extends ToolSet, OUTPUT>\n implements GenerateTextResult<TOOLS, OUTPUT>\n{\n readonly steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n\n private readonly resolvedOutput: OUTPUT;\n\n constructor(options: {\n steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n resolvedOutput: OUTPUT;\n }) {\n this.steps = options.steps;\n this.resolvedOutput = options.resolvedOutput;\n }\n\n private get finalStep() {\n return this.steps[this.steps.length - 1];\n }\n\n get content() {\n return this.finalStep.content;\n }\n\n get text() {\n return this.finalStep.text;\n }\n\n get files() {\n return this.finalStep.files;\n }\n\n get reasoningText() {\n return this.finalStep.reasoningText;\n }\n\n get reasoning() {\n return this.finalStep.reasoning;\n }\n\n get toolCalls() {\n return this.finalStep.toolCalls;\n }\n\n get toolResults() {\n return this.finalStep.toolResults;\n }\n\n get sources() {\n return this.finalStep.sources;\n }\n\n get finishReason() {\n return this.finalStep.finishReason;\n }\n\n get warnings() {\n return this.finalStep.warnings;\n }\n\n get providerMetadata() {\n return this.finalStep.providerMetadata;\n }\n\n get response() {\n return this.finalStep.response;\n }\n\n get request() {\n return this.finalStep.request;\n }\n\n get usage() {\n return this.finalStep.usage;\n }\n\n get totalUsage() {\n return this.steps.reduce(\n (totalUsage, step) => {\n return addLanguageModelUsage(totalUsage, step.usage);\n },\n {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n reasoningTokens: undefined,\n cachedInputTokens: undefined,\n } as LanguageModelUsage,\n );\n }\n\n get experimental_output() {\n if (this.resolvedOutput == null) {\n throw new NoOutputSpecifiedError();\n }\n\n return this.resolvedOutput;\n }\n}\n\nfunction asToolCalls(content: Array<LanguageModelV2Content>) {\n const parts = content.filter(\n (part): part is LanguageModelV2ToolCall => part.type === 'tool-call',\n );\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.map(toolCall => ({\n toolCallType: toolCall.toolCallType,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n }));\n}\n","export function asArray<T>(value: T | T[] | undefined): T[] {\n return value === undefined ? [] : Array.isArray(value) ? value : [value];\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 parameters: asSchema(tool.parameters).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 { 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 { LanguageModelV2Content } from '@ai-sdk/provider';\nimport { ContentPart } from './content-part';\nimport { DefaultGeneratedFile } from './generated-file';\nimport { ToolCallArray } from './tool-call';\nimport { ToolResultArray } from './tool-result';\nimport { ToolSet } from './tool-set';\n\nexport function asContent<TOOLS extends ToolSet>({\n content,\n toolCalls,\n toolResults,\n}: {\n content: Array<LanguageModelV2Content>;\n toolCalls: ToolCallArray<TOOLS>;\n toolResults: ToolResultArray<TOOLS>;\n}): Array<ContentPart<TOOLS>> {\n return [\n ...content.map(part => {\n switch (part.type) {\n case 'text':\n case 'reasoning':\n case 'source':\n return part;\n\n case 'file': {\n return {\n type: 'file' as const,\n file: new DefaultGeneratedFile(part),\n };\n }\n\n case 'tool-call': {\n return toolCalls.find(\n toolCall => toolCall.toolCallId === part.toolCallId,\n )!;\n }\n }\n }),\n ...toolResults,\n ];\n}\n","import { LanguageModelV2ToolCall } from '@ai-sdk/provider';\nimport {\n asSchema,\n safeParseJSON,\n safeValidateTypes,\n} from '@ai-sdk/provider-utils';\nimport { InvalidToolArgumentsError } from '../../src/error/invalid-tool-arguments-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';\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 InvalidToolArgumentsError.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 parameterSchema: ({ toolName }) => {\n const { parameters } = tools[toolName];\n return asSchema(parameters).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.parameters);\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.args.trim() === ''\n ? await safeValidateTypes({ value: {}, schema })\n : await safeParseJSON({ text: toolCall.args, schema });\n\n if (parseResult.success === false) {\n throw new InvalidToolArgumentsError({\n toolName,\n toolArgs: toolCall.args,\n cause: parseResult.error,\n });\n }\n\n return {\n type: 'tool-call',\n toolCallId: toolCall.toolCallId,\n toolName,\n args: parseResult?.value,\n };\n}\n","import { ReasoningPart } from '../prompt/content-part';\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-result';\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 AssistantContent,\n AssistantModelMessage,\n ToolContent,\n ToolModelMessage,\n ToolResultPart,\n} from '../prompt';\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;\n}): Array<AssistantModelMessage | ToolModelMessage> {\n const responseMessages: Array<AssistantModelMessage | ToolModelMessage> = [];\n\n const content: AssistantContent = inputContent\n .filter(part => part.type !== 'tool-result' && part.type !== 'source')\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' as const,\n text: part.text,\n providerOptions: part.providerMetadata,\n };\n case 'file':\n return {\n type: 'file' as const,\n data: part.file.base64,\n mediaType: part.file.mediaType,\n };\n case 'tool-call':\n return part;\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')\n .map((toolResult): ToolResultPart => {\n const tool = tools[toolResult.toolName];\n return tool?.experimental_toToolResultContent != null\n ? {\n type: 'tool-result',\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName,\n result: tool.experimental_toToolResultContent(toolResult.result),\n experimental_content: tool.experimental_toToolResultContent(\n toolResult.result,\n ),\n }\n : {\n type: 'tool-result',\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName,\n result: toolResult.result,\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","import { LanguageModelV2CallOptions } from '@ai-sdk/provider';\nimport {\n asSchema,\n safeParseJSON,\n safeValidateTypes,\n Schema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../src/error/no-object-generated-error';\nimport { DeepPartial } from '../../src/util/deep-partial';\nimport { parsePartialJson } from '../../src/util/parse-partial-json';\nimport { FinishReason } from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../types/usage';\n\nexport interface Output<OUTPUT, PARTIAL> {\n readonly type: 'object' | 'text';\n\n responseFormat: LanguageModelV2CallOptions['responseFormat'];\n\n parsePartial(options: {\n text: string;\n }): Promise<{ partial: PARTIAL } | undefined>;\n\n parseOutput(\n options: { text: string },\n context: {\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n ): Promise<OUTPUT>;\n}\n\nexport const text = (): Output<string, string> => ({\n type: 'text',\n\n responseFormat: { type: 'text' },\n\n async parsePartial({ text }: { text: string }) {\n return { partial: text };\n },\n\n async parseOutput({ text }: { text: string }) {\n return text;\n },\n});\n\nexport const object = <OUTPUT>({\n schema: inputSchema,\n}: {\n schema: z.Schema<OUTPUT, z.ZodTypeDef, any> | Schema<OUTPUT>;\n}): Output<OUTPUT, DeepPartial<OUTPUT>> => {\n const schema = asSchema(inputSchema);\n\n return {\n type: 'object',\n\n responseFormat: {\n type: 'json',\n schema: schema.jsonSchema,\n },\n\n async parsePartial({ text }: { text: string }) {\n const result = await parsePartialJson(text);\n\n switch (result.state) {\n case 'failed-parse':\n case 'undefined-input':\n return undefined;\n\n case 'repaired-parse':\n case 'successful-parse':\n return {\n // Note: currently no validation of partial results:\n partial: result.value as DeepPartial<OUTPUT>,\n };\n\n default: {\n const _exhaustiveCheck: never = result.state;\n throw new Error(`Unsupported parse state: ${_exhaustiveCheck}`);\n }\n }\n },\n\n async parseOutput(\n { text }: { text: string },\n context: {\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n ) {\n const parseResult = await safeParseJSON({ text });\n\n if (!parseResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: could not parse the response.',\n cause: parseResult.error,\n text,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason,\n });\n }\n\n const validationResult = await safeValidateTypes({\n value: parseResult.value,\n schema,\n });\n\n if (!validationResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: response did not match schema.',\n cause: validationResult.error,\n text,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason,\n });\n }\n\n return validationResult.value;\n },\n };\n};\n","import { delay as originalDelay } from '@ai-sdk/provider-utils';\nimport { TextStreamPart } from './stream-text-result';\nimport { ToolSet } from './tool-set';\nimport { InvalidArgumentError } from '@ai-sdk/provider';\n\nconst CHUNKING_REGEXPS = {\n word: /\\S+\\s+/m,\n line: /\\n+/m,\n};\n\n/**\n * Detects the first chunk in a buffer.\n *\n * @param buffer - The buffer to detect the first chunk in.\n *\n * @returns The first detected chunk, or `undefined` if no chunk was detected.\n */\nexport type ChunkDetector = (buffer: string) => string | undefined | null;\n\n/**\n * Smooths text streaming output.\n *\n * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms. Can be set to `null` to skip the delay.\n * @param chunking - Controls how the text is chunked for streaming. Use \"word\" to stream word by word (default), \"line\" to stream line by line, or provide a custom RegExp pattern for custom chunking.\n *\n * @returns A transform stream that smooths text streaming output.\n */\nexport function smoothStream<TOOLS extends ToolSet>({\n delayInMs = 10,\n chunking = 'word',\n _internal: { delay = originalDelay } = {},\n}: {\n delayInMs?: number | null;\n chunking?: 'word' | 'line' | RegExp | ChunkDetector;\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n delay?: (delayInMs: number | null) => Promise<void>;\n };\n} = {}): (options: {\n tools: TOOLS;\n}) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>> {\n let detectChunk: ChunkDetector;\n\n if (typeof chunking === 'function') {\n detectChunk = buffer => {\n const match = chunking(buffer);\n\n if (match == null) {\n return null;\n }\n\n if (!match.length) {\n throw new Error(`Chunking function must return a non-empty string.`);\n }\n\n if (!buffer.startsWith(match)) {\n throw new Error(\n `Chunking function must return a match that is a prefix of the buffer. Received: \"${match}\" expected to start with \"${buffer}\"`,\n );\n }\n\n return match;\n };\n } else {\n const chunkingRegex =\n typeof chunking === 'string' ? CHUNKING_REGEXPS[chunking] : chunking;\n\n if (chunkingRegex == null) {\n throw new InvalidArgumentError({\n argument: 'chunking',\n message: `Chunking must be \"word\" or \"line\" or a RegExp. Received: ${chunking}`,\n });\n }\n\n detectChunk = buffer => {\n const match = chunkingRegex.exec(buffer);\n\n if (!match) {\n return null;\n }\n\n return buffer.slice(0, match.index) + match?.[0];\n };\n }\n\n return () => {\n let buffer = '';\n\n return new TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>({\n async transform(chunk, controller) {\n if (chunk.type !== 'text') {\n if (buffer.length > 0) {\n controller.enqueue({ type: 'text', text: buffer });\n buffer = '';\n }\n\n controller.enqueue(chunk);\n return;\n }\n\n buffer += chunk.text;\n\n let match;\n\n while ((match = detectChunk(buffer)) != null) {\n controller.enqueue({ type: 'text', text: match });\n buffer = buffer.slice(match.length);\n\n await delay(delayInMs);\n }\n },\n });\n };\n}\n","import { LanguageModelV2CallWarning } from '@ai-sdk/provider';\nimport { createIdGenerator, IdGenerator } 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 { createUIMessageStreamResponse } from '../../src/ui-message-stream/create-ui-message-stream-response';\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 { UIMessageStreamPart } from '../../src/ui-message-stream/ui-message-stream-parts';\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 { standardizePrompt } from '../prompt/standardize-prompt';\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, ProviderOptions } 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';\nimport { ToolResultUnion } from './tool-result';\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-call-streaming-start'\n | 'tool-call-delta'\n | 'tool-result';\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_toolCallStreaming = false,\n toolCallStreaming = experimental_toolCallStreaming,\n experimental_activeTools,\n activeTools = experimental_activeTools,\n experimental_repairToolCall: repairToolCall,\n experimental_transform: transform,\n onChunk,\n onError,\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 /**\nEnable streaming of tool call deltas as they are generated. Disabled by default.\n */\n toolCallStreaming?: boolean;\n\n /**\n@deprecated Use `toolCallStreaming` instead.\n */\n experimental_toolCallStreaming?: boolean;\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 /**\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,\n telemetry,\n headers,\n settings,\n maxRetries,\n abortSignal,\n system,\n prompt,\n messages,\n tools,\n toolChoice,\n toolCallStreaming,\n transforms: asArray(transform),\n activeTools,\n repairToolCall,\n stopConditions: asArray(stopWhen),\n output,\n providerOptions,\n prepareStep,\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 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: { type: 'text', text: textChunk },\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') {\n publishTextChunk({ controller });\n }\n\n if (chunk.type !== 'text') {\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 flush(controller) {\n // publish remaining text (there should be none if the content was correctly formatted):\n if (textChunk.length > 0) {\n publishTextChunk({ controller });\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 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 toolCallStreaming,\n transforms,\n activeTools,\n repairToolCall,\n stopConditions,\n output,\n providerOptions,\n prepareStep,\n now,\n currentDate,\n generateId,\n onChunk,\n onError,\n onFinish,\n onStepFinish,\n }: {\n model: LanguageModel;\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 toolCallStreaming: boolean;\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 now: () => number;\n currentDate: () => Date;\n generateId: () => string;\n\n // callbacks:\n onChunk: undefined | StreamTextOnChunkCallback<TOOLS>;\n onError: undefined | StreamTextOnErrorCallback;\n onFinish: undefined | StreamTextOnFinishCallback<TOOLS>;\n onStepFinish: undefined | StreamTextOnStepFinishCallback<TOOLS>;\n }) {\n this.output = output;\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 activeReasoningPart:\n | undefined\n | (ContentPart<TOOLS> & { type: 'reasoning' }) = undefined;\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 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-call-streaming-start' ||\n part.type === 'tool-call-delta'\n ) {\n await onChunk?.({ chunk: part });\n }\n\n if (part.type === 'error') {\n await onError?.({ error: part.error });\n }\n\n if (part.type === 'text') {\n const latestContent = recordedContent[recordedContent.length - 1];\n if (latestContent?.type === 'text') {\n latestContent.text += part.text;\n } else {\n recordedContent.push({ type: 'text', text: part.text });\n }\n }\n\n if (part.type === 'reasoning') {\n if (activeReasoningPart == null) {\n activeReasoningPart = {\n type: 'reasoning',\n text: part.text,\n providerMetadata: part.providerMetadata,\n };\n recordedContent.push(activeReasoningPart);\n } else {\n activeReasoningPart.text += part.text;\n activeReasoningPart.providerMetadata = part.providerMetadata;\n }\n }\n\n if (\n part.type === 'reasoning-part-finish' &&\n activeReasoningPart != null\n ) {\n activeReasoningPart = undefined;\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 === '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: tools ?? ({} as 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 activeReasoningPart = undefined;\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\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 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 });\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: {\n system: initialPrompt.system,\n messages: stepInputMessages,\n },\n supportedUrls: await model.supportedUrls,\n });\n\n const stepModel = prepareStepResult?.model ?? model;\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 }),\n };\n },\n }),\n );\n\n const streamWithToolResults = runToolsTransformation({\n tools,\n generatorStream: stream,\n toolCallStreaming,\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 stepToolResults: ToolResultUnion<TOOLS>[] = [];\n let warnings: LanguageModelV2CallWarning[] | undefined;\n const stepContent: Array<ContentPart<TOOLS>> = [];\n\n let activeReasoningPart:\n | undefined\n | (ContentPart<TOOLS> & { type: 'reasoning' }) = undefined;\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 stepText = '';\n let stepResponse: { id: string; timestamp: Date; modelId: string } = {\n id: generateId(),\n timestamp: currentDate(),\n modelId: model.modelId,\n };\n\n async function publishTextChunk({\n controller,\n chunk,\n }: {\n controller: TransformStreamDefaultController<TextStreamPart<TOOLS>>;\n chunk: TextStreamPart<TOOLS> & { type: 'text' };\n }) {\n controller.enqueue(chunk);\n\n stepText += chunk.text;\n }\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 // Filter out empty text deltas\n if (chunk.type === 'text' && chunk.text.length === 0) {\n return;\n }\n\n const chunkType = chunk.type;\n switch (chunkType) {\n case 'text': {\n await publishTextChunk({ controller, chunk });\n break;\n }\n\n case 'reasoning': {\n controller.enqueue(chunk);\n\n if (activeReasoningPart == null) {\n activeReasoningPart = {\n type: 'reasoning',\n text: chunk.text,\n providerMetadata: chunk.providerMetadata,\n };\n stepContent.push(activeReasoningPart);\n } else {\n activeReasoningPart.text += chunk.text;\n activeReasoningPart.providerMetadata =\n chunk.providerMetadata;\n }\n\n break;\n }\n\n case 'reasoning-part-finish': {\n activeReasoningPart = undefined;\n controller.enqueue(chunk);\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 stepContent.push(chunk);\n break;\n }\n\n case 'tool-result': {\n controller.enqueue(chunk);\n // store tool results for onFinish callback and toolResults promise:\n stepToolResults.push(chunk);\n stepContent.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 stepContent.push(chunk);\n controller.enqueue(chunk);\n break;\n }\n\n case 'source': {\n stepContent.push(chunk);\n controller.enqueue(chunk);\n break;\n }\n\n // forward:\n case 'tool-call-streaming-start':\n case 'tool-call-delta': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'error': {\n controller.enqueue(chunk);\n stepFinishReason = 'error';\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': { output: () => stepText },\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\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 if (\n stepToolCalls.length > 0 &&\n // all current tool calls have results:\n stepToolResults.length === stepToolCalls.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: stepContent,\n tools: tools ?? ({} as TOOLS),\n }),\n );\n\n await streamStep({\n currentStep: currentStep + 1,\n responseMessages,\n usage: combinedUsage,\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({\n newMessageId,\n originalMessages = [],\n onFinish,\n messageMetadata,\n sendReasoning = false,\n sendSources = false,\n sendStart = true,\n sendFinish = true,\n onError = () => 'An error occurred.', // mask error messages for safety by default\n }: UIMessageStreamOptions = {}): ReadableStream<UIMessageStreamPart> {\n const lastMessage = originalMessages[originalMessages.length - 1];\n const isContinuation = lastMessage?.role === 'assistant';\n const messageId = isContinuation\n ? lastMessage.id\n : (newMessageId ?? this.generateId());\n\n const baseStream = this.fullStream.pipeThrough(\n new TransformStream<TextStreamPart<TOOLS>, UIMessageStreamPart>({\n transform: async (part, controller) => {\n const partType = part.type;\n switch (partType) {\n case 'text': {\n controller.enqueue({\n type: 'text',\n text: part.text,\n });\n break;\n }\n\n case 'reasoning': {\n if (sendReasoning) {\n controller.enqueue({\n type: 'reasoning',\n text: part.text,\n providerMetadata: part.providerMetadata,\n });\n }\n break;\n }\n\n case 'reasoning-part-finish': {\n if (sendReasoning) {\n controller.enqueue({ type: 'reasoning-part-finish' });\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) {\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 break;\n }\n\n case 'tool-call-streaming-start': {\n controller.enqueue({\n type: 'tool-call-streaming-start',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n });\n break;\n }\n\n case 'tool-call-delta': {\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: part.toolCallId,\n argsTextDelta: part.argsTextDelta,\n });\n break;\n }\n\n case 'tool-call': {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n break;\n }\n\n case 'tool-result': {\n controller.enqueue({\n type: 'tool-result',\n toolCallId: part.toolCallId,\n result: part.result,\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 const metadata = messageMetadata?.({ part });\n controller.enqueue({\n type: 'start-step',\n metadata,\n });\n break;\n }\n\n case 'finish-step': {\n const metadata = messageMetadata?.({ part });\n controller.enqueue({\n type: 'finish-step',\n metadata,\n });\n\n break;\n }\n\n case 'start': {\n if (sendStart) {\n const metadata = messageMetadata?.({ part });\n controller.enqueue({\n type: 'start',\n messageId,\n metadata,\n });\n }\n break;\n }\n\n case 'finish': {\n if (sendFinish) {\n const metadata = messageMetadata?.({ part });\n controller.enqueue({\n type: 'finish',\n metadata,\n });\n }\n break;\n }\n\n default: {\n const exhaustiveCheck: never = partType;\n throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n }),\n );\n\n return handleUIMessageStreamFinish({\n stream: baseStream,\n newMessageId: messageId,\n originalMessages,\n onFinish,\n });\n }\n\n pipeUIMessageStreamToResponse(\n response: ServerResponse,\n {\n newMessageId,\n originalMessages,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n }: ResponseInit & UIMessageStreamOptions = {},\n ) {\n pipeUIMessageStreamToResponse({\n response,\n stream: this.toUIMessageStream({\n newMessageId,\n originalMessages,\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({\n newMessageId,\n originalMessages,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n }: ResponseInit & UIMessageStreamOptions = {}): Response {\n return createUIMessageStreamResponse({\n stream: this.toUIMessageStream({\n newMessageId,\n originalMessages,\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 {\n LanguageModelV2CallWarning,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport { generateId } from '@ai-sdk/provider-utils';\nimport { Tracer } from '@opentelemetry/api';\nimport { ToolExecutionError } from '../../src/error/tool-execution-error';\nimport { ModelMessage } from '../prompt/message';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { 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 { ContentPart } from './content-part';\nimport { DefaultGeneratedFileWithType } from './generated-file';\nimport { parseToolCall } from './parse-tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair';\nimport { ToolSet } from './tool-set';\n\nexport type SingleRequestTextStreamPart<TOOLS extends ToolSet> =\n | ContentPart<TOOLS>\n | { type: 'stream-start'; warnings: LanguageModelV2CallWarning[] }\n | { type: 'reasoning-part-finish' }\n | {\n type: 'tool-call-streaming-start';\n toolCallId: string;\n toolName: string;\n }\n | {\n type: 'tool-call-delta';\n toolCallId: string;\n toolName: string;\n argsTextDelta: string;\n }\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 | {\n type: 'error';\n error: unknown;\n };\n\nexport function runToolsTransformation<TOOLS extends ToolSet>({\n tools,\n generatorStream,\n toolCallStreaming,\n tracer,\n telemetry,\n system,\n messages,\n abortSignal,\n repairToolCall,\n}: {\n tools: TOOLS | undefined;\n generatorStream: ReadableStream<LanguageModelV2StreamPart>;\n toolCallStreaming: boolean;\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 active tool calls for tool call streaming:\n const activeToolCalls: Record<string, boolean> = {};\n\n // keep track of outstanding tool results for stream closing:\n const outstandingToolResults = new Set<string>();\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 'finish':\n case 'text':\n case 'reasoning':\n case 'reasoning-part-finish':\n case 'source':\n case 'response-metadata':\n case 'error': {\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 // forward with less information:\n case 'tool-call-delta': {\n if (toolCallStreaming) {\n if (!activeToolCalls[chunk.toolCallId]) {\n controller.enqueue({\n type: 'tool-call-streaming-start',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n });\n\n activeToolCalls[chunk.toolCallId] = true;\n }\n\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n argsTextDelta: chunk.argsTextDelta,\n });\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 if (tool.execute != null) {\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.args': {\n output: () => JSON.stringify(toolCall.args),\n },\n },\n }),\n tracer,\n fn: async span =>\n tool.execute!(toolCall.args, {\n toolCallId: toolCall.toolCallId,\n messages,\n abortSignal,\n }).then(\n (result: any) => {\n toolResultsStreamController!.enqueue({\n ...toolCall,\n type: 'tool-result',\n result,\n } as any);\n\n outstandingToolResults.delete(toolExecutionId);\n\n attemptClose();\n\n // record telemetry\n try {\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.toolCall.result': {\n output: () => JSON.stringify(result),\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 (error: any) => {\n toolResultsStreamController!.enqueue({\n type: 'error',\n error: new ToolExecutionError({\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n toolArgs: toolCall.args,\n cause: error,\n }),\n });\n\n outstandingToolResults.delete(toolExecutionId);\n attemptClose();\n },\n ),\n });\n }\n } catch (error) {\n toolResultsStreamController!.enqueue({\n type: 'error',\n error,\n });\n }\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 LanguageModelV2CallOptions,\n LanguageModelV2Middleware,\n} from '@ai-sdk/provider';\nimport { mergeObjects } from '../../src/util/merge-objects';\n\n/**\n * Applies default settings for a language model.\n */\nexport function defaultSettingsMiddleware({\n settings,\n}: {\n settings: Partial<{\n maxOutputTokens?: LanguageModelV2CallOptions['maxOutputTokens'];\n temperature?: LanguageModelV2CallOptions['temperature'];\n stopSequences?: LanguageModelV2CallOptions['stopSequences'];\n topP?: LanguageModelV2CallOptions['topP'];\n topK?: LanguageModelV2CallOptions['topK'];\n presencePenalty?: LanguageModelV2CallOptions['presencePenalty'];\n frequencyPenalty?: LanguageModelV2CallOptions['frequencyPenalty'];\n responseFormat?: LanguageModelV2CallOptions['responseFormat'];\n seed?: LanguageModelV2CallOptions['seed'];\n tools?: LanguageModelV2CallOptions['tools'];\n toolChoice?: LanguageModelV2CallOptions['toolChoice'];\n headers?: LanguageModelV2CallOptions['headers'];\n providerOptions?: LanguageModelV2CallOptions['providerOptions'];\n }>;\n}): LanguageModelV2Middleware {\n return {\n middlewareVersion: 'v2',\n transformParams: async ({ params }) => {\n return mergeObjects(settings, params) as LanguageModelV2CallOptions;\n },\n };\n}\n","/**\n * Returns the index of the start of the searchedText in the text, or null if it\n * is not found.\n */\nexport function getPotentialStartIndex(\n text: string,\n searchedText: string,\n): number | null {\n // Return null immediately if searchedText is empty.\n if (searchedText.length === 0) {\n return null;\n }\n\n // Check if the searchedText exists as a direct substring of text.\n const directIndex = text.indexOf(searchedText);\n if (directIndex !== -1) {\n return directIndex;\n }\n\n // Otherwise, look for the largest suffix of \"text\" that matches\n // a prefix of \"searchedText\". We go from the end of text inward.\n for (let i = text.length - 1; i >= 0; i--) {\n const suffix = text.substring(i);\n if (searchedText.startsWith(suffix)) {\n return i;\n }\n }\n\n return null;\n}\n","import type {\n LanguageModelV2Content,\n LanguageModelV2Middleware,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport { getPotentialStartIndex } from '../../src/util/get-potential-start-index';\n\n/**\n * Extract an XML-tagged reasoning section from the generated text and exposes it\n * as a `reasoning` property on the result.\n *\n * @param tagName - The name of the XML tag to extract reasoning from.\n * @param separator - The separator to use between reasoning and text sections.\n * @param startWithReasoning - Whether to start with reasoning tokens.\n */\nexport function extractReasoningMiddleware({\n tagName,\n separator = '\\n',\n startWithReasoning = false,\n}: {\n tagName: string;\n separator?: string;\n startWithReasoning?: boolean;\n}): LanguageModelV2Middleware {\n const openingTag = `<${tagName}>`;\n const closingTag = `<\\/${tagName}>`;\n\n return {\n middlewareVersion: 'v2',\n wrapGenerate: async ({ doGenerate }) => {\n const { content, ...rest } = await doGenerate();\n\n const transformedContent: LanguageModelV2Content[] = [];\n for (const part of content) {\n if (part.type !== 'text') {\n transformedContent.push(part);\n continue;\n }\n\n const text = startWithReasoning ? openingTag + part.text : part.text;\n\n const regexp = new RegExp(`${openingTag}(.*?)${closingTag}`, 'gs');\n const matches = Array.from(text.matchAll(regexp));\n\n if (!matches.length) {\n transformedContent.push(part);\n continue;\n }\n\n const reasoningText = matches.map(match => match[1]).join(separator);\n\n let textWithoutReasoning = text;\n for (let i = matches.length - 1; i >= 0; i--) {\n const match = matches[i];\n\n const beforeMatch = textWithoutReasoning.slice(0, match.index);\n const afterMatch = textWithoutReasoning.slice(\n match.index! + match[0].length,\n );\n\n textWithoutReasoning =\n beforeMatch +\n (beforeMatch.length > 0 && afterMatch.length > 0 ? separator : '') +\n afterMatch;\n }\n\n transformedContent.push({\n type: 'reasoning',\n text: reasoningText,\n });\n\n transformedContent.push({\n type: 'text',\n text: textWithoutReasoning,\n });\n }\n\n return { content: transformedContent, ...rest };\n },\n\n wrapStream: async ({ doStream }) => {\n const { stream, ...rest } = await doStream();\n\n let isFirstReasoning = true;\n let isFirstText = true;\n let afterSwitch = false;\n let isReasoning = startWithReasoning;\n let buffer = '';\n\n return {\n stream: stream.pipeThrough(\n new TransformStream<\n LanguageModelV2StreamPart,\n LanguageModelV2StreamPart\n >({\n transform: (chunk, controller) => {\n if (chunk.type !== 'text') {\n controller.enqueue(chunk);\n return;\n }\n\n buffer += chunk.text;\n\n function publish(text: string) {\n if (text.length > 0) {\n const prefix =\n afterSwitch &&\n (isReasoning ? !isFirstReasoning : !isFirstText)\n ? separator\n : '';\n\n controller.enqueue(\n isReasoning\n ? {\n type: 'reasoning',\n text: prefix + text,\n }\n : {\n type: 'text',\n text: prefix + text,\n },\n );\n afterSwitch = false;\n\n if (isReasoning) {\n isFirstReasoning = false;\n } else {\n isFirstText = false;\n }\n }\n }\n\n do {\n const nextTag = isReasoning ? closingTag : openingTag;\n const startIndex = getPotentialStartIndex(buffer, nextTag);\n\n // no opening or closing tag found, publish the buffer\n if (startIndex == null) {\n publish(buffer);\n buffer = '';\n break;\n }\n\n // publish text before the tag\n publish(buffer.slice(0, startIndex));\n\n const foundFullMatch =\n startIndex + nextTag.length <= buffer.length;\n\n if (foundFullMatch) {\n buffer = buffer.slice(startIndex + nextTag.length);\n\n // reasoning part finished:\n if (isReasoning) {\n controller.enqueue({ type: 'reasoning-part-finish' });\n }\n\n isReasoning = !isReasoning;\n afterSwitch = true;\n } else {\n buffer = buffer.slice(startIndex);\n break;\n }\n } while (true);\n },\n }),\n ),\n ...rest,\n };\n },\n };\n}\n","import type {\n LanguageModelV2Middleware,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\n\n/**\n * Simulates streaming chunks with the response from a generate call.\n */\nexport function simulateStreamingMiddleware(): LanguageModelV2Middleware {\n return {\n middlewareVersion: 'v2',\n wrapStream: async ({ doGenerate }) => {\n const result = await doGenerate();\n\n const simulatedStream = new ReadableStream<LanguageModelV2StreamPart>({\n start(controller) {\n controller.enqueue({\n type: 'stream-start',\n warnings: result.warnings,\n });\n\n controller.enqueue({ type: 'response-metadata', ...result.response });\n\n for (const part of result.content) {\n controller.enqueue(part);\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason: result.finishReason,\n usage: result.usage,\n providerMetadata: result.providerMetadata,\n });\n\n controller.close();\n },\n });\n\n return {\n stream: simulatedStream,\n request: result.request,\n response: result.response,\n };\n },\n };\n}\n","import {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2Middleware,\n} from '@ai-sdk/provider';\nimport { asArray } from '../../src/util/as-array';\n\n/**\n * Wraps a LanguageModelV2 instance with middleware functionality.\n * This function allows you to apply middleware to transform parameters,\n * wrap generate operations, and wrap stream operations of a language model.\n *\n * @param options - Configuration options for wrapping the language model.\n * @param options.model - The original LanguageModelV2 instance to be wrapped.\n * @param options.middleware - The middleware to be applied to the language model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.\n * @param options.modelId - Optional custom model ID to override the original model's ID.\n * @param options.providerId - Optional custom provider ID to override the original model's provider.\n * @returns A new LanguageModelV2 instance with middleware applied.\n */\nexport const wrapLanguageModel = ({\n model,\n middleware: middlewareArg,\n modelId,\n providerId,\n}: {\n model: LanguageModelV2;\n middleware: LanguageModelV2Middleware | LanguageModelV2Middleware[];\n modelId?: string;\n providerId?: string;\n}): LanguageModelV2 => {\n return asArray(middlewareArg)\n .reverse()\n .reduce((wrappedModel, middleware) => {\n return doWrap({ model: wrappedModel, middleware, modelId, providerId });\n }, model);\n};\n\nconst doWrap = ({\n model,\n middleware: { transformParams, wrapGenerate, wrapStream },\n modelId,\n providerId,\n}: {\n model: LanguageModelV2;\n middleware: LanguageModelV2Middleware;\n modelId?: string;\n providerId?: string;\n}): LanguageModelV2 => {\n async function doTransform({\n params,\n type,\n }: {\n params: LanguageModelV2CallOptions;\n type: 'generate' | 'stream';\n }) {\n return transformParams ? await transformParams({ params, type }) : params;\n }\n\n return {\n specificationVersion: 'v2',\n\n provider: providerId ?? model.provider,\n modelId: modelId ?? model.modelId,\n\n // TODO middleware should be able to modify the supported urls\n get supportedUrls(): LanguageModelV2['supportedUrls'] {\n return model.supportedUrls;\n },\n\n async doGenerate(\n params: LanguageModelV2CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const transformedParams = await doTransform({ params, type: 'generate' });\n const doGenerate = async () => model.doGenerate(transformedParams);\n const doStream = async () => model.doStream(transformedParams);\n return wrapGenerate\n ? wrapGenerate({\n doGenerate,\n doStream,\n params: transformedParams,\n model,\n })\n : doGenerate();\n },\n\n async doStream(\n params: LanguageModelV2CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const transformedParams = await doTransform({ params, type: 'stream' });\n const doGenerate = async () => model.doGenerate(transformedParams);\n const doStream = async () => model.doStream(transformedParams);\n return wrapStream\n ? wrapStream({ doGenerate, doStream, params: transformedParams, model })\n : doStream();\n },\n };\n};\n","import { NoSuchModelError, ProviderV2 } from '@ai-sdk/provider';\nimport { EmbeddingModel, ImageModel, LanguageModel, Provider } from '../types';\n\n/**\n * Creates a custom provider with specified language models, text embedding models, and an optional fallback provider.\n *\n * @param {Object} options - The options for creating the custom provider.\n * @param {Record<string, LanguageModel>} [options.languageModels] - A record of language models, where keys are model IDs and values are LanguageModel instances.\n * @param {Record<string, EmbeddingModel<string>>} [options.textEmbeddingModels] - A record of text embedding models, where keys are model IDs and values are EmbeddingModel<string> instances.\n * @param {Record<string, ImageModel>} [options.imageModels] - A record of image models, where keys are model IDs and values are ImageModel instances.\n * @param {Provider} [options.fallbackProvider] - An optional fallback provider to use when a requested model is not found in the custom provider.\n * @returns {Provider} A Provider object with languageModel, textEmbeddingModel, and imageModel methods.\n *\n * @throws {NoSuchModelError} Throws when a requested model is not found and no fallback provider is available.\n */\nexport function customProvider<\n LANGUAGE_MODELS extends Record<string, LanguageModel>,\n EMBEDDING_MODELS extends Record<string, EmbeddingModel<string>>,\n IMAGE_MODELS extends Record<string, ImageModel>,\n>({\n languageModels,\n textEmbeddingModels,\n imageModels,\n fallbackProvider,\n}: {\n languageModels?: LANGUAGE_MODELS;\n textEmbeddingModels?: EMBEDDING_MODELS;\n imageModels?: IMAGE_MODELS;\n fallbackProvider?: ProviderV2;\n}): Provider & {\n languageModel(modelId: ExtractModelId<LANGUAGE_MODELS>): LanguageModel;\n textEmbeddingModel(\n modelId: ExtractModelId<EMBEDDING_MODELS>,\n ): EmbeddingModel<string>;\n imageModel(modelId: ExtractModelId<IMAGE_MODELS>): ImageModel;\n} {\n return {\n languageModel(modelId: ExtractModelId<LANGUAGE_MODELS>): LanguageModel {\n if (languageModels != null && modelId in languageModels) {\n return languageModels[modelId];\n }\n\n if (fallbackProvider) {\n return fallbackProvider.languageModel(modelId);\n }\n\n throw new NoSuchModelError({ modelId, modelType: 'languageModel' });\n },\n\n textEmbeddingModel(\n modelId: ExtractModelId<EMBEDDING_MODELS>,\n ): EmbeddingModel<string> {\n if (textEmbeddingModels != null && modelId in textEmbeddingModels) {\n return textEmbeddingModels[modelId];\n }\n\n if (fallbackProvider) {\n return fallbackProvider.textEmbeddingModel(modelId);\n }\n\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n },\n\n imageModel(modelId: ExtractModelId<IMAGE_MODELS>): ImageModel {\n if (imageModels != null && modelId in imageModels) {\n return imageModels[modelId];\n }\n\n if (fallbackProvider?.imageModel) {\n return fallbackProvider.imageModel(modelId);\n }\n\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n },\n };\n}\n\n/**\n * @deprecated Use `customProvider` instead.\n */\nexport const experimental_customProvider = customProvider;\n\ntype ExtractModelId<MODELS extends Record<string, unknown>> = Extract<\n keyof MODELS,\n string\n>;\n","import { AISDKError, NoSuchModelError } from '@ai-sdk/provider';\n\nconst name = 'AI_NoSuchProviderError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class NoSuchProviderError extends NoSuchModelError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly providerId: string;\n readonly availableProviders: string[];\n\n constructor({\n modelId,\n modelType,\n providerId,\n availableProviders,\n message = `No such provider: ${providerId} (available providers: ${availableProviders.join()})`,\n }: {\n modelId: string;\n modelType: 'languageModel' | 'textEmbeddingModel';\n providerId: string;\n availableProviders: string[];\n message?: string;\n }) {\n super({ errorName: name, modelId, modelType, message });\n\n this.providerId = providerId;\n this.availableProviders = availableProviders;\n }\n\n static isInstance(error: unknown): error is NoSuchProviderError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { NoSuchModelError, ProviderV2 } from '@ai-sdk/provider';\nimport { EmbeddingModel, ImageModel, LanguageModel } from '../types';\nimport { NoSuchProviderError } from './no-such-provider-error';\n\ntype ExtractLiteralUnion<T> = T extends string\n ? string extends T\n ? never\n : T\n : never;\n\nexport interface ProviderRegistryProvider<\n PROVIDERS extends Record<string, ProviderV2> = Record<string, ProviderV2>,\n SEPARATOR extends string = ':',\n> {\n languageModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string\n ? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['languageModel']>>[0]>}`\n : never,\n ): LanguageModel;\n languageModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,\n ): LanguageModel;\n\n textEmbeddingModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string\n ? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['textEmbeddingModel']>>[0]>}`\n : never,\n ): EmbeddingModel<string>;\n textEmbeddingModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,\n ): EmbeddingModel<string>;\n\n imageModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string\n ? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['imageModel']>>[0]>}`\n : never,\n ): ImageModel;\n imageModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,\n ): ImageModel;\n}\n\n/**\n * Creates a registry for the given providers.\n */\nexport function createProviderRegistry<\n PROVIDERS extends Record<string, ProviderV2>,\n SEPARATOR extends string = ':',\n>(\n providers: PROVIDERS,\n {\n separator = ':' as SEPARATOR,\n }: {\n separator?: SEPARATOR;\n } = {},\n): ProviderRegistryProvider<PROVIDERS, SEPARATOR> {\n const registry = new DefaultProviderRegistry<PROVIDERS, SEPARATOR>({\n separator,\n });\n\n for (const [id, provider] of Object.entries(providers)) {\n registry.registerProvider({ id, provider } as {\n id: keyof PROVIDERS;\n provider: PROVIDERS[keyof PROVIDERS];\n });\n }\n\n return registry;\n}\n\n/**\n * @deprecated Use `createProviderRegistry` instead.\n */\nexport const experimental_createProviderRegistry = createProviderRegistry;\n\nclass DefaultProviderRegistry<\n PROVIDERS extends Record<string, ProviderV2>,\n SEPARATOR extends string,\n> implements ProviderRegistryProvider<PROVIDERS, SEPARATOR>\n{\n private providers: PROVIDERS = {} as PROVIDERS;\n private separator: SEPARATOR;\n\n constructor({ separator }: { separator: SEPARATOR }) {\n this.separator = separator;\n }\n\n registerProvider<K extends keyof PROVIDERS>({\n id,\n provider,\n }: {\n id: K;\n provider: PROVIDERS[K];\n }): void {\n this.providers[id] = provider;\n }\n\n private getProvider(id: string): ProviderV2 {\n const provider = this.providers[id as keyof PROVIDERS];\n\n if (provider == null) {\n throw new NoSuchProviderError({\n modelId: id,\n modelType: 'languageModel',\n providerId: id,\n availableProviders: Object.keys(this.providers),\n });\n }\n\n return provider;\n }\n\n private splitId(\n id: string,\n modelType: 'languageModel' | 'textEmbeddingModel' | 'imageModel',\n ): [string, string] {\n const index = id.indexOf(this.separator);\n\n if (index === -1) {\n throw new NoSuchModelError({\n modelId: id,\n modelType,\n message:\n `Invalid ${modelType} id for registry: ${id} ` +\n `(must be in the format \"providerId${this.separator}modelId\")`,\n });\n }\n\n return [id.slice(0, index), id.slice(index + this.separator.length)];\n }\n\n languageModel<KEY extends keyof PROVIDERS>(\n id: `${KEY & string}${SEPARATOR}${string}`,\n ): LanguageModel {\n const [providerId, modelId] = this.splitId(id, 'languageModel');\n const model = this.getProvider(providerId).languageModel?.(modelId);\n\n if (model == null) {\n throw new NoSuchModelError({ modelId: id, modelType: 'languageModel' });\n }\n\n return model;\n }\n\n textEmbeddingModel<KEY extends keyof PROVIDERS>(\n id: `${KEY & string}${SEPARATOR}${string}`,\n ): EmbeddingModel<string> {\n const [providerId, modelId] = this.splitId(id, 'textEmbeddingModel');\n const provider = this.getProvider(providerId);\n\n const model = provider.textEmbeddingModel?.(modelId);\n\n if (model == null) {\n throw new NoSuchModelError({\n modelId: id,\n modelType: 'textEmbeddingModel',\n });\n }\n\n return model;\n }\n\n imageModel<KEY extends keyof PROVIDERS>(\n id: `${KEY & string}${SEPARATOR}${string}`,\n ): ImageModel {\n const [providerId, modelId] = this.splitId(id, 'imageModel');\n const provider = this.getProvider(providerId);\n\n const model = provider.imageModel?.(modelId);\n\n if (model == null) {\n throw new NoSuchModelError({ modelId: id, modelType: 'imageModel' });\n }\n\n return model;\n }\n}\n","import { JSONSchema7 } from '@ai-sdk/provider';\nimport { jsonSchema } from '@ai-sdk/provider-utils';\nimport { z, ZodType } from 'zod';\nimport { MCPClientError } from '../../../src/error/mcp-client-error';\nimport { tool, Tool, ToolExecutionOptions } from '../tool';\nimport {\n JSONRPCError,\n JSONRPCNotification,\n JSONRPCRequest,\n JSONRPCResponse,\n} from './json-rpc-message';\nimport {\n createMcpTransport,\n isCustomMcpTransport,\n MCPTransport,\n MCPTransportConfig,\n} from './mcp-transport';\nimport {\n CallToolResult,\n CallToolResultSchema,\n Configuration as ClientConfiguration,\n InitializeResultSchema,\n LATEST_PROTOCOL_VERSION,\n ListToolsResult,\n ListToolsResultSchema,\n McpToolSet,\n Notification,\n PaginatedRequest,\n Request,\n RequestOptions,\n ServerCapabilities,\n SUPPORTED_PROTOCOL_VERSIONS,\n ToolSchemas,\n} from './types';\n\nconst CLIENT_VERSION = '1.0.0';\n\ninterface MCPClientConfig {\n /** Transport configuration for connecting to the MCP server */\n transport: MCPTransportConfig | MCPTransport;\n /** Optional callback for uncaught errors */\n onUncaughtError?: (error: unknown) => void;\n /** Optional client name, defaults to 'ai-sdk-mcp-client' */\n name?: string;\n}\n\nexport async function createMCPClient(\n config: MCPClientConfig,\n): Promise<MCPClient> {\n const client = new MCPClient(config);\n await client.init();\n return client;\n}\n\n/**\n * A lightweight MCP Client implementation\n *\n * The primary purpose of this client is tool conversion between MCP<>AI SDK\n * but can later be extended to support other MCP features\n *\n * Tool parameters are automatically inferred from the server's JSON schema\n * if not explicitly provided in the tools configuration\n *\n * This client is meant to be used to communicate with a single server. To communicate and fetch tools across multiple servers, it's recommended to create a new client instance per server.\n *\n * Not supported:\n * - Client options (e.g. sampling, roots) as they are not needed for tool conversion\n * - Accepting notifications\n * - Session management (when passing a sessionId to an instance of the Streamable HTTP transport)\n * - Resumable SSE streams\n */\nclass MCPClient {\n private transport: MCPTransport;\n private onUncaughtError?: (error: unknown) => void;\n private clientInfo: ClientConfiguration;\n private requestMessageId = 0;\n private responseHandlers: Map<\n number,\n (response: JSONRPCResponse | Error) => void\n > = new Map();\n private serverCapabilities: ServerCapabilities = {};\n private isClosed = true;\n\n constructor({\n transport: transportConfig,\n name = 'ai-sdk-mcp-client',\n onUncaughtError,\n }: MCPClientConfig) {\n this.onUncaughtError = onUncaughtError;\n\n if (isCustomMcpTransport(transportConfig)) {\n this.transport = transportConfig;\n } else {\n this.transport = createMcpTransport(transportConfig);\n }\n\n this.transport.onclose = () => this.onClose();\n this.transport.onerror = (error: Error) => this.onError(error);\n this.transport.onmessage = message => {\n if ('method' in message) {\n // This lightweight client implementation does not support\n // receiving notifications or requests from server.\n // If we get an unsupported message, we can safely ignore it and pass to the onError handler:\n this.onError(\n new MCPClientError({\n message: 'Unsupported message type',\n }),\n );\n return;\n }\n\n this.onResponse(message);\n };\n\n this.clientInfo = {\n name,\n version: CLIENT_VERSION,\n };\n }\n\n async init(): Promise<this> {\n try {\n await this.transport.start();\n this.isClosed = false;\n\n const result = await this.request({\n request: {\n method: 'initialize',\n params: {\n protocolVersion: LATEST_PROTOCOL_VERSION,\n capabilities: {},\n clientInfo: this.clientInfo,\n },\n },\n resultSchema: InitializeResultSchema,\n });\n\n if (result === undefined) {\n throw new MCPClientError({\n message: 'Server sent invalid initialize result',\n });\n }\n\n if (!SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion)) {\n throw new MCPClientError({\n message: `Server's protocol version is not supported: ${result.protocolVersion}`,\n });\n }\n\n this.serverCapabilities = result.capabilities;\n\n // Complete initialization handshake:\n await this.notification({\n method: 'notifications/initialized',\n });\n\n return this;\n } catch (error) {\n await this.close();\n throw error;\n }\n }\n\n async close(): Promise<void> {\n if (this.isClosed) return;\n await this.transport?.close();\n this.onClose();\n }\n\n private assertCapability(method: string): void {\n switch (method) {\n case 'initialize':\n break;\n case 'tools/list':\n case 'tools/call':\n if (!this.serverCapabilities.tools) {\n throw new MCPClientError({\n message: `Server does not support tools`,\n });\n }\n break;\n default:\n throw new MCPClientError({\n message: `Unsupported method: ${method}`,\n });\n }\n }\n\n private async request<T extends ZodType<object>>({\n request,\n resultSchema,\n options,\n }: {\n request: Request;\n resultSchema: T;\n options?: RequestOptions;\n }): Promise<z.infer<T>> {\n return new Promise((resolve, reject) => {\n if (this.isClosed) {\n return reject(\n new MCPClientError({\n message: 'Attempted to send a request from a closed client',\n }),\n );\n }\n\n this.assertCapability(request.method);\n\n const signal = options?.signal;\n signal?.throwIfAborted();\n\n const messageId = this.requestMessageId++;\n const jsonrpcRequest: JSONRPCRequest = {\n ...request,\n jsonrpc: '2.0',\n id: messageId,\n };\n\n const cleanup = () => {\n this.responseHandlers.delete(messageId);\n };\n\n this.responseHandlers.set(messageId, response => {\n if (signal?.aborted) {\n return reject(\n new MCPClientError({\n message: 'Request was aborted',\n cause: signal.reason,\n }),\n );\n }\n\n if (response instanceof Error) {\n return reject(response);\n }\n\n try {\n const result = resultSchema.parse(response.result);\n resolve(result);\n } catch (error) {\n const parseError = new MCPClientError({\n message: 'Failed to parse server response',\n cause: error,\n });\n reject(parseError);\n }\n });\n\n this.transport.send(jsonrpcRequest).catch(error => {\n cleanup();\n reject(error);\n });\n });\n }\n\n private async listTools({\n params,\n options,\n }: {\n params?: PaginatedRequest['params'];\n options?: RequestOptions;\n } = {}): Promise<ListToolsResult> {\n try {\n return this.request({\n request: { method: 'tools/list', params },\n resultSchema: ListToolsResultSchema,\n options,\n });\n } catch (error) {\n throw error;\n }\n }\n\n private async callTool({\n name,\n args,\n options,\n }: {\n name: string;\n args: Record<string, unknown>;\n options?: ToolExecutionOptions;\n }): Promise<CallToolResult> {\n try {\n return this.request({\n request: { method: 'tools/call', params: { name, arguments: args } },\n resultSchema: CallToolResultSchema,\n options: {\n signal: options?.abortSignal,\n },\n });\n } catch (error) {\n throw error;\n }\n }\n\n private async notification(notification: Notification): Promise<void> {\n const jsonrpcNotification: JSONRPCNotification = {\n ...notification,\n jsonrpc: '2.0',\n };\n await this.transport.send(jsonrpcNotification);\n }\n\n /**\n * Returns a set of AI SDK tools from the MCP server\n * @returns A record of tool names to their implementations\n */\n async tools<TOOL_SCHEMAS extends ToolSchemas = 'automatic'>({\n schemas = 'automatic',\n }: {\n schemas?: TOOL_SCHEMAS;\n } = {}): Promise<McpToolSet<TOOL_SCHEMAS>> {\n const tools: Record<string, Tool> = {};\n\n try {\n const listToolsResult = await this.listTools();\n\n for (const { name, description, inputSchema } of listToolsResult.tools) {\n if (schemas !== 'automatic' && !(name in schemas)) {\n continue;\n }\n\n const parameters =\n schemas === 'automatic'\n ? jsonSchema({\n ...inputSchema,\n properties: inputSchema.properties ?? {},\n additionalProperties: false,\n } as JSONSchema7)\n : schemas[name].parameters;\n\n const self = this;\n const toolWithExecute = tool({\n description,\n parameters,\n execute: async (\n args: any,\n options: ToolExecutionOptions,\n ): Promise<CallToolResult> => {\n options?.abortSignal?.throwIfAborted();\n\n return self.callTool({\n name,\n args,\n options,\n });\n },\n });\n\n tools[name] = toolWithExecute;\n }\n\n return tools as McpToolSet<TOOL_SCHEMAS>;\n } catch (error) {\n throw error;\n }\n }\n\n private onClose(): void {\n if (this.isClosed) return;\n\n this.isClosed = true;\n const error = new MCPClientError({\n message: 'Connection closed',\n });\n\n for (const handler of this.responseHandlers.values()) {\n handler(error);\n }\n\n this.responseHandlers.clear();\n }\n\n private onError(error: unknown): void {\n if (this.onUncaughtError) {\n this.onUncaughtError(error);\n }\n }\n\n private onResponse(response: JSONRPCResponse | JSONRPCError): void {\n const messageId = Number(response.id);\n const handler = this.responseHandlers.get(messageId);\n\n if (handler === undefined) {\n throw new MCPClientError({\n message: `Protocol error: Received a response for an unknown message ID: ${JSON.stringify(\n response,\n )}`,\n });\n }\n\n this.responseHandlers.delete(messageId);\n\n handler(\n 'result' in response\n ? response\n : new MCPClientError({\n message: response.error.message,\n cause: response.error,\n }),\n );\n }\n}\n","import { JSONObject, JSONValue } from '@ai-sdk/provider';\nimport { Schema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { ModelMessage } from '../prompt/message';\nimport { ToolResultContent } from '../prompt/tool-result-content';\n\nexport type ToolParameters<T = JSONObject> = z.Schema<T> | Schema<T>;\n\nexport interface ToolExecutionOptions {\n /**\n * The ID of the tool call. You can use it e.g. when sending tool-call related information with stream data.\n */\n toolCallId: string;\n\n /**\n * Messages that were sent to the language model to initiate the response that contained the tool call.\n * The messages **do not** include the system prompt nor the assistant response that contained the tool call.\n */\n messages: ModelMessage[];\n\n /**\n * An optional abort signal that indicates that the overall operation should be aborted.\n */\n abortSignal?: AbortSignal;\n}\n\ntype NeverOptional<N, T> = 0 extends 1 & N\n ? Partial<T>\n : [N] extends [never]\n ? Partial<Record<keyof T, undefined>>\n : T;\n\n/**\nA tool contains the description and the schema of the input that the tool expects.\nThis enables the language model to generate the input.\n\nThe tool can also contain an optional execute function for the actual execution function of the tool.\n */\nexport type Tool<\n PARAMETERS extends JSONValue | unknown | never = any,\n RESULT = any,\n> = {\n /**\nAn optional description of what the tool does.\nWill be used by the language model to decide whether to use the tool.\nNot used for provider-defined tools.\n */\n description?: string;\n} & NeverOptional<\n PARAMETERS,\n {\n /**\nThe schema of the input that the tool expects. The language model will use this to generate the input.\nIt is also used to validate the output of the language model.\nUse descriptions to make the input understandable for the language model.\n */\n parameters: ToolParameters<PARAMETERS>;\n }\n> &\n NeverOptional<\n RESULT,\n {\n /**\nAn async function that is called with the arguments from the tool call and produces a result.\nIf not provided, the tool will not be executed automatically.\n\n@args is the input of the tool call.\n@options.abortSignal is a signal that can be used to abort the tool call.\n */\n execute: (\n args: [PARAMETERS] extends [never] ? undefined : PARAMETERS,\n options: ToolExecutionOptions,\n ) => PromiseLike<RESULT>;\n\n /**\n Optional conversion function that maps the tool result to multi-part tool content for LLMs.\n */\n experimental_toToolResultContent?: (result: RESULT) => ToolResultContent;\n }\n > &\n (\n | {\n /**\nFunction tool.\n */\n type?: undefined | 'function';\n }\n | {\n /**\nProvider-defined tool.\n */\n type: 'provider-defined';\n\n /**\nThe ID of the tool. Should follow the format `<provider-name>.<tool-name>`.\n */\n id: `${string}.${string}`;\n\n /**\nThe arguments for configuring the tool. Must match the expected arguments defined by the provider for this tool.\n */\n args: Record<string, unknown>;\n }\n );\n\n/**\nHelper function for inferring the execute args of a tool.\n */\nexport function tool(tool: Tool<never, never>): Tool<never, never>;\nexport function tool<PARAMETERS>(\n tool: Tool<PARAMETERS, never>,\n): Tool<PARAMETERS, never>;\nexport function tool<RESULT>(tool: Tool<never, RESULT>): Tool<never, RESULT>;\nexport function tool<PARAMETERS, RESULT>(\n tool: Tool<PARAMETERS, RESULT>,\n): Tool<PARAMETERS, RESULT>;\nexport function tool(tool: any): any {\n return tool;\n}\n\nexport type MappedTool<T extends Tool | JSONObject, RESULT extends any> =\n T extends Tool<infer P>\n ? Tool<P, RESULT>\n : T extends JSONObject\n ? Tool<T, RESULT>\n : never;\n","import { createEventSourceParserStream } from '@ai-sdk/provider-utils';\nimport { MCPClientError } from '../../../src/error/mcp-client-error';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from './json-rpc-message';\nimport { MCPTransport } from './mcp-transport';\n\nexport class SseMCPTransport implements MCPTransport {\n private endpoint?: URL;\n private abortController?: AbortController;\n private url: URL;\n private connected = false;\n private sseConnection?: {\n close: () => void;\n };\n private headers?: Record<string, string>;\n\n onclose?: () => void;\n onerror?: (error: unknown) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor({\n url,\n headers,\n }: {\n url: string;\n headers?: Record<string, string>;\n }) {\n this.url = new URL(url);\n this.headers = headers;\n }\n\n async start(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (this.connected) {\n return resolve();\n }\n\n this.abortController = new AbortController();\n\n const establishConnection = async () => {\n try {\n const headers = new Headers(this.headers);\n headers.set('Accept', 'text/event-stream');\n const response = await fetch(this.url.href, {\n headers,\n signal: this.abortController?.signal,\n });\n\n if (!response.ok || !response.body) {\n const error = new MCPClientError({\n message: `MCP SSE Transport Error: ${response.status} ${response.statusText}`,\n });\n this.onerror?.(error);\n return reject(error);\n }\n\n const stream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(createEventSourceParserStream());\n\n const reader = stream.getReader();\n\n const processEvents = async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n if (this.connected) {\n this.connected = false;\n throw new MCPClientError({\n message:\n 'MCP SSE Transport Error: Connection closed unexpectedly',\n });\n }\n return;\n }\n\n const { event, data } = value;\n\n if (event === 'endpoint') {\n this.endpoint = new URL(data, this.url);\n\n if (this.endpoint.origin !== this.url.origin) {\n throw new MCPClientError({\n message: `MCP SSE Transport Error: Endpoint origin does not match connection origin: ${this.endpoint.origin}`,\n });\n }\n\n this.connected = true;\n resolve();\n } else if (event === 'message') {\n try {\n const message = JSONRPCMessageSchema.parse(\n JSON.parse(data),\n );\n this.onmessage?.(message);\n } catch (error) {\n const e = new MCPClientError({\n message:\n 'MCP SSE Transport Error: Failed to parse message',\n cause: error,\n });\n this.onerror?.(e);\n // We do not throw here so we continue processing events after reporting the error\n }\n }\n }\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n this.onerror?.(error);\n reject(error);\n }\n };\n\n this.sseConnection = {\n close: () => reader.cancel(),\n };\n\n processEvents();\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n this.onerror?.(error);\n reject(error);\n }\n };\n\n establishConnection();\n });\n }\n\n async close(): Promise<void> {\n this.connected = false;\n this.sseConnection?.close();\n this.abortController?.abort();\n this.onclose?.();\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this.endpoint || !this.connected) {\n throw new MCPClientError({\n message: 'MCP SSE Transport Error: Not connected',\n });\n }\n\n try {\n const headers = new Headers(this.headers);\n headers.set('Content-Type', 'application/json');\n const init = {\n method: 'POST',\n headers,\n body: JSON.stringify(message),\n signal: this.abortController?.signal,\n };\n\n const response = await fetch(this.endpoint, init);\n\n if (!response.ok) {\n const text = await response.text().catch(() => null);\n const error = new MCPClientError({\n message: `MCP SSE Transport Error: POSTing to endpoint (HTTP ${response.status}): ${text}`,\n });\n this.onerror?.(error);\n return;\n }\n } catch (error) {\n this.onerror?.(error);\n return;\n }\n }\n}\n\nexport function deserializeMessage(line: string): JSONRPCMessage {\n return JSONRPCMessageSchema.parse(JSON.parse(line));\n}\n","import { z } from 'zod';\nimport { BaseParamsSchema, RequestSchema, ResultSchema } from './types';\n\nconst JSONRPC_VERSION = '2.0';\n\nconst JSONRPCRequestSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n })\n .merge(RequestSchema)\n .strict();\n\nexport type JSONRPCRequest = z.infer<typeof JSONRPCRequestSchema>;\n\nconst JSONRPCResponseSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n result: ResultSchema,\n })\n .strict();\n\nexport type JSONRPCResponse = z.infer<typeof JSONRPCResponseSchema>;\n\nconst JSONRPCErrorSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n error: z.object({\n code: z.number().int(),\n message: z.string(),\n data: z.optional(z.unknown()),\n }),\n })\n .strict();\n\nexport type JSONRPCError = z.infer<typeof JSONRPCErrorSchema>;\n\nconst JSONRPCNotificationSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n })\n .merge(\n z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n }),\n )\n .strict();\n\nexport type JSONRPCNotification = z.infer<typeof JSONRPCNotificationSchema>;\n\nexport const JSONRPCMessageSchema = z.union([\n JSONRPCRequestSchema,\n JSONRPCNotificationSchema,\n JSONRPCResponseSchema,\n JSONRPCErrorSchema,\n]);\n\nexport type JSONRPCMessage = z.infer<typeof JSONRPCMessageSchema>;\n","import { z } from 'zod';\nimport { MappedTool, Tool, ToolParameters } from '../tool';\nimport { JSONObject } from '@ai-sdk/provider';\n\nexport const LATEST_PROTOCOL_VERSION = '2024-11-05';\nexport const SUPPORTED_PROTOCOL_VERSIONS = [\n LATEST_PROTOCOL_VERSION,\n '2024-10-07',\n];\n\nexport type ToolSchemas =\n | Record<string, { parameters: ToolParameters<JSONObject | unknown> }>\n | 'automatic'\n | undefined;\n\nexport type McpToolSet<TOOL_SCHEMAS extends ToolSchemas = 'automatic'> =\n TOOL_SCHEMAS extends Record<string, { parameters: ToolParameters<any> }>\n ? {\n [K in keyof TOOL_SCHEMAS]: MappedTool<TOOL_SCHEMAS[K], CallToolResult> &\n Required<\n Pick<MappedTool<TOOL_SCHEMAS[K], CallToolResult>, 'execute'>\n >;\n }\n : McpToolSet<Record<string, { parameters: ToolParameters<unknown> }>>;\n\nconst ClientOrServerImplementationSchema = z\n .object({\n name: z.string(),\n version: z.string(),\n })\n .passthrough();\nexport type Configuration = z.infer<typeof ClientOrServerImplementationSchema>;\n\nexport const BaseParamsSchema = z\n .object({\n _meta: z.optional(z.object({}).passthrough()),\n })\n .passthrough();\ntype BaseParams = z.infer<typeof BaseParamsSchema>;\nexport const ResultSchema = BaseParamsSchema;\n\nexport const RequestSchema = z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n});\nexport type Request = z.infer<typeof RequestSchema>;\nexport type RequestOptions = {\n signal?: AbortSignal;\n timeout?: number;\n maxTotalTimeout?: number;\n};\n\nexport type Notification = z.infer<typeof RequestSchema>;\n\nconst ServerCapabilitiesSchema = z\n .object({\n experimental: z.optional(z.object({}).passthrough()),\n logging: z.optional(z.object({}).passthrough()),\n prompts: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n resources: z.optional(\n z\n .object({\n subscribe: z.optional(z.boolean()),\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n tools: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n })\n .passthrough();\nexport type ServerCapabilities = z.infer<typeof ServerCapabilitiesSchema>;\n\nexport const InitializeResultSchema = ResultSchema.extend({\n protocolVersion: z.string(),\n capabilities: ServerCapabilitiesSchema,\n serverInfo: ClientOrServerImplementationSchema,\n instructions: z.optional(z.string()),\n});\nexport type InitializeResult = z.infer<typeof InitializeResultSchema>;\n\nexport type PaginatedRequest = Request & {\n params?: BaseParams & {\n cursor?: string;\n };\n};\n\nconst PaginatedResultSchema = ResultSchema.extend({\n nextCursor: z.optional(z.string()),\n});\n\nconst ToolSchema = z\n .object({\n name: z.string(),\n description: z.optional(z.string()),\n inputSchema: z\n .object({\n type: z.literal('object'),\n properties: z.optional(z.object({}).passthrough()),\n })\n .passthrough(),\n })\n .passthrough();\nexport type MCPTool = z.infer<typeof ToolSchema>;\nexport const ListToolsResultSchema = PaginatedResultSchema.extend({\n tools: z.array(ToolSchema),\n});\nexport type ListToolsResult = z.infer<typeof ListToolsResultSchema>;\n\nconst TextContentSchema = z\n .object({\n type: z.literal('text'),\n text: z.string(),\n })\n .passthrough();\nconst ImageContentSchema = z\n .object({\n type: z.literal('image'),\n data: z.string().base64(),\n mimeType: z.string(),\n })\n .passthrough();\nconst ResourceContentsSchema = z\n .object({\n /**\n * The URI of this resource.\n */\n uri: z.string(),\n /**\n * The MIME type of this resource, if known.\n */\n mimeType: z.optional(z.string()),\n })\n .passthrough();\nconst TextResourceContentsSchema = ResourceContentsSchema.extend({\n text: z.string(),\n});\nconst BlobResourceContentsSchema = ResourceContentsSchema.extend({\n blob: z.string().base64(),\n});\nconst EmbeddedResourceSchema = z\n .object({\n type: z.literal('resource'),\n resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n })\n .passthrough();\n\nexport const CallToolResultSchema = ResultSchema.extend({\n content: z.array(\n z.union([TextContentSchema, ImageContentSchema, EmbeddedResourceSchema]),\n ),\n isError: z.boolean().default(false).optional(),\n}).or(\n ResultSchema.extend({\n toolResult: z.unknown(),\n }),\n);\nexport type CallToolResult = z.infer<typeof CallToolResultSchema>;\n","import { MCPClientError } from '../../../src/error/mcp-client-error';\nimport { JSONRPCMessage } from './json-rpc-message';\nimport { SseMCPTransport } from './mcp-sse-transport';\n\n/**\n * Transport interface for MCP (Model Context Protocol) communication.\n * Maps to the `Transport` interface in the MCP spec.\n */\nexport interface MCPTransport {\n /**\n * Initialize and start the transport\n */\n start(): Promise<void>;\n\n /**\n * Send a JSON-RPC message through the transport\n * @param message The JSON-RPC message to send\n */\n send(message: JSONRPCMessage): Promise<void>;\n\n /**\n * Clean up and close the transport\n */\n close(): Promise<void>;\n\n /**\n * Event handler for transport closure\n */\n onclose?: () => void;\n\n /**\n * Event handler for transport errors\n */\n onerror?: (error: Error) => void;\n\n /**\n * Event handler for received messages\n */\n onmessage?: (message: JSONRPCMessage) => void;\n}\n\nexport type MCPTransportConfig = {\n type: 'sse';\n\n /**\n * The URL of the MCP server.\n */\n url: string;\n\n /**\n * Additional HTTP headers to be sent with requests.\n */\n headers?: Record<string, string>;\n};\n\nexport function createMcpTransport(config: MCPTransportConfig): MCPTransport {\n if (config.type !== 'sse') {\n throw new MCPClientError({\n message:\n 'Unsupported or invalid transport configuration. If you are using a custom transport, make sure it implements the MCPTransport interface.',\n });\n }\n\n return new SseMCPTransport(config);\n}\n\nexport function isCustomMcpTransport(\n transport: MCPTransportConfig | MCPTransport,\n): transport is MCPTransport {\n return (\n 'start' in transport &&\n typeof transport.start === 'function' &&\n 'send' in transport &&\n typeof transport.send === 'function' &&\n 'close' in transport &&\n typeof transport.close === 'function'\n );\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { TranscriptionModelResponseMetadata } from '../../core/types/transcription-model-response-metadata';\n\n/**\nError that is thrown when no transcript was generated.\n */\nexport class NoTranscriptGeneratedError extends AISDKError {\n readonly responses: Array<TranscriptionModelResponseMetadata>;\n\n constructor(options: {\n responses: Array<TranscriptionModelResponseMetadata>;\n }) {\n super({\n name: 'AI_NoTranscriptGeneratedError',\n message: 'No transcript generated.',\n });\n\n this.responses = options.responses;\n }\n}\n","import { JSONValue, TranscriptionModelV1 } from '@ai-sdk/provider';\nimport { NoTranscriptGeneratedError } from '../../src/error/no-transcript-generated-error';\nimport {\n audioMediaTypeSignatures,\n detectMediaType,\n} from '../../src/util/detect-media-type';\nimport { download } from '../../src/util/download';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport { DataContent } from '../prompt';\nimport { convertDataContentToUint8Array } from '../prompt/data-content';\nimport { ProviderOptions } from '../types/provider-metadata';\nimport { TranscriptionWarning } from '../types/transcription-model';\nimport { TranscriptionModelResponseMetadata } from '../types/transcription-model-response-metadata';\nimport { TranscriptionResult } from './transcribe-result';\n\n/**\nGenerates transcripts using a transcription model.\n\n@param model - The transcription model to use.\n@param audio - The audio data to transcribe as DataContent (string | Uint8Array | ArrayBuffer | Buffer) or a URL.\n@param providerOptions - Additional provider-specific options that are passed through to the provider\nas body parameters.\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@returns A result object that contains the generated transcript.\n */\nexport async function transcribe({\n model,\n audio,\n providerOptions = {},\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n}: {\n /**\nThe transcription model to use.\n */\n model: TranscriptionModelV1;\n\n /**\nThe audio data to transcribe.\n */\n audio: DataContent | URL;\n\n /**\nAdditional provider-specific options that are passed through to the provider\nas body parameters.\n\nThe outer record is keyed by the provider name, and the inner\nrecord is keyed by the provider-specific metadata key.\n```ts\n{\n \"openai\": {\n \"temperature\": 0\n }\n}\n```\n */\n providerOptions?: ProviderOptions;\n\n /**\nMaximum number of retries per transcript model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n}): Promise<TranscriptionResult> {\n const { retry } = prepareRetries({ maxRetries: maxRetriesArg });\n const audioData =\n audio instanceof URL\n ? (await download({ url: audio })).data\n : convertDataContentToUint8Array(audio);\n\n const result = await retry(() =>\n model.doGenerate({\n audio: audioData,\n abortSignal,\n headers,\n providerOptions,\n mediaType:\n detectMediaType({\n data: audioData,\n signatures: audioMediaTypeSignatures,\n }) ?? 'audio/wav',\n }),\n );\n\n if (!result.text) {\n throw new NoTranscriptGeneratedError({ responses: [result.response] });\n }\n\n return new DefaultTranscriptionResult({\n text: result.text,\n segments: result.segments,\n language: result.language,\n durationInSeconds: result.durationInSeconds,\n warnings: result.warnings,\n responses: [result.response],\n providerMetadata: result.providerMetadata,\n });\n}\n\nclass DefaultTranscriptionResult implements TranscriptionResult {\n readonly text: string;\n readonly segments: Array<{\n text: string;\n startSecond: number;\n endSecond: number;\n }>;\n readonly language: string | undefined;\n readonly durationInSeconds: number | undefined;\n readonly warnings: Array<TranscriptionWarning>;\n readonly responses: Array<TranscriptionModelResponseMetadata>;\n readonly providerMetadata: Record<string, Record<string, JSONValue>>;\n\n constructor(options: {\n text: string;\n segments: Array<{\n text: string;\n startSecond: number;\n endSecond: number;\n }>;\n language: string | undefined;\n durationInSeconds: number | undefined;\n warnings: Array<TranscriptionWarning>;\n responses: Array<TranscriptionModelResponseMetadata>;\n providerMetadata: Record<string, Record<string, JSONValue>> | undefined;\n }) {\n this.text = options.text;\n this.segments = options.segments;\n this.language = options.language;\n this.durationInSeconds = options.durationInSeconds;\n this.warnings = options.warnings;\n this.responses = options.responses;\n this.providerMetadata = options.providerMetadata ?? {};\n }\n}\n"],"mappings":"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","names":["import_provider_utils","import_provider","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","text","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider_utils","import_provider_utils","_a","_a","part","fetch","_a","generateId","import_provider_utils","getOriginalFetch","fetch","_a","import_provider_utils","_a","generateId","generateIdFunc","_a","fetch","_a","name","_a","_a","processBlock","tool","import_provider_utils","fetch","generateId","generateIdFunc","isContinuation","import_provider_utils","_a","delay","delayFunction","import_provider","import_provider_utils","_a","name","import_api","name","attributes","_a","embedding","usage","embeddings","_a","usage","import_provider_utils","import_provider_utils","_a","import_provider","import_provider_utils","content","import_provider_utils","_a","import_provider","import_provider_utils","import_zod","_a","_a","import_provider","import_provider_utils","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_provider","import_provider_utils","_a","generateId","_a","span","result","text","object","import_provider_utils","_a","_a","originalGenerateId","generateId","now","doStreamSpan","object","_a","error","import_provider","text","_a","import_provider_utils","import_provider_utils","object","name","tool","import_provider_utils","tool","_a","tool","originalGenerateId","generateId","_a","callSettings","tool","span","_b","_c","_d","result","import_provider_utils","text","import_provider_utils","import_provider","delay","originalDelay","import_provider_utils","import_provider_utils","tool","originalGenerateId","now","generateId","text","_a","stream","tool","doStreamSpan","activeReasoningPart","_b","_c","text","text","import_provider","import_provider","name","marker","symbol","_a","import_provider","_a","import_provider_utils","tool","import_provider_utils","import_zod","import_zod","_a","_b","_c","text","name","_a","import_provider","_a"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/error/index.ts","../src/error/invalid-argument-error.ts","../src/error/invalid-stream-part-error.ts","../src/error/invalid-tool-arguments-error.ts","../src/error/mcp-client-error.ts","../src/error/no-image-generated-error.ts","../src/error/no-object-generated-error.ts","../src/error/no-output-specified-error.ts","../src/error/no-such-tool-error.ts","../src/error/tool-call-repair-error.ts","../src/error/tool-execution-error.ts","../core/prompt/invalid-data-content-error.ts","../core/prompt/invalid-message-role-error.ts","../core/prompt/message-conversion-error.ts","../src/util/download-error.ts","../src/util/retry-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/call-completion-api.ts","../src/ui-message-stream/ui-message-stream-parts.ts","../src/util/consume-stream.ts","../src/ui/process-text-stream.ts","../src/ui/chat-store.ts","../src/ui/process-ui-message-stream.ts","../src/util/merge-objects.ts","../src/util/parse-partial-json.ts","../src/util/fix-json.ts","../src/ui/get-tool-invocations.ts","../src/ui/should-resubmit-messages.ts","../src/ui/convert-file-list-to-file-ui-parts.ts","../src/ui/convert-to-model-messages.ts","../src/ui/default-chat-store-options.ts","../src/ui/default-chat-transport.ts","../src/ui/transform-text-to-ui-message-stream.ts","../src/ui/text-stream-chat-transport.ts","../src/ui-message-stream/handle-ui-message-stream-finish.ts","../src/ui-message-stream/create-ui-message-stream.ts","../src/ui-message-stream/ui-message-stream-headers.ts","../src/ui-message-stream/json-to-sse-transform-stream.ts","../src/ui-message-stream/create-ui-message-stream-response.ts","../src/ui-message-stream/pipe-ui-message-stream-to-response.ts","../src/util/cosine-similarity.ts","../src/util/data-url.ts","../src/util/is-deep-equal-data.ts","../src/util/serial-job-executor.ts","../src/util/simulate-readable-stream.ts","../src/util/retry-with-exponential-backoff.ts","../src/util/prepare-retries.ts","../core/telemetry/assemble-operation-name.ts","../core/telemetry/get-base-telemetry-attributes.ts","../core/telemetry/get-tracer.ts","../core/telemetry/noop-tracer.ts","../core/telemetry/record-span.ts","../core/telemetry/select-telemetry-attributes.ts","../core/embed/embed.ts","../src/util/split-array.ts","../core/embed/embed-many.ts","../src/util/detect-media-type.ts","../core/generate-text/generated-file.ts","../core/generate-image/generate-image.ts","../core/generate-object/generate-object.ts","../core/generate-text/extract-content-text.ts","../core/prompt/convert-to-language-model-prompt.ts","../src/util/download.ts","../core/prompt/data-content.ts","../core/prompt/split-data-url.ts","../core/prompt/prepare-call-settings.ts","../core/prompt/standardize-prompt.ts","../core/prompt/message.ts","../core/types/provider-metadata.ts","../core/types/json-value.ts","../core/prompt/content-part.ts","../core/prompt/tool-result-content.ts","../core/telemetry/stringify-for-telemetry.ts","../core/generate-object/output-strategy.ts","../src/util/async-iterable-stream.ts","../core/generate-object/validate-object-generation-input.ts","../core/prompt/resolve-language-model.ts","../core/generate-object/stream-object.ts","../src/util/create-resolvable-promise.ts","../src/util/create-stitchable-stream.ts","../src/util/delayed-promise.ts","../src/util/now.ts","../src/error/no-speech-generated-error.ts","../core/generate-speech/generated-audio-file.ts","../core/generate-speech/generate-speech.ts","../core/generate-text/generate-text.ts","../src/util/as-array.ts","../core/prompt/prepare-tools-and-tool-choice.ts","../src/util/is-non-empty-object.ts","../core/types/usage.ts","../core/generate-text/as-content.ts","../core/generate-text/parse-tool-call.ts","../core/generate-text/step-result.ts","../core/generate-text/stop-condition.ts","../core/generate-text/to-response-messages.ts","../core/generate-text/output.ts","../core/generate-text/smooth-stream.ts","../core/generate-text/stream-text.ts","../core/generate-text/run-tools-transformation.ts","../core/middleware/default-settings-middleware.ts","../src/util/get-potential-start-index.ts","../core/middleware/extract-reasoning-middleware.ts","../core/middleware/simulate-streaming-middleware.ts","../core/middleware/wrap-language-model.ts","../core/registry/custom-provider.ts","../core/registry/no-such-provider-error.ts","../core/registry/provider-registry.ts","../core/tool/mcp/mcp-client.ts","../core/tool/tool.ts","../core/tool/mcp/mcp-sse-transport.ts","../core/tool/mcp/json-rpc-message.ts","../core/tool/mcp/types.ts","../core/tool/mcp/mcp-transport.ts","../src/error/no-transcript-generated-error.ts","../core/transcribe/transcribe.ts"],"sourcesContent":["// re-exports:\nexport {\n asSchema,\n createIdGenerator,\n generateId,\n jsonSchema,\n type Schema,\n type IdGenerator,\n} from '@ai-sdk/provider-utils';\n\n// directory exports\nexport * from './error';\nexport * from './text-stream';\nexport * from './ui';\nexport * from './ui-message-stream';\nexport * from './util';\n\n// directory exports from /core\nexport * from '../core/';\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 { InvalidToolArgumentsError } from './invalid-tool-arguments-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 { ToolExecutionError } from './tool-execution-error';\n\nexport { InvalidDataContentError } from '../../core/prompt/invalid-data-content-error';\nexport { InvalidMessageRoleError } from '../../core/prompt/invalid-message-role-error';\nexport { MessageConversionError } from '../../core/prompt/message-conversion-error';\nexport { DownloadError } from '../util/download-error';\nexport { RetryError } from '../util/retry-error';\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 { AISDKError } from '@ai-sdk/provider';\nimport { SingleRequestTextStreamPart } from '../../core/generate-text/run-tools-transformation';\n\nconst name = 'AI_InvalidStreamPartError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidStreamPartError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly chunk: SingleRequestTextStreamPart<any>;\n\n constructor({\n chunk,\n message,\n }: {\n chunk: SingleRequestTextStreamPart<any>;\n message: string;\n }) {\n super({ name, message });\n\n this.chunk = chunk;\n }\n\n static isInstance(error: unknown): error is InvalidStreamPartError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError, getErrorMessage } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidToolArgumentsError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidToolArgumentsError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly toolName: string;\n readonly toolArgs: string;\n\n constructor({\n toolArgs,\n toolName,\n cause,\n message = `Invalid arguments for tool ${toolName}: ${getErrorMessage(\n cause,\n )}`,\n }: {\n message?: string;\n toolArgs: string;\n toolName: string;\n cause: unknown;\n }) {\n super({ name, message, cause });\n\n this.toolArgs = toolArgs;\n this.toolName = toolName;\n }\n\n static isInstance(error: unknown): error is InvalidToolArgumentsError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_MCPClientError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * An error occurred with the MCP client.\n */\nexport class MCPClientError extends AISDKError {\n private readonly [symbol] = true;\n\n constructor({\n name = 'MCPClientError',\n message,\n cause,\n }: {\n name?: string;\n message: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n }\n\n static isInstance(error: unknown): error is MCPClientError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { ImageModelResponseMetadata } from '../../core/types/image-model-response-metadata';\n\nconst name = 'AI_NoImageGeneratedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\nThrown when no image could be generated. This can have multiple causes:\n\n- The model failed to generate a response.\n- The model generated a response that could not be parsed.\n */\nexport class NoImageGeneratedError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n /**\nThe response metadata for each call.\n */\n readonly responses: Array<ImageModelResponseMetadata> | undefined;\n\n constructor({\n message = 'No image generated.',\n cause,\n responses,\n }: {\n message?: string;\n cause?: Error;\n responses?: Array<ImageModelResponseMetadata>;\n }) {\n super({ name, message, cause });\n\n this.responses = responses;\n }\n\n static isInstance(error: unknown): error is NoImageGeneratedError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { FinishReason } from '../../core/types/language-model';\nimport { LanguageModelResponseMetadata } from '../../core/types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../../core/types/usage';\n\nconst name = 'AI_NoObjectGeneratedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\nThrown when no object could be generated. This can have several causes:\n\n- The model failed to generate a response.\n- The model generated a response that could not be parsed.\n- The model generated a response that could not be validated against the schema.\n\nThe error contains the following properties:\n\n- `text`: The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n */\nexport class NoObjectGeneratedError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n /**\n The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n */\n readonly text: string | undefined;\n\n /**\n The response metadata.\n */\n readonly response: LanguageModelResponseMetadata | undefined;\n\n /**\n The usage of the model.\n */\n readonly usage: LanguageModelUsage | undefined;\n\n /**\n Reason why the model finished generating a response.\n */\n readonly finishReason: FinishReason | undefined;\n\n constructor({\n message = 'No object generated.',\n cause,\n text,\n response,\n usage,\n finishReason,\n }: {\n message?: string;\n cause?: Error;\n text?: string;\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n }) {\n super({ name, message, cause });\n\n this.text = text;\n this.response = response;\n this.usage = usage;\n this.finishReason = finishReason;\n }\n\n static isInstance(error: unknown): error is NoObjectGeneratedError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n\nexport function verifyNoObjectGeneratedError(\n error: unknown,\n expected: {\n message: string;\n response: LanguageModelResponseMetadata & {\n body?: string;\n };\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n) {\n expect(NoObjectGeneratedError.isInstance(error)).toBeTruthy();\n const noObjectGeneratedError = error as NoObjectGeneratedError;\n expect(noObjectGeneratedError.message).toEqual(expected.message);\n expect(noObjectGeneratedError.response).toEqual(expected.response);\n expect(noObjectGeneratedError.usage).toEqual(expected.usage);\n expect(noObjectGeneratedError.finishReason).toEqual(expected.finishReason);\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","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 { InvalidToolArgumentsError } from './invalid-tool-arguments-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 | InvalidToolArgumentsError;\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 | InvalidToolArgumentsError;\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, getErrorMessage, JSONValue } from '@ai-sdk/provider';\n\nconst name = 'AI_ToolExecutionError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class ToolExecutionError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly toolName: string;\n readonly toolArgs: JSONValue | unknown;\n readonly toolCallId: string;\n\n constructor({\n toolArgs,\n toolName,\n toolCallId,\n cause,\n message = `Error executing tool ${toolName}: ${getErrorMessage(cause)}`,\n }: {\n message?: string;\n toolArgs: JSONValue | unknown;\n toolName: string;\n toolCallId: string;\n cause: unknown;\n }) {\n super({ name, message, cause });\n\n this.toolArgs = toolArgs;\n this.toolName = toolName;\n this.toolCallId = toolCallId;\n }\n\n static isInstance(error: unknown): error is ToolExecutionError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidDataContentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidDataContentError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly content: unknown;\n\n constructor({\n content,\n cause,\n message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`,\n }: {\n content: unknown;\n cause?: unknown;\n message?: string;\n }) {\n super({ name, message, cause });\n\n this.content = content;\n }\n\n static isInstance(error: unknown): error is InvalidDataContentError {\n return AISDKError.hasMarker(error, marker);\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 { AISDKError } from '@ai-sdk/provider';\nimport { UIMessage } from '../../src/ui/ui-messages';\n\nconst name = 'AI_MessageConversionError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class MessageConversionError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly originalMessage: Omit<UIMessage, 'id'>;\n\n constructor({\n originalMessage,\n message,\n }: {\n originalMessage: Omit<UIMessage, 'id'>;\n message: string;\n }) {\n super({ name, message });\n\n this.originalMessage = originalMessage;\n }\n\n static isInstance(error: unknown): error is MessageConversionError {\n return AISDKError.hasMarker(error, marker);\n }\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 { 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","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","import { parseJsonEventStream, ParseResult } from '@ai-sdk/provider-utils';\nimport {\n UIMessageStreamPart,\n uiMessageStreamPartSchema,\n} from '../ui-message-stream/ui-message-stream-parts';\nimport { consumeStream } from '../util/consume-stream';\nimport { processTextStream } from './process-text-stream';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => fetch;\n\nexport async function callCompletionApi({\n api,\n prompt,\n credentials,\n headers,\n body,\n streamProtocol = 'data',\n setCompletion,\n setLoading,\n setError,\n setAbortController,\n onFinish,\n onError,\n fetch = getOriginalFetch(),\n}: {\n api: string;\n prompt: string;\n credentials: RequestCredentials | undefined;\n headers: HeadersInit | undefined;\n body: Record<string, any>;\n streamProtocol: 'data' | 'text' | undefined;\n setCompletion: (completion: string) => void;\n setLoading: (loading: boolean) => void;\n setError: (error: Error | undefined) => void;\n setAbortController: (abortController: AbortController | null) => void;\n onFinish: ((prompt: string, completion: string) => void) | undefined;\n onError: ((error: Error) => void) | undefined;\n fetch: ReturnType<typeof getOriginalFetch> | undefined;\n}) {\n try {\n setLoading(true);\n setError(undefined);\n\n const abortController = new AbortController();\n setAbortController(abortController);\n\n // Empty the completion immediately.\n setCompletion('');\n\n const response = await fetch(api, {\n method: 'POST',\n body: JSON.stringify({\n prompt,\n ...body,\n }),\n credentials,\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController.signal,\n }).catch(err => {\n throw err;\n });\n\n if (!response.ok) {\n throw new Error(\n (await response.text()) ?? 'Failed to fetch the chat response.',\n );\n }\n\n if (!response.body) {\n throw new Error('The response body is empty.');\n }\n\n let result = '';\n\n switch (streamProtocol) {\n case 'text': {\n await processTextStream({\n stream: response.body,\n onTextPart: chunk => {\n result += chunk;\n setCompletion(result);\n },\n });\n break;\n }\n case 'data': {\n await consumeStream({\n stream: parseJsonEventStream({\n stream: response.body,\n schema: uiMessageStreamPartSchema,\n }).pipeThrough(\n new TransformStream<\n ParseResult<UIMessageStreamPart>,\n UIMessageStreamPart\n >({\n async transform(part) {\n if (!part.success) {\n throw part.error;\n }\n\n const streamPart = part.value;\n if (streamPart.type === 'text') {\n result += streamPart.text;\n setCompletion(result);\n } else if (streamPart.type === 'error') {\n throw new Error(streamPart.errorText);\n }\n },\n }),\n ),\n onError: error => {\n throw error;\n },\n });\n break;\n }\n default: {\n const exhaustiveCheck: never = streamProtocol;\n throw new Error(`Unknown stream protocol: ${exhaustiveCheck}`);\n }\n }\n\n if (onFinish) {\n onFinish(prompt, result);\n }\n\n setAbortController(null);\n return result;\n } catch (err) {\n // Ignore abort errors as they are expected.\n if ((err as any).name === 'AbortError') {\n setAbortController(null);\n return null;\n }\n\n if (err instanceof Error) {\n if (onError) {\n onError(err);\n }\n }\n\n setError(err as Error);\n } finally {\n setLoading(false);\n }\n}\n","import { z } from 'zod';\nimport { ProviderMetadata } from '../../core';\n\nexport const uiMessageStreamPartSchema = z.union([\n z.object({\n type: z.literal('text'),\n text: z.string(),\n }),\n z.object({\n type: z.literal('error'),\n errorText: z.string(),\n }),\n z.object({\n type: z.literal('tool-call-streaming-start'),\n toolCallId: z.string(),\n toolName: z.string(),\n }),\n z.object({\n type: z.literal('tool-call-delta'),\n toolCallId: z.string(),\n argsTextDelta: z.string(),\n }),\n z.object({\n type: z.literal('tool-call'),\n toolCallId: z.string(),\n toolName: z.string(),\n args: z.unknown(),\n }),\n z.object({\n type: z.literal('tool-result'),\n toolCallId: z.string(),\n result: z.unknown(),\n providerMetadata: z.any().optional(),\n }),\n z.object({\n type: z.literal('reasoning'),\n text: z.string(),\n providerMetadata: z.record(z.any()).optional(),\n }),\n z.object({\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.object({\n type: z.literal('file'),\n url: z.string(),\n mediaType: z.string(),\n }),\n z.object({\n type: z.string().startsWith('data-'),\n id: z.string().optional(),\n data: z.unknown(),\n }),\n z.object({\n type: z.literal('metadata'),\n value: z.object({ metadata: z.unknown() }),\n }),\n z.object({\n type: z.literal('start-step'),\n metadata: z.unknown().optional(),\n }),\n z.object({\n type: z.literal('finish-step'),\n metadata: z.unknown().optional(),\n }),\n z.object({\n type: z.literal('start'),\n messageId: z.string().optional(),\n metadata: z.unknown().optional(),\n }),\n z.object({\n type: z.literal('finish'),\n metadata: z.unknown().optional(),\n }),\n z.object({\n type: z.literal('reasoning-part-finish'),\n }),\n]);\n\nexport type DataUIMessageStreamPart = {\n type: `data-${string}`;\n id?: string;\n data: unknown;\n};\n\nexport type UIMessageStreamPart =\n | {\n type: 'text';\n text: string;\n }\n | {\n type: 'error';\n errorText: string;\n }\n | {\n type: 'tool-call';\n toolCallId: string;\n toolName: string;\n args: unknown;\n }\n | {\n type: 'tool-result';\n toolCallId: string;\n result: unknown;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'tool-call-streaming-start';\n toolCallId: string;\n toolName: string;\n }\n | {\n type: 'tool-call-delta';\n toolCallId: string;\n argsTextDelta: string;\n }\n | {\n type: 'reasoning';\n text: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'source-url';\n sourceId: string;\n url: string;\n title?: string;\n providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'file';\n url: string;\n mediaType: string;\n }\n | DataUIMessageStreamPart\n | {\n type: 'metadata';\n metadata: unknown;\n }\n | {\n type: 'start-step';\n metadata?: unknown;\n }\n | {\n type: 'finish-step';\n metadata?: unknown;\n }\n | {\n type: 'start';\n messageId?: string;\n metadata?: unknown;\n }\n | {\n type: 'finish';\n metadata?: unknown;\n }\n | {\n type: 'reasoning-part-finish';\n };\n\nexport function isDataUIMessageStreamPart(\n part: UIMessageStreamPart,\n): part is DataUIMessageStreamPart {\n return part.type.startsWith('data-');\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","export async function processTextStream({\n stream,\n onTextPart,\n}: {\n stream: ReadableStream<Uint8Array>;\n onTextPart: (chunk: string) => Promise<void> | void;\n}): Promise<void> {\n const reader = stream.pipeThrough(new TextDecoderStream()).getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n await onTextPart(value);\n }\n}\n","import {\n generateId as generateIdFunc,\n IdGenerator,\n StandardSchemaV1,\n ToolCall,\n Validator,\n} from '@ai-sdk/provider-utils';\nimport { consumeStream } from '../util/consume-stream';\nimport { SerialJobExecutor } from '../util/serial-job-executor';\nimport { ChatTransport } from './chat-transport';\nimport { getToolInvocations } from './get-tool-invocations';\nimport {\n createStreamingUIMessageState,\n processUIMessageStream,\n StreamingUIMessageState,\n} from './process-ui-message-stream';\nimport {\n isAssistantMessageWithCompletedToolCalls,\n shouldResubmitMessages,\n} from './should-resubmit-messages';\nimport type {\n CreateUIMessage,\n ToolInvocationUIPart,\n UIDataTypes,\n UIMessage,\n} from './ui-messages';\nimport { ChatRequestOptions, UseChatOptions } from './use-chat';\n\nexport interface ChatStoreSubscriber {\n onChatChanged: (event: ChatStoreEvent) => void;\n}\n\nexport interface ChatStoreEvent {\n type: 'chat-messages-changed' | 'chat-status-changed';\n chatId: number | string;\n error?: Error;\n}\n\nexport type ChatStatus = 'submitted' | 'streaming' | 'ready' | 'error';\n\nexport type ActiveResponse<MESSAGE_METADATA> = {\n state: StreamingUIMessageState<MESSAGE_METADATA>;\n abortController: AbortController | undefined;\n};\n\ntype ExtendedCallOptions<\n MESSAGE_METADATA,\n DATA_TYPES extends UIDataTypes,\n> = ChatRequestOptions & {\n onError?: (error: Error) => void;\n\n /**\nOptional callback function that is invoked when a tool call is received.\nIntended for automatic client-side tool execution.\n\nYou can optionally return a result for the tool call,\neither synchronously or asynchronously.\n */\n onToolCall?: ({\n toolCall,\n }: {\n toolCall: ToolCall<string, unknown>;\n }) => void | Promise<unknown> | unknown;\n\n /**\n * Optional callback function that is called when the assistant message is finished streaming.\n *\n * @param message The message that was streamed.\n */\n onFinish?: (options: {\n message: UIMessage<MESSAGE_METADATA, DATA_TYPES>;\n }) => void;\n};\n\nexport type UIDataPartSchemas = Record<\n string,\n Validator<any> | StandardSchemaV1<any>\n>;\n\nexport type InferUIDataParts<T extends UIDataPartSchemas> = {\n [K in keyof T]: T[K] extends Validator<infer U>\n ? U\n : T[K] extends StandardSchemaV1<infer U>\n ? U\n : unknown;\n};\n\nexport type ChatFactory<\n MESSAGE_METADATA,\n DATA_TYPES extends UIDataTypes,\n> = (options: {\n messages?: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n}) => Chat<MESSAGE_METADATA, DATA_TYPES>;\n\nexport type ChatStoreOptions<\n MESSAGE_METADATA,\n DATA_PART_SCHEMAS extends UIDataPartSchemas,\n> = {\n chats?: {\n [id: string]: {\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<DATA_PART_SCHEMAS>\n >[];\n };\n };\n generateId?: UseChatOptions['generateId'];\n transport: ChatTransport<\n MESSAGE_METADATA,\n InferUIDataParts<DATA_PART_SCHEMAS>\n >;\n maxSteps?: number;\n messageMetadataSchema?:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>;\n dataPartSchemas?: DATA_PART_SCHEMAS;\n};\n\nexport type ChatStoreFactory<\n MESSAGE_METADATA,\n DATA_PART_SCHEMAS extends UIDataPartSchemas,\n> = (\n options: ChatStoreOptions<MESSAGE_METADATA, DATA_PART_SCHEMAS>,\n) => ChatStore<MESSAGE_METADATA, DATA_PART_SCHEMAS>;\n\nexport interface Chat<MESSAGE_METADATA, DATA_TYPES extends UIDataTypes> {\n readonly status: ChatStatus;\n readonly messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n readonly error: Error | undefined;\n readonly activeResponse: ActiveResponse<MESSAGE_METADATA> | undefined;\n readonly jobExecutor: SerialJobExecutor;\n\n setStatus: (status: ChatStatus) => void;\n setError: (error: Error | undefined) => void;\n setActiveResponse: (\n activeResponse: ActiveResponse<MESSAGE_METADATA> | undefined,\n ) => void;\n pushMessage: (message: UIMessage<MESSAGE_METADATA, DATA_TYPES>) => void;\n popMessage: () => void;\n replaceMessage: (\n index: number,\n message: UIMessage<MESSAGE_METADATA, DATA_TYPES>,\n ) => void;\n setMessages: (messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[]) => void;\n snapshot?: <T>(thing: T) => T;\n}\n\nexport class ChatStore<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n> {\n private chats: Map<\n string,\n Chat<MESSAGE_METADATA, InferUIDataParts<UI_DATA_PART_SCHEMAS>>\n >;\n private readonly createChat: ChatFactory<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n private subscribers: Set<ChatStoreSubscriber>;\n private generateId: IdGenerator;\n private messageMetadataSchema:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>\n | undefined;\n private dataPartSchemas: UI_DATA_PART_SCHEMAS | undefined;\n private transport: ChatTransport<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n private maxSteps: number;\n\n constructor({\n chats = {},\n generateId,\n transport,\n maxSteps = 1,\n messageMetadataSchema,\n dataPartSchemas,\n createChat,\n }: {\n chats?: {\n [id: string]: {\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[];\n };\n };\n generateId?: UseChatOptions['generateId'];\n transport: ChatTransport<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n maxSteps?: number;\n messageMetadataSchema?:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>;\n dataPartSchemas?: UI_DATA_PART_SCHEMAS;\n createChat: ChatFactory<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n }) {\n this.createChat = createChat;\n this.chats = new Map(\n Object.entries(chats).map(([id, chat]) => [\n id,\n this.createChat({ messages: chat.messages }),\n ]),\n );\n\n this.maxSteps = maxSteps;\n this.transport = transport;\n this.subscribers = new Set();\n this.generateId = generateId ?? generateIdFunc;\n this.messageMetadataSchema = messageMetadataSchema;\n this.dataPartSchemas = dataPartSchemas;\n }\n\n hasChat(id: string) {\n return this.chats.has(id);\n }\n\n addChat(\n id: string,\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[],\n ) {\n this.chats.set(id, this.createChat({ messages }));\n }\n\n getChats() {\n return Array.from(this.chats.entries());\n }\n\n get chatCount() {\n return this.chats.size;\n }\n\n getStatus(id: string): ChatStatus {\n return this.getChatState(id).status;\n }\n\n setStatus({\n id,\n status,\n error,\n }: {\n id: string;\n status: ChatStatus;\n error?: Error;\n }) {\n const state = this.getChatState(id);\n\n if (state.status === status) return;\n\n state.setStatus(status);\n state.setError(error);\n\n this.emit({ type: 'chat-status-changed', chatId: id, error });\n }\n\n getError(id: string) {\n return this.getChatState(id).error;\n }\n\n getMessages(id: string) {\n return this.getChatState(id).messages;\n }\n\n getLastMessage(id: string) {\n const chat = this.getChatState(id);\n return chat.messages[chat.messages.length - 1];\n }\n\n subscribe(subscriber: ChatStoreSubscriber): () => void {\n this.subscribers.add(subscriber);\n return () => this.subscribers.delete(subscriber);\n }\n\n setMessages({\n id,\n messages,\n }: {\n id: string;\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[];\n }) {\n this.getChatState(id).setMessages(messages);\n this.emit({ type: 'chat-messages-changed', chatId: id });\n }\n\n removeAssistantResponse(id: string) {\n const chat = this.getChatState(id);\n const lastMessage = chat.messages[chat.messages.length - 1];\n\n if (lastMessage == null) {\n throw new Error('Cannot remove assistant response from empty chat');\n }\n\n if (lastMessage.role !== 'assistant') {\n throw new Error('Last message is not an assistant message');\n }\n\n chat.popMessage();\n this.emit({ type: 'chat-messages-changed', chatId: id });\n }\n\n async submitMessage({\n chatId,\n message,\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n }: ExtendedCallOptions<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > & {\n chatId: string;\n message: CreateUIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n }) {\n const state = this.getChatState(chatId);\n state.pushMessage({ ...message, id: message.id ?? this.generateId() });\n this.emit({\n type: 'chat-messages-changed',\n chatId,\n });\n await this.triggerRequest({\n chatId,\n headers,\n body,\n requestType: 'generate',\n onError,\n onToolCall,\n onFinish,\n });\n }\n\n async resubmitLastUserMessage({\n chatId,\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n }: ExtendedCallOptions<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > & {\n chatId: string;\n }) {\n const chat = this.getChatState(chatId);\n\n if (chat.messages[chat.messages.length - 1].role === 'assistant') {\n chat.popMessage();\n this.emit({\n type: 'chat-messages-changed',\n chatId,\n });\n }\n\n if (chat.messages.length === 0) {\n return;\n }\n\n return this.triggerRequest({\n chatId,\n requestType: 'generate',\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n });\n }\n\n async resumeStream({\n chatId,\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n }: ExtendedCallOptions<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > & {\n chatId: string;\n }) {\n return this.triggerRequest({\n chatId,\n requestType: 'resume',\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n });\n }\n\n async addToolResult({\n chatId,\n toolCallId,\n result,\n }: {\n chatId: string;\n toolCallId: string;\n result: unknown;\n }) {\n const chat = this.getChatState(chatId);\n\n chat.jobExecutor.run(async () => {\n updateToolCallResult({\n messages: chat.messages,\n toolCallId,\n toolResult: result,\n });\n\n this.setMessages({\n id: chatId,\n messages: chat.messages,\n });\n\n // when the request is ongoing, the auto-submit will be triggered after the request is finished\n if (chat.status === 'submitted' || chat.status === 'streaming') {\n return;\n }\n\n // auto-submit when all tool calls in the last assistant message have results:\n const lastMessage = chat.messages[chat.messages.length - 1];\n if (isAssistantMessageWithCompletedToolCalls(lastMessage)) {\n // we do not await this call to avoid a deadlock in the serial job executor; triggerRequest also uses the job executor internally.\n this.triggerRequest({\n requestType: 'generate',\n chatId,\n });\n }\n });\n }\n\n async stopStream({ chatId }: { chatId: string }) {\n const chat = this.getChatState(chatId);\n\n if (chat.status !== 'streaming' && chat.status !== 'submitted') return;\n\n if (chat.activeResponse?.abortController) {\n chat.activeResponse.abortController.abort();\n chat.activeResponse.abortController = undefined;\n }\n }\n\n private emit(event: ChatStoreEvent) {\n for (const subscriber of this.subscribers) {\n subscriber.onChatChanged(event);\n }\n }\n\n private getChatState(\n id: string,\n ): Chat<MESSAGE_METADATA, InferUIDataParts<UI_DATA_PART_SCHEMAS>> {\n if (!this.hasChat(id)) {\n this.addChat(id, []);\n }\n return this.chats.get(id)!;\n }\n\n private async triggerRequest({\n chatId,\n requestType,\n headers,\n body,\n onError,\n onToolCall,\n onFinish,\n }: ExtendedCallOptions<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > & {\n chatId: string;\n requestType: 'generate' | 'resume';\n }) {\n const chat = this.getChatState(chatId);\n\n this.setStatus({ id: chatId, status: 'submitted', error: undefined });\n\n const messageCount = chat.messages.length;\n const lastMessage = chat.messages[chat.messages.length - 1];\n const maxStep = lastMessage.parts.filter(\n part => part.type === 'step-start',\n ).length;\n\n try {\n const lastMessage = chat.messages[chat.messages.length - 1];\n const activeResponse = {\n state: createStreamingUIMessageState({\n lastMessage: chat.snapshot ? chat.snapshot(lastMessage) : lastMessage,\n newMessageId: this.generateId(),\n }),\n abortController: new AbortController(),\n };\n\n chat.setActiveResponse(activeResponse);\n\n const stream = await this.transport.submitMessages({\n chatId,\n messages: chat.messages,\n body,\n headers,\n abortController: activeResponse.abortController,\n requestType,\n });\n\n const runUpdateMessageJob = (\n job: (options: {\n state: StreamingUIMessageState<\n MESSAGE_METADATA,\n UI_DATA_PART_SCHEMAS\n >;\n write: () => void;\n }) => Promise<void>,\n ) =>\n // serialize the job execution to avoid race conditions:\n chat.jobExecutor.run(() =>\n job({\n state: activeResponse.state,\n write: () => {\n // streaming is set on first write (before it should be \"submitted\")\n this.setStatus({ id: chatId, status: 'streaming' });\n\n const replaceLastMessage =\n activeResponse.state.message.id ===\n chat.messages[chat.messages.length - 1].id;\n\n if (replaceLastMessage) {\n chat.replaceMessage(\n chat.messages.length - 1,\n activeResponse.state.message,\n );\n } else {\n chat.pushMessage(activeResponse.state.message);\n }\n\n this.emit({\n type: 'chat-messages-changed',\n chatId,\n });\n },\n }),\n );\n\n await consumeStream({\n stream: processUIMessageStream({\n stream,\n onToolCall,\n messageMetadataSchema: this.messageMetadataSchema,\n dataPartSchemas: this.dataPartSchemas,\n runUpdateMessageJob,\n }),\n onError: error => {\n throw error;\n },\n });\n\n onFinish?.({ message: activeResponse.state.message });\n\n this.setStatus({ id: chatId, status: 'ready' });\n } catch (err) {\n // Ignore abort errors as they are expected.\n if ((err as any).name === 'AbortError') {\n this.setStatus({ id: chatId, status: 'ready' });\n return null;\n }\n\n if (onError && err instanceof Error) {\n onError(err);\n }\n\n this.setStatus({ id: chatId, status: 'error', error: err as Error });\n } finally {\n chat.setActiveResponse(undefined);\n }\n\n // auto-submit when all tool calls in the last assistant message have results\n // and assistant has not answered yet\n if (\n shouldResubmitMessages({\n originalMaxToolInvocationStep: maxStep,\n originalMessageCount: messageCount,\n maxSteps: this.maxSteps,\n messages: chat.messages,\n })\n ) {\n await this.triggerRequest({\n chatId,\n requestType,\n onError,\n onToolCall,\n onFinish,\n headers,\n body,\n });\n }\n }\n}\n\n/**\n * Updates the result of a specific tool invocation in the last message of the given messages array.\n *\n * @param {object} params - The parameters object.\n * @param {UIMessage[]} params.messages - An array of messages, from which the last one is updated.\n * @param {string} params.toolCallId - The unique identifier for the tool invocation to update.\n * @param {unknown} params.toolResult - The result object to attach to the tool invocation.\n * @returns {void} This function does not return anything.\n */\nfunction updateToolCallResult({\n messages,\n toolCallId,\n toolResult: result,\n}: {\n messages: UIMessage[];\n toolCallId: string;\n toolResult: unknown;\n}) {\n const lastMessage = messages[messages.length - 1];\n\n const invocationPart = lastMessage.parts.find(\n (part): part is ToolInvocationUIPart =>\n part.type === 'tool-invocation' &&\n part.toolInvocation.toolCallId === toolCallId,\n );\n\n if (invocationPart == null) {\n return;\n }\n\n invocationPart.toolInvocation = {\n ...invocationPart.toolInvocation,\n state: 'result' as const,\n result,\n };\n}\n","import {\n StandardSchemaV1,\n validateTypes,\n Validator,\n} from '@ai-sdk/provider-utils';\nimport {\n isDataUIMessageStreamPart,\n UIMessageStreamPart,\n} from '../ui-message-stream/ui-message-stream-parts';\nimport { mergeObjects } from '../util/merge-objects';\nimport { parsePartialJson } from '../util/parse-partial-json';\nimport { InferUIDataParts, UIDataPartSchemas } from './chat-store';\nimport { getToolInvocations } from './get-tool-invocations';\nimport type {\n ReasoningUIPart,\n TextUIPart,\n ToolInvocation,\n ToolInvocationUIPart,\n UIMessage,\n UIMessagePart,\n} from './ui-messages';\nimport { UseChatOptions } from './use-chat';\n\nexport type StreamingUIMessageState<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n> = {\n message: UIMessage<MESSAGE_METADATA, InferUIDataParts<UI_DATA_PART_SCHEMAS>>;\n activeTextPart: TextUIPart | undefined;\n activeReasoningPart: ReasoningUIPart | undefined;\n partialToolCalls: Record<\n string,\n { text: string; index: number; toolName: string }\n >;\n};\n\nexport function createStreamingUIMessageState<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n>({\n lastMessage,\n newMessageId = '',\n}: {\n lastMessage?: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >;\n newMessageId?: string;\n} = {}): StreamingUIMessageState<MESSAGE_METADATA, UI_DATA_PART_SCHEMAS> {\n const isContinuation = lastMessage?.role === 'assistant';\n\n const message: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n > = isContinuation\n ? lastMessage\n : {\n id: newMessageId,\n metadata: {} as MESSAGE_METADATA,\n role: 'assistant',\n parts: [],\n };\n\n return {\n message,\n activeTextPart: undefined,\n activeReasoningPart: undefined,\n partialToolCalls: {},\n };\n}\n\nexport function processUIMessageStream<\n MESSAGE_METADATA,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas,\n>({\n stream,\n onToolCall,\n messageMetadataSchema,\n dataPartSchemas,\n runUpdateMessageJob,\n}: {\n stream: ReadableStream<UIMessageStreamPart>;\n messageMetadataSchema?:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>;\n dataPartSchemas?: UI_DATA_PART_SCHEMAS;\n onToolCall?: UseChatOptions['onToolCall'];\n runUpdateMessageJob: (\n job: (options: {\n state: StreamingUIMessageState<\n NoInfer<MESSAGE_METADATA>,\n NoInfer<UI_DATA_PART_SCHEMAS>\n >;\n write: () => void;\n }) => Promise<void>,\n ) => Promise<void>;\n}): ReadableStream<UIMessageStreamPart> {\n return stream.pipeThrough(\n new TransformStream<UIMessageStreamPart, UIMessageStreamPart>({\n async transform(part, controller) {\n await runUpdateMessageJob(async ({ state, write }) => {\n function updateToolInvocationPart(\n toolCallId: string,\n invocation: ToolInvocation,\n ) {\n const part = state.message.parts.find(\n part =>\n isToolInvocationUIPart(part) &&\n part.toolInvocation.toolCallId === toolCallId,\n ) as ToolInvocationUIPart | undefined;\n\n if (part != null) {\n part.toolInvocation = invocation;\n } else {\n state.message.parts.push({\n type: 'tool-invocation',\n toolInvocation: invocation,\n });\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 = mergedMetadata as MESSAGE_METADATA;\n }\n }\n\n switch (part.type) {\n case 'text': {\n if (state.activeTextPart == null) {\n state.activeTextPart = {\n type: 'text',\n text: part.text,\n };\n state.message.parts.push(state.activeTextPart);\n } else {\n state.activeTextPart.text += part.text;\n }\n\n write();\n break;\n }\n\n case 'reasoning': {\n if (state.activeReasoningPart == null) {\n state.activeReasoningPart = {\n type: 'reasoning',\n text: part.text,\n providerMetadata: part.providerMetadata,\n };\n state.message.parts.push(state.activeReasoningPart);\n } else {\n state.activeReasoningPart.text += part.text;\n state.activeReasoningPart.providerMetadata =\n part.providerMetadata;\n }\n\n write();\n break;\n }\n\n case 'reasoning-part-finish': {\n if (state.activeReasoningPart != null) {\n state.activeReasoningPart = undefined;\n }\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 'tool-call-streaming-start': {\n const toolInvocations = getToolInvocations(state.message);\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(part.toolCallId, {\n state: 'partial-call',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: undefined,\n } as const);\n\n write();\n break;\n }\n\n case 'tool-call-delta': {\n const partialToolCall = state.partialToolCalls[part.toolCallId];\n\n partialToolCall.text += part.argsTextDelta;\n\n const { value: partialArgs } = await parsePartialJson(\n partialToolCall.text,\n );\n\n updateToolInvocationPart(part.toolCallId, {\n state: 'partial-call',\n toolCallId: part.toolCallId,\n toolName: partialToolCall.toolName,\n args: partialArgs,\n } as const);\n\n write();\n break;\n }\n\n case 'tool-call': {\n updateToolInvocationPart(part.toolCallId, {\n state: 'call',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n } as const);\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 if (onToolCall) {\n const result = await onToolCall({\n toolCall: part,\n });\n if (result != null) {\n updateToolInvocationPart(part.toolCallId, {\n state: 'result',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n result,\n } as const);\n\n write();\n }\n }\n break;\n }\n\n case 'tool-result': {\n const toolInvocations = getToolInvocations(state.message);\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 updateToolInvocationPart(part.toolCallId, {\n ...toolInvocations[toolInvocationIndex],\n state: 'result' as const,\n result: part.result,\n } as const);\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\n await updateMessageMetadata(part.metadata);\n write();\n break;\n }\n\n case 'finish-step': {\n // reset the current text and reasoning parts\n state.activeTextPart = undefined;\n state.activeReasoningPart = undefined;\n\n await updateMessageMetadata(part.metadata);\n if (part.metadata != null) {\n write();\n }\n break;\n }\n\n case 'start': {\n if (part.messageId != null) {\n state.message.id = part.messageId;\n }\n\n await updateMessageMetadata(part.metadata);\n\n if (part.messageId != null || part.metadata != null) {\n write();\n }\n break;\n }\n\n case 'finish': {\n await updateMessageMetadata(part.metadata);\n if (part.metadata != null) {\n write();\n }\n break;\n }\n\n case 'metadata': {\n await updateMessageMetadata(part.metadata);\n if (part.metadata != null) {\n write();\n }\n break;\n }\n\n case 'error': {\n throw new Error(part.errorText);\n }\n\n default: {\n if (isDataUIMessageStreamPart(part)) {\n // TODO improve type safety\n const existingPart: any =\n part.id != null\n ? state.message.parts.find(\n (partArg: any) =>\n part.type === partArg.type && part.id === partArg.id,\n )\n : undefined;\n\n if (existingPart != null) {\n // TODO improve type safety\n existingPart.data =\n isObject(existingPart.data) && isObject(part.data)\n ? mergeObjects(existingPart.data, part.data)\n : part.data;\n } else {\n // TODO improve type safety\n state.message.parts.push(part as any);\n }\n write();\n }\n }\n }\n\n controller.enqueue(part);\n });\n },\n }),\n );\n}\n\n// helper function to narrow the type of a UIMessagePart\nfunction isToolInvocationUIPart(\n part: UIMessagePart<any>,\n): part is ToolInvocationUIPart {\n return part.type === 'tool-invocation';\n}\n\nfunction isObject(value: unknown): value is object {\n return typeof value === 'object' && value !== null;\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 { ToolInvocation, ToolInvocationUIPart, UIMessage } from './ui-messages';\n\nexport function getToolInvocations(message: UIMessage): ToolInvocation[] {\n return message.parts\n .filter(\n (part): part is ToolInvocationUIPart => part.type === 'tool-invocation',\n )\n .map(part => part.toolInvocation);\n}\n","import { UIMessage } from './ui-messages';\n\nexport function shouldResubmitMessages({\n originalMaxToolInvocationStep,\n originalMessageCount,\n maxSteps,\n messages,\n}: {\n originalMaxToolInvocationStep: number | undefined;\n originalMessageCount: number;\n maxSteps: number;\n messages: UIMessage[];\n}) {\n const lastMessage = messages[messages.length - 1];\n\n // count the number of step-start parts in the last message:\n const lastMessageStepStartCount = lastMessage.parts.filter(\n part => part.type === 'step-start',\n ).length;\n\n return (\n // check if the feature is enabled:\n maxSteps > 1 &&\n // ensure there is a last message:\n lastMessage != null &&\n // ensure we actually have new steps (to prevent infinite loops in case of errors):\n (messages.length > originalMessageCount ||\n lastMessageStepStartCount !== originalMaxToolInvocationStep) &&\n // check that next step is possible:\n isAssistantMessageWithCompletedToolCalls(lastMessage) &&\n // limit the number of automatic steps:\n lastMessageStepStartCount < maxSteps\n );\n}\n\n/**\nCheck if the message is an assistant message with completed tool calls.\nThe last step of the message must have at least one tool invocation and\nall tool invocations must have a result.\n */\nexport function isAssistantMessageWithCompletedToolCalls(\n message: UIMessage,\n): message is UIMessage & {\n role: 'assistant';\n} {\n if (message.role !== 'assistant') {\n return false;\n }\n\n const lastStepStartIndex = message.parts.reduce((lastIndex, part, index) => {\n return part.type === 'step-start' ? index : lastIndex;\n }, -1);\n\n const lastStepToolInvocations = message.parts\n .slice(lastStepStartIndex + 1)\n .filter(part => part.type === 'tool-invocation');\n\n return (\n lastStepToolInvocations.length > 0 &&\n lastStepToolInvocations.every(part => 'result' in part.toolInvocation)\n );\n}\n","import { FileUIPart } from './ui-messages';\n\nexport async function convertFileListToFileUIParts(\n files: FileList | undefined,\n): Promise<Array<FileUIPart>> {\n if (files == null) {\n return [];\n }\n\n // React-native doesn't have a FileList global:\n if (!globalThis.FileList || !(files instanceof globalThis.FileList)) {\n throw new Error('FileList is not supported in the current environment');\n }\n\n return Promise.all(\n Array.from(files).map(async file => {\n const { name, type } = file;\n\n const dataUrl = await new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.onload = readerEvent => {\n resolve(readerEvent.target?.result as string);\n };\n reader.onerror = error => reject(error);\n reader.readAsDataURL(file);\n });\n\n return {\n type: 'file',\n mediaType: type,\n filename: name,\n url: dataUrl,\n };\n }),\n );\n}\n","import { ToolSet } from '../../core/generate-text/tool-set';\nimport { ToolResultPart } from '../../core/prompt/content-part';\nimport { AssistantContent, ModelMessage } from '../../core/prompt/message';\nimport { MessageConversionError } from '../../core/prompt/message-conversion-error';\nimport {\n FileUIPart,\n ReasoningUIPart,\n TextUIPart,\n ToolInvocationUIPart,\n UIMessage,\n} from './ui-messages';\n\n/**\nConverts an array of messages from useChat into an array of CoreMessages that can be used\nwith the AI core functions (e.g. `streamText`).\n */\nexport function convertToModelMessages<TOOLS extends ToolSet = never>(\n messages: Array<Omit<UIMessage, 'id'>>,\n options?: { tools?: TOOLS },\n): ModelMessage[] {\n const tools = options?.tools ?? ({} as TOOLS);\n const modelMessages: ModelMessage[] = [];\n\n for (const message of messages) {\n switch (message.role) {\n case 'system': {\n modelMessages.push({\n role: 'system',\n content: message.parts\n .map(part => (part.type === 'text' ? part.text : ''))\n .join(''),\n });\n break;\n }\n\n case 'user': {\n modelMessages.push({\n role: 'user',\n content: message.parts\n .filter(\n (part): part is TextUIPart | FileUIPart =>\n part.type === 'text' || part.type === 'file',\n )\n .map(part =>\n part.type === 'file'\n ? {\n type: 'file' as const,\n mediaType: part.mediaType,\n filename: part.filename,\n data: part.url,\n }\n : part,\n ),\n });\n\n break;\n }\n\n case 'assistant': {\n if (message.parts != null) {\n let block: Array<\n TextUIPart | ToolInvocationUIPart | ReasoningUIPart | FileUIPart\n > = [];\n\n function processBlock() {\n if (block.length === 0) {\n return;\n }\n\n const content: AssistantContent = [];\n\n for (const part of block) {\n switch (part.type) {\n case 'text': {\n content.push(part);\n break;\n }\n case 'file': {\n content.push({\n type: 'file' as const,\n mediaType: part.mediaType,\n data: part.url,\n });\n break;\n }\n case 'reasoning': {\n content.push({\n type: 'reasoning' as const,\n text: part.text,\n providerOptions: part.providerMetadata,\n });\n break;\n }\n case 'tool-invocation':\n content.push({\n type: 'tool-call' as const,\n toolCallId: part.toolInvocation.toolCallId,\n toolName: part.toolInvocation.toolName,\n args: part.toolInvocation.args,\n });\n break;\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n }\n\n modelMessages.push({\n role: 'assistant',\n content,\n });\n\n // check if there are tool invocations with results in the block\n const stepInvocations = block\n .filter(\n (\n part:\n | TextUIPart\n | ToolInvocationUIPart\n | ReasoningUIPart\n | FileUIPart,\n ): part is ToolInvocationUIPart =>\n part.type === 'tool-invocation',\n )\n .map(part => part.toolInvocation);\n\n // tool message with tool results\n if (stepInvocations.length > 0) {\n modelMessages.push({\n role: 'tool',\n content: stepInvocations.map(\n (toolInvocation): ToolResultPart => {\n if (!('result' in toolInvocation)) {\n throw new MessageConversionError({\n originalMessage: message,\n message:\n 'ToolInvocation must have a result: ' +\n JSON.stringify(toolInvocation),\n });\n }\n\n const { toolCallId, toolName, result } = toolInvocation;\n\n const tool = tools[toolName];\n return tool?.experimental_toToolResultContent != null\n ? {\n type: 'tool-result',\n toolCallId,\n toolName,\n result: tool.experimental_toToolResultContent(result),\n experimental_content:\n tool.experimental_toToolResultContent(result),\n }\n : {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n },\n ),\n });\n }\n\n // updates for next block\n block = [];\n }\n\n for (const part of message.parts) {\n switch (part.type) {\n case 'text':\n case 'reasoning':\n case 'file':\n case 'tool-invocation': {\n block.push(part);\n break;\n }\n case 'step-start': {\n processBlock();\n break;\n }\n }\n }\n\n processBlock();\n\n break;\n }\n\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = message.role;\n throw new MessageConversionError({\n originalMessage: message,\n message: `Unsupported role: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n return modelMessages;\n}\n\n/**\n@deprecated Use `convertToModelMessages` instead.\n */\n// TODO remove in AI SDK 6\nexport const convertToCoreMessages = convertToModelMessages;\n","import {\n FetchFunction,\n generateId as generateIdFunc,\n IdGenerator,\n StandardSchemaV1,\n Validator,\n} from '@ai-sdk/provider-utils';\nimport {\n ChatStoreOptions,\n InferUIDataParts,\n type UIDataPartSchemas,\n} from './chat-store';\nimport { DefaultChatTransport } from './default-chat-transport';\nimport { UIMessage } from './ui-messages';\n\nexport interface DefaultChatStoreOptions<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n> {\n /**\n * Schema for the message metadata. Validates the message metadata.\n * Message metadata can be undefined or must match the schema.\n */\n messageMetadataSchema?:\n | Validator<MESSAGE_METADATA>\n | StandardSchemaV1<MESSAGE_METADATA>;\n\n /**\n * Schema for the data types. Validates the data types.\n */\n dataPartSchemas?: UI_DATA_PART_SCHEMAS;\n\n /**\n * The API endpoint that accepts a `{ messages: Message[] }` object and returns\n * a stream of tokens of the AI chat response.\n *\n * Defaults to `/api/chat`\n */\n api?: string;\n\n /**\n * A way to provide a function that is going to be used for ids for messages and the chat.\n * If not provided the default AI SDK `generateId` is used.\n */\n generateId?: IdGenerator;\n\n /**\n * The credentials mode to be used for the fetch request.\n * Possible values are: 'omit', 'same-origin', 'include'.\n * Defaults to 'same-origin'.\n */\n credentials?: RequestCredentials;\n\n /**\n * HTTP headers to be sent with the API request.\n */\n headers?: Record<string, string> | Headers;\n\n /**\n * Extra body object to be sent with the API request.\n * @example\n * Send a `sessionId` to the API along with the messages.\n * ```js\n * useChat({\n * body: {\n * sessionId: '123',\n * }\n * })\n * ```\n */\n body?: object;\n\n /**\n Custom fetch implementation. You can use it as a middleware to intercept requests,\n or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n Maximum number of sequential LLM calls (steps), e.g. when you use tool calls.\n Must be at least 1.\n\n A maximum number is required to prevent infinite loops in the case of misconfigured tools.\n\n By default, it's set to 1, which means that only a single LLM call is made.\n */\n maxSteps?: number;\n\n /**\n * When a function is provided, it will be used\n * to prepare the request body for the chat API. This can be useful for\n * customizing the request body based on the messages and data in the chat.\n *\n * @param chatId The id of the chat.\n * @param messages The current messages in the chat.\n * @param requestBody The request body object passed in the chat request.\n */\n prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[];\n requestBody?: object;\n }) => unknown;\n\n chats?: {\n [id: string]: {\n messages: UIMessage<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >[];\n };\n };\n}\n\nexport function defaultChatStoreOptions<\n MESSAGE_METADATA = unknown,\n UI_DATA_PART_SCHEMAS extends UIDataPartSchemas = UIDataPartSchemas,\n>({\n api = '/api/chat',\n fetch,\n credentials,\n headers,\n body,\n prepareRequestBody,\n generateId = generateIdFunc,\n messageMetadataSchema,\n maxSteps = 1,\n dataPartSchemas,\n chats,\n}: DefaultChatStoreOptions<\n MESSAGE_METADATA,\n UI_DATA_PART_SCHEMAS\n>): () => ChatStoreOptions<MESSAGE_METADATA, UI_DATA_PART_SCHEMAS> {\n return () => ({\n transport: new DefaultChatTransport<\n MESSAGE_METADATA,\n InferUIDataParts<UI_DATA_PART_SCHEMAS>\n >({\n api,\n fetch,\n credentials,\n headers,\n body,\n prepareRequestBody,\n }),\n generateId,\n messageMetadataSchema,\n dataPartSchemas,\n maxSteps,\n chats,\n });\n}\n","import {\n FetchFunction,\n parseJsonEventStream,\n ParseResult,\n} from '@ai-sdk/provider-utils';\nimport {\n UIMessageStreamPart,\n uiMessageStreamPartSchema,\n} from '../ui-message-stream/ui-message-stream-parts';\nimport { ChatTransport } from './chat-transport';\nimport { UIDataTypes, UIMessage } from './ui-messages';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => fetch;\n\nasync function fetchUIMessageStream({\n api,\n body,\n credentials,\n headers,\n abortController,\n fetch = getOriginalFetch(),\n requestType = 'generate',\n}: {\n api: string;\n body: Record<string, any>;\n credentials: RequestCredentials | undefined;\n headers: HeadersInit | undefined;\n abortController: (() => AbortController | null) | undefined;\n fetch: ReturnType<typeof getOriginalFetch> | undefined;\n requestType?: 'generate' | 'resume';\n}): Promise<ReadableStream<UIMessageStreamPart>> {\n const response =\n requestType === 'resume'\n ? await fetch(`${api}?chatId=${body.chatId}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController?.()?.signal,\n credentials,\n })\n : await fetch(api, {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController?.()?.signal,\n credentials,\n });\n\n if (!response.ok) {\n throw new Error(\n (await response.text()) ?? 'Failed to fetch the chat response.',\n );\n }\n\n if (!response.body) {\n throw new Error('The response body is empty.');\n }\n\n return parseJsonEventStream({\n stream: response.body,\n schema: uiMessageStreamPartSchema,\n }).pipeThrough(\n new TransformStream<ParseResult<UIMessageStreamPart>, UIMessageStreamPart>({\n async transform(part, controller) {\n if (!part.success) {\n throw part.error;\n }\n controller.enqueue(part.value);\n },\n }),\n );\n}\n\nexport class DefaultChatTransport<\n MESSAGE_METADATA,\n DATA_TYPES extends UIDataTypes,\n> implements ChatTransport<MESSAGE_METADATA, DATA_TYPES>\n{\n private api: string;\n private credentials?: RequestCredentials;\n private headers?: Record<string, string> | Headers;\n private body?: object;\n private fetch?: FetchFunction;\n private prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n requestBody?: object;\n }) => unknown;\n\n constructor({\n api,\n credentials,\n headers,\n body,\n fetch,\n prepareRequestBody,\n }: {\n api: string;\n\n /**\n * The credentials mode to be used for the fetch request.\n * Possible values are: 'omit', 'same-origin', 'include'.\n * Defaults to 'same-origin'.\n */\n credentials?: RequestCredentials;\n\n /**\n * HTTP headers to be sent with the API request.\n */\n headers?: Record<string, string> | Headers;\n\n /**\n * Extra body object to be sent with the API request.\n * @example\n * Send a `sessionId` to the API along with the messages.\n * ```js\n * useChat({\n * body: {\n * sessionId: '123',\n * }\n * })\n * ```\n */\n body?: object;\n\n /**\n Custom fetch implementation. You can use it as a middleware to intercept requests,\n or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * When a function is provided, it will be used\n * to prepare the request body for the chat API. This can be useful for\n * customizing the request body based on the messages and data in the chat.\n *\n * @param id The id of the chat.\n * @param messages The current messages in the chat.\n * @param requestBody The request body object passed in the chat request.\n */\n prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n requestBody?: object;\n }) => unknown;\n }) {\n this.api = api;\n this.credentials = credentials;\n this.headers = headers;\n this.body = body;\n this.fetch = fetch;\n this.prepareRequestBody = prepareRequestBody;\n }\n\n submitMessages({\n chatId,\n messages,\n abortController,\n body,\n headers,\n requestType,\n }: Parameters<\n ChatTransport<MESSAGE_METADATA, DATA_TYPES>['submitMessages']\n >[0]) {\n return fetchUIMessageStream({\n api: this.api,\n headers: {\n ...this.headers,\n ...headers,\n },\n body: this.prepareRequestBody?.({\n chatId,\n messages,\n ...this.body,\n ...body,\n }) ?? {\n chatId,\n messages,\n ...this.body,\n ...body,\n },\n credentials: this.credentials,\n abortController: () => abortController,\n fetch: this.fetch,\n requestType,\n });\n }\n}\n","import { UIMessageStreamPart } from '../ui-message-stream';\n\nexport function transformTextToUiMessageStream({\n stream,\n}: {\n stream: ReadableStream<string>;\n}) {\n return stream.pipeThrough(\n new TransformStream<string, UIMessageStreamPart>({\n start(controller) {\n controller.enqueue({ type: 'start' });\n controller.enqueue({ type: 'start-step' });\n },\n\n async transform(part, controller) {\n controller.enqueue({ type: 'text', text: part });\n },\n\n async flush(controller) {\n controller.enqueue({ type: 'finish-step' });\n controller.enqueue({ type: 'finish' });\n },\n }),\n );\n}\n","import { FetchFunction } from '@ai-sdk/provider-utils';\nimport { UIMessageStreamPart } from '../ui-message-stream/ui-message-stream-parts';\nimport { ChatTransport } from './chat-transport';\nimport { transformTextToUiMessageStream } from './transform-text-to-ui-message-stream';\nimport { UIDataTypes, UIMessage } from './ui-messages';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => fetch;\n\nasync function fetchTextStream({\n api,\n body,\n credentials,\n headers,\n abortController,\n fetch = getOriginalFetch(),\n requestType = 'generate',\n}: {\n api: string;\n body: Record<string, any>;\n credentials: RequestCredentials | undefined;\n headers: HeadersInit | undefined;\n abortController: (() => AbortController | null) | undefined;\n fetch: ReturnType<typeof getOriginalFetch> | undefined;\n requestType?: 'generate' | 'resume';\n}): Promise<ReadableStream<UIMessageStreamPart>> {\n const response =\n requestType === 'resume'\n ? await fetch(`${api}?chatId=${body.chatId}`, {\n method: 'GET',\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController?.()?.signal,\n credentials,\n })\n : await fetch(api, {\n method: 'POST',\n body: JSON.stringify(body),\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n signal: abortController?.()?.signal,\n credentials,\n });\n\n if (!response.ok) {\n throw new Error(\n (await response.text()) ?? 'Failed to fetch the chat response.',\n );\n }\n\n if (!response.body) {\n throw new Error('The response body is empty.');\n }\n\n return transformTextToUiMessageStream({\n stream: response.body.pipeThrough(new TextDecoderStream()),\n });\n}\n\nexport class TextStreamChatTransport<\n MESSAGE_METADATA,\n DATA_TYPES extends UIDataTypes,\n> implements ChatTransport<MESSAGE_METADATA, DATA_TYPES>\n{\n private api: string;\n private credentials?: RequestCredentials;\n private headers?: Record<string, string> | Headers;\n private body?: object;\n private fetch?: FetchFunction;\n private prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n requestBody?: object;\n }) => unknown;\n\n constructor({\n api,\n credentials,\n headers,\n body,\n fetch,\n prepareRequestBody,\n }: {\n api: string;\n\n /**\n * The credentials mode to be used for the fetch request.\n * Possible values are: 'omit', 'same-origin', 'include'.\n * Defaults to 'same-origin'.\n */\n credentials?: RequestCredentials;\n\n /**\n * HTTP headers to be sent with the API request.\n */\n headers?: Record<string, string> | Headers;\n\n /**\n * Extra body object to be sent with the API request.\n * @example\n * Send a `sessionId` to the API along with the messages.\n * ```js\n * useChat({\n * body: {\n * sessionId: '123',\n * }\n * })\n * ```\n */\n body?: object;\n\n /**\n Custom fetch implementation. You can use it as a middleware to intercept requests,\n or to provide a custom fetch implementation for e.g. testing.\n */\n fetch?: FetchFunction;\n\n /**\n * When a function is provided, it will be used\n * to prepare the request body for the chat API. This can be useful for\n * customizing the request body based on the messages and data in the chat.\n *\n * @param id The id of the chat.\n * @param messages The current messages in the chat.\n * @param requestBody The request body object passed in the chat request.\n */\n prepareRequestBody?: (options: {\n chatId: string;\n messages: UIMessage<MESSAGE_METADATA, DATA_TYPES>[];\n requestBody?: object;\n }) => unknown;\n }) {\n this.api = api;\n this.credentials = credentials;\n this.headers = headers;\n this.body = body;\n this.fetch = fetch;\n this.prepareRequestBody = prepareRequestBody;\n }\n\n submitMessages({\n chatId,\n messages,\n abortController,\n body,\n headers,\n requestType,\n }: Parameters<\n ChatTransport<MESSAGE_METADATA, DATA_TYPES>['submitMessages']\n >[0]) {\n return fetchTextStream({\n api: this.api,\n headers: {\n ...this.headers,\n ...headers,\n },\n body: this.prepareRequestBody?.({\n chatId,\n messages,\n ...this.body,\n ...body,\n }) ?? {\n chatId,\n messages,\n ...this.body,\n ...body,\n },\n credentials: this.credentials,\n abortController: () => abortController,\n fetch: this.fetch,\n requestType,\n });\n }\n}\n","import {\n createStreamingUIMessageState,\n processUIMessageStream,\n StreamingUIMessageState,\n} from '../ui/process-ui-message-stream';\nimport { UIMessage } from '../ui/ui-messages';\nimport { UIMessageStreamPart } from './ui-message-stream-parts';\n\nexport function handleUIMessageStreamFinish({\n newMessageId,\n originalMessages = [],\n onFinish,\n stream,\n}: {\n stream: ReadableStream<UIMessageStreamPart>;\n\n newMessageId: string;\n\n /**\n * The original messages.\n */\n originalMessages?: UIMessage[];\n\n onFinish?: (options: {\n /**\n * The updates list of UI messages.\n */\n messages: UIMessage[];\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: UIMessage;\n }) => void;\n}) {\n if (onFinish == null) {\n return stream;\n }\n\n const lastMessage = originalMessages[originalMessages.length - 1];\n const isContinuation = lastMessage?.role === 'assistant';\n const messageId = isContinuation ? lastMessage.id : newMessageId;\n\n const state = createStreamingUIMessageState({\n lastMessage: structuredClone(lastMessage),\n newMessageId: messageId,\n });\n\n const runUpdateMessageJob = async (\n job: (options: {\n state: StreamingUIMessageState;\n write: () => void;\n }) => Promise<void>,\n ) => {\n await job({ state, write: () => {} });\n };\n\n return processUIMessageStream({\n stream,\n runUpdateMessageJob,\n }).pipeThrough(\n new TransformStream({\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,\n messages: [\n ...(isContinuation\n ? originalMessages.slice(0, -1)\n : originalMessages),\n state.message,\n ],\n });\n },\n }),\n );\n}\n","import { UIMessage } from '../ui/ui-messages';\nimport { handleUIMessageStreamFinish } from './handle-ui-message-stream-finish';\nimport { UIMessageStreamPart } from './ui-message-stream-parts';\nimport { UIMessageStreamWriter } from './ui-message-stream-writer';\n\nexport function createUIMessageStream({\n execute,\n onError = () => 'An error occurred.', // mask error messages for safety by default\n originalMessages,\n onFinish,\n}: {\n execute: (options: { writer: UIMessageStreamWriter }) => Promise<void> | void;\n onError?: (error: unknown) => string;\n\n /**\n * The original messages.\n */\n originalMessages?: UIMessage[];\n\n onFinish?: (options: {\n /**\n * The updates list of UI messages.\n */\n messages: UIMessage[];\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: UIMessage;\n }) => void;\n}): ReadableStream<UIMessageStreamPart> {\n let controller!: ReadableStreamDefaultController<UIMessageStreamPart>;\n\n const ongoingStreamPromises: Promise<void>[] = [];\n\n const stream = new ReadableStream({\n start(controllerArg) {\n controller = controllerArg;\n },\n });\n\n function safeEnqueue(data: UIMessageStreamPart) {\n try {\n controller.enqueue(data);\n } catch (error) {\n // suppress errors when the stream has been closed\n }\n }\n\n try {\n const result = execute({\n writer: {\n write(part: UIMessageStreamPart) {\n safeEnqueue(part);\n },\n merge(streamArg) {\n ongoingStreamPromises.push(\n (async () => {\n const reader = streamArg.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n safeEnqueue(value);\n }\n })().catch(error => {\n safeEnqueue({ type: 'error', errorText: onError(error) });\n }),\n );\n },\n onError,\n },\n });\n\n if (result) {\n ongoingStreamPromises.push(\n result.catch(error => {\n safeEnqueue({ type: 'error', errorText: onError(error) });\n }),\n );\n }\n } catch (error) {\n safeEnqueue({ type: 'error', errorText: onError(error) });\n }\n\n // Wait until all ongoing streams are done. This approach enables merging\n // streams even after execute has returned, as long as there is still an\n // open merged stream. This is important to e.g. forward new streams and\n // from callbacks.\n const waitForStreams: Promise<void> = new Promise(async resolve => {\n while (ongoingStreamPromises.length > 0) {\n await ongoingStreamPromises.shift();\n }\n resolve();\n });\n\n waitForStreams.finally(() => {\n try {\n controller.close();\n } catch (error) {\n // suppress errors when the stream has been closed\n }\n });\n\n return handleUIMessageStreamFinish({\n stream,\n newMessageId: '',\n originalMessages,\n onFinish,\n });\n}\n","export const uiMessageStreamHeaders = {\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","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","import { prepareHeaders } from '../util/prepare-headers';\nimport { uiMessageStreamHeaders } from './ui-message-stream-headers';\nimport { UIMessageStreamPart } from './ui-message-stream-parts';\nimport { JsonToSseTransformStream } from './json-to-sse-transform-stream';\n\nexport function createUIMessageStreamResponse({\n status,\n statusText,\n headers,\n stream,\n}: ResponseInit & {\n stream: ReadableStream<UIMessageStreamPart>;\n}): Response {\n return new Response(\n stream\n .pipeThrough(new JsonToSseTransformStream())\n .pipeThrough(new TextEncoderStream()),\n {\n status,\n statusText,\n headers: prepareHeaders(headers, uiMessageStreamHeaders),\n },\n );\n}\n","import { ServerResponse } from 'node:http';\nimport { prepareHeaders } from '../util/prepare-headers';\nimport { writeToServerResponse } from '../util/write-to-server-response';\nimport { uiMessageStreamHeaders } from './ui-message-stream-headers';\nimport { UIMessageStreamPart } from './ui-message-stream-parts';\nimport { JsonToSseTransformStream } from './json-to-sse-transform-stream';\n\nexport function pipeUIMessageStreamToResponse({\n response,\n status,\n statusText,\n headers,\n stream,\n}: {\n response: ServerResponse;\n stream: ReadableStream<UIMessageStreamPart>;\n} & ResponseInit): void {\n writeToServerResponse({\n response,\n status,\n statusText,\n headers: Object.fromEntries(\n prepareHeaders(headers, uiMessageStreamHeaders).entries(),\n ),\n stream: stream\n .pipeThrough(new JsonToSseTransformStream())\n .pipeThrough(new TextEncoderStream()),\n });\n}\n","import { InvalidArgumentError } from '../../src/error/invalid-argument-error';\n\n/**\n * Calculates the cosine similarity between two vectors. This is a useful metric for\n * comparing the similarity of two vectors such as embeddings.\n *\n * @param vector1 - The first vector.\n * @param vector2 - The second vector.\n *\n * @returns The cosine similarity between vector1 and vector2.\n * @returns 0 if either vector is the zero vector.\n *\n * @throws {InvalidArgumentError} If the vectors do not have the same length.\n */\nexport function cosineSimilarity(vector1: number[], vector2: number[]): number {\n if (vector1.length !== vector2.length) {\n throw new InvalidArgumentError({\n parameter: 'vector1,vector2',\n value: { vector1Length: vector1.length, vector2Length: vector2.length },\n message: `Vectors must have the same length`,\n });\n }\n\n const n = vector1.length;\n\n if (n === 0) {\n return 0; // Return 0 for empty vectors if no error is thrown\n }\n\n let magnitudeSquared1 = 0;\n let magnitudeSquared2 = 0;\n let dotProduct = 0;\n\n for (let i = 0; i < n; i++) {\n const value1 = vector1[i];\n const value2 = vector2[i];\n\n magnitudeSquared1 += value1 * value1;\n magnitudeSquared2 += value2 * value2;\n dotProduct += value1 * value2;\n }\n\n return magnitudeSquared1 === 0 || magnitudeSquared2 === 0\n ? 0\n : dotProduct /\n (Math.sqrt(magnitudeSquared1) * Math.sqrt(magnitudeSquared2));\n}\n","/**\n * Converts a data URL of type text/* to a text string.\n */\nexport function getTextFromDataUrl(dataUrl: string): string {\n const [header, base64Content] = dataUrl.split(',');\n const mediaType = header.split(';')[0].split(':')[1];\n\n if (mediaType == null || base64Content == null) {\n throw new Error('Invalid data URL format');\n }\n\n try {\n return window.atob(base64Content);\n } catch (error) {\n throw new Error(`Error decoding data URL`);\n }\n}\n","/**\n * Performs a deep-equal comparison of two parsed JSON objects.\n *\n * @param {any} obj1 - The first object to compare.\n * @param {any} obj2 - The second object to compare.\n * @returns {boolean} - Returns true if the two objects are deeply equal, false otherwise.\n */\nexport function isDeepEqualData(obj1: any, obj2: any): boolean {\n // Check for strict equality first\n if (obj1 === obj2) return true;\n\n // Check if either is null or undefined\n if (obj1 == null || obj2 == null) return false;\n\n // Check if both are objects\n if (typeof obj1 !== 'object' && typeof obj2 !== 'object')\n return obj1 === obj2;\n\n // If they are not strictly equal, they both need to be Objects\n if (obj1.constructor !== obj2.constructor) return false;\n\n // Special handling for Date objects\n if (obj1 instanceof Date && obj2 instanceof Date) {\n return obj1.getTime() === obj2.getTime();\n }\n\n // Handle arrays: compare length and then perform a recursive deep comparison on each item\n if (Array.isArray(obj1)) {\n if (obj1.length !== obj2.length) return false;\n for (let i = 0; i < obj1.length; i++) {\n if (!isDeepEqualData(obj1[i], obj2[i])) return false;\n }\n return true; // All array elements matched\n }\n\n // Compare the set of keys in each object\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n\n // Check each key-value pair recursively\n for (const key of keys1) {\n if (!keys2.includes(key)) return false;\n if (!isDeepEqualData(obj1[key], obj2[key])) return false;\n }\n\n return true; // All keys and values matched\n}\n","import { Job } from './job';\n\nexport class SerialJobExecutor {\n private queue: Array<Job> = [];\n private isProcessing = false;\n\n private async processQueue() {\n if (this.isProcessing) {\n return;\n }\n\n this.isProcessing = true;\n\n while (this.queue.length > 0) {\n await this.queue[0]();\n this.queue.shift();\n }\n\n this.isProcessing = false;\n }\n\n async run(job: Job): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n this.queue.push(async () => {\n try {\n await job();\n resolve();\n } catch (error) {\n reject(error);\n }\n });\n\n void this.processQueue();\n });\n }\n}\n","import { delay as delayFunction } from '@ai-sdk/provider-utils';\n\n/**\n * Creates a ReadableStream that emits the provided values with an optional delay between each value.\n *\n * @param options - The configuration options\n * @param options.chunks - Array of values to be emitted by the stream\n * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @returns A ReadableStream that emits the provided values\n */\nexport function simulateReadableStream<T>({\n chunks,\n initialDelayInMs = 0,\n chunkDelayInMs = 0,\n _internal,\n}: {\n chunks: T[];\n initialDelayInMs?: number | null;\n chunkDelayInMs?: number | null;\n _internal?: {\n delay?: (ms: number | null) => Promise<void>;\n };\n}): ReadableStream<T> {\n const delay = _internal?.delay ?? delayFunction;\n\n let index = 0;\n\n return new ReadableStream({\n async pull(controller) {\n if (index < chunks.length) {\n await delay(index === 0 ? initialDelayInMs : chunkDelayInMs);\n controller.enqueue(chunks[index++]);\n } else {\n controller.close();\n }\n },\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/**\nThe `retryWithExponentialBackoff` strategy retries a failed API call with an exponential backoff.\nYou can configure the maximum number of retries, the initial delay, and the backoff factor.\n */\nexport const retryWithExponentialBackoff =\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 await delay(delayInMs);\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 { InvalidArgumentError } from '../../src/error/invalid-argument-error';\nimport {\n RetryFunction,\n retryWithExponentialBackoff,\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: retryWithExponentialBackoff({ maxRetries: maxRetriesResult }),\n };\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 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 } finally {\n // always stop the span when there is an error:\n span.end();\n }\n\n throw error;\n }\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 === undefined) {\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 === undefined\n ? attributes\n : { ...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 === undefined\n ? attributes\n : { ...attributes, [key]: result };\n }\n\n // value is an attribute value already:\n return { ...attributes, [key]: value };\n }, {});\n}\n","import { prepareRetries } from '../../src/util/prepare-retries';\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 { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { EmbeddingModel, ProviderOptions } from '../types';\nimport { EmbedResult } from './embed-result';\n\n/**\nEmbed a value using an embedding model. The type of the value is defined by the embedding model.\n\n@param model - The embedding model to use.\n@param value - The value that should be embedded.\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@returns A result object that contains the embedding, the value, and additional information.\n */\nexport async function embed<VALUE>({\n model,\n value,\n providerOptions,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n experimental_telemetry: telemetry,\n}: {\n /**\nThe embedding model to use.\n */\n model: EmbeddingModel<VALUE>;\n\n /**\nThe value that should be embedded.\n */\n value: VALUE;\n\n /**\nMaximum number of retries per embedding model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n\n /**\n Additional provider-specific options. They are passed through\n to the provider from the AI SDK and enable provider-specific\n functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * Optional telemetry configuration (experimental).\n */\n experimental_telemetry?: TelemetrySettings;\n}): Promise<EmbedResult<VALUE>> {\n const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n const baseTelemetryAttributes = getBaseTelemetryAttributes({\n model,\n telemetry,\n headers,\n settings: { maxRetries },\n });\n\n const tracer = getTracer(telemetry);\n\n return recordSpan({\n name: 'ai.embed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({ operationId: 'ai.embed', telemetry }),\n ...baseTelemetryAttributes,\n 'ai.value': { input: () => JSON.stringify(value) },\n },\n }),\n tracer,\n fn: async span => {\n const { embedding, usage, response } = await retry(() =>\n // nested spans to align with the embedMany telemetry data:\n recordSpan({\n name: 'ai.embed.doEmbed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.embed.doEmbed',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.values': { input: () => [JSON.stringify(value)] },\n },\n }),\n tracer,\n fn: async doEmbedSpan => {\n const modelResponse = await model.doEmbed({\n values: [value],\n abortSignal,\n headers,\n providerOptions,\n });\n\n const embedding = modelResponse.embeddings[0];\n const usage = modelResponse.usage ?? { tokens: NaN };\n\n doEmbedSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n modelResponse.embeddings.map(embedding =>\n JSON.stringify(embedding),\n ),\n },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return {\n embedding,\n usage,\n response: modelResponse.response,\n };\n },\n }),\n );\n\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embedding': { output: () => JSON.stringify(embedding) },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return new DefaultEmbedResult({\n value,\n embedding,\n usage,\n response,\n });\n },\n });\n}\n\nclass DefaultEmbedResult<VALUE> implements EmbedResult<VALUE> {\n readonly value: EmbedResult<VALUE>['value'];\n readonly embedding: EmbedResult<VALUE>['embedding'];\n readonly usage: EmbedResult<VALUE>['usage'];\n readonly response: EmbedResult<VALUE>['response'];\n\n constructor(options: {\n value: EmbedResult<VALUE>['value'];\n embedding: EmbedResult<VALUE>['embedding'];\n usage: EmbedResult<VALUE>['usage'];\n response?: EmbedResult<VALUE>['response'];\n }) {\n this.value = options.value;\n this.embedding = options.embedding;\n this.usage = options.usage;\n this.response = options.response;\n }\n}\n","/**\n * Splits an array into chunks of a specified size.\n *\n * @template T - The type of elements in the array.\n * @param {T[]} array - The array to split.\n * @param {number} chunkSize - The size of each chunk.\n * @returns {T[][]} - A new array containing the chunks.\n */\nexport function splitArray<T>(array: T[], chunkSize: number): T[][] {\n if (chunkSize <= 0) {\n throw new Error('chunkSize must be greater than 0');\n }\n\n const result = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n result.push(array.slice(i, i + chunkSize));\n }\n\n return result;\n}\n","import { prepareRetries } from '../../src/util/prepare-retries';\nimport { splitArray } from '../../src/util/split-array';\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 { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { Embedding, EmbeddingModel, ProviderOptions } from '../types';\nimport { EmbedManyResult } from './embed-many-result';\n\n/**\nEmbed several values using an embedding model. The type of the value is defined\nby the embedding model.\n\n`embedMany` automatically splits large requests into smaller chunks if the model\nhas a limit on how many embeddings can be generated in a single call.\n\n@param model - The embedding model to use.\n@param values - The values that should be embedded.\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@returns A result object that contains the embeddings, the value, and additional information.\n */\nexport async function embedMany<VALUE>({\n model,\n values,\n maxParallelCalls = Infinity,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n providerOptions,\n experimental_telemetry: telemetry,\n}: {\n /**\nThe embedding model to use.\n */\n model: EmbeddingModel<VALUE>;\n\n /**\nThe values that should be embedded.\n */\n values: Array<VALUE>;\n\n /**\nMaximum number of retries per embedding model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n\n /**\n * Optional telemetry configuration (experimental).\n */\n experimental_telemetry?: TelemetrySettings;\n\n /**\n Additional provider-specific options. They are passed through\n to the provider from the AI SDK and enable provider-specific\n functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * Maximum number of concurrent requests.\n *\n * @default Infinity\n */\n maxParallelCalls?: number;\n}): Promise<EmbedManyResult<VALUE>> {\n const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n const baseTelemetryAttributes = getBaseTelemetryAttributes({\n model,\n telemetry,\n headers,\n settings: { maxRetries },\n });\n\n const tracer = getTracer(telemetry);\n\n return recordSpan({\n name: 'ai.embedMany',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({ operationId: 'ai.embedMany', telemetry }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.values': {\n input: () => values.map(value => JSON.stringify(value)),\n },\n },\n }),\n tracer,\n fn: async span => {\n const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([\n model.maxEmbeddingsPerCall,\n model.supportsParallelCalls,\n ]);\n\n // the model has not specified limits on\n // how many embeddings can be generated in a single call\n if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {\n const { embeddings, usage, response } = await retry(() => {\n // nested spans to align with the embedMany telemetry data:\n return recordSpan({\n name: 'ai.embedMany.doEmbed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.embedMany.doEmbed',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.values': {\n input: () => values.map(value => JSON.stringify(value)),\n },\n },\n }),\n tracer,\n fn: async doEmbedSpan => {\n const modelResponse = await model.doEmbed({\n values,\n abortSignal,\n headers,\n providerOptions,\n });\n\n const embeddings = modelResponse.embeddings;\n const usage = modelResponse.usage ?? { tokens: NaN };\n\n doEmbedSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n embeddings.map(embedding => JSON.stringify(embedding)),\n },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return {\n embeddings,\n usage,\n response: modelResponse.response,\n };\n },\n });\n });\n\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n embeddings.map(embedding => JSON.stringify(embedding)),\n },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return new DefaultEmbedManyResult({\n values,\n embeddings,\n usage,\n responses: [response],\n });\n }\n\n // split the values into chunks that are small enough for the model:\n const valueChunks = splitArray(values, maxEmbeddingsPerCall);\n\n // serially embed the chunks:\n const embeddings: Array<Embedding> = [];\n const responses: Array<\n | {\n headers?: Record<string, string>;\n body?: unknown;\n }\n | undefined\n > = [];\n let tokens = 0;\n\n const parallelChunks = splitArray(\n valueChunks,\n supportsParallelCalls ? maxParallelCalls : 1,\n );\n\n for (const parallelChunk of parallelChunks) {\n const results = await Promise.all(\n parallelChunk.map(chunk => {\n return retry(() => {\n // nested spans to align with the embedMany telemetry data:\n return recordSpan({\n name: 'ai.embedMany.doEmbed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.embedMany.doEmbed',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.values': {\n input: () => chunk.map(value => JSON.stringify(value)),\n },\n },\n }),\n tracer,\n fn: async doEmbedSpan => {\n const modelResponse = await model.doEmbed({\n values: chunk,\n abortSignal,\n headers,\n providerOptions,\n });\n\n const embeddings = modelResponse.embeddings;\n const usage = modelResponse.usage ?? { tokens: NaN };\n\n doEmbedSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n embeddings.map(embedding =>\n JSON.stringify(embedding),\n ),\n },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return {\n embeddings,\n usage,\n response: modelResponse.response,\n };\n },\n });\n });\n }),\n );\n\n for (const result of results) {\n embeddings.push(...result.embeddings);\n responses.push(result.response);\n tokens += result.usage.tokens;\n }\n }\n\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n embeddings.map(embedding => JSON.stringify(embedding)),\n },\n 'ai.usage.tokens': tokens,\n },\n }),\n );\n\n return new DefaultEmbedManyResult({\n values,\n embeddings,\n usage: { tokens },\n responses,\n });\n },\n });\n}\n\nclass DefaultEmbedManyResult<VALUE> implements EmbedManyResult<VALUE> {\n readonly values: EmbedManyResult<VALUE>['values'];\n readonly embeddings: EmbedManyResult<VALUE>['embeddings'];\n readonly usage: EmbedManyResult<VALUE>['usage'];\n readonly responses: EmbedManyResult<VALUE>['responses'];\n\n constructor(options: {\n values: EmbedManyResult<VALUE>['values'];\n embeddings: EmbedManyResult<VALUE>['embeddings'];\n usage: EmbedManyResult<VALUE>['usage'];\n responses?: EmbedManyResult<VALUE>['responses'];\n }) {\n this.values = options.values;\n this.embeddings = options.embeddings;\n this.usage = options.usage;\n this.responses = options.responses;\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 {\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 { ImageModelV2, ImageModelV2ProviderMetadata } from '@ai-sdk/provider';\nimport { NoImageGeneratedError } from '../../src/error/no-image-generated-error';\nimport {\n detectMediaType,\n imageMediaTypeSignatures,\n} from '../../src/util/detect-media-type';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport {\n DefaultGeneratedFile,\n GeneratedFile,\n} from '../generate-text/generated-file';\nimport { ImageGenerationWarning } from '../types/image-model';\nimport { ImageModelResponseMetadata } from '../types/image-model-response-metadata';\nimport { ProviderOptions } from '../types/provider-metadata';\nimport { GenerateImageResult } from './generate-image-result';\n\n/**\nGenerates images using an image model.\n\n@param model - The image model to use.\n@param prompt - The prompt that should be used to generate the image.\n@param n - Number of images to generate. Default: 1.\n@param size - Size of the images to generate. Must have the format `{width}x{height}`.\n@param aspectRatio - Aspect ratio of the images to generate. Must have the format `{width}:{height}`.\n@param seed - Seed for the image generation.\n@param providerOptions - Additional provider-specific options that are passed through to the provider\nas body parameters.\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@returns A result object that contains the generated images.\n */\nexport async function generateImage({\n model,\n prompt,\n n = 1,\n maxImagesPerCall,\n size,\n aspectRatio,\n seed,\n providerOptions,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n}: {\n /**\nThe image model to use.\n */\n model: ImageModelV2;\n\n /**\nThe prompt that should be used to generate the image.\n */\n prompt: string;\n\n /**\nNumber of images to generate.\n */\n n?: number;\n\n /**\nNumber of images to generate.\n */\n maxImagesPerCall?: number;\n\n /**\nSize of the images to generate. Must have the format `{width}x{height}`. If not provided, the default size will be used.\n */\n size?: `${number}x${number}`;\n\n /**\nAspect ratio of the images to generate. Must have the format `{width}:{height}`. If not provided, the default aspect ratio will be used.\n */\n aspectRatio?: `${number}:${number}`;\n\n /**\nSeed for the image generation. If not provided, the default seed will be used.\n */\n seed?: number;\n\n /**\nAdditional provider-specific options that are passed through to the provider\nas body parameters.\n\nThe outer record is keyed by the provider name, and the inner\nrecord is keyed by the provider-specific metadata key.\n```ts\n{\n \"openai\": {\n \"style\": \"vivid\"\n }\n}\n```\n */\n providerOptions?: ProviderOptions;\n\n /**\nMaximum number of retries per embedding model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n}): Promise<GenerateImageResult> {\n const { retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n // default to 1 if the model has not specified limits on\n // how many images can be generated in a single call\n const maxImagesPerCallWithDefault =\n maxImagesPerCall ?? (await invokeModelMaxImagesPerCall(model)) ?? 1;\n\n // parallelize calls to the model:\n const callCount = Math.ceil(n / maxImagesPerCallWithDefault);\n const callImageCounts = Array.from({ length: callCount }, (_, i) => {\n if (i < callCount - 1) {\n return maxImagesPerCallWithDefault;\n }\n\n const remainder = n % maxImagesPerCallWithDefault;\n return remainder === 0 ? maxImagesPerCallWithDefault : remainder;\n });\n\n const results = await Promise.all(\n callImageCounts.map(async callImageCount =>\n retry(() =>\n model.doGenerate({\n prompt,\n n: callImageCount,\n abortSignal,\n headers,\n size,\n aspectRatio,\n seed,\n providerOptions: providerOptions ?? {},\n }),\n ),\n ),\n );\n\n // collect result images, warnings, and response metadata\n const images: Array<DefaultGeneratedFile> = [];\n const warnings: Array<ImageGenerationWarning> = [];\n const responses: Array<ImageModelResponseMetadata> = [];\n const providerMetadata: ImageModelV2ProviderMetadata = {};\n for (const result of results) {\n images.push(\n ...result.images.map(\n image =>\n new DefaultGeneratedFile({\n data: image,\n mediaType:\n detectMediaType({\n data: image,\n signatures: imageMediaTypeSignatures,\n }) ?? 'image/png',\n }),\n ),\n );\n warnings.push(...result.warnings);\n\n if (result.providerMetadata) {\n for (const [providerName, metadata] of Object.entries<{\n images: unknown;\n }>(result.providerMetadata)) {\n providerMetadata[providerName] ??= { images: [] };\n providerMetadata[providerName].images.push(\n ...result.providerMetadata[providerName].images,\n );\n }\n }\n\n responses.push(result.response);\n }\n\n if (!images.length) {\n throw new NoImageGeneratedError({ responses });\n }\n\n return new DefaultGenerateImageResult({\n images,\n warnings,\n responses,\n providerMetadata,\n });\n}\n\nclass DefaultGenerateImageResult implements GenerateImageResult {\n readonly images: Array<GeneratedFile>;\n readonly warnings: Array<ImageGenerationWarning>;\n readonly responses: Array<ImageModelResponseMetadata>;\n readonly providerMetadata: ImageModelV2ProviderMetadata;\n\n constructor(options: {\n images: Array<GeneratedFile>;\n warnings: Array<ImageGenerationWarning>;\n responses: Array<ImageModelResponseMetadata>;\n providerMetadata: ImageModelV2ProviderMetadata;\n }) {\n this.images = options.images;\n this.warnings = options.warnings;\n this.responses = options.responses;\n this.providerMetadata = options.providerMetadata;\n }\n\n get image() {\n return this.images[0];\n }\n}\n\nasync function invokeModelMaxImagesPerCall(model: ImageModelV2) {\n const isFunction = model.maxImagesPerCall instanceof Function;\n\n if (!isFunction) {\n return model.maxImagesPerCall;\n }\n\n return model.maxImagesPerCall({\n modelId: model.modelId,\n });\n}\n","import {\n JSONParseError,\n JSONValue,\n TypeValidationError,\n} from '@ai-sdk/provider';\nimport {\n createIdGenerator,\n safeParseJSON,\n Schema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../src/error/no-object-generated-error';\nimport { prepareHeaders } from '../../src/util/prepare-headers';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport { extractContentText } from '../generate-text/extract-content-text';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\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 {\n CallWarning,\n FinishReason,\n LanguageModel,\n} from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata, ProviderOptions } from '../types/provider-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { GenerateObjectResult } from './generate-object-result';\nimport { getOutputStrategy } from './output-strategy';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\nimport { resolveLanguageModel } from '../prompt/resolve-language-model';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\nA function that attempts to repair the raw output of the mode\nto enable JSON parsing.\n\nShould return the repaired text or null if the text cannot be repaired.\n */\nexport type RepairTextFunction = (options: {\n text: string;\n error: JSONParseError | TypeValidationError;\n}) => Promise<string | null>;\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamObject` 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 schema - The schema of the object that the model should generate.\n@param schemaName - Optional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n@param schemaDescription - Optional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n\n@param output - The type of the output.\n\n- 'object': The output is an object.\n- 'array': The output is an array.\n- 'enum': The output is an enum.\n- 'no-schema': The output is not a schema.\n\n@param experimental_repairText - A function that attempts to repair the raw output of the mode\nto enable JSON parsing.\n\n@param experimental_telemetry - Optional telemetry configuration (experimental).\n\n@param providerOptions - Additional 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@returns\nA result object that contains the generated object, the finish reason, the token usage, and additional information.\n */\nexport async function generateObject<\n RESULT extends SCHEMA extends z.Schema\n ? Output extends 'array'\n ? Array<z.infer<SCHEMA>>\n : z.infer<SCHEMA>\n : SCHEMA extends Schema<infer T>\n ? Output extends 'array'\n ? Array<T>\n : T\n : never,\n SCHEMA extends z.Schema | Schema = z.Schema<JSONValue>,\n Output extends\n | 'object'\n | 'array'\n | 'enum'\n | 'no-schema' = RESULT extends string ? 'enum' : 'object',\n>(\n options: Omit<CallSettings, 'stopSequences'> &\n Prompt &\n (Output extends 'enum'\n ? {\n /**\nThe enum values that the model should use.\n */\n enum: Array<RESULT>;\n mode?: 'json';\n output: 'enum';\n }\n : Output extends 'no-schema'\n ? {}\n : {\n /**\nThe schema of the object that the model should generate.\n */\n schema: SCHEMA;\n\n /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n */\n schemaName?: string;\n\n /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n */\n schemaDescription?: string;\n\n /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n */\n mode?: 'auto' | 'json' | 'tool';\n }) & {\n output?: Output;\n\n /**\n The language model to use.\n */\n model: LanguageModel;\n /**\n A function that attempts to repair the raw output of the mode\n to enable JSON parsing.\n */\n experimental_repairText?: RepairTextFunction;\n\n /**\n Optional telemetry configuration (experimental).\n */\n\n experimental_telemetry?: TelemetrySettings;\n\n /**\n Additional provider-specific options. They are passed through\n to the provider from the AI SDK and enable provider-specific\n functionality that can be fully encapsulated in the provider.\n */\n providerOptions?: ProviderOptions;\n\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n generateId?: () => string;\n currentDate?: () => Date;\n };\n },\n): Promise<GenerateObjectResult<RESULT>> {\n const {\n model: modelArg,\n output = 'object',\n system,\n prompt,\n messages,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n experimental_repairText: repairText,\n experimental_telemetry: telemetry,\n providerOptions,\n _internal: {\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n } = {},\n ...settings\n } = options;\n\n const model = resolveLanguageModel(modelArg);\n\n const enumValues = 'enum' in options ? options.enum : undefined;\n const {\n schema: inputSchema,\n schemaDescription,\n schemaName,\n } = 'schema' in options ? options : {};\n\n validateObjectGenerationInput({\n output,\n schema: inputSchema,\n schemaName,\n schemaDescription,\n enumValues,\n });\n\n const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n const outputStrategy = getOutputStrategy({\n output,\n schema: inputSchema,\n enumValues,\n });\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 tracer = getTracer(telemetry);\n\n return recordSpan({\n name: 'ai.generateObject',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateObject',\n telemetry,\n }),\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 'ai.schema':\n outputStrategy.jsonSchema != null\n ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n : undefined,\n 'ai.schema.name': schemaName,\n 'ai.schema.description': schemaDescription,\n 'ai.settings.output': outputStrategy.type,\n },\n }),\n tracer,\n fn: async span => {\n let result: string;\n let finishReason: FinishReason;\n let usage: LanguageModelUsage;\n let warnings: CallWarning[] | undefined;\n let response: LanguageModelResponseMetadata;\n let request: LanguageModelRequestMetadata;\n let resultProviderMetadata: ProviderMetadata | undefined;\n\n const standardizedPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n });\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: standardizedPrompt,\n supportedUrls: await model.supportedUrls,\n });\n\n const generateResult = await retry(() =>\n recordSpan({\n name: 'ai.generateObject.doGenerate',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateObject.doGenerate',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n 'ai.prompt.messages': {\n input: () => stringifyForTelemetry(promptMessages),\n },\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.system': model.provider,\n 'gen_ai.request.model': model.modelId,\n 'gen_ai.request.frequency_penalty': callSettings.frequencyPenalty,\n 'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n 'gen_ai.request.presence_penalty': callSettings.presencePenalty,\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 fn: async span => {\n const result = await model.doGenerate({\n responseFormat: {\n type: 'json',\n schema: outputStrategy.jsonSchema,\n name: schemaName,\n description: schemaDescription,\n },\n ...prepareCallSettings(settings),\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers,\n });\n\n const responseData = {\n id: result.response?.id ?? generateId(),\n timestamp: result.response?.timestamp ?? currentDate(),\n modelId: result.response?.modelId ?? model.modelId,\n headers: result.response?.headers,\n body: result.response?.body,\n };\n\n const text = extractContentText(result.content);\n\n if (text === undefined) {\n throw new NoObjectGeneratedError({\n message:\n 'No object generated: the model did not return a response.',\n response: responseData,\n usage: result.usage,\n finishReason: result.finishReason,\n });\n }\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': result.finishReason,\n 'ai.response.object': { output: () => text },\n 'ai.response.id': responseData.id,\n 'ai.response.model': responseData.modelId,\n 'ai.response.timestamp': responseData.timestamp.toISOString(),\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': result.usage.inputTokens,\n 'ai.usage.completionTokens': result.usage.outputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [result.finishReason],\n 'gen_ai.response.id': responseData.id,\n 'gen_ai.response.model': responseData.modelId,\n 'gen_ai.usage.input_tokens': result.usage.inputTokens,\n 'gen_ai.usage.output_tokens': result.usage.outputTokens,\n },\n }),\n );\n\n return { ...result, objectText: text, responseData };\n },\n }),\n );\n\n result = generateResult.objectText;\n finishReason = generateResult.finishReason;\n usage = generateResult.usage;\n warnings = generateResult.warnings;\n resultProviderMetadata = generateResult.providerMetadata;\n request = generateResult.request ?? {};\n response = generateResult.responseData;\n\n async function processResult(result: string): Promise<RESULT> {\n const parseResult = await safeParseJSON({ text: result });\n\n if (!parseResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: could not parse the response.',\n cause: parseResult.error,\n text: result,\n response,\n usage,\n finishReason,\n });\n }\n\n const validationResult = await outputStrategy.validateFinalResult(\n parseResult.value,\n {\n text: result,\n response,\n usage,\n },\n );\n\n if (!validationResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: response did not match schema.',\n cause: validationResult.error,\n text: result,\n response,\n usage,\n finishReason,\n });\n }\n\n return validationResult.value;\n }\n\n let object: RESULT;\n try {\n object = await processResult(result);\n } catch (error) {\n if (\n repairText != null &&\n NoObjectGeneratedError.isInstance(error) &&\n (JSONParseError.isInstance(error.cause) ||\n TypeValidationError.isInstance(error.cause))\n ) {\n const repairedText = await repairText({\n text: result,\n error: error.cause,\n });\n\n if (repairedText === null) {\n throw error;\n }\n\n object = await processResult(repairedText);\n } else {\n throw error;\n }\n }\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': finishReason,\n 'ai.response.object': {\n output: () => JSON.stringify(object),\n },\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': usage.inputTokens,\n 'ai.usage.completionTokens': usage.outputTokens,\n },\n }),\n );\n\n return new DefaultGenerateObjectResult({\n object,\n finishReason,\n usage,\n warnings,\n request,\n response,\n providerMetadata: resultProviderMetadata,\n });\n },\n });\n}\n\nclass DefaultGenerateObjectResult<T> implements GenerateObjectResult<T> {\n readonly object: GenerateObjectResult<T>['object'];\n readonly finishReason: GenerateObjectResult<T>['finishReason'];\n readonly usage: GenerateObjectResult<T>['usage'];\n readonly warnings: GenerateObjectResult<T>['warnings'];\n readonly providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n readonly response: GenerateObjectResult<T>['response'];\n readonly request: GenerateObjectResult<T>['request'];\n\n constructor(options: {\n object: GenerateObjectResult<T>['object'];\n finishReason: GenerateObjectResult<T>['finishReason'];\n usage: GenerateObjectResult<T>['usage'];\n warnings: GenerateObjectResult<T>['warnings'];\n providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n response: GenerateObjectResult<T>['response'];\n request: GenerateObjectResult<T>['request'];\n }) {\n this.object = options.object;\n this.finishReason = options.finishReason;\n this.usage = options.usage;\n this.warnings = options.warnings;\n this.providerMetadata = options.providerMetadata;\n this.response = options.response;\n this.request = options.request;\n }\n\n toJsonResponse(init?: ResponseInit): Response {\n return new Response(JSON.stringify(this.object), {\n status: init?.status ?? 200,\n headers: prepareHeaders(init?.headers, {\n 'content-type': 'application/json; charset=utf-8',\n }),\n });\n }\n}\n","import { LanguageModelV2Content, LanguageModelV2Text } from '@ai-sdk/provider';\n\nexport function extractContentText(\n content: LanguageModelV2Content[],\n): string | undefined {\n const parts = content.filter(\n (content): content is LanguageModelV2Text => content.type === 'text',\n );\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.map(content => content.text).join('');\n}\n","import {\n LanguageModelV2FilePart,\n LanguageModelV2Message,\n LanguageModelV2Prompt,\n LanguageModelV2TextPart,\n} from '@ai-sdk/provider';\nimport { isUrlSupported } from '@ai-sdk/provider-utils';\nimport {\n detectMediaType,\n imageMediaTypeSignatures,\n} from '../../src/util/detect-media-type';\nimport { download } from '../../src/util/download';\nimport { ModelMessage } from '../prompt/message';\nimport { FilePart, ImagePart, TextPart } from './content-part';\nimport {\n convertToLanguageModelV2DataContent,\n DataContent,\n} 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: 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 args: part.args,\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',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result: part.result,\n content: part.experimental_content,\n isError: part.isError,\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 ?? 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 { 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} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { InvalidDataContentError } from './invalid-data-content-error';\nimport { splitDataUrl } from './split-data-url';\n\n/**\nData content. Can either be a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer.\n */\nexport type DataContent = string | Uint8Array | ArrayBuffer | Buffer;\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(\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 { 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 { InvalidPromptError } from '@ai-sdk/provider';\nimport { safeValidateTypes } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { ModelMessage, 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 { z } from 'zod';\nimport {\n providerMetadataSchema,\n ProviderOptions,\n} from '../types/provider-metadata';\nimport {\n FilePart,\n filePartSchema,\n ImagePart,\n imagePartSchema,\n ReasoningPart,\n reasoningPartSchema,\n TextPart,\n textPartSchema,\n ToolCallPart,\n toolCallPartSchema,\n ToolResultPart,\n toolResultPartSchema,\n} from './content-part';\n\n/**\n A system message. It can contain system information.\n\n Note: using the \"system\" part of the prompt is strongly preferred\n to increase the resilience against prompt injection attacks,\n and because not all providers support several system messages.\n */\nexport type SystemModelMessage = {\n role: 'system';\n content: string;\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@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/**\nA user message. It can contain text or a combination of text and images.\n */\nexport type UserModelMessage = {\n role: 'user';\n content: UserContent;\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@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/**\nContent of a user message. It can be a string or an array of text and image parts.\n */\nexport type UserContent = string | Array<TextPart | ImagePart | FilePart>;\n\n/**\nAn assistant message. It can contain text, tool calls, or a combination of text and tool calls.\n */\nexport type AssistantModelMessage = {\n role: 'assistant';\n content: AssistantContent;\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@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 ]),\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/**\nContent of an assistant message.\nIt can be a string or an array of text, image, reasoning, redacted reasoning, and tool call parts.\n */\nexport type AssistantContent =\n | string\n | Array<TextPart | FilePart | ReasoningPart | ToolCallPart>;\n\n/**\nA tool message. It contains the result of one or more tool calls.\n */\nexport type ToolModelMessage = {\n role: 'tool';\n content: ToolContent;\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@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/**\nContent of a tool message. It is an array of tool result parts.\n */\nexport type ToolContent = Array<ToolResultPart>;\n\n/**\nA message that can be used in the `messages` field of a prompt.\nIt can be a user message, an assistant message, or a tool message.\n */\nexport type ModelMessage =\n | SystemModelMessage\n | UserModelMessage\n | AssistantModelMessage\n | ToolModelMessage;\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';\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\n/**\nAdditional provider-specific options.\n\nThey are passed through to the provider from the AI SDK and enable\nprovider-specific functionality that can be fully encapsulated in the provider.\n */\nexport type ProviderOptions = SharedV2ProviderOptions;\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';\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 { z } from 'zod';\nimport {\n providerMetadataSchema,\n ProviderOptions,\n} from '../types/provider-metadata';\nimport { DataContent, dataContentSchema } from './data-content';\nimport {\n ToolResultContent,\n toolResultContentSchema,\n} from './tool-result-content';\n\n/**\nText content part of a prompt. It contains a string of text.\n */\nexport interface TextPart {\n type: 'text';\n\n /**\nThe text content.\n */\n text: string;\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 textPartSchema: z.ZodType<TextPart> = z.object({\n type: z.literal('text'),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\nImage content part of a prompt. It contains an image.\n */\nexport interface ImagePart {\n type: 'image';\n\n /**\nImage data. Can either be:\n\n- data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer\n- URL: a URL that points to the image\n */\n image: DataContent | URL;\n\n /**\nOptional IANA media type of the image.\n\n@see https://www.iana.org/assignments/media-types/media-types.xhtml\n */\n mediaType?: string;\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 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/**\nFile content part of a prompt. It contains a file.\n */\nexport interface FilePart {\n type: 'file';\n\n /**\nFile data. Can either be:\n\n- data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer\n- URL: a URL that points to the image\n */\n data: DataContent | URL;\n\n /**\nOptional filename of the file.\n */\n filename?: string;\n\n /**\nIANA media type of the file.\n\n@see https://www.iana.org/assignments/media-types/media-types.xhtml\n */\n mediaType: string;\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 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 * Reasoning content part of a prompt. It contains a reasoning.\n */\nexport interface ReasoningPart {\n type: 'reasoning';\n\n /**\nThe reasoning text.\n */\n text: string;\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 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 args: 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 args: z.unknown(),\n providerOptions: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolCallPart>; // necessary bc args is optional on Zod type\n\n/**\nTool result content part of a prompt. It contains the result of the tool call with the matching ID.\n */\nexport interface ToolResultPart {\n type: 'tool-result';\n\n /**\nID of the tool call that this result is associated with.\n */\n toolCallId: string;\n\n /**\nName of the tool that generated this result.\n */\n toolName: string;\n\n /**\nResult of the tool call. This is a JSON-serializable object.\n */\n result: unknown;\n\n /**\nMulti-part content of the tool result. Only for tools that support multipart results.\n */\n experimental_content?: ToolResultContent;\n\n /**\nOptional flag if the result is an error or an error message.\n */\n isError?: boolean;\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 toolResultPartSchema: z.ZodType<ToolResultPart> = z.object({\n type: z.literal('tool-result'),\n toolCallId: z.string(),\n toolName: z.string(),\n result: z.unknown(),\n content: toolResultContentSchema.optional(),\n isError: z.boolean().optional(),\n providerOptions: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolResultPart>; // necessary bc result is optional on Zod type\n","import { ToolResultContent } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport type { ToolResultContent };\n\nexport const toolResultContentSchema: z.ZodType<ToolResultContent> = z.array(\n z.union([\n z.object({ type: z.literal('text'), text: z.string() }),\n z.object({\n type: z.literal('image'),\n data: z.string(),\n mediaType: z.string().optional(),\n }),\n ]),\n);\n\nexport function isToolResultContent(\n value: unknown,\n): value is ToolResultContent {\n if (!Array.isArray(value) || value.length === 0) {\n return false;\n }\n\n return value.every(part => {\n if (typeof part !== 'object' || part === null) {\n return false;\n }\n\n if (part.type === 'text') {\n return typeof part.text === 'string';\n }\n\n if (part.type === 'image') {\n return (\n typeof part.data === 'string' &&\n (part.mimeType === undefined || typeof part.mimeType === 'string')\n );\n }\n\n return false;\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 {\n isJSONArray,\n isJSONObject,\n JSONObject,\n JSONSchema7,\n JSONValue,\n TypeValidationError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n asSchema,\n safeValidateTypes,\n Schema,\n ValidationResult,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../src/error/no-object-generated-error';\nimport {\n AsyncIterableStream,\n createAsyncIterableStream,\n} from '../../src/util/async-iterable-stream';\nimport { DeepPartial } from '../../src/util/deep-partial';\nimport {\n FinishReason,\n LanguageModelResponseMetadata,\n LanguageModelUsage,\n} from '../types';\nimport { ObjectStreamPart } from './stream-object-result';\n\nexport interface OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM> {\n readonly type: 'object' | 'array' | 'enum' | 'no-schema';\n readonly jsonSchema: JSONSchema7 | undefined;\n\n validatePartialResult({\n value,\n textDelta,\n isFinalDelta,\n }: {\n value: JSONValue;\n textDelta: string;\n isFirstDelta: boolean;\n isFinalDelta: boolean;\n latestObject: PARTIAL | undefined;\n }): Promise<\n ValidationResult<{\n partial: PARTIAL;\n textDelta: string;\n }>\n >;\n validateFinalResult(\n value: JSONValue | undefined,\n context: {\n text: string;\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n },\n ): Promise<ValidationResult<RESULT>>;\n\n createElementStream(\n originalStream: ReadableStream<ObjectStreamPart<PARTIAL>>,\n ): ELEMENT_STREAM;\n}\n\nconst noSchemaOutputStrategy: OutputStrategy<JSONValue, JSONValue, never> = {\n type: 'no-schema',\n jsonSchema: undefined,\n\n async validatePartialResult({ value, textDelta }) {\n return { success: true, value: { partial: value, textDelta } };\n },\n\n async validateFinalResult(\n value: JSONValue | undefined,\n context: {\n text: string;\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n ): Promise<ValidationResult<JSONValue>> {\n return value === undefined\n ? {\n success: false,\n error: new NoObjectGeneratedError({\n message: 'No object generated: response did not match schema.',\n text: context.text,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason,\n }),\n }\n : { success: true, value };\n },\n\n createElementStream() {\n throw new UnsupportedFunctionalityError({\n functionality: 'element streams in no-schema mode',\n });\n },\n};\n\nconst objectOutputStrategy = <OBJECT>(\n schema: Schema<OBJECT>,\n): OutputStrategy<DeepPartial<OBJECT>, OBJECT, never> => ({\n type: 'object',\n jsonSchema: schema.jsonSchema,\n\n async validatePartialResult({ value, textDelta }) {\n return {\n success: true,\n value: {\n // Note: currently no validation of partial results:\n partial: value as DeepPartial<OBJECT>,\n textDelta,\n },\n };\n },\n\n async validateFinalResult(\n value: JSONValue | undefined,\n ): Promise<ValidationResult<OBJECT>> {\n return safeValidateTypes({ value, schema });\n },\n\n createElementStream() {\n throw new UnsupportedFunctionalityError({\n functionality: 'element streams in object mode',\n });\n },\n});\n\nconst arrayOutputStrategy = <ELEMENT>(\n schema: Schema<ELEMENT>,\n): OutputStrategy<ELEMENT[], ELEMENT[], AsyncIterableStream<ELEMENT>> => {\n // remove $schema from schema.jsonSchema:\n const { $schema, ...itemSchema } = schema.jsonSchema;\n\n return {\n type: 'enum',\n\n // wrap in object that contains array of elements, since most LLMs will not\n // be able to generate an array directly:\n // possible future optimization: use arrays directly when model supports grammar-guided generation\n jsonSchema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n elements: { type: 'array', items: itemSchema },\n },\n required: ['elements'],\n additionalProperties: false,\n },\n\n async validatePartialResult({\n value,\n latestObject,\n isFirstDelta,\n isFinalDelta,\n }) {\n // check that the value is an object that contains an array of elements:\n if (!isJSONObject(value) || !isJSONArray(value.elements)) {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be an object that contains an array of elements',\n }),\n };\n }\n\n const inputArray = value.elements as Array<JSONObject>;\n const resultArray: Array<ELEMENT> = [];\n\n for (let i = 0; i < inputArray.length; i++) {\n const element = inputArray[i];\n const result = await safeValidateTypes({ value: element, schema });\n\n // special treatment for last processed element:\n // ignore parse or validation failures, since they indicate that the\n // last element is incomplete and should not be included in the result,\n // unless it is the final delta\n if (i === inputArray.length - 1 && !isFinalDelta) {\n continue;\n }\n\n if (!result.success) {\n return result;\n }\n\n resultArray.push(result.value);\n }\n\n // calculate delta:\n const publishedElementCount = latestObject?.length ?? 0;\n\n let textDelta = '';\n\n if (isFirstDelta) {\n textDelta += '[';\n }\n\n if (publishedElementCount > 0) {\n textDelta += ',';\n }\n\n textDelta += resultArray\n .slice(publishedElementCount) // only new elements\n .map(element => JSON.stringify(element))\n .join(',');\n\n if (isFinalDelta) {\n textDelta += ']';\n }\n\n return {\n success: true,\n value: {\n partial: resultArray,\n textDelta,\n },\n };\n },\n\n async validateFinalResult(\n value: JSONValue | undefined,\n ): Promise<ValidationResult<Array<ELEMENT>>> {\n // check that the value is an object that contains an array of elements:\n if (!isJSONObject(value) || !isJSONArray(value.elements)) {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be an object that contains an array of elements',\n }),\n };\n }\n\n const inputArray = value.elements as Array<JSONObject>;\n\n // check that each element in the array is of the correct type:\n for (const element of inputArray) {\n const result = await safeValidateTypes({ value: element, schema });\n if (!result.success) {\n return result;\n }\n }\n\n return { success: true, value: inputArray as Array<ELEMENT> };\n },\n\n createElementStream(\n originalStream: ReadableStream<ObjectStreamPart<ELEMENT[]>>,\n ) {\n let publishedElements = 0;\n\n return createAsyncIterableStream(\n originalStream.pipeThrough(\n new TransformStream<ObjectStreamPart<ELEMENT[]>, ELEMENT>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'object': {\n const array = chunk.object;\n\n // publish new elements one by one:\n for (\n ;\n publishedElements < array.length;\n publishedElements++\n ) {\n controller.enqueue(array[publishedElements]);\n }\n\n break;\n }\n\n case 'text-delta':\n case 'finish':\n case 'error': // suppress error (use onError instead)\n break;\n\n default: {\n const _exhaustiveCheck: never = chunk;\n throw new Error(\n `Unsupported chunk type: ${_exhaustiveCheck}`,\n );\n }\n }\n },\n }),\n ),\n );\n },\n };\n};\n\nconst enumOutputStrategy = <ENUM extends string>(\n enumValues: Array<ENUM>,\n): OutputStrategy<string, ENUM, never> => {\n return {\n type: 'enum',\n\n // wrap in object that contains result, since most LLMs will not\n // be able to generate an enum value directly:\n // possible future optimization: use enums directly when model supports top-level enums\n jsonSchema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n result: { type: 'string', enum: enumValues },\n },\n required: ['result'],\n additionalProperties: false,\n },\n\n async validateFinalResult(\n value: JSONValue | undefined,\n ): Promise<ValidationResult<ENUM>> {\n // check that the value is an object that contains an array of elements:\n if (!isJSONObject(value) || typeof value.result !== 'string') {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause:\n 'value must be an object that contains a string in the \"result\" property.',\n }),\n };\n }\n\n const result = value.result as string;\n\n return enumValues.includes(result as ENUM)\n ? { success: true, value: result as ENUM }\n : {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be a string in the enum',\n }),\n };\n },\n\n async validatePartialResult({ value, textDelta }) {\n if (!isJSONObject(value) || typeof value.result !== 'string') {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause:\n 'value must be an object that contains a string in the \"result\" property.',\n }),\n };\n }\n\n const result = value.result as string;\n const possibleEnumValues = enumValues.filter(enumValue =>\n enumValue.startsWith(result),\n );\n\n if (value.result.length === 0 || possibleEnumValues.length === 0) {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be a string in the enum',\n }),\n };\n }\n\n return {\n success: true,\n value: {\n partial:\n possibleEnumValues.length > 1 ? result : possibleEnumValues[0],\n textDelta,\n },\n };\n },\n\n createElementStream() {\n // no streaming in enum mode\n throw new UnsupportedFunctionalityError({\n functionality: 'element streams in enum mode',\n });\n },\n };\n};\n\nexport function getOutputStrategy<SCHEMA>({\n output,\n schema,\n enumValues,\n}: {\n output: 'object' | 'array' | 'enum' | 'no-schema';\n schema?: z.Schema<SCHEMA, z.ZodTypeDef, any> | Schema<SCHEMA>;\n enumValues?: Array<SCHEMA>;\n}): OutputStrategy<any, any, any> {\n switch (output) {\n case 'object':\n return objectOutputStrategy(asSchema(schema!));\n case 'array':\n return arrayOutputStrategy(asSchema(schema!));\n case 'enum':\n return enumOutputStrategy(enumValues! as Array<string>);\n case 'no-schema':\n return noSchemaOutputStrategy;\n default: {\n const _exhaustiveCheck: never = output;\n throw new Error(`Unsupported output: ${_exhaustiveCheck}`);\n }\n }\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","import { Schema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { InvalidArgumentError } from '../../src/error/invalid-argument-error';\n\nexport function validateObjectGenerationInput({\n output,\n schema,\n schemaName,\n schemaDescription,\n enumValues,\n}: {\n output?: 'object' | 'array' | 'enum' | 'no-schema';\n schema?: z.Schema<any, z.ZodTypeDef, any> | Schema<any>;\n schemaName?: string;\n schemaDescription?: string;\n enumValues?: Array<unknown>;\n}) {\n if (\n output != null &&\n output !== 'object' &&\n output !== 'array' &&\n output !== 'enum' &&\n output !== 'no-schema'\n ) {\n throw new InvalidArgumentError({\n parameter: 'output',\n value: output,\n message: 'Invalid output type.',\n });\n }\n\n if (output === 'no-schema') {\n if (schema != null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Schema is not supported for no-schema output.',\n });\n }\n\n if (schemaDescription != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaDescription',\n value: schemaDescription,\n message: 'Schema description is not supported for no-schema output.',\n });\n }\n\n if (schemaName != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaName',\n value: schemaName,\n message: 'Schema name is not supported for no-schema output.',\n });\n }\n\n if (enumValues != null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are not supported for no-schema output.',\n });\n }\n }\n\n if (output === 'object') {\n if (schema == null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Schema is required for object output.',\n });\n }\n\n if (enumValues != null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are not supported for object output.',\n });\n }\n }\n\n if (output === 'array') {\n if (schema == null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Element schema is required for array output.',\n });\n }\n\n if (enumValues != null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are not supported for array output.',\n });\n }\n }\n\n if (output === 'enum') {\n if (schema != null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Schema is not supported for enum output.',\n });\n }\n\n if (schemaDescription != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaDescription',\n value: schemaDescription,\n message: 'Schema description is not supported for enum output.',\n });\n }\n\n if (schemaName != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaName',\n value: schemaName,\n message: 'Schema name is not supported for enum output.',\n });\n }\n\n if (enumValues == null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are required for enum output.',\n });\n }\n\n for (const value of enumValues) {\n if (typeof value !== 'string') {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value,\n message: 'Enum values must be strings.',\n });\n }\n }\n }\n}\n","import { gateway } from '@ai-sdk/gateway';\nimport { LanguageModelV2 } from '@ai-sdk/provider';\nimport { LanguageModel } from '../types/language-model';\n\nexport function resolveLanguageModel(model: LanguageModel): LanguageModelV2 {\n return typeof model === 'string' ? gateway.languageModel(model) : model;\n}\n","import {\n JSONValue,\n LanguageModelV2CallWarning,\n LanguageModelV2FinishReason,\n LanguageModelV2StreamPart,\n LanguageModelV2Usage,\n SharedV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport { createIdGenerator, Schema } from '@ai-sdk/provider-utils';\nimport { ServerResponse } from 'http';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../src/error/no-object-generated-error';\nimport { createTextStreamResponse } from '../../src/text-stream/create-text-stream-response';\nimport { pipeTextStreamToResponse } from '../../src/text-stream/pipe-text-stream-to-response';\nimport { DeepPartial, isDeepEqualData, parsePartialJson } from '../../src/util';\nimport {\n AsyncIterableStream,\n createAsyncIterableStream,\n} from '../../src/util/async-iterable-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 { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\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 { CallWarning, LanguageModel } from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata, ProviderOptions } from '../types/provider-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { getOutputStrategy, OutputStrategy } from './output-strategy';\nimport { ObjectStreamPart, StreamObjectResult } from './stream-object-result';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\nimport { resolveLanguageModel } from '../prompt/resolve-language-model';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\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 StreamObjectOnErrorCallback = (event: {\n error: unknown;\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 StreamObjectOnFinishCallback<RESULT> = (event: {\n /**\nThe token usage of the generated response.\n*/\n usage: LanguageModelUsage;\n\n /**\nThe generated object. Can be undefined if the final object does not match the schema.\n*/\n object: RESULT | undefined;\n\n /**\nOptional error object. This is e.g. a TypeValidationError when the final object does not match the schema.\n*/\n error: unknown | undefined;\n\n /**\nResponse metadata.\n */\n response: LanguageModelResponseMetadata;\n\n /**\nWarnings from the model provider (e.g. unsupported settings).\n*/\n warnings?: CallWarning[];\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 providerMetadata: ProviderMetadata | undefined;\n}) => Promise<void> | void;\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateObject` 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 schema - The schema of the object that the model should generate.\n@param schemaName - Optional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n@param schemaDescription - Optional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n\n@param output - The type of the output.\n\n- 'object': The output is an object.\n- 'array': The output is an array.\n- 'enum': The output is an enum.\n- 'no-schema': The output is not a schema.\n\n@param experimental_telemetry - Optional telemetry configuration (experimental).\n\n@param providerOptions - Additional 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@returns\nA result object for accessing the partial object stream and additional information.\n */\nexport function streamObject<\n RESULT extends SCHEMA extends z.Schema\n ? Output extends 'array'\n ? Array<z.infer<SCHEMA>>\n : z.infer<SCHEMA>\n : SCHEMA extends Schema<infer T>\n ? Output extends 'array'\n ? Array<T>\n : T\n : never,\n SCHEMA extends z.Schema | Schema = z.Schema<JSONValue>,\n Output extends\n | 'object'\n | 'array'\n | 'enum'\n | 'no-schema' = RESULT extends string ? 'enum' : 'object',\n>(\n options: Omit<CallSettings, 'stopSequences'> &\n Prompt &\n (Output extends 'enum'\n ? {\n /**\nThe enum values that the model should use.\n */\n enum: Array<RESULT>;\n mode?: 'json';\n output: 'enum';\n }\n : Output extends 'no-schema'\n ? {}\n : {\n /**\nThe schema of the object that the model should generate.\n */\n schema: SCHEMA;\n\n /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n */\n schemaName?: string;\n\n /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n */\n schemaDescription?: string;\n\n /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n */\n mode?: 'auto' | 'json' | 'tool';\n }) & {\n output?: Output;\n\n /**\nThe language model to use.\n */\n model: LanguageModel;\n\n /**\nOptional telemetry configuration (experimental).\n */\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 /**\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?: StreamObjectOnErrorCallback;\n\n /**\nCallback that is called when the LLM response and the final object validation are finished.\n*/\n onFinish?: StreamObjectOnFinishCallback<RESULT>;\n\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n generateId?: () => string;\n currentDate?: () => Date;\n now?: () => number;\n };\n },\n): StreamObjectResult<\n Output extends 'enum'\n ? string\n : Output extends 'array'\n ? RESULT\n : DeepPartial<RESULT>,\n Output extends 'array' ? RESULT : RESULT,\n Output extends 'array'\n ? RESULT extends Array<infer U>\n ? AsyncIterableStream<U>\n : never\n : never\n> {\n const {\n model,\n output = 'object',\n system,\n prompt,\n messages,\n maxRetries,\n abortSignal,\n headers,\n experimental_telemetry: telemetry,\n providerOptions,\n onError,\n onFinish,\n _internal: {\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n now = originalNow,\n } = {},\n ...settings\n } = options;\n\n const enumValues =\n 'enum' in options && options.enum ? options.enum : undefined;\n\n const {\n schema: inputSchema,\n schemaDescription,\n schemaName,\n } = 'schema' in options ? options : {};\n\n validateObjectGenerationInput({\n output,\n schema: inputSchema,\n schemaName,\n schemaDescription,\n enumValues,\n });\n\n const outputStrategy = getOutputStrategy({\n output,\n schema: inputSchema,\n enumValues,\n });\n\n return new DefaultStreamObjectResult({\n model,\n telemetry,\n headers,\n settings,\n maxRetries,\n abortSignal,\n outputStrategy,\n system,\n prompt,\n messages,\n schemaName,\n schemaDescription,\n providerOptions,\n onError,\n onFinish,\n generateId,\n currentDate,\n now,\n });\n}\n\nclass DefaultStreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM>\n implements StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM>\n{\n private readonly _object = new DelayedPromise<RESULT>();\n private readonly _usage = new DelayedPromise<LanguageModelUsage>();\n private readonly _providerMetadata = new DelayedPromise<\n ProviderMetadata | undefined\n >();\n private readonly _warnings = new DelayedPromise<CallWarning[] | undefined>();\n private readonly _request =\n new DelayedPromise<LanguageModelRequestMetadata>();\n private readonly _response =\n new DelayedPromise<LanguageModelResponseMetadata>();\n\n private readonly baseStream: ReadableStream<ObjectStreamPart<PARTIAL>>;\n\n private readonly outputStrategy: OutputStrategy<\n PARTIAL,\n RESULT,\n ELEMENT_STREAM\n >;\n\n constructor({\n model: modelArg,\n headers,\n telemetry,\n settings,\n maxRetries: maxRetriesArg,\n abortSignal,\n outputStrategy,\n system,\n prompt,\n messages,\n schemaName,\n schemaDescription,\n providerOptions,\n onError,\n onFinish,\n generateId,\n currentDate,\n now,\n }: {\n model: LanguageModel;\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 outputStrategy: OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM>;\n system: Prompt['system'];\n prompt: Prompt['prompt'];\n messages: Prompt['messages'];\n schemaName: string | undefined;\n schemaDescription: string | undefined;\n providerOptions: ProviderOptions | undefined;\n onError: StreamObjectOnErrorCallback | undefined;\n onFinish: StreamObjectOnFinishCallback<RESULT> | undefined;\n generateId: () => string;\n currentDate: () => Date;\n now: () => number;\n }) {\n const model = resolveLanguageModel(modelArg);\n\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n });\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 tracer = getTracer(telemetry);\n const self = this;\n\n const stitchableStream =\n createStitchableStream<ObjectStreamPart<PARTIAL>>();\n\n const eventProcessor = new TransformStream<\n ObjectStreamPart<PARTIAL>,\n ObjectStreamPart<PARTIAL>\n >({\n transform(chunk, controller) {\n controller.enqueue(chunk);\n\n if (chunk.type === 'error') {\n onError?.({ error: chunk.error });\n }\n },\n });\n\n this.baseStream = stitchableStream.stream.pipeThrough(eventProcessor);\n\n recordSpan({\n name: 'ai.streamObject',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.streamObject',\n telemetry,\n }),\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 'ai.schema':\n outputStrategy.jsonSchema != null\n ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n : undefined,\n 'ai.schema.name': schemaName,\n 'ai.schema.description': schemaDescription,\n 'ai.settings.output': outputStrategy.type,\n },\n }),\n tracer,\n endWhenDone: false,\n fn: async rootSpan => {\n const standardizedPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n });\n\n const callOptions = {\n responseFormat: {\n type: 'json' as const,\n schema: outputStrategy.jsonSchema,\n name: schemaName,\n description: schemaDescription,\n },\n ...prepareCallSettings(settings),\n prompt: await convertToLanguageModelPrompt({\n prompt: standardizedPrompt,\n supportedUrls: await model.supportedUrls,\n }),\n providerOptions,\n abortSignal,\n headers,\n };\n\n const transformer: Transformer<\n LanguageModelV2StreamPart,\n ObjectStreamInputPart\n > = {\n transform: (chunk, controller) => {\n switch (chunk.type) {\n case 'text':\n controller.enqueue(chunk.text);\n break;\n case 'response-metadata':\n case 'finish':\n case 'error':\n controller.enqueue(chunk);\n break;\n }\n },\n };\n\n const {\n result: { stream, response, request },\n doStreamSpan,\n startTimestampMs,\n } = await retry(() =>\n recordSpan({\n name: 'ai.streamObject.doStream',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.streamObject.doStream',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n 'ai.prompt.messages': {\n input: () => stringifyForTelemetry(callOptions.prompt),\n },\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.system': model.provider,\n 'gen_ai.request.model': model.modelId,\n 'gen_ai.request.frequency_penalty':\n callSettings.frequencyPenalty,\n 'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n 'gen_ai.request.presence_penalty': callSettings.presencePenalty,\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 startTimestampMs: now(),\n doStreamSpan,\n result: await model.doStream(callOptions),\n }),\n }),\n );\n\n self._request.resolve(request ?? {});\n\n // store information for onFinish callback:\n let warnings: LanguageModelV2CallWarning[] | undefined;\n let usage: LanguageModelUsage = {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n };\n let finishReason: LanguageModelV2FinishReason | undefined;\n let providerMetadata: ProviderMetadata | undefined;\n let object: RESULT | undefined;\n let error: unknown | undefined;\n\n // pipe chunks through a transformation stream that extracts metadata:\n let accumulatedText = '';\n let textDelta = '';\n let fullResponse: {\n id: string;\n timestamp: Date;\n modelId: string;\n } = {\n id: generateId(),\n timestamp: currentDate(),\n modelId: model.modelId,\n };\n\n // Keep track of raw parse result before type validation, since e.g. Zod might\n // change the object by mapping properties.\n let latestObjectJson: JSONValue | undefined = undefined;\n let latestObject: PARTIAL | undefined = undefined;\n let isFirstChunk = true;\n let isFirstDelta = true;\n\n const transformedStream = stream\n .pipeThrough(new TransformStream(transformer))\n .pipeThrough(\n new TransformStream<\n string | ObjectStreamInputPart,\n ObjectStreamPart<PARTIAL>\n >({\n async transform(chunk, controller): Promise<void> {\n if (\n typeof chunk === 'object' &&\n chunk.type === 'stream-start'\n ) {\n warnings = chunk.warnings;\n return; // stream start chunks are sent immediately and do not count as first chunk\n }\n\n // Telemetry event for first chunk:\n if (isFirstChunk) {\n const msToFirstChunk = now() - startTimestampMs;\n\n isFirstChunk = false;\n\n doStreamSpan.addEvent('ai.stream.firstChunk', {\n 'ai.stream.msToFirstChunk': msToFirstChunk,\n });\n\n doStreamSpan.setAttributes({\n 'ai.stream.msToFirstChunk': msToFirstChunk,\n });\n }\n\n // process partial text chunks\n if (typeof chunk === 'string') {\n accumulatedText += chunk;\n textDelta += chunk;\n\n const { value: currentObjectJson, state: parseState } =\n await parsePartialJson(accumulatedText);\n\n if (\n currentObjectJson !== undefined &&\n !isDeepEqualData(latestObjectJson, currentObjectJson)\n ) {\n const validationResult =\n await outputStrategy.validatePartialResult({\n value: currentObjectJson,\n textDelta,\n latestObject,\n isFirstDelta,\n isFinalDelta: parseState === 'successful-parse',\n });\n\n if (\n validationResult.success &&\n !isDeepEqualData(\n latestObject,\n validationResult.value.partial,\n )\n ) {\n // inside inner check to correctly parse the final element in array mode:\n latestObjectJson = currentObjectJson;\n latestObject = validationResult.value.partial;\n\n controller.enqueue({\n type: 'object',\n object: latestObject,\n });\n\n controller.enqueue({\n type: 'text-delta',\n textDelta: validationResult.value.textDelta,\n });\n\n textDelta = '';\n isFirstDelta = false;\n }\n }\n\n return;\n }\n\n switch (chunk.type) {\n case 'response-metadata': {\n fullResponse = {\n id: chunk.id ?? fullResponse.id,\n timestamp: chunk.timestamp ?? fullResponse.timestamp,\n modelId: chunk.modelId ?? fullResponse.modelId,\n };\n break;\n }\n\n case 'finish': {\n // send final text delta:\n if (textDelta !== '') {\n controller.enqueue({ type: 'text-delta', textDelta });\n }\n\n // store finish reason for telemetry:\n finishReason = chunk.finishReason;\n\n // store usage and metadata for promises and onFinish callback:\n usage = chunk.usage;\n providerMetadata = chunk.providerMetadata;\n\n controller.enqueue({\n ...chunk,\n usage,\n response: fullResponse,\n });\n\n // resolve promises that can be resolved now:\n self._usage.resolve(usage);\n self._providerMetadata.resolve(providerMetadata);\n self._response.resolve({\n ...fullResponse,\n headers: response?.headers,\n });\n\n // resolve the object promise with the latest object:\n const validationResult =\n await outputStrategy.validateFinalResult(\n latestObjectJson,\n {\n text: accumulatedText,\n response: fullResponse,\n usage,\n },\n );\n\n if (validationResult.success) {\n object = validationResult.value;\n self._object.resolve(object);\n } else {\n error = new NoObjectGeneratedError({\n message:\n 'No object generated: response did not match schema.',\n cause: validationResult.error,\n text: accumulatedText,\n response: fullResponse,\n usage,\n finishReason,\n });\n self._object.reject(error);\n }\n\n break;\n }\n\n default: {\n controller.enqueue(chunk);\n break;\n }\n }\n },\n\n // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n async flush(controller) {\n try {\n const finalUsage = usage ?? {\n promptTokens: NaN,\n completionTokens: NaN,\n totalTokens: NaN,\n };\n\n doStreamSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': finishReason,\n 'ai.response.object': {\n output: () => JSON.stringify(object),\n },\n 'ai.response.id': fullResponse.id,\n 'ai.response.model': fullResponse.modelId,\n 'ai.response.timestamp':\n fullResponse.timestamp.toISOString(),\n\n 'ai.usage.inputTokens': finalUsage.inputTokens,\n 'ai.usage.outputTokens': finalUsage.outputTokens,\n 'ai.usage.totalTokens': finalUsage.totalTokens,\n 'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens':\n finalUsage.cachedInputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [finishReason],\n 'gen_ai.response.id': fullResponse.id,\n 'gen_ai.response.model': fullResponse.modelId,\n 'gen_ai.usage.input_tokens': finalUsage.inputTokens,\n 'gen_ai.usage.output_tokens': finalUsage.outputTokens,\n },\n }),\n );\n\n // finish doStreamSpan before other operations for correct timing:\n doStreamSpan.end();\n\n // Add response information to the root span:\n rootSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.usage.inputTokens': finalUsage.inputTokens,\n 'ai.usage.outputTokens': finalUsage.outputTokens,\n 'ai.usage.totalTokens': finalUsage.totalTokens,\n 'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n 'ai.usage.cachedInputTokens':\n finalUsage.cachedInputTokens,\n 'ai.response.object': {\n output: () => JSON.stringify(object),\n },\n },\n }),\n );\n\n // call onFinish callback:\n await onFinish?.({\n usage: finalUsage,\n object,\n error,\n response: {\n ...fullResponse,\n headers: response?.headers,\n },\n warnings,\n providerMetadata,\n });\n } catch (error) {\n controller.enqueue({ type: 'error', error });\n } finally {\n rootSpan.end();\n }\n },\n }),\n );\n\n stitchableStream.addStream(transformedStream);\n },\n })\n .catch(error => {\n // add an empty stream with an error to break the stream:\n stitchableStream.addStream(\n new ReadableStream({\n start(controller) {\n controller.enqueue({ type: 'error', error });\n controller.close();\n },\n }),\n );\n })\n .finally(() => {\n stitchableStream.close();\n });\n\n this.outputStrategy = outputStrategy;\n }\n\n get object() {\n return this._object.promise;\n }\n\n get usage() {\n return this._usage.promise;\n }\n\n get providerMetadata() {\n return this._providerMetadata.promise;\n }\n\n get warnings() {\n return this._warnings.promise;\n }\n\n get request() {\n return this._request.promise;\n }\n\n get response() {\n return this._response.promise;\n }\n\n get partialObjectStream(): AsyncIterableStream<PARTIAL> {\n return createAsyncIterableStream(\n this.baseStream.pipeThrough(\n new TransformStream<ObjectStreamPart<PARTIAL>, PARTIAL>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'object':\n controller.enqueue(chunk.object);\n break;\n\n case 'text-delta':\n case 'finish':\n case 'error': // suppress error (use onError instead)\n break;\n\n default: {\n const _exhaustiveCheck: never = chunk;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n }),\n ),\n );\n }\n\n get elementStream(): ELEMENT_STREAM {\n return this.outputStrategy.createElementStream(this.baseStream);\n }\n\n get textStream(): AsyncIterableStream<string> {\n return createAsyncIterableStream(\n this.baseStream.pipeThrough(\n new TransformStream<ObjectStreamPart<PARTIAL>, string>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'text-delta':\n controller.enqueue(chunk.textDelta);\n break;\n\n case 'object':\n case 'finish':\n case 'error': // suppress error (use onError instead)\n break;\n\n default: {\n const _exhaustiveCheck: never = chunk;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n }),\n ),\n );\n }\n\n get fullStream(): AsyncIterableStream<ObjectStreamPart<PARTIAL>> {\n return createAsyncIterableStream(this.baseStream);\n }\n\n pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n pipeTextStreamToResponse({\n response,\n textStream: this.textStream,\n ...init,\n });\n }\n\n toTextStreamResponse(init?: ResponseInit): Response {\n return createTextStreamResponse({\n textStream: this.textStream,\n ...init,\n });\n }\n}\n\nexport type ObjectStreamInputPart =\n | string\n | {\n type: 'stream-start';\n warnings: LanguageModelV2CallWarning[];\n }\n | {\n type: 'error';\n error: unknown;\n }\n | {\n type: 'response-metadata';\n id?: string;\n timestamp?: Date;\n modelId?: string;\n }\n | {\n type: 'finish';\n finishReason: LanguageModelV2FinishReason;\n usage: LanguageModelV2Usage;\n providerMetadata?: SharedV2ProviderMetadata;\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: (error: unknown) => void;\n} {\n let resolve: (value: T) => void;\n let reject: (error: unknown) => void;\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';\nimport { SpeechModelResponseMetadata } from '../../core/types/speech-model-response-metadata';\n\n/**\nError that is thrown when no speech audio was generated.\n */\nexport class NoSpeechGeneratedError extends AISDKError {\n readonly responses: Array<SpeechModelResponseMetadata>;\n\n constructor(options: { responses: Array<SpeechModelResponseMetadata> }) {\n super({\n name: 'AI_NoSpeechGeneratedError',\n message: 'No speech audio generated.',\n });\n\n this.responses = options.responses;\n }\n}\n","import {\n GeneratedFile,\n DefaultGeneratedFile,\n} from '../generate-text/generated-file';\n\n/**\n * A generated audio file.\n */\nexport interface GeneratedAudioFile extends GeneratedFile {\n /**\n * Audio format of the file (e.g., 'mp3', 'wav', etc.)\n */\n readonly format: string;\n}\n\nexport class DefaultGeneratedAudioFile\n extends DefaultGeneratedFile\n implements GeneratedAudioFile\n{\n readonly format: string;\n\n constructor({\n data,\n mediaType,\n }: {\n data: string | Uint8Array;\n mediaType: string;\n }) {\n super({ data, mediaType });\n let format = 'mp3';\n\n // If format is not provided, try to determine it from the media type\n if (mediaType) {\n const mediaTypeParts = mediaType.split('/');\n\n if (mediaTypeParts.length === 2) {\n // Handle special cases for audio formats\n if (mediaType !== 'audio/mpeg') {\n format = mediaTypeParts[1];\n }\n }\n }\n\n if (!format) {\n // TODO this should be an AI SDK error\n throw new Error(\n 'Audio format must be provided or determinable from media type',\n );\n }\n\n this.format = format;\n }\n}\n\nexport class DefaultGeneratedAudioFileWithType extends DefaultGeneratedAudioFile {\n readonly type = 'audio';\n\n constructor(options: {\n data: string | Uint8Array;\n mediaType: string;\n format: string;\n }) {\n super(options);\n }\n}\n","import { JSONValue, SpeechModelV1 } from '@ai-sdk/provider';\nimport { NoSpeechGeneratedError } from '../../src/error/no-speech-generated-error';\nimport {\n audioMediaTypeSignatures,\n detectMediaType,\n} from '../../src/util/detect-media-type';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport { ProviderOptions } from '../types/provider-metadata';\nimport { SpeechWarning } from '../types/speech-model';\nimport { SpeechModelResponseMetadata } from '../types/speech-model-response-metadata';\nimport { SpeechResult } from './generate-speech-result';\nimport {\n DefaultGeneratedAudioFile,\n GeneratedAudioFile,\n} from './generated-audio-file';\n\n/**\nGenerates speech audio using a speech model.\n\n@param model - The speech model to use.\n@param text - The text to convert to speech.\n@param voice - The voice to use for speech generation.\n@param outputFormat - The output format to use for speech generation e.g. \"mp3\", \"wav\", etc.\n@param instructions - Instructions for the speech generation e.g. \"Speak in a slow and steady tone\".\n@param speed - The speed of the speech generation.\n@param providerOptions - Additional provider-specific options that are passed through to the provider\nas body parameters.\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@returns A result object that contains the generated audio data.\n */\nexport async function generateSpeech({\n model,\n text,\n voice,\n outputFormat,\n instructions,\n speed,\n providerOptions = {},\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n}: {\n /**\nThe speech model to use.\n */\n model: SpeechModelV1;\n\n /**\nThe text to convert to speech.\n */\n text: string;\n\n /**\nThe voice to use for speech generation.\n */\n voice?: string;\n\n /**\n * The desired output format for the audio e.g. \"mp3\", \"wav\", etc.\n */\n outputFormat?: 'mp3' | 'wav' | (string & {});\n\n /**\n Instructions for the speech generation e.g. \"Speak in a slow and steady tone\".\n */\n instructions?: string;\n\n /**\n The speed of the speech generation.\n */\n speed?: number;\n\n /**\nAdditional provider-specific options that are passed through to the provider\nas body parameters.\n\nThe outer record is keyed by the provider name, and the inner\nrecord is keyed by the provider-specific metadata key.\n```ts\n{\n \"openai\": {}\n}\n```\n */\n providerOptions?: ProviderOptions;\n\n /**\nMaximum number of retries per speech model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n}): Promise<SpeechResult> {\n const { retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n const result = await retry(() =>\n model.doGenerate({\n text,\n voice,\n outputFormat,\n instructions,\n speed,\n abortSignal,\n headers,\n providerOptions,\n }),\n );\n\n if (!result.audio || result.audio.length === 0) {\n throw new NoSpeechGeneratedError({ responses: [result.response] });\n }\n\n return new DefaultSpeechResult({\n audio: new DefaultGeneratedAudioFile({\n data: result.audio,\n mediaType:\n detectMediaType({\n data: result.audio,\n signatures: audioMediaTypeSignatures,\n }) ?? 'audio/mp3',\n }),\n warnings: result.warnings,\n responses: [result.response],\n providerMetadata: result.providerMetadata,\n });\n}\n\nclass DefaultSpeechResult implements SpeechResult {\n readonly audio: GeneratedAudioFile;\n readonly warnings: Array<SpeechWarning>;\n readonly responses: Array<SpeechModelResponseMetadata>;\n readonly providerMetadata: Record<string, Record<string, JSONValue>>;\n\n constructor(options: {\n audio: GeneratedAudioFile;\n warnings: Array<SpeechWarning>;\n responses: Array<SpeechModelResponseMetadata>;\n providerMetadata: Record<string, Record<string, JSONValue>> | undefined;\n }) {\n this.audio = options.audio;\n this.warnings = options.warnings;\n this.responses = options.responses;\n this.providerMetadata = options.providerMetadata ?? {};\n }\n}\n","import {\n LanguageModelV2,\n LanguageModelV2Content,\n LanguageModelV2ToolCall,\n} from '@ai-sdk/provider';\nimport { createIdGenerator, IdGenerator } from '@ai-sdk/provider-utils';\nimport { Tracer } from '@opentelemetry/api';\nimport { NoOutputSpecifiedError } from '../../src/error/no-output-specified-error';\nimport { ToolExecutionError } from '../../src/error/tool-execution-error';\nimport { asArray } from '../../src/util/as-array';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport { ModelMessage } from '../prompt';\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 { standardizePrompt } from '../prompt/standardize-prompt';\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 { LanguageModel, ProviderOptions, ToolChoice } from '../types';\nimport { addLanguageModelUsage, LanguageModelUsage } from '../types/usage';\nimport { asContent } from './as-content';\nimport { extractContentText } from './extract-content-text';\nimport { GenerateTextResult } from './generate-text-result';\nimport { Output } from './output';\nimport { parseToolCall } from './parse-tool-call';\nimport { PrepareStepFunction } from './prepare-step';\nimport { ResponseMessage } from './response-message';\nimport { DefaultStepResult, StepResult } from './step-result';\nimport {\n isStopConditionMet,\n stepCountIs,\n StopCondition,\n} from './stop-condition';\nimport { toResponseMessages } from './to-response-messages';\nimport { ToolCallArray } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair';\nimport { ToolResultArray } from './tool-result';\nimport { ToolSet } from './tool-set';\nimport { resolveLanguageModel } from '../prompt/resolve-language-model';\n\nconst originalGenerateId = createIdGenerator({\n prefix: 'aitxt',\n size: 24,\n});\n\n/**\nCallback that is set using the `onStepFinish` option.\n\n@param stepResult - The result of the step.\n */\nexport type GenerateTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n stepResult: StepResult<TOOLS>,\n) => Promise<void> | void;\n\n/**\nGenerate a text and call tools for a given prompt using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamText` instead.\n\n@param model - The language model to use.\n\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n@param toolChoice - The tool choice strategy. Default: 'auto'.\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 experimental_generateMessageId - Generate a unique ID for each message.\n\n@param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n\n@returns\nA result object that contains the generated text, the results of the tool calls, and additional information.\n */\nexport async function generateText<\n TOOLS extends ToolSet,\n OUTPUT = never,\n OUTPUT_PARTIAL = never,\n>({\n model: modelArg,\n tools,\n toolChoice,\n system,\n prompt,\n messages,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n stopWhen = stepCountIs(1),\n experimental_output: output,\n experimental_telemetry: telemetry,\n providerOptions,\n experimental_activeTools,\n activeTools = experimental_activeTools,\n experimental_prepareStep,\n prepareStep = experimental_prepareStep,\n experimental_repairToolCall: repairToolCall,\n _internal: {\n generateId = originalGenerateId,\n currentDate = () => new Date(),\n } = {},\n onStepFinish,\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<NoInfer<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 /**\nLimits the tools that are available for the model to call without\nchanging 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, OUTPUT_PARTIAL>;\n\n /**\n * @deprecated Use `prepareStep` instead.\n */\n experimental_prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n /**\nOptional function that you can use to provide different settings for a step.\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<NoInfer<TOOLS>>;\n\n /**\n Callback that is called when each step (LLM call) is finished, including intermediate steps.\n */\n onStepFinish?: GenerateTextOnStepFinishCallback<NoInfer<TOOLS>>;\n\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n generateId?: IdGenerator;\n currentDate?: () => Date;\n };\n }): Promise<GenerateTextResult<TOOLS, OUTPUT>> {\n const model = resolveLanguageModel(modelArg);\n const stopConditions = asArray(stopWhen);\n const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\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 initialPrompt = await standardizePrompt({\n system,\n prompt,\n messages,\n });\n\n const tracer = getTracer(telemetry);\n\n return recordSpan({\n name: 'ai.generateText',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateText',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // model:\n 'ai.model.provider': model.provider,\n 'ai.model.id': model.modelId,\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 fn: async span => {\n const callSettings = prepareCallSettings(settings);\n\n let currentModelResponse: Awaited<\n ReturnType<LanguageModelV2['doGenerate']>\n > & { response: { id: string; timestamp: Date; modelId: string } };\n let currentToolCalls: ToolCallArray<TOOLS> = [];\n let currentToolResults: ToolResultArray<TOOLS> = [];\n const responseMessages: Array<ResponseMessage> = [];\n const steps: GenerateTextResult<TOOLS, OUTPUT>['steps'] = [];\n\n do {\n const stepInputMessages = [\n ...initialPrompt.messages,\n ...responseMessages,\n ];\n\n const prepareStepResult = await prepareStep?.({\n model,\n steps,\n stepNumber: steps.length,\n });\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: {\n system: prepareStepResult?.system ?? initialPrompt.system,\n 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 currentModelResponse = await retry(() =>\n recordSpan({\n name: 'ai.generateText.doGenerate',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.generateText.doGenerate',\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': settings.frequencyPenalty,\n 'gen_ai.request.max_tokens': settings.maxOutputTokens,\n 'gen_ai.request.presence_penalty': settings.presencePenalty,\n 'gen_ai.request.stop_sequences': settings.stopSequences,\n 'gen_ai.request.temperature': settings.temperature ?? undefined,\n 'gen_ai.request.top_k': settings.topK,\n 'gen_ai.request.top_p': settings.topP,\n },\n }),\n tracer,\n fn: async span => {\n const result = await stepModel.doGenerate({\n ...callSettings,\n tools: stepTools,\n toolChoice: stepToolChoice,\n responseFormat: output?.responseFormat,\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers,\n });\n\n // Fill in default values:\n const responseData = {\n id: result.response?.id ?? generateId(),\n timestamp: result.response?.timestamp ?? currentDate(),\n modelId: result.response?.modelId ?? stepModel.modelId,\n headers: result.response?.headers,\n body: result.response?.body,\n };\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': result.finishReason,\n 'ai.response.text': {\n output: () => extractContentText(result.content),\n },\n 'ai.response.toolCalls': {\n output: () => {\n const toolCalls = asToolCalls(result.content);\n return toolCalls == null\n ? undefined\n : JSON.stringify(toolCalls);\n },\n },\n 'ai.response.id': responseData.id,\n 'ai.response.model': responseData.modelId,\n 'ai.response.timestamp':\n responseData.timestamp.toISOString(),\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': result.usage.inputTokens,\n 'ai.usage.completionTokens': result.usage.outputTokens,\n\n // standardized gen-ai llm span attributes:\n 'gen_ai.response.finish_reasons': [result.finishReason],\n 'gen_ai.response.id': responseData.id,\n 'gen_ai.response.model': responseData.modelId,\n 'gen_ai.usage.input_tokens': result.usage.inputTokens,\n 'gen_ai.usage.output_tokens': result.usage.outputTokens,\n },\n }),\n );\n\n return { ...result, response: responseData };\n },\n }),\n );\n\n // parse tool calls:\n currentToolCalls = await Promise.all(\n currentModelResponse.content\n .filter(\n (part): part is LanguageModelV2ToolCall =>\n part.type === 'tool-call',\n )\n .map(toolCall =>\n parseToolCall({\n toolCall,\n tools,\n repairToolCall,\n system,\n messages: stepInputMessages,\n }),\n ),\n );\n\n // execute tools:\n currentToolResults =\n tools == null\n ? []\n : await executeTools({\n toolCalls: currentToolCalls,\n tools,\n tracer,\n telemetry,\n messages: stepInputMessages,\n abortSignal,\n });\n\n // content:\n const stepContent = asContent({\n content: currentModelResponse.content,\n toolCalls: currentToolCalls,\n toolResults: currentToolResults,\n });\n\n // append to messages for potential next step:\n responseMessages.push(\n ...toResponseMessages({\n content: stepContent,\n tools: tools ?? ({} as TOOLS),\n }),\n );\n\n // Add step information (after response messages are updated):\n const currentStepResult: StepResult<TOOLS> = new DefaultStepResult({\n content: stepContent,\n finishReason: currentModelResponse.finishReason,\n usage: currentModelResponse.usage,\n warnings: currentModelResponse.warnings,\n providerMetadata: currentModelResponse.providerMetadata,\n request: currentModelResponse.request ?? {},\n response: {\n ...currentModelResponse.response,\n // deep clone msgs to avoid mutating past messages in multi-step:\n messages: structuredClone(responseMessages),\n },\n });\n\n steps.push(currentStepResult);\n await onStepFinish?.(currentStepResult);\n } while (\n // there are tool calls:\n currentToolCalls.length > 0 &&\n // all current tool calls have results:\n currentToolResults.length === currentToolCalls.length &&\n // continue until a stop condition is met:\n !(await isStopConditionMet({ stopConditions, steps }))\n );\n\n // Add response information to the span:\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.response.finishReason': currentModelResponse.finishReason,\n 'ai.response.text': {\n output: () => extractContentText(currentModelResponse.content),\n },\n 'ai.response.toolCalls': {\n output: () => {\n const toolCalls = asToolCalls(currentModelResponse.content);\n return toolCalls == null\n ? undefined\n : JSON.stringify(toolCalls);\n },\n },\n\n // TODO rename telemetry attributes to inputTokens and outputTokens\n 'ai.usage.promptTokens': currentModelResponse.usage.inputTokens,\n 'ai.usage.completionTokens':\n currentModelResponse.usage.outputTokens,\n },\n }),\n );\n\n const lastStep = steps[steps.length - 1];\n\n return new DefaultGenerateTextResult({\n steps,\n resolvedOutput: await output?.parseOutput(\n { text: lastStep.text },\n {\n response: lastStep.response,\n usage: lastStep.usage,\n finishReason: lastStep.finishReason,\n },\n ),\n });\n },\n });\n}\n\nasync function executeTools<TOOLS extends ToolSet>({\n toolCalls,\n tools,\n tracer,\n telemetry,\n messages,\n abortSignal,\n}: {\n toolCalls: ToolCallArray<TOOLS>;\n tools: TOOLS;\n tracer: Tracer;\n telemetry: TelemetrySettings | undefined;\n messages: ModelMessage[];\n abortSignal: AbortSignal | undefined;\n}): Promise<ToolResultArray<TOOLS>> {\n const toolResults = await Promise.all(\n toolCalls.map(async ({ toolCallId, toolName, args }) => {\n const tool = tools[toolName];\n\n if (tool?.execute == null) {\n return undefined;\n }\n\n const result = await 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': toolName,\n 'ai.toolCall.id': toolCallId,\n 'ai.toolCall.args': {\n output: () => JSON.stringify(args),\n },\n },\n }),\n tracer,\n fn: async span => {\n try {\n const result = await tool.execute!(args, {\n toolCallId,\n messages,\n abortSignal,\n });\n\n try {\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.toolCall.result': {\n output: () => JSON.stringify(result),\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 return result;\n } catch (error) {\n throw new ToolExecutionError({\n toolCallId,\n toolName,\n toolArgs: args,\n cause: error,\n });\n }\n },\n });\n\n return {\n type: 'tool-result',\n toolCallId,\n toolName,\n args,\n result,\n } as ToolResultArray<TOOLS>[number];\n }),\n );\n\n return toolResults.filter(\n (result): result is NonNullable<typeof result> => result != null,\n );\n}\n\nclass DefaultGenerateTextResult<TOOLS extends ToolSet, OUTPUT>\n implements GenerateTextResult<TOOLS, OUTPUT>\n{\n readonly steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n\n private readonly resolvedOutput: OUTPUT;\n\n constructor(options: {\n steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n resolvedOutput: OUTPUT;\n }) {\n this.steps = options.steps;\n this.resolvedOutput = options.resolvedOutput;\n }\n\n private get finalStep() {\n return this.steps[this.steps.length - 1];\n }\n\n get content() {\n return this.finalStep.content;\n }\n\n get text() {\n return this.finalStep.text;\n }\n\n get files() {\n return this.finalStep.files;\n }\n\n get reasoningText() {\n return this.finalStep.reasoningText;\n }\n\n get reasoning() {\n return this.finalStep.reasoning;\n }\n\n get toolCalls() {\n return this.finalStep.toolCalls;\n }\n\n get toolResults() {\n return this.finalStep.toolResults;\n }\n\n get sources() {\n return this.finalStep.sources;\n }\n\n get finishReason() {\n return this.finalStep.finishReason;\n }\n\n get warnings() {\n return this.finalStep.warnings;\n }\n\n get providerMetadata() {\n return this.finalStep.providerMetadata;\n }\n\n get response() {\n return this.finalStep.response;\n }\n\n get request() {\n return this.finalStep.request;\n }\n\n get usage() {\n return this.finalStep.usage;\n }\n\n get totalUsage() {\n return this.steps.reduce(\n (totalUsage, step) => {\n return addLanguageModelUsage(totalUsage, step.usage);\n },\n {\n inputTokens: undefined,\n outputTokens: undefined,\n totalTokens: undefined,\n reasoningTokens: undefined,\n cachedInputTokens: undefined,\n } as LanguageModelUsage,\n );\n }\n\n get experimental_output() {\n if (this.resolvedOutput == null) {\n throw new NoOutputSpecifiedError();\n }\n\n return this.resolvedOutput;\n }\n}\n\nfunction asToolCalls(content: Array<LanguageModelV2Content>) {\n const parts = content.filter(\n (part): part is LanguageModelV2ToolCall => part.type === 'tool-call',\n );\n\n if (parts.length === 0) {\n return undefined;\n }\n\n return parts.map(toolCall => ({\n toolCallType: toolCall.toolCallType,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n args: toolCall.args,\n }));\n}\n","export function asArray<T>(value: T | T[] | undefined): T[] {\n return value === undefined ? [] : Array.isArray(value) ? value : [value];\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 parameters: asSchema(tool.parameters).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 { 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 { LanguageModelV2Content } from '@ai-sdk/provider';\nimport { ContentPart } from './content-part';\nimport { DefaultGeneratedFile } from './generated-file';\nimport { ToolCallArray } from './tool-call';\nimport { ToolResultArray } from './tool-result';\nimport { ToolSet } from './tool-set';\n\nexport function asContent<TOOLS extends ToolSet>({\n content,\n toolCalls,\n toolResults,\n}: {\n content: Array<LanguageModelV2Content>;\n toolCalls: ToolCallArray<TOOLS>;\n toolResults: ToolResultArray<TOOLS>;\n}): Array<ContentPart<TOOLS>> {\n return [\n ...content.map(part => {\n switch (part.type) {\n case 'text':\n case 'reasoning':\n case 'source':\n return part;\n\n case 'file': {\n return {\n type: 'file' as const,\n file: new DefaultGeneratedFile(part),\n };\n }\n\n case 'tool-call': {\n return toolCalls.find(\n toolCall => toolCall.toolCallId === part.toolCallId,\n )!;\n }\n }\n }),\n ...toolResults,\n ];\n}\n","import { LanguageModelV2ToolCall } from '@ai-sdk/provider';\nimport {\n asSchema,\n safeParseJSON,\n safeValidateTypes,\n} from '@ai-sdk/provider-utils';\nimport { InvalidToolArgumentsError } from '../../src/error/invalid-tool-arguments-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';\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 InvalidToolArgumentsError.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 parameterSchema: ({ toolName }) => {\n const { parameters } = tools[toolName];\n return asSchema(parameters).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.parameters);\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.args.trim() === ''\n ? await safeValidateTypes({ value: {}, schema })\n : await safeParseJSON({ text: toolCall.args, schema });\n\n if (parseResult.success === false) {\n throw new InvalidToolArgumentsError({\n toolName,\n toolArgs: toolCall.args,\n cause: parseResult.error,\n });\n }\n\n return {\n type: 'tool-call',\n toolCallId: toolCall.toolCallId,\n toolName,\n args: parseResult?.value,\n };\n}\n","import { ReasoningPart } from '../prompt/content-part';\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-result';\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 AssistantContent,\n AssistantModelMessage,\n ToolContent,\n ToolModelMessage,\n ToolResultPart,\n} from '../prompt';\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;\n}): Array<AssistantModelMessage | ToolModelMessage> {\n const responseMessages: Array<AssistantModelMessage | ToolModelMessage> = [];\n\n const content: AssistantContent = inputContent\n .filter(part => part.type !== 'tool-result' && part.type !== 'source')\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' as const,\n text: part.text,\n providerOptions: part.providerMetadata,\n };\n case 'file':\n return {\n type: 'file' as const,\n data: part.file.base64,\n mediaType: part.file.mediaType,\n };\n case 'tool-call':\n return part;\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')\n .map((toolResult): ToolResultPart => {\n const tool = tools[toolResult.toolName];\n return tool?.experimental_toToolResultContent != null\n ? {\n type: 'tool-result',\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName,\n result: tool.experimental_toToolResultContent(toolResult.result),\n experimental_content: tool.experimental_toToolResultContent(\n toolResult.result,\n ),\n }\n : {\n type: 'tool-result',\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName,\n result: toolResult.result,\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","import { LanguageModelV2CallOptions } from '@ai-sdk/provider';\nimport {\n asSchema,\n safeParseJSON,\n safeValidateTypes,\n Schema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../src/error/no-object-generated-error';\nimport { DeepPartial } from '../../src/util/deep-partial';\nimport { parsePartialJson } from '../../src/util/parse-partial-json';\nimport { FinishReason } from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../types/usage';\n\nexport interface Output<OUTPUT, PARTIAL> {\n readonly type: 'object' | 'text';\n\n responseFormat: LanguageModelV2CallOptions['responseFormat'];\n\n parsePartial(options: {\n text: string;\n }): Promise<{ partial: PARTIAL } | undefined>;\n\n parseOutput(\n options: { text: string },\n context: {\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n ): Promise<OUTPUT>;\n}\n\nexport const text = (): Output<string, string> => ({\n type: 'text',\n\n responseFormat: { type: 'text' },\n\n async parsePartial({ text }: { text: string }) {\n return { partial: text };\n },\n\n async parseOutput({ text }: { text: string }) {\n return text;\n },\n});\n\nexport const object = <OUTPUT>({\n schema: inputSchema,\n}: {\n schema: z.Schema<OUTPUT, z.ZodTypeDef, any> | Schema<OUTPUT>;\n}): Output<OUTPUT, DeepPartial<OUTPUT>> => {\n const schema = asSchema(inputSchema);\n\n return {\n type: 'object',\n\n responseFormat: {\n type: 'json',\n schema: schema.jsonSchema,\n },\n\n async parsePartial({ text }: { text: string }) {\n const result = await parsePartialJson(text);\n\n switch (result.state) {\n case 'failed-parse':\n case 'undefined-input':\n return undefined;\n\n case 'repaired-parse':\n case 'successful-parse':\n return {\n // Note: currently no validation of partial results:\n partial: result.value as DeepPartial<OUTPUT>,\n };\n\n default: {\n const _exhaustiveCheck: never = result.state;\n throw new Error(`Unsupported parse state: ${_exhaustiveCheck}`);\n }\n }\n },\n\n async parseOutput(\n { text }: { text: string },\n context: {\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n ) {\n const parseResult = await safeParseJSON({ text });\n\n if (!parseResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: could not parse the response.',\n cause: parseResult.error,\n text,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason,\n });\n }\n\n const validationResult = await safeValidateTypes({\n value: parseResult.value,\n schema,\n });\n\n if (!validationResult.success) {\n throw new NoObjectGeneratedError({\n message: 'No object generated: response did not match schema.',\n cause: validationResult.error,\n text,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason,\n });\n }\n\n return validationResult.value;\n },\n };\n};\n","import { delay as originalDelay } from '@ai-sdk/provider-utils';\nimport { TextStreamPart } from './stream-text-result';\nimport { ToolSet } from './tool-set';\nimport { InvalidArgumentError } from '@ai-sdk/provider';\n\nconst CHUNKING_REGEXPS = {\n word: /\\S+\\s+/m,\n line: /\\n+/m,\n};\n\n/**\n * Detects the first chunk in a buffer.\n *\n * @param buffer - The buffer to detect the first chunk in.\n *\n * @returns The first detected chunk, or `undefined` if no chunk was detected.\n */\nexport type ChunkDetector = (buffer: string) => string | undefined | null;\n\n/**\n * Smooths text streaming output.\n *\n * @param delayInMs - The delay in milliseconds between each chunk. Defaults to 10ms. Can be set to `null` to skip the delay.\n * @param chunking - Controls how the text is chunked for streaming. Use \"word\" to stream word by word (default), \"line\" to stream line by line, or provide a custom RegExp pattern for custom chunking.\n *\n * @returns A transform stream that smooths text streaming output.\n */\nexport function smoothStream<TOOLS extends ToolSet>({\n delayInMs = 10,\n chunking = 'word',\n _internal: { delay = originalDelay } = {},\n}: {\n delayInMs?: number | null;\n chunking?: 'word' | 'line' | RegExp | ChunkDetector;\n /**\n * Internal. For test use only. May change without notice.\n */\n _internal?: {\n delay?: (delayInMs: number | null) => Promise<void>;\n };\n} = {}): (options: {\n tools: TOOLS;\n}) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>> {\n let detectChunk: ChunkDetector;\n\n if (typeof chunking === 'function') {\n detectChunk = buffer => {\n const match = chunking(buffer);\n\n if (match == null) {\n return null;\n }\n\n if (!match.length) {\n throw new Error(`Chunking function must return a non-empty string.`);\n }\n\n if (!buffer.startsWith(match)) {\n throw new Error(\n `Chunking function must return a match that is a prefix of the buffer. Received: \"${match}\" expected to start with \"${buffer}\"`,\n );\n }\n\n return match;\n };\n } else {\n const chunkingRegex =\n typeof chunking === 'string' ? CHUNKING_REGEXPS[chunking] : chunking;\n\n if (chunkingRegex == null) {\n throw new InvalidArgumentError({\n argument: 'chunking',\n message: `Chunking must be \"word\" or \"line\" or a RegExp. Received: ${chunking}`,\n });\n }\n\n detectChunk = buffer => {\n const match = chunkingRegex.exec(buffer);\n\n if (!match) {\n return null;\n }\n\n return buffer.slice(0, match.index) + match?.[0];\n };\n }\n\n return () => {\n let buffer = '';\n\n return new TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>({\n async transform(chunk, controller) {\n if (chunk.type !== 'text') {\n if (buffer.length > 0) {\n controller.enqueue({ type: 'text', text: buffer });\n buffer = '';\n }\n\n controller.enqueue(chunk);\n return;\n }\n\n buffer += chunk.text;\n\n let match;\n\n while ((match = detectChunk(buffer)) != null) {\n controller.enqueue({ type: 'text', text: match });\n buffer = buffer.slice(match.length);\n\n await delay(delayInMs);\n }\n },\n });\n };\n}\n","import { LanguageModelV2, LanguageModelV2CallWarning } from '@ai-sdk/provider';\nimport { createIdGenerator, IdGenerator } 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 { createUIMessageStreamResponse } from '../../src/ui-message-stream/create-ui-message-stream-response';\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 { UIMessageStreamPart } from '../../src/ui-message-stream/ui-message-stream-parts';\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 { standardizePrompt } from '../prompt/standardize-prompt';\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, ProviderOptions } 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';\nimport { ToolResultUnion } from './tool-result';\nimport { ToolSet } from './tool-set';\nimport { resolveLanguageModel } from '../prompt/resolve-language-model';\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-call-streaming-start'\n | 'tool-call-delta'\n | 'tool-result';\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_toolCallStreaming = false,\n toolCallStreaming = experimental_toolCallStreaming,\n experimental_activeTools,\n activeTools = experimental_activeTools,\n experimental_repairToolCall: repairToolCall,\n experimental_transform: transform,\n onChunk,\n onError,\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 /**\nEnable streaming of tool call deltas as they are generated. Disabled by default.\n */\n toolCallStreaming?: boolean;\n\n /**\n@deprecated Use `toolCallStreaming` instead.\n */\n experimental_toolCallStreaming?: boolean;\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 /**\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 toolCallStreaming,\n transforms: asArray(transform),\n activeTools,\n repairToolCall,\n stopConditions: asArray(stopWhen),\n output,\n providerOptions,\n prepareStep,\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 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: { type: 'text', text: textChunk },\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') {\n publishTextChunk({ controller });\n }\n\n if (chunk.type !== 'text') {\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 flush(controller) {\n // publish remaining text (there should be none if the content was correctly formatted):\n if (textChunk.length > 0) {\n publishTextChunk({ controller });\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 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 toolCallStreaming,\n transforms,\n activeTools,\n repairToolCall,\n stopConditions,\n output,\n providerOptions,\n prepareStep,\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 toolCallStreaming: boolean;\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 now: () => number;\n currentDate: () => Date;\n generateId: () => string;\n\n // callbacks:\n onChunk: undefined | StreamTextOnChunkCallback<TOOLS>;\n onError: undefined | StreamTextOnErrorCallback;\n onFinish: undefined | StreamTextOnFinishCallback<TOOLS>;\n onStepFinish: undefined | StreamTextOnStepFinishCallback<TOOLS>;\n }) {\n this.output = output;\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 activeReasoningPart:\n | undefined\n | (ContentPart<TOOLS> & { type: 'reasoning' }) = undefined;\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 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-call-streaming-start' ||\n part.type === 'tool-call-delta'\n ) {\n await onChunk?.({ chunk: part });\n }\n\n if (part.type === 'error') {\n await onError?.({ error: part.error });\n }\n\n if (part.type === 'text') {\n const latestContent = recordedContent[recordedContent.length - 1];\n if (latestContent?.type === 'text') {\n latestContent.text += part.text;\n } else {\n recordedContent.push({ type: 'text', text: part.text });\n }\n }\n\n if (part.type === 'reasoning') {\n if (activeReasoningPart == null) {\n activeReasoningPart = {\n type: 'reasoning',\n text: part.text,\n providerMetadata: part.providerMetadata,\n };\n recordedContent.push(activeReasoningPart);\n } else {\n activeReasoningPart.text += part.text;\n activeReasoningPart.providerMetadata = part.providerMetadata;\n }\n }\n\n if (\n part.type === 'reasoning-part-finish' &&\n activeReasoningPart != null\n ) {\n activeReasoningPart = undefined;\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 === '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: tools ?? ({} as 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 activeReasoningPart = undefined;\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\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 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 });\n\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: {\n system: prepareStepResult?.system ?? initialPrompt.system,\n 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 }),\n };\n },\n }),\n );\n\n const streamWithToolResults = runToolsTransformation({\n tools,\n generatorStream: stream,\n toolCallStreaming,\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 stepToolResults: ToolResultUnion<TOOLS>[] = [];\n let warnings: LanguageModelV2CallWarning[] | undefined;\n const stepContent: Array<ContentPart<TOOLS>> = [];\n\n let activeReasoningPart:\n | undefined\n | (ContentPart<TOOLS> & { type: 'reasoning' }) = undefined;\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 stepText = '';\n let stepResponse: { id: string; timestamp: Date; modelId: string } = {\n id: generateId(),\n timestamp: currentDate(),\n modelId: model.modelId,\n };\n\n async function publishTextChunk({\n controller,\n chunk,\n }: {\n controller: TransformStreamDefaultController<TextStreamPart<TOOLS>>;\n chunk: TextStreamPart<TOOLS> & { type: 'text' };\n }) {\n controller.enqueue(chunk);\n\n stepText += chunk.text;\n }\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 // Filter out empty text deltas\n if (chunk.type === 'text' && chunk.text.length === 0) {\n return;\n }\n\n const chunkType = chunk.type;\n switch (chunkType) {\n case 'text': {\n await publishTextChunk({ controller, chunk });\n break;\n }\n\n case 'reasoning': {\n controller.enqueue(chunk);\n\n if (activeReasoningPart == null) {\n activeReasoningPart = {\n type: 'reasoning',\n text: chunk.text,\n providerMetadata: chunk.providerMetadata,\n };\n stepContent.push(activeReasoningPart);\n } else {\n activeReasoningPart.text += chunk.text;\n activeReasoningPart.providerMetadata =\n chunk.providerMetadata;\n }\n\n break;\n }\n\n case 'reasoning-part-finish': {\n activeReasoningPart = undefined;\n controller.enqueue(chunk);\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 stepContent.push(chunk);\n break;\n }\n\n case 'tool-result': {\n controller.enqueue(chunk);\n // store tool results for onFinish callback and toolResults promise:\n stepToolResults.push(chunk);\n stepContent.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 stepContent.push(chunk);\n controller.enqueue(chunk);\n break;\n }\n\n case 'source': {\n stepContent.push(chunk);\n controller.enqueue(chunk);\n break;\n }\n\n // forward:\n case 'tool-call-streaming-start':\n case 'tool-call-delta': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'error': {\n controller.enqueue(chunk);\n stepFinishReason = 'error';\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': { output: () => stepText },\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\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 if (\n stepToolCalls.length > 0 &&\n // all current tool calls have results:\n stepToolResults.length === stepToolCalls.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: stepContent,\n tools: tools ?? ({} as TOOLS),\n }),\n );\n\n await streamStep({\n currentStep: currentStep + 1,\n responseMessages,\n usage: combinedUsage,\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({\n newMessageId,\n originalMessages = [],\n onFinish,\n messageMetadata,\n sendReasoning = false,\n sendSources = false,\n sendStart = true,\n sendFinish = true,\n onError = () => 'An error occurred.', // mask error messages for safety by default\n }: UIMessageStreamOptions = {}): ReadableStream<UIMessageStreamPart> {\n const lastMessage = originalMessages[originalMessages.length - 1];\n const isContinuation = lastMessage?.role === 'assistant';\n const messageId = isContinuation ? lastMessage.id : newMessageId;\n\n const baseStream = this.fullStream.pipeThrough(\n new TransformStream<TextStreamPart<TOOLS>, UIMessageStreamPart>({\n transform: async (part, controller) => {\n const partType = part.type;\n switch (partType) {\n case 'text': {\n controller.enqueue({\n type: 'text',\n text: part.text,\n });\n break;\n }\n\n case 'reasoning': {\n if (sendReasoning) {\n controller.enqueue({\n type: 'reasoning',\n text: part.text,\n providerMetadata: part.providerMetadata,\n });\n }\n break;\n }\n\n case 'reasoning-part-finish': {\n if (sendReasoning) {\n controller.enqueue({ type: 'reasoning-part-finish' });\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) {\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 break;\n }\n\n case 'tool-call-streaming-start': {\n controller.enqueue({\n type: 'tool-call-streaming-start',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n });\n break;\n }\n\n case 'tool-call-delta': {\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: part.toolCallId,\n argsTextDelta: part.argsTextDelta,\n });\n break;\n }\n\n case 'tool-call': {\n controller.enqueue({\n type: 'tool-call',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n });\n break;\n }\n\n case 'tool-result': {\n controller.enqueue({\n type: 'tool-result',\n toolCallId: part.toolCallId,\n result: part.result,\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 const metadata = messageMetadata?.({ part });\n controller.enqueue({\n type: 'start-step',\n metadata,\n });\n break;\n }\n\n case 'finish-step': {\n const metadata = messageMetadata?.({ part });\n controller.enqueue({\n type: 'finish-step',\n metadata,\n });\n\n break;\n }\n\n case 'start': {\n if (sendStart) {\n const metadata = messageMetadata?.({ part });\n controller.enqueue({\n type: 'start',\n messageId,\n metadata,\n });\n }\n break;\n }\n\n case 'finish': {\n if (sendFinish) {\n const metadata = messageMetadata?.({ part });\n controller.enqueue({\n type: 'finish',\n metadata,\n });\n }\n break;\n }\n\n default: {\n const exhaustiveCheck: never = partType;\n throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n }),\n );\n\n return handleUIMessageStreamFinish({\n stream: baseStream,\n newMessageId: messageId ?? this.generateId(),\n originalMessages,\n onFinish,\n });\n }\n\n pipeUIMessageStreamToResponse(\n response: ServerResponse,\n {\n newMessageId,\n originalMessages,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n }: ResponseInit & UIMessageStreamOptions = {},\n ) {\n pipeUIMessageStreamToResponse({\n response,\n stream: this.toUIMessageStream({\n newMessageId,\n originalMessages,\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({\n newMessageId,\n originalMessages,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n }: ResponseInit & UIMessageStreamOptions = {}): Response {\n return createUIMessageStreamResponse({\n stream: this.toUIMessageStream({\n newMessageId,\n originalMessages,\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 {\n LanguageModelV2CallWarning,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport { generateId } from '@ai-sdk/provider-utils';\nimport { Tracer } from '@opentelemetry/api';\nimport { ToolExecutionError } from '../../src/error/tool-execution-error';\nimport { ModelMessage } from '../prompt/message';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { 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 { ContentPart } from './content-part';\nimport { DefaultGeneratedFileWithType } from './generated-file';\nimport { parseToolCall } from './parse-tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair';\nimport { ToolSet } from './tool-set';\n\nexport type SingleRequestTextStreamPart<TOOLS extends ToolSet> =\n | ContentPart<TOOLS>\n | { type: 'stream-start'; warnings: LanguageModelV2CallWarning[] }\n | { type: 'reasoning-part-finish' }\n | {\n type: 'tool-call-streaming-start';\n toolCallId: string;\n toolName: string;\n }\n | {\n type: 'tool-call-delta';\n toolCallId: string;\n toolName: string;\n argsTextDelta: string;\n }\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 | {\n type: 'error';\n error: unknown;\n };\n\nexport function runToolsTransformation<TOOLS extends ToolSet>({\n tools,\n generatorStream,\n toolCallStreaming,\n tracer,\n telemetry,\n system,\n messages,\n abortSignal,\n repairToolCall,\n}: {\n tools: TOOLS | undefined;\n generatorStream: ReadableStream<LanguageModelV2StreamPart>;\n toolCallStreaming: boolean;\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 active tool calls for tool call streaming:\n const activeToolCalls: Record<string, boolean> = {};\n\n // keep track of outstanding tool results for stream closing:\n const outstandingToolResults = new Set<string>();\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 'finish':\n case 'text':\n case 'reasoning':\n case 'reasoning-part-finish':\n case 'source':\n case 'response-metadata':\n case 'error': {\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 // forward with less information:\n case 'tool-call-delta': {\n if (toolCallStreaming) {\n if (!activeToolCalls[chunk.toolCallId]) {\n controller.enqueue({\n type: 'tool-call-streaming-start',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n });\n\n activeToolCalls[chunk.toolCallId] = true;\n }\n\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n argsTextDelta: chunk.argsTextDelta,\n });\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 if (tool.execute != null) {\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.args': {\n output: () => JSON.stringify(toolCall.args),\n },\n },\n }),\n tracer,\n fn: async span =>\n tool.execute!(toolCall.args, {\n toolCallId: toolCall.toolCallId,\n messages,\n abortSignal,\n }).then(\n (result: any) => {\n toolResultsStreamController!.enqueue({\n ...toolCall,\n type: 'tool-result',\n result,\n } as any);\n\n outstandingToolResults.delete(toolExecutionId);\n\n attemptClose();\n\n // record telemetry\n try {\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.toolCall.result': {\n output: () => JSON.stringify(result),\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 (error: any) => {\n toolResultsStreamController!.enqueue({\n type: 'error',\n error: new ToolExecutionError({\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n toolArgs: toolCall.args,\n cause: error,\n }),\n });\n\n outstandingToolResults.delete(toolExecutionId);\n attemptClose();\n },\n ),\n });\n }\n } catch (error) {\n toolResultsStreamController!.enqueue({\n type: 'error',\n error,\n });\n }\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 LanguageModelV2CallOptions,\n LanguageModelV2Middleware,\n} from '@ai-sdk/provider';\nimport { mergeObjects } from '../../src/util/merge-objects';\n\n/**\n * Applies default settings for a language model.\n */\nexport function defaultSettingsMiddleware({\n settings,\n}: {\n settings: Partial<{\n maxOutputTokens?: LanguageModelV2CallOptions['maxOutputTokens'];\n temperature?: LanguageModelV2CallOptions['temperature'];\n stopSequences?: LanguageModelV2CallOptions['stopSequences'];\n topP?: LanguageModelV2CallOptions['topP'];\n topK?: LanguageModelV2CallOptions['topK'];\n presencePenalty?: LanguageModelV2CallOptions['presencePenalty'];\n frequencyPenalty?: LanguageModelV2CallOptions['frequencyPenalty'];\n responseFormat?: LanguageModelV2CallOptions['responseFormat'];\n seed?: LanguageModelV2CallOptions['seed'];\n tools?: LanguageModelV2CallOptions['tools'];\n toolChoice?: LanguageModelV2CallOptions['toolChoice'];\n headers?: LanguageModelV2CallOptions['headers'];\n providerOptions?: LanguageModelV2CallOptions['providerOptions'];\n }>;\n}): LanguageModelV2Middleware {\n return {\n middlewareVersion: 'v2',\n transformParams: async ({ params }) => {\n return mergeObjects(settings, params) as LanguageModelV2CallOptions;\n },\n };\n}\n","/**\n * Returns the index of the start of the searchedText in the text, or null if it\n * is not found.\n */\nexport function getPotentialStartIndex(\n text: string,\n searchedText: string,\n): number | null {\n // Return null immediately if searchedText is empty.\n if (searchedText.length === 0) {\n return null;\n }\n\n // Check if the searchedText exists as a direct substring of text.\n const directIndex = text.indexOf(searchedText);\n if (directIndex !== -1) {\n return directIndex;\n }\n\n // Otherwise, look for the largest suffix of \"text\" that matches\n // a prefix of \"searchedText\". We go from the end of text inward.\n for (let i = text.length - 1; i >= 0; i--) {\n const suffix = text.substring(i);\n if (searchedText.startsWith(suffix)) {\n return i;\n }\n }\n\n return null;\n}\n","import type {\n LanguageModelV2Content,\n LanguageModelV2Middleware,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport { getPotentialStartIndex } from '../../src/util/get-potential-start-index';\n\n/**\n * Extract an XML-tagged reasoning section from the generated text and exposes it\n * as a `reasoning` property on the result.\n *\n * @param tagName - The name of the XML tag to extract reasoning from.\n * @param separator - The separator to use between reasoning and text sections.\n * @param startWithReasoning - Whether to start with reasoning tokens.\n */\nexport function extractReasoningMiddleware({\n tagName,\n separator = '\\n',\n startWithReasoning = false,\n}: {\n tagName: string;\n separator?: string;\n startWithReasoning?: boolean;\n}): LanguageModelV2Middleware {\n const openingTag = `<${tagName}>`;\n const closingTag = `<\\/${tagName}>`;\n\n return {\n middlewareVersion: 'v2',\n wrapGenerate: async ({ doGenerate }) => {\n const { content, ...rest } = await doGenerate();\n\n const transformedContent: LanguageModelV2Content[] = [];\n for (const part of content) {\n if (part.type !== 'text') {\n transformedContent.push(part);\n continue;\n }\n\n const text = startWithReasoning ? openingTag + part.text : part.text;\n\n const regexp = new RegExp(`${openingTag}(.*?)${closingTag}`, 'gs');\n const matches = Array.from(text.matchAll(regexp));\n\n if (!matches.length) {\n transformedContent.push(part);\n continue;\n }\n\n const reasoningText = matches.map(match => match[1]).join(separator);\n\n let textWithoutReasoning = text;\n for (let i = matches.length - 1; i >= 0; i--) {\n const match = matches[i];\n\n const beforeMatch = textWithoutReasoning.slice(0, match.index);\n const afterMatch = textWithoutReasoning.slice(\n match.index! + match[0].length,\n );\n\n textWithoutReasoning =\n beforeMatch +\n (beforeMatch.length > 0 && afterMatch.length > 0 ? separator : '') +\n afterMatch;\n }\n\n transformedContent.push({\n type: 'reasoning',\n text: reasoningText,\n });\n\n transformedContent.push({\n type: 'text',\n text: textWithoutReasoning,\n });\n }\n\n return { content: transformedContent, ...rest };\n },\n\n wrapStream: async ({ doStream }) => {\n const { stream, ...rest } = await doStream();\n\n let isFirstReasoning = true;\n let isFirstText = true;\n let afterSwitch = false;\n let isReasoning = startWithReasoning;\n let buffer = '';\n\n return {\n stream: stream.pipeThrough(\n new TransformStream<\n LanguageModelV2StreamPart,\n LanguageModelV2StreamPart\n >({\n transform: (chunk, controller) => {\n if (chunk.type !== 'text') {\n controller.enqueue(chunk);\n return;\n }\n\n buffer += chunk.text;\n\n function publish(text: string) {\n if (text.length > 0) {\n const prefix =\n afterSwitch &&\n (isReasoning ? !isFirstReasoning : !isFirstText)\n ? separator\n : '';\n\n controller.enqueue(\n isReasoning\n ? {\n type: 'reasoning',\n text: prefix + text,\n }\n : {\n type: 'text',\n text: prefix + text,\n },\n );\n afterSwitch = false;\n\n if (isReasoning) {\n isFirstReasoning = false;\n } else {\n isFirstText = false;\n }\n }\n }\n\n do {\n const nextTag = isReasoning ? closingTag : openingTag;\n const startIndex = getPotentialStartIndex(buffer, nextTag);\n\n // no opening or closing tag found, publish the buffer\n if (startIndex == null) {\n publish(buffer);\n buffer = '';\n break;\n }\n\n // publish text before the tag\n publish(buffer.slice(0, startIndex));\n\n const foundFullMatch =\n startIndex + nextTag.length <= buffer.length;\n\n if (foundFullMatch) {\n buffer = buffer.slice(startIndex + nextTag.length);\n\n // reasoning part finished:\n if (isReasoning) {\n controller.enqueue({ type: 'reasoning-part-finish' });\n }\n\n isReasoning = !isReasoning;\n afterSwitch = true;\n } else {\n buffer = buffer.slice(startIndex);\n break;\n }\n } while (true);\n },\n }),\n ),\n ...rest,\n };\n },\n };\n}\n","import type {\n LanguageModelV2Middleware,\n LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\n\n/**\n * Simulates streaming chunks with the response from a generate call.\n */\nexport function simulateStreamingMiddleware(): LanguageModelV2Middleware {\n return {\n middlewareVersion: 'v2',\n wrapStream: async ({ doGenerate }) => {\n const result = await doGenerate();\n\n const simulatedStream = new ReadableStream<LanguageModelV2StreamPart>({\n start(controller) {\n controller.enqueue({\n type: 'stream-start',\n warnings: result.warnings,\n });\n\n controller.enqueue({ type: 'response-metadata', ...result.response });\n\n for (const part of result.content) {\n controller.enqueue(part);\n }\n\n controller.enqueue({\n type: 'finish',\n finishReason: result.finishReason,\n usage: result.usage,\n providerMetadata: result.providerMetadata,\n });\n\n controller.close();\n },\n });\n\n return {\n stream: simulatedStream,\n request: result.request,\n response: result.response,\n };\n },\n };\n}\n","import {\n LanguageModelV2,\n LanguageModelV2CallOptions,\n LanguageModelV2Middleware,\n} from '@ai-sdk/provider';\nimport { asArray } from '../../src/util/as-array';\n\n/**\n * Wraps a LanguageModelV2 instance with middleware functionality.\n * This function allows you to apply middleware to transform parameters,\n * wrap generate operations, and wrap stream operations of a language model.\n *\n * @param options - Configuration options for wrapping the language model.\n * @param options.model - The original LanguageModelV2 instance to be wrapped.\n * @param options.middleware - The middleware to be applied to the language model. When multiple middlewares are provided, the first middleware will transform the input first, and the last middleware will be wrapped directly around the model.\n * @param options.modelId - Optional custom model ID to override the original model's ID.\n * @param options.providerId - Optional custom provider ID to override the original model's provider.\n * @returns A new LanguageModelV2 instance with middleware applied.\n */\nexport const wrapLanguageModel = ({\n model,\n middleware: middlewareArg,\n modelId,\n providerId,\n}: {\n model: LanguageModelV2;\n middleware: LanguageModelV2Middleware | LanguageModelV2Middleware[];\n modelId?: string;\n providerId?: string;\n}): LanguageModelV2 => {\n return asArray(middlewareArg)\n .reverse()\n .reduce((wrappedModel, middleware) => {\n return doWrap({ model: wrappedModel, middleware, modelId, providerId });\n }, model);\n};\n\nconst doWrap = ({\n model,\n middleware: { transformParams, wrapGenerate, wrapStream },\n modelId,\n providerId,\n}: {\n model: LanguageModelV2;\n middleware: LanguageModelV2Middleware;\n modelId?: string;\n providerId?: string;\n}): LanguageModelV2 => {\n async function doTransform({\n params,\n type,\n }: {\n params: LanguageModelV2CallOptions;\n type: 'generate' | 'stream';\n }) {\n return transformParams ? await transformParams({ params, type }) : params;\n }\n\n return {\n specificationVersion: 'v2',\n\n provider: providerId ?? model.provider,\n modelId: modelId ?? model.modelId,\n\n // TODO middleware should be able to modify the supported urls\n get supportedUrls(): LanguageModelV2['supportedUrls'] {\n return model.supportedUrls;\n },\n\n async doGenerate(\n params: LanguageModelV2CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n const transformedParams = await doTransform({ params, type: 'generate' });\n const doGenerate = async () => model.doGenerate(transformedParams);\n const doStream = async () => model.doStream(transformedParams);\n return wrapGenerate\n ? wrapGenerate({\n doGenerate,\n doStream,\n params: transformedParams,\n model,\n })\n : doGenerate();\n },\n\n async doStream(\n params: LanguageModelV2CallOptions,\n ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n const transformedParams = await doTransform({ params, type: 'stream' });\n const doGenerate = async () => model.doGenerate(transformedParams);\n const doStream = async () => model.doStream(transformedParams);\n return wrapStream\n ? wrapStream({ doGenerate, doStream, params: transformedParams, model })\n : doStream();\n },\n };\n};\n","import {\n EmbeddingModelV2,\n ImageModelV2,\n LanguageModelV2,\n NoSuchModelError,\n ProviderV2,\n} from '@ai-sdk/provider';\n\n/**\n * Creates a custom provider with specified language models, text embedding models, and an optional fallback provider.\n *\n * @param {Object} options - The options for creating the custom provider.\n * @param {Record<string, LanguageModel>} [options.languageModels] - A record of language models, where keys are model IDs and values are LanguageModel instances.\n * @param {Record<string, EmbeddingModel<string>>} [options.textEmbeddingModels] - A record of text embedding models, where keys are model IDs and values are EmbeddingModel<string> instances.\n * @param {Record<string, ImageModel>} [options.imageModels] - A record of image models, where keys are model IDs and values are ImageModel instances.\n * @param {Provider} [options.fallbackProvider] - An optional fallback provider to use when a requested model is not found in the custom provider.\n * @returns {Provider} A Provider object with languageModel, textEmbeddingModel, and imageModel methods.\n *\n * @throws {NoSuchModelError} Throws when a requested model is not found and no fallback provider is available.\n */\nexport function customProvider<\n LANGUAGE_MODELS extends Record<string, LanguageModelV2>,\n EMBEDDING_MODELS extends Record<string, EmbeddingModelV2<string>>,\n IMAGE_MODELS extends Record<string, ImageModelV2>,\n>({\n languageModels,\n textEmbeddingModels,\n imageModels,\n fallbackProvider,\n}: {\n languageModels?: LANGUAGE_MODELS;\n textEmbeddingModels?: EMBEDDING_MODELS;\n imageModels?: IMAGE_MODELS;\n fallbackProvider?: ProviderV2;\n}): ProviderV2 & {\n languageModel(modelId: ExtractModelId<LANGUAGE_MODELS>): LanguageModelV2;\n textEmbeddingModel(\n modelId: ExtractModelId<EMBEDDING_MODELS>,\n ): EmbeddingModelV2<string>;\n imageModel(modelId: ExtractModelId<IMAGE_MODELS>): ImageModelV2;\n} {\n return {\n languageModel(modelId: ExtractModelId<LANGUAGE_MODELS>): LanguageModelV2 {\n if (languageModels != null && modelId in languageModels) {\n return languageModels[modelId];\n }\n\n if (fallbackProvider) {\n return fallbackProvider.languageModel(modelId);\n }\n\n throw new NoSuchModelError({ modelId, modelType: 'languageModel' });\n },\n\n textEmbeddingModel(\n modelId: ExtractModelId<EMBEDDING_MODELS>,\n ): EmbeddingModelV2<string> {\n if (textEmbeddingModels != null && modelId in textEmbeddingModels) {\n return textEmbeddingModels[modelId];\n }\n\n if (fallbackProvider) {\n return fallbackProvider.textEmbeddingModel(modelId);\n }\n\n throw new NoSuchModelError({ modelId, modelType: 'textEmbeddingModel' });\n },\n\n imageModel(modelId: ExtractModelId<IMAGE_MODELS>): ImageModelV2 {\n if (imageModels != null && modelId in imageModels) {\n return imageModels[modelId];\n }\n\n if (fallbackProvider?.imageModel) {\n return fallbackProvider.imageModel(modelId);\n }\n\n throw new NoSuchModelError({ modelId, modelType: 'imageModel' });\n },\n };\n}\n\n/**\n * @deprecated Use `customProvider` instead.\n */\nexport const experimental_customProvider = customProvider;\n\ntype ExtractModelId<MODELS extends Record<string, unknown>> = Extract<\n keyof MODELS,\n string\n>;\n","import { AISDKError, NoSuchModelError } from '@ai-sdk/provider';\n\nconst name = 'AI_NoSuchProviderError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class NoSuchProviderError extends NoSuchModelError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly providerId: string;\n readonly availableProviders: string[];\n\n constructor({\n modelId,\n modelType,\n providerId,\n availableProviders,\n message = `No such provider: ${providerId} (available providers: ${availableProviders.join()})`,\n }: {\n modelId: string;\n modelType: 'languageModel' | 'textEmbeddingModel';\n providerId: string;\n availableProviders: string[];\n message?: string;\n }) {\n super({ errorName: name, modelId, modelType, message });\n\n this.providerId = providerId;\n this.availableProviders = availableProviders;\n }\n\n static isInstance(error: unknown): error is NoSuchProviderError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import {\n EmbeddingModelV2,\n ImageModelV2,\n LanguageModelV2,\n NoSuchModelError,\n ProviderV2,\n} from '@ai-sdk/provider';\nimport { NoSuchProviderError } from './no-such-provider-error';\n\ntype ExtractLiteralUnion<T> = T extends string\n ? string extends T\n ? never\n : T\n : never;\n\nexport interface ProviderRegistryProvider<\n PROVIDERS extends Record<string, ProviderV2> = Record<string, ProviderV2>,\n SEPARATOR extends string = ':',\n> {\n languageModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string\n ? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['languageModel']>>[0]>}`\n : never,\n ): LanguageModelV2;\n languageModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,\n ): LanguageModelV2;\n\n textEmbeddingModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string\n ? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['textEmbeddingModel']>>[0]>}`\n : never,\n ): EmbeddingModelV2<string>;\n textEmbeddingModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,\n ): EmbeddingModelV2<string>;\n\n imageModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string\n ? `${KEY & string}${SEPARATOR}${ExtractLiteralUnion<Parameters<NonNullable<PROVIDERS[KEY]['imageModel']>>[0]>}`\n : never,\n ): ImageModelV2;\n imageModel<KEY extends keyof PROVIDERS>(\n id: KEY extends string ? `${KEY & string}${SEPARATOR}${string}` : never,\n ): ImageModelV2;\n}\n\n/**\n * Creates a registry for the given providers.\n */\nexport function createProviderRegistry<\n PROVIDERS extends Record<string, ProviderV2>,\n SEPARATOR extends string = ':',\n>(\n providers: PROVIDERS,\n {\n separator = ':' as SEPARATOR,\n }: {\n separator?: SEPARATOR;\n } = {},\n): ProviderRegistryProvider<PROVIDERS, SEPARATOR> {\n const registry = new DefaultProviderRegistry<PROVIDERS, SEPARATOR>({\n separator,\n });\n\n for (const [id, provider] of Object.entries(providers)) {\n registry.registerProvider({ id, provider } as {\n id: keyof PROVIDERS;\n provider: PROVIDERS[keyof PROVIDERS];\n });\n }\n\n return registry;\n}\n\n/**\n * @deprecated Use `createProviderRegistry` instead.\n */\nexport const experimental_createProviderRegistry = createProviderRegistry;\n\nclass DefaultProviderRegistry<\n PROVIDERS extends Record<string, ProviderV2>,\n SEPARATOR extends string,\n> implements ProviderRegistryProvider<PROVIDERS, SEPARATOR>\n{\n private providers: PROVIDERS = {} as PROVIDERS;\n private separator: SEPARATOR;\n\n constructor({ separator }: { separator: SEPARATOR }) {\n this.separator = separator;\n }\n\n registerProvider<K extends keyof PROVIDERS>({\n id,\n provider,\n }: {\n id: K;\n provider: PROVIDERS[K];\n }): void {\n this.providers[id] = provider;\n }\n\n private getProvider(id: string): ProviderV2 {\n const provider = this.providers[id as keyof PROVIDERS];\n\n if (provider == null) {\n throw new NoSuchProviderError({\n modelId: id,\n modelType: 'languageModel',\n providerId: id,\n availableProviders: Object.keys(this.providers),\n });\n }\n\n return provider;\n }\n\n private splitId(\n id: string,\n modelType: 'languageModel' | 'textEmbeddingModel' | 'imageModel',\n ): [string, string] {\n const index = id.indexOf(this.separator);\n\n if (index === -1) {\n throw new NoSuchModelError({\n modelId: id,\n modelType,\n message:\n `Invalid ${modelType} id for registry: ${id} ` +\n `(must be in the format \"providerId${this.separator}modelId\")`,\n });\n }\n\n return [id.slice(0, index), id.slice(index + this.separator.length)];\n }\n\n languageModel<KEY extends keyof PROVIDERS>(\n id: `${KEY & string}${SEPARATOR}${string}`,\n ): LanguageModelV2 {\n const [providerId, modelId] = this.splitId(id, 'languageModel');\n const model = this.getProvider(providerId).languageModel?.(modelId);\n\n if (model == null) {\n throw new NoSuchModelError({ modelId: id, modelType: 'languageModel' });\n }\n\n return model;\n }\n\n textEmbeddingModel<KEY extends keyof PROVIDERS>(\n id: `${KEY & string}${SEPARATOR}${string}`,\n ): EmbeddingModelV2<string> {\n const [providerId, modelId] = this.splitId(id, 'textEmbeddingModel');\n const provider = this.getProvider(providerId);\n\n const model = provider.textEmbeddingModel?.(modelId);\n\n if (model == null) {\n throw new NoSuchModelError({\n modelId: id,\n modelType: 'textEmbeddingModel',\n });\n }\n\n return model;\n }\n\n imageModel<KEY extends keyof PROVIDERS>(\n id: `${KEY & string}${SEPARATOR}${string}`,\n ): ImageModelV2 {\n const [providerId, modelId] = this.splitId(id, 'imageModel');\n const provider = this.getProvider(providerId);\n\n const model = provider.imageModel?.(modelId);\n\n if (model == null) {\n throw new NoSuchModelError({ modelId: id, modelType: 'imageModel' });\n }\n\n return model;\n }\n}\n","import { JSONSchema7 } from '@ai-sdk/provider';\nimport { jsonSchema } from '@ai-sdk/provider-utils';\nimport { z, ZodType } from 'zod';\nimport { MCPClientError } from '../../../src/error/mcp-client-error';\nimport { tool, Tool, ToolExecutionOptions } from '../tool';\nimport {\n JSONRPCError,\n JSONRPCNotification,\n JSONRPCRequest,\n JSONRPCResponse,\n} from './json-rpc-message';\nimport {\n createMcpTransport,\n isCustomMcpTransport,\n MCPTransport,\n MCPTransportConfig,\n} from './mcp-transport';\nimport {\n CallToolResult,\n CallToolResultSchema,\n Configuration as ClientConfiguration,\n InitializeResultSchema,\n LATEST_PROTOCOL_VERSION,\n ListToolsResult,\n ListToolsResultSchema,\n McpToolSet,\n Notification,\n PaginatedRequest,\n Request,\n RequestOptions,\n ServerCapabilities,\n SUPPORTED_PROTOCOL_VERSIONS,\n ToolSchemas,\n} from './types';\n\nconst CLIENT_VERSION = '1.0.0';\n\ninterface MCPClientConfig {\n /** Transport configuration for connecting to the MCP server */\n transport: MCPTransportConfig | MCPTransport;\n /** Optional callback for uncaught errors */\n onUncaughtError?: (error: unknown) => void;\n /** Optional client name, defaults to 'ai-sdk-mcp-client' */\n name?: string;\n}\n\nexport async function createMCPClient(\n config: MCPClientConfig,\n): Promise<MCPClient> {\n const client = new MCPClient(config);\n await client.init();\n return client;\n}\n\n/**\n * A lightweight MCP Client implementation\n *\n * The primary purpose of this client is tool conversion between MCP<>AI SDK\n * but can later be extended to support other MCP features\n *\n * Tool parameters are automatically inferred from the server's JSON schema\n * if not explicitly provided in the tools configuration\n *\n * This client is meant to be used to communicate with a single server. To communicate and fetch tools across multiple servers, it's recommended to create a new client instance per server.\n *\n * Not supported:\n * - Client options (e.g. sampling, roots) as they are not needed for tool conversion\n * - Accepting notifications\n * - Session management (when passing a sessionId to an instance of the Streamable HTTP transport)\n * - Resumable SSE streams\n */\nclass MCPClient {\n private transport: MCPTransport;\n private onUncaughtError?: (error: unknown) => void;\n private clientInfo: ClientConfiguration;\n private requestMessageId = 0;\n private responseHandlers: Map<\n number,\n (response: JSONRPCResponse | Error) => void\n > = new Map();\n private serverCapabilities: ServerCapabilities = {};\n private isClosed = true;\n\n constructor({\n transport: transportConfig,\n name = 'ai-sdk-mcp-client',\n onUncaughtError,\n }: MCPClientConfig) {\n this.onUncaughtError = onUncaughtError;\n\n if (isCustomMcpTransport(transportConfig)) {\n this.transport = transportConfig;\n } else {\n this.transport = createMcpTransport(transportConfig);\n }\n\n this.transport.onclose = () => this.onClose();\n this.transport.onerror = (error: Error) => this.onError(error);\n this.transport.onmessage = message => {\n if ('method' in message) {\n // This lightweight client implementation does not support\n // receiving notifications or requests from server.\n // If we get an unsupported message, we can safely ignore it and pass to the onError handler:\n this.onError(\n new MCPClientError({\n message: 'Unsupported message type',\n }),\n );\n return;\n }\n\n this.onResponse(message);\n };\n\n this.clientInfo = {\n name,\n version: CLIENT_VERSION,\n };\n }\n\n async init(): Promise<this> {\n try {\n await this.transport.start();\n this.isClosed = false;\n\n const result = await this.request({\n request: {\n method: 'initialize',\n params: {\n protocolVersion: LATEST_PROTOCOL_VERSION,\n capabilities: {},\n clientInfo: this.clientInfo,\n },\n },\n resultSchema: InitializeResultSchema,\n });\n\n if (result === undefined) {\n throw new MCPClientError({\n message: 'Server sent invalid initialize result',\n });\n }\n\n if (!SUPPORTED_PROTOCOL_VERSIONS.includes(result.protocolVersion)) {\n throw new MCPClientError({\n message: `Server's protocol version is not supported: ${result.protocolVersion}`,\n });\n }\n\n this.serverCapabilities = result.capabilities;\n\n // Complete initialization handshake:\n await this.notification({\n method: 'notifications/initialized',\n });\n\n return this;\n } catch (error) {\n await this.close();\n throw error;\n }\n }\n\n async close(): Promise<void> {\n if (this.isClosed) return;\n await this.transport?.close();\n this.onClose();\n }\n\n private assertCapability(method: string): void {\n switch (method) {\n case 'initialize':\n break;\n case 'tools/list':\n case 'tools/call':\n if (!this.serverCapabilities.tools) {\n throw new MCPClientError({\n message: `Server does not support tools`,\n });\n }\n break;\n default:\n throw new MCPClientError({\n message: `Unsupported method: ${method}`,\n });\n }\n }\n\n private async request<T extends ZodType<object>>({\n request,\n resultSchema,\n options,\n }: {\n request: Request;\n resultSchema: T;\n options?: RequestOptions;\n }): Promise<z.infer<T>> {\n return new Promise((resolve, reject) => {\n if (this.isClosed) {\n return reject(\n new MCPClientError({\n message: 'Attempted to send a request from a closed client',\n }),\n );\n }\n\n this.assertCapability(request.method);\n\n const signal = options?.signal;\n signal?.throwIfAborted();\n\n const messageId = this.requestMessageId++;\n const jsonrpcRequest: JSONRPCRequest = {\n ...request,\n jsonrpc: '2.0',\n id: messageId,\n };\n\n const cleanup = () => {\n this.responseHandlers.delete(messageId);\n };\n\n this.responseHandlers.set(messageId, response => {\n if (signal?.aborted) {\n return reject(\n new MCPClientError({\n message: 'Request was aborted',\n cause: signal.reason,\n }),\n );\n }\n\n if (response instanceof Error) {\n return reject(response);\n }\n\n try {\n const result = resultSchema.parse(response.result);\n resolve(result);\n } catch (error) {\n const parseError = new MCPClientError({\n message: 'Failed to parse server response',\n cause: error,\n });\n reject(parseError);\n }\n });\n\n this.transport.send(jsonrpcRequest).catch(error => {\n cleanup();\n reject(error);\n });\n });\n }\n\n private async listTools({\n params,\n options,\n }: {\n params?: PaginatedRequest['params'];\n options?: RequestOptions;\n } = {}): Promise<ListToolsResult> {\n try {\n return this.request({\n request: { method: 'tools/list', params },\n resultSchema: ListToolsResultSchema,\n options,\n });\n } catch (error) {\n throw error;\n }\n }\n\n private async callTool({\n name,\n args,\n options,\n }: {\n name: string;\n args: Record<string, unknown>;\n options?: ToolExecutionOptions;\n }): Promise<CallToolResult> {\n try {\n return this.request({\n request: { method: 'tools/call', params: { name, arguments: args } },\n resultSchema: CallToolResultSchema,\n options: {\n signal: options?.abortSignal,\n },\n });\n } catch (error) {\n throw error;\n }\n }\n\n private async notification(notification: Notification): Promise<void> {\n const jsonrpcNotification: JSONRPCNotification = {\n ...notification,\n jsonrpc: '2.0',\n };\n await this.transport.send(jsonrpcNotification);\n }\n\n /**\n * Returns a set of AI SDK tools from the MCP server\n * @returns A record of tool names to their implementations\n */\n async tools<TOOL_SCHEMAS extends ToolSchemas = 'automatic'>({\n schemas = 'automatic',\n }: {\n schemas?: TOOL_SCHEMAS;\n } = {}): Promise<McpToolSet<TOOL_SCHEMAS>> {\n const tools: Record<string, Tool> = {};\n\n try {\n const listToolsResult = await this.listTools();\n\n for (const { name, description, inputSchema } of listToolsResult.tools) {\n if (schemas !== 'automatic' && !(name in schemas)) {\n continue;\n }\n\n const parameters =\n schemas === 'automatic'\n ? jsonSchema({\n ...inputSchema,\n properties: inputSchema.properties ?? {},\n additionalProperties: false,\n } as JSONSchema7)\n : schemas[name].parameters;\n\n const self = this;\n const toolWithExecute = tool({\n description,\n parameters,\n execute: async (\n args: any,\n options: ToolExecutionOptions,\n ): Promise<CallToolResult> => {\n options?.abortSignal?.throwIfAborted();\n\n return self.callTool({\n name,\n args,\n options,\n });\n },\n });\n\n tools[name] = toolWithExecute;\n }\n\n return tools as McpToolSet<TOOL_SCHEMAS>;\n } catch (error) {\n throw error;\n }\n }\n\n private onClose(): void {\n if (this.isClosed) return;\n\n this.isClosed = true;\n const error = new MCPClientError({\n message: 'Connection closed',\n });\n\n for (const handler of this.responseHandlers.values()) {\n handler(error);\n }\n\n this.responseHandlers.clear();\n }\n\n private onError(error: unknown): void {\n if (this.onUncaughtError) {\n this.onUncaughtError(error);\n }\n }\n\n private onResponse(response: JSONRPCResponse | JSONRPCError): void {\n const messageId = Number(response.id);\n const handler = this.responseHandlers.get(messageId);\n\n if (handler === undefined) {\n throw new MCPClientError({\n message: `Protocol error: Received a response for an unknown message ID: ${JSON.stringify(\n response,\n )}`,\n });\n }\n\n this.responseHandlers.delete(messageId);\n\n handler(\n 'result' in response\n ? response\n : new MCPClientError({\n message: response.error.message,\n cause: response.error,\n }),\n );\n }\n}\n","import { JSONObject, JSONValue } from '@ai-sdk/provider';\nimport { Schema } from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\nimport { ModelMessage } from '../prompt/message';\nimport { ToolResultContent } from '../prompt/tool-result-content';\n\nexport type ToolParameters<T = JSONObject> = z.Schema<T> | Schema<T>;\n\nexport interface ToolExecutionOptions {\n /**\n * The ID of the tool call. You can use it e.g. when sending tool-call related information with stream data.\n */\n toolCallId: string;\n\n /**\n * Messages that were sent to the language model to initiate the response that contained the tool call.\n * The messages **do not** include the system prompt nor the assistant response that contained the tool call.\n */\n messages: ModelMessage[];\n\n /**\n * An optional abort signal that indicates that the overall operation should be aborted.\n */\n abortSignal?: AbortSignal;\n}\n\ntype NeverOptional<N, T> = 0 extends 1 & N\n ? Partial<T>\n : [N] extends [never]\n ? Partial<Record<keyof T, undefined>>\n : T;\n\n/**\nA tool contains the description and the schema of the input that the tool expects.\nThis enables the language model to generate the input.\n\nThe tool can also contain an optional execute function for the actual execution function of the tool.\n */\nexport type Tool<\n PARAMETERS extends JSONValue | unknown | never = any,\n RESULT = any,\n> = {\n /**\nAn optional description of what the tool does.\nWill be used by the language model to decide whether to use the tool.\nNot used for provider-defined tools.\n */\n description?: string;\n} & NeverOptional<\n PARAMETERS,\n {\n /**\nThe schema of the input that the tool expects. The language model will use this to generate the input.\nIt is also used to validate the output of the language model.\nUse descriptions to make the input understandable for the language model.\n */\n parameters: ToolParameters<PARAMETERS>;\n }\n> &\n NeverOptional<\n RESULT,\n {\n /**\nAn async function that is called with the arguments from the tool call and produces a result.\nIf not provided, the tool will not be executed automatically.\n\n@args is the input of the tool call.\n@options.abortSignal is a signal that can be used to abort the tool call.\n */\n execute: (\n args: [PARAMETERS] extends [never] ? undefined : PARAMETERS,\n options: ToolExecutionOptions,\n ) => PromiseLike<RESULT>;\n\n /**\n Optional conversion function that maps the tool result to multi-part tool content for LLMs.\n */\n experimental_toToolResultContent?: (result: RESULT) => ToolResultContent;\n }\n > &\n (\n | {\n /**\nFunction tool.\n */\n type?: undefined | 'function';\n }\n | {\n /**\nProvider-defined tool.\n */\n type: 'provider-defined';\n\n /**\nThe ID of the tool. Should follow the format `<provider-name>.<tool-name>`.\n */\n id: `${string}.${string}`;\n\n /**\nThe arguments for configuring the tool. Must match the expected arguments defined by the provider for this tool.\n */\n args: Record<string, unknown>;\n }\n );\n\n/**\nHelper function for inferring the execute args of a tool.\n */\nexport function tool(tool: Tool<never, never>): Tool<never, never>;\nexport function tool<PARAMETERS>(\n tool: Tool<PARAMETERS, never>,\n): Tool<PARAMETERS, never>;\nexport function tool<RESULT>(tool: Tool<never, RESULT>): Tool<never, RESULT>;\nexport function tool<PARAMETERS, RESULT>(\n tool: Tool<PARAMETERS, RESULT>,\n): Tool<PARAMETERS, RESULT>;\nexport function tool(tool: any): any {\n return tool;\n}\n\nexport type MappedTool<T extends Tool | JSONObject, RESULT extends any> =\n T extends Tool<infer P>\n ? Tool<P, RESULT>\n : T extends JSONObject\n ? Tool<T, RESULT>\n : never;\n","import { createEventSourceParserStream } from '@ai-sdk/provider-utils';\nimport { MCPClientError } from '../../../src/error/mcp-client-error';\nimport { JSONRPCMessage, JSONRPCMessageSchema } from './json-rpc-message';\nimport { MCPTransport } from './mcp-transport';\n\nexport class SseMCPTransport implements MCPTransport {\n private endpoint?: URL;\n private abortController?: AbortController;\n private url: URL;\n private connected = false;\n private sseConnection?: {\n close: () => void;\n };\n private headers?: Record<string, string>;\n\n onclose?: () => void;\n onerror?: (error: unknown) => void;\n onmessage?: (message: JSONRPCMessage) => void;\n\n constructor({\n url,\n headers,\n }: {\n url: string;\n headers?: Record<string, string>;\n }) {\n this.url = new URL(url);\n this.headers = headers;\n }\n\n async start(): Promise<void> {\n return new Promise<void>((resolve, reject) => {\n if (this.connected) {\n return resolve();\n }\n\n this.abortController = new AbortController();\n\n const establishConnection = async () => {\n try {\n const headers = new Headers(this.headers);\n headers.set('Accept', 'text/event-stream');\n const response = await fetch(this.url.href, {\n headers,\n signal: this.abortController?.signal,\n });\n\n if (!response.ok || !response.body) {\n const error = new MCPClientError({\n message: `MCP SSE Transport Error: ${response.status} ${response.statusText}`,\n });\n this.onerror?.(error);\n return reject(error);\n }\n\n const stream = response.body\n .pipeThrough(new TextDecoderStream())\n .pipeThrough(createEventSourceParserStream());\n\n const reader = stream.getReader();\n\n const processEvents = async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n\n if (done) {\n if (this.connected) {\n this.connected = false;\n throw new MCPClientError({\n message:\n 'MCP SSE Transport Error: Connection closed unexpectedly',\n });\n }\n return;\n }\n\n const { event, data } = value;\n\n if (event === 'endpoint') {\n this.endpoint = new URL(data, this.url);\n\n if (this.endpoint.origin !== this.url.origin) {\n throw new MCPClientError({\n message: `MCP SSE Transport Error: Endpoint origin does not match connection origin: ${this.endpoint.origin}`,\n });\n }\n\n this.connected = true;\n resolve();\n } else if (event === 'message') {\n try {\n const message = JSONRPCMessageSchema.parse(\n JSON.parse(data),\n );\n this.onmessage?.(message);\n } catch (error) {\n const e = new MCPClientError({\n message:\n 'MCP SSE Transport Error: Failed to parse message',\n cause: error,\n });\n this.onerror?.(e);\n // We do not throw here so we continue processing events after reporting the error\n }\n }\n }\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n this.onerror?.(error);\n reject(error);\n }\n };\n\n this.sseConnection = {\n close: () => reader.cancel(),\n };\n\n processEvents();\n } catch (error) {\n if (error instanceof Error && error.name === 'AbortError') {\n return;\n }\n\n this.onerror?.(error);\n reject(error);\n }\n };\n\n establishConnection();\n });\n }\n\n async close(): Promise<void> {\n this.connected = false;\n this.sseConnection?.close();\n this.abortController?.abort();\n this.onclose?.();\n }\n\n async send(message: JSONRPCMessage): Promise<void> {\n if (!this.endpoint || !this.connected) {\n throw new MCPClientError({\n message: 'MCP SSE Transport Error: Not connected',\n });\n }\n\n try {\n const headers = new Headers(this.headers);\n headers.set('Content-Type', 'application/json');\n const init = {\n method: 'POST',\n headers,\n body: JSON.stringify(message),\n signal: this.abortController?.signal,\n };\n\n const response = await fetch(this.endpoint, init);\n\n if (!response.ok) {\n const text = await response.text().catch(() => null);\n const error = new MCPClientError({\n message: `MCP SSE Transport Error: POSTing to endpoint (HTTP ${response.status}): ${text}`,\n });\n this.onerror?.(error);\n return;\n }\n } catch (error) {\n this.onerror?.(error);\n return;\n }\n }\n}\n\nexport function deserializeMessage(line: string): JSONRPCMessage {\n return JSONRPCMessageSchema.parse(JSON.parse(line));\n}\n","import { z } from 'zod';\nimport { BaseParamsSchema, RequestSchema, ResultSchema } from './types';\n\nconst JSONRPC_VERSION = '2.0';\n\nconst JSONRPCRequestSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n })\n .merge(RequestSchema)\n .strict();\n\nexport type JSONRPCRequest = z.infer<typeof JSONRPCRequestSchema>;\n\nconst JSONRPCResponseSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n result: ResultSchema,\n })\n .strict();\n\nexport type JSONRPCResponse = z.infer<typeof JSONRPCResponseSchema>;\n\nconst JSONRPCErrorSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n id: z.union([z.string(), z.number().int()]),\n error: z.object({\n code: z.number().int(),\n message: z.string(),\n data: z.optional(z.unknown()),\n }),\n })\n .strict();\n\nexport type JSONRPCError = z.infer<typeof JSONRPCErrorSchema>;\n\nconst JSONRPCNotificationSchema = z\n .object({\n jsonrpc: z.literal(JSONRPC_VERSION),\n })\n .merge(\n z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n }),\n )\n .strict();\n\nexport type JSONRPCNotification = z.infer<typeof JSONRPCNotificationSchema>;\n\nexport const JSONRPCMessageSchema = z.union([\n JSONRPCRequestSchema,\n JSONRPCNotificationSchema,\n JSONRPCResponseSchema,\n JSONRPCErrorSchema,\n]);\n\nexport type JSONRPCMessage = z.infer<typeof JSONRPCMessageSchema>;\n","import { z } from 'zod';\nimport { MappedTool, Tool, ToolParameters } from '../tool';\nimport { JSONObject } from '@ai-sdk/provider';\n\nexport const LATEST_PROTOCOL_VERSION = '2024-11-05';\nexport const SUPPORTED_PROTOCOL_VERSIONS = [\n LATEST_PROTOCOL_VERSION,\n '2024-10-07',\n];\n\nexport type ToolSchemas =\n | Record<string, { parameters: ToolParameters<JSONObject | unknown> }>\n | 'automatic'\n | undefined;\n\nexport type McpToolSet<TOOL_SCHEMAS extends ToolSchemas = 'automatic'> =\n TOOL_SCHEMAS extends Record<string, { parameters: ToolParameters<any> }>\n ? {\n [K in keyof TOOL_SCHEMAS]: MappedTool<TOOL_SCHEMAS[K], CallToolResult> &\n Required<\n Pick<MappedTool<TOOL_SCHEMAS[K], CallToolResult>, 'execute'>\n >;\n }\n : McpToolSet<Record<string, { parameters: ToolParameters<unknown> }>>;\n\nconst ClientOrServerImplementationSchema = z\n .object({\n name: z.string(),\n version: z.string(),\n })\n .passthrough();\nexport type Configuration = z.infer<typeof ClientOrServerImplementationSchema>;\n\nexport const BaseParamsSchema = z\n .object({\n _meta: z.optional(z.object({}).passthrough()),\n })\n .passthrough();\ntype BaseParams = z.infer<typeof BaseParamsSchema>;\nexport const ResultSchema = BaseParamsSchema;\n\nexport const RequestSchema = z.object({\n method: z.string(),\n params: z.optional(BaseParamsSchema),\n});\nexport type Request = z.infer<typeof RequestSchema>;\nexport type RequestOptions = {\n signal?: AbortSignal;\n timeout?: number;\n maxTotalTimeout?: number;\n};\n\nexport type Notification = z.infer<typeof RequestSchema>;\n\nconst ServerCapabilitiesSchema = z\n .object({\n experimental: z.optional(z.object({}).passthrough()),\n logging: z.optional(z.object({}).passthrough()),\n prompts: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n resources: z.optional(\n z\n .object({\n subscribe: z.optional(z.boolean()),\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n tools: z.optional(\n z\n .object({\n listChanged: z.optional(z.boolean()),\n })\n .passthrough(),\n ),\n })\n .passthrough();\nexport type ServerCapabilities = z.infer<typeof ServerCapabilitiesSchema>;\n\nexport const InitializeResultSchema = ResultSchema.extend({\n protocolVersion: z.string(),\n capabilities: ServerCapabilitiesSchema,\n serverInfo: ClientOrServerImplementationSchema,\n instructions: z.optional(z.string()),\n});\nexport type InitializeResult = z.infer<typeof InitializeResultSchema>;\n\nexport type PaginatedRequest = Request & {\n params?: BaseParams & {\n cursor?: string;\n };\n};\n\nconst PaginatedResultSchema = ResultSchema.extend({\n nextCursor: z.optional(z.string()),\n});\n\nconst ToolSchema = z\n .object({\n name: z.string(),\n description: z.optional(z.string()),\n inputSchema: z\n .object({\n type: z.literal('object'),\n properties: z.optional(z.object({}).passthrough()),\n })\n .passthrough(),\n })\n .passthrough();\nexport type MCPTool = z.infer<typeof ToolSchema>;\nexport const ListToolsResultSchema = PaginatedResultSchema.extend({\n tools: z.array(ToolSchema),\n});\nexport type ListToolsResult = z.infer<typeof ListToolsResultSchema>;\n\nconst TextContentSchema = z\n .object({\n type: z.literal('text'),\n text: z.string(),\n })\n .passthrough();\nconst ImageContentSchema = z\n .object({\n type: z.literal('image'),\n data: z.string().base64(),\n mimeType: z.string(),\n })\n .passthrough();\nconst ResourceContentsSchema = z\n .object({\n /**\n * The URI of this resource.\n */\n uri: z.string(),\n /**\n * The MIME type of this resource, if known.\n */\n mimeType: z.optional(z.string()),\n })\n .passthrough();\nconst TextResourceContentsSchema = ResourceContentsSchema.extend({\n text: z.string(),\n});\nconst BlobResourceContentsSchema = ResourceContentsSchema.extend({\n blob: z.string().base64(),\n});\nconst EmbeddedResourceSchema = z\n .object({\n type: z.literal('resource'),\n resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n })\n .passthrough();\n\nexport const CallToolResultSchema = ResultSchema.extend({\n content: z.array(\n z.union([TextContentSchema, ImageContentSchema, EmbeddedResourceSchema]),\n ),\n isError: z.boolean().default(false).optional(),\n}).or(\n ResultSchema.extend({\n toolResult: z.unknown(),\n }),\n);\nexport type CallToolResult = z.infer<typeof CallToolResultSchema>;\n","import { MCPClientError } from '../../../src/error/mcp-client-error';\nimport { JSONRPCMessage } from './json-rpc-message';\nimport { SseMCPTransport } from './mcp-sse-transport';\n\n/**\n * Transport interface for MCP (Model Context Protocol) communication.\n * Maps to the `Transport` interface in the MCP spec.\n */\nexport interface MCPTransport {\n /**\n * Initialize and start the transport\n */\n start(): Promise<void>;\n\n /**\n * Send a JSON-RPC message through the transport\n * @param message The JSON-RPC message to send\n */\n send(message: JSONRPCMessage): Promise<void>;\n\n /**\n * Clean up and close the transport\n */\n close(): Promise<void>;\n\n /**\n * Event handler for transport closure\n */\n onclose?: () => void;\n\n /**\n * Event handler for transport errors\n */\n onerror?: (error: Error) => void;\n\n /**\n * Event handler for received messages\n */\n onmessage?: (message: JSONRPCMessage) => void;\n}\n\nexport type MCPTransportConfig = {\n type: 'sse';\n\n /**\n * The URL of the MCP server.\n */\n url: string;\n\n /**\n * Additional HTTP headers to be sent with requests.\n */\n headers?: Record<string, string>;\n};\n\nexport function createMcpTransport(config: MCPTransportConfig): MCPTransport {\n if (config.type !== 'sse') {\n throw new MCPClientError({\n message:\n 'Unsupported or invalid transport configuration. If you are using a custom transport, make sure it implements the MCPTransport interface.',\n });\n }\n\n return new SseMCPTransport(config);\n}\n\nexport function isCustomMcpTransport(\n transport: MCPTransportConfig | MCPTransport,\n): transport is MCPTransport {\n return (\n 'start' in transport &&\n typeof transport.start === 'function' &&\n 'send' in transport &&\n typeof transport.send === 'function' &&\n 'close' in transport &&\n typeof transport.close === 'function'\n );\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { TranscriptionModelResponseMetadata } from '../../core/types/transcription-model-response-metadata';\n\n/**\nError that is thrown when no transcript was generated.\n */\nexport class NoTranscriptGeneratedError extends AISDKError {\n readonly responses: Array<TranscriptionModelResponseMetadata>;\n\n constructor(options: {\n responses: Array<TranscriptionModelResponseMetadata>;\n }) {\n super({\n name: 'AI_NoTranscriptGeneratedError',\n message: 'No transcript generated.',\n });\n\n this.responses = options.responses;\n }\n}\n","import { JSONValue, TranscriptionModelV1 } from '@ai-sdk/provider';\nimport { NoTranscriptGeneratedError } from '../../src/error/no-transcript-generated-error';\nimport {\n audioMediaTypeSignatures,\n detectMediaType,\n} from '../../src/util/detect-media-type';\nimport { download } from '../../src/util/download';\nimport { prepareRetries } from '../../src/util/prepare-retries';\nimport { DataContent } from '../prompt';\nimport { convertDataContentToUint8Array } from '../prompt/data-content';\nimport { ProviderOptions } from '../types/provider-metadata';\nimport { TranscriptionWarning } from '../types/transcription-model';\nimport { TranscriptionModelResponseMetadata } from '../types/transcription-model-response-metadata';\nimport { TranscriptionResult } from './transcribe-result';\n\n/**\nGenerates transcripts using a transcription model.\n\n@param model - The transcription model to use.\n@param audio - The audio data to transcribe as DataContent (string | Uint8Array | ArrayBuffer | Buffer) or a URL.\n@param providerOptions - Additional provider-specific options that are passed through to the provider\nas body parameters.\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@returns A result object that contains the generated transcript.\n */\nexport async function transcribe({\n model,\n audio,\n providerOptions = {},\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n}: {\n /**\nThe transcription model to use.\n */\n model: TranscriptionModelV1;\n\n /**\nThe audio data to transcribe.\n */\n audio: DataContent | URL;\n\n /**\nAdditional provider-specific options that are passed through to the provider\nas body parameters.\n\nThe outer record is keyed by the provider name, and the inner\nrecord is keyed by the provider-specific metadata key.\n```ts\n{\n \"openai\": {\n \"temperature\": 0\n }\n}\n```\n */\n providerOptions?: ProviderOptions;\n\n /**\nMaximum number of retries per transcript model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n}): Promise<TranscriptionResult> {\n const { retry } = prepareRetries({ maxRetries: maxRetriesArg });\n const audioData =\n audio instanceof URL\n ? (await download({ url: audio })).data\n : convertDataContentToUint8Array(audio);\n\n const result = await retry(() =>\n model.doGenerate({\n audio: audioData,\n abortSignal,\n headers,\n providerOptions,\n mediaType:\n detectMediaType({\n data: audioData,\n signatures: audioMediaTypeSignatures,\n }) ?? 'audio/wav',\n }),\n );\n\n if (!result.text) {\n throw new NoTranscriptGeneratedError({ responses: [result.response] });\n }\n\n return new DefaultTranscriptionResult({\n text: result.text,\n segments: result.segments,\n language: result.language,\n durationInSeconds: result.durationInSeconds,\n warnings: result.warnings,\n responses: [result.response],\n providerMetadata: result.providerMetadata,\n });\n}\n\nclass DefaultTranscriptionResult implements TranscriptionResult {\n readonly text: string;\n readonly segments: Array<{\n text: string;\n startSecond: number;\n endSecond: number;\n }>;\n readonly language: string | undefined;\n readonly durationInSeconds: number | undefined;\n readonly warnings: Array<TranscriptionWarning>;\n readonly responses: Array<TranscriptionModelResponseMetadata>;\n readonly providerMetadata: Record<string, Record<string, JSONValue>>;\n\n constructor(options: {\n text: string;\n segments: Array<{\n text: string;\n startSecond: number;\n endSecond: number;\n }>;\n language: string | undefined;\n durationInSeconds: number | undefined;\n warnings: Array<TranscriptionWarning>;\n responses: Array<TranscriptionModelResponseMetadata>;\n providerMetadata: Record<string, Record<string, JSONValue>> | undefined;\n }) {\n this.text = options.text;\n this.segments = options.segments;\n this.language = options.language;\n this.durationInSeconds = options.durationInSeconds;\n this.warnings = options.warnings;\n this.responses = options.responses;\n this.providerMetadata = options.providerMetadata ?? {};\n }\n}\n"],"mappings":"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","names":["import_provider_utils","import_provider","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","text","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","import_provider","name","marker","symbol","_a","fetch","_a","import_provider_utils","import_provider_utils","import_provider_utils","part","generateId","generateIdFunc","_a","lastMessage","name","_a","_a","processBlock","tool","import_provider_utils","import_provider_utils","getOriginalFetch","fetch","_a","fetch","generateId","generateIdFunc","getOriginalFetch","fetch","_a","isContinuation","import_provider_utils","_a","delay","delayFunction","import_provider","import_provider_utils","_a","name","import_api","name","attributes","_a","embedding","usage","embeddings","_a","usage","import_provider_utils","import_provider_utils","_a","import_provider","import_provider_utils","content","import_provider_utils","_a","import_provider","import_provider_utils","import_zod","_a","_a","import_provider","import_provider_utils","import_zod","import_zod","import_zod","import_zod","import_zod","import_zod","import_provider","import_provider_utils","_a","generateId","_a","span","result","text","object","import_provider_utils","_a","_a","originalGenerateId","generateId","now","doStreamSpan","object","_a","error","import_provider","text","_a","import_provider_utils","import_provider_utils","object","name","tool","import_provider_utils","tool","_a","tool","originalGenerateId","generateId","_a","callSettings","tool","span","_b","_c","_d","_e","result","import_provider_utils","text","import_provider_utils","import_provider","delay","originalDelay","import_provider_utils","import_provider_utils","tool","originalGenerateId","now","generateId","text","_a","stream","tool","doStreamSpan","activeReasoningPart","_b","_c","_d","text","text","import_provider","import_provider","name","marker","symbol","_a","import_provider","_a","import_provider_utils","tool","import_provider_utils","import_zod","import_zod","_a","_b","_c","text","name","_a","import_provider","_a"]}