'use strict'; var chunkR5MKJ5UG_cjs = require('./chunk-R5MKJ5UG.cjs'); var v4 = require('zod/v4'); var zod = require('zod'); function getContext() { return { headers: {} }; } async function getVercelOidcToken() { if (process.env.VERCEL_OIDC_TOKEN) { return process.env.VERCEL_OIDC_TOKEN ?? ""; } throw new Error("@vercel/oidc is not available in the vendored @internal AI packages. Provide an API key instead."); } var marker = "vercel.ai.gateway.error"; var symbol = Symbol.for(marker); var _a; var _b; var GatewayError = class _GatewayError extends (_b = Error, _a = symbol, _b) { constructor({ message, statusCode = 500, cause }) { super(message); this[_a] = true; this.statusCode = statusCode; this.cause = cause; } /** * Checks if the given error is a Gateway Error. * @param {unknown} error - The error to check. * @returns {boolean} True if the error is a Gateway Error, false otherwise. */ static isInstance(error) { return _GatewayError.hasMarker(error); } static hasMarker(error) { return typeof error === "object" && error !== null && symbol in error && error[symbol] === true; } }; var name = "GatewayAuthenticationError"; var marker2 = `vercel.ai.gateway.error.${name}`; var symbol2 = Symbol.for(marker2); var _a2; var _b2; var GatewayAuthenticationError = class _GatewayAuthenticationError extends (_b2 = GatewayError, _a2 = symbol2, _b2) { constructor({ message = "Authentication failed", statusCode = 401, cause } = {}) { super({ message, statusCode, cause }); this[_a2] = true; this.name = name; this.type = "authentication_error"; } static isInstance(error) { return GatewayError.hasMarker(error) && symbol2 in error; } /** * Creates a contextual error message when authentication fails */ static createContextualError({ apiKeyProvided, oidcTokenProvided, message = "Authentication failed", statusCode = 401, cause }) { let contextualMessage; if (apiKeyProvided) { contextualMessage = `AI Gateway authentication failed: Invalid API key. Create a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys Provide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`; } else if (oidcTokenProvided) { contextualMessage = `AI Gateway authentication failed: Invalid OIDC token. Run 'npx vercel link' to link your project, then 'vc env pull' to fetch the token. Alternatively, use an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys`; } else { contextualMessage = `AI Gateway authentication failed: No authentication provided. Option 1 - API key: Create an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys Provide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable. Option 2 - OIDC token: Run 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`; } return new _GatewayAuthenticationError({ message: contextualMessage, statusCode, cause }); } }; var name2 = "GatewayInvalidRequestError"; var marker3 = `vercel.ai.gateway.error.${name2}`; var symbol3 = Symbol.for(marker3); var _a3; var _b3; var GatewayInvalidRequestError = class extends (_b3 = GatewayError, _a3 = symbol3, _b3) { constructor({ message = "Invalid request", statusCode = 400, cause } = {}) { super({ message, statusCode, cause }); this[_a3] = true; this.name = name2; this.type = "invalid_request_error"; } static isInstance(error) { return GatewayError.hasMarker(error) && symbol3 in error; } }; var name3 = "GatewayRateLimitError"; var marker4 = `vercel.ai.gateway.error.${name3}`; var symbol4 = Symbol.for(marker4); var _a4; var _b4; var GatewayRateLimitError = class extends (_b4 = GatewayError, _a4 = symbol4, _b4) { constructor({ message = "Rate limit exceeded", statusCode = 429, cause } = {}) { super({ message, statusCode, cause }); this[_a4] = true; this.name = name3; this.type = "rate_limit_exceeded"; } static isInstance(error) { return GatewayError.hasMarker(error) && symbol4 in error; } }; var name4 = "GatewayModelNotFoundError"; var marker5 = `vercel.ai.gateway.error.${name4}`; var symbol5 = Symbol.for(marker5); var modelNotFoundParamSchema = chunkR5MKJ5UG_cjs.lazyValidator( () => chunkR5MKJ5UG_cjs.zodSchema( v4.z.object({ modelId: v4.z.string() }) ) ); var _a5; var _b5; var GatewayModelNotFoundError = class extends (_b5 = GatewayError, _a5 = symbol5, _b5) { constructor({ message = "Model not found", statusCode = 404, modelId, cause } = {}) { super({ message, statusCode, cause }); this[_a5] = true; this.name = name4; this.type = "model_not_found"; this.modelId = modelId; } static isInstance(error) { return GatewayError.hasMarker(error) && symbol5 in error; } }; var name5 = "GatewayInternalServerError"; var marker6 = `vercel.ai.gateway.error.${name5}`; var symbol6 = Symbol.for(marker6); var _a6; var _b6; var GatewayInternalServerError = class extends (_b6 = GatewayError, _a6 = symbol6, _b6) { constructor({ message = "Internal server error", statusCode = 500, cause } = {}) { super({ message, statusCode, cause }); this[_a6] = true; this.name = name5; this.type = "internal_server_error"; } static isInstance(error) { return GatewayError.hasMarker(error) && symbol6 in error; } }; var name6 = "GatewayResponseError"; var marker7 = `vercel.ai.gateway.error.${name6}`; var symbol7 = Symbol.for(marker7); var _a7; var _b7; var GatewayResponseError = class extends (_b7 = GatewayError, _a7 = symbol7, _b7) { constructor({ message = "Invalid response from Gateway", statusCode = 502, response, validationError, cause } = {}) { super({ message, statusCode, cause }); this[_a7] = true; this.name = name6; this.type = "response_error"; this.response = response; this.validationError = validationError; } static isInstance(error) { return GatewayError.hasMarker(error) && symbol7 in error; } }; async function createGatewayErrorFromResponse({ response, statusCode, defaultMessage = "Gateway request failed", cause, authMethod }) { const parseResult = await chunkR5MKJ5UG_cjs.safeValidateTypes({ value: response, schema: gatewayErrorResponseSchema }); if (!parseResult.success) { return new GatewayResponseError({ message: `Invalid error response format: ${defaultMessage}`, statusCode, response, validationError: parseResult.error, cause }); } const validatedResponse = parseResult.value; const errorType = validatedResponse.error.type; const message = validatedResponse.error.message; switch (errorType) { case "authentication_error": return GatewayAuthenticationError.createContextualError({ apiKeyProvided: authMethod === "api-key", oidcTokenProvided: authMethod === "oidc", statusCode, cause }); case "invalid_request_error": return new GatewayInvalidRequestError({ message, statusCode, cause }); case "rate_limit_exceeded": return new GatewayRateLimitError({ message, statusCode, cause }); case "model_not_found": { const modelResult = await chunkR5MKJ5UG_cjs.safeValidateTypes({ value: validatedResponse.error.param, schema: modelNotFoundParamSchema }); return new GatewayModelNotFoundError({ message, statusCode, modelId: modelResult.success ? modelResult.value.modelId : void 0, cause }); } case "internal_server_error": return new GatewayInternalServerError({ message, statusCode, cause }); default: return new GatewayInternalServerError({ message, statusCode, cause }); } } var gatewayErrorResponseSchema = chunkR5MKJ5UG_cjs.lazyValidator( () => chunkR5MKJ5UG_cjs.zodSchema( v4.z.object({ error: v4.z.object({ message: v4.z.string(), type: v4.z.string().nullish(), param: v4.z.unknown().nullish(), code: v4.z.union([v4.z.string(), v4.z.number()]).nullish() }) }) ) ); function extractApiCallResponse(error) { if (error.data !== void 0) { return error.data; } if (error.responseBody != null) { try { return JSON.parse(error.responseBody); } catch (e) { return error.responseBody; } } return {}; } var name7 = "GatewayTimeoutError"; var marker8 = `vercel.ai.gateway.error.${name7}`; var symbol8 = Symbol.for(marker8); var _a8; var _b8; var GatewayTimeoutError = class _GatewayTimeoutError extends (_b8 = GatewayError, _a8 = symbol8, _b8) { constructor({ message = "Request timed out", statusCode = 408, cause } = {}) { super({ message, statusCode, cause }); this[_a8] = true; this.name = name7; this.type = "timeout_error"; } static isInstance(error) { return GatewayError.hasMarker(error) && symbol8 in error; } /** * Creates a helpful timeout error message with troubleshooting guidance */ static createTimeoutError({ originalMessage, statusCode = 408, cause }) { const message = `Gateway request timed out: ${originalMessage} This is a client-side timeout. To resolve this, increase your timeout configuration: https://vercel.com/docs/ai-gateway/capabilities/video-generation#extending-timeouts-for-node.js`; return new _GatewayTimeoutError({ message, statusCode, cause }); } }; function isTimeoutError(error) { if (!(error instanceof Error)) { return false; } const errorCode = error.code; if (typeof errorCode === "string") { const undiciTimeoutCodes = [ "UND_ERR_HEADERS_TIMEOUT", "UND_ERR_BODY_TIMEOUT", "UND_ERR_CONNECT_TIMEOUT" ]; return undiciTimeoutCodes.includes(errorCode); } return false; } async function asGatewayError(error, authMethod) { var _a93; if (GatewayError.isInstance(error)) { return error; } if (isTimeoutError(error)) { return GatewayTimeoutError.createTimeoutError({ originalMessage: error instanceof Error ? error.message : "Unknown error", cause: error }); } if (chunkR5MKJ5UG_cjs.APICallError.isInstance(error)) { if (error.cause && isTimeoutError(error.cause)) { return GatewayTimeoutError.createTimeoutError({ originalMessage: error.message, cause: error }); } return await createGatewayErrorFromResponse({ response: extractApiCallResponse(error), statusCode: (_a93 = error.statusCode) != null ? _a93 : 500, defaultMessage: "Gateway request failed", cause: error, authMethod }); } return await createGatewayErrorFromResponse({ response: {}, statusCode: 500, defaultMessage: error instanceof Error ? `Gateway request failed: ${error.message}` : "Unknown Gateway error", cause: error, authMethod }); } var GATEWAY_AUTH_METHOD_HEADER = "ai-gateway-auth-method"; async function parseAuthMethod(headers) { const result = await chunkR5MKJ5UG_cjs.safeValidateTypes({ value: headers[GATEWAY_AUTH_METHOD_HEADER], schema: gatewayAuthMethodSchema }); return result.success ? result.value : void 0; } var gatewayAuthMethodSchema = chunkR5MKJ5UG_cjs.lazyValidator( () => chunkR5MKJ5UG_cjs.zodSchema(v4.z.union([v4.z.literal("api-key"), v4.z.literal("oidc")])) ); var KNOWN_MODEL_TYPES = ["embedding", "image", "language"]; var GatewayFetchMetadata = class { constructor(config) { this.config = config; } async getAvailableModels() { try { const { value } = await chunkR5MKJ5UG_cjs.getFromApi({ url: `${this.config.baseURL}/config`, headers: await chunkR5MKJ5UG_cjs.resolve(this.config.headers()), successfulResponseHandler: chunkR5MKJ5UG_cjs.createJsonResponseHandler( gatewayAvailableModelsResponseSchema ), failedResponseHandler: chunkR5MKJ5UG_cjs.createJsonErrorResponseHandler({ errorSchema: v4.z.any(), errorToMessage: (data) => data }), fetch: this.config.fetch }); return value; } catch (error) { throw await asGatewayError(error); } } async getCredits() { try { const baseUrl = new URL(this.config.baseURL); const { value } = await chunkR5MKJ5UG_cjs.getFromApi({ url: `${baseUrl.origin}/v1/credits`, headers: await chunkR5MKJ5UG_cjs.resolve(this.config.headers()), successfulResponseHandler: chunkR5MKJ5UG_cjs.createJsonResponseHandler( gatewayCreditsResponseSchema ), failedResponseHandler: chunkR5MKJ5UG_cjs.createJsonErrorResponseHandler({ errorSchema: v4.z.any(), errorToMessage: (data) => data }), fetch: this.config.fetch }); return value; } catch (error) { throw await asGatewayError(error); } } }; var gatewayAvailableModelsResponseSchema = chunkR5MKJ5UG_cjs.lazyValidator( () => chunkR5MKJ5UG_cjs.zodSchema( v4.z.object({ models: v4.z.array( v4.z.object({ id: v4.z.string(), name: v4.z.string(), description: v4.z.string().nullish(), pricing: v4.z.object({ input: v4.z.string(), output: v4.z.string(), input_cache_read: v4.z.string().nullish(), input_cache_write: v4.z.string().nullish() }).transform( ({ input, output, input_cache_read, input_cache_write }) => ({ input, output, ...input_cache_read ? { cachedInputTokens: input_cache_read } : {}, ...input_cache_write ? { cacheCreationInputTokens: input_cache_write } : {} }) ).nullish(), specification: v4.z.object({ specificationVersion: v4.z.literal("v2"), provider: v4.z.string(), modelId: v4.z.string() }), modelType: v4.z.string().nullish() }) ).transform( (models) => models.filter( (m) => m.modelType == null || KNOWN_MODEL_TYPES.includes(m.modelType) ) ) }) ) ); var gatewayCreditsResponseSchema = chunkR5MKJ5UG_cjs.lazyValidator( () => chunkR5MKJ5UG_cjs.zodSchema( v4.z.object({ balance: v4.z.string(), total_used: v4.z.string() }).transform(({ balance, total_used }) => ({ balance, totalUsed: total_used })) ) ); var GatewaySpendReport = class { constructor(config) { this.config = config; } async getSpendReport(params) { try { const baseUrl = new URL(this.config.baseURL); const searchParams = new URLSearchParams(); searchParams.set("start_date", params.startDate); searchParams.set("end_date", params.endDate); if (params.groupBy) { searchParams.set("group_by", params.groupBy); } if (params.datePart) { searchParams.set("date_part", params.datePart); } if (params.userId) { searchParams.set("user_id", params.userId); } if (params.model) { searchParams.set("model", params.model); } if (params.provider) { searchParams.set("provider", params.provider); } if (params.credentialType) { searchParams.set("credential_type", params.credentialType); } if (params.tags && params.tags.length > 0) { searchParams.set("tags", params.tags.join(",")); } const { value } = await chunkR5MKJ5UG_cjs.getFromApi({ url: `${baseUrl.origin}/v1/report?${searchParams.toString()}`, headers: await chunkR5MKJ5UG_cjs.resolve(this.config.headers()), successfulResponseHandler: chunkR5MKJ5UG_cjs.createJsonResponseHandler( gatewaySpendReportResponseSchema ), failedResponseHandler: chunkR5MKJ5UG_cjs.createJsonErrorResponseHandler({ errorSchema: v4.z.any(), errorToMessage: (data) => data }), fetch: this.config.fetch }); return value; } catch (error) { throw await asGatewayError(error); } } }; var gatewaySpendReportResponseSchema = chunkR5MKJ5UG_cjs.lazySchema( () => chunkR5MKJ5UG_cjs.zodSchema( v4.z.object({ results: v4.z.array( v4.z.object({ day: v4.z.string().optional(), hour: v4.z.string().optional(), user: v4.z.string().optional(), model: v4.z.string().optional(), tag: v4.z.string().optional(), provider: v4.z.string().optional(), credential_type: v4.z.enum(["byok", "system"]).optional(), total_cost: v4.z.number(), market_cost: v4.z.number().optional(), input_tokens: v4.z.number().optional(), output_tokens: v4.z.number().optional(), cached_input_tokens: v4.z.number().optional(), cache_creation_input_tokens: v4.z.number().optional(), reasoning_tokens: v4.z.number().optional(), request_count: v4.z.number().optional() }).transform( ({ credential_type, total_cost, market_cost, input_tokens, output_tokens, cached_input_tokens, cache_creation_input_tokens, reasoning_tokens, request_count, ...rest }) => ({ ...rest, ...credential_type !== void 0 ? { credentialType: credential_type } : {}, totalCost: total_cost, ...market_cost !== void 0 ? { marketCost: market_cost } : {}, ...input_tokens !== void 0 ? { inputTokens: input_tokens } : {}, ...output_tokens !== void 0 ? { outputTokens: output_tokens } : {}, ...cached_input_tokens !== void 0 ? { cachedInputTokens: cached_input_tokens } : {}, ...cache_creation_input_tokens !== void 0 ? { cacheCreationInputTokens: cache_creation_input_tokens } : {}, ...reasoning_tokens !== void 0 ? { reasoningTokens: reasoning_tokens } : {}, ...request_count !== void 0 ? { requestCount: request_count } : {} }) ) ) }) ) ); var GatewayGenerationInfoFetcher = class { constructor(config) { this.config = config; } async getGenerationInfo(params) { try { const baseUrl = new URL(this.config.baseURL); const { value } = await chunkR5MKJ5UG_cjs.getFromApi({ url: `${baseUrl.origin}/v1/generation?id=${encodeURIComponent(params.id)}`, headers: await chunkR5MKJ5UG_cjs.resolve(this.config.headers()), successfulResponseHandler: chunkR5MKJ5UG_cjs.createJsonResponseHandler( gatewayGenerationInfoResponseSchema ), failedResponseHandler: chunkR5MKJ5UG_cjs.createJsonErrorResponseHandler({ errorSchema: v4.z.any(), errorToMessage: (data) => data }), fetch: this.config.fetch }); return value; } catch (error) { throw await asGatewayError(error); } } }; var gatewayGenerationInfoResponseSchema = chunkR5MKJ5UG_cjs.lazySchema( () => chunkR5MKJ5UG_cjs.zodSchema( v4.z.object({ data: v4.z.object({ id: v4.z.string(), total_cost: v4.z.number(), upstream_inference_cost: v4.z.number(), usage: v4.z.number(), created_at: v4.z.string(), model: v4.z.string(), is_byok: v4.z.boolean(), provider_name: v4.z.string(), streamed: v4.z.boolean(), finish_reason: v4.z.string(), latency: v4.z.number(), generation_time: v4.z.number(), native_tokens_prompt: v4.z.number(), native_tokens_completion: v4.z.number(), native_tokens_reasoning: v4.z.number(), native_tokens_cached: v4.z.number(), native_tokens_cache_creation: v4.z.number(), billable_web_search_calls: v4.z.number() }).transform( ({ total_cost, upstream_inference_cost, created_at, is_byok, provider_name, finish_reason, generation_time, native_tokens_prompt, native_tokens_completion, native_tokens_reasoning, native_tokens_cached, native_tokens_cache_creation, billable_web_search_calls, ...rest }) => ({ ...rest, totalCost: total_cost, upstreamInferenceCost: upstream_inference_cost, createdAt: created_at, isByok: is_byok, providerName: provider_name, finishReason: finish_reason, generationTime: generation_time, promptTokens: native_tokens_prompt, completionTokens: native_tokens_completion, reasoningTokens: native_tokens_reasoning, cachedTokens: native_tokens_cached, cacheCreationTokens: native_tokens_cache_creation, billableWebSearchCalls: billable_web_search_calls }) ) }).transform(({ data }) => data) ) ); var GatewayLanguageModel = class { constructor(modelId, config) { this.modelId = modelId; this.config = config; this.specificationVersion = "v2"; this.supportedUrls = { "*/*": [/.*/] }; } get provider() { return this.config.provider; } async getArgs(options) { const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options; return { args: this.maybeEncodeFileParts(optionsWithoutSignal), warnings: [] }; } async doGenerate(options) { const { args, warnings } = await this.getArgs(options); const { abortSignal } = options; const resolvedHeaders = await chunkR5MKJ5UG_cjs.resolve(this.config.headers()); try { const { responseHeaders, value: responseBody, rawValue: rawResponse } = await chunkR5MKJ5UG_cjs.postJsonToApi({ url: this.getUrl(), headers: chunkR5MKJ5UG_cjs.combineHeaders( resolvedHeaders, options.headers, this.getModelConfigHeaders(this.modelId, false), await chunkR5MKJ5UG_cjs.resolve(this.config.o11yHeaders) ), body: args, successfulResponseHandler: chunkR5MKJ5UG_cjs.createJsonResponseHandler(v4.z.any()), failedResponseHandler: chunkR5MKJ5UG_cjs.createJsonErrorResponseHandler({ errorSchema: v4.z.any(), errorToMessage: (data) => data }), ...abortSignal && { abortSignal }, fetch: this.config.fetch }); return { ...responseBody, request: { body: args }, response: { headers: responseHeaders, body: rawResponse }, warnings }; } catch (error) { throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders)); } } async doStream(options) { const { args, warnings } = await this.getArgs(options); const { abortSignal } = options; const resolvedHeaders = await chunkR5MKJ5UG_cjs.resolve(this.config.headers()); try { const { value: response, responseHeaders } = await chunkR5MKJ5UG_cjs.postJsonToApi({ url: this.getUrl(), headers: chunkR5MKJ5UG_cjs.combineHeaders( resolvedHeaders, options.headers, this.getModelConfigHeaders(this.modelId, true), await chunkR5MKJ5UG_cjs.resolve(this.config.o11yHeaders) ), body: args, successfulResponseHandler: chunkR5MKJ5UG_cjs.createEventSourceResponseHandler(v4.z.any()), failedResponseHandler: chunkR5MKJ5UG_cjs.createJsonErrorResponseHandler({ errorSchema: v4.z.any(), errorToMessage: (data) => data }), ...abortSignal && { abortSignal }, fetch: this.config.fetch }); return { stream: response.pipeThrough( new TransformStream({ start(controller) { if (warnings.length > 0) { controller.enqueue({ type: "stream-start", warnings }); } }, transform(chunk, controller) { if (chunk.success) { const streamPart = chunk.value; if (streamPart.type === "raw" && !options.includeRawChunks) { return; } if (streamPart.type === "response-metadata" && streamPart.timestamp && typeof streamPart.timestamp === "string") { streamPart.timestamp = new Date(streamPart.timestamp); } controller.enqueue(streamPart); } else { controller.error( chunk.error ); } } }) ), request: { body: args }, response: { headers: responseHeaders } }; } catch (error) { throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders)); } } isFilePart(part) { return part && typeof part === "object" && "type" in part && part.type === "file"; } /** * Encodes file parts in the prompt to base64. Mutates the passed options * instance directly to avoid copying the file data. * @param options - The options to encode. * @returns The options with the file parts encoded. */ maybeEncodeFileParts(options) { for (const message of options.prompt) { for (const part of message.content) { if (this.isFilePart(part)) { const filePart = part; if (filePart.data instanceof Uint8Array) { const buffer = Uint8Array.from(filePart.data); const base64Data = Buffer.from(buffer).toString("base64"); filePart.data = new URL( `data:${filePart.mediaType || "application/octet-stream"};base64,${base64Data}` ); } } } } return options; } getUrl() { return `${this.config.baseURL}/language-model`; } getModelConfigHeaders(modelId, streaming) { return { "ai-language-model-specification-version": "2", "ai-language-model-id": modelId, "ai-language-model-streaming": String(streaming) }; } }; var GatewayEmbeddingModel = class { constructor(modelId, config) { this.modelId = modelId; this.config = config; this.specificationVersion = "v2"; this.maxEmbeddingsPerCall = 2048; this.supportsParallelCalls = true; } get provider() { return this.config.provider; } async doEmbed({ values, headers, abortSignal, providerOptions }) { var _a93; const resolvedHeaders = await chunkR5MKJ5UG_cjs.resolve(this.config.headers()); try { const { responseHeaders, value: responseBody, rawValue } = await chunkR5MKJ5UG_cjs.postJsonToApi({ url: this.getUrl(), headers: chunkR5MKJ5UG_cjs.combineHeaders( resolvedHeaders, headers != null ? headers : {}, this.getModelConfigHeaders(), await chunkR5MKJ5UG_cjs.resolve(this.config.o11yHeaders) ), body: { input: values.length === 1 ? values[0] : values, ...providerOptions ? { providerOptions } : {} }, successfulResponseHandler: chunkR5MKJ5UG_cjs.createJsonResponseHandler( gatewayEmbeddingResponseSchema ), failedResponseHandler: chunkR5MKJ5UG_cjs.createJsonErrorResponseHandler({ errorSchema: v4.z.any(), errorToMessage: (data) => data }), ...abortSignal && { abortSignal }, fetch: this.config.fetch }); return { embeddings: responseBody.embeddings, usage: (_a93 = responseBody.usage) != null ? _a93 : void 0, providerMetadata: responseBody.providerMetadata, response: { headers: responseHeaders, body: rawValue } }; } catch (error) { throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders)); } } getUrl() { return `${this.config.baseURL}/embedding-model`; } getModelConfigHeaders() { return { "ai-embedding-model-specification-version": "2", "ai-model-id": this.modelId }; } }; var gatewayEmbeddingResponseSchema = chunkR5MKJ5UG_cjs.lazyValidator( () => chunkR5MKJ5UG_cjs.zodSchema( v4.z.object({ embeddings: v4.z.array(v4.z.array(v4.z.number())), usage: v4.z.object({ tokens: v4.z.number() }).nullish(), providerMetadata: v4.z.record(v4.z.string(), v4.z.record(v4.z.string(), v4.z.unknown())).optional() }) ) ); var GatewayImageModel = class { constructor(modelId, config) { this.modelId = modelId; this.config = config; this.specificationVersion = "v2"; this.maxImagesPerCall = Number.MAX_SAFE_INTEGER; } get provider() { return this.config.provider; } async doGenerate({ prompt, n, size, aspectRatio, seed, providerOptions, headers, abortSignal }) { var _a93, _b9, _c, _d; const resolvedHeaders = await chunkR5MKJ5UG_cjs.resolve(this.config.headers()); try { const { responseHeaders, value: responseBody } = await chunkR5MKJ5UG_cjs.postJsonToApi({ url: this.getUrl(), headers: chunkR5MKJ5UG_cjs.combineHeaders( resolvedHeaders, headers != null ? headers : {}, this.getModelConfigHeaders(), await chunkR5MKJ5UG_cjs.resolve(this.config.o11yHeaders) ), body: { prompt, n, ...size && { size }, ...aspectRatio && { aspectRatio }, ...seed && { seed }, ...providerOptions && { providerOptions } }, successfulResponseHandler: chunkR5MKJ5UG_cjs.createJsonResponseHandler( gatewayImageResponseSchema ), failedResponseHandler: chunkR5MKJ5UG_cjs.createJsonErrorResponseHandler({ errorSchema: v4.z.any(), errorToMessage: (data) => data }), ...abortSignal && { abortSignal }, fetch: this.config.fetch }); return { images: responseBody.images, // Always base64 strings from server warnings: (_a93 = responseBody.warnings) != null ? _a93 : [], providerMetadata: responseBody.providerMetadata, response: { timestamp: /* @__PURE__ */ new Date(), modelId: this.modelId, headers: responseHeaders }, ...responseBody.usage != null && { usage: { inputTokens: (_b9 = responseBody.usage.inputTokens) != null ? _b9 : void 0, outputTokens: (_c = responseBody.usage.outputTokens) != null ? _c : void 0, totalTokens: (_d = responseBody.usage.totalTokens) != null ? _d : void 0 } } }; } catch (error) { throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders)); } } getUrl() { return `${this.config.baseURL}/image-model`; } getModelConfigHeaders() { return { "ai-image-model-specification-version": "2", "ai-model-id": this.modelId }; } }; var providerMetadataEntrySchema = v4.z.object({ images: v4.z.array(v4.z.unknown()).optional() }).catchall(v4.z.unknown()); var gatewayImageUsageSchema = v4.z.object({ inputTokens: v4.z.number().nullish(), outputTokens: v4.z.number().nullish(), totalTokens: v4.z.number().nullish() }); var gatewayImageResponseSchema = v4.z.object({ images: v4.z.array(v4.z.string()), // Always base64 strings over the wire warnings: v4.z.array( v4.z.object({ type: v4.z.literal("other"), message: v4.z.string() }) ).optional(), providerMetadata: v4.z.record(v4.z.string(), providerMetadataEntrySchema).optional(), usage: gatewayImageUsageSchema.optional() }); var parallelSearchInputSchema = chunkR5MKJ5UG_cjs.lazySchema( () => chunkR5MKJ5UG_cjs.zodSchema( zod.z.object({ objective: zod.z.string().describe( "Natural-language description of the web research goal, including source or freshness guidance and broader context from the task. Maximum 5000 characters." ), search_queries: zod.z.array(zod.z.string()).optional().describe( "Optional search queries to supplement the objective. Maximum 200 characters per query." ), mode: zod.z.enum(["one-shot", "agentic"]).optional().describe( 'Mode preset: "one-shot" for comprehensive results with longer excerpts (default), "agentic" for concise, token-efficient results for multi-step workflows.' ), max_results: zod.z.number().optional().describe( "Maximum number of results to return (1-20). Defaults to 10 if not specified." ), source_policy: zod.z.object({ include_domains: zod.z.array(zod.z.string()).optional().describe("List of domains to include in search results."), exclude_domains: zod.z.array(zod.z.string()).optional().describe("List of domains to exclude from search results."), after_date: zod.z.string().optional().describe( "Only include results published after this date (ISO 8601 format)." ) }).optional().describe( "Source policy for controlling which domains to include/exclude and freshness." ), excerpts: zod.z.object({ max_chars_per_result: zod.z.number().optional().describe("Maximum characters per result."), max_chars_total: zod.z.number().optional().describe("Maximum total characters across all results.") }).optional().describe("Excerpt configuration for controlling result length."), fetch_policy: zod.z.object({ max_age_seconds: zod.z.number().optional().describe( "Maximum age in seconds for cached content. Set to 0 to always fetch fresh content." ) }).optional().describe("Fetch policy for controlling content freshness.") }) ) ); var parallelSearchOutputSchema = chunkR5MKJ5UG_cjs.lazySchema( () => chunkR5MKJ5UG_cjs.zodSchema( zod.z.union([ // Success response zod.z.object({ searchId: zod.z.string(), results: zod.z.array( zod.z.object({ url: zod.z.string(), title: zod.z.string(), excerpt: zod.z.string(), publishDate: zod.z.string().nullable().optional(), relevanceScore: zod.z.number().optional() }) ) }), // Error response zod.z.object({ error: zod.z.enum([ "api_error", "rate_limit", "timeout", "invalid_input", "configuration_error", "unknown" ]), statusCode: zod.z.number().optional(), message: zod.z.string() }) ]) ) ); var parallelSearchToolFactory = chunkR5MKJ5UG_cjs.createProviderDefinedToolFactoryWithOutputSchema({ id: "gateway.parallel_search", name: "parallel_search", inputSchema: parallelSearchInputSchema, outputSchema: parallelSearchOutputSchema }); var parallelSearch = (config = {}) => parallelSearchToolFactory(config); var perplexitySearchInputSchema = chunkR5MKJ5UG_cjs.lazySchema( () => chunkR5MKJ5UG_cjs.zodSchema( zod.z.object({ query: zod.z.union([zod.z.string(), zod.z.array(zod.z.string())]).describe( "Search query (string) or multiple queries (array of up to 5 strings). Multi-query searches return combined results from all queries." ), max_results: zod.z.number().optional().describe( "Maximum number of search results to return (1-20, default: 10)" ), max_tokens_per_page: zod.z.number().optional().describe( "Maximum number of tokens to extract per search result page (256-2048, default: 2048)" ), max_tokens: zod.z.number().optional().describe( "Maximum total tokens across all search results (default: 25000, max: 1000000)" ), country: zod.z.string().optional().describe( "Two-letter ISO 3166-1 alpha-2 country code for regional search results (e.g., 'US', 'GB', 'FR')" ), search_domain_filter: zod.z.array(zod.z.string()).optional().describe( "List of domains to include or exclude from search results (max 20). To include: ['nature.com', 'science.org']. To exclude: ['-example.com', '-spam.net']" ), search_language_filter: zod.z.array(zod.z.string()).optional().describe( "List of ISO 639-1 language codes to filter results (max 10, lowercase). Examples: ['en', 'fr', 'de']" ), search_after_date: zod.z.string().optional().describe( "Include only results published after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter." ), search_before_date: zod.z.string().optional().describe( "Include only results published before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter." ), last_updated_after_filter: zod.z.string().optional().describe( "Include only results last updated after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter." ), last_updated_before_filter: zod.z.string().optional().describe( "Include only results last updated before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter." ), search_recency_filter: zod.z.enum(["day", "week", "month", "year"]).optional().describe( "Filter results by relative time period. Cannot be used with search_after_date or search_before_date." ) }) ) ); var perplexitySearchOutputSchema = chunkR5MKJ5UG_cjs.lazySchema( () => chunkR5MKJ5UG_cjs.zodSchema( zod.z.union([ // Success response zod.z.object({ results: zod.z.array( zod.z.object({ title: zod.z.string(), url: zod.z.string(), snippet: zod.z.string(), date: zod.z.string().optional(), lastUpdated: zod.z.string().optional() }) ), id: zod.z.string() }), // Error response zod.z.object({ error: zod.z.enum([ "api_error", "rate_limit", "timeout", "invalid_input", "unknown" ]), statusCode: zod.z.number().optional(), message: zod.z.string() }) ]) ) ); var perplexitySearchToolFactory = chunkR5MKJ5UG_cjs.createProviderDefinedToolFactoryWithOutputSchema({ id: "gateway.perplexity_search", name: "perplexity_search", inputSchema: perplexitySearchInputSchema, outputSchema: perplexitySearchOutputSchema }); var perplexitySearch = (config = {}) => perplexitySearchToolFactory(config); var gatewayTools = { /** * Search the web using Parallel AI's Search API for LLM-optimized excerpts. * * Takes a natural language objective and returns relevant excerpts, * replacing multiple keyword searches with a single call for broad * or complex queries. Supports different search types for depth vs * breadth tradeoffs. */ parallelSearch, /** * Search the web using Perplexity's Search API for real-time information, * news, research papers, and articles. * * Provides ranked search results with advanced filtering options including * domain, language, date range, and recency filters. */ perplexitySearch }; async function getVercelRequestId() { var _a93; return (_a93 = getContext().headers) == null ? void 0 : _a93["x-vercel-id"]; } var VERSION = "2.0.88"; var AI_GATEWAY_PROTOCOL_VERSION = "0.0.1"; function createGatewayProvider(options = {}) { var _a93, _b9; let pendingMetadata = null; let metadataCache = null; const cacheRefreshMillis = (_a93 = options.metadataCacheRefreshMillis) != null ? _a93 : 1e3 * 60 * 5; let lastFetchTime = 0; const baseURL = (_b9 = chunkR5MKJ5UG_cjs.withoutTrailingSlash(options.baseURL)) != null ? _b9 : "https://ai-gateway.vercel.sh/v1/ai"; const getHeaders = async () => { const auth = await getGatewayAuthToken(options); if (auth) { return chunkR5MKJ5UG_cjs.withUserAgentSuffix( { Authorization: `Bearer ${auth.token}`, "ai-gateway-protocol-version": AI_GATEWAY_PROTOCOL_VERSION, [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod, ...options.headers }, `ai-sdk/gateway/${VERSION}` ); } throw GatewayAuthenticationError.createContextualError({ apiKeyProvided: false, oidcTokenProvided: false, statusCode: 401 }); }; const createO11yHeaders = () => { const deploymentId = chunkR5MKJ5UG_cjs.loadOptionalSetting({ settingValue: void 0, environmentVariableName: "VERCEL_DEPLOYMENT_ID" }); const environment = chunkR5MKJ5UG_cjs.loadOptionalSetting({ settingValue: void 0, environmentVariableName: "VERCEL_ENV" }); const region = chunkR5MKJ5UG_cjs.loadOptionalSetting({ settingValue: void 0, environmentVariableName: "VERCEL_REGION" }); const projectId = chunkR5MKJ5UG_cjs.loadOptionalSetting({ settingValue: void 0, environmentVariableName: "VERCEL_PROJECT_ID" }); return async () => { const requestId = await getVercelRequestId(); return { ...deploymentId && { "ai-o11y-deployment-id": deploymentId }, ...environment && { "ai-o11y-environment": environment }, ...region && { "ai-o11y-region": region }, ...requestId && { "ai-o11y-request-id": requestId }, ...projectId && { "ai-o11y-project-id": projectId } }; }; }; const createLanguageModel = (modelId) => { return new GatewayLanguageModel(modelId, { provider: "gateway", baseURL, headers: getHeaders, fetch: options.fetch, o11yHeaders: createO11yHeaders() }); }; const getAvailableModels = async () => { var _a102, _b10, _c; const now2 = (_c = (_b10 = (_a102 = options._internal) == null ? void 0 : _a102.currentDate) == null ? void 0 : _b10.call(_a102).getTime()) != null ? _c : Date.now(); if (!pendingMetadata || now2 - lastFetchTime > cacheRefreshMillis) { lastFetchTime = now2; pendingMetadata = new GatewayFetchMetadata({ baseURL, headers: getHeaders, fetch: options.fetch }).getAvailableModels().then((metadata) => { metadataCache = metadata; return metadata; }).catch(async (error) => { throw await asGatewayError( error, await parseAuthMethod(await getHeaders()) ); }); } return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata; }; const getCredits = async () => { return new GatewayFetchMetadata({ baseURL, headers: getHeaders, fetch: options.fetch }).getCredits().catch(async (error) => { throw await asGatewayError( error, await parseAuthMethod(await getHeaders()) ); }); }; const getSpendReport = async (params) => { return new GatewaySpendReport({ baseURL, headers: getHeaders, fetch: options.fetch }).getSpendReport(params).catch(async (error) => { throw await asGatewayError( error, await parseAuthMethod(await getHeaders()) ); }); }; const getGenerationInfo = async (params) => { return new GatewayGenerationInfoFetcher({ baseURL, headers: getHeaders, fetch: options.fetch }).getGenerationInfo(params).catch(async (error) => { throw await asGatewayError( error, await parseAuthMethod(await getHeaders()) ); }); }; const provider = function(modelId) { if (new.target) { throw new Error( "The Gateway Provider model function cannot be called with the new keyword." ); } return createLanguageModel(modelId); }; provider.getAvailableModels = getAvailableModels; provider.getCredits = getCredits; provider.getSpendReport = getSpendReport; provider.getGenerationInfo = getGenerationInfo; provider.imageModel = (modelId) => { return new GatewayImageModel(modelId, { provider: "gateway", baseURL, headers: getHeaders, fetch: options.fetch, o11yHeaders: createO11yHeaders() }); }; provider.languageModel = createLanguageModel; provider.textEmbeddingModel = (modelId) => { return new GatewayEmbeddingModel(modelId, { provider: "gateway", baseURL, headers: getHeaders, fetch: options.fetch, o11yHeaders: createO11yHeaders() }); }; provider.tools = gatewayTools; return provider; } var gateway = createGatewayProvider(); async function getGatewayAuthToken(options) { const apiKey = chunkR5MKJ5UG_cjs.loadOptionalSetting({ settingValue: options.apiKey, environmentVariableName: "AI_GATEWAY_API_KEY" }); if (apiKey) { return { token: apiKey, authMethod: "api-key" }; } try { const oidcToken = await getVercelOidcToken(); return { token: oidcToken, authMethod: "oidc" }; } catch (e) { return null; } } var _globalThis = typeof globalThis === "object" ? globalThis : global; var VERSION2 = "1.9.0"; var re = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/; function _makeCompatibilityCheck(ownVersion) { var acceptedVersions = /* @__PURE__ */ new Set([ownVersion]); var rejectedVersions = /* @__PURE__ */ new Set(); var myVersionMatch = ownVersion.match(re); if (!myVersionMatch) { return function() { return false; }; } var ownVersionParsed = { major: +myVersionMatch[1], minor: +myVersionMatch[2], patch: +myVersionMatch[3], prerelease: myVersionMatch[4] }; if (ownVersionParsed.prerelease != null) { return function isExactmatch(globalVersion) { return globalVersion === ownVersion; }; } function _reject(v) { rejectedVersions.add(v); return false; } function _accept(v) { acceptedVersions.add(v); return true; } return function isCompatible2(globalVersion) { if (acceptedVersions.has(globalVersion)) { return true; } if (rejectedVersions.has(globalVersion)) { return false; } var globalVersionMatch = globalVersion.match(re); if (!globalVersionMatch) { return _reject(globalVersion); } var globalVersionParsed = { major: +globalVersionMatch[1], minor: +globalVersionMatch[2], patch: +globalVersionMatch[3], prerelease: globalVersionMatch[4] }; if (globalVersionParsed.prerelease != null) { return _reject(globalVersion); } if (ownVersionParsed.major !== globalVersionParsed.major) { return _reject(globalVersion); } if (ownVersionParsed.major === 0) { if (ownVersionParsed.minor === globalVersionParsed.minor && ownVersionParsed.patch <= globalVersionParsed.patch) { return _accept(globalVersion); } return _reject(globalVersion); } if (ownVersionParsed.minor <= globalVersionParsed.minor) { return _accept(globalVersion); } return _reject(globalVersion); }; } var isCompatible = _makeCompatibilityCheck(VERSION2); var major = VERSION2.split(".")[0]; var GLOBAL_OPENTELEMETRY_API_KEY = /* @__PURE__ */ Symbol.for("opentelemetry.js.api." + major); var _global = _globalThis; function registerGlobal(type, instance, diag, allowOverride) { var _a16; if (allowOverride === void 0) { allowOverride = false; } var api = _global[GLOBAL_OPENTELEMETRY_API_KEY] = (_a16 = _global[GLOBAL_OPENTELEMETRY_API_KEY]) !== null && _a16 !== void 0 ? _a16 : { version: VERSION2 }; if (!allowOverride && api[type]) { var err = new Error("@opentelemetry/api: Attempted duplicate registration of API: " + type); diag.error(err.stack || err.message); return false; } if (api.version !== VERSION2) { var err = new Error("@opentelemetry/api: Registration of version v" + api.version + " for " + type + " does not match previously registered API v" + VERSION2); diag.error(err.stack || err.message); return false; } api[type] = instance; diag.debug("@opentelemetry/api: Registered a global for " + type + " v" + VERSION2 + "."); return true; } function getGlobal(type) { var _a16, _b9; var globalVersion = (_a16 = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _a16 === void 0 ? void 0 : _a16.version; if (!globalVersion || !isCompatible(globalVersion)) { return; } return (_b9 = _global[GLOBAL_OPENTELEMETRY_API_KEY]) === null || _b9 === void 0 ? void 0 : _b9[type]; } function unregisterGlobal(type, diag) { diag.debug("@opentelemetry/api: Unregistering a global for " + type + " v" + VERSION2 + "."); var api = _global[GLOBAL_OPENTELEMETRY_API_KEY]; if (api) { delete api[type]; } } var __read = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while (!(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray = function(to, from, pack) { if (arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var DiagComponentLogger = ( /** @class */ (function() { function DiagComponentLogger2(props) { this._namespace = props.namespace || "DiagComponentLogger"; } DiagComponentLogger2.prototype.debug = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("debug", this._namespace, args); }; DiagComponentLogger2.prototype.error = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("error", this._namespace, args); }; DiagComponentLogger2.prototype.info = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("info", this._namespace, args); }; DiagComponentLogger2.prototype.warn = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("warn", this._namespace, args); }; DiagComponentLogger2.prototype.verbose = function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return logProxy("verbose", this._namespace, args); }; return DiagComponentLogger2; })() ); function logProxy(funcName, namespace, args) { var logger = getGlobal("diag"); if (!logger) { return; } args.unshift(namespace); return logger[funcName].apply(logger, __spreadArray([], __read(args), false)); } var DiagLogLevel; (function(DiagLogLevel2) { DiagLogLevel2[DiagLogLevel2["NONE"] = 0] = "NONE"; DiagLogLevel2[DiagLogLevel2["ERROR"] = 30] = "ERROR"; DiagLogLevel2[DiagLogLevel2["WARN"] = 50] = "WARN"; DiagLogLevel2[DiagLogLevel2["INFO"] = 60] = "INFO"; DiagLogLevel2[DiagLogLevel2["DEBUG"] = 70] = "DEBUG"; DiagLogLevel2[DiagLogLevel2["VERBOSE"] = 80] = "VERBOSE"; DiagLogLevel2[DiagLogLevel2["ALL"] = 9999] = "ALL"; })(DiagLogLevel || (DiagLogLevel = {})); function createLogLevelDiagLogger(maxLevel, logger) { if (maxLevel < DiagLogLevel.NONE) { maxLevel = DiagLogLevel.NONE; } else if (maxLevel > DiagLogLevel.ALL) { maxLevel = DiagLogLevel.ALL; } logger = logger || {}; function _filterFunc(funcName, theLevel) { var theFunc = logger[funcName]; if (typeof theFunc === "function" && maxLevel >= theLevel) { return theFunc.bind(logger); } return function() { }; } return { error: _filterFunc("error", DiagLogLevel.ERROR), warn: _filterFunc("warn", DiagLogLevel.WARN), info: _filterFunc("info", DiagLogLevel.INFO), debug: _filterFunc("debug", DiagLogLevel.DEBUG), verbose: _filterFunc("verbose", DiagLogLevel.VERBOSE) }; } var __read2 = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while (!(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray2 = function(to, from, pack) { if (arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var API_NAME = "diag"; var DiagAPI = ( /** @class */ (function() { function DiagAPI2() { function _logProxy(funcName) { return function() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } var logger = getGlobal("diag"); if (!logger) return; return logger[funcName].apply(logger, __spreadArray2([], __read2(args), false)); }; } var self = this; var setLogger = function(logger, optionsOrLogLevel) { var _a16, _b9, _c; if (optionsOrLogLevel === void 0) { optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }; } if (logger === self) { var err = new Error("Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation"); self.error((_a16 = err.stack) !== null && _a16 !== void 0 ? _a16 : err.message); return false; } if (typeof optionsOrLogLevel === "number") { optionsOrLogLevel = { logLevel: optionsOrLogLevel }; } var oldLogger = getGlobal("diag"); var newLogger = createLogLevelDiagLogger((_b9 = optionsOrLogLevel.logLevel) !== null && _b9 !== void 0 ? _b9 : DiagLogLevel.INFO, logger); if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) { var stack = (_c = new Error().stack) !== null && _c !== void 0 ? _c : ""; oldLogger.warn("Current logger will be overwritten from " + stack); newLogger.warn("Current logger will overwrite one already registered from " + stack); } return registerGlobal("diag", newLogger, self, true); }; self.setLogger = setLogger; self.disable = function() { unregisterGlobal(API_NAME, self); }; self.createComponentLogger = function(options) { return new DiagComponentLogger(options); }; self.verbose = _logProxy("verbose"); self.debug = _logProxy("debug"); self.info = _logProxy("info"); self.warn = _logProxy("warn"); self.error = _logProxy("error"); } DiagAPI2.instance = function() { if (!this._instance) { this._instance = new DiagAPI2(); } return this._instance; }; return DiagAPI2; })() ); function createContextKey(description) { return Symbol.for(description); } var BaseContext = ( /** @class */ /* @__PURE__ */ (function() { function BaseContext2(parentContext) { var self = this; self._currentContext = parentContext ? new Map(parentContext) : /* @__PURE__ */ new Map(); self.getValue = function(key) { return self._currentContext.get(key); }; self.setValue = function(key, value) { var context = new BaseContext2(self._currentContext); context._currentContext.set(key, value); return context; }; self.deleteValue = function(key) { var context = new BaseContext2(self._currentContext); context._currentContext.delete(key); return context; }; } return BaseContext2; })() ); var ROOT_CONTEXT = new BaseContext(); var __read3 = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while (!(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray3 = function(to, from, pack) { if (arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var NoopContextManager = ( /** @class */ (function() { function NoopContextManager2() { } NoopContextManager2.prototype.active = function() { return ROOT_CONTEXT; }; NoopContextManager2.prototype.with = function(_context, fn, thisArg) { var args = []; for (var _i = 3; _i < arguments.length; _i++) { args[_i - 3] = arguments[_i]; } return fn.call.apply(fn, __spreadArray3([thisArg], __read3(args), false)); }; NoopContextManager2.prototype.bind = function(_context, target) { return target; }; NoopContextManager2.prototype.enable = function() { return this; }; NoopContextManager2.prototype.disable = function() { return this; }; return NoopContextManager2; })() ); var __read4 = function(o, n) { var m = typeof Symbol === "function" && o[Symbol.iterator]; if (!m) return o; var i = m.call(o), r, ar = [], e; try { while (!(r = i.next()).done) ar.push(r.value); } catch (error) { e = { error }; } finally { try { if (r && !r.done && (m = i["return"])) m.call(i); } finally { if (e) throw e.error; } } return ar; }; var __spreadArray4 = function(to, from, pack) { if (arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { if (ar || !(i in from)) { if (!ar) ar = Array.prototype.slice.call(from, 0, i); ar[i] = from[i]; } } return to.concat(ar || Array.prototype.slice.call(from)); }; var API_NAME2 = "context"; var NOOP_CONTEXT_MANAGER = new NoopContextManager(); var ContextAPI = ( /** @class */ (function() { function ContextAPI2() { } ContextAPI2.getInstance = function() { if (!this._instance) { this._instance = new ContextAPI2(); } return this._instance; }; ContextAPI2.prototype.setGlobalContextManager = function(contextManager) { return registerGlobal(API_NAME2, contextManager, DiagAPI.instance()); }; ContextAPI2.prototype.active = function() { return this._getContextManager().active(); }; ContextAPI2.prototype.with = function(context, fn, thisArg) { var _a16; var args = []; for (var _i = 3; _i < arguments.length; _i++) { args[_i - 3] = arguments[_i]; } return (_a16 = this._getContextManager()).with.apply(_a16, __spreadArray4([context, fn, thisArg], __read4(args), false)); }; ContextAPI2.prototype.bind = function(context, target) { return this._getContextManager().bind(context, target); }; ContextAPI2.prototype._getContextManager = function() { return getGlobal(API_NAME2) || NOOP_CONTEXT_MANAGER; }; ContextAPI2.prototype.disable = function() { this._getContextManager().disable(); unregisterGlobal(API_NAME2, DiagAPI.instance()); }; return ContextAPI2; })() ); var TraceFlags; (function(TraceFlags2) { TraceFlags2[TraceFlags2["NONE"] = 0] = "NONE"; TraceFlags2[TraceFlags2["SAMPLED"] = 1] = "SAMPLED"; })(TraceFlags || (TraceFlags = {})); var INVALID_SPANID = "0000000000000000"; var INVALID_TRACEID = "00000000000000000000000000000000"; var INVALID_SPAN_CONTEXT = { traceId: INVALID_TRACEID, spanId: INVALID_SPANID, traceFlags: TraceFlags.NONE }; var NonRecordingSpan = ( /** @class */ (function() { function NonRecordingSpan2(_spanContext) { if (_spanContext === void 0) { _spanContext = INVALID_SPAN_CONTEXT; } this._spanContext = _spanContext; } NonRecordingSpan2.prototype.spanContext = function() { return this._spanContext; }; NonRecordingSpan2.prototype.setAttribute = function(_key, _value) { return this; }; NonRecordingSpan2.prototype.setAttributes = function(_attributes) { return this; }; NonRecordingSpan2.prototype.addEvent = function(_name, _attributes) { return this; }; NonRecordingSpan2.prototype.addLink = function(_link) { return this; }; NonRecordingSpan2.prototype.addLinks = function(_links) { return this; }; NonRecordingSpan2.prototype.setStatus = function(_status) { return this; }; NonRecordingSpan2.prototype.updateName = function(_name) { return this; }; NonRecordingSpan2.prototype.end = function(_endTime) { }; NonRecordingSpan2.prototype.isRecording = function() { return false; }; NonRecordingSpan2.prototype.recordException = function(_exception, _time) { }; return NonRecordingSpan2; })() ); var SPAN_KEY = createContextKey("OpenTelemetry Context Key SPAN"); function getSpan(context) { return context.getValue(SPAN_KEY) || void 0; } function getActiveSpan() { return getSpan(ContextAPI.getInstance().active()); } function setSpan(context, span) { return context.setValue(SPAN_KEY, span); } function deleteSpan(context) { return context.deleteValue(SPAN_KEY); } function setSpanContext(context, spanContext) { return setSpan(context, new NonRecordingSpan(spanContext)); } function getSpanContext(context) { var _a16; return (_a16 = getSpan(context)) === null || _a16 === void 0 ? void 0 : _a16.spanContext(); } var VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i; var VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i; function isValidTraceId(traceId) { return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID; } function isValidSpanId(spanId) { return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID; } function isSpanContextValid(spanContext) { return isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId); } function wrapSpanContext(spanContext) { return new NonRecordingSpan(spanContext); } var contextApi = ContextAPI.getInstance(); var NoopTracer = ( /** @class */ (function() { function NoopTracer2() { } NoopTracer2.prototype.startSpan = function(name16, options, context) { if (context === void 0) { context = contextApi.active(); } var root = Boolean(options === null || options === void 0 ? void 0 : options.root); if (root) { return new NonRecordingSpan(); } var parentFromContext = context && getSpanContext(context); if (isSpanContext(parentFromContext) && isSpanContextValid(parentFromContext)) { return new NonRecordingSpan(parentFromContext); } else { return new NonRecordingSpan(); } }; NoopTracer2.prototype.startActiveSpan = function(name16, arg2, arg3, arg4) { var opts; var ctx; var fn; if (arguments.length < 2) { return; } else if (arguments.length === 2) { fn = arg2; } else if (arguments.length === 3) { opts = arg2; fn = arg3; } else { opts = arg2; ctx = arg3; fn = arg4; } var parentContext = ctx !== null && ctx !== void 0 ? ctx : contextApi.active(); var span = this.startSpan(name16, opts, parentContext); var contextWithSpanSet = setSpan(parentContext, span); return contextApi.with(contextWithSpanSet, fn, void 0, span); }; return NoopTracer2; })() ); function isSpanContext(spanContext) { return typeof spanContext === "object" && typeof spanContext["spanId"] === "string" && typeof spanContext["traceId"] === "string" && typeof spanContext["traceFlags"] === "number"; } var NOOP_TRACER = new NoopTracer(); var ProxyTracer = ( /** @class */ (function() { function ProxyTracer2(_provider, name16, version, options) { this._provider = _provider; this.name = name16; this.version = version; this.options = options; } ProxyTracer2.prototype.startSpan = function(name16, options, context) { return this._getTracer().startSpan(name16, options, context); }; ProxyTracer2.prototype.startActiveSpan = function(_name, _options, _context, _fn) { var tracer = this._getTracer(); return Reflect.apply(tracer.startActiveSpan, tracer, arguments); }; ProxyTracer2.prototype._getTracer = function() { if (this._delegate) { return this._delegate; } var tracer = this._provider.getDelegateTracer(this.name, this.version, this.options); if (!tracer) { return NOOP_TRACER; } this._delegate = tracer; return this._delegate; }; return ProxyTracer2; })() ); var NoopTracerProvider = ( /** @class */ (function() { function NoopTracerProvider2() { } NoopTracerProvider2.prototype.getTracer = function(_name, _version, _options) { return new NoopTracer(); }; return NoopTracerProvider2; })() ); var NOOP_TRACER_PROVIDER = new NoopTracerProvider(); var ProxyTracerProvider = ( /** @class */ (function() { function ProxyTracerProvider2() { } ProxyTracerProvider2.prototype.getTracer = function(name16, version, options) { var _a16; return (_a16 = this.getDelegateTracer(name16, version, options)) !== null && _a16 !== void 0 ? _a16 : new ProxyTracer(this, name16, version, options); }; ProxyTracerProvider2.prototype.getDelegate = function() { var _a16; return (_a16 = this._delegate) !== null && _a16 !== void 0 ? _a16 : NOOP_TRACER_PROVIDER; }; ProxyTracerProvider2.prototype.setDelegate = function(delegate) { this._delegate = delegate; }; ProxyTracerProvider2.prototype.getDelegateTracer = function(name16, version, options) { var _a16; return (_a16 = this._delegate) === null || _a16 === void 0 ? void 0 : _a16.getTracer(name16, version, options); }; return ProxyTracerProvider2; })() ); var SpanStatusCode; (function(SpanStatusCode2) { SpanStatusCode2[SpanStatusCode2["UNSET"] = 0] = "UNSET"; SpanStatusCode2[SpanStatusCode2["OK"] = 1] = "OK"; SpanStatusCode2[SpanStatusCode2["ERROR"] = 2] = "ERROR"; })(SpanStatusCode || (SpanStatusCode = {})); var API_NAME3 = "trace"; var TraceAPI = ( /** @class */ (function() { function TraceAPI2() { this._proxyTracerProvider = new ProxyTracerProvider(); this.wrapSpanContext = wrapSpanContext; this.isSpanContextValid = isSpanContextValid; this.deleteSpan = deleteSpan; this.getSpan = getSpan; this.getActiveSpan = getActiveSpan; this.getSpanContext = getSpanContext; this.setSpan = setSpan; this.setSpanContext = setSpanContext; } TraceAPI2.getInstance = function() { if (!this._instance) { this._instance = new TraceAPI2(); } return this._instance; }; TraceAPI2.prototype.setGlobalTracerProvider = function(provider) { var success = registerGlobal(API_NAME3, this._proxyTracerProvider, DiagAPI.instance()); if (success) { this._proxyTracerProvider.setDelegate(provider); } return success; }; TraceAPI2.prototype.getTracerProvider = function() { return getGlobal(API_NAME3) || this._proxyTracerProvider; }; TraceAPI2.prototype.getTracer = function(name16, version) { return this.getTracerProvider().getTracer(name16, version); }; TraceAPI2.prototype.disable = function() { unregisterGlobal(API_NAME3, DiagAPI.instance()); this._proxyTracerProvider = new ProxyTracerProvider(); }; return TraceAPI2; })() ); var trace = TraceAPI.getInstance(); var __defProp = Object.defineProperty; var __export = (target, all) => { for (var name16 in all) __defProp(target, name16, { get: all[name16], enumerable: true }); }; function formatWarning(warning) { const prefix = "AI SDK Warning:"; switch (warning.type) { case "unsupported-setting": { let message = `${prefix} The "${warning.setting}" setting is not supported by this model`; if (warning.details) { message += ` - ${warning.details}`; } return message; } case "unsupported-tool": { const toolName = "name" in warning.tool ? warning.tool.name : "unknown tool"; let message = `${prefix} The tool "${toolName}" is not supported by this model`; if (warning.details) { message += ` - ${warning.details}`; } return message; } case "other": { return `${prefix} ${warning.message}`; } default: { return `${prefix} ${JSON.stringify(warning, null, 2)}`; } } } var FIRST_WARNING_INFO_MESSAGE = "AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false."; var hasLoggedBefore = false; var logWarnings = (warnings) => { if (warnings.length === 0) { return; } const logger = globalThis.AI_SDK_LOG_WARNINGS; if (logger === false) { return; } if (typeof logger === "function") { logger(warnings); return; } if (!hasLoggedBefore) { hasLoggedBefore = true; console.info(FIRST_WARNING_INFO_MESSAGE); } for (const warning of warnings) { console.warn(formatWarning(warning)); } }; var name22 = "AI_InvalidArgumentError"; var marker22 = `vercel.ai.error.${name22}`; var symbol22 = Symbol.for(marker22); var _a22; var InvalidArgumentError2 = class extends chunkR5MKJ5UG_cjs.AISDKError { constructor({ parameter, value, message }) { super({ name: name22, message: `Invalid argument for parameter ${parameter}: ${message}` }); this[_a22] = true; this.parameter = parameter; this.value = value; } static isInstance(error) { return chunkR5MKJ5UG_cjs.AISDKError.hasMarker(error, marker22); } }; _a22 = symbol22; var name62 = "AI_NoObjectGeneratedError"; var marker62 = `vercel.ai.error.${name62}`; var symbol62 = Symbol.for(marker62); var _a62; var NoObjectGeneratedError = class extends chunkR5MKJ5UG_cjs.AISDKError { constructor({ message = "No object generated.", cause, text: text2, response, usage, finishReason }) { super({ name: name62, message, cause }); this[_a62] = true; this.text = text2; this.response = response; this.usage = usage; this.finishReason = finishReason; } static isInstance(error) { return chunkR5MKJ5UG_cjs.AISDKError.hasMarker(error, marker62); } }; _a62 = symbol62; var NoSpeechGeneratedError = class extends chunkR5MKJ5UG_cjs.AISDKError { constructor(options) { super({ name: "AI_NoSpeechGeneratedError", message: "No speech audio generated." }); this.responses = options.responses; } }; var UnsupportedModelVersionError = class extends chunkR5MKJ5UG_cjs.AISDKError { constructor(options) { super({ name: "AI_UnsupportedModelVersionError", message: `Unsupported model version ${options.version} for provider "${options.provider}" and model "${options.modelId}". AI SDK 5 only supports models that implement specification version "v2".` }); this.version = options.version; this.provider = options.provider; this.modelId = options.modelId; } }; var name10 = "AI_InvalidDataContentError"; var marker10 = `vercel.ai.error.${name10}`; var symbol10 = Symbol.for(marker10); var _a10; var InvalidDataContentError = class extends chunkR5MKJ5UG_cjs.AISDKError { constructor({ content, cause, message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.` }) { super({ name: name10, message, cause }); this[_a10] = true; this.content = content; } static isInstance(error) { return chunkR5MKJ5UG_cjs.AISDKError.hasMarker(error, marker10); } }; _a10 = symbol10; var name12 = "AI_MessageConversionError"; var marker12 = `vercel.ai.error.${name12}`; var symbol12 = Symbol.for(marker12); var _a12; var MessageConversionError = class extends chunkR5MKJ5UG_cjs.AISDKError { constructor({ originalMessage, message }) { super({ name: name12, message }); this[_a12] = true; this.originalMessage = originalMessage; } static isInstance(error) { return chunkR5MKJ5UG_cjs.AISDKError.hasMarker(error, marker12); } }; _a12 = symbol12; var name13 = "AI_DownloadError"; var marker13 = `vercel.ai.error.${name13}`; var symbol13 = Symbol.for(marker13); var _a13; var DownloadError = class extends chunkR5MKJ5UG_cjs.AISDKError { constructor({ url, statusCode, statusText, cause, message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}` }) { super({ name: name13, message, cause }); this[_a13] = true; this.url = url; this.statusCode = statusCode; this.statusText = statusText; } static isInstance(error) { return chunkR5MKJ5UG_cjs.AISDKError.hasMarker(error, marker13); } }; _a13 = symbol13; var name14 = "AI_RetryError"; var marker14 = `vercel.ai.error.${name14}`; var symbol14 = Symbol.for(marker14); var _a14; var RetryError = class extends chunkR5MKJ5UG_cjs.AISDKError { constructor({ message, reason, errors }) { super({ name: name14, message }); this[_a14] = true; this.reason = reason; this.errors = errors; this.lastError = errors[errors.length - 1]; } static isInstance(error) { return chunkR5MKJ5UG_cjs.AISDKError.hasMarker(error, marker14); } }; _a14 = symbol14; function resolveEmbeddingModel(model) { if (typeof model !== "string") { if (model.specificationVersion !== "v2") { throw new UnsupportedModelVersionError({ version: model.specificationVersion, provider: model.provider, modelId: model.modelId }); } return model; } return getGlobalProvider().textEmbeddingModel( model ); } function getGlobalProvider() { var _a16; return (_a16 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a16 : gateway; } var audioMediaTypeSignatures = [ { mediaType: "audio/mpeg", bytesPrefix: [255, 251] }, { mediaType: "audio/mpeg", bytesPrefix: [255, 250] }, { mediaType: "audio/mpeg", bytesPrefix: [255, 243] }, { mediaType: "audio/mpeg", bytesPrefix: [255, 242] }, { mediaType: "audio/mpeg", bytesPrefix: [255, 227] }, { mediaType: "audio/mpeg", bytesPrefix: [255, 226] }, { mediaType: "audio/wav", bytesPrefix: [ 82, // R 73, // I 70, // F 70, // F null, null, null, null, 87, // W 65, // A 86, // V 69 // E ] }, { mediaType: "audio/ogg", bytesPrefix: [79, 103, 103, 83] }, { mediaType: "audio/flac", bytesPrefix: [102, 76, 97, 67] }, { mediaType: "audio/aac", bytesPrefix: [64, 21, 0, 0] }, { mediaType: "audio/mp4", bytesPrefix: [102, 116, 121, 112] }, { mediaType: "audio/webm", bytesPrefix: [26, 69, 223, 163] } ]; var stripID3 = (data) => { const bytes = typeof data === "string" ? chunkR5MKJ5UG_cjs.convertBase64ToUint8Array(data) : data; const id3Size = (bytes[6] & 127) << 21 | (bytes[7] & 127) << 14 | (bytes[8] & 127) << 7 | bytes[9] & 127; return bytes.slice(id3Size + 10); }; function stripID3TagsIfPresent(data) { const hasId3 = typeof data === "string" && data.startsWith("SUQz") || typeof data !== "string" && data.length > 10 && data[0] === 73 && // 'I' data[1] === 68 && // 'D' data[2] === 51; return hasId3 ? stripID3(data) : data; } function detectMediaType({ data, signatures }) { const processedData = stripID3TagsIfPresent(data); const bytes = typeof processedData === "string" ? chunkR5MKJ5UG_cjs.convertBase64ToUint8Array( processedData.substring(0, Math.min(processedData.length, 24)) ) : processedData; for (const signature of signatures) { if (bytes.length >= signature.bytesPrefix.length && signature.bytesPrefix.every( (byte, index) => byte === null || bytes[index] === byte )) { return signature.mediaType; } } return void 0; } var VERSION3 = "5.0.186"; var download = async ({ url, maxBytes, abortSignal }) => { var _a16; const urlText = url.toString(); chunkR5MKJ5UG_cjs.validateDownloadUrl(urlText); try { const response = await fetch(urlText, { headers: chunkR5MKJ5UG_cjs.withUserAgentSuffix( {}, `ai-sdk/${VERSION3}`, chunkR5MKJ5UG_cjs.getRuntimeEnvironmentUserAgent() ), signal: abortSignal }); if (response.redirected) { chunkR5MKJ5UG_cjs.validateDownloadUrl(response.url); } if (!response.ok) { throw new DownloadError({ url: urlText, statusCode: response.status, statusText: response.statusText }); } const data = await chunkR5MKJ5UG_cjs.readResponseWithSizeLimit({ response, url: urlText, maxBytes: chunkR5MKJ5UG_cjs.DEFAULT_MAX_DOWNLOAD_SIZE }); return { data, mediaType: (_a16 = response.headers.get("content-type")) != null ? _a16 : void 0 }; } catch (error) { if (DownloadError.isInstance(error)) { throw error; } throw new DownloadError({ url: urlText, cause: error }); } }; var dataContentSchema = v4.z.union([ v4.z.string(), v4.z.instanceof(Uint8Array), v4.z.instanceof(ArrayBuffer), v4.z.custom( // Buffer might not be available in some environments such as CloudFlare: (value) => { var _a16, _b9; return (_b9 = (_a16 = globalThis.Buffer) == null ? void 0 : _a16.isBuffer(value)) != null ? _b9 : false; }, { message: "Must be a Buffer" } ) ]); function convertDataContentToUint8Array(content) { if (content instanceof Uint8Array) { return content; } if (typeof content === "string") { try { return chunkR5MKJ5UG_cjs.convertBase64ToUint8Array(content); } catch (error) { throw new InvalidDataContentError({ message: "Invalid data content. Content string is not a base64-encoded media.", content, cause: error }); } } if (content instanceof ArrayBuffer) { return new Uint8Array(content); } throw new InvalidDataContentError({ content }); } var jsonValueSchema = v4.z.lazy( () => v4.z.union([ v4.z.null(), v4.z.string(), v4.z.number(), v4.z.boolean(), v4.z.record(v4.z.string(), jsonValueSchema), v4.z.array(jsonValueSchema) ]) ); var providerMetadataSchema = v4.z.record( v4.z.string(), v4.z.record(v4.z.string(), jsonValueSchema) ); var textPartSchema = v4.z.object({ type: v4.z.literal("text"), text: v4.z.string(), providerOptions: providerMetadataSchema.optional() }); var imagePartSchema = v4.z.object({ type: v4.z.literal("image"), image: v4.z.union([dataContentSchema, v4.z.instanceof(URL)]), mediaType: v4.z.string().optional(), providerOptions: providerMetadataSchema.optional() }); var filePartSchema = v4.z.object({ type: v4.z.literal("file"), data: v4.z.union([dataContentSchema, v4.z.instanceof(URL)]), filename: v4.z.string().optional(), mediaType: v4.z.string(), providerOptions: providerMetadataSchema.optional() }); var reasoningPartSchema = v4.z.object({ type: v4.z.literal("reasoning"), text: v4.z.string(), providerOptions: providerMetadataSchema.optional() }); var toolCallPartSchema = v4.z.object({ type: v4.z.literal("tool-call"), toolCallId: v4.z.string(), toolName: v4.z.string(), input: v4.z.unknown(), providerOptions: providerMetadataSchema.optional(), providerExecuted: v4.z.boolean().optional() }); var outputSchema = v4.z.discriminatedUnion("type", [ v4.z.object({ type: v4.z.literal("text"), value: v4.z.string() }), v4.z.object({ type: v4.z.literal("json"), value: jsonValueSchema }), v4.z.object({ type: v4.z.literal("error-text"), value: v4.z.string() }), v4.z.object({ type: v4.z.literal("error-json"), value: jsonValueSchema }), v4.z.object({ type: v4.z.literal("content"), value: v4.z.array( v4.z.union([ v4.z.object({ type: v4.z.literal("text"), text: v4.z.string() }), v4.z.object({ type: v4.z.literal("media"), data: v4.z.string(), mediaType: v4.z.string() }) ]) ) }) ]); var toolResultPartSchema = v4.z.object({ type: v4.z.literal("tool-result"), toolCallId: v4.z.string(), toolName: v4.z.string(), output: outputSchema, providerOptions: providerMetadataSchema.optional() }); var systemModelMessageSchema = v4.z.object( { role: v4.z.literal("system"), content: v4.z.string(), providerOptions: providerMetadataSchema.optional() } ); var userModelMessageSchema = v4.z.object({ role: v4.z.literal("user"), content: v4.z.union([ v4.z.string(), v4.z.array(v4.z.union([textPartSchema, imagePartSchema, filePartSchema])) ]), providerOptions: providerMetadataSchema.optional() }); var assistantModelMessageSchema = v4.z.object({ role: v4.z.literal("assistant"), content: v4.z.union([ v4.z.string(), v4.z.array( v4.z.union([ textPartSchema, filePartSchema, reasoningPartSchema, toolCallPartSchema, toolResultPartSchema ]) ) ]), providerOptions: providerMetadataSchema.optional() }); var toolModelMessageSchema = v4.z.object({ role: v4.z.literal("tool"), content: v4.z.array(toolResultPartSchema), providerOptions: providerMetadataSchema.optional() }); v4.z.union([ systemModelMessageSchema, userModelMessageSchema, assistantModelMessageSchema, toolModelMessageSchema ]); function assembleOperationName({ operationId, telemetry }) { return { // standardized operation and resource name: "operation.name": `${operationId}${(telemetry == null ? void 0 : telemetry.functionId) != null ? ` ${telemetry.functionId}` : ""}`, "resource.name": telemetry == null ? void 0 : telemetry.functionId, // detailed, AI SDK specific data: "ai.operationId": operationId, "ai.telemetry.functionId": telemetry == null ? void 0 : telemetry.functionId }; } function getBaseTelemetryAttributes({ model, settings, telemetry, headers }) { var _a16; return { "ai.model.provider": model.provider, "ai.model.id": model.modelId, // settings: ...Object.entries(settings).reduce((attributes, [key, value]) => { attributes[`ai.settings.${key}`] = value; return attributes; }, {}), // add metadata as attributes: ...Object.entries((_a16 = telemetry == null ? void 0 : telemetry.metadata) != null ? _a16 : {}).reduce( (attributes, [key, value]) => { attributes[`ai.telemetry.metadata.${key}`] = value; return attributes; }, {} ), // request headers ...Object.entries(headers != null ? headers : {}).reduce((attributes, [key, value]) => { if (value !== void 0) { attributes[`ai.request.headers.${key}`] = value; } return attributes; }, {}) }; } var noopTracer = { startSpan() { return noopSpan; }, startActiveSpan(name16, arg1, arg2, arg3) { if (typeof arg1 === "function") { return arg1(noopSpan); } if (typeof arg2 === "function") { return arg2(noopSpan); } if (typeof arg3 === "function") { return arg3(noopSpan); } } }; var noopSpan = { spanContext() { return noopSpanContext; }, setAttribute() { return this; }, setAttributes() { return this; }, addEvent() { return this; }, addLink() { return this; }, addLinks() { return this; }, setStatus() { return this; }, updateName() { return this; }, end() { return this; }, isRecording() { return false; }, recordException() { return this; } }; var noopSpanContext = { traceId: "", spanId: "", traceFlags: 0 }; function getTracer({ isEnabled = false, tracer } = {}) { if (!isEnabled) { return noopTracer; } if (tracer) { return tracer; } return trace.getTracer("ai"); } function recordSpan({ name: name16, tracer, attributes, fn, endWhenDone = true }) { return tracer.startActiveSpan(name16, { attributes }, async (span) => { try { const result = await fn(span); if (endWhenDone) { span.end(); } return result; } catch (error) { try { recordErrorOnSpan(span, error); } finally { span.end(); } throw error; } }); } function recordErrorOnSpan(span, error) { if (error instanceof Error) { span.recordException({ name: error.name, message: error.message, stack: error.stack }); span.setStatus({ code: SpanStatusCode.ERROR, message: error.message }); } else { span.setStatus({ code: SpanStatusCode.ERROR }); } } function selectTelemetryAttributes({ telemetry, attributes }) { if ((telemetry == null ? void 0 : telemetry.isEnabled) !== true) { return {}; } return Object.entries(attributes).reduce((attributes2, [key, value]) => { if (value == null) { return attributes2; } if (typeof value === "object" && "input" in value && typeof value.input === "function") { if ((telemetry == null ? void 0 : telemetry.recordInputs) === false) { return attributes2; } const result = value.input(); return result == null ? attributes2 : { ...attributes2, [key]: result }; } if (typeof value === "object" && "output" in value && typeof value.output === "function") { if ((telemetry == null ? void 0 : telemetry.recordOutputs) === false) { return attributes2; } const result = value.output(); return result == null ? attributes2 : { ...attributes2, [key]: result }; } return { ...attributes2, [key]: value }; }, {}); } function getRetryDelayInMs({ error, exponentialBackoffDelay }) { const headers = error.responseHeaders; if (!headers) return exponentialBackoffDelay; let ms; const retryAfterMs = headers["retry-after-ms"]; if (retryAfterMs) { const timeoutMs = parseFloat(retryAfterMs); if (!Number.isNaN(timeoutMs)) { ms = timeoutMs; } } const retryAfter = headers["retry-after"]; if (retryAfter && ms === void 0) { const timeoutSeconds = parseFloat(retryAfter); if (!Number.isNaN(timeoutSeconds)) { ms = timeoutSeconds * 1e3; } else { ms = Date.parse(retryAfter) - Date.now(); } } if (ms != null && !Number.isNaN(ms) && 0 <= ms && (ms < 60 * 1e3 || ms < exponentialBackoffDelay)) { return ms; } return exponentialBackoffDelay; } var retryWithExponentialBackoffRespectingRetryHeaders = ({ maxRetries = 2, initialDelayInMs = 2e3, backoffFactor = 2, abortSignal } = {}) => async (f) => _retryWithExponentialBackoff(f, { maxRetries, delayInMs: initialDelayInMs, backoffFactor, abortSignal }); async function _retryWithExponentialBackoff(f, { maxRetries, delayInMs, backoffFactor, abortSignal }, errors = []) { try { return await f(); } catch (error) { if (chunkR5MKJ5UG_cjs.isAbortError(error)) { throw error; } if (maxRetries === 0) { throw error; } const errorMessage = chunkR5MKJ5UG_cjs.getErrorMessage2(error); const newErrors = [...errors, error]; const tryNumber = newErrors.length; if (tryNumber > maxRetries) { throw new RetryError({ message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`, reason: "maxRetriesExceeded", errors: newErrors }); } if (error instanceof Error && chunkR5MKJ5UG_cjs.APICallError.isInstance(error) && error.isRetryable === true && tryNumber <= maxRetries) { await chunkR5MKJ5UG_cjs.delay( getRetryDelayInMs({ error, exponentialBackoffDelay: delayInMs }), { abortSignal } ); return _retryWithExponentialBackoff( f, { maxRetries, delayInMs: backoffFactor * delayInMs, backoffFactor, abortSignal }, newErrors ); } if (tryNumber === 1) { throw error; } throw new RetryError({ message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`, reason: "errorNotRetryable", errors: newErrors }); } } function prepareRetries({ maxRetries, abortSignal }) { if (maxRetries != null) { if (!Number.isInteger(maxRetries)) { throw new InvalidArgumentError2({ parameter: "maxRetries", value: maxRetries, message: "maxRetries must be an integer" }); } if (maxRetries < 0) { throw new InvalidArgumentError2({ parameter: "maxRetries", value: maxRetries, message: "maxRetries must be >= 0" }); } } const maxRetriesResult = maxRetries != null ? maxRetries : 2; return { maxRetries: maxRetriesResult, retry: retryWithExponentialBackoffRespectingRetryHeaders({ maxRetries: maxRetriesResult, abortSignal }) }; } var DefaultGeneratedFile = class { constructor({ data, mediaType }) { const isUint8Array = data instanceof Uint8Array; this.base64Data = isUint8Array ? void 0 : data; this.uint8ArrayData = isUint8Array ? data : void 0; this.mediaType = mediaType; } // lazy conversion with caching to avoid unnecessary conversion overhead: get base64() { if (this.base64Data == null) { this.base64Data = chunkR5MKJ5UG_cjs.convertUint8ArrayToBase64(this.uint8ArrayData); } return this.base64Data; } // lazy conversion with caching to avoid unnecessary conversion overhead: get uint8Array() { if (this.uint8ArrayData == null) { this.uint8ArrayData = chunkR5MKJ5UG_cjs.convertBase64ToUint8Array(this.base64Data); } return this.uint8ArrayData; } }; function stepCountIs(stepCount) { return ({ steps }) => steps.length === stepCount; } function createToolModelOutput({ output, tool: tool2, errorMode }) { if (errorMode === "text") { return { type: "error-text", value: chunkR5MKJ5UG_cjs.getErrorMessage(output) }; } else if (errorMode === "json") { return { type: "error-json", value: toJSONValue(output) }; } if (tool2 == null ? void 0 : tool2.toModelOutput) { return tool2.toModelOutput(output); } return typeof output === "string" ? { type: "text", value: output } : { type: "json", value: toJSONValue(output) }; } function toJSONValue(value) { return value === void 0 ? null : value; } chunkR5MKJ5UG_cjs.createIdGenerator({ prefix: "aitxt", size: 24 }); chunkR5MKJ5UG_cjs.lazyValidator( () => chunkR5MKJ5UG_cjs.zodSchema( v4.z.union([ v4.z.strictObject({ type: v4.z.literal("text-start"), id: v4.z.string(), providerMetadata: providerMetadataSchema.optional() }), v4.z.strictObject({ type: v4.z.literal("text-delta"), id: v4.z.string(), delta: v4.z.string(), providerMetadata: providerMetadataSchema.optional() }), v4.z.strictObject({ type: v4.z.literal("text-end"), id: v4.z.string(), providerMetadata: providerMetadataSchema.optional() }), v4.z.strictObject({ type: v4.z.literal("error"), errorText: v4.z.string() }), v4.z.strictObject({ type: v4.z.literal("tool-input-start"), toolCallId: v4.z.string(), toolName: v4.z.string(), providerExecuted: v4.z.boolean().optional(), dynamic: v4.z.boolean().optional() }), v4.z.strictObject({ type: v4.z.literal("tool-input-delta"), toolCallId: v4.z.string(), inputTextDelta: v4.z.string() }), v4.z.strictObject({ type: v4.z.literal("tool-input-available"), toolCallId: v4.z.string(), toolName: v4.z.string(), input: v4.z.unknown(), providerExecuted: v4.z.boolean().optional(), providerMetadata: providerMetadataSchema.optional(), dynamic: v4.z.boolean().optional() }), v4.z.strictObject({ type: v4.z.literal("tool-input-error"), toolCallId: v4.z.string(), toolName: v4.z.string(), input: v4.z.unknown(), providerExecuted: v4.z.boolean().optional(), providerMetadata: providerMetadataSchema.optional(), dynamic: v4.z.boolean().optional(), errorText: v4.z.string() }), v4.z.strictObject({ type: v4.z.literal("tool-output-available"), toolCallId: v4.z.string(), output: v4.z.unknown(), providerExecuted: v4.z.boolean().optional(), dynamic: v4.z.boolean().optional(), preliminary: v4.z.boolean().optional() }), v4.z.strictObject({ type: v4.z.literal("tool-output-error"), toolCallId: v4.z.string(), errorText: v4.z.string(), providerExecuted: v4.z.boolean().optional(), dynamic: v4.z.boolean().optional() }), v4.z.strictObject({ type: v4.z.literal("reasoning-start"), id: v4.z.string(), providerMetadata: providerMetadataSchema.optional() }), v4.z.strictObject({ type: v4.z.literal("reasoning-delta"), id: v4.z.string(), delta: v4.z.string(), providerMetadata: providerMetadataSchema.optional() }), v4.z.strictObject({ type: v4.z.literal("reasoning-end"), id: v4.z.string(), providerMetadata: providerMetadataSchema.optional() }), v4.z.strictObject({ type: v4.z.literal("source-url"), sourceId: v4.z.string(), url: v4.z.string(), title: v4.z.string().optional(), providerMetadata: providerMetadataSchema.optional() }), v4.z.strictObject({ type: v4.z.literal("source-document"), sourceId: v4.z.string(), mediaType: v4.z.string(), title: v4.z.string(), filename: v4.z.string().optional(), providerMetadata: providerMetadataSchema.optional() }), v4.z.strictObject({ type: v4.z.literal("file"), url: v4.z.string(), mediaType: v4.z.string(), providerMetadata: providerMetadataSchema.optional() }), v4.z.strictObject({ type: v4.z.custom( (value) => typeof value === "string" && value.startsWith("data-"), { message: 'Type must start with "data-"' } ), id: v4.z.string().optional(), data: v4.z.unknown(), transient: v4.z.boolean().optional() }), v4.z.strictObject({ type: v4.z.literal("start-step") }), v4.z.strictObject({ type: v4.z.literal("finish-step") }), v4.z.strictObject({ type: v4.z.literal("start"), messageId: v4.z.string().optional(), messageMetadata: v4.z.unknown().optional() }), v4.z.strictObject({ type: v4.z.literal("finish"), finishReason: v4.z.enum([ "stop", "length", "content-filter", "tool-calls", "error", "other", "unknown" ]).optional(), messageMetadata: v4.z.unknown().optional() }), v4.z.strictObject({ type: v4.z.literal("abort") }), v4.z.strictObject({ type: v4.z.literal("message-metadata"), messageMetadata: v4.z.unknown() }) ]) ) ); function fixJson(input) { const stack = ["ROOT"]; let lastValidIndex = -1; let literalStart = null; function processValueStart(char, i, swapState) { { switch (char) { case '"': { lastValidIndex = i; stack.pop(); stack.push(swapState); stack.push("INSIDE_STRING"); break; } case "f": case "t": case "n": { lastValidIndex = i; literalStart = i; stack.pop(); stack.push(swapState); stack.push("INSIDE_LITERAL"); break; } case "-": { stack.pop(); stack.push(swapState); stack.push("INSIDE_NUMBER"); break; } case "0": case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": { lastValidIndex = i; stack.pop(); stack.push(swapState); stack.push("INSIDE_NUMBER"); break; } case "{": { lastValidIndex = i; stack.pop(); stack.push(swapState); stack.push("INSIDE_OBJECT_START"); break; } case "[": { lastValidIndex = i; stack.pop(); stack.push(swapState); stack.push("INSIDE_ARRAY_START"); break; } } } } function processAfterObjectValue(char, i) { switch (char) { case ",": { stack.pop(); stack.push("INSIDE_OBJECT_AFTER_COMMA"); break; } case "}": { lastValidIndex = i; stack.pop(); break; } } } function processAfterArrayValue(char, i) { switch (char) { case ",": { stack.pop(); stack.push("INSIDE_ARRAY_AFTER_COMMA"); break; } case "]": { lastValidIndex = i; stack.pop(); break; } } } for (let i = 0; i < input.length; i++) { const char = input[i]; const currentState = stack[stack.length - 1]; switch (currentState) { case "ROOT": processValueStart(char, i, "FINISH"); break; case "INSIDE_OBJECT_START": { switch (char) { case '"': { stack.pop(); stack.push("INSIDE_OBJECT_KEY"); break; } case "}": { lastValidIndex = i; stack.pop(); break; } } break; } case "INSIDE_OBJECT_AFTER_COMMA": { switch (char) { case '"': { stack.pop(); stack.push("INSIDE_OBJECT_KEY"); break; } } break; } case "INSIDE_OBJECT_KEY": { switch (char) { case '"': { stack.pop(); stack.push("INSIDE_OBJECT_AFTER_KEY"); break; } } break; } case "INSIDE_OBJECT_AFTER_KEY": { switch (char) { case ":": { stack.pop(); stack.push("INSIDE_OBJECT_BEFORE_VALUE"); break; } } break; } case "INSIDE_OBJECT_BEFORE_VALUE": { processValueStart(char, i, "INSIDE_OBJECT_AFTER_VALUE"); break; } case "INSIDE_OBJECT_AFTER_VALUE": { processAfterObjectValue(char, i); break; } case "INSIDE_STRING": { switch (char) { case '"': { stack.pop(); lastValidIndex = i; break; } case "\\": { stack.push("INSIDE_STRING_ESCAPE"); break; } default: { lastValidIndex = i; } } break; } case "INSIDE_ARRAY_START": { switch (char) { case "]": { lastValidIndex = i; stack.pop(); break; } default: { lastValidIndex = i; processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE"); break; } } break; } case "INSIDE_ARRAY_AFTER_VALUE": { switch (char) { case ",": { stack.pop(); stack.push("INSIDE_ARRAY_AFTER_COMMA"); break; } case "]": { lastValidIndex = i; stack.pop(); break; } default: { lastValidIndex = i; break; } } break; } case "INSIDE_ARRAY_AFTER_COMMA": { processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE"); break; } case "INSIDE_STRING_ESCAPE": { stack.pop(); lastValidIndex = i; break; } case "INSIDE_NUMBER": { switch (char) { case "0": case "1": case "2": case "3": case "4": case "5": case "6": case "7": case "8": case "9": { lastValidIndex = i; break; } case "e": case "E": case "-": case ".": { break; } case ",": { stack.pop(); if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") { processAfterArrayValue(char, i); } if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") { processAfterObjectValue(char, i); } break; } case "}": { stack.pop(); if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") { processAfterObjectValue(char, i); } break; } case "]": { stack.pop(); if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") { processAfterArrayValue(char, i); } break; } default: { stack.pop(); break; } } break; } case "INSIDE_LITERAL": { const partialLiteral = input.substring(literalStart, i + 1); if (!"false".startsWith(partialLiteral) && !"true".startsWith(partialLiteral) && !"null".startsWith(partialLiteral)) { stack.pop(); if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") { processAfterObjectValue(char, i); } else if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") { processAfterArrayValue(char, i); } } else { lastValidIndex = i; } break; } } } let result = input.slice(0, lastValidIndex + 1); for (let i = stack.length - 1; i >= 0; i--) { const state = stack[i]; switch (state) { case "INSIDE_STRING": { result += '"'; break; } case "INSIDE_OBJECT_KEY": case "INSIDE_OBJECT_AFTER_KEY": case "INSIDE_OBJECT_AFTER_COMMA": case "INSIDE_OBJECT_START": case "INSIDE_OBJECT_BEFORE_VALUE": case "INSIDE_OBJECT_AFTER_VALUE": { result += "}"; break; } case "INSIDE_ARRAY_START": case "INSIDE_ARRAY_AFTER_COMMA": case "INSIDE_ARRAY_AFTER_VALUE": { result += "]"; break; } case "INSIDE_LITERAL": { const partialLiteral = input.substring(literalStart, input.length); if ("true".startsWith(partialLiteral)) { result += "true".slice(partialLiteral.length); } else if ("false".startsWith(partialLiteral)) { result += "false".slice(partialLiteral.length); } else if ("null".startsWith(partialLiteral)) { result += "null".slice(partialLiteral.length); } } } } return result; } async function parsePartialJson(jsonText) { if (jsonText === void 0) { return { value: void 0, state: "undefined-input" }; } let result = await chunkR5MKJ5UG_cjs.safeParseJSON({ text: jsonText }); if (result.success) { return { value: result.value, state: "successful-parse" }; } result = await chunkR5MKJ5UG_cjs.safeParseJSON({ text: fixJson(jsonText) }); if (result.success) { return { value: result.value, state: "repaired-parse" }; } return { value: void 0, state: "failed-parse" }; } function isDataUIPart(part) { return part.type.startsWith("data-"); } function isTextUIPart(part) { return part.type === "text"; } function isFileUIPart(part) { return part.type === "file"; } function isReasoningUIPart(part) { return part.type === "reasoning"; } function isToolUIPart(part) { return part.type.startsWith("tool-"); } function isDynamicToolUIPart(part) { return part.type === "dynamic-tool"; } function isToolOrDynamicToolUIPart(part) { return isToolUIPart(part) || isDynamicToolUIPart(part); } function getToolName(part) { return part.type.split("-").slice(1).join("-"); } function getToolOrDynamicToolName(part) { return isDynamicToolUIPart(part) ? part.toolName : getToolName(part); } chunkR5MKJ5UG_cjs.createIdGenerator({ prefix: "aitxt", size: 24 }); function convertToModelMessages(messages, options) { const modelMessages = []; if (options == null ? void 0 : options.ignoreIncompleteToolCalls) { messages = messages.map((message) => ({ ...message, parts: message.parts.filter( (part) => !isToolOrDynamicToolUIPart(part) || part.state !== "input-streaming" && part.state !== "input-available" ) })); } for (const message of messages) { switch (message.role) { case "system": { const textParts = message.parts.filter( (part) => part.type === "text" ); const providerMetadata = textParts.reduce((acc, part) => { if (part.providerMetadata != null) { return { ...acc, ...part.providerMetadata }; } return acc; }, {}); modelMessages.push({ role: "system", content: textParts.map((part) => part.text).join(""), ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {} }); break; } case "user": { modelMessages.push({ role: "user", content: message.parts.map((part) => { var _a16; if (isTextUIPart(part)) { return { type: "text", text: part.text, ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {} }; } if (isFileUIPart(part)) { return { type: "file", mediaType: part.mediaType, filename: part.filename, data: part.url, ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {} }; } if (isDataUIPart(part)) { return (_a16 = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _a16.call( options, part ); } }).filter((part) => part != null) }); break; } case "assistant": { if (message.parts != null) { let processBlock2 = function() { var _a16, _b9, _c; if (block.length === 0) { return; } const content = []; for (const part of block) { if (isTextUIPart(part)) { content.push({ type: "text", text: part.text, ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {} }); } else if (isFileUIPart(part)) { content.push({ type: "file", mediaType: part.mediaType, filename: part.filename, data: part.url }); } else if (isReasoningUIPart(part)) { content.push({ type: "reasoning", text: part.text, providerOptions: part.providerMetadata }); } else if (isDynamicToolUIPart(part)) { const toolName = part.toolName; if (part.state !== "input-streaming") { content.push({ type: "tool-call", toolCallId: part.toolCallId, toolName, input: part.input, ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {} }); } } else if (isToolUIPart(part)) { const toolName = getToolName(part); if (part.state !== "input-streaming") { content.push({ type: "tool-call", toolCallId: part.toolCallId, toolName, input: part.state === "output-error" ? (_a16 = part.input) != null ? _a16 : part.rawInput : part.input, providerExecuted: part.providerExecuted, ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {} }); if (part.providerExecuted === true && (part.state === "output-available" || part.state === "output-error")) { content.push({ type: "tool-result", toolCallId: part.toolCallId, toolName, output: createToolModelOutput({ output: part.state === "output-error" ? part.errorText : part.output, tool: (_b9 = options == null ? void 0 : options.tools) == null ? void 0 : _b9[toolName], errorMode: part.state === "output-error" ? "json" : "none" }), ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {} }); } } } else if (isDataUIPart(part)) { const dataPart = (_c = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _c.call( options, part ); if (dataPart != null) { content.push(dataPart); } } else { const _exhaustiveCheck = part; throw new Error(`Unsupported part: ${_exhaustiveCheck}`); } } modelMessages.push({ role: "assistant", content }); const toolParts = block.filter( (part) => isToolUIPart(part) && part.providerExecuted !== true || part.type === "dynamic-tool" ); if (toolParts.length > 0) { modelMessages.push({ role: "tool", content: toolParts.map((toolPart) => { var _a17; switch (toolPart.state) { case "output-error": case "output-available": { const toolName = getToolOrDynamicToolName(toolPart); return { type: "tool-result", toolCallId: toolPart.toolCallId, toolName, output: createToolModelOutput({ output: toolPart.state === "output-error" ? toolPart.errorText : toolPart.output, tool: (_a17 = options == null ? void 0 : options.tools) == null ? void 0 : _a17[toolName], errorMode: toolPart.state === "output-error" ? "text" : "none" }), ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {} }; } default: { return null; } } }).filter( (output) => output != null ) }); } block = []; }; let block = []; for (const part of message.parts) { if (isTextUIPart(part) || isReasoningUIPart(part) || isFileUIPart(part) || isToolOrDynamicToolUIPart(part) || isDataUIPart(part)) { block.push(part); } else if (part.type === "step-start") { processBlock2(); } } processBlock2(); break; } break; } default: { const _exhaustiveCheck = message.role; throw new MessageConversionError({ originalMessage: message, message: `Unsupported role: ${_exhaustiveCheck}` }); } } } return modelMessages; } async function embed({ model: modelArg, value, providerOptions, maxRetries: maxRetriesArg, abortSignal, headers, experimental_telemetry: telemetry }) { const model = resolveEmbeddingModel(modelArg); const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg, abortSignal }); const headersWithUserAgent = chunkR5MKJ5UG_cjs.withUserAgentSuffix( headers != null ? headers : {}, `ai/${VERSION3}` ); const baseTelemetryAttributes = getBaseTelemetryAttributes({ model, telemetry, headers: headersWithUserAgent, settings: { maxRetries } }); const tracer = getTracer(telemetry); return recordSpan({ name: "ai.embed", attributes: selectTelemetryAttributes({ telemetry, attributes: { ...assembleOperationName({ operationId: "ai.embed", telemetry }), ...baseTelemetryAttributes, "ai.value": { input: () => JSON.stringify(value) } } }), tracer, fn: async (span) => { const { embedding, usage, response, providerMetadata } = await retry( () => ( // nested spans to align with the embedMany telemetry data: recordSpan({ name: "ai.embed.doEmbed", attributes: selectTelemetryAttributes({ telemetry, attributes: { ...assembleOperationName({ operationId: "ai.embed.doEmbed", telemetry }), ...baseTelemetryAttributes, // specific settings that only make sense on the outer level: "ai.values": { input: () => [JSON.stringify(value)] } } }), tracer, fn: async (doEmbedSpan) => { var _a16; const modelResponse = await model.doEmbed({ values: [value], abortSignal, headers: headersWithUserAgent, providerOptions }); const embedding2 = modelResponse.embeddings[0]; const usage2 = (_a16 = modelResponse.usage) != null ? _a16 : { tokens: NaN }; doEmbedSpan.setAttributes( selectTelemetryAttributes({ telemetry, attributes: { "ai.embeddings": { output: () => modelResponse.embeddings.map( (embedding3) => JSON.stringify(embedding3) ) }, "ai.usage.tokens": usage2.tokens } }) ); return { embedding: embedding2, usage: usage2, providerMetadata: modelResponse.providerMetadata, response: modelResponse.response }; } }) ) ); span.setAttributes( selectTelemetryAttributes({ telemetry, attributes: { "ai.embedding": { output: () => JSON.stringify(embedding) }, "ai.usage.tokens": usage.tokens } }) ); return new DefaultEmbedResult({ value, embedding, usage, providerMetadata, response }); } }); } var DefaultEmbedResult = class { constructor(options) { this.value = options.value; this.embedding = options.embedding; this.usage = options.usage; this.providerMetadata = options.providerMetadata; this.response = options.response; } }; chunkR5MKJ5UG_cjs.createIdGenerator({ prefix: "aiobj", size: 24 }); function createDownload(options) { return ({ url, abortSignal }) => download({ url, maxBytes: void 0 , abortSignal }); } function isDeepEqualData(obj1, obj2) { if (obj1 === obj2) return true; if (obj1 == null || obj2 == null) return false; if (typeof obj1 !== "object" && typeof obj2 !== "object") return obj1 === obj2; if (obj1.constructor !== obj2.constructor) return false; if (obj1 instanceof Date && obj2 instanceof Date) { return obj1.getTime() === obj2.getTime(); } if (Array.isArray(obj1)) { if (obj1.length !== obj2.length) return false; for (let i = 0; i < obj1.length; i++) { if (!isDeepEqualData(obj1[i], obj2[i])) return false; } return true; } const keys1 = Object.keys(obj1); const keys2 = Object.keys(obj2); if (keys1.length !== keys2.length) return false; for (const key of keys1) { if (!keys2.includes(key)) return false; if (!isDeepEqualData(obj1[key], obj2[key])) return false; } return true; } chunkR5MKJ5UG_cjs.createIdGenerator({ prefix: "aiobj", size: 24 }); var DefaultGeneratedAudioFile = class extends DefaultGeneratedFile { constructor({ data, mediaType }) { super({ data, mediaType }); let format = "mp3"; if (mediaType) { const mediaTypeParts = mediaType.split("/"); if (mediaTypeParts.length === 2) { if (mediaType !== "audio/mpeg") { format = mediaTypeParts[1]; } } } if (!format) { throw new Error( "Audio format must be provided or determinable from media type" ); } this.format = format; } }; async function generateSpeech({ model, text: text2, voice, outputFormat, instructions, speed, language, providerOptions = {}, maxRetries: maxRetriesArg, abortSignal, headers }) { var _a16; if (model.specificationVersion !== "v2") { throw new UnsupportedModelVersionError({ version: model.specificationVersion, provider: model.provider, modelId: model.modelId }); } const headersWithUserAgent = chunkR5MKJ5UG_cjs.withUserAgentSuffix( headers != null ? headers : {}, `ai/${VERSION3}` ); const { retry } = prepareRetries({ maxRetries: maxRetriesArg, abortSignal }); const result = await retry( () => model.doGenerate({ text: text2, voice, outputFormat, instructions, speed, language, abortSignal, headers: headersWithUserAgent, providerOptions }) ); if (!result.audio || result.audio.length === 0) { throw new NoSpeechGeneratedError({ responses: [result.response] }); } logWarnings(result.warnings); return new DefaultSpeechResult({ audio: new DefaultGeneratedAudioFile({ data: result.audio, mediaType: (_a16 = detectMediaType({ data: result.audio, signatures: audioMediaTypeSignatures })) != null ? _a16 : "audio/mp3" }), warnings: result.warnings, responses: [result.response], providerMetadata: result.providerMetadata }); } var DefaultSpeechResult = class { constructor(options) { var _a16; this.audio = options.audio; this.warnings = options.warnings; this.responses = options.responses; this.providerMetadata = (_a16 = options.providerMetadata) != null ? _a16 : {}; } }; var output_exports = {}; __export(output_exports, { object: () => object, text: () => text }); var text = () => ({ type: "text", responseFormat: { type: "text" }, async parsePartial({ text: text2 }) { return { partial: text2 }; }, async parseOutput({ text: text2 }) { return text2; } }); var object = ({ schema: inputSchema }) => { const schema = chunkR5MKJ5UG_cjs.asSchema(inputSchema); return { type: "object", responseFormat: { type: "json", schema: schema.jsonSchema }, async parsePartial({ text: text2 }) { const result = await parsePartialJson(text2); switch (result.state) { case "failed-parse": case "undefined-input": return void 0; case "repaired-parse": case "successful-parse": return { // Note: currently no validation of partial results: partial: result.value }; default: { const _exhaustiveCheck = result.state; throw new Error(`Unsupported parse state: ${_exhaustiveCheck}`); } } }, async parseOutput({ text: text2 }, context) { const parseResult = await chunkR5MKJ5UG_cjs.safeParseJSON({ text: text2 }); if (!parseResult.success) { throw new NoObjectGeneratedError({ message: "No object generated: could not parse the response.", cause: parseResult.error, text: text2, response: context.response, usage: context.usage, finishReason: context.finishReason }); } const validationResult = await chunkR5MKJ5UG_cjs.safeValidateTypes({ value: parseResult.value, schema }); if (!validationResult.success) { throw new NoObjectGeneratedError({ message: "No object generated: response did not match schema.", cause: validationResult.error, text: text2, response: context.response, usage: context.usage, finishReason: context.finishReason }); } return validationResult.value; } }; }; var NoTranscriptGeneratedError = class extends chunkR5MKJ5UG_cjs.AISDKError { constructor(options) { super({ name: "AI_NoTranscriptGeneratedError", message: "No transcript generated." }); this.responses = options.responses; } }; var defaultDownload = createDownload(); async function transcribe({ model, audio, providerOptions = {}, maxRetries: maxRetriesArg, abortSignal, headers, download: downloadFn = defaultDownload }) { if (model.specificationVersion !== "v2") { throw new UnsupportedModelVersionError({ version: model.specificationVersion, provider: model.provider, modelId: model.modelId }); } const { retry } = prepareRetries({ maxRetries: maxRetriesArg, abortSignal }); const headersWithUserAgent = chunkR5MKJ5UG_cjs.withUserAgentSuffix( headers != null ? headers : {}, `ai/${VERSION3}` ); const audioData = audio instanceof URL ? (await downloadFn({ url: audio, abortSignal })).data : convertDataContentToUint8Array(audio); const result = await retry( () => { var _a16; return model.doGenerate({ audio: audioData, abortSignal, headers: headersWithUserAgent, providerOptions, mediaType: (_a16 = detectMediaType({ data: audioData, signatures: audioMediaTypeSignatures })) != null ? _a16 : "audio/wav" }); } ); logWarnings(result.warnings); if (!result.text) { throw new NoTranscriptGeneratedError({ responses: [result.response] }); } return new DefaultTranscriptionResult({ text: result.text, segments: result.segments, language: result.language, durationInSeconds: result.durationInSeconds, warnings: result.warnings, responses: [result.response], providerMetadata: result.providerMetadata }); } var DefaultTranscriptionResult = class { constructor(options) { var _a16; this.text = options.text; this.segments = options.segments; this.language = options.language; this.durationInSeconds = options.durationInSeconds; this.warnings = options.warnings; this.responses = options.responses; this.providerMetadata = (_a16 = options.providerMetadata) != null ? _a16 : {}; } }; chunkR5MKJ5UG_cjs.lazyValidator( () => chunkR5MKJ5UG_cjs.zodSchema( v4.z.array( v4.z.object({ id: v4.z.string(), role: v4.z.enum(["system", "user", "assistant"]), metadata: v4.z.unknown().optional(), parts: v4.z.array( v4.z.union([ v4.z.object({ type: v4.z.literal("text"), text: v4.z.string(), state: v4.z.enum(["streaming", "done"]).optional(), providerMetadata: providerMetadataSchema.optional() }), v4.z.object({ type: v4.z.literal("reasoning"), text: v4.z.string(), state: v4.z.enum(["streaming", "done"]).optional(), providerMetadata: providerMetadataSchema.optional() }), v4.z.object({ type: v4.z.literal("source-url"), sourceId: v4.z.string(), url: v4.z.string(), title: v4.z.string().optional(), providerMetadata: providerMetadataSchema.optional() }), v4.z.object({ type: v4.z.literal("source-document"), sourceId: v4.z.string(), mediaType: v4.z.string(), title: v4.z.string(), filename: v4.z.string().optional(), providerMetadata: providerMetadataSchema.optional() }), v4.z.object({ type: v4.z.literal("file"), mediaType: v4.z.string(), filename: v4.z.string().optional(), url: v4.z.string(), providerMetadata: providerMetadataSchema.optional() }), v4.z.object({ type: v4.z.literal("step-start") }), v4.z.object({ type: v4.z.string().startsWith("data-"), id: v4.z.string().optional(), data: v4.z.unknown() }), v4.z.object({ type: v4.z.literal("dynamic-tool"), toolName: v4.z.string(), toolCallId: v4.z.string(), state: v4.z.literal("input-streaming"), input: v4.z.unknown().optional(), providerExecuted: v4.z.boolean().optional(), output: v4.z.never().optional(), errorText: v4.z.never().optional() }), v4.z.object({ type: v4.z.literal("dynamic-tool"), toolName: v4.z.string(), toolCallId: v4.z.string(), state: v4.z.literal("input-available"), input: v4.z.unknown(), providerExecuted: v4.z.boolean().optional(), output: v4.z.never().optional(), errorText: v4.z.never().optional(), callProviderMetadata: providerMetadataSchema.optional() }), v4.z.object({ type: v4.z.literal("dynamic-tool"), toolName: v4.z.string(), toolCallId: v4.z.string(), state: v4.z.literal("output-available"), input: v4.z.unknown(), providerExecuted: v4.z.boolean().optional(), output: v4.z.unknown(), errorText: v4.z.never().optional(), callProviderMetadata: providerMetadataSchema.optional(), preliminary: v4.z.boolean().optional() }), v4.z.object({ type: v4.z.literal("dynamic-tool"), toolName: v4.z.string(), toolCallId: v4.z.string(), state: v4.z.literal("output-error"), input: v4.z.unknown(), providerExecuted: v4.z.boolean().optional(), output: v4.z.never().optional(), errorText: v4.z.string(), callProviderMetadata: providerMetadataSchema.optional() }), v4.z.object({ type: v4.z.string().startsWith("tool-"), toolCallId: v4.z.string(), state: v4.z.literal("input-streaming"), providerExecuted: v4.z.boolean().optional(), input: v4.z.unknown().optional(), output: v4.z.never().optional(), errorText: v4.z.never().optional(), approval: v4.z.never().optional() }), v4.z.object({ type: v4.z.string().startsWith("tool-"), toolCallId: v4.z.string(), state: v4.z.literal("input-available"), providerExecuted: v4.z.boolean().optional(), input: v4.z.unknown(), output: v4.z.never().optional(), errorText: v4.z.never().optional(), callProviderMetadata: providerMetadataSchema.optional(), approval: v4.z.never().optional() }), v4.z.object({ type: v4.z.string().startsWith("tool-"), toolCallId: v4.z.string(), state: v4.z.literal("approval-requested"), input: v4.z.unknown(), providerExecuted: v4.z.boolean().optional(), output: v4.z.never().optional(), errorText: v4.z.never().optional(), callProviderMetadata: providerMetadataSchema.optional(), approval: v4.z.object({ id: v4.z.string(), approved: v4.z.never().optional(), reason: v4.z.never().optional() }) }), v4.z.object({ type: v4.z.string().startsWith("tool-"), toolCallId: v4.z.string(), state: v4.z.literal("approval-responded"), input: v4.z.unknown(), providerExecuted: v4.z.boolean().optional(), output: v4.z.never().optional(), errorText: v4.z.never().optional(), callProviderMetadata: providerMetadataSchema.optional(), approval: v4.z.object({ id: v4.z.string(), approved: v4.z.boolean(), reason: v4.z.string().optional() }) }), v4.z.object({ type: v4.z.string().startsWith("tool-"), toolCallId: v4.z.string(), state: v4.z.literal("output-available"), providerExecuted: v4.z.boolean().optional(), input: v4.z.unknown(), output: v4.z.unknown(), errorText: v4.z.never().optional(), callProviderMetadata: providerMetadataSchema.optional(), preliminary: v4.z.boolean().optional(), approval: v4.z.object({ id: v4.z.string(), approved: v4.z.literal(true), reason: v4.z.string().optional() }).optional() }), v4.z.object({ type: v4.z.string().startsWith("tool-"), toolCallId: v4.z.string(), state: v4.z.literal("output-error"), providerExecuted: v4.z.boolean().optional(), input: v4.z.unknown(), output: v4.z.never().optional(), errorText: v4.z.string(), callProviderMetadata: providerMetadataSchema.optional(), approval: v4.z.object({ id: v4.z.string(), approved: v4.z.literal(true), reason: v4.z.string().optional() }).optional() }), v4.z.object({ type: v4.z.string().startsWith("tool-"), toolCallId: v4.z.string(), state: v4.z.literal("output-denied"), providerExecuted: v4.z.boolean().optional(), input: v4.z.unknown(), output: v4.z.never().optional(), errorText: v4.z.never().optional(), callProviderMetadata: providerMetadataSchema.optional(), approval: v4.z.object({ id: v4.z.string(), approved: v4.z.literal(false), reason: v4.z.string().optional() }) }) ]) ).nonempty("Message must contain at least one part") }) ).nonempty("Messages array must not be empty") ) ); exports.convertToModelMessages = convertToModelMessages; exports.embed = embed; exports.generateSpeech = generateSpeech; exports.isDeepEqualData = isDeepEqualData; exports.isToolUIPart = isToolUIPart; exports.parsePartialJson = parsePartialJson; exports.stepCountIs = stepCountIs; exports.transcribe = transcribe; //# sourceMappingURL=chunk-PWQW5NYR.cjs.map //# sourceMappingURL=chunk-PWQW5NYR.cjs.map