{"version":3,"sources":["../../../node_modules/.pnpm/secure-json-parse@2.7.0/node_modules/secure-json-parse/index.js","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/ai-sdk-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/api-call-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/get-error-message.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/invalid-argument-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/json-parse-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/type-validation-error.ts","../../../node_modules/.pnpm/nanoid@3.3.11/node_modules/nanoid/non-secure/index.js","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/parse-json.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/convert-async-iterator-to-readable-stream.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/delay.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/generate-id.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/get-error-message.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/is-abort-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/validator.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/validate-types.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.2_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/index.js","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/fix-json.ts","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/parse-partial-json.ts","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/data-stream-parts.ts","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/zod-schema.ts","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/schema.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/platform/node/globalThis.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/version.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/semver.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/global-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/types.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/diag.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/NoopContextManager.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/trace_flags.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/context-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/status.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/trace.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace-api.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/util/prepare-response-headers.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/errors/unsupported-model-version-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/errors/invalid-argument-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/util/retry-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/util/retry-with-exponential-backoff.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/prompt/prepare-retries.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/telemetry/assemble-operation-name.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/telemetry/get-base-telemetry-attributes.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/telemetry/noop-tracer.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/telemetry/get-tracer.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/telemetry/record-span.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/telemetry/select-telemetry-attributes.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/util/split-array.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/embed/embed-many.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/errors/no-object-generated-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/prompt/data-content.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/types/json-value.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/types/provider-metadata.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/prompt/tool-result-content.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/prompt/content-part.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/prompt/message.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/generate-object/inject-json-instruction.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/generate-object/generate-object.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/generate-object/stream-object.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/generate-text/generate-text.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/generate-text/output.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/util/merge-streams.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/generate-text/stream-text.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/tool/mcp/types.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/core/tool/mcp/json-rpc-message.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/streams/langchain-adapter.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/streams/stream-callbacks.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.5_zod@3.25.76/node_modules/ai/streams/llamaindex-adapter.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.1/node_modules/@ai-sdk/provider/src/errors/ai-sdk-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.1/node_modules/@ai-sdk/provider/src/errors/api-call-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.1/node_modules/@ai-sdk/provider/src/errors/empty-response-body-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.1/node_modules/@ai-sdk/provider/src/errors/get-error-message.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.1/node_modules/@ai-sdk/provider/src/errors/invalid-argument-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.1/node_modules/@ai-sdk/provider/src/errors/json-parse-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@2.0.1/node_modules/@ai-sdk/provider/src/errors/type-validation-error.ts","../../../node_modules/.pnpm/eventsource-parser@3.0.6/node_modules/eventsource-parser/src/errors.ts","../../../node_modules/.pnpm/eventsource-parser@3.0.6/node_modules/eventsource-parser/src/parse.ts","../../../node_modules/.pnpm/eventsource-parser@3.0.6/node_modules/eventsource-parser/src/stream.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/combine-headers.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/delay.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/extract-response-headers.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/generate-id.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/get-error-message.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/is-abort-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/handle-fetch-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/get-runtime-environment-user-agent.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/normalize-headers.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/with-user-agent-suffix.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/version.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/get-from-api.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/load-optional-setting.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/secure-json-parse.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/validator.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/validate-types.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/parse-json.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/parse-json-event-stream.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/post-to-api.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/types/tool.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/provider-defined-tool-factory.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/resolve.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/response-handler.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/add-additional-properties-to-json-schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/get-relative-path.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/options.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/any.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/array.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/bigint.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/boolean.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/branded.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/catch.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/date.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/default.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/effects.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/enum.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/intersection.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/literal.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/string.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/record.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/map.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/native-enum.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/never.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/null.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/union.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/nullable.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/number.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/object.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/optional.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/pipeline.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/promise.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/set.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/tuple.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/undefined.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/unknown.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/readonly.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/select-parser.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parse-def.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/refs.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/zod-to-json-schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/index.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/zod-schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@3.0.23_zod@4.3.6/node_modules/@ai-sdk/provider-utils/src/without-trailing-slash.ts","../../_vendored/oidc-stub.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/gateway-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/gateway-authentication-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/gateway-invalid-request-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/gateway-rate-limit-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/gateway-model-not-found-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/gateway-internal-server-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/gateway-response-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/create-gateway-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/gateway-timeout-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/as-gateway-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/extract-api-call-response.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/errors/parse-auth-method.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/gateway-model-entry.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/gateway-fetch-metadata.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/gateway-spend-report.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/gateway-generation-info.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/gateway-language-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/gateway-embedding-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/gateway-image-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/tool/parallel-search.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/tool/perplexity-search.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/gateway-tools.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/vercel-environment.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/version.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@2.0.82_zod@4.3.6/node_modules/@ai-sdk/gateway/src/gateway-provider.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/error/invalid-argument-error.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/error/no-object-generated-error.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/error/unsupported-model-version-error.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/util/retry-error.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/model/resolve-model.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/version.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/prompt/data-content.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/types/json-value.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/types/provider-metadata.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/prompt/content-part.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/prompt/message.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/telemetry/assemble-operation-name.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/telemetry/get-base-telemetry-attributes.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/telemetry/noop-tracer.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/telemetry/get-tracer.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/telemetry/record-span.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/telemetry/select-telemetry-attributes.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/util/retry-with-exponential-backoff.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/util/prepare-retries.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/generate-text/generate-text.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/util/fix-json.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/util/parse-partial-json.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/generate-text/stream-text.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/util/split-array.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/embed/embed-many.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/generate-object/generate-object.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/generate-object/stream-object.ts","../../../node_modules/.pnpm/ai@5.0.179_zod@4.3.6/node_modules/ai/src/generate-text/output.ts","../../../node_modules/.pnpm/@ai-sdk+provider@3.0.8/node_modules/@ai-sdk/provider/src/errors/ai-sdk-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@3.0.8/node_modules/@ai-sdk/provider/src/errors/api-call-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@3.0.8/node_modules/@ai-sdk/provider/src/errors/empty-response-body-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@3.0.8/node_modules/@ai-sdk/provider/src/errors/get-error-message.ts","../../../node_modules/.pnpm/@ai-sdk+provider@3.0.8/node_modules/@ai-sdk/provider/src/errors/invalid-argument-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@3.0.8/node_modules/@ai-sdk/provider/src/errors/json-parse-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@3.0.8/node_modules/@ai-sdk/provider/src/errors/type-validation-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/combine-headers.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/delay.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/extract-response-headers.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/uint8-utils.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/generate-id.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/get-error-message.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/is-abort-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/handle-fetch-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/get-runtime-environment-user-agent.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/normalize-headers.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/with-user-agent-suffix.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/version.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/get-from-api.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/load-optional-setting.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/secure-json-parse.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/add-additional-properties-to-json-schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/options.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/any.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/array.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/bigint.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/boolean.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/branded.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/catch.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/date.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/default.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/effects.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/enum.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/intersection.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/literal.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/string.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/record.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/map.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/native-enum.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/never.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/null.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/union.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/nullable.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/number.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/object.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/optional.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/pipeline.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/promise.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/set.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/tuple.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/undefined.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/unknown.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/readonly.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/select-parser.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/get-relative-path.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parse-def.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/refs.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/zod3-to-json-schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/schema.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/validate-types.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/parse-json.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/parse-json-event-stream.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/post-to-api.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/types/tool.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/provider-tool-factory.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/resolve.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/response-handler.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@4.0.23_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/without-trailing-slash.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-authentication-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-invalid-request-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-rate-limit-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-model-not-found-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-internal-server-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-response-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/create-gateway-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/gateway-timeout-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/as-gateway-error.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/extract-api-call-response.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/errors/parse-auth-method.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-model-entry.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-fetch-metadata.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-spend-report.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-generation-info.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-language-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-embedding-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-image-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-video-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-reranking-model.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/tool/parallel-search.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/tool/perplexity-search.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-tools.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/vercel-environment.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/version.ts","../../../node_modules/.pnpm/@ai-sdk+gateway@3.0.104_zod@3.25.76/node_modules/@ai-sdk/gateway/src/gateway-provider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context-api.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/error/invalid-argument-error.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/error/no-object-generated-error.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/error/unsupported-model-version-error.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/util/retry-error.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/logger/log-warnings.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/util/log-v2-compatibility-warning.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/model/as-embedding-model-v3.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/model/resolve-model.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/prompt/call-settings.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/version.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/prompt/data-content.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/types/json-value.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/types/provider-metadata.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/prompt/content-part.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/prompt/message.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/telemetry/assemble-operation-name.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/telemetry/get-base-telemetry-attributes.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/telemetry/noop-tracer.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/telemetry/get-tracer.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/telemetry/record-span.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/telemetry/select-telemetry-attributes.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/util/retry-with-exponential-backoff.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/util/prepare-retries.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/generate-text/output.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/util/fix-json.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/util/parse-partial-json.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/generate-text/generate-text.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/generate-text/stream-text.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/util/split-array.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/embed/embed-many.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/generate-object/generate-object.ts","../../../node_modules/.pnpm/ai@6.0.168_zod@3.25.76/node_modules/ai/src/generate-object/stream-object.ts","../src/tools/om-tools.ts","../src/tools/working-memory.ts","../src/index.ts"],"names":["exports","suspectProtoRx","suspectConstructorRx","_parse","text","filter","_AISDKError","name","marker","symbol","_a","_TypeValidationError","resolve","getErrorMessage","zodSchema","validator","SecureJSON","ZodFirstPartyTypeKind","object","types","x","base","jsonSchema","schema","textStreamPart","errorStreamPart","isCompatible","_b","DiagComponentLogger","DiagLogLevel","DiagAPI","__spreadArray","__read","BaseContext","context","NoopContextManager","API_NAME","ContextAPI","TraceFlags","NonRecordingSpan","NoopTracer","ProxyTracer","NoopTracerProvider","ProxyTracerProvider","SpanStatusCode","TraceAPI","InvalidArgumentError","AISDKError","attributes","array","embeddings","usage","z","createIdGenerator","asSchema","parsePartialJson","safeParseJSON","safeValidateTypes","result","formatDataStreamPart","mergeIntoDataStream","toDataStream","toDataStreamResponse","toDataStreamInternal","APICallError","JSONParseError","TypeValidationError","delay","isAbortError","VERSION","fetch","validatorSymbol","isValidator","asValidator","standardSchema","getOriginalFetch","tool","outputSchema","getRelativePath","ignoreOverride","defaultOptions","getDefaultOptions","parseAnyDef","parseArrayDef","parseDef","parseBigintDef","parseBooleanDef","parseBrandedDef","parseCatchDef","parseDateDef","integerDateParser","parseDefaultDef","parseEffectsDef","parseEnumDef","isJsonSchema7AllOfType","parseIntersectionDef","parseLiteralDef","emojiRegex","zodPatterns","parseStringDef","addFormat","addPattern","escapeLiteralCheckValue","escapeNonAlphaNumeric","ALPHA_NUMERIC","stringifyRegExpWithFlags","parseRecordDef","parseMapDef","parseNativeEnumDef","parseNeverDef","parseNullDef","primitiveMappings","parseUnionDef","asAnyOf","parseNullableDef","parseNumberDef","parseObjectDef","safeIsOptional","decideAdditionalProperties","parseOptionalDef","parsePipelineDef","parsePromiseDef","parseSetDef","parseTupleDef","parseUndefinedDef","parseUnknownDef","parseReadonlyDef","selectParser","get$ref","addMeta","getRefs","zodToJsonSchema","z4","schemaSymbol","isSchema","lazyValidator","getFromApi","createJsonResponseHandler","createJsonErrorResponseHandler","lazySchema","postJsonToApi","combineHeaders","createProviderDefinedToolFactoryWithOutputSchema","now","_globalThis","re","_makeCompatibilityCheck","major","GLOBAL_OPENTELEMETRY_API_KEY","_global","registerGlobal","getGlobal","unregisterGlobal","logProxy","createLogLevelDiagLogger","createContextKey","ROOT_CONTEXT","NOOP_CONTEXT_MANAGER","INVALID_SPANID","INVALID_TRACEID","INVALID_SPAN_CONTEXT","SPAN_KEY","getSpan","getActiveSpan","setSpan","deleteSpan","setSpanContext","getSpanContext","VALID_TRACEID_REGEX","VALID_SPANID_REGEX","isValidTraceId","isValidSpanId","isSpanContextValid","wrapSpanContext","contextApi","isSpanContext","NOOP_TRACER","NOOP_TRACER_PROVIDER","trace","NoObjectGeneratedError","UnsupportedModelVersionError","RetryError","dataContentSchema","jsonValueSchema","providerMetadataSchema","textPartSchema","imagePartSchema","filePartSchema","reasoningPartSchema","toolCallPartSchema","toolResultPartSchema","assembleOperationName","getBaseTelemetryAttributes","noopTracer","noopSpan","noopSpanContext","getTracer","recordSpan","recordErrorOnSpan","selectTelemetryAttributes","_retryWithExponentialBackoff","prepareRetries","fixJson","splitArray","embedMany","withUserAgentSuffix","providerMetadata","DefaultEmbedManyResult","output_exports","__export","EmptyResponseBodyError","ParseError","noop","createParser","splitLines","EventSourceParserStream","createAbortError","extractResponseHeaders","btoa","convertUint8ArrayToBase64","FETCH_FAILED_ERROR_MESSAGES","handleFetchError","getRuntimeEnvironmentUserAgent","normalizeHeaders","loadOptionalSetting","secureJsonParse","addAdditionalPropertiesToJsonSchema","zod3Schema","zod4Schema","z42","isZod4Schema","validateTypes","parseJSON","parseJsonEventStream","postToApi","createEventSourceResponseHandler","withoutTrailingSlash","getContext","getVercelOidcToken","GatewayError","_GatewayError","GatewayAuthenticationError","_GatewayAuthenticationError","GatewayInvalidRequestError","GatewayRateLimitError","modelNotFoundParamSchema","GatewayModelNotFoundError","GatewayInternalServerError","GatewayResponseError","createGatewayErrorFromResponse","gatewayErrorResponseSchema","GatewayTimeoutError","_GatewayTimeoutError","isTimeoutError","asGatewayError","extractApiCallResponse","GATEWAY_AUTH_METHOD_HEADER","parseAuthMethod","gatewayAuthMethodSchema","KNOWN_MODEL_TYPES","GatewayFetchMetadata","gatewayAvailableModelsResponseSchema","gatewayCreditsResponseSchema","GatewaySpendReport","gatewaySpendReportResponseSchema","GatewayGenerationInfoFetcher","gatewayGenerationInfoResponseSchema","GatewayLanguageModel","GatewayEmbeddingModel","gatewayEmbeddingResponseSchema","GatewayImageModel","gatewayImageResponseSchema","providerMetadataEntrySchema","gatewayImageUsageSchema","parallelSearchInputSchema","parallelSearchOutputSchema","parallelSearchToolFactory","parallelSearch","perplexitySearchInputSchema","perplexitySearchOutputSchema","perplexitySearchToolFactory","createProviderToolFactoryWithOutputSchema","perplexitySearch","gatewayTools","getVercelRequestId","AI_GATEWAY_PROTOCOL_VERSION","createGatewayProvider","getGatewayAuthToken","gateway","resolveEmbeddingModel","getGlobalProvider","systemModelMessageSchema","userModelMessageSchema","assistantModelMessageSchema","toolModelMessageSchema","getRetryDelayInMs","retryWithExponentialBackoffRespectingRetryHeaders","warnings","message","estimateTokenCount","truncateStringByTokens","resolveToolResultValue","formatToolResultForObserver","expanded","truncatedText","wasTruncated","rendered","createTool","isStandardSchemaWithJSON","toStandardSchema","standardSchemaToJSONSchema","MastraMemory","SpanType","EntityType","MessageList","Mutex","xxhash","coreFeatures","generateEmptyFromSchema","results"],"mappings":"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","file":"index.cjs","sourcesContent":["'use strict'\n\nconst hasBuffer = typeof Buffer !== 'undefined'\nconst suspectProtoRx = /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/\nconst suspectConstructorRx = /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/\n\nfunction _parse (text, reviver, options) {\n  // Normalize arguments\n  if (options == null) {\n    if (reviver !== null && typeof reviver === 'object') {\n      options = reviver\n      reviver = undefined\n    }\n  }\n\n  if (hasBuffer && Buffer.isBuffer(text)) {\n    text = text.toString()\n  }\n\n  // BOM checker\n  if (text && text.charCodeAt(0) === 0xFEFF) {\n    text = text.slice(1)\n  }\n\n  // Parse normally, allowing exceptions\n  const obj = JSON.parse(text, reviver)\n\n  // Ignore null and non-objects\n  if (obj === null || typeof obj !== 'object') {\n    return obj\n  }\n\n  const protoAction = (options && options.protoAction) || 'error'\n  const constructorAction = (options && options.constructorAction) || 'error'\n\n  // options: 'error' (default) / 'remove' / 'ignore'\n  if (protoAction === 'ignore' && constructorAction === 'ignore') {\n    return obj\n  }\n\n  if (protoAction !== 'ignore' && constructorAction !== 'ignore') {\n    if (suspectProtoRx.test(text) === false && suspectConstructorRx.test(text) === false) {\n      return obj\n    }\n  } else if (protoAction !== 'ignore' && constructorAction === 'ignore') {\n    if (suspectProtoRx.test(text) === false) {\n      return obj\n    }\n  } else {\n    if (suspectConstructorRx.test(text) === false) {\n      return obj\n    }\n  }\n\n  // Scan result for proto keys\n  return filter(obj, { protoAction, constructorAction, safe: options && options.safe })\n}\n\nfunction filter (obj, { protoAction = 'error', constructorAction = 'error', safe } = {}) {\n  let next = [obj]\n\n  while (next.length) {\n    const nodes = next\n    next = []\n\n    for (const node of nodes) {\n      if (protoAction !== 'ignore' && Object.prototype.hasOwnProperty.call(node, '__proto__')) { // Avoid calling node.hasOwnProperty directly\n        if (safe === true) {\n          return null\n        } else if (protoAction === 'error') {\n          throw new SyntaxError('Object contains forbidden prototype property')\n        }\n\n        delete node.__proto__ // eslint-disable-line no-proto\n      }\n\n      if (constructorAction !== 'ignore' &&\n          Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n          Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')) { // Avoid calling node.hasOwnProperty directly\n        if (safe === true) {\n          return null\n        } else if (constructorAction === 'error') {\n          throw new SyntaxError('Object contains forbidden prototype property')\n        }\n\n        delete node.constructor\n      }\n\n      for (const key in node) {\n        const value = node[key]\n        if (value && typeof value === 'object') {\n          next.push(value)\n        }\n      }\n    }\n  }\n  return obj\n}\n\nfunction parse (text, reviver, options) {\n  const stackTraceLimit = Error.stackTraceLimit\n  Error.stackTraceLimit = 0\n  try {\n    return _parse(text, reviver, options)\n  } finally {\n    Error.stackTraceLimit = stackTraceLimit\n  }\n}\n\nfunction safeParse (text, reviver) {\n  const stackTraceLimit = Error.stackTraceLimit\n  Error.stackTraceLimit = 0\n  try {\n    return _parse(text, reviver, { safe: true })\n  } catch (_e) {\n    return null\n  } finally {\n    Error.stackTraceLimit = stackTraceLimit\n  }\n}\n\nmodule.exports = parse\nmodule.exports.default = parse\nmodule.exports.parse = parse\nmodule.exports.safeParse = safeParse\nmodule.exports.scan = filter\n","/**\n * Symbol used for identifying AI SDK Error instances.\n * Enables checking if an error is an instance of AISDKError across package versions.\n */\nconst marker = 'vercel.ai.error';\nconst symbol = Symbol.for(marker);\n\n/**\n * Custom error class for AI SDK related errors.\n * @extends Error\n */\nexport class AISDKError extends Error {\n  private readonly [symbol] = true; // used in isInstance\n\n  /**\n   * The underlying cause of the error, if any.\n   */\n  readonly cause?: unknown;\n\n  /**\n   * Creates an AI SDK Error.\n   *\n   * @param {Object} params - The parameters for creating the error.\n   * @param {string} params.name - The name of the error.\n   * @param {string} params.message - The error message.\n   * @param {unknown} [params.cause] - The underlying cause of the error.\n   */\n  constructor({\n    name,\n    message,\n    cause,\n  }: {\n    name: string;\n    message: string;\n    cause?: unknown;\n  }) {\n    super(message);\n\n    this.name = name;\n    this.cause = cause;\n  }\n\n  /**\n   * Checks if the given error is an AI SDK Error.\n   * @param {unknown} error - The error to check.\n   * @returns {boolean} True if the error is an AI SDK Error, false otherwise.\n   */\n  static isInstance(error: unknown): error is AISDKError {\n    return AISDKError.hasMarker(error, marker);\n  }\n\n  protected static hasMarker(error: unknown, marker: string): boolean {\n    const markerSymbol = Symbol.for(marker);\n    return (\n      error != null &&\n      typeof error === 'object' &&\n      markerSymbol in error &&\n      typeof error[markerSymbol] === 'boolean' &&\n      error[markerSymbol] === true\n    );\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_APICallError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class APICallError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly url: string;\n  readonly requestBodyValues: unknown;\n  readonly statusCode?: number;\n\n  readonly responseHeaders?: Record<string, string>;\n  readonly responseBody?: string;\n\n  readonly isRetryable: boolean;\n  readonly data?: unknown;\n\n  constructor({\n    message,\n    url,\n    requestBodyValues,\n    statusCode,\n    responseHeaders,\n    responseBody,\n    cause,\n    isRetryable = statusCode != null &&\n      (statusCode === 408 || // request timeout\n        statusCode === 409 || // conflict\n        statusCode === 429 || // too many requests\n        statusCode >= 500), // server error\n    data,\n  }: {\n    message: string;\n    url: string;\n    requestBodyValues: unknown;\n    statusCode?: number;\n    responseHeaders?: Record<string, string>;\n    responseBody?: string;\n    cause?: unknown;\n    isRetryable?: boolean;\n    data?: unknown;\n  }) {\n    super({ name, message, cause });\n\n    this.url = url;\n    this.requestBodyValues = requestBodyValues;\n    this.statusCode = statusCode;\n    this.responseHeaders = responseHeaders;\n    this.responseBody = responseBody;\n    this.isRetryable = isRetryable;\n    this.data = data;\n  }\n\n  static isInstance(error: unknown): error is APICallError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","export function getErrorMessage(error: unknown | undefined) {\n  if (error == null) {\n    return 'unknown error';\n  }\n\n  if (typeof error === 'string') {\n    return error;\n  }\n\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  return JSON.stringify(error);\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_InvalidArgumentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * A function argument is invalid.\n */\nexport class InvalidArgumentError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly argument: string;\n\n  constructor({\n    message,\n    cause,\n    argument,\n  }: {\n    argument: string;\n    message: string;\n    cause?: unknown;\n  }) {\n    super({ name, message, cause });\n\n    this.argument = argument;\n  }\n\n  static isInstance(error: unknown): error is InvalidArgumentError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\nimport { getErrorMessage } from './get-error-message';\n\nconst name = 'AI_JSONParseError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n// TODO v5: rename to ParseError\nexport class JSONParseError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly text: string;\n\n  constructor({ text, cause }: { text: string; cause: unknown }) {\n    super({\n      name,\n      message:\n        `JSON parsing failed: ` +\n        `Text: ${text}.\\n` +\n        `Error message: ${getErrorMessage(cause)}`,\n      cause,\n    });\n\n    this.text = text;\n  }\n\n  static isInstance(error: unknown): error is JSONParseError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\nimport { getErrorMessage } from './get-error-message';\n\nconst name = 'AI_TypeValidationError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class TypeValidationError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly value: unknown;\n\n  constructor({ value, cause }: { value: unknown; cause: unknown }) {\n    super({\n      name,\n      message:\n        `Type validation failed: ` +\n        `Value: ${JSON.stringify(value)}.\\n` +\n        `Error message: ${getErrorMessage(cause)}`,\n      cause,\n    });\n\n    this.value = value;\n  }\n\n  static isInstance(error: unknown): error is TypeValidationError {\n    return AISDKError.hasMarker(error, marker);\n  }\n\n  /**\n   * Wraps an error into a TypeValidationError.\n   * If the cause is already a TypeValidationError with the same value, it returns the cause.\n   * Otherwise, it creates a new TypeValidationError.\n   *\n   * @param {Object} params - The parameters for wrapping the error.\n   * @param {unknown} params.value - The value that failed validation.\n   * @param {unknown} params.cause - The original error or cause of the validation failure.\n   * @returns {TypeValidationError} A TypeValidationError instance.\n   */\n  static wrap({\n    value,\n    cause,\n  }: {\n    value: unknown;\n    cause: unknown;\n  }): TypeValidationError {\n    return TypeValidationError.isInstance(cause) && cause.value === value\n      ? cause\n      : new TypeValidationError({ value, cause });\n  }\n}\n","let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nlet customAlphabet = (alphabet, defaultSize = 21) => {\n  return (size = defaultSize) => {\n    let id = ''\n    let i = size | 0\n    while (i--) {\n      id += alphabet[(Math.random() * alphabet.length) | 0]\n    }\n    return id\n  }\n}\nlet nanoid = (size = 21) => {\n  let id = ''\n  let i = size | 0\n  while (i--) {\n    id += urlAlphabet[(Math.random() * 64) | 0]\n  }\n  return id\n}\nexport { nanoid, customAlphabet }\n","import {\n  JSONParseError,\n  JSONValue,\n  TypeValidationError,\n} from '@ai-sdk/provider';\nimport SecureJSON from 'secure-json-parse';\nimport { ZodSchema } from 'zod';\nimport { safeValidateTypes, validateTypes } from './validate-types';\nimport { Validator } from './validator';\n\n/**\n * Parses a JSON string into an unknown object.\n *\n * @param text - The JSON string to parse.\n * @returns {JSONValue} - The parsed JSON object.\n */\nexport function parseJSON(options: {\n  text: string;\n  schema?: undefined;\n}): JSONValue;\n/**\n * Parses a JSON string into a strongly-typed object using the provided schema.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns {T} - The parsed object.\n */\nexport function parseJSON<T>(options: {\n  text: string;\n  schema: ZodSchema<T> | Validator<T>;\n}): T;\nexport function parseJSON<T>({\n  text,\n  schema,\n}: {\n  text: string;\n  schema?: ZodSchema<T> | Validator<T>;\n}): T {\n  try {\n    const value = SecureJSON.parse(text);\n\n    if (schema == null) {\n      return value;\n    }\n\n    return validateTypes({ value, schema });\n  } catch (error) {\n    if (\n      JSONParseError.isInstance(error) ||\n      TypeValidationError.isInstance(error)\n    ) {\n      throw error;\n    }\n\n    throw new JSONParseError({ text, cause: error });\n  }\n}\n\nexport type ParseResult<T> =\n  | { success: true; value: T; rawValue: unknown }\n  | { success: false; error: JSONParseError | TypeValidationError };\n\n/**\n * Safely parses a JSON string and returns the result as an object of type `unknown`.\n *\n * @param text - The JSON string to parse.\n * @returns {object} Either an object with `success: true` and the parsed data, or an object with `success: false` and the error that occurred.\n */\nexport function safeParseJSON(options: {\n  text: string;\n  schema?: undefined;\n}): ParseResult<JSONValue>;\n/**\n * Safely parses a JSON string into a strongly-typed object, using a provided schema to validate the object.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport function safeParseJSON<T>(options: {\n  text: string;\n  schema: ZodSchema<T> | Validator<T>;\n}): ParseResult<T>;\nexport function safeParseJSON<T>({\n  text,\n  schema,\n}: {\n  text: string;\n  schema?: ZodSchema<T> | Validator<T>;\n}): ParseResult<T> {\n  try {\n    const value = SecureJSON.parse(text);\n\n    if (schema == null) {\n      return { success: true, value: value as T, rawValue: value };\n    }\n\n    const validationResult = safeValidateTypes({ value, schema });\n\n    return validationResult.success\n      ? { ...validationResult, rawValue: value }\n      : validationResult;\n  } catch (error) {\n    return {\n      success: false,\n      error: JSONParseError.isInstance(error)\n        ? error\n        : new JSONParseError({ text, cause: error }),\n    };\n  }\n}\n\nexport function isParsableJson(input: string): boolean {\n  try {\n    SecureJSON.parse(input);\n    return true;\n  } catch {\n    return false;\n  }\n}\n","/**\n * Converts an AsyncIterator to a ReadableStream.\n *\n * @template T - The type of elements produced by the AsyncIterator.\n * @param { <T>} iterator - The AsyncIterator to convert.\n * @returns {ReadableStream<T>} - A ReadableStream that provides the same data as the AsyncIterator.\n */\nexport function convertAsyncIteratorToReadableStream<T>(\n  iterator: AsyncIterator<T>,\n): ReadableStream<T> {\n  return new ReadableStream<T>({\n    /**\n     * Called when the consumer wants to pull more data from the stream.\n     *\n     * @param {ReadableStreamDefaultController<T>} controller - The controller to enqueue data into the stream.\n     * @returns {Promise<void>}\n     */\n    async pull(controller) {\n      try {\n        const { value, done } = await iterator.next();\n        if (done) {\n          controller.close();\n        } else {\n          controller.enqueue(value);\n        }\n      } catch (error) {\n        controller.error(error);\n      }\n    },\n    /**\n     * Called when the consumer cancels the stream.\n     */\n    cancel() {},\n  });\n}\n","/**\n * Creates a Promise that resolves after a specified delay\n * @param delayInMs - The delay duration in milliseconds. If null or undefined, resolves immediately.\n * @returns A Promise that resolves after the specified delay\n */\nexport async function delay(delayInMs?: number | null): Promise<void> {\n  return delayInMs == null\n    ? Promise.resolve()\n    : new Promise(resolve => setTimeout(resolve, delayInMs));\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\nimport { customAlphabet } from 'nanoid/non-secure';\n\n/**\nCreates an ID generator.\nThe total length of the ID is the sum of the prefix, separator, and random part length.\nNon-secure.\n\n@param alphabet - The alphabet to use for the ID. Default: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.\n@param prefix - The prefix of the ID to generate. Default: ''.\n@param separator - The separator between the prefix and the random part of the ID. Default: '-'.\n@param size - The size of the random part of the ID to generate. Default: 16.\n */\n// TODO 5.0 breaking change: change the return type to IDGenerator\nexport const createIdGenerator = ({\n  prefix,\n  size: defaultSize = 16,\n  alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n  separator = '-',\n}: {\n  prefix?: string;\n  separator?: string;\n  size?: number;\n  alphabet?: string;\n} = {}): ((size?: number) => string) => {\n  const generator = customAlphabet(alphabet, defaultSize);\n\n  if (prefix == null) {\n    return generator;\n  }\n\n  // check that the prefix is not part of the alphabet (otherwise prefix checking can fail randomly)\n  if (alphabet.includes(separator)) {\n    throw new InvalidArgumentError({\n      argument: 'separator',\n      message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`,\n    });\n  }\n\n  return size => `${prefix}${separator}${generator(size)}`;\n};\n\n/**\nA function that generates an ID.\n */\nexport type IDGenerator = () => string;\n\n/**\nGenerates a 16-character random string to use for IDs. Not secure.\n\n@param size - The size of the ID to generate. Default: 16.\n */\nexport const generateId = createIdGenerator();\n","export function getErrorMessage(error: unknown | undefined) {\n  if (error == null) {\n    return 'unknown error';\n  }\n\n  if (typeof error === 'string') {\n    return error;\n  }\n\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  return JSON.stringify(error);\n}\n","export function isAbortError(error: unknown): error is Error {\n  return (\n    error instanceof Error &&\n    (error.name === 'AbortError' || error.name === 'TimeoutError')\n  );\n}\n","import { z } from 'zod';\n\n/**\n * Used to mark validator functions so we can support both Zod and custom schemas.\n */\nexport const validatorSymbol = Symbol.for('vercel.ai.validator');\n\nexport type ValidationResult<OBJECT> =\n  | { success: true; value: OBJECT }\n  | { success: false; error: Error };\n\nexport type Validator<OBJECT = unknown> = {\n  /**\n   * Used to mark validator functions so we can support both Zod and custom schemas.\n   */\n  [validatorSymbol]: true;\n\n  /**\n   * Optional. Validates that the structure of a value matches this schema,\n   * and returns a typed version of the value if it does.\n   */\n  readonly validate?: (value: unknown) => ValidationResult<OBJECT>;\n};\n\n/**\n * Create a validator.\n *\n * @param validate A validation function for the schema.\n */\nexport function validator<OBJECT>(\n  validate?: undefined | ((value: unknown) => ValidationResult<OBJECT>),\n): Validator<OBJECT> {\n  return { [validatorSymbol]: true, validate };\n}\n\nexport function isValidator(value: unknown): value is Validator {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    validatorSymbol in value &&\n    value[validatorSymbol] === true &&\n    'validate' in value\n  );\n}\n\nexport function asValidator<OBJECT>(\n  value: Validator<OBJECT> | z.Schema<OBJECT, z.ZodTypeDef, any>,\n): Validator<OBJECT> {\n  return isValidator(value) ? value : zodValidator(value);\n}\n\nexport function zodValidator<OBJECT>(\n  zodSchema: z.Schema<OBJECT, z.ZodTypeDef, any>,\n): Validator<OBJECT> {\n  return validator(value => {\n    const result = zodSchema.safeParse(value);\n    return result.success\n      ? { success: true, value: result.data }\n      : { success: false, error: result.error };\n  });\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { z } from 'zod';\nimport { Validator, asValidator } from './validator';\n\n/**\n * Validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @returns {T} - The typed object.\n */\nexport function validateTypes<T>({\n  value,\n  schema: inputSchema,\n}: {\n  value: unknown;\n  schema: z.Schema<T, z.ZodTypeDef, any> | Validator<T>;\n}): T {\n  const result = safeValidateTypes({ value, schema: inputSchema });\n\n  if (!result.success) {\n    throw TypeValidationError.wrap({ value, cause: result.error });\n  }\n\n  return result.value;\n}\n\n/**\n * Safely validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The JSON object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport function safeValidateTypes<T>({\n  value,\n  schema,\n}: {\n  value: unknown;\n  schema: z.Schema<T, z.ZodTypeDef, any> | Validator<T>;\n}):\n  | { success: true; value: T }\n  | { success: false; error: TypeValidationError } {\n  const validator = asValidator(schema);\n\n  try {\n    if (validator.validate == null) {\n      return { success: true, value: value as T };\n    }\n\n    const result = validator.validate(value);\n\n    if (result.success) {\n      return result;\n    }\n\n    return {\n      success: false,\n      error: TypeValidationError.wrap({ value, cause: result.error }),\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: TypeValidationError.wrap({ value, cause: error }),\n    };\n  }\n}\n","export const ignoreOverride = Symbol(\"Let zodToJsonSchema decide on which parser to use\");\nexport const jsonDescription = (jsonSchema, def) => {\n    if (def.description) {\n        try {\n            return {\n                ...jsonSchema,\n                ...JSON.parse(def.description),\n            };\n        }\n        catch { }\n    }\n    return jsonSchema;\n};\nexport const defaultOptions = {\n    name: undefined,\n    $refStrategy: \"root\",\n    basePath: [\"#\"],\n    effectStrategy: \"input\",\n    pipeStrategy: \"all\",\n    dateStrategy: \"format:date-time\",\n    mapStrategy: \"entries\",\n    removeAdditionalStrategy: \"passthrough\",\n    allowedAdditionalProperties: true,\n    rejectedAdditionalProperties: false,\n    definitionPath: \"definitions\",\n    target: \"jsonSchema7\",\n    strictUnions: false,\n    definitions: {},\n    errorMessages: false,\n    markdownDescription: false,\n    patternStrategy: \"escape\",\n    applyRegexFlags: false,\n    emailStrategy: \"format:email\",\n    base64Strategy: \"contentEncoding:base64\",\n    nameStrategy: \"ref\",\n    openAiAnyTypeName: \"OpenAiAnyType\"\n};\nexport const getDefaultOptions = (options) => (typeof options === \"string\"\n    ? {\n        ...defaultOptions,\n        name: options,\n    }\n    : {\n        ...defaultOptions,\n        ...options,\n    });\n","import { getDefaultOptions } from \"./Options.js\";\nexport const getRefs = (options) => {\n    const _options = getDefaultOptions(options);\n    const currentPath = _options.name !== undefined\n        ? [..._options.basePath, _options.definitionPath, _options.name]\n        : _options.basePath;\n    return {\n        ..._options,\n        flags: { hasReferencedOpenAiAnyType: false },\n        currentPath: currentPath,\n        propertyPath: undefined,\n        seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [\n            def._def,\n            {\n                def: def._def,\n                path: [..._options.basePath, _options.definitionPath, name],\n                // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n                jsonSchema: undefined,\n            },\n        ])),\n    };\n};\n","export function addErrorMessage(res, key, errorMessage, refs) {\n    if (!refs?.errorMessages)\n        return;\n    if (errorMessage) {\n        res.errorMessage = {\n            ...res.errorMessage,\n            [key]: errorMessage,\n        };\n    }\n}\nexport function setResponseValueAndErrors(res, key, value, errorMessage, refs) {\n    res[key] = value;\n    addErrorMessage(res, key, errorMessage, refs);\n}\n","export const getRelativePath = (pathA, pathB) => {\n    let i = 0;\n    for (; i < pathA.length && i < pathB.length; i++) {\n        if (pathA[i] !== pathB[i])\n            break;\n    }\n    return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n","import { getRelativePath } from \"../getRelativePath.js\";\nexport function parseAnyDef(refs) {\n    if (refs.target !== \"openAi\") {\n        return {};\n    }\n    const anyDefinitionPath = [\n        ...refs.basePath,\n        refs.definitionPath,\n        refs.openAiAnyTypeName,\n    ];\n    refs.flags.hasReferencedOpenAiAnyType = true;\n    return {\n        $ref: refs.$refStrategy === \"relative\"\n            ? getRelativePath(anyDefinitionPath, refs.currentPath)\n            : anyDefinitionPath.join(\"/\"),\n    };\n}\n","import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseArrayDef(def, refs) {\n    const res = {\n        type: \"array\",\n    };\n    if (def.type?._def &&\n        def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny) {\n        res.items = parseDef(def.type._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"items\"],\n        });\n    }\n    if (def.minLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.minLength.value, def.minLength.message, refs);\n    }\n    if (def.maxLength) {\n        setResponseValueAndErrors(res, \"maxItems\", def.maxLength.value, def.maxLength.message, refs);\n    }\n    if (def.exactLength) {\n        setResponseValueAndErrors(res, \"minItems\", def.exactLength.value, def.exactLength.message, refs);\n        setResponseValueAndErrors(res, \"maxItems\", def.exactLength.value, def.exactLength.message, refs);\n    }\n    return res;\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseBigintDef(def, refs) {\n    const res = {\n        type: \"integer\",\n        format: \"int64\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n","export function parseBooleanDef() {\n    return {\n        type: \"boolean\",\n    };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseBrandedDef(_def, refs) {\n    return parseDef(_def.type._def, refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseCatchDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nexport function parseDateDef(def, refs, overrideDateStrategy) {\n    const strategy = overrideDateStrategy ?? refs.dateStrategy;\n    if (Array.isArray(strategy)) {\n        return {\n            anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n        };\n    }\n    switch (strategy) {\n        case \"string\":\n        case \"format:date-time\":\n            return {\n                type: \"string\",\n                format: \"date-time\",\n            };\n        case \"format:date\":\n            return {\n                type: \"string\",\n                format: \"date\",\n            };\n        case \"integer\":\n            return integerDateParser(def, refs);\n    }\n}\nconst integerDateParser = (def, refs) => {\n    const res = {\n        type: \"integer\",\n        format: \"unix-time\",\n    };\n    if (refs.target === \"openApi3\") {\n        return res;\n    }\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"min\":\n                setResponseValueAndErrors(res, \"minimum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n            case \"max\":\n                setResponseValueAndErrors(res, \"maximum\", check.value, // This is in milliseconds\n                check.message, refs);\n                break;\n        }\n    }\n    return res;\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parseDefaultDef(_def, refs) {\n    return {\n        ...parseDef(_def.innerType._def, refs),\n        default: _def.defaultValue(),\n    };\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseEffectsDef(_def, refs) {\n    return refs.effectStrategy === \"input\"\n        ? parseDef(_def.schema._def, refs)\n        : parseAnyDef(refs);\n}\n","export function parseEnumDef(def) {\n    return {\n        type: \"string\",\n        enum: Array.from(def.values),\n    };\n}\n","import { parseDef } from \"../parseDef.js\";\nconst isJsonSchema7AllOfType = (type) => {\n    if (\"type\" in type && type.type === \"string\")\n        return false;\n    return \"allOf\" in type;\n};\nexport function parseIntersectionDef(def, refs) {\n    const allOf = [\n        parseDef(def.left._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n        }),\n        parseDef(def.right._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"allOf\", \"1\"],\n        }),\n    ].filter((x) => !!x);\n    let unevaluatedProperties = refs.target === \"jsonSchema2019-09\"\n        ? { unevaluatedProperties: false }\n        : undefined;\n    const mergedAllOf = [];\n    // If either of the schemas is an allOf, merge them into a single allOf\n    allOf.forEach((schema) => {\n        if (isJsonSchema7AllOfType(schema)) {\n            mergedAllOf.push(...schema.allOf);\n            if (schema.unevaluatedProperties === undefined) {\n                // If one of the schemas has no unevaluatedProperties set,\n                // the merged schema should also have no unevaluatedProperties set\n                unevaluatedProperties = undefined;\n            }\n        }\n        else {\n            let nestedSchema = schema;\n            if (\"additionalProperties\" in schema &&\n                schema.additionalProperties === false) {\n                const { additionalProperties, ...rest } = schema;\n                nestedSchema = rest;\n            }\n            else {\n                // As soon as one of the schemas has additionalProperties set not to false, we allow unevaluatedProperties\n                unevaluatedProperties = undefined;\n            }\n            mergedAllOf.push(nestedSchema);\n        }\n    });\n    return mergedAllOf.length\n        ? {\n            allOf: mergedAllOf,\n            ...unevaluatedProperties,\n        }\n        : undefined;\n}\n","export function parseLiteralDef(def, refs) {\n    const parsedType = typeof def.value;\n    if (parsedType !== \"bigint\" &&\n        parsedType !== \"number\" &&\n        parsedType !== \"boolean\" &&\n        parsedType !== \"string\") {\n        return {\n            type: Array.isArray(def.value) ? \"array\" : \"object\",\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        return {\n            type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n            enum: [def.value],\n        };\n    }\n    return {\n        type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n        const: def.value,\n    };\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nlet emojiRegex = undefined;\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n    /**\n     * `c` was changed to `[cC]` to replicate /i flag\n     */\n    cuid: /^[cC][^\\s-]{8,}$/,\n    cuid2: /^[0-9a-z]+$/,\n    ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n    /**\n     * `a-z` was added to replicate /i flag\n     */\n    email: /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n    /**\n     * Constructed a valid Unicode RegExp\n     *\n     * Lazily instantiate since this type of regex isn't supported\n     * in all envs (e.g. React Native).\n     *\n     * See:\n     * https://github.com/colinhacks/zod/issues/2433\n     * Fix in Zod:\n     * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n     */\n    emoji: () => {\n        if (emojiRegex === undefined) {\n            emojiRegex = RegExp(\"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\", \"u\");\n        }\n        return emojiRegex;\n    },\n    /**\n     * Unused\n     */\n    uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n    /**\n     * Unused\n     */\n    ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n    ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n    /**\n     * Unused\n     */\n    ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n    ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n    base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n    base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n    nanoid: /^[a-zA-Z0-9_-]{21}$/,\n    jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n};\nexport function parseStringDef(def, refs) {\n    const res = {\n        type: \"string\",\n    };\n    if (def.checks) {\n        for (const check of def.checks) {\n            switch (check.kind) {\n                case \"min\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"max\":\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"email\":\n                    switch (refs.emailStrategy) {\n                        case \"format:email\":\n                            addFormat(res, \"email\", check.message, refs);\n                            break;\n                        case \"format:idn-email\":\n                            addFormat(res, \"idn-email\", check.message, refs);\n                            break;\n                        case \"pattern:zod\":\n                            addPattern(res, zodPatterns.email, check.message, refs);\n                            break;\n                    }\n                    break;\n                case \"url\":\n                    addFormat(res, \"uri\", check.message, refs);\n                    break;\n                case \"uuid\":\n                    addFormat(res, \"uuid\", check.message, refs);\n                    break;\n                case \"regex\":\n                    addPattern(res, check.regex, check.message, refs);\n                    break;\n                case \"cuid\":\n                    addPattern(res, zodPatterns.cuid, check.message, refs);\n                    break;\n                case \"cuid2\":\n                    addPattern(res, zodPatterns.cuid2, check.message, refs);\n                    break;\n                case \"startsWith\":\n                    addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);\n                    break;\n                case \"endsWith\":\n                    addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);\n                    break;\n                case \"datetime\":\n                    addFormat(res, \"date-time\", check.message, refs);\n                    break;\n                case \"date\":\n                    addFormat(res, \"date\", check.message, refs);\n                    break;\n                case \"time\":\n                    addFormat(res, \"time\", check.message, refs);\n                    break;\n                case \"duration\":\n                    addFormat(res, \"duration\", check.message, refs);\n                    break;\n                case \"length\":\n                    setResponseValueAndErrors(res, \"minLength\", typeof res.minLength === \"number\"\n                        ? Math.max(res.minLength, check.value)\n                        : check.value, check.message, refs);\n                    setResponseValueAndErrors(res, \"maxLength\", typeof res.maxLength === \"number\"\n                        ? Math.min(res.maxLength, check.value)\n                        : check.value, check.message, refs);\n                    break;\n                case \"includes\": {\n                    addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);\n                    break;\n                }\n                case \"ip\": {\n                    if (check.version !== \"v6\") {\n                        addFormat(res, \"ipv4\", check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addFormat(res, \"ipv6\", check.message, refs);\n                    }\n                    break;\n                }\n                case \"base64url\":\n                    addPattern(res, zodPatterns.base64url, check.message, refs);\n                    break;\n                case \"jwt\":\n                    addPattern(res, zodPatterns.jwt, check.message, refs);\n                    break;\n                case \"cidr\": {\n                    if (check.version !== \"v6\") {\n                        addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n                    }\n                    if (check.version !== \"v4\") {\n                        addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n                    }\n                    break;\n                }\n                case \"emoji\":\n                    addPattern(res, zodPatterns.emoji(), check.message, refs);\n                    break;\n                case \"ulid\": {\n                    addPattern(res, zodPatterns.ulid, check.message, refs);\n                    break;\n                }\n                case \"base64\": {\n                    switch (refs.base64Strategy) {\n                        case \"format:binary\": {\n                            addFormat(res, \"binary\", check.message, refs);\n                            break;\n                        }\n                        case \"contentEncoding:base64\": {\n                            setResponseValueAndErrors(res, \"contentEncoding\", \"base64\", check.message, refs);\n                            break;\n                        }\n                        case \"pattern:zod\": {\n                            addPattern(res, zodPatterns.base64, check.message, refs);\n                            break;\n                        }\n                    }\n                    break;\n                }\n                case \"nanoid\": {\n                    addPattern(res, zodPatterns.nanoid, check.message, refs);\n                }\n                case \"toLowerCase\":\n                case \"toUpperCase\":\n                case \"trim\":\n                    break;\n                default:\n                    ((_) => { })(check);\n            }\n        }\n    }\n    return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n    return refs.patternStrategy === \"escape\"\n        ? escapeNonAlphaNumeric(literal)\n        : literal;\n}\nconst ALPHA_NUMERIC = new Set(\"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\");\nfunction escapeNonAlphaNumeric(source) {\n    let result = \"\";\n    for (let i = 0; i < source.length; i++) {\n        if (!ALPHA_NUMERIC.has(source[i])) {\n            result += \"\\\\\";\n        }\n        result += source[i];\n    }\n    return result;\n}\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(schema, value, message, refs) {\n    if (schema.format || schema.anyOf?.some((x) => x.format)) {\n        if (!schema.anyOf) {\n            schema.anyOf = [];\n        }\n        if (schema.format) {\n            schema.anyOf.push({\n                format: schema.format,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { format: schema.errorMessage.format },\n                }),\n            });\n            delete schema.format;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.format;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.anyOf.push({\n            format: value,\n            ...(message &&\n                refs.errorMessages && { errorMessage: { format: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"format\", value, message, refs);\n    }\n}\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(schema, regex, message, refs) {\n    if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {\n        if (!schema.allOf) {\n            schema.allOf = [];\n        }\n        if (schema.pattern) {\n            schema.allOf.push({\n                pattern: schema.pattern,\n                ...(schema.errorMessage &&\n                    refs.errorMessages && {\n                    errorMessage: { pattern: schema.errorMessage.pattern },\n                }),\n            });\n            delete schema.pattern;\n            if (schema.errorMessage) {\n                delete schema.errorMessage.pattern;\n                if (Object.keys(schema.errorMessage).length === 0) {\n                    delete schema.errorMessage;\n                }\n            }\n        }\n        schema.allOf.push({\n            pattern: stringifyRegExpWithFlags(regex, refs),\n            ...(message &&\n                refs.errorMessages && { errorMessage: { pattern: message } }),\n        });\n    }\n    else {\n        setResponseValueAndErrors(schema, \"pattern\", stringifyRegExpWithFlags(regex, refs), message, refs);\n    }\n}\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex, refs) {\n    if (!refs.applyRegexFlags || !regex.flags) {\n        return regex.source;\n    }\n    // Currently handled flags\n    const flags = {\n        i: regex.flags.includes(\"i\"),\n        m: regex.flags.includes(\"m\"),\n        s: regex.flags.includes(\"s\"), // `.` matches newlines\n    };\n    // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n    const source = flags.i ? regex.source.toLowerCase() : regex.source;\n    let pattern = \"\";\n    let isEscaped = false;\n    let inCharGroup = false;\n    let inCharRange = false;\n    for (let i = 0; i < source.length; i++) {\n        if (isEscaped) {\n            pattern += source[i];\n            isEscaped = false;\n            continue;\n        }\n        if (flags.i) {\n            if (inCharGroup) {\n                if (source[i].match(/[a-z]/)) {\n                    if (inCharRange) {\n                        pattern += source[i];\n                        pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n                        inCharRange = false;\n                    }\n                    else if (source[i + 1] === \"-\" && source[i + 2]?.match(/[a-z]/)) {\n                        pattern += source[i];\n                        inCharRange = true;\n                    }\n                    else {\n                        pattern += `${source[i]}${source[i].toUpperCase()}`;\n                    }\n                    continue;\n                }\n            }\n            else if (source[i].match(/[a-z]/)) {\n                pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n                continue;\n            }\n        }\n        if (flags.m) {\n            if (source[i] === \"^\") {\n                pattern += `(^|(?<=[\\r\\n]))`;\n                continue;\n            }\n            else if (source[i] === \"$\") {\n                pattern += `($|(?=[\\r\\n]))`;\n                continue;\n            }\n        }\n        if (flags.s && source[i] === \".\") {\n            pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n            continue;\n        }\n        pattern += source[i];\n        if (source[i] === \"\\\\\") {\n            isEscaped = true;\n        }\n        else if (inCharGroup && source[i] === \"]\") {\n            inCharGroup = false;\n        }\n        else if (!inCharGroup && source[i] === \"[\") {\n            inCharGroup = true;\n        }\n    }\n    try {\n        new RegExp(pattern);\n    }\n    catch {\n        console.warn(`Could not convert regex pattern at ${refs.currentPath.join(\"/\")} to a flag-independent form! Falling back to the flag-ignorant source`);\n        return regex.source;\n    }\n    return pattern;\n}\n","import { ZodFirstPartyTypeKind, } from \"zod/v3\";\nimport { parseDef } from \"../parseDef.js\";\nimport { parseStringDef } from \"./string.js\";\nimport { parseBrandedDef } from \"./branded.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseRecordDef(def, refs) {\n    if (refs.target === \"openAi\") {\n        console.warn(\"Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.\");\n    }\n    if (refs.target === \"openApi3\" &&\n        def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            type: \"object\",\n            required: def.keyType._def.values,\n            properties: def.keyType._def.values.reduce((acc, key) => ({\n                ...acc,\n                [key]: parseDef(def.valueType._def, {\n                    ...refs,\n                    currentPath: [...refs.currentPath, \"properties\", key],\n                }) ?? parseAnyDef(refs),\n            }), {}),\n            additionalProperties: refs.rejectedAdditionalProperties,\n        };\n    }\n    const schema = {\n        type: \"object\",\n        additionalProperties: parseDef(def.valueType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        }) ?? refs.allowedAdditionalProperties,\n    };\n    if (refs.target === \"openApi3\") {\n        return schema;\n    }\n    if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.checks?.length) {\n        const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n        return {\n            ...schema,\n            propertyNames: {\n                enum: def.keyType._def.values,\n            },\n        };\n    }\n    else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n        def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n        def.keyType._def.type._def.checks?.length) {\n        const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);\n        return {\n            ...schema,\n            propertyNames: keyType,\n        };\n    }\n    return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseRecordDef } from \"./record.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport function parseMapDef(def, refs) {\n    if (refs.mapStrategy === \"record\") {\n        return parseRecordDef(def, refs);\n    }\n    const keys = parseDef(def.keyType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"0\"],\n    }) || parseAnyDef(refs);\n    const values = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"],\n    }) || parseAnyDef(refs);\n    return {\n        type: \"array\",\n        maxItems: 125,\n        items: {\n            type: \"array\",\n            items: [keys, values],\n            minItems: 2,\n            maxItems: 2,\n        },\n    };\n}\n","export function parseNativeEnumDef(def) {\n    const object = def.values;\n    const actualKeys = Object.keys(def.values).filter((key) => {\n        return typeof object[object[key]] !== \"number\";\n    });\n    const actualValues = actualKeys.map((key) => object[key]);\n    const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));\n    return {\n        type: parsedTypes.length === 1\n            ? parsedTypes[0] === \"string\"\n                ? \"string\"\n                : \"number\"\n            : [\"string\", \"number\"],\n        enum: actualValues,\n    };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseNeverDef(refs) {\n    return refs.target === \"openAi\"\n        ? undefined\n        : {\n            not: parseAnyDef({\n                ...refs,\n                currentPath: [...refs.currentPath, \"not\"],\n            }),\n        };\n}\n","export function parseNullDef(refs) {\n    return refs.target === \"openApi3\"\n        ? {\n            enum: [\"null\"],\n            nullable: true,\n        }\n        : {\n            type: \"null\",\n        };\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const primitiveMappings = {\n    ZodString: \"string\",\n    ZodNumber: \"number\",\n    ZodBigInt: \"integer\",\n    ZodBoolean: \"boolean\",\n    ZodNull: \"null\",\n};\nexport function parseUnionDef(def, refs) {\n    if (refs.target === \"openApi3\")\n        return asAnyOf(def, refs);\n    const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n    // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n    if (options.every((x) => x._def.typeName in primitiveMappings &&\n        (!x._def.checks || !x._def.checks.length))) {\n        // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n        const types = options.reduce((types, x) => {\n            const type = primitiveMappings[x._def.typeName]; //Can be safely casted due to row 43\n            return type && !types.includes(type) ? [...types, type] : types;\n        }, []);\n        return {\n            type: types.length > 1 ? types : types[0],\n        };\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n        // all options literals\n        const types = options.reduce((acc, x) => {\n            const type = typeof x._def.value;\n            switch (type) {\n                case \"string\":\n                case \"number\":\n                case \"boolean\":\n                    return [...acc, type];\n                case \"bigint\":\n                    return [...acc, \"integer\"];\n                case \"object\":\n                    if (x._def.value === null)\n                        return [...acc, \"null\"];\n                case \"symbol\":\n                case \"undefined\":\n                case \"function\":\n                default:\n                    return acc;\n            }\n        }, []);\n        if (types.length === options.length) {\n            // all the literals are primitive, as far as null can be considered primitive\n            const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n            return {\n                type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n                enum: options.reduce((acc, x) => {\n                    return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n                }, []),\n            };\n        }\n    }\n    else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n        return {\n            type: \"string\",\n            enum: options.reduce((acc, x) => [\n                ...acc,\n                ...x._def.values.filter((x) => !acc.includes(x)),\n            ], []),\n        };\n    }\n    return asAnyOf(def, refs);\n}\nconst asAnyOf = (def, refs) => {\n    const anyOf = (def.options instanceof Map\n        ? Array.from(def.options.values())\n        : def.options)\n        .map((x, i) => parseDef(x._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", `${i}`],\n    }))\n        .filter((x) => !!x &&\n        (!refs.strictUnions ||\n            (typeof x === \"object\" && Object.keys(x).length > 0)));\n    return anyOf.length ? { anyOf } : undefined;\n};\n","import { parseDef } from \"../parseDef.js\";\nimport { primitiveMappings } from \"./union.js\";\nexport function parseNullableDef(def, refs) {\n    if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(def.innerType._def.typeName) &&\n        (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n        if (refs.target === \"openApi3\") {\n            return {\n                type: primitiveMappings[def.innerType._def.typeName],\n                nullable: true,\n            };\n        }\n        return {\n            type: [\n                primitiveMappings[def.innerType._def.typeName],\n                \"null\",\n            ],\n        };\n    }\n    if (refs.target === \"openApi3\") {\n        const base = parseDef(def.innerType._def, {\n            ...refs,\n            currentPath: [...refs.currentPath],\n        });\n        if (base && \"$ref\" in base)\n            return { allOf: [base], nullable: true };\n        return base && { ...base, nullable: true };\n    }\n    const base = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"0\"],\n    });\n    return base && { anyOf: [base, { type: \"null\" }] };\n}\n","import { addErrorMessage, setResponseValueAndErrors, } from \"../errorMessages.js\";\nexport function parseNumberDef(def, refs) {\n    const res = {\n        type: \"number\",\n    };\n    if (!def.checks)\n        return res;\n    for (const check of def.checks) {\n        switch (check.kind) {\n            case \"int\":\n                res.type = \"integer\";\n                addErrorMessage(res, \"type\", check.message, refs);\n                break;\n            case \"min\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMinimum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMinimum = true;\n                    }\n                    setResponseValueAndErrors(res, \"minimum\", check.value, check.message, refs);\n                }\n                break;\n            case \"max\":\n                if (refs.target === \"jsonSchema7\") {\n                    if (check.inclusive) {\n                        setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                    }\n                    else {\n                        setResponseValueAndErrors(res, \"exclusiveMaximum\", check.value, check.message, refs);\n                    }\n                }\n                else {\n                    if (!check.inclusive) {\n                        res.exclusiveMaximum = true;\n                    }\n                    setResponseValueAndErrors(res, \"maximum\", check.value, check.message, refs);\n                }\n                break;\n            case \"multipleOf\":\n                setResponseValueAndErrors(res, \"multipleOf\", check.value, check.message, refs);\n                break;\n        }\n    }\n    return res;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseObjectDef(def, refs) {\n    const forceOptionalIntoNullable = refs.target === \"openAi\";\n    const result = {\n        type: \"object\",\n        properties: {},\n    };\n    const required = [];\n    const shape = def.shape();\n    for (const propName in shape) {\n        let propDef = shape[propName];\n        if (propDef === undefined || propDef._def === undefined) {\n            continue;\n        }\n        let propOptional = safeIsOptional(propDef);\n        if (propOptional && forceOptionalIntoNullable) {\n            if (propDef._def.typeName === \"ZodOptional\") {\n                propDef = propDef._def.innerType;\n            }\n            if (!propDef.isNullable()) {\n                propDef = propDef.nullable();\n            }\n            propOptional = false;\n        }\n        const parsedDef = parseDef(propDef._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"properties\", propName],\n            propertyPath: [...refs.currentPath, \"properties\", propName],\n        });\n        if (parsedDef === undefined) {\n            continue;\n        }\n        result.properties[propName] = parsedDef;\n        if (!propOptional) {\n            required.push(propName);\n        }\n    }\n    if (required.length) {\n        result.required = required;\n    }\n    const additionalProperties = decideAdditionalProperties(def, refs);\n    if (additionalProperties !== undefined) {\n        result.additionalProperties = additionalProperties;\n    }\n    return result;\n}\nfunction decideAdditionalProperties(def, refs) {\n    if (def.catchall._def.typeName !== \"ZodNever\") {\n        return parseDef(def.catchall._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, \"additionalProperties\"],\n        });\n    }\n    switch (def.unknownKeys) {\n        case \"passthrough\":\n            return refs.allowedAdditionalProperties;\n        case \"strict\":\n            return refs.rejectedAdditionalProperties;\n        case \"strip\":\n            return refs.removeAdditionalStrategy === \"strict\"\n                ? refs.allowedAdditionalProperties\n                : refs.rejectedAdditionalProperties;\n    }\n}\nfunction safeIsOptional(schema) {\n    try {\n        return schema.isOptional();\n    }\n    catch {\n        return true;\n    }\n}\n","import { parseDef } from \"../parseDef.js\";\nimport { parseAnyDef } from \"./any.js\";\nexport const parseOptionalDef = (def, refs) => {\n    if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n        return parseDef(def.innerType._def, refs);\n    }\n    const innerSchema = parseDef(def.innerType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"anyOf\", \"1\"],\n    });\n    return innerSchema\n        ? {\n            anyOf: [\n                {\n                    not: parseAnyDef(refs),\n                },\n                innerSchema,\n            ],\n        }\n        : parseAnyDef(refs);\n};\n","import { parseDef } from \"../parseDef.js\";\nexport const parsePipelineDef = (def, refs) => {\n    if (refs.pipeStrategy === \"input\") {\n        return parseDef(def.in._def, refs);\n    }\n    else if (refs.pipeStrategy === \"output\") {\n        return parseDef(def.out._def, refs);\n    }\n    const a = parseDef(def.in._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", \"0\"],\n    });\n    const b = parseDef(def.out._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"allOf\", a ? \"1\" : \"0\"],\n    });\n    return {\n        allOf: [a, b].filter((x) => x !== undefined),\n    };\n};\n","import { parseDef } from \"../parseDef.js\";\nexport function parsePromiseDef(def, refs) {\n    return parseDef(def.type._def, refs);\n}\n","import { setResponseValueAndErrors } from \"../errorMessages.js\";\nimport { parseDef } from \"../parseDef.js\";\nexport function parseSetDef(def, refs) {\n    const items = parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, \"items\"],\n    });\n    const schema = {\n        type: \"array\",\n        uniqueItems: true,\n        items,\n    };\n    if (def.minSize) {\n        setResponseValueAndErrors(schema, \"minItems\", def.minSize.value, def.minSize.message, refs);\n    }\n    if (def.maxSize) {\n        setResponseValueAndErrors(schema, \"maxItems\", def.maxSize.value, def.maxSize.message, refs);\n    }\n    return schema;\n}\n","import { parseDef } from \"../parseDef.js\";\nexport function parseTupleDef(def, refs) {\n    if (def.rest) {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n            additionalItems: parseDef(def.rest._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"additionalItems\"],\n            }),\n        };\n    }\n    else {\n        return {\n            type: \"array\",\n            minItems: def.items.length,\n            maxItems: def.items.length,\n            items: def.items\n                .map((x, i) => parseDef(x._def, {\n                ...refs,\n                currentPath: [...refs.currentPath, \"items\", `${i}`],\n            }))\n                .reduce((acc, x) => (x === undefined ? acc : [...acc, x]), []),\n        };\n    }\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUndefinedDef(refs) {\n    return {\n        not: parseAnyDef(refs),\n    };\n}\n","import { parseAnyDef } from \"./any.js\";\nexport function parseUnknownDef(refs) {\n    return parseAnyDef(refs);\n}\n","import { parseDef } from \"../parseDef.js\";\nexport const parseReadonlyDef = (def, refs) => {\n    return parseDef(def.innerType._def, refs);\n};\n","import { ZodFirstPartyTypeKind } from \"zod/v3\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nimport { parseArrayDef } from \"./parsers/array.js\";\nimport { parseBigintDef } from \"./parsers/bigint.js\";\nimport { parseBooleanDef } from \"./parsers/boolean.js\";\nimport { parseBrandedDef } from \"./parsers/branded.js\";\nimport { parseCatchDef } from \"./parsers/catch.js\";\nimport { parseDateDef } from \"./parsers/date.js\";\nimport { parseDefaultDef } from \"./parsers/default.js\";\nimport { parseEffectsDef } from \"./parsers/effects.js\";\nimport { parseEnumDef } from \"./parsers/enum.js\";\nimport { parseIntersectionDef } from \"./parsers/intersection.js\";\nimport { parseLiteralDef } from \"./parsers/literal.js\";\nimport { parseMapDef } from \"./parsers/map.js\";\nimport { parseNativeEnumDef } from \"./parsers/nativeEnum.js\";\nimport { parseNeverDef } from \"./parsers/never.js\";\nimport { parseNullDef } from \"./parsers/null.js\";\nimport { parseNullableDef } from \"./parsers/nullable.js\";\nimport { parseNumberDef } from \"./parsers/number.js\";\nimport { parseObjectDef } from \"./parsers/object.js\";\nimport { parseOptionalDef } from \"./parsers/optional.js\";\nimport { parsePipelineDef } from \"./parsers/pipeline.js\";\nimport { parsePromiseDef } from \"./parsers/promise.js\";\nimport { parseRecordDef } from \"./parsers/record.js\";\nimport { parseSetDef } from \"./parsers/set.js\";\nimport { parseStringDef } from \"./parsers/string.js\";\nimport { parseTupleDef } from \"./parsers/tuple.js\";\nimport { parseUndefinedDef } from \"./parsers/undefined.js\";\nimport { parseUnionDef } from \"./parsers/union.js\";\nimport { parseUnknownDef } from \"./parsers/unknown.js\";\nimport { parseReadonlyDef } from \"./parsers/readonly.js\";\nexport const selectParser = (def, typeName, refs) => {\n    switch (typeName) {\n        case ZodFirstPartyTypeKind.ZodString:\n            return parseStringDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNumber:\n            return parseNumberDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodObject:\n            return parseObjectDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBigInt:\n            return parseBigintDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBoolean:\n            return parseBooleanDef();\n        case ZodFirstPartyTypeKind.ZodDate:\n            return parseDateDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUndefined:\n            return parseUndefinedDef(refs);\n        case ZodFirstPartyTypeKind.ZodNull:\n            return parseNullDef(refs);\n        case ZodFirstPartyTypeKind.ZodArray:\n            return parseArrayDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodUnion:\n        case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n            return parseUnionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodIntersection:\n            return parseIntersectionDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodTuple:\n            return parseTupleDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodRecord:\n            return parseRecordDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLiteral:\n            return parseLiteralDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodEnum:\n            return parseEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNativeEnum:\n            return parseNativeEnumDef(def);\n        case ZodFirstPartyTypeKind.ZodNullable:\n            return parseNullableDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodOptional:\n            return parseOptionalDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodMap:\n            return parseMapDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodSet:\n            return parseSetDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodLazy:\n            return () => def.getter()._def;\n        case ZodFirstPartyTypeKind.ZodPromise:\n            return parsePromiseDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodNaN:\n        case ZodFirstPartyTypeKind.ZodNever:\n            return parseNeverDef(refs);\n        case ZodFirstPartyTypeKind.ZodEffects:\n            return parseEffectsDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodAny:\n            return parseAnyDef(refs);\n        case ZodFirstPartyTypeKind.ZodUnknown:\n            return parseUnknownDef(refs);\n        case ZodFirstPartyTypeKind.ZodDefault:\n            return parseDefaultDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodBranded:\n            return parseBrandedDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodReadonly:\n            return parseReadonlyDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodCatch:\n            return parseCatchDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodPipeline:\n            return parsePipelineDef(def, refs);\n        case ZodFirstPartyTypeKind.ZodFunction:\n        case ZodFirstPartyTypeKind.ZodVoid:\n        case ZodFirstPartyTypeKind.ZodSymbol:\n            return undefined;\n        default:\n            return ((_) => undefined)(typeName);\n    }\n};\n","import { ignoreOverride } from \"./Options.js\";\nimport { selectParser } from \"./selectParser.js\";\nimport { getRelativePath } from \"./getRelativePath.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nexport function parseDef(def, refs, forceResolution = false) {\n    const seenItem = refs.seen.get(def);\n    if (refs.override) {\n        const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);\n        if (overrideResult !== ignoreOverride) {\n            return overrideResult;\n        }\n    }\n    if (seenItem && !forceResolution) {\n        const seenSchema = get$ref(seenItem, refs);\n        if (seenSchema !== undefined) {\n            return seenSchema;\n        }\n    }\n    const newItem = { def, path: refs.currentPath, jsonSchema: undefined };\n    refs.seen.set(def, newItem);\n    const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n    // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n    const jsonSchema = typeof jsonSchemaOrGetter === \"function\"\n        ? parseDef(jsonSchemaOrGetter(), refs)\n        : jsonSchemaOrGetter;\n    if (jsonSchema) {\n        addMeta(def, refs, jsonSchema);\n    }\n    if (refs.postProcess) {\n        const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n        newItem.jsonSchema = jsonSchema;\n        return postProcessResult;\n    }\n    newItem.jsonSchema = jsonSchema;\n    return jsonSchema;\n}\nconst get$ref = (item, refs) => {\n    switch (refs.$refStrategy) {\n        case \"root\":\n            return { $ref: item.path.join(\"/\") };\n        case \"relative\":\n            return { $ref: getRelativePath(refs.currentPath, item.path) };\n        case \"none\":\n        case \"seen\": {\n            if (item.path.length < refs.currentPath.length &&\n                item.path.every((value, index) => refs.currentPath[index] === value)) {\n                console.warn(`Recursive reference detected at ${refs.currentPath.join(\"/\")}! Defaulting to any`);\n                return parseAnyDef(refs);\n            }\n            return refs.$refStrategy === \"seen\" ? parseAnyDef(refs) : undefined;\n        }\n    }\n};\nconst addMeta = (def, refs, jsonSchema) => {\n    if (def.description) {\n        jsonSchema.description = def.description;\n        if (refs.markdownDescription) {\n            jsonSchema.markdownDescription = def.description;\n        }\n    }\n    return jsonSchema;\n};\n","import { parseDef } from \"./parseDef.js\";\nimport { getRefs } from \"./Refs.js\";\nimport { parseAnyDef } from \"./parsers/any.js\";\nconst zodToJsonSchema = (schema, options) => {\n    const refs = getRefs(options);\n    let definitions = typeof options === \"object\" && options.definitions\n        ? Object.entries(options.definitions).reduce((acc, [name, schema]) => ({\n            ...acc,\n            [name]: parseDef(schema._def, {\n                ...refs,\n                currentPath: [...refs.basePath, refs.definitionPath, name],\n            }, true) ?? parseAnyDef(refs),\n        }), {})\n        : undefined;\n    const name = typeof options === \"string\"\n        ? options\n        : options?.nameStrategy === \"title\"\n            ? undefined\n            : options?.name;\n    const main = parseDef(schema._def, name === undefined\n        ? refs\n        : {\n            ...refs,\n            currentPath: [...refs.basePath, refs.definitionPath, name],\n        }, false) ?? parseAnyDef(refs);\n    const title = typeof options === \"object\" &&\n        options.name !== undefined &&\n        options.nameStrategy === \"title\"\n        ? options.name\n        : undefined;\n    if (title !== undefined) {\n        main.title = title;\n    }\n    if (refs.flags.hasReferencedOpenAiAnyType) {\n        if (!definitions) {\n            definitions = {};\n        }\n        if (!definitions[refs.openAiAnyTypeName]) {\n            definitions[refs.openAiAnyTypeName] = {\n                // Skipping \"object\" as no properties can be defined and additionalProperties must be \"false\"\n                type: [\"string\", \"number\", \"integer\", \"boolean\", \"array\", \"null\"],\n                items: {\n                    $ref: refs.$refStrategy === \"relative\"\n                        ? \"1\"\n                        : [\n                            ...refs.basePath,\n                            refs.definitionPath,\n                            refs.openAiAnyTypeName,\n                        ].join(\"/\"),\n                },\n            };\n        }\n    }\n    const combined = name === undefined\n        ? definitions\n            ? {\n                ...main,\n                [refs.definitionPath]: definitions,\n            }\n            : main\n        : {\n            $ref: [\n                ...(refs.$refStrategy === \"relative\" ? [] : refs.basePath),\n                refs.definitionPath,\n                name,\n            ].join(\"/\"),\n            [refs.definitionPath]: {\n                ...definitions,\n                [name]: main,\n            },\n        };\n    if (refs.target === \"jsonSchema7\") {\n        combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n    }\n    else if (refs.target === \"jsonSchema2019-09\" || refs.target === \"openAi\") {\n        combined.$schema = \"https://json-schema.org/draft/2019-09/schema#\";\n    }\n    if (refs.target === \"openAi\" &&\n        (\"anyOf\" in combined ||\n            \"oneOf\" in combined ||\n            \"allOf\" in combined ||\n            (\"type\" in combined && Array.isArray(combined.type)))) {\n        console.warn(\"Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.\");\n    }\n    return combined;\n};\nexport { zodToJsonSchema };\n","export * from \"./Options.js\";\nexport * from \"./Refs.js\";\nexport * from \"./errorMessages.js\";\nexport * from \"./getRelativePath.js\";\nexport * from \"./parseDef.js\";\nexport * from \"./parseTypes.js\";\nexport * from \"./parsers/any.js\";\nexport * from \"./parsers/array.js\";\nexport * from \"./parsers/bigint.js\";\nexport * from \"./parsers/boolean.js\";\nexport * from \"./parsers/branded.js\";\nexport * from \"./parsers/catch.js\";\nexport * from \"./parsers/date.js\";\nexport * from \"./parsers/default.js\";\nexport * from \"./parsers/effects.js\";\nexport * from \"./parsers/enum.js\";\nexport * from \"./parsers/intersection.js\";\nexport * from \"./parsers/literal.js\";\nexport * from \"./parsers/map.js\";\nexport * from \"./parsers/nativeEnum.js\";\nexport * from \"./parsers/never.js\";\nexport * from \"./parsers/null.js\";\nexport * from \"./parsers/nullable.js\";\nexport * from \"./parsers/number.js\";\nexport * from \"./parsers/object.js\";\nexport * from \"./parsers/optional.js\";\nexport * from \"./parsers/pipeline.js\";\nexport * from \"./parsers/promise.js\";\nexport * from \"./parsers/readonly.js\";\nexport * from \"./parsers/record.js\";\nexport * from \"./parsers/set.js\";\nexport * from \"./parsers/string.js\";\nexport * from \"./parsers/tuple.js\";\nexport * from \"./parsers/undefined.js\";\nexport * from \"./parsers/union.js\";\nexport * from \"./parsers/unknown.js\";\nexport * from \"./selectParser.js\";\nexport * from \"./zodToJsonSchema.js\";\nimport { zodToJsonSchema } from \"./zodToJsonSchema.js\";\nexport default zodToJsonSchema;\n","type State =\n  | 'ROOT'\n  | 'FINISH'\n  | 'INSIDE_STRING'\n  | 'INSIDE_STRING_ESCAPE'\n  | 'INSIDE_LITERAL'\n  | 'INSIDE_NUMBER'\n  | 'INSIDE_OBJECT_START'\n  | 'INSIDE_OBJECT_KEY'\n  | 'INSIDE_OBJECT_AFTER_KEY'\n  | 'INSIDE_OBJECT_BEFORE_VALUE'\n  | 'INSIDE_OBJECT_AFTER_VALUE'\n  | 'INSIDE_OBJECT_AFTER_COMMA'\n  | 'INSIDE_ARRAY_START'\n  | 'INSIDE_ARRAY_AFTER_VALUE'\n  | 'INSIDE_ARRAY_AFTER_COMMA';\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n  const stack: State[] = ['ROOT'];\n  let lastValidIndex = -1;\n  let literalStart: number | null = null;\n\n  function processValueStart(char: string, i: number, swapState: State) {\n    {\n      switch (char) {\n        case '\"': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_STRING');\n          break;\n        }\n\n        case 'f':\n        case 't':\n        case 'n': {\n          lastValidIndex = i;\n          literalStart = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_LITERAL');\n          break;\n        }\n\n        case '-': {\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_NUMBER');\n          break;\n        }\n        case '0':\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_NUMBER');\n          break;\n        }\n\n        case '{': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_OBJECT_START');\n          break;\n        }\n\n        case '[': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_ARRAY_START');\n          break;\n        }\n      }\n    }\n  }\n\n  function processAfterObjectValue(char: string, i: number) {\n    switch (char) {\n      case ',': {\n        stack.pop();\n        stack.push('INSIDE_OBJECT_AFTER_COMMA');\n        break;\n      }\n      case '}': {\n        lastValidIndex = i;\n        stack.pop();\n        break;\n      }\n    }\n  }\n\n  function processAfterArrayValue(char: string, i: number) {\n    switch (char) {\n      case ',': {\n        stack.pop();\n        stack.push('INSIDE_ARRAY_AFTER_COMMA');\n        break;\n      }\n      case ']': {\n        lastValidIndex = i;\n        stack.pop();\n        break;\n      }\n    }\n  }\n\n  for (let i = 0; i < input.length; i++) {\n    const char = input[i];\n    const currentState = stack[stack.length - 1];\n\n    switch (currentState) {\n      case 'ROOT':\n        processValueStart(char, i, 'FINISH');\n        break;\n\n      case 'INSIDE_OBJECT_START': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_KEY');\n            break;\n          }\n          case '}': {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_AFTER_COMMA': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_KEY');\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_KEY': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_AFTER_KEY');\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_AFTER_KEY': {\n        switch (char) {\n          case ':': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_BEFORE_VALUE');\n\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_BEFORE_VALUE': {\n        processValueStart(char, i, 'INSIDE_OBJECT_AFTER_VALUE');\n        break;\n      }\n\n      case 'INSIDE_OBJECT_AFTER_VALUE': {\n        processAfterObjectValue(char, i);\n        break;\n      }\n\n      case 'INSIDE_STRING': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            lastValidIndex = i;\n            break;\n          }\n\n          case '\\\\': {\n            stack.push('INSIDE_STRING_ESCAPE');\n            break;\n          }\n\n          default: {\n            lastValidIndex = i;\n          }\n        }\n\n        break;\n      }\n\n      case 'INSIDE_ARRAY_START': {\n        switch (char) {\n          case ']': {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n\n          default: {\n            lastValidIndex = i;\n            processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_ARRAY_AFTER_VALUE': {\n        switch (char) {\n          case ',': {\n            stack.pop();\n            stack.push('INSIDE_ARRAY_AFTER_COMMA');\n            break;\n          }\n\n          case ']': {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n\n          default: {\n            lastValidIndex = i;\n            break;\n          }\n        }\n\n        break;\n      }\n\n      case 'INSIDE_ARRAY_AFTER_COMMA': {\n        processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n        break;\n      }\n\n      case 'INSIDE_STRING_ESCAPE': {\n        stack.pop();\n        lastValidIndex = i;\n\n        break;\n      }\n\n      case 'INSIDE_NUMBER': {\n        switch (char) {\n          case '0':\n          case '1':\n          case '2':\n          case '3':\n          case '4':\n          case '5':\n          case '6':\n          case '7':\n          case '8':\n          case '9': {\n            lastValidIndex = i;\n            break;\n          }\n\n          case 'e':\n          case 'E':\n          case '-':\n          case '.': {\n            break;\n          }\n\n          case ',': {\n            stack.pop();\n\n            if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n              processAfterArrayValue(char, i);\n            }\n\n            if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n              processAfterObjectValue(char, i);\n            }\n\n            break;\n          }\n\n          case '}': {\n            stack.pop();\n\n            if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n              processAfterObjectValue(char, i);\n            }\n\n            break;\n          }\n\n          case ']': {\n            stack.pop();\n\n            if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n              processAfterArrayValue(char, i);\n            }\n\n            break;\n          }\n\n          default: {\n            stack.pop();\n            break;\n          }\n        }\n\n        break;\n      }\n\n      case 'INSIDE_LITERAL': {\n        const partialLiteral = input.substring(literalStart!, i + 1);\n\n        if (\n          !'false'.startsWith(partialLiteral) &&\n          !'true'.startsWith(partialLiteral) &&\n          !'null'.startsWith(partialLiteral)\n        ) {\n          stack.pop();\n\n          if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n            processAfterObjectValue(char, i);\n          } else if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n            processAfterArrayValue(char, i);\n          }\n        } else {\n          lastValidIndex = i;\n        }\n\n        break;\n      }\n    }\n  }\n\n  let result = input.slice(0, lastValidIndex + 1);\n\n  for (let i = stack.length - 1; i >= 0; i--) {\n    const state = stack[i];\n\n    switch (state) {\n      case 'INSIDE_STRING': {\n        result += '\"';\n        break;\n      }\n\n      case 'INSIDE_OBJECT_KEY':\n      case 'INSIDE_OBJECT_AFTER_KEY':\n      case 'INSIDE_OBJECT_AFTER_COMMA':\n      case 'INSIDE_OBJECT_START':\n      case 'INSIDE_OBJECT_BEFORE_VALUE':\n      case 'INSIDE_OBJECT_AFTER_VALUE': {\n        result += '}';\n        break;\n      }\n\n      case 'INSIDE_ARRAY_START':\n      case 'INSIDE_ARRAY_AFTER_COMMA':\n      case 'INSIDE_ARRAY_AFTER_VALUE': {\n        result += ']';\n        break;\n      }\n\n      case 'INSIDE_LITERAL': {\n        const partialLiteral = input.substring(literalStart!, input.length);\n\n        if ('true'.startsWith(partialLiteral)) {\n          result += 'true'.slice(partialLiteral.length);\n        } else if ('false'.startsWith(partialLiteral)) {\n          result += 'false'.slice(partialLiteral.length);\n        } else if ('null'.startsWith(partialLiteral)) {\n          result += 'null'.slice(partialLiteral.length);\n        }\n      }\n    }\n  }\n\n  return result;\n}\n","import { JSONValue } from '@ai-sdk/provider';\nimport { safeParseJSON } from '@ai-sdk/provider-utils';\nimport { fixJson } from './fix-json';\n\nexport function parsePartialJson(jsonText: string | undefined): {\n  value: JSONValue | undefined;\n  state:\n    | 'undefined-input'\n    | 'successful-parse'\n    | 'repaired-parse'\n    | 'failed-parse';\n} {\n  if (jsonText === undefined) {\n    return { value: undefined, state: 'undefined-input' };\n  }\n\n  let result = safeParseJSON({ text: jsonText });\n\n  if (result.success) {\n    return { value: result.value, state: 'successful-parse' };\n  }\n\n  result = safeParseJSON({ text: fixJson(jsonText) });\n\n  if (result.success) {\n    return { value: result.value, state: 'repaired-parse' };\n  }\n\n  return { value: undefined, state: 'failed-parse' };\n}\n","import {\n  LanguageModelV1FinishReason,\n  LanguageModelV1Source,\n} from '@ai-sdk/provider';\nimport { ToolCall, ToolResult } from '@ai-sdk/provider-utils';\nimport { JSONValue } from './types';\n\nexport type DataStreamString =\n  `${(typeof DataStreamStringPrefixes)[keyof typeof DataStreamStringPrefixes]}:${string}\\n`;\n\nexport interface DataStreamPart<\n  CODE extends string,\n  NAME extends string,\n  TYPE,\n> {\n  code: CODE;\n  name: NAME;\n  parse: (value: JSONValue) => { type: NAME; value: TYPE };\n}\n\nconst textStreamPart: DataStreamPart<'0', 'text', string> = {\n  code: '0',\n  name: 'text',\n  parse: (value: JSONValue) => {\n    if (typeof value !== 'string') {\n      throw new Error('\"text\" parts expect a string value.');\n    }\n    return { type: 'text', value };\n  },\n};\n\nconst dataStreamPart: DataStreamPart<'2', 'data', Array<JSONValue>> = {\n  code: '2',\n  name: 'data',\n  parse: (value: JSONValue) => {\n    if (!Array.isArray(value)) {\n      throw new Error('\"data\" parts expect an array value.');\n    }\n\n    return { type: 'data', value };\n  },\n};\n\nconst errorStreamPart: DataStreamPart<'3', 'error', string> = {\n  code: '3',\n  name: 'error',\n  parse: (value: JSONValue) => {\n    if (typeof value !== 'string') {\n      throw new Error('\"error\" parts expect a string value.');\n    }\n    return { type: 'error', value };\n  },\n};\n\nconst messageAnnotationsStreamPart: DataStreamPart<\n  '8',\n  'message_annotations',\n  Array<JSONValue>\n> = {\n  code: '8',\n  name: 'message_annotations',\n  parse: (value: JSONValue) => {\n    if (!Array.isArray(value)) {\n      throw new Error('\"message_annotations\" parts expect an array value.');\n    }\n\n    return { type: 'message_annotations', value };\n  },\n};\n\nconst toolCallStreamPart: DataStreamPart<\n  '9',\n  'tool_call',\n  ToolCall<string, any>\n> = {\n  code: '9',\n  name: 'tool_call',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('toolCallId' in value) ||\n      typeof value.toolCallId !== 'string' ||\n      !('toolName' in value) ||\n      typeof value.toolName !== 'string' ||\n      !('args' in value) ||\n      typeof value.args !== 'object'\n    ) {\n      throw new Error(\n        '\"tool_call\" parts expect an object with a \"toolCallId\", \"toolName\", and \"args\" property.',\n      );\n    }\n\n    return {\n      type: 'tool_call',\n      value: value as unknown as ToolCall<string, any>,\n    };\n  },\n};\n\nconst toolResultStreamPart: DataStreamPart<\n  'a',\n  'tool_result',\n  Omit<ToolResult<string, any, any>, 'args' | 'toolName'>\n> = {\n  code: 'a',\n  name: 'tool_result',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('toolCallId' in value) ||\n      typeof value.toolCallId !== 'string' ||\n      !('result' in value)\n    ) {\n      throw new Error(\n        '\"tool_result\" parts expect an object with a \"toolCallId\" and a \"result\" property.',\n      );\n    }\n\n    return {\n      type: 'tool_result',\n      value: value as unknown as Omit<\n        ToolResult<string, any, any>,\n        'args' | 'toolName'\n      >,\n    };\n  },\n};\n\nconst toolCallStreamingStartStreamPart: DataStreamPart<\n  'b',\n  'tool_call_streaming_start',\n  { toolCallId: string; toolName: string }\n> = {\n  code: 'b',\n  name: 'tool_call_streaming_start',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('toolCallId' in value) ||\n      typeof value.toolCallId !== 'string' ||\n      !('toolName' in value) ||\n      typeof value.toolName !== 'string'\n    ) {\n      throw new Error(\n        '\"tool_call_streaming_start\" parts expect an object with a \"toolCallId\" and \"toolName\" property.',\n      );\n    }\n\n    return {\n      type: 'tool_call_streaming_start',\n      value: value as unknown as { toolCallId: string; toolName: string },\n    };\n  },\n};\n\nconst toolCallDeltaStreamPart: DataStreamPart<\n  'c',\n  'tool_call_delta',\n  { toolCallId: string; argsTextDelta: string }\n> = {\n  code: 'c',\n  name: 'tool_call_delta',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('toolCallId' in value) ||\n      typeof value.toolCallId !== 'string' ||\n      !('argsTextDelta' in value) ||\n      typeof value.argsTextDelta !== 'string'\n    ) {\n      throw new Error(\n        '\"tool_call_delta\" parts expect an object with a \"toolCallId\" and \"argsTextDelta\" property.',\n      );\n    }\n\n    return {\n      type: 'tool_call_delta',\n      value: value as unknown as {\n        toolCallId: string;\n        argsTextDelta: string;\n      },\n    };\n  },\n};\n\nconst finishMessageStreamPart: DataStreamPart<\n  'd',\n  'finish_message',\n  {\n    finishReason: LanguageModelV1FinishReason;\n    // TODO v5 remove usage from finish event (only on step-finish)\n    usage?: {\n      promptTokens: number;\n      completionTokens: number;\n    };\n  }\n> = {\n  code: 'd',\n  name: 'finish_message',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('finishReason' in value) ||\n      typeof value.finishReason !== 'string'\n    ) {\n      throw new Error(\n        '\"finish_message\" parts expect an object with a \"finishReason\" property.',\n      );\n    }\n\n    const result: {\n      finishReason: LanguageModelV1FinishReason;\n      usage?: {\n        promptTokens: number;\n        completionTokens: number;\n      };\n    } = {\n      finishReason: value.finishReason as LanguageModelV1FinishReason,\n    };\n\n    if (\n      'usage' in value &&\n      value.usage != null &&\n      typeof value.usage === 'object' &&\n      'promptTokens' in value.usage &&\n      'completionTokens' in value.usage\n    ) {\n      result.usage = {\n        promptTokens:\n          typeof value.usage.promptTokens === 'number'\n            ? value.usage.promptTokens\n            : Number.NaN,\n        completionTokens:\n          typeof value.usage.completionTokens === 'number'\n            ? value.usage.completionTokens\n            : Number.NaN,\n      };\n    }\n\n    return {\n      type: 'finish_message',\n      value: result,\n    };\n  },\n};\n\nconst finishStepStreamPart: DataStreamPart<\n  'e',\n  'finish_step',\n  {\n    isContinued: boolean;\n    finishReason: LanguageModelV1FinishReason;\n    usage?: {\n      promptTokens: number;\n      completionTokens: number;\n    };\n  }\n> = {\n  code: 'e',\n  name: 'finish_step',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('finishReason' in value) ||\n      typeof value.finishReason !== 'string'\n    ) {\n      throw new Error(\n        '\"finish_step\" parts expect an object with a \"finishReason\" property.',\n      );\n    }\n\n    const result: {\n      isContinued: boolean;\n      finishReason: LanguageModelV1FinishReason;\n      usage?: {\n        promptTokens: number;\n        completionTokens: number;\n      };\n    } = {\n      finishReason: value.finishReason as LanguageModelV1FinishReason,\n      isContinued: false,\n    };\n\n    if (\n      'usage' in value &&\n      value.usage != null &&\n      typeof value.usage === 'object' &&\n      'promptTokens' in value.usage &&\n      'completionTokens' in value.usage\n    ) {\n      result.usage = {\n        promptTokens:\n          typeof value.usage.promptTokens === 'number'\n            ? value.usage.promptTokens\n            : Number.NaN,\n        completionTokens:\n          typeof value.usage.completionTokens === 'number'\n            ? value.usage.completionTokens\n            : Number.NaN,\n      };\n    }\n\n    if ('isContinued' in value && typeof value.isContinued === 'boolean') {\n      result.isContinued = value.isContinued;\n    }\n\n    return {\n      type: 'finish_step',\n      value: result,\n    };\n  },\n};\n\nconst startStepStreamPart: DataStreamPart<\n  'f',\n  'start_step',\n  {\n    messageId: string;\n  }\n> = {\n  code: 'f',\n  name: 'start_step',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('messageId' in value) ||\n      typeof value.messageId !== 'string'\n    ) {\n      throw new Error(\n        '\"start_step\" parts expect an object with an \"id\" property.',\n      );\n    }\n\n    return {\n      type: 'start_step',\n      value: {\n        messageId: value.messageId,\n      },\n    };\n  },\n};\n\nconst reasoningStreamPart: DataStreamPart<'g', 'reasoning', string> = {\n  code: 'g',\n  name: 'reasoning',\n  parse: (value: JSONValue) => {\n    if (typeof value !== 'string') {\n      throw new Error('\"reasoning\" parts expect a string value.');\n    }\n    return { type: 'reasoning', value };\n  },\n};\n\nconst sourcePart: DataStreamPart<'h', 'source', LanguageModelV1Source> = {\n  code: 'h',\n  name: 'source',\n  parse: (value: JSONValue) => {\n    if (value == null || typeof value !== 'object') {\n      throw new Error('\"source\" parts expect a Source object.');\n    }\n\n    return {\n      type: 'source',\n      value: value as LanguageModelV1Source,\n    };\n  },\n};\n\nconst redactedReasoningStreamPart: DataStreamPart<\n  'i',\n  'redacted_reasoning',\n  { data: string }\n> = {\n  code: 'i',\n  name: 'redacted_reasoning',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('data' in value) ||\n      typeof value.data !== 'string'\n    ) {\n      throw new Error(\n        '\"redacted_reasoning\" parts expect an object with a \"data\" property.',\n      );\n    }\n    return { type: 'redacted_reasoning', value: { data: value.data } };\n  },\n};\n\nconst reasoningSignatureStreamPart: DataStreamPart<\n  'j',\n  'reasoning_signature',\n  { signature: string }\n> = {\n  code: 'j',\n  name: 'reasoning_signature',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('signature' in value) ||\n      typeof value.signature !== 'string'\n    ) {\n      throw new Error(\n        '\"reasoning_signature\" parts expect an object with a \"signature\" property.',\n      );\n    }\n    return {\n      type: 'reasoning_signature',\n      value: { signature: value.signature },\n    };\n  },\n};\n\nconst fileStreamPart: DataStreamPart<\n  'k',\n  'file',\n  {\n    data: string; // base64 encoded data\n    mimeType: string;\n  }\n> = {\n  code: 'k',\n  name: 'file',\n  parse: (value: JSONValue) => {\n    if (\n      value == null ||\n      typeof value !== 'object' ||\n      !('data' in value) ||\n      typeof value.data !== 'string' ||\n      !('mimeType' in value) ||\n      typeof value.mimeType !== 'string'\n    ) {\n      throw new Error(\n        '\"file\" parts expect an object with a \"data\" and \"mimeType\" property.',\n      );\n    }\n    return { type: 'file', value: value as { data: string; mimeType: string } };\n  },\n};\n\nconst dataStreamParts = [\n  textStreamPart,\n  dataStreamPart,\n  errorStreamPart,\n  messageAnnotationsStreamPart,\n  toolCallStreamPart,\n  toolResultStreamPart,\n  toolCallStreamingStartStreamPart,\n  toolCallDeltaStreamPart,\n  finishMessageStreamPart,\n  finishStepStreamPart,\n  startStepStreamPart,\n  reasoningStreamPart,\n  sourcePart,\n  redactedReasoningStreamPart,\n  reasoningSignatureStreamPart,\n  fileStreamPart,\n] as const;\n\nexport const dataStreamPartsByCode = Object.fromEntries(\n  dataStreamParts.map(part => [part.code, part]),\n) as {\n  [K in (typeof dataStreamParts)[number]['code']]: (typeof dataStreamParts)[number];\n};\n\ntype DataStreamParts = (typeof dataStreamParts)[number];\n\n/**\n * Maps the type of a stream part to its value type.\n */\ntype DataStreamPartValueType = {\n  [P in DataStreamParts as P['name']]: ReturnType<P['parse']>['value'];\n};\n\nexport type DataStreamPartType = ReturnType<DataStreamParts['parse']>;\n\n/**\n * The map of prefixes for data in the stream\n *\n * - 0: Text from the LLM response\n * - 1: (OpenAI) function_call responses\n * - 2: custom JSON added by the user using `Data`\n * - 6: (OpenAI) tool_call responses\n *\n * Example:\n * ```\n * 0:Vercel\n * 0:'s\n * 0: AI\n * 0: AI\n * 0: SDK\n * 0: is great\n * 0:!\n * 2: { \"someJson\": \"value\" }\n * 1: {\"function_call\": {\"name\": \"get_current_weather\", \"arguments\": \"{\\\\n\\\\\"location\\\\\": \\\\\"Charlottesville, Virginia\\\\\",\\\\n\\\\\"format\\\\\": \\\\\"celsius\\\\\"\\\\n}\"}}\n * 6: {\"tool_call\": {\"id\": \"tool_0\", \"type\": \"function\", \"function\": {\"name\": \"get_current_weather\", \"arguments\": \"{\\\\n\\\\\"location\\\\\": \\\\\"Charlottesville, Virginia\\\\\",\\\\n\\\\\"format\\\\\": \\\\\"celsius\\\\\"\\\\n}\"}}}\n *```\n */\nexport const DataStreamStringPrefixes = Object.fromEntries(\n  dataStreamParts.map(part => [part.name, part.code]),\n) as {\n  [K in DataStreamParts['name']]: (typeof dataStreamParts)[number]['code'];\n};\n\nexport const validCodes = dataStreamParts.map(part => part.code);\n\n/**\nParses a stream part from a string.\n\n@param line The string to parse.\n@returns The parsed stream part.\n@throws An error if the string cannot be parsed.\n */\nexport const parseDataStreamPart = (line: string): DataStreamPartType => {\n  const firstSeparatorIndex = line.indexOf(':');\n\n  if (firstSeparatorIndex === -1) {\n    throw new Error('Failed to parse stream string. No separator found.');\n  }\n\n  const prefix = line.slice(0, firstSeparatorIndex);\n\n  if (!validCodes.includes(prefix as keyof typeof dataStreamPartsByCode)) {\n    throw new Error(`Failed to parse stream string. Invalid code ${prefix}.`);\n  }\n\n  const code = prefix as keyof typeof dataStreamPartsByCode;\n\n  const textValue = line.slice(firstSeparatorIndex + 1);\n  const jsonValue: JSONValue = JSON.parse(textValue);\n\n  return dataStreamPartsByCode[code].parse(jsonValue);\n};\n\n/**\nPrepends a string with a prefix from the `StreamChunkPrefixes`, JSON-ifies it,\nand appends a new line.\n\nIt ensures type-safety for the part type and value.\n */\nexport function formatDataStreamPart<T extends keyof DataStreamPartValueType>(\n  type: T,\n  value: DataStreamPartValueType[T],\n): DataStreamString {\n  const streamPart = dataStreamParts.find(part => part.name === type);\n\n  if (!streamPart) {\n    throw new Error(`Invalid stream part type: ${type}`);\n  }\n\n  return `${streamPart.code}:${JSON.stringify(value)}\\n`;\n}\n","import { JSONSchema7 } from 'json-schema';\nimport { z } from 'zod';\nimport zodToJsonSchema from 'zod-to-json-schema';\nimport { jsonSchema, Schema } from './schema';\n\nexport function zodSchema<OBJECT>(\n  zodSchema: z.Schema<OBJECT, z.ZodTypeDef, any>,\n  options?: {\n    /**\n     * Enables support for references in the schema.\n     * This is required for recursive schemas, e.g. with `z.lazy`.\n     * However, not all language models and providers support such references.\n     * Defaults to `false`.\n     */\n    useReferences?: boolean;\n  },\n): Schema<OBJECT> {\n  // default to no references (to support openapi conversion for google)\n  const useReferences = options?.useReferences ?? false;\n\n  return jsonSchema(\n    zodToJsonSchema(zodSchema, {\n      $refStrategy: useReferences ? 'root' : 'none',\n      target: 'jsonSchema7', // note: openai mode breaks various gemini conversions\n    }) as JSONSchema7,\n    {\n      validate: value => {\n        const result = zodSchema.safeParse(value);\n        return result.success\n          ? { success: true, value: result.data }\n          : { success: false, error: result.error };\n      },\n    },\n  );\n}\n","import { Validator, validatorSymbol } from '@ai-sdk/provider-utils';\nimport { JSONSchema7 } from 'json-schema';\nimport { z } from 'zod';\nimport { zodSchema } from './zod-schema';\n\n/**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\nconst schemaSymbol = Symbol.for('vercel.ai.schema');\n\nexport type Schema<OBJECT = unknown> = Validator<OBJECT> & {\n  /**\n   * Used to mark schemas so we can support both Zod and custom schemas.\n   */\n  [schemaSymbol]: true;\n\n  /**\n   * Schema type for inference.\n   */\n  _type: OBJECT;\n\n  /**\n   * The JSON Schema for the schema. It is passed to the providers.\n   */\n  readonly jsonSchema: JSONSchema7;\n};\n\n/**\n * Create a schema using a JSON Schema.\n *\n * @param jsonSchema The JSON Schema for the schema.\n * @param options.validate Optional. A validation function for the schema.\n */\nexport function jsonSchema<OBJECT = unknown>(\n  jsonSchema: JSONSchema7,\n  {\n    validate,\n  }: {\n    validate?: (\n      value: unknown,\n    ) => { success: true; value: OBJECT } | { success: false; error: Error };\n  } = {},\n): Schema<OBJECT> {\n  return {\n    [schemaSymbol]: true,\n    _type: undefined as OBJECT, // should never be used directly\n    [validatorSymbol]: true,\n    jsonSchema,\n    validate,\n  };\n}\n\nfunction isSchema(value: unknown): value is Schema {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    schemaSymbol in value &&\n    value[schemaSymbol] === true &&\n    'jsonSchema' in value &&\n    'validate' in value\n  );\n}\n\nexport function asSchema<OBJECT>(\n  schema: z.Schema<OBJECT, z.ZodTypeDef, any> | Schema<OBJECT>,\n): Schema<OBJECT> {\n  return isSchema(schema) ? schema : zodSchema(schema);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/** only globals that common to node and browsers are allowed */\n// eslint-disable-next-line node/no-unsupported-features/es-builtins\nexport const _globalThis = typeof globalThis === 'object' ? globalThis : global;\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// this is autogenerated file, see scripts/version-update.js\nexport const VERSION = '1.9.0';\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { VERSION } from '../version';\n\nconst re = /^(\\d+)\\.(\\d+)\\.(\\d+)(-(.+))?$/;\n\n/**\n * Create a function to test an API version to see if it is compatible with the provided ownVersion.\n *\n * The returned function has the following semantics:\n * - Exact match is always compatible\n * - Major versions must match exactly\n *    - 1.x package cannot use global 2.x package\n *    - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n *    - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n *    - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param ownVersion version which should be checked against\n */\nexport function _makeCompatibilityCheck(\n  ownVersion: string\n): (globalVersion: string) => boolean {\n  const acceptedVersions = new Set<string>([ownVersion]);\n  const rejectedVersions = new Set<string>();\n\n  const myVersionMatch = ownVersion.match(re);\n  if (!myVersionMatch) {\n    // we cannot guarantee compatibility so we always return noop\n    return () => false;\n  }\n\n  const ownVersionParsed = {\n    major: +myVersionMatch[1],\n    minor: +myVersionMatch[2],\n    patch: +myVersionMatch[3],\n    prerelease: myVersionMatch[4],\n  };\n\n  // if ownVersion has a prerelease tag, versions must match exactly\n  if (ownVersionParsed.prerelease != null) {\n    return function isExactmatch(globalVersion: string): boolean {\n      return globalVersion === ownVersion;\n    };\n  }\n\n  function _reject(v: string) {\n    rejectedVersions.add(v);\n    return false;\n  }\n\n  function _accept(v: string) {\n    acceptedVersions.add(v);\n    return true;\n  }\n\n  return function isCompatible(globalVersion: string): boolean {\n    if (acceptedVersions.has(globalVersion)) {\n      return true;\n    }\n\n    if (rejectedVersions.has(globalVersion)) {\n      return false;\n    }\n\n    const globalVersionMatch = globalVersion.match(re);\n    if (!globalVersionMatch) {\n      // cannot parse other version\n      // we cannot guarantee compatibility so we always noop\n      return _reject(globalVersion);\n    }\n\n    const globalVersionParsed = {\n      major: +globalVersionMatch[1],\n      minor: +globalVersionMatch[2],\n      patch: +globalVersionMatch[3],\n      prerelease: globalVersionMatch[4],\n    };\n\n    // if globalVersion has a prerelease tag, versions must match exactly\n    if (globalVersionParsed.prerelease != null) {\n      return _reject(globalVersion);\n    }\n\n    // major versions must match\n    if (ownVersionParsed.major !== globalVersionParsed.major) {\n      return _reject(globalVersion);\n    }\n\n    if (ownVersionParsed.major === 0) {\n      if (\n        ownVersionParsed.minor === globalVersionParsed.minor &&\n        ownVersionParsed.patch <= globalVersionParsed.patch\n      ) {\n        return _accept(globalVersion);\n      }\n\n      return _reject(globalVersion);\n    }\n\n    if (ownVersionParsed.minor <= globalVersionParsed.minor) {\n      return _accept(globalVersion);\n    }\n\n    return _reject(globalVersion);\n  };\n}\n\n/**\n * Test an API version to see if it is compatible with this API.\n *\n * - Exact match is always compatible\n * - Major versions must match exactly\n *    - 1.x package cannot use global 2.x package\n *    - 2.x package cannot use global 1.x package\n * - The minor version of the API module requesting access to the global API must be less than or equal to the minor version of this API\n *    - 1.3 package may use 1.4 global because the later global contains all functions 1.3 expects\n *    - 1.4 package may NOT use 1.3 global because it may try to call functions which don't exist on 1.3\n * - If the major version is 0, the minor version is treated as the major and the patch is treated as the minor\n * - Patch and build tag differences are not considered at this time\n *\n * @param version version of the API requesting an instance of the global API\n */\nexport const isCompatible = _makeCompatibilityCheck(VERSION);\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { MeterProvider } from '../metrics/MeterProvider';\nimport { ContextManager } from '../context/types';\nimport { DiagLogger } from '../diag/types';\nimport { _globalThis } from '../platform';\nimport { TextMapPropagator } from '../propagation/TextMapPropagator';\nimport type { TracerProvider } from '../trace/tracer_provider';\nimport { VERSION } from '../version';\nimport { isCompatible } from './semver';\n\nconst major = VERSION.split('.')[0];\nconst GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(\n  `opentelemetry.js.api.${major}`\n);\n\nconst _global = _globalThis as OTelGlobal;\n\nexport function registerGlobal<Type extends keyof OTelGlobalAPI>(\n  type: Type,\n  instance: OTelGlobalAPI[Type],\n  diag: DiagLogger,\n  allowOverride = false\n): boolean {\n  const api = (_global[GLOBAL_OPENTELEMETRY_API_KEY] = _global[\n    GLOBAL_OPENTELEMETRY_API_KEY\n  ] ?? {\n    version: VERSION,\n  });\n\n  if (!allowOverride && api[type]) {\n    // already registered an API of this type\n    const err = new Error(\n      `@opentelemetry/api: Attempted duplicate registration of API: ${type}`\n    );\n    diag.error(err.stack || err.message);\n    return false;\n  }\n\n  if (api.version !== VERSION) {\n    // All registered APIs must be of the same version exactly\n    const err = new Error(\n      `@opentelemetry/api: Registration of version v${api.version} for ${type} does not match previously registered API v${VERSION}`\n    );\n    diag.error(err.stack || err.message);\n    return false;\n  }\n\n  api[type] = instance;\n  diag.debug(\n    `@opentelemetry/api: Registered a global for ${type} v${VERSION}.`\n  );\n\n  return true;\n}\n\nexport function getGlobal<Type extends keyof OTelGlobalAPI>(\n  type: Type\n): OTelGlobalAPI[Type] | undefined {\n  const globalVersion = _global[GLOBAL_OPENTELEMETRY_API_KEY]?.version;\n  if (!globalVersion || !isCompatible(globalVersion)) {\n    return;\n  }\n  return _global[GLOBAL_OPENTELEMETRY_API_KEY]?.[type];\n}\n\nexport function unregisterGlobal(type: keyof OTelGlobalAPI, diag: DiagLogger) {\n  diag.debug(\n    `@opentelemetry/api: Unregistering a global for ${type} v${VERSION}.`\n  );\n  const api = _global[GLOBAL_OPENTELEMETRY_API_KEY];\n\n  if (api) {\n    delete api[type];\n  }\n}\n\ntype OTelGlobal = {\n  [GLOBAL_OPENTELEMETRY_API_KEY]?: OTelGlobalAPI;\n};\n\ntype OTelGlobalAPI = {\n  version: string;\n\n  diag?: DiagLogger;\n  trace?: TracerProvider;\n  context?: ContextManager;\n  metrics?: MeterProvider;\n  propagation?: TextMapPropagator;\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobal } from '../internal/global-utils';\nimport { ComponentLoggerOptions, DiagLogger, DiagLogFunction } from './types';\n\n/**\n * Component Logger which is meant to be used as part of any component which\n * will add automatically additional namespace in front of the log message.\n * It will then forward all message to global diag logger\n * @example\n * const cLogger = diag.createComponentLogger({ namespace: '@opentelemetry/instrumentation-http' });\n * cLogger.debug('test');\n * // @opentelemetry/instrumentation-http test\n */\nexport class DiagComponentLogger implements DiagLogger {\n  private _namespace: string;\n\n  constructor(props: ComponentLoggerOptions) {\n    this._namespace = props.namespace || 'DiagComponentLogger';\n  }\n\n  public debug(...args: any[]): void {\n    return logProxy('debug', this._namespace, args);\n  }\n\n  public error(...args: any[]): void {\n    return logProxy('error', this._namespace, args);\n  }\n\n  public info(...args: any[]): void {\n    return logProxy('info', this._namespace, args);\n  }\n\n  public warn(...args: any[]): void {\n    return logProxy('warn', this._namespace, args);\n  }\n\n  public verbose(...args: any[]): void {\n    return logProxy('verbose', this._namespace, args);\n  }\n}\n\nfunction logProxy(\n  funcName: keyof DiagLogger,\n  namespace: string,\n  args: any\n): void {\n  const logger = getGlobal('diag');\n  // shortcut if logger not set\n  if (!logger) {\n    return;\n  }\n\n  args.unshift(namespace);\n  return logger[funcName](...(args as Parameters<DiagLogFunction>));\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nexport type DiagLogFunction = (message: string, ...args: unknown[]) => void;\n\n/**\n * Defines an internal diagnostic logger interface which is used to log internal diagnostic\n * messages, you can set the default diagnostic logger via the {@link DiagAPI} setLogger function.\n * API provided implementations include :-\n * - a No-Op {@link createNoopDiagLogger}\n * - a {@link DiagLogLevel} filtering wrapper {@link createLogLevelDiagLogger}\n * - a general Console {@link DiagConsoleLogger} version.\n */\nexport interface DiagLogger {\n  /** Log an error scenario that was not expected and caused the requested operation to fail. */\n  error: DiagLogFunction;\n\n  /**\n   * Log a warning scenario to inform the developer of an issues that should be investigated.\n   * The requested operation may or may not have succeeded or completed.\n   */\n  warn: DiagLogFunction;\n\n  /**\n   * Log a general informational message, this should not affect functionality.\n   * This is also the default logging level so this should NOT be used for logging\n   * debugging level information.\n   */\n  info: DiagLogFunction;\n\n  /**\n   * Log a general debug message that can be useful for identifying a failure.\n   * Information logged at this level may include diagnostic details that would\n   * help identify a failure scenario.\n   * For example: Logging the order of execution of async operations.\n   */\n  debug: DiagLogFunction;\n\n  /**\n   * Log a detailed (verbose) trace level logging that can be used to identify failures\n   * where debug level logging would be insufficient, this level of tracing can include\n   * input and output parameters and as such may include PII information passing through\n   * the API. As such it is recommended that this level of tracing should not be enabled\n   * in a production environment.\n   */\n  verbose: DiagLogFunction;\n}\n\n/**\n * Defines the available internal logging levels for the diagnostic logger, the numeric values\n * of the levels are defined to match the original values from the initial LogLevel to avoid\n * compatibility/migration issues for any implementation that assume the numeric ordering.\n */\nexport enum DiagLogLevel {\n  /** Diagnostic Logging level setting to disable all logging (except and forced logs) */\n  NONE = 0,\n\n  /** Identifies an error scenario */\n  ERROR = 30,\n\n  /** Identifies a warning scenario */\n  WARN = 50,\n\n  /** General informational log message */\n  INFO = 60,\n\n  /** General debug log message */\n  DEBUG = 70,\n\n  /**\n   * Detailed trace level logging should only be used for development, should only be set\n   * in a development environment.\n   */\n  VERBOSE = 80,\n\n  /** Used to set the logging level to include all logging */\n  ALL = 9999,\n}\n\n/**\n * Defines options for ComponentLogger\n */\nexport interface ComponentLoggerOptions {\n  namespace: string;\n}\n\nexport interface DiagLoggerOptions {\n  /**\n   * The {@link DiagLogLevel} used to filter logs sent to the logger.\n   *\n   * @defaultValue DiagLogLevel.INFO\n   */\n  logLevel?: DiagLogLevel;\n\n  /**\n   * Setting this value to `true` will suppress the warning message normally emitted when registering a logger when another logger is already registered.\n   */\n  suppressOverrideMessage?: boolean;\n}\n\nexport interface DiagLoggerApi {\n  /**\n   * Set the global DiagLogger and DiagLogLevel.\n   * If a global diag logger is already set, this will override it.\n   *\n   * @param logger - The {@link DiagLogger} instance to set as the default logger.\n   * @param options - A {@link DiagLoggerOptions} object. If not provided, default values will be set.\n   * @returns `true` if the logger was successfully registered, else `false`\n   */\n  setLogger(logger: DiagLogger, options?: DiagLoggerOptions): boolean;\n\n  /**\n   *\n   * @param logger - The {@link DiagLogger} instance to set as the default logger.\n   * @param logLevel - The {@link DiagLogLevel} used to filter logs sent to the logger. If not provided it will default to {@link DiagLogLevel.INFO}.\n   * @returns `true` if the logger was successfully registered, else `false`\n   */\n  setLogger(logger: DiagLogger, logLevel?: DiagLogLevel): boolean;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagLogFunction, DiagLogger, DiagLogLevel } from '../types';\n\nexport function createLogLevelDiagLogger(\n  maxLevel: DiagLogLevel,\n  logger: DiagLogger\n): DiagLogger {\n  if (maxLevel < DiagLogLevel.NONE) {\n    maxLevel = DiagLogLevel.NONE;\n  } else if (maxLevel > DiagLogLevel.ALL) {\n    maxLevel = DiagLogLevel.ALL;\n  }\n\n  // In case the logger is null or undefined\n  logger = logger || {};\n\n  function _filterFunc(\n    funcName: keyof DiagLogger,\n    theLevel: DiagLogLevel\n  ): DiagLogFunction {\n    const theFunc = logger[funcName];\n\n    if (typeof theFunc === 'function' && maxLevel >= theLevel) {\n      return theFunc.bind(logger);\n    }\n    return function () {};\n  }\n\n  return {\n    error: _filterFunc('error', DiagLogLevel.ERROR),\n    warn: _filterFunc('warn', DiagLogLevel.WARN),\n    info: _filterFunc('info', DiagLogLevel.INFO),\n    debug: _filterFunc('debug', DiagLogLevel.DEBUG),\n    verbose: _filterFunc('verbose', DiagLogLevel.VERBOSE),\n  };\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DiagComponentLogger } from '../diag/ComponentLogger';\nimport { createLogLevelDiagLogger } from '../diag/internal/logLevelLogger';\nimport {\n  ComponentLoggerOptions,\n  DiagLogFunction,\n  DiagLogger,\n  DiagLoggerApi,\n  DiagLogLevel,\n} from '../diag/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\n\nconst API_NAME = 'diag';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry internal\n * diagnostic API\n */\nexport class DiagAPI implements DiagLogger, DiagLoggerApi {\n  private static _instance?: DiagAPI;\n\n  /** Get the singleton instance of the DiagAPI API */\n  public static instance(): DiagAPI {\n    if (!this._instance) {\n      this._instance = new DiagAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Private internal constructor\n   * @private\n   */\n  private constructor() {\n    function _logProxy(funcName: keyof DiagLogger): DiagLogFunction {\n      return function (...args) {\n        const logger = getGlobal('diag');\n        // shortcut if logger not set\n        if (!logger) return;\n        return logger[funcName](...args);\n      };\n    }\n\n    // Using self local variable for minification purposes as 'this' cannot be minified\n    const self = this;\n\n    // DiagAPI specific functions\n\n    const setLogger: DiagLoggerApi['setLogger'] = (\n      logger,\n      optionsOrLogLevel = { logLevel: DiagLogLevel.INFO }\n    ) => {\n      if (logger === self) {\n        // There isn't much we can do here.\n        // Logging to the console might break the user application.\n        // Try to log to self. If a logger was previously registered it will receive the log.\n        const err = new Error(\n          'Cannot use diag as the logger for itself. Please use a DiagLogger implementation like ConsoleDiagLogger or a custom implementation'\n        );\n        self.error(err.stack ?? err.message);\n        return false;\n      }\n\n      if (typeof optionsOrLogLevel === 'number') {\n        optionsOrLogLevel = {\n          logLevel: optionsOrLogLevel,\n        };\n      }\n\n      const oldLogger = getGlobal('diag');\n      const newLogger = createLogLevelDiagLogger(\n        optionsOrLogLevel.logLevel ?? DiagLogLevel.INFO,\n        logger\n      );\n      // There already is an logger registered. We'll let it know before overwriting it.\n      if (oldLogger && !optionsOrLogLevel.suppressOverrideMessage) {\n        const stack = new Error().stack ?? '<failed to generate stacktrace>';\n        oldLogger.warn(`Current logger will be overwritten from ${stack}`);\n        newLogger.warn(\n          `Current logger will overwrite one already registered from ${stack}`\n        );\n      }\n\n      return registerGlobal('diag', newLogger, self, true);\n    };\n\n    self.setLogger = setLogger;\n\n    self.disable = () => {\n      unregisterGlobal(API_NAME, self);\n    };\n\n    self.createComponentLogger = (options: ComponentLoggerOptions) => {\n      return new DiagComponentLogger(options);\n    };\n\n    self.verbose = _logProxy('verbose');\n    self.debug = _logProxy('debug');\n    self.info = _logProxy('info');\n    self.warn = _logProxy('warn');\n    self.error = _logProxy('error');\n  }\n\n  public setLogger!: DiagLoggerApi['setLogger'];\n  /**\n   *\n   */\n  public createComponentLogger!: (\n    options: ComponentLoggerOptions\n  ) => DiagLogger;\n\n  // DiagLogger implementation\n  public verbose!: DiagLogFunction;\n  public debug!: DiagLogFunction;\n  public info!: DiagLogFunction;\n  public warn!: DiagLogFunction;\n  public error!: DiagLogFunction;\n\n  /**\n   * Unregister the global logger and return to Noop\n   */\n  public disable!: () => void;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from './types';\n\n/** Get a key to uniquely identify a context value */\nexport function createContextKey(description: string) {\n  // The specification states that for the same input, multiple calls should\n  // return different keys. Due to the nature of the JS dependency management\n  // system, this creates problems where multiple versions of some package\n  // could hold different keys for the same property.\n  //\n  // Therefore, we use Symbol.for which returns the same key for the same input.\n  return Symbol.for(description);\n}\n\nclass BaseContext implements Context {\n  private _currentContext!: Map<symbol, unknown>;\n\n  /**\n   * Construct a new context which inherits values from an optional parent context.\n   *\n   * @param parentContext a context from which to inherit values\n   */\n  constructor(parentContext?: Map<symbol, unknown>) {\n    // for minification\n    const self = this;\n\n    self._currentContext = parentContext ? new Map(parentContext) : new Map();\n\n    self.getValue = (key: symbol) => self._currentContext.get(key);\n\n    self.setValue = (key: symbol, value: unknown): Context => {\n      const context = new BaseContext(self._currentContext);\n      context._currentContext.set(key, value);\n      return context;\n    };\n\n    self.deleteValue = (key: symbol): Context => {\n      const context = new BaseContext(self._currentContext);\n      context._currentContext.delete(key);\n      return context;\n    };\n  }\n\n  /**\n   * Get a value from the context.\n   *\n   * @param key key which identifies a context value\n   */\n  public getValue!: (key: symbol) => unknown;\n\n  /**\n   * Create a new context which inherits from this context and has\n   * the given key set to the given value.\n   *\n   * @param key context key for which to set the value\n   * @param value value to set for the given key\n   */\n  public setValue!: (key: symbol, value: unknown) => Context;\n\n  /**\n   * Return a new context which inherits from this context but does\n   * not contain a value for the given key.\n   *\n   * @param key context key for which to clear a value\n   */\n  public deleteValue!: (key: symbol) => Context;\n}\n\n/** The root context is used as the default parent context when there is no active context */\nexport const ROOT_CONTEXT: Context = new BaseContext();\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ROOT_CONTEXT } from './context';\nimport * as types from './types';\n\nexport class NoopContextManager implements types.ContextManager {\n  active(): types.Context {\n    return ROOT_CONTEXT;\n  }\n\n  with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n    _context: types.Context,\n    fn: F,\n    thisArg?: ThisParameterType<F>,\n    ...args: A\n  ): ReturnType<F> {\n    return fn.call(thisArg, ...args);\n  }\n\n  bind<T>(_context: types.Context, target: T): T {\n    return target;\n  }\n\n  enable(): this {\n    return this;\n  }\n\n  disable(): this {\n    return this;\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopContextManager } from '../context/NoopContextManager';\nimport { Context, ContextManager } from '../context/types';\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'context';\nconst NOOP_CONTEXT_MANAGER = new NoopContextManager();\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Context API\n */\nexport class ContextAPI {\n  private static _instance?: ContextAPI;\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Context API */\n  public static getInstance(): ContextAPI {\n    if (!this._instance) {\n      this._instance = new ContextAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current context manager.\n   *\n   * @returns true if the context manager was successfully registered, else false\n   */\n  public setGlobalContextManager(contextManager: ContextManager): boolean {\n    return registerGlobal(API_NAME, contextManager, DiagAPI.instance());\n  }\n\n  /**\n   * Get the currently active context\n   */\n  public active(): Context {\n    return this._getContextManager().active();\n  }\n\n  /**\n   * Execute a function with an active context\n   *\n   * @param context context to be active during function execution\n   * @param fn function to execute in a context\n   * @param thisArg optional receiver to be used for calling fn\n   * @param args optional arguments forwarded to fn\n   */\n  public with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(\n    context: Context,\n    fn: F,\n    thisArg?: ThisParameterType<F>,\n    ...args: A\n  ): ReturnType<F> {\n    return this._getContextManager().with(context, fn, thisArg, ...args);\n  }\n\n  /**\n   * Bind a context to a target function or event emitter\n   *\n   * @param context context to bind to the event emitter or function. Defaults to the currently active context\n   * @param target function or event emitter to bind\n   */\n  public bind<T>(context: Context, target: T): T {\n    return this._getContextManager().bind(context, target);\n  }\n\n  private _getContextManager(): ContextManager {\n    return getGlobal(API_NAME) || NOOP_CONTEXT_MANAGER;\n  }\n\n  /** Disable and remove the global context manager */\n  public disable() {\n    this._getContextManager().disable();\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport enum TraceFlags {\n  /** Represents no flag set. */\n  NONE = 0x0,\n  /** Bit to represent whether trace is sampled in trace flags. */\n  SAMPLED = 0x1 << 0,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { SpanContext } from './span_context';\nimport { TraceFlags } from './trace_flags';\n\nexport const INVALID_SPANID = '0000000000000000';\nexport const INVALID_TRACEID = '00000000000000000000000000000000';\nexport const INVALID_SPAN_CONTEXT: SpanContext = {\n  traceId: INVALID_TRACEID,\n  spanId: INVALID_SPANID,\n  traceFlags: TraceFlags.NONE,\n};\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Exception } from '../common/Exception';\nimport { TimeInput } from '../common/Time';\nimport { SpanAttributes } from './attributes';\nimport { INVALID_SPAN_CONTEXT } from './invalid-span-constants';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { SpanStatus } from './status';\nimport { Link } from './link';\n\n/**\n * The NonRecordingSpan is the default {@link Span} that is used when no Span\n * implementation is available. All operations are no-op including context\n * propagation.\n */\nexport class NonRecordingSpan implements Span {\n  constructor(\n    private readonly _spanContext: SpanContext = INVALID_SPAN_CONTEXT\n  ) {}\n\n  // Returns a SpanContext.\n  spanContext(): SpanContext {\n    return this._spanContext;\n  }\n\n  // By default does nothing\n  setAttribute(_key: string, _value: unknown): this {\n    return this;\n  }\n\n  // By default does nothing\n  setAttributes(_attributes: SpanAttributes): this {\n    return this;\n  }\n\n  // By default does nothing\n  addEvent(_name: string, _attributes?: SpanAttributes): this {\n    return this;\n  }\n\n  addLink(_link: Link): this {\n    return this;\n  }\n\n  addLinks(_links: Link[]): this {\n    return this;\n  }\n\n  // By default does nothing\n  setStatus(_status: SpanStatus): this {\n    return this;\n  }\n\n  // By default does nothing\n  updateName(_name: string): this {\n    return this;\n  }\n\n  // By default does nothing\n  end(_endTime?: TimeInput): void {}\n\n  // isRecording always returns false for NonRecordingSpan.\n  isRecording(): boolean {\n    return false;\n  }\n\n  // By default does nothing\n  recordException(_exception: Exception, _time?: TimeInput): void {}\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createContextKey } from '../context/context';\nimport { Context } from '../context/types';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { ContextAPI } from '../api/context';\n\n/**\n * span key\n */\nconst SPAN_KEY = createContextKey('OpenTelemetry Context Key SPAN');\n\n/**\n * Return the span if one exists\n *\n * @param context context to get span from\n */\nexport function getSpan(context: Context): Span | undefined {\n  return (context.getValue(SPAN_KEY) as Span) || undefined;\n}\n\n/**\n * Gets the span from the current context, if one exists.\n */\nexport function getActiveSpan(): Span | undefined {\n  return getSpan(ContextAPI.getInstance().active());\n}\n\n/**\n * Set the span on a context\n *\n * @param context context to use as parent\n * @param span span to set active\n */\nexport function setSpan(context: Context, span: Span): Context {\n  return context.setValue(SPAN_KEY, span);\n}\n\n/**\n * Remove current span stored in the context\n *\n * @param context context to delete span from\n */\nexport function deleteSpan(context: Context): Context {\n  return context.deleteValue(SPAN_KEY);\n}\n\n/**\n * Wrap span context in a NoopSpan and set as span in a new\n * context\n *\n * @param context context to set active span on\n * @param spanContext span context to be wrapped\n */\nexport function setSpanContext(\n  context: Context,\n  spanContext: SpanContext\n): Context {\n  return setSpan(context, new NonRecordingSpan(spanContext));\n}\n\n/**\n * Get the span context of the span if it exists.\n *\n * @param context context to get values from\n */\nexport function getSpanContext(context: Context): SpanContext | undefined {\n  return getSpan(context)?.spanContext();\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nimport { INVALID_SPANID, INVALID_TRACEID } from './invalid-span-constants';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { SpanContext } from './span_context';\n\nconst VALID_TRACEID_REGEX = /^([0-9a-f]{32})$/i;\nconst VALID_SPANID_REGEX = /^[0-9a-f]{16}$/i;\n\nexport function isValidTraceId(traceId: string): boolean {\n  return VALID_TRACEID_REGEX.test(traceId) && traceId !== INVALID_TRACEID;\n}\n\nexport function isValidSpanId(spanId: string): boolean {\n  return VALID_SPANID_REGEX.test(spanId) && spanId !== INVALID_SPANID;\n}\n\n/**\n * Returns true if this {@link SpanContext} is valid.\n * @return true if this {@link SpanContext} is valid.\n */\nexport function isSpanContextValid(spanContext: SpanContext): boolean {\n  return (\n    isValidTraceId(spanContext.traceId) && isValidSpanId(spanContext.spanId)\n  );\n}\n\n/**\n * Wrap the given {@link SpanContext} in a new non-recording {@link Span}\n *\n * @param spanContext span context to be wrapped\n * @returns a new non-recording {@link Span} with the provided context\n */\nexport function wrapSpanContext(spanContext: SpanContext): Span {\n  return new NonRecordingSpan(spanContext);\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { ContextAPI } from '../api/context';\nimport { Context } from '../context/types';\nimport { getSpanContext, setSpan } from '../trace/context-utils';\nimport { NonRecordingSpan } from './NonRecordingSpan';\nimport { Span } from './span';\nimport { isSpanContextValid } from './spancontext-utils';\nimport { SpanOptions } from './SpanOptions';\nimport { SpanContext } from './span_context';\nimport { Tracer } from './tracer';\n\nconst contextApi = ContextAPI.getInstance();\n\n/**\n * No-op implementations of {@link Tracer}.\n */\nexport class NoopTracer implements Tracer {\n  // startSpan starts a noop span.\n  startSpan(\n    name: string,\n    options?: SpanOptions,\n    context = contextApi.active()\n  ): Span {\n    const root = Boolean(options?.root);\n    if (root) {\n      return new NonRecordingSpan();\n    }\n\n    const parentFromContext = context && getSpanContext(context);\n\n    if (\n      isSpanContext(parentFromContext) &&\n      isSpanContextValid(parentFromContext)\n    ) {\n      return new NonRecordingSpan(parentFromContext);\n    } else {\n      return new NonRecordingSpan();\n    }\n  }\n\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    opts: SpanOptions | undefined,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    opts: SpanOptions | undefined,\n    ctx: Context | undefined,\n    fn: F\n  ): ReturnType<F>;\n  startActiveSpan<F extends (span: Span) => ReturnType<F>>(\n    name: string,\n    arg2?: F | SpanOptions,\n    arg3?: F | Context,\n    arg4?: F\n  ): ReturnType<F> | undefined {\n    let opts: SpanOptions | undefined;\n    let ctx: Context | undefined;\n    let fn: F;\n\n    if (arguments.length < 2) {\n      return;\n    } else if (arguments.length === 2) {\n      fn = arg2 as F;\n    } else if (arguments.length === 3) {\n      opts = arg2 as SpanOptions | undefined;\n      fn = arg3 as F;\n    } else {\n      opts = arg2 as SpanOptions | undefined;\n      ctx = arg3 as Context | undefined;\n      fn = arg4 as F;\n    }\n\n    const parentContext = ctx ?? contextApi.active();\n    const span = this.startSpan(name, opts, parentContext);\n    const contextWithSpanSet = setSpan(parentContext, span);\n\n    return contextApi.with(contextWithSpanSet, fn, undefined, span);\n  }\n}\n\nfunction isSpanContext(spanContext: any): spanContext is SpanContext {\n  return (\n    typeof spanContext === 'object' &&\n    typeof spanContext['spanId'] === 'string' &&\n    typeof spanContext['traceId'] === 'string' &&\n    typeof spanContext['traceFlags'] === 'number'\n  );\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Context } from '../context/types';\nimport { NoopTracer } from './NoopTracer';\nimport { Span } from './span';\nimport { SpanOptions } from './SpanOptions';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER = new NoopTracer();\n\n/**\n * Proxy tracer provided by the proxy tracer provider\n */\nexport class ProxyTracer implements Tracer {\n  // When a real implementation is provided, this will be it\n  private _delegate?: Tracer;\n\n  constructor(\n    private _provider: TracerDelegator,\n    public readonly name: string,\n    public readonly version?: string,\n    public readonly options?: TracerOptions\n  ) {}\n\n  startSpan(name: string, options?: SpanOptions, context?: Context): Span {\n    return this._getTracer().startSpan(name, options, context);\n  }\n\n  startActiveSpan<F extends (span: Span) => unknown>(\n    _name: string,\n    _options: F | SpanOptions,\n    _context?: F | Context,\n    _fn?: F\n  ): ReturnType<F> {\n    const tracer = this._getTracer();\n    return Reflect.apply(tracer.startActiveSpan, tracer, arguments);\n  }\n\n  /**\n   * Try to get a tracer from the proxy tracer provider.\n   * If the proxy tracer provider has no delegate, return a noop tracer.\n   */\n  private _getTracer() {\n    if (this._delegate) {\n      return this._delegate;\n    }\n\n    const tracer = this._provider.getDelegateTracer(\n      this.name,\n      this.version,\n      this.options\n    );\n\n    if (!tracer) {\n      return NOOP_TRACER;\n    }\n\n    this._delegate = tracer;\n    return this._delegate;\n  }\n}\n\nexport interface TracerDelegator {\n  getDelegateTracer(\n    name: string,\n    version?: string,\n    options?: TracerOptions\n  ): Tracer | undefined;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NoopTracer } from './NoopTracer';\nimport { Tracer } from './tracer';\nimport { TracerOptions } from './tracer_options';\nimport { TracerProvider } from './tracer_provider';\n\n/**\n * An implementation of the {@link TracerProvider} which returns an impotent\n * Tracer for all calls to `getTracer`.\n *\n * All operations are no-op.\n */\nexport class NoopTracerProvider implements TracerProvider {\n  getTracer(\n    _name?: string,\n    _version?: string,\n    _options?: TracerOptions\n  ): Tracer {\n    return new NoopTracer();\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { Tracer } from './tracer';\nimport { TracerProvider } from './tracer_provider';\nimport { ProxyTracer } from './ProxyTracer';\nimport { NoopTracerProvider } from './NoopTracerProvider';\nimport { TracerOptions } from './tracer_options';\n\nconst NOOP_TRACER_PROVIDER = new NoopTracerProvider();\n\n/**\n * Tracer provider which provides {@link ProxyTracer}s.\n *\n * Before a delegate is set, tracers provided are NoOp.\n *   When a delegate is set, traces are provided from the delegate.\n *   When a delegate is set after tracers have already been provided,\n *   all tracers already provided will use the provided delegate implementation.\n */\nexport class ProxyTracerProvider implements TracerProvider {\n  private _delegate?: TracerProvider;\n\n  /**\n   * Get a {@link ProxyTracer}\n   */\n  getTracer(name: string, version?: string, options?: TracerOptions): Tracer {\n    return (\n      this.getDelegateTracer(name, version, options) ??\n      new ProxyTracer(this, name, version, options)\n    );\n  }\n\n  getDelegate(): TracerProvider {\n    return this._delegate ?? NOOP_TRACER_PROVIDER;\n  }\n\n  /**\n   * Set the delegate tracer provider\n   */\n  setDelegate(delegate: TracerProvider) {\n    this._delegate = delegate;\n  }\n\n  getDelegateTracer(\n    name: string,\n    version?: string,\n    options?: TracerOptions\n  ): Tracer | undefined {\n    return this._delegate?.getTracer(name, version, options);\n  }\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\nexport interface SpanStatus {\n  /** The status code of this message. */\n  code: SpanStatusCode;\n  /** A developer-facing error message. */\n  message?: string;\n}\n\n/**\n * An enumeration of status codes.\n */\nexport enum SpanStatusCode {\n  /**\n   * The default status.\n   */\n  UNSET = 0,\n  /**\n   * The operation has been validated by an Application developer or\n   * Operator to have completed successfully.\n   */\n  OK = 1,\n  /**\n   * The operation contains an error.\n   */\n  ERROR = 2,\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n  getGlobal,\n  registerGlobal,\n  unregisterGlobal,\n} from '../internal/global-utils';\nimport { ProxyTracerProvider } from '../trace/ProxyTracerProvider';\nimport {\n  isSpanContextValid,\n  wrapSpanContext,\n} from '../trace/spancontext-utils';\nimport { Tracer } from '../trace/tracer';\nimport { TracerProvider } from '../trace/tracer_provider';\nimport {\n  deleteSpan,\n  getActiveSpan,\n  getSpan,\n  getSpanContext,\n  setSpan,\n  setSpanContext,\n} from '../trace/context-utils';\nimport { DiagAPI } from './diag';\n\nconst API_NAME = 'trace';\n\n/**\n * Singleton object which represents the entry point to the OpenTelemetry Tracing API\n */\nexport class TraceAPI {\n  private static _instance?: TraceAPI;\n\n  private _proxyTracerProvider = new ProxyTracerProvider();\n\n  /** Empty private constructor prevents end users from constructing a new instance of the API */\n  private constructor() {}\n\n  /** Get the singleton instance of the Trace API */\n  public static getInstance(): TraceAPI {\n    if (!this._instance) {\n      this._instance = new TraceAPI();\n    }\n\n    return this._instance;\n  }\n\n  /**\n   * Set the current global tracer.\n   *\n   * @returns true if the tracer provider was successfully registered, else false\n   */\n  public setGlobalTracerProvider(provider: TracerProvider): boolean {\n    const success = registerGlobal(\n      API_NAME,\n      this._proxyTracerProvider,\n      DiagAPI.instance()\n    );\n    if (success) {\n      this._proxyTracerProvider.setDelegate(provider);\n    }\n    return success;\n  }\n\n  /**\n   * Returns the global tracer provider.\n   */\n  public getTracerProvider(): TracerProvider {\n    return getGlobal(API_NAME) || this._proxyTracerProvider;\n  }\n\n  /**\n   * Returns a tracer from the global tracer provider.\n   */\n  public getTracer(name: string, version?: string): Tracer {\n    return this.getTracerProvider().getTracer(name, version);\n  }\n\n  /** Remove the global tracer provider */\n  public disable() {\n    unregisterGlobal(API_NAME, DiagAPI.instance());\n    this._proxyTracerProvider = new ProxyTracerProvider();\n  }\n\n  public wrapSpanContext = wrapSpanContext;\n\n  public isSpanContextValid = isSpanContextValid;\n\n  public deleteSpan = deleteSpan;\n\n  public getSpan = getSpan;\n\n  public getActiveSpan = getActiveSpan;\n\n  public getSpanContext = getSpanContext;\n\n  public setSpan = setSpan;\n\n  public setSpanContext = setSpanContext;\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { TraceAPI } from './api/trace';\n/** Entrypoint for trace API */\nexport const trace = TraceAPI.getInstance();\n","export function prepareResponseHeaders(\n  headers: HeadersInit | undefined,\n  {\n    contentType,\n    dataStreamVersion,\n  }: { contentType: string; dataStreamVersion?: 'v1' | undefined },\n) {\n  const responseHeaders = new Headers(headers ?? {});\n\n  if (!responseHeaders.has('Content-Type')) {\n    responseHeaders.set('Content-Type', contentType);\n  }\n\n  if (dataStreamVersion !== undefined) {\n    responseHeaders.set('X-Vercel-AI-Data-Stream', dataStreamVersion);\n  }\n\n  return responseHeaders;\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\n/**\nError that is thrown when a model with an unsupported version is used.\n */\nexport class UnsupportedModelVersionError extends AISDKError {\n  constructor() {\n    super({\n      name: 'AI_UnsupportedModelVersionError',\n      message:\n        `Unsupported model version. ` +\n        `AI SDK 4 only supports models that implement specification version \"v1\". ` +\n        `Please upgrade to AI SDK 5 to use this model.`,\n    });\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidArgumentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidArgumentError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly parameter: string;\n  readonly value: unknown;\n\n  constructor({\n    parameter,\n    value,\n    message,\n  }: {\n    parameter: string;\n    value: unknown;\n    message: string;\n  }) {\n    super({\n      name,\n      message: `Invalid argument for parameter ${parameter}: ${message}`,\n    });\n\n    this.parameter = parameter;\n    this.value = value;\n  }\n\n  static isInstance(error: unknown): error is InvalidArgumentError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_RetryError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport type RetryErrorReason =\n  | 'maxRetriesExceeded'\n  | 'errorNotRetryable'\n  | 'abort';\n\nexport class RetryError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  // note: property order determines debugging output\n  readonly reason: RetryErrorReason;\n  readonly lastError: unknown;\n  readonly errors: Array<unknown>;\n\n  constructor({\n    message,\n    reason,\n    errors,\n  }: {\n    message: string;\n    reason: RetryErrorReason;\n    errors: Array<unknown>;\n  }) {\n    super({ name, message });\n\n    this.reason = reason;\n    this.errors = errors;\n\n    // separate our last error to make debugging via log easier:\n    this.lastError = errors[errors.length - 1];\n  }\n\n  static isInstance(error: unknown): error is RetryError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { delay, getErrorMessage, isAbortError } from '@ai-sdk/provider-utils';\nimport { RetryError } from './retry-error';\n\nexport type RetryFunction = <OUTPUT>(\n  fn: () => PromiseLike<OUTPUT>,\n) => PromiseLike<OUTPUT>;\n\n/**\nThe `retryWithExponentialBackoff` strategy retries a failed API call with an exponential backoff.\nYou can configure the maximum number of retries, the initial delay, and the backoff factor.\n */\nexport const retryWithExponentialBackoff =\n  ({\n    maxRetries = 2,\n    initialDelayInMs = 2000,\n    backoffFactor = 2,\n  } = {}): RetryFunction =>\n  async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n    _retryWithExponentialBackoff(f, {\n      maxRetries,\n      delayInMs: initialDelayInMs,\n      backoffFactor,\n    });\n\nasync function _retryWithExponentialBackoff<OUTPUT>(\n  f: () => PromiseLike<OUTPUT>,\n  {\n    maxRetries,\n    delayInMs,\n    backoffFactor,\n  }: { maxRetries: number; delayInMs: number; backoffFactor: number },\n  errors: unknown[] = [],\n): Promise<OUTPUT> {\n  try {\n    return await f();\n  } catch (error) {\n    if (isAbortError(error)) {\n      throw error; // don't retry when the request was aborted\n    }\n\n    if (maxRetries === 0) {\n      throw error; // don't wrap the error when retries are disabled\n    }\n\n    const errorMessage = getErrorMessage(error);\n    const newErrors = [...errors, error];\n    const tryNumber = newErrors.length;\n\n    if (tryNumber > maxRetries) {\n      throw new RetryError({\n        message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,\n        reason: 'maxRetriesExceeded',\n        errors: newErrors,\n      });\n    }\n\n    if (\n      error instanceof Error &&\n      APICallError.isInstance(error) &&\n      error.isRetryable === true &&\n      tryNumber <= maxRetries\n    ) {\n      await delay(delayInMs);\n      return _retryWithExponentialBackoff(\n        f,\n        { maxRetries, delayInMs: backoffFactor * delayInMs, backoffFactor },\n        newErrors,\n      );\n    }\n\n    if (tryNumber === 1) {\n      throw error; // don't wrap the error when a non-retryable error occurs on the first try\n    }\n\n    throw new RetryError({\n      message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,\n      reason: 'errorNotRetryable',\n      errors: newErrors,\n    });\n  }\n}\n","import { InvalidArgumentError } from '../../errors/invalid-argument-error';\nimport {\n  RetryFunction,\n  retryWithExponentialBackoff,\n} from '../../util/retry-with-exponential-backoff';\n\n/**\n * Validate and prepare retries.\n */\nexport function prepareRetries({\n  maxRetries,\n}: {\n  maxRetries: number | undefined;\n}): {\n  maxRetries: number;\n  retry: RetryFunction;\n} {\n  if (maxRetries != null) {\n    if (!Number.isInteger(maxRetries)) {\n      throw new InvalidArgumentError({\n        parameter: 'maxRetries',\n        value: maxRetries,\n        message: 'maxRetries must be an integer',\n      });\n    }\n\n    if (maxRetries < 0) {\n      throw new InvalidArgumentError({\n        parameter: 'maxRetries',\n        value: maxRetries,\n        message: 'maxRetries must be >= 0',\n      });\n    }\n  }\n\n  const maxRetriesResult = maxRetries ?? 2;\n\n  return {\n    maxRetries: maxRetriesResult,\n    retry: retryWithExponentialBackoff({ maxRetries: maxRetriesResult }),\n  };\n}\n","import { TelemetrySettings } from './telemetry-settings';\n\nexport function assembleOperationName({\n  operationId,\n  telemetry,\n}: {\n  operationId: string;\n  telemetry?: TelemetrySettings;\n}) {\n  return {\n    // standardized operation and resource name:\n    'operation.name': `${operationId}${\n      telemetry?.functionId != null ? ` ${telemetry.functionId}` : ''\n    }`,\n    'resource.name': telemetry?.functionId,\n\n    // detailed, AI SDK specific data:\n    'ai.operationId': operationId,\n    'ai.telemetry.functionId': telemetry?.functionId,\n  };\n}\n","import { Attributes } from '@opentelemetry/api';\nimport { CallSettings } from '../prompt/call-settings';\nimport { TelemetrySettings } from './telemetry-settings';\n\nexport function getBaseTelemetryAttributes({\n  model,\n  settings,\n  telemetry,\n  headers,\n}: {\n  model: { modelId: string; provider: string };\n  settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n  telemetry: TelemetrySettings | undefined;\n  headers: Record<string, string | undefined> | undefined;\n}): Attributes {\n  return {\n    'ai.model.provider': model.provider,\n    'ai.model.id': model.modelId,\n\n    // settings:\n    ...Object.entries(settings).reduce((attributes, [key, value]) => {\n      attributes[`ai.settings.${key}`] = value;\n      return attributes;\n    }, {} as Attributes),\n\n    // add metadata as attributes:\n    ...Object.entries(telemetry?.metadata ?? {}).reduce(\n      (attributes, [key, value]) => {\n        attributes[`ai.telemetry.metadata.${key}`] = value;\n        return attributes;\n      },\n      {} as Attributes,\n    ),\n\n    // request headers\n    ...Object.entries(headers ?? {}).reduce((attributes, [key, value]) => {\n      if (value !== undefined) {\n        attributes[`ai.request.headers.${key}`] = value;\n      }\n      return attributes;\n    }, {} as Attributes),\n  };\n}\n","import { Span, SpanContext, Tracer } from '@opentelemetry/api';\n\n/**\n * Tracer implementation that does nothing (null object).\n */\nexport const noopTracer: Tracer = {\n  startSpan(): Span {\n    return noopSpan;\n  },\n\n  startActiveSpan<F extends (span: Span) => unknown>(\n    name: unknown,\n    arg1: unknown,\n    arg2?: unknown,\n    arg3?: F,\n  ): ReturnType<any> {\n    if (typeof arg1 === 'function') {\n      return arg1(noopSpan);\n    }\n    if (typeof arg2 === 'function') {\n      return arg2(noopSpan);\n    }\n    if (typeof arg3 === 'function') {\n      return arg3(noopSpan);\n    }\n  },\n};\n\nconst noopSpan: Span = {\n  spanContext() {\n    return noopSpanContext;\n  },\n  setAttribute() {\n    return this;\n  },\n  setAttributes() {\n    return this;\n  },\n  addEvent() {\n    return this;\n  },\n  addLink() {\n    return this;\n  },\n  addLinks() {\n    return this;\n  },\n  setStatus() {\n    return this;\n  },\n  updateName() {\n    return this;\n  },\n  end() {\n    return this;\n  },\n  isRecording() {\n    return false;\n  },\n  recordException() {\n    return this;\n  },\n};\n\nconst noopSpanContext: SpanContext = {\n  traceId: '',\n  spanId: '',\n  traceFlags: 0,\n};\n","import { Tracer, trace } from '@opentelemetry/api';\nimport { noopTracer } from './noop-tracer';\n\nexport function getTracer({\n  isEnabled = false,\n  tracer,\n}: {\n  isEnabled?: boolean;\n  tracer?: Tracer;\n} = {}): Tracer {\n  if (!isEnabled) {\n    return noopTracer;\n  }\n\n  if (tracer) {\n    return tracer;\n  }\n\n  return trace.getTracer('ai');\n}\n","import { Attributes, Span, Tracer, SpanStatusCode } from '@opentelemetry/api';\n\nexport function recordSpan<T>({\n  name,\n  tracer,\n  attributes,\n  fn,\n  endWhenDone = true,\n}: {\n  name: string;\n  tracer: Tracer;\n  attributes: Attributes;\n  fn: (span: Span) => Promise<T>;\n  endWhenDone?: boolean;\n}) {\n  return tracer.startActiveSpan(name, { attributes }, async span => {\n    try {\n      const result = await fn(span);\n\n      if (endWhenDone) {\n        span.end();\n      }\n\n      return result;\n    } catch (error) {\n      try {\n        recordErrorOnSpan(span, error);\n      } finally {\n        // always stop the span when there is an error:\n        span.end();\n      }\n\n      throw error;\n    }\n  });\n}\n\n/**\n * Record an error on a span. If the error is an instance of Error, an exception event will be recorded on the span, otherwise\n * the span will be set to an error status.\n *\n * @param span - The span to record the error on.\n * @param error - The error to record on the span.\n */\nexport function recordErrorOnSpan(span: Span, error: unknown) {\n  if (error instanceof Error) {\n    span.recordException({\n      name: error.name,\n      message: error.message,\n      stack: error.stack,\n    });\n    span.setStatus({\n      code: SpanStatusCode.ERROR,\n      message: error.message,\n    });\n  } else {\n    span.setStatus({ code: SpanStatusCode.ERROR });\n  }\n}\n","import type { Attributes, AttributeValue } from '@opentelemetry/api';\nimport type { TelemetrySettings } from './telemetry-settings';\n\nexport function selectTelemetryAttributes({\n  telemetry,\n  attributes,\n}: {\n  telemetry?: TelemetrySettings;\n  attributes: {\n    [attributeKey: string]:\n      | AttributeValue\n      | { input: () => AttributeValue | undefined }\n      | { output: () => AttributeValue | undefined }\n      | undefined;\n  };\n}): Attributes {\n  // when telemetry is disabled, return an empty object to avoid serialization overhead:\n  if (telemetry?.isEnabled !== true) {\n    return {};\n  }\n\n  return Object.entries(attributes).reduce((attributes, [key, value]) => {\n    if (value === undefined) {\n      return attributes;\n    }\n\n    // input value, check if it should be recorded:\n    if (\n      typeof value === 'object' &&\n      'input' in value &&\n      typeof value.input === 'function'\n    ) {\n      // default to true:\n      if (telemetry?.recordInputs === false) {\n        return attributes;\n      }\n\n      const result = value.input();\n\n      return result === undefined\n        ? attributes\n        : { ...attributes, [key]: result };\n    }\n\n    // output value, check if it should be recorded:\n    if (\n      typeof value === 'object' &&\n      'output' in value &&\n      typeof value.output === 'function'\n    ) {\n      // default to true:\n      if (telemetry?.recordOutputs === false) {\n        return attributes;\n      }\n\n      const result = value.output();\n\n      return result === undefined\n        ? attributes\n        : { ...attributes, [key]: result };\n    }\n\n    // value is an attribute value already:\n    return { ...attributes, [key]: value };\n  }, {});\n}\n","/**\n * Splits an array into chunks of a specified size.\n *\n * @template T - The type of elements in the array.\n * @param {T[]} array - The array to split.\n * @param {number} chunkSize - The size of each chunk.\n * @returns {T[][]} - A new array containing the chunks.\n */\nexport function splitArray<T>(array: T[], chunkSize: number): T[][] {\n  if (chunkSize <= 0) {\n    throw new Error('chunkSize must be greater than 0');\n  }\n\n  const result = [];\n  for (let i = 0; i < array.length; i += chunkSize) {\n    result.push(array.slice(i, i + chunkSize));\n  }\n\n  return result;\n}\n","import { prepareRetries } from '../prompt/prepare-retries';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { Embedding, EmbeddingModel } from '../types';\nimport { splitArray } from '../util/split-array';\nimport { EmbedManyResult } from './embed-many-result';\nimport { UnsupportedModelVersionError } from '../../errors/unsupported-model-version-error';\n\n/**\nEmbed several values using an embedding model. The type of the value is defined\nby the embedding model.\n\n`embedMany` automatically splits large requests into smaller chunks if the model\nhas a limit on how many embeddings can be generated in a single call.\n\n@param model - The embedding model to use.\n@param values - The values that should be embedded.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@returns A result object that contains the embeddings, the value, and additional information.\n */\nexport async function embedMany<VALUE>({\n  model,\n  values,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers,\n  experimental_telemetry: telemetry,\n}: {\n  /**\nThe embedding model to use.\n     */\n  model: EmbeddingModel<VALUE>;\n\n  /**\nThe values that should be embedded.\n   */\n  values: Array<VALUE>;\n\n  /**\nMaximum number of retries per embedding model call. Set to 0 to disable retries.\n\n@default 2\n   */\n  maxRetries?: number;\n\n  /**\nAbort signal.\n */\n  abortSignal?: AbortSignal;\n\n  /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n  headers?: Record<string, string>;\n\n  /**\n   * Optional telemetry configuration (experimental).\n   */\n  experimental_telemetry?: TelemetrySettings;\n}): Promise<EmbedManyResult<VALUE>> {\n  if (typeof model === 'string' || model.specificationVersion !== 'v1') {\n    throw new UnsupportedModelVersionError();\n  }\n\n  const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers,\n    settings: { maxRetries },\n  });\n\n  const tracer = getTracer(telemetry);\n\n  return recordSpan({\n    name: 'ai.embedMany',\n    attributes: selectTelemetryAttributes({\n      telemetry,\n      attributes: {\n        ...assembleOperationName({ operationId: 'ai.embedMany', telemetry }),\n        ...baseTelemetryAttributes,\n        // specific settings that only make sense on the outer level:\n        'ai.values': {\n          input: () => values.map(value => JSON.stringify(value)),\n        },\n      },\n    }),\n    tracer,\n    fn: async span => {\n      const maxEmbeddingsPerCall = model.maxEmbeddingsPerCall;\n\n      // the model has not specified limits on\n      // how many embeddings can be generated in a single call\n      if (maxEmbeddingsPerCall == null) {\n        const { embeddings, usage } = await retry(() => {\n          // nested spans to align with the embedMany telemetry data:\n          return recordSpan({\n            name: 'ai.embedMany.doEmbed',\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: 'ai.embedMany.doEmbed',\n                  telemetry,\n                }),\n                ...baseTelemetryAttributes,\n                // specific settings that only make sense on the outer level:\n                'ai.values': {\n                  input: () => values.map(value => JSON.stringify(value)),\n                },\n              },\n            }),\n            tracer,\n            fn: async doEmbedSpan => {\n              const modelResponse = await model.doEmbed({\n                values,\n                abortSignal,\n                headers,\n              });\n\n              const embeddings = modelResponse.embeddings;\n              const usage = modelResponse.usage ?? { tokens: NaN };\n\n              doEmbedSpan.setAttributes(\n                selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    'ai.embeddings': {\n                      output: () =>\n                        embeddings.map(embedding => JSON.stringify(embedding)),\n                    },\n                    'ai.usage.tokens': usage.tokens,\n                  },\n                }),\n              );\n\n              return { embeddings, usage };\n            },\n          });\n        });\n\n        span.setAttributes(\n          selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              'ai.embeddings': {\n                output: () =>\n                  embeddings.map(embedding => JSON.stringify(embedding)),\n              },\n              'ai.usage.tokens': usage.tokens,\n            },\n          }),\n        );\n\n        return new DefaultEmbedManyResult({ values, embeddings, usage });\n      }\n\n      // split the values into chunks that are small enough for the model:\n      const valueChunks = splitArray(values, maxEmbeddingsPerCall);\n\n      // serially embed the chunks:\n      const embeddings: Array<Embedding> = [];\n      let tokens = 0;\n\n      for (const chunk of valueChunks) {\n        const { embeddings: responseEmbeddings, usage } = await retry(() => {\n          // nested spans to align with the embedMany telemetry data:\n          return recordSpan({\n            name: 'ai.embedMany.doEmbed',\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: 'ai.embedMany.doEmbed',\n                  telemetry,\n                }),\n                ...baseTelemetryAttributes,\n                // specific settings that only make sense on the outer level:\n                'ai.values': {\n                  input: () => chunk.map(value => JSON.stringify(value)),\n                },\n              },\n            }),\n            tracer,\n            fn: async doEmbedSpan => {\n              const modelResponse = await model.doEmbed({\n                values: chunk,\n                abortSignal,\n                headers,\n              });\n\n              const embeddings = modelResponse.embeddings;\n              const usage = modelResponse.usage ?? { tokens: NaN };\n\n              doEmbedSpan.setAttributes(\n                selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    'ai.embeddings': {\n                      output: () =>\n                        embeddings.map(embedding => JSON.stringify(embedding)),\n                    },\n                    'ai.usage.tokens': usage.tokens,\n                  },\n                }),\n              );\n\n              return { embeddings, usage };\n            },\n          });\n        });\n\n        embeddings.push(...responseEmbeddings);\n        tokens += usage.tokens;\n      }\n\n      span.setAttributes(\n        selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            'ai.embeddings': {\n              output: () =>\n                embeddings.map(embedding => JSON.stringify(embedding)),\n            },\n            'ai.usage.tokens': tokens,\n          },\n        }),\n      );\n\n      return new DefaultEmbedManyResult({\n        values,\n        embeddings,\n        usage: { tokens },\n      });\n    },\n  });\n}\n\nclass DefaultEmbedManyResult<VALUE> implements EmbedManyResult<VALUE> {\n  readonly values: EmbedManyResult<VALUE>['values'];\n  readonly embeddings: EmbedManyResult<VALUE>['embeddings'];\n  readonly usage: EmbedManyResult<VALUE>['usage'];\n\n  constructor(options: {\n    values: EmbedManyResult<VALUE>['values'];\n    embeddings: EmbedManyResult<VALUE>['embeddings'];\n    usage: EmbedManyResult<VALUE>['usage'];\n  }) {\n    this.values = options.values;\n    this.embeddings = options.embeddings;\n    this.usage = options.usage;\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { LanguageModelResponseMetadata } from '../core/types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../core/types/usage';\nimport { FinishReason } from '../core';\n\nconst name = 'AI_NoObjectGeneratedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\nThrown when no object could be generated. This can have several causes:\n\n- The model failed to generate a response.\n- The model generated a response that could not be parsed.\n- The model generated a response that could not be validated against the schema.\n\nThe error contains the following properties:\n\n- `text`: The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n */\nexport class NoObjectGeneratedError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  /**\n  The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n   */\n  readonly text: string | undefined;\n\n  /**\n  The response metadata.\n   */\n  readonly response: LanguageModelResponseMetadata | undefined;\n\n  /**\n  The usage of the model.\n   */\n  readonly usage: LanguageModelUsage | undefined;\n\n  /**\n  Reason why the model finished generating a response.\n   */\n  readonly finishReason: FinishReason | undefined;\n\n  constructor({\n    message = 'No object generated.',\n    cause,\n    text,\n    response,\n    usage,\n    finishReason,\n  }: {\n    message?: string;\n    cause?: Error;\n    text?: string;\n    response: LanguageModelResponseMetadata;\n    usage: LanguageModelUsage;\n    finishReason: FinishReason;\n  }) {\n    super({ name, message, cause });\n\n    this.text = text;\n    this.response = response;\n    this.usage = usage;\n    this.finishReason = finishReason;\n  }\n\n  static isInstance(error: unknown): error is NoObjectGeneratedError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n\nexport function verifyNoObjectGeneratedError(\n  error: unknown,\n  expected: {\n    message: string;\n    response: LanguageModelResponseMetadata;\n    usage: LanguageModelUsage;\n    finishReason: FinishReason;\n  },\n) {\n  expect(NoObjectGeneratedError.isInstance(error)).toBeTruthy();\n  const noObjectGeneratedError = error as NoObjectGeneratedError;\n  expect(noObjectGeneratedError.message).toStrictEqual(expected.message);\n  expect(noObjectGeneratedError.response).toStrictEqual(expected.response);\n  expect(noObjectGeneratedError.usage).toStrictEqual(expected.usage);\n  expect(noObjectGeneratedError.finishReason).toStrictEqual(\n    expected.finishReason,\n  );\n}\n","import {\n  convertBase64ToUint8Array,\n  convertUint8ArrayToBase64,\n} from '@ai-sdk/provider-utils';\nimport { InvalidDataContentError } from './invalid-data-content-error';\nimport { z } from 'zod';\n\n/**\nData content. Can either be a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer.\n */\nexport type DataContent = string | Uint8Array | ArrayBuffer | Buffer;\n\n/**\n@internal\n */\nexport const dataContentSchema: z.ZodType<DataContent> = z.union([\n  z.string(),\n  z.instanceof(Uint8Array),\n  z.instanceof(ArrayBuffer),\n  z.custom(\n    // Buffer might not be available in some environments such as CloudFlare:\n    (value: unknown): value is Buffer =>\n      globalThis.Buffer?.isBuffer(value) ?? false,\n    { message: 'Must be a Buffer' },\n  ),\n]);\n\n/**\nConverts data content to a base64-encoded string.\n\n@param content - Data content to convert.\n@returns Base64-encoded string.\n*/\nexport function convertDataContentToBase64String(content: DataContent): string {\n  if (typeof content === 'string') {\n    return content;\n  }\n\n  if (content instanceof ArrayBuffer) {\n    return convertUint8ArrayToBase64(new Uint8Array(content));\n  }\n\n  return convertUint8ArrayToBase64(content);\n}\n\n/**\nConverts data content to a Uint8Array.\n\n@param content - Data content to convert.\n@returns Uint8Array.\n */\nexport function convertDataContentToUint8Array(\n  content: DataContent,\n): Uint8Array {\n  if (content instanceof Uint8Array) {\n    return content;\n  }\n\n  if (typeof content === 'string') {\n    try {\n      return convertBase64ToUint8Array(content);\n    } catch (error) {\n      throw new InvalidDataContentError({\n        message:\n          'Invalid data content. Content string is not a base64-encoded media.',\n        content,\n        cause: error,\n      });\n    }\n  }\n\n  if (content instanceof ArrayBuffer) {\n    return new Uint8Array(content);\n  }\n\n  throw new InvalidDataContentError({ content });\n}\n\n/**\n * Converts a Uint8Array to a string of text.\n *\n * @param uint8Array - The Uint8Array to convert.\n * @returns The converted string.\n */\nexport function convertUint8ArrayToText(uint8Array: Uint8Array): string {\n  try {\n    return new TextDecoder().decode(uint8Array);\n  } catch (error) {\n    throw new Error('Error decoding Uint8Array to text');\n  }\n}\n","import { JSONValue } from '@ai-sdk/provider';\nimport { z } from 'zod';\n\nexport const jsonValueSchema: z.ZodType<JSONValue> = z.lazy(() =>\n  z.union([\n    z.null(),\n    z.string(),\n    z.number(),\n    z.boolean(),\n    z.record(z.string(), jsonValueSchema),\n    z.array(jsonValueSchema),\n  ]),\n);\n","import { LanguageModelV1ProviderMetadata } from '@ai-sdk/provider';\nimport { z } from 'zod';\nimport { jsonValueSchema } from './json-value';\n\n/**\nAdditional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be\nfully encapsulated in the provider.\n */\nexport type ProviderMetadata = LanguageModelV1ProviderMetadata;\n\n/**\nAdditional provider-specific options.\n\nThey are passed through to the provider from the AI SDK and enable\nprovider-specific functionality that can be fully encapsulated in the provider.\n */\n// TODO change to LanguageModelV2ProviderOptions in language model v2\nexport type ProviderOptions = LanguageModelV1ProviderMetadata;\n\nexport const providerMetadataSchema: z.ZodType<ProviderMetadata> = z.record(\n  z.string(),\n  z.record(z.string(), jsonValueSchema),\n);\n","import { z } from 'zod';\n\nexport type ToolResultContent = Array<\n  | {\n      type: 'text';\n      text: string;\n    }\n  | {\n      type: 'image';\n      data: string; // base64 encoded png image, e.g. screenshot\n      mimeType?: string; // e.g. 'image/png';\n    }\n>;\n\nexport const toolResultContentSchema: z.ZodType<ToolResultContent> = z.array(\n  z.union([\n    z.object({ type: z.literal('text'), text: z.string() }),\n    z.object({\n      type: z.literal('image'),\n      data: z.string(),\n      mimeType: z.string().optional(),\n    }),\n  ]),\n);\n\nexport function isToolResultContent(\n  value: unknown,\n): value is ToolResultContent {\n  if (!Array.isArray(value) || value.length === 0) {\n    return false;\n  }\n\n  return value.every(part => {\n    if (typeof part !== 'object' || part === null) {\n      return false;\n    }\n\n    if (part.type === 'text') {\n      return typeof part.text === 'string';\n    }\n\n    if (part.type === 'image') {\n      return (\n        typeof part.data === 'string' &&\n        (part.mimeType === undefined || typeof part.mimeType === 'string')\n      );\n    }\n\n    return false;\n  });\n}\n","import { z } from 'zod';\nimport {\n  ProviderMetadata,\n  providerMetadataSchema,\n  ProviderOptions,\n} from '../types/provider-metadata';\nimport { DataContent, dataContentSchema } from './data-content';\nimport {\n  ToolResultContent,\n  toolResultContentSchema,\n} from './tool-result-content';\n\n/**\nText content part of a prompt. It contains a string of text.\n */\nexport interface TextPart {\n  type: 'text';\n\n  /**\nThe text content.\n   */\n  text: string;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n */\n  experimental_providerMetadata?: ProviderMetadata;\n}\n\n/**\n@internal\n */\nexport const textPartSchema: z.ZodType<TextPart> = z.object({\n  type: z.literal('text'),\n  text: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n  experimental_providerMetadata: providerMetadataSchema.optional(),\n});\n\n/**\nImage content part of a prompt. It contains an image.\n */\nexport interface ImagePart {\n  type: 'image';\n\n  /**\nImage data. Can either be:\n\n- data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer\n- URL: a URL that points to the image\n   */\n  image: DataContent | URL;\n\n  /**\nOptional mime type of the image.\n   */\n  mimeType?: string;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n */\n  experimental_providerMetadata?: ProviderMetadata;\n}\n\n/**\n@internal\n */\nexport const imagePartSchema: z.ZodType<ImagePart> = z.object({\n  type: z.literal('image'),\n  image: z.union([dataContentSchema, z.instanceof(URL)]),\n  mimeType: z.string().optional(),\n  providerOptions: providerMetadataSchema.optional(),\n  experimental_providerMetadata: providerMetadataSchema.optional(),\n});\n\n/**\nFile content part of a prompt. It contains a file.\n */\nexport interface FilePart {\n  type: 'file';\n\n  /**\nFile data. Can either be:\n\n- data: a base64-encoded string, a Uint8Array, an ArrayBuffer, or a Buffer\n- URL: a URL that points to the image\n   */\n  data: DataContent | URL;\n\n  /**\nOptional filename of the file.\n   */\n  filename?: string;\n\n  /**\nMime type of the file.\n   */\n  mimeType: string;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n */\n  experimental_providerMetadata?: ProviderMetadata;\n}\n\n/**\n@internal\n */\nexport const filePartSchema: z.ZodType<FilePart> = z.object({\n  type: z.literal('file'),\n  data: z.union([dataContentSchema, z.instanceof(URL)]),\n  filename: z.string().optional(),\n  mimeType: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n  experimental_providerMetadata: providerMetadataSchema.optional(),\n});\n\n/**\n * Reasoning content part of a prompt. It contains a reasoning.\n */\nexport interface ReasoningPart {\n  type: 'reasoning';\n\n  /**\nThe reasoning text.\n   */\n  text: string;\n\n  /**\nAn optional signature for verifying that the reasoning originated from the model.\n   */\n  signature?: string;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n */\n  experimental_providerMetadata?: ProviderMetadata;\n}\n\n/**\n@internal\n */\nexport const reasoningPartSchema: z.ZodType<ReasoningPart> = z.object({\n  type: z.literal('reasoning'),\n  text: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n  experimental_providerMetadata: providerMetadataSchema.optional(),\n});\n\n/**\nRedacted reasoning content part of a prompt.\n */\nexport interface RedactedReasoningPart {\n  type: 'redacted-reasoning';\n\n  /**\nRedacted reasoning data.\n   */\n  data: string;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n */\n  experimental_providerMetadata?: ProviderMetadata;\n}\n\n/**\n@internal\n */\nexport const redactedReasoningPartSchema: z.ZodType<RedactedReasoningPart> =\n  z.object({\n    type: z.literal('redacted-reasoning'),\n    data: z.string(),\n    providerOptions: providerMetadataSchema.optional(),\n    experimental_providerMetadata: providerMetadataSchema.optional(),\n  });\n\n/**\nTool call content part of a prompt. It contains a tool call (usually generated by the AI model).\n */\nexport interface ToolCallPart {\n  type: 'tool-call';\n\n  /**\nID of the tool call. This ID is used to match the tool call with the tool result.\n */\n  toolCallId: string;\n\n  /**\nName of the tool that is being called.\n */\n  toolName: string;\n\n  /**\nArguments of the tool call. This is a JSON-serializable object that matches the tool's input schema.\n   */\n  args: unknown;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n */\n  experimental_providerMetadata?: ProviderMetadata;\n}\n\n/**\n@internal\n */\nexport const toolCallPartSchema: z.ZodType<ToolCallPart> = z.object({\n  type: z.literal('tool-call'),\n  toolCallId: z.string(),\n  toolName: z.string(),\n  args: z.unknown(),\n  providerOptions: providerMetadataSchema.optional(),\n  experimental_providerMetadata: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolCallPart>; // necessary bc args is optional on Zod type\n\n/**\nTool result content part of a prompt. It contains the result of the tool call with the matching ID.\n */\nexport interface ToolResultPart {\n  type: 'tool-result';\n\n  /**\nID of the tool call that this result is associated with.\n */\n  toolCallId: string;\n\n  /**\nName of the tool that generated this result.\n  */\n  toolName: string;\n\n  /**\nResult of the tool call. This is a JSON-serializable object.\n   */\n  result: unknown;\n\n  /**\nMulti-part content of the tool result. Only for tools that support multipart results.\n   */\n  experimental_content?: ToolResultContent;\n\n  /**\nOptional flag if the result is an error or an error message.\n   */\n  isError?: boolean;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n */\n  experimental_providerMetadata?: ProviderMetadata;\n}\n\n/**\n@internal\n */\nexport const toolResultPartSchema: z.ZodType<ToolResultPart> = z.object({\n  type: z.literal('tool-result'),\n  toolCallId: z.string(),\n  toolName: z.string(),\n  result: z.unknown(),\n  content: toolResultContentSchema.optional(),\n  isError: z.boolean().optional(),\n  providerOptions: providerMetadataSchema.optional(),\n  experimental_providerMetadata: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolResultPart>; // necessary bc result is optional on Zod type\n","import { z } from 'zod';\nimport { ProviderMetadata } from '../types';\nimport {\n  providerMetadataSchema,\n  ProviderOptions,\n} from '../types/provider-metadata';\nimport {\n  FilePart,\n  filePartSchema,\n  ImagePart,\n  imagePartSchema,\n  ReasoningPart,\n  reasoningPartSchema,\n  RedactedReasoningPart,\n  redactedReasoningPartSchema,\n  TextPart,\n  textPartSchema,\n  ToolCallPart,\n  toolCallPartSchema,\n  ToolResultPart,\n  toolResultPartSchema,\n} from './content-part';\n\n/**\n A system message. It can contain system information.\n\n Note: using the \"system\" part of the prompt is strongly preferred\n to increase the resilience against prompt injection attacks,\n and because not all providers support several system messages.\n */\nexport type CoreSystemMessage = {\n  role: 'system';\n  content: string;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n */\n  experimental_providerMetadata?: ProviderMetadata;\n};\n\nexport const coreSystemMessageSchema: z.ZodType<CoreSystemMessage> = z.object({\n  role: z.literal('system'),\n  content: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n  experimental_providerMetadata: providerMetadataSchema.optional(),\n});\n\n/**\nA user message. It can contain text or a combination of text and images.\n */\nexport type CoreUserMessage = {\n  role: 'user';\n  content: UserContent;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n*/\n  experimental_providerMetadata?: ProviderMetadata;\n};\n\nexport const coreUserMessageSchema: z.ZodType<CoreUserMessage> = z.object({\n  role: z.literal('user'),\n  content: z.union([\n    z.string(),\n    z.array(z.union([textPartSchema, imagePartSchema, filePartSchema])),\n  ]),\n  providerOptions: providerMetadataSchema.optional(),\n  experimental_providerMetadata: providerMetadataSchema.optional(),\n});\n\n/**\nContent of a user message. It can be a string or an array of text and image parts.\n */\nexport type UserContent = string | Array<TextPart | ImagePart | FilePart>;\n\n/**\nAn assistant message. It can contain text, tool calls, or a combination of text and tool calls.\n */\nexport type CoreAssistantMessage = {\n  role: 'assistant';\n  content: AssistantContent;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n*/\n  experimental_providerMetadata?: ProviderMetadata;\n};\n\nexport const coreAssistantMessageSchema: z.ZodType<CoreAssistantMessage> =\n  z.object({\n    role: z.literal('assistant'),\n    content: z.union([\n      z.string(),\n      z.array(\n        z.union([\n          textPartSchema,\n          filePartSchema,\n          reasoningPartSchema,\n          redactedReasoningPartSchema,\n          toolCallPartSchema,\n        ]),\n      ),\n    ]),\n    providerOptions: providerMetadataSchema.optional(),\n    experimental_providerMetadata: providerMetadataSchema.optional(),\n  });\n\n/**\nContent of an assistant message.\nIt can be a string or an array of text, image, reasoning, redacted reasoning, and tool call parts.\n */\nexport type AssistantContent =\n  | string\n  | Array<\n      TextPart | FilePart | ReasoningPart | RedactedReasoningPart | ToolCallPart\n    >;\n\n/**\nA tool message. It contains the result of one or more tool calls.\n */\nexport type CoreToolMessage = {\n  role: 'tool';\n  content: ToolContent;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n\n  /**\n@deprecated Use `providerOptions` instead.\n*/\n  experimental_providerMetadata?: ProviderMetadata;\n};\n\nexport const coreToolMessageSchema: z.ZodType<CoreToolMessage> = z.object({\n  role: z.literal('tool'),\n  content: z.array(toolResultPartSchema),\n  providerOptions: providerMetadataSchema.optional(),\n  experimental_providerMetadata: providerMetadataSchema.optional(),\n});\n\n/**\nContent of a tool message. It is an array of tool result parts.\n */\nexport type ToolContent = Array<ToolResultPart>;\n\n/**\nA message that can be used in the `messages` field of a prompt.\nIt can be a user message, an assistant message, or a tool message.\n */\nexport type CoreMessage =\n  | CoreSystemMessage\n  | CoreUserMessage\n  | CoreAssistantMessage\n  | CoreToolMessage;\n\nexport const coreMessageSchema: z.ZodType<CoreMessage> = z.union([\n  coreSystemMessageSchema,\n  coreUserMessageSchema,\n  coreAssistantMessageSchema,\n  coreToolMessageSchema,\n]);\n","import { JSONSchema7 } from '@ai-sdk/provider';\n\nconst DEFAULT_SCHEMA_PREFIX = 'JSON schema:';\nconst DEFAULT_SCHEMA_SUFFIX =\n  'You MUST answer with a JSON object that matches the JSON schema above.';\nconst DEFAULT_GENERIC_SUFFIX = 'You MUST answer with JSON.';\n\nexport function injectJsonInstruction({\n  prompt,\n  schema,\n  schemaPrefix = schema != null ? DEFAULT_SCHEMA_PREFIX : undefined,\n  schemaSuffix = schema != null\n    ? DEFAULT_SCHEMA_SUFFIX\n    : DEFAULT_GENERIC_SUFFIX,\n}: {\n  prompt?: string;\n  schema?: JSONSchema7;\n  schemaPrefix?: string;\n  schemaSuffix?: string;\n}): string {\n  return [\n    prompt != null && prompt.length > 0 ? prompt : undefined,\n    prompt != null && prompt.length > 0 ? '' : undefined, // add a newline if prompt is not null\n    schemaPrefix,\n    schema != null ? JSON.stringify(schema) : undefined,\n    schemaSuffix,\n  ]\n    .filter(line => line != null)\n    .join('\\n');\n}\n","import {\n  JSONParseError,\n  JSONValue,\n  TypeValidationError,\n} from '@ai-sdk/provider';\nimport { createIdGenerator, safeParseJSON } from '@ai-sdk/provider-utils';\nimport { Schema } from '@ai-sdk/ui-utils';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../errors/no-object-generated-error';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareRetries } from '../prompt/prepare-retries';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n  LogProbs,\n  ProviderMetadata,\n} from '../types';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderOptions } from '../types/provider-metadata';\nimport { calculateLanguageModelUsage } from '../types/usage';\nimport { prepareResponseHeaders } from '../util/prepare-response-headers';\nimport { GenerateObjectResult } from './generate-object-result';\nimport { injectJsonInstruction } from './inject-json-instruction';\nimport { getOutputStrategy } from './output-strategy';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\nimport { stringifyForTelemetry } from '../prompt/stringify-for-telemetry';\nimport { UnsupportedModelVersionError } from '../../errors/unsupported-model-version-error';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\nA function that attempts to repair the raw output of the mode\nto enable JSON parsing.\n\nShould return the repaired text or null if the text cannot be repaired.\n     */\nexport type RepairTextFunction = (options: {\n  text: string;\n  error: JSONParseError | TypeValidationError;\n}) => Promise<string | null>;\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamObject` instead.\n\n@returns\nA result object that contains the generated object, the finish reason, the token usage, and additional information.\n */\nexport async function generateObject<OBJECT>(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt & {\n      output?: 'object' | undefined;\n\n      /**\nThe language model to use.\n     */\n      model: LanguageModel;\n\n      /**\nThe schema of the object that the model should generate.\n     */\n      schema: z.Schema<OBJECT, z.ZodTypeDef, any> | Schema<OBJECT>;\n\n      /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n     */\n      schemaName?: string;\n\n      /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n     */\n      schemaDescription?: string;\n\n      /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n     */\n      mode?: 'auto' | 'json' | 'tool';\n\n      /**\nA function that attempts to repair the raw output of the mode\nto enable JSON parsing.\n     */\n      experimental_repairText?: RepairTextFunction;\n\n      /**\nOptional telemetry configuration (experimental).\n       */\n\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n      providerOptions?: ProviderOptions;\n\n      /**\n@deprecated Use `providerOptions` instead.\n*/\n      experimental_providerMetadata?: ProviderMetadata;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n      };\n    },\n): Promise<GenerateObjectResult<OBJECT>>;\n/**\nGenerate an array with structured, typed elements for a given prompt and element schema using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamObject` instead.\n\n@return\nA result object that contains the generated object, the finish reason, the token usage, and additional information.\n */\nexport async function generateObject<ELEMENT>(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt & {\n      output: 'array';\n\n      /**\nThe language model to use.\n     */\n      model: LanguageModel;\n\n      /**\nThe element schema of the array that the model should generate.\n */\n      schema: z.Schema<ELEMENT, z.ZodTypeDef, any> | Schema<ELEMENT>;\n\n      /**\nOptional name of the array that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n     */\n      schemaName?: string;\n\n      /**\nOptional description of the array that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n */\n      schemaDescription?: string;\n\n      /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n     */\n      mode?: 'auto' | 'json' | 'tool';\n\n      /**\nA function that attempts to repair the raw output of the mode\nto enable JSON parsing.\n     */\n      experimental_repairText?: RepairTextFunction;\n\n      /**\nOptional telemetry configuration (experimental).\n     */\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n      providerOptions?: ProviderOptions;\n\n      /**\n@deprecated Use `providerOptions` instead.\n*/\n      experimental_providerMetadata?: ProviderMetadata;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n      };\n    },\n): Promise<GenerateObjectResult<Array<ELEMENT>>>;\n/**\nGenerate a value from an enum (limited list of string values) using a language model.\n\nThis function does not stream the output.\n\n@return\nA result object that contains the generated value, the finish reason, the token usage, and additional information.\n */\nexport async function generateObject<ENUM extends string>(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt & {\n      output: 'enum';\n\n      /**\nThe language model to use.\n     */\n      model: LanguageModel;\n\n      /**\nThe enum values that the model should use.\n     */\n      enum: Array<ENUM>;\n\n      /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n     */\n      mode?: 'auto' | 'json' | 'tool';\n\n      /**\nA function that attempts to repair the raw output of the mode\nto enable JSON parsing.\n     */\n      experimental_repairText?: RepairTextFunction;\n\n      /**\nOptional telemetry configuration (experimental).\n     */\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n      providerOptions?: ProviderOptions;\n\n      /**\n@deprecated Use `providerOptions` instead.\n*/\n      experimental_providerMetadata?: ProviderMetadata;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n      };\n    },\n): Promise<GenerateObjectResult<ENUM>>;\n/**\nGenerate JSON with any schema for a given prompt using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamObject` instead.\n\n@returns\nA result object that contains the generated object, the finish reason, the token usage, and additional information.\n */\nexport async function generateObject(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt & {\n      output: 'no-schema';\n\n      /**\nThe language model to use.\n     */\n      model: LanguageModel;\n\n      /**\nThe mode to use for object generation. Must be \"json\" for no-schema output.\n     */\n      mode?: 'json';\n\n      /**\nA function that attempts to repair the raw output of the mode\nto enable JSON parsing.\n     */\n      experimental_repairText?: RepairTextFunction;\n\n      /**\nOptional telemetry configuration (experimental).\n       */\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n      providerOptions?: ProviderOptions;\n\n      /**\n@deprecated Use `providerOptions` instead.\n*/\n      experimental_providerMetadata?: ProviderMetadata;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n      };\n    },\n): Promise<GenerateObjectResult<JSONValue>>;\nexport async function generateObject<SCHEMA, RESULT>({\n  model,\n  enum: enumValues, // rename bc enum is reserved by typescript\n  schema: inputSchema,\n  schemaName,\n  schemaDescription,\n  mode,\n  output = 'object',\n  system,\n  prompt,\n  messages,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers,\n  experimental_repairText: repairText,\n  experimental_telemetry: telemetry,\n  experimental_providerMetadata,\n  providerOptions = experimental_providerMetadata,\n  _internal: {\n    generateId = originalGenerateId,\n    currentDate = () => new Date(),\n  } = {},\n  ...settings\n}: Omit<CallSettings, 'stopSequences'> &\n  Prompt & {\n    /**\n     * The expected structure of the output.\n     *\n     * - 'object': Generate a single object that conforms to the schema.\n     * - 'array': Generate an array of objects that conform to the schema.\n     * - 'no-schema': Generate any JSON object. No schema is specified.\n     *\n     * Default is 'object' if not specified.\n     */\n    output?: 'object' | 'array' | 'enum' | 'no-schema';\n\n    model: LanguageModel;\n    enum?: Array<SCHEMA>;\n    schema?: z.Schema<SCHEMA, z.ZodTypeDef, any> | Schema<SCHEMA>;\n    schemaName?: string;\n    schemaDescription?: string;\n    mode?: 'auto' | 'json' | 'tool';\n    experimental_repairText?: RepairTextFunction;\n    experimental_telemetry?: TelemetrySettings;\n    experimental_providerMetadata?: ProviderMetadata;\n    providerOptions?: ProviderOptions;\n\n    /**\n     * Internal. For test use only. May change without notice.\n     */\n    _internal?: {\n      generateId?: () => string;\n      currentDate?: () => Date;\n    };\n  }): Promise<GenerateObjectResult<RESULT>> {\n  if (typeof model === 'string' || model.specificationVersion !== 'v1') {\n    throw new UnsupportedModelVersionError();\n  }\n\n  validateObjectGenerationInput({\n    output,\n    mode,\n    schema: inputSchema,\n    schemaName,\n    schemaDescription,\n    enumValues,\n  });\n\n  const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n  const outputStrategy = getOutputStrategy({\n    output,\n    schema: inputSchema,\n    enumValues,\n  });\n\n  // automatically set mode to 'json' for no-schema output\n  if (outputStrategy.type === 'no-schema' && mode === undefined) {\n    mode = 'json';\n  }\n\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers,\n    settings: { ...settings, maxRetries },\n  });\n\n  const tracer = getTracer(telemetry);\n\n  return recordSpan({\n    name: 'ai.generateObject',\n    attributes: selectTelemetryAttributes({\n      telemetry,\n      attributes: {\n        ...assembleOperationName({\n          operationId: 'ai.generateObject',\n          telemetry,\n        }),\n        ...baseTelemetryAttributes,\n        // specific settings that only make sense on the outer level:\n        'ai.prompt': {\n          input: () => JSON.stringify({ system, prompt, messages }),\n        },\n        'ai.schema':\n          outputStrategy.jsonSchema != null\n            ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n            : undefined,\n        'ai.schema.name': schemaName,\n        'ai.schema.description': schemaDescription,\n        'ai.settings.output': outputStrategy.type,\n        'ai.settings.mode': mode,\n      },\n    }),\n    tracer,\n    fn: async span => {\n      // use the default provider mode when the mode is set to 'auto' or unspecified\n      if (mode === 'auto' || mode == null) {\n        mode = model.defaultObjectGenerationMode;\n      }\n\n      let result: string;\n      let finishReason: FinishReason;\n      let usage: Parameters<typeof calculateLanguageModelUsage>[0];\n      let warnings: CallWarning[] | undefined;\n      let rawResponse:\n        | { headers?: Record<string, string>; body?: unknown }\n        | undefined;\n      let response: LanguageModelResponseMetadata;\n      let request: LanguageModelRequestMetadata;\n      let logprobs: LogProbs | undefined;\n      let resultProviderMetadata: ProviderMetadata | undefined;\n\n      switch (mode) {\n        case 'json': {\n          const standardizedPrompt = standardizePrompt({\n            prompt: {\n              system:\n                outputStrategy.jsonSchema == null\n                  ? injectJsonInstruction({ prompt: system })\n                  : model.supportsStructuredOutputs\n                    ? system\n                    : injectJsonInstruction({\n                        prompt: system,\n                        schema: outputStrategy.jsonSchema,\n                      }),\n              prompt,\n              messages,\n            },\n            tools: undefined,\n          });\n\n          const promptMessages = await convertToLanguageModelPrompt({\n            prompt: standardizedPrompt,\n            modelSupportsImageUrls: model.supportsImageUrls,\n            modelSupportsUrl: model.supportsUrl?.bind(model), // support 'this' context\n          });\n\n          const generateResult = await retry(() =>\n            recordSpan({\n              name: 'ai.generateObject.doGenerate',\n              attributes: selectTelemetryAttributes({\n                telemetry,\n                attributes: {\n                  ...assembleOperationName({\n                    operationId: 'ai.generateObject.doGenerate',\n                    telemetry,\n                  }),\n                  ...baseTelemetryAttributes,\n                  'ai.prompt.format': {\n                    input: () => standardizedPrompt.type,\n                  },\n                  'ai.prompt.messages': {\n                    input: () => JSON.stringify(promptMessages),\n                  },\n                  'ai.settings.mode': mode,\n\n                  // standardized gen-ai llm span attributes:\n                  'gen_ai.system': model.provider,\n                  'gen_ai.request.model': model.modelId,\n                  'gen_ai.request.frequency_penalty': settings.frequencyPenalty,\n                  'gen_ai.request.max_tokens': settings.maxTokens,\n                  'gen_ai.request.presence_penalty': settings.presencePenalty,\n                  'gen_ai.request.temperature': settings.temperature,\n                  'gen_ai.request.top_k': settings.topK,\n                  'gen_ai.request.top_p': settings.topP,\n                },\n              }),\n              tracer,\n              fn: async span => {\n                const result = await model.doGenerate({\n                  mode: {\n                    type: 'object-json',\n                    schema: outputStrategy.jsonSchema,\n                    name: schemaName,\n                    description: schemaDescription,\n                  },\n                  ...prepareCallSettings(settings),\n                  inputFormat: standardizedPrompt.type,\n                  prompt: promptMessages,\n                  providerMetadata: providerOptions,\n                  abortSignal,\n                  headers,\n                });\n\n                const responseData = {\n                  id: result.response?.id ?? generateId(),\n                  timestamp: result.response?.timestamp ?? currentDate(),\n                  modelId: result.response?.modelId ?? model.modelId,\n                };\n\n                if (result.text === undefined) {\n                  throw new NoObjectGeneratedError({\n                    message:\n                      'No object generated: the model did not return a response.',\n                    response: responseData,\n                    usage: calculateLanguageModelUsage(result.usage),\n                    finishReason: result.finishReason,\n                  });\n                }\n\n                // Add response information to the span:\n                span.setAttributes(\n                  selectTelemetryAttributes({\n                    telemetry,\n                    attributes: {\n                      'ai.response.finishReason': result.finishReason,\n                      'ai.response.object': { output: () => result.text },\n                      'ai.response.id': responseData.id,\n                      'ai.response.model': responseData.modelId,\n                      'ai.response.timestamp':\n                        responseData.timestamp.toISOString(),\n                      'ai.response.providerMetadata': JSON.stringify(\n                        result.providerMetadata,\n                      ),\n                      'ai.usage.promptTokens': result.usage.promptTokens,\n                      'ai.usage.completionTokens':\n                        result.usage.completionTokens,\n\n                      // standardized gen-ai llm span attributes:\n                      'gen_ai.response.finish_reasons': [result.finishReason],\n                      'gen_ai.response.id': responseData.id,\n                      'gen_ai.response.model': responseData.modelId,\n                      'gen_ai.usage.prompt_tokens': result.usage.promptTokens,\n                      'gen_ai.usage.completion_tokens':\n                        result.usage.completionTokens,\n                    },\n                  }),\n                );\n\n                return { ...result, objectText: result.text, responseData };\n              },\n            }),\n          );\n\n          result = generateResult.objectText;\n          finishReason = generateResult.finishReason;\n          usage = generateResult.usage;\n          warnings = generateResult.warnings;\n          rawResponse = generateResult.rawResponse;\n          logprobs = generateResult.logprobs;\n          resultProviderMetadata = generateResult.providerMetadata;\n          request = generateResult.request ?? {};\n          response = generateResult.responseData;\n\n          break;\n        }\n\n        case 'tool': {\n          const standardizedPrompt = standardizePrompt({\n            prompt: { system, prompt, messages },\n            tools: undefined,\n          });\n\n          const promptMessages = await convertToLanguageModelPrompt({\n            prompt: standardizedPrompt,\n            modelSupportsImageUrls: model.supportsImageUrls,\n            modelSupportsUrl: model.supportsUrl?.bind(model), // support 'this' context,\n          });\n          const inputFormat = standardizedPrompt.type;\n\n          const generateResult = await retry(() =>\n            recordSpan({\n              name: 'ai.generateObject.doGenerate',\n              attributes: selectTelemetryAttributes({\n                telemetry,\n                attributes: {\n                  ...assembleOperationName({\n                    operationId: 'ai.generateObject.doGenerate',\n                    telemetry,\n                  }),\n                  ...baseTelemetryAttributes,\n                  'ai.prompt.format': {\n                    input: () => inputFormat,\n                  },\n                  'ai.prompt.messages': {\n                    input: () => stringifyForTelemetry(promptMessages),\n                  },\n                  'ai.settings.mode': mode,\n\n                  // standardized gen-ai llm span attributes:\n                  'gen_ai.system': model.provider,\n                  'gen_ai.request.model': model.modelId,\n                  'gen_ai.request.frequency_penalty': settings.frequencyPenalty,\n                  'gen_ai.request.max_tokens': settings.maxTokens,\n                  'gen_ai.request.presence_penalty': settings.presencePenalty,\n                  'gen_ai.request.temperature': settings.temperature,\n                  'gen_ai.request.top_k': settings.topK,\n                  'gen_ai.request.top_p': settings.topP,\n                },\n              }),\n              tracer,\n              fn: async span => {\n                const result = await model.doGenerate({\n                  mode: {\n                    type: 'object-tool',\n                    tool: {\n                      type: 'function',\n                      name: schemaName ?? 'json',\n                      description:\n                        schemaDescription ?? 'Respond with a JSON object.',\n                      parameters: outputStrategy.jsonSchema!,\n                    },\n                  },\n                  ...prepareCallSettings(settings),\n                  inputFormat,\n                  prompt: promptMessages,\n                  providerMetadata: providerOptions,\n                  abortSignal,\n                  headers,\n                });\n\n                const objectText = result.toolCalls?.[0]?.args;\n\n                const responseData = {\n                  id: result.response?.id ?? generateId(),\n                  timestamp: result.response?.timestamp ?? currentDate(),\n                  modelId: result.response?.modelId ?? model.modelId,\n                };\n\n                if (objectText === undefined) {\n                  throw new NoObjectGeneratedError({\n                    message: 'No object generated: the tool was not called.',\n                    response: responseData,\n                    usage: calculateLanguageModelUsage(result.usage),\n                    finishReason: result.finishReason,\n                  });\n                }\n\n                // Add response information to the span:\n                span.setAttributes(\n                  selectTelemetryAttributes({\n                    telemetry,\n                    attributes: {\n                      'ai.response.finishReason': result.finishReason,\n                      'ai.response.object': { output: () => objectText },\n                      'ai.response.id': responseData.id,\n                      'ai.response.model': responseData.modelId,\n                      'ai.response.timestamp':\n                        responseData.timestamp.toISOString(),\n                      'ai.response.providerMetadata': JSON.stringify(\n                        result.providerMetadata,\n                      ),\n                      'ai.usage.promptTokens': result.usage.promptTokens,\n                      'ai.usage.completionTokens':\n                        result.usage.completionTokens,\n\n                      // standardized gen-ai llm span attributes:\n                      'gen_ai.response.finish_reasons': [result.finishReason],\n                      'gen_ai.response.id': responseData.id,\n                      'gen_ai.response.model': responseData.modelId,\n                      'gen_ai.usage.input_tokens': result.usage.promptTokens,\n                      'gen_ai.usage.output_tokens':\n                        result.usage.completionTokens,\n                    },\n                  }),\n                );\n\n                return { ...result, objectText, responseData };\n              },\n            }),\n          );\n\n          result = generateResult.objectText;\n          finishReason = generateResult.finishReason;\n          usage = generateResult.usage;\n          warnings = generateResult.warnings;\n          rawResponse = generateResult.rawResponse;\n          logprobs = generateResult.logprobs;\n          resultProviderMetadata = generateResult.providerMetadata;\n          request = generateResult.request ?? {};\n          response = generateResult.responseData;\n\n          break;\n        }\n\n        case undefined: {\n          throw new Error(\n            'Model does not have a default object generation mode.',\n          );\n        }\n\n        default: {\n          const _exhaustiveCheck: never = mode;\n          throw new Error(`Unsupported mode: ${_exhaustiveCheck}`);\n        }\n      }\n\n      function processResult(result: string): RESULT {\n        const parseResult = safeParseJSON({ text: result });\n\n        if (!parseResult.success) {\n          throw new NoObjectGeneratedError({\n            message: 'No object generated: could not parse the response.',\n            cause: parseResult.error,\n            text: result,\n            response,\n            usage: calculateLanguageModelUsage(usage),\n            finishReason: finishReason,\n          });\n        }\n\n        const validationResult = outputStrategy.validateFinalResult(\n          parseResult.value,\n          {\n            text: result,\n            response,\n            usage: calculateLanguageModelUsage(usage),\n          },\n        );\n\n        if (!validationResult.success) {\n          throw new NoObjectGeneratedError({\n            message: 'No object generated: response did not match schema.',\n            cause: validationResult.error,\n            text: result,\n            response,\n            usage: calculateLanguageModelUsage(usage),\n            finishReason: finishReason,\n          });\n        }\n\n        return validationResult.value;\n      }\n\n      let object: RESULT;\n      try {\n        object = processResult(result);\n      } catch (error) {\n        if (\n          repairText != null &&\n          NoObjectGeneratedError.isInstance(error) &&\n          (JSONParseError.isInstance(error.cause) ||\n            TypeValidationError.isInstance(error.cause))\n        ) {\n          const repairedText = await repairText({\n            text: result,\n            error: error.cause,\n          });\n\n          if (repairedText === null) {\n            throw error;\n          }\n\n          object = processResult(repairedText);\n        } else {\n          throw error;\n        }\n      }\n\n      // Add response information to the span:\n      span.setAttributes(\n        selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            'ai.response.finishReason': finishReason,\n            'ai.response.object': {\n              output: () => JSON.stringify(object),\n            },\n\n            'ai.usage.promptTokens': usage.promptTokens,\n            'ai.usage.completionTokens': usage.completionTokens,\n          },\n        }),\n      );\n\n      return new DefaultGenerateObjectResult({\n        object,\n        finishReason,\n        usage: calculateLanguageModelUsage(usage),\n        warnings,\n        request,\n        response: {\n          ...response,\n          headers: rawResponse?.headers,\n          body: rawResponse?.body,\n        },\n        logprobs,\n        providerMetadata: resultProviderMetadata,\n      });\n    },\n  });\n}\n\nclass DefaultGenerateObjectResult<T> implements GenerateObjectResult<T> {\n  readonly object: GenerateObjectResult<T>['object'];\n  readonly finishReason: GenerateObjectResult<T>['finishReason'];\n  readonly usage: GenerateObjectResult<T>['usage'];\n  readonly warnings: GenerateObjectResult<T>['warnings'];\n  readonly logprobs: GenerateObjectResult<T>['logprobs'];\n  readonly experimental_providerMetadata: GenerateObjectResult<T>['experimental_providerMetadata'];\n  readonly providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n  readonly response: GenerateObjectResult<T>['response'];\n  readonly request: GenerateObjectResult<T>['request'];\n\n  constructor(options: {\n    object: GenerateObjectResult<T>['object'];\n    finishReason: GenerateObjectResult<T>['finishReason'];\n    usage: GenerateObjectResult<T>['usage'];\n    warnings: GenerateObjectResult<T>['warnings'];\n    logprobs: GenerateObjectResult<T>['logprobs'];\n    providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n    response: GenerateObjectResult<T>['response'];\n    request: GenerateObjectResult<T>['request'];\n  }) {\n    this.object = options.object;\n    this.finishReason = options.finishReason;\n    this.usage = options.usage;\n    this.warnings = options.warnings;\n    this.providerMetadata = options.providerMetadata;\n    this.experimental_providerMetadata = options.providerMetadata;\n    this.response = options.response;\n    this.request = options.request;\n    this.logprobs = options.logprobs;\n  }\n\n  toJsonResponse(init?: ResponseInit): Response {\n    return new Response(JSON.stringify(this.object), {\n      status: init?.status ?? 200,\n      headers: prepareResponseHeaders(init?.headers, {\n        contentType: 'application/json; charset=utf-8',\n      }),\n    });\n  }\n}\n","import {\n  JSONValue,\n  LanguageModelV1CallOptions,\n  LanguageModelV1FinishReason,\n  LanguageModelV1StreamPart,\n} from '@ai-sdk/provider';\nimport { createIdGenerator } from '@ai-sdk/provider-utils';\nimport {\n  DeepPartial,\n  Schema,\n  isDeepEqualData,\n  parsePartialJson,\n} from '@ai-sdk/ui-utils';\nimport { ServerResponse } from 'http';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../errors/no-object-generated-error';\nimport { DelayedPromise } from '../../util/delayed-promise';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareRetries } from '../prompt/prepare-retries';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n  LogProbs,\n} from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata, ProviderOptions } from '../types/provider-metadata';\nimport {\n  LanguageModelUsage,\n  calculateLanguageModelUsage,\n} from '../types/usage';\nimport {\n  AsyncIterableStream,\n  createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport { now as originalNow } from '../util/now';\nimport { prepareOutgoingHttpHeaders } from '../util/prepare-outgoing-http-headers';\nimport { prepareResponseHeaders } from '../util/prepare-response-headers';\nimport { writeToServerResponse } from '../util/write-to-server-response';\nimport { injectJsonInstruction } from './inject-json-instruction';\nimport { OutputStrategy, getOutputStrategy } from './output-strategy';\nimport { ObjectStreamPart, StreamObjectResult } from './stream-object-result';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\nimport { stringifyForTelemetry } from '../prompt/stringify-for-telemetry';\nimport { UnsupportedModelVersionError } from '../../errors/unsupported-model-version-error';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\nCallback that is set using the `onError` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamObjectOnErrorCallback = (event: {\n  error: unknown;\n}) => Promise<void> | void;\n\n/**\nCallback that is set using the `onFinish` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamObjectOnFinishCallback<RESULT> = (event: {\n  /**\nThe token usage of the generated response.\n*/\n  usage: LanguageModelUsage;\n\n  /**\nThe generated object. Can be undefined if the final object does not match the schema.\n*/\n  object: RESULT | undefined;\n\n  /**\nOptional error object. This is e.g. a TypeValidationError when the final object does not match the schema.\n*/\n  error: unknown | undefined;\n\n  /**\nResponse metadata.\n */\n  response: LanguageModelResponseMetadata;\n\n  /**\nWarnings from the model provider (e.g. unsupported settings).\n*/\n  warnings?: CallWarning[];\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n*/\n  providerMetadata: ProviderMetadata | undefined;\n\n  /**\n@deprecated Use `providerMetadata` instead.\n*/\n  experimental_providerMetadata?: ProviderMetadata;\n}) => Promise<void> | void;\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateObject` instead.\n\n@return\nA result object for accessing the partial object stream and additional information.\n */\nexport function streamObject<OBJECT>(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt & {\n      output?: 'object' | undefined;\n\n      /**\nThe language model to use.\n     */\n      model: LanguageModel;\n\n      /**\nThe schema of the object that the model should generate.\n */\n      schema: z.Schema<OBJECT, z.ZodTypeDef, any> | Schema<OBJECT>;\n\n      /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n     */\n      schemaName?: string;\n\n      /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n */\n      schemaDescription?: string;\n\n      /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n     */\n      mode?: 'auto' | 'json' | 'tool';\n\n      /**\nOptional telemetry configuration (experimental).\n     */\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n      providerOptions?: ProviderOptions;\n\n      /**\n@deprecated Use `providerOptions` instead.\n*/\n      experimental_providerMetadata?: ProviderMetadata;\n\n      /**\nCallback that is invoked when an error occurs during streaming.\nYou can use it to log errors.\nThe stream processing will pause until the callback promise is resolved.\n     */\n      onError?: StreamObjectOnErrorCallback;\n\n      /**\nCallback that is called when the LLM response and the final object validation are finished.\n     */\n      onFinish?: StreamObjectOnFinishCallback<OBJECT>;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n        now?: () => number;\n      };\n    },\n): StreamObjectResult<DeepPartial<OBJECT>, OBJECT, never>;\n/**\nGenerate an array with structured, typed elements for a given prompt and element schema using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateObject` instead.\n\n@return\nA result object for accessing the partial object stream and additional information.\n */\nexport function streamObject<ELEMENT>(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt & {\n      output: 'array';\n\n      /**\nThe language model to use.\n     */\n      model: LanguageModel;\n\n      /**\nThe element schema of the array that the model should generate.\n */\n      schema: z.Schema<ELEMENT, z.ZodTypeDef, any> | Schema<ELEMENT>;\n\n      /**\nOptional name of the array that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n     */\n      schemaName?: string;\n\n      /**\nOptional description of the array that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n */\n      schemaDescription?: string;\n\n      /**\nThe mode to use for object generation.\n\nThe schema is converted into a JSON schema and used in one of the following ways\n\n- 'auto': The provider will choose the best mode for the model.\n- 'tool': A tool with the JSON schema as parameters is provided and the provider is instructed to use it.\n- 'json': The JSON schema and an instruction are injected into the prompt. If the provider supports JSON mode, it is enabled. If the provider supports JSON grammars, the grammar is used.\n\nPlease note that most providers do not support all modes.\n\nDefault and recommended: 'auto' (best mode for the model).\n     */\n      mode?: 'auto' | 'json' | 'tool';\n\n      /**\nOptional telemetry configuration (experimental).\n     */\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n      providerOptions?: ProviderOptions;\n\n      /**\n@deprecated Use `providerOptions` instead.\n*/\n      experimental_providerMetadata?: ProviderMetadata;\n\n      /**\nCallback that is invoked when an error occurs during streaming.\nYou can use it to log errors.\nThe stream processing will pause until the callback promise is resolved.\n     */\n      onError?: StreamObjectOnErrorCallback;\n\n      /**\nCallback that is called when the LLM response and the final object validation are finished.\n     */\n      onFinish?: StreamObjectOnFinishCallback<Array<ELEMENT>>;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n        now?: () => number;\n      };\n    },\n): StreamObjectResult<\n  Array<ELEMENT>,\n  Array<ELEMENT>,\n  AsyncIterableStream<ELEMENT>\n>;\n/**\nGenerate JSON with any schema for a given prompt using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateObject` instead.\n\n@return\nA result object for accessing the partial object stream and additional information.\n */\nexport function streamObject(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt & {\n      output: 'no-schema';\n\n      /**\nThe language model to use.\n     */\n      model: LanguageModel;\n\n      /**\nThe mode to use for object generation. Must be \"json\" for no-schema output.\n     */\n      mode?: 'json';\n\n      /**\nOptional telemetry configuration (experimental).\n     */\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n      providerOptions?: ProviderOptions;\n\n      /**\n@deprecated Use `providerOptions` instead.\n*/\n      experimental_providerMetadata?: ProviderMetadata;\n\n      /**\nCallback that is invoked when an error occurs during streaming.\nYou can use it to log errors.\nThe stream processing will pause until the callback promise is resolved.\n     */\n      onError?: StreamObjectOnErrorCallback;\n\n      /**\nCallback that is called when the LLM response and the final object validation are finished.\n     */\n      onFinish?: StreamObjectOnFinishCallback<JSONValue>;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n        now?: () => number;\n      };\n    },\n): StreamObjectResult<JSONValue, JSONValue, never>;\nexport function streamObject<SCHEMA, PARTIAL, RESULT, ELEMENT_STREAM>({\n  model,\n  schema: inputSchema,\n  schemaName,\n  schemaDescription,\n  mode,\n  output = 'object',\n  system,\n  prompt,\n  messages,\n  maxRetries,\n  abortSignal,\n  headers,\n  experimental_telemetry: telemetry,\n  experimental_providerMetadata,\n  providerOptions = experimental_providerMetadata,\n  onError,\n  onFinish,\n  _internal: {\n    generateId = originalGenerateId,\n    currentDate = () => new Date(),\n    now = originalNow,\n  } = {},\n  ...settings\n}: Omit<CallSettings, 'stopSequences'> &\n  Prompt & {\n    /**\n     * The expected structure of the output.\n     *\n     * - 'object': Generate a single object that conforms to the schema.\n     * - 'array': Generate an array of objects that conform to the schema.\n     * - 'no-schema': Generate any JSON object. No schema is specified.\n     *\n     * Default is 'object' if not specified.\n     */\n    output?: 'object' | 'array' | 'no-schema';\n\n    model: LanguageModel;\n    schema?: z.Schema<SCHEMA, z.ZodTypeDef, any> | Schema<SCHEMA>;\n    schemaName?: string;\n    schemaDescription?: string;\n    mode?: 'auto' | 'json' | 'tool';\n    experimental_telemetry?: TelemetrySettings;\n    providerOptions?: ProviderOptions;\n    experimental_providerMetadata?: ProviderMetadata;\n    onError?: StreamObjectOnErrorCallback;\n    onFinish?: StreamObjectOnFinishCallback<RESULT>;\n    _internal?: {\n      generateId?: () => string;\n      currentDate?: () => Date;\n      now?: () => number;\n    };\n  }): StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM> {\n  if (typeof model === 'string' || model.specificationVersion !== 'v1') {\n    throw new UnsupportedModelVersionError();\n  }\n\n  validateObjectGenerationInput({\n    output,\n    mode,\n    schema: inputSchema,\n    schemaName,\n    schemaDescription,\n  });\n\n  const outputStrategy = getOutputStrategy({ output, schema: inputSchema });\n\n  // automatically set mode to 'json' for no-schema output\n  if (outputStrategy.type === 'no-schema' && mode === undefined) {\n    mode = 'json';\n  }\n\n  return new DefaultStreamObjectResult({\n    model,\n    telemetry,\n    headers,\n    settings,\n    maxRetries,\n    abortSignal,\n    outputStrategy,\n    system,\n    prompt,\n    messages,\n    schemaName,\n    schemaDescription,\n    providerOptions,\n    mode,\n    onError,\n    onFinish,\n    generateId,\n    currentDate,\n    now,\n  });\n}\n\nclass DefaultStreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM>\n  implements StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM>\n{\n  private readonly objectPromise = new DelayedPromise<RESULT>();\n  private readonly usagePromise = new DelayedPromise<LanguageModelUsage>();\n  private readonly providerMetadataPromise = new DelayedPromise<\n    ProviderMetadata | undefined\n  >();\n  private readonly warningsPromise = new DelayedPromise<\n    CallWarning[] | undefined\n  >();\n  private readonly requestPromise =\n    new DelayedPromise<LanguageModelRequestMetadata>();\n  private readonly responsePromise =\n    new DelayedPromise<LanguageModelResponseMetadata>();\n\n  private readonly baseStream: ReadableStream<ObjectStreamPart<PARTIAL>>;\n\n  private readonly outputStrategy: OutputStrategy<\n    PARTIAL,\n    RESULT,\n    ELEMENT_STREAM\n  >;\n\n  constructor({\n    model,\n    headers,\n    telemetry,\n    settings,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    outputStrategy,\n    system,\n    prompt,\n    messages,\n    schemaName,\n    schemaDescription,\n    providerOptions,\n    mode,\n    onError,\n    onFinish,\n    generateId,\n    currentDate,\n    now,\n  }: {\n    model: LanguageModel;\n    telemetry: TelemetrySettings | undefined;\n    headers: Record<string, string | undefined> | undefined;\n    settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n    maxRetries: number | undefined;\n    abortSignal: AbortSignal | undefined;\n    outputStrategy: OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM>;\n    system: Prompt['system'];\n    prompt: Prompt['prompt'];\n    messages: Prompt['messages'];\n    schemaName: string | undefined;\n    schemaDescription: string | undefined;\n    providerOptions: ProviderOptions | undefined;\n    mode: 'auto' | 'json' | 'tool' | undefined;\n    onError: StreamObjectOnErrorCallback | undefined;\n    onFinish: StreamObjectOnFinishCallback<RESULT> | undefined;\n    generateId: () => string;\n    currentDate: () => Date;\n    now: () => number;\n  }) {\n    const { maxRetries, retry } = prepareRetries({\n      maxRetries: maxRetriesArg,\n    });\n\n    const baseTelemetryAttributes = getBaseTelemetryAttributes({\n      model,\n      telemetry,\n      headers,\n      settings: { ...settings, maxRetries },\n    });\n\n    const tracer = getTracer(telemetry);\n    const self = this;\n\n    const stitchableStream =\n      createStitchableStream<ObjectStreamPart<PARTIAL>>();\n\n    const eventProcessor = new TransformStream<\n      ObjectStreamPart<PARTIAL>,\n      ObjectStreamPart<PARTIAL>\n    >({\n      transform(chunk, controller) {\n        controller.enqueue(chunk);\n\n        if (chunk.type === 'error') {\n          onError?.({ error: chunk.error });\n        }\n      },\n    });\n\n    this.baseStream = stitchableStream.stream.pipeThrough(eventProcessor);\n\n    recordSpan({\n      name: 'ai.streamObject',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: 'ai.streamObject',\n            telemetry,\n          }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n          'ai.schema':\n            outputStrategy.jsonSchema != null\n              ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n              : undefined,\n          'ai.schema.name': schemaName,\n          'ai.schema.description': schemaDescription,\n          'ai.settings.output': outputStrategy.type,\n          'ai.settings.mode': mode,\n        },\n      }),\n      tracer,\n      endWhenDone: false,\n      fn: async rootSpan => {\n        // use the default provider mode when the mode is set to 'auto' or unspecified\n        if (mode === 'auto' || mode == null) {\n          mode = model.defaultObjectGenerationMode;\n        }\n\n        let callOptions: LanguageModelV1CallOptions;\n        let transformer: Transformer<\n          LanguageModelV1StreamPart,\n          string | Omit<LanguageModelV1StreamPart, 'text-delta'>\n        >;\n\n        switch (mode) {\n          case 'json': {\n            const standardizedPrompt = standardizePrompt({\n              prompt: {\n                system:\n                  outputStrategy.jsonSchema == null\n                    ? injectJsonInstruction({ prompt: system })\n                    : model.supportsStructuredOutputs\n                      ? system\n                      : injectJsonInstruction({\n                          prompt: system,\n                          schema: outputStrategy.jsonSchema,\n                        }),\n                prompt,\n                messages,\n              },\n              tools: undefined,\n            });\n\n            callOptions = {\n              mode: {\n                type: 'object-json',\n                schema: outputStrategy.jsonSchema,\n                name: schemaName,\n                description: schemaDescription,\n              },\n              ...prepareCallSettings(settings),\n              inputFormat: standardizedPrompt.type,\n              prompt: await convertToLanguageModelPrompt({\n                prompt: standardizedPrompt,\n                modelSupportsImageUrls: model.supportsImageUrls,\n                modelSupportsUrl: model.supportsUrl?.bind(model), // support 'this' context\n              }),\n              providerMetadata: providerOptions,\n              abortSignal,\n              headers,\n            };\n\n            transformer = {\n              transform: (chunk, controller) => {\n                switch (chunk.type) {\n                  case 'text-delta':\n                    controller.enqueue(chunk.textDelta);\n                    break;\n                  case 'response-metadata':\n                  case 'finish':\n                  case 'error':\n                    controller.enqueue(chunk);\n                    break;\n                }\n              },\n            };\n\n            break;\n          }\n\n          case 'tool': {\n            const standardizedPrompt = standardizePrompt({\n              prompt: { system, prompt, messages },\n              tools: undefined,\n            });\n\n            callOptions = {\n              mode: {\n                type: 'object-tool',\n                tool: {\n                  type: 'function',\n                  name: schemaName ?? 'json',\n                  description:\n                    schemaDescription ?? 'Respond with a JSON object.',\n                  parameters: outputStrategy.jsonSchema!,\n                },\n              },\n              ...prepareCallSettings(settings),\n              inputFormat: standardizedPrompt.type,\n              prompt: await convertToLanguageModelPrompt({\n                prompt: standardizedPrompt,\n                modelSupportsImageUrls: model.supportsImageUrls,\n                modelSupportsUrl: model.supportsUrl?.bind(model), // support 'this' context,\n              }),\n              providerMetadata: providerOptions,\n              abortSignal,\n              headers,\n            };\n\n            transformer = {\n              transform(chunk, controller) {\n                switch (chunk.type) {\n                  case 'tool-call-delta':\n                    controller.enqueue(chunk.argsTextDelta);\n                    break;\n                  case 'response-metadata':\n                  case 'finish':\n                  case 'error':\n                    controller.enqueue(chunk);\n                    break;\n                }\n              },\n            };\n\n            break;\n          }\n\n          case undefined: {\n            throw new Error(\n              'Model does not have a default object generation mode.',\n            );\n          }\n\n          default: {\n            const _exhaustiveCheck: never = mode;\n            throw new Error(`Unsupported mode: ${_exhaustiveCheck}`);\n          }\n        }\n\n        const {\n          result: { stream, warnings, rawResponse, request },\n          doStreamSpan,\n          startTimestampMs,\n        } = await retry(() =>\n          recordSpan({\n            name: 'ai.streamObject.doStream',\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: 'ai.streamObject.doStream',\n                  telemetry,\n                }),\n                ...baseTelemetryAttributes,\n                'ai.prompt.format': {\n                  input: () => callOptions.inputFormat,\n                },\n                'ai.prompt.messages': {\n                  input: () => stringifyForTelemetry(callOptions.prompt),\n                },\n                'ai.settings.mode': mode,\n\n                // standardized gen-ai llm span attributes:\n                'gen_ai.system': model.provider,\n                'gen_ai.request.model': model.modelId,\n                'gen_ai.request.frequency_penalty': settings.frequencyPenalty,\n                'gen_ai.request.max_tokens': settings.maxTokens,\n                'gen_ai.request.presence_penalty': settings.presencePenalty,\n                'gen_ai.request.temperature': settings.temperature,\n                'gen_ai.request.top_k': settings.topK,\n                'gen_ai.request.top_p': settings.topP,\n              },\n            }),\n            tracer,\n            endWhenDone: false,\n            fn: async doStreamSpan => ({\n              startTimestampMs: now(),\n              doStreamSpan,\n              result: await model.doStream(callOptions),\n            }),\n          }),\n        );\n\n        self.requestPromise.resolve(request ?? {});\n\n        // store information for onFinish callback:\n        let usage: LanguageModelUsage | undefined;\n        let finishReason: LanguageModelV1FinishReason | undefined;\n        let providerMetadata: ProviderMetadata | undefined;\n        let object: RESULT | undefined;\n        let error: unknown | undefined;\n\n        // pipe chunks through a transformation stream that extracts metadata:\n        let accumulatedText = '';\n        let textDelta = '';\n        let response: {\n          id: string;\n          timestamp: Date;\n          modelId: string;\n        } = {\n          id: generateId(),\n          timestamp: currentDate(),\n          modelId: model.modelId,\n        };\n\n        // Keep track of raw parse result before type validation, since e.g. Zod might\n        // change the object by mapping properties.\n        let latestObjectJson: JSONValue | undefined = undefined;\n        let latestObject: PARTIAL | undefined = undefined;\n        let isFirstChunk = true;\n        let isFirstDelta = true;\n\n        const transformedStream = stream\n          .pipeThrough(new TransformStream(transformer))\n          .pipeThrough(\n            new TransformStream<\n              string | ObjectStreamInputPart,\n              ObjectStreamPart<PARTIAL>\n            >({\n              async transform(chunk, controller): Promise<void> {\n                // Telemetry event for first chunk:\n                if (isFirstChunk) {\n                  const msToFirstChunk = now() - startTimestampMs;\n\n                  isFirstChunk = false;\n\n                  doStreamSpan.addEvent('ai.stream.firstChunk', {\n                    'ai.stream.msToFirstChunk': msToFirstChunk,\n                  });\n\n                  doStreamSpan.setAttributes({\n                    'ai.stream.msToFirstChunk': msToFirstChunk,\n                  });\n                }\n\n                // process partial text chunks\n                if (typeof chunk === 'string') {\n                  accumulatedText += chunk;\n                  textDelta += chunk;\n\n                  const { value: currentObjectJson, state: parseState } =\n                    parsePartialJson(accumulatedText);\n\n                  if (\n                    currentObjectJson !== undefined &&\n                    !isDeepEqualData(latestObjectJson, currentObjectJson)\n                  ) {\n                    const validationResult =\n                      outputStrategy.validatePartialResult({\n                        value: currentObjectJson,\n                        textDelta,\n                        latestObject,\n                        isFirstDelta,\n                        isFinalDelta: parseState === 'successful-parse',\n                      });\n\n                    if (\n                      validationResult.success &&\n                      !isDeepEqualData(\n                        latestObject,\n                        validationResult.value.partial,\n                      )\n                    ) {\n                      // inside inner check to correctly parse the final element in array mode:\n                      latestObjectJson = currentObjectJson;\n                      latestObject = validationResult.value.partial;\n\n                      controller.enqueue({\n                        type: 'object',\n                        object: latestObject,\n                      });\n\n                      controller.enqueue({\n                        type: 'text-delta',\n                        textDelta: validationResult.value.textDelta,\n                      });\n\n                      textDelta = '';\n                      isFirstDelta = false;\n                    }\n                  }\n\n                  return;\n                }\n\n                switch (chunk.type) {\n                  case 'response-metadata': {\n                    response = {\n                      id: chunk.id ?? response.id,\n                      timestamp: chunk.timestamp ?? response.timestamp,\n                      modelId: chunk.modelId ?? response.modelId,\n                    };\n                    break;\n                  }\n\n                  case 'finish': {\n                    // send final text delta:\n                    if (textDelta !== '') {\n                      controller.enqueue({ type: 'text-delta', textDelta });\n                    }\n\n                    // store finish reason for telemetry:\n                    finishReason = chunk.finishReason;\n\n                    // store usage and metadata for promises and onFinish callback:\n                    usage = calculateLanguageModelUsage(chunk.usage);\n                    providerMetadata = chunk.providerMetadata;\n\n                    controller.enqueue({ ...chunk, usage, response });\n\n                    // resolve promises that can be resolved now:\n                    self.usagePromise.resolve(usage);\n                    self.providerMetadataPromise.resolve(providerMetadata);\n                    self.responsePromise.resolve({\n                      ...response,\n                      headers: rawResponse?.headers,\n                    });\n\n                    // resolve the object promise with the latest object:\n                    const validationResult = outputStrategy.validateFinalResult(\n                      latestObjectJson,\n                      {\n                        text: accumulatedText,\n                        response,\n                        usage,\n                      },\n                    );\n\n                    if (validationResult.success) {\n                      object = validationResult.value;\n                      self.objectPromise.resolve(object);\n                    } else {\n                      error = new NoObjectGeneratedError({\n                        message:\n                          'No object generated: response did not match schema.',\n                        cause: validationResult.error,\n                        text: accumulatedText,\n                        response,\n                        usage,\n                        finishReason: finishReason,\n                      });\n                      self.objectPromise.reject(error);\n                    }\n\n                    break;\n                  }\n\n                  default: {\n                    controller.enqueue(chunk);\n                    break;\n                  }\n                }\n              },\n\n              // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n              async flush(controller) {\n                try {\n                  const finalUsage = usage ?? {\n                    promptTokens: NaN,\n                    completionTokens: NaN,\n                    totalTokens: NaN,\n                  };\n\n                  doStreamSpan.setAttributes(\n                    selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        'ai.response.finishReason': finishReason,\n                        'ai.response.object': {\n                          output: () => JSON.stringify(object),\n                        },\n                        'ai.response.id': response.id,\n                        'ai.response.model': response.modelId,\n                        'ai.response.timestamp':\n                          response.timestamp.toISOString(),\n                        'ai.response.providerMetadata':\n                          JSON.stringify(providerMetadata),\n\n                        'ai.usage.promptTokens': finalUsage.promptTokens,\n                        'ai.usage.completionTokens':\n                          finalUsage.completionTokens,\n\n                        // standardized gen-ai llm span attributes:\n                        'gen_ai.response.finish_reasons': [finishReason],\n                        'gen_ai.response.id': response.id,\n                        'gen_ai.response.model': response.modelId,\n                        'gen_ai.usage.input_tokens': finalUsage.promptTokens,\n                        'gen_ai.usage.output_tokens':\n                          finalUsage.completionTokens,\n                      },\n                    }),\n                  );\n\n                  // finish doStreamSpan before other operations for correct timing:\n                  doStreamSpan.end();\n\n                  // Add response information to the root span:\n                  rootSpan.setAttributes(\n                    selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        'ai.usage.promptTokens': finalUsage.promptTokens,\n                        'ai.usage.completionTokens':\n                          finalUsage.completionTokens,\n                        'ai.response.object': {\n                          output: () => JSON.stringify(object),\n                        },\n                        'ai.response.providerMetadata':\n                          JSON.stringify(providerMetadata),\n                      },\n                    }),\n                  );\n\n                  // call onFinish callback:\n                  await onFinish?.({\n                    usage: finalUsage,\n                    object,\n                    error,\n                    response: {\n                      ...response,\n                      headers: rawResponse?.headers,\n                    },\n                    warnings,\n                    providerMetadata,\n                    experimental_providerMetadata: providerMetadata,\n                  });\n                } catch (error) {\n                  controller.enqueue({ type: 'error', error });\n                } finally {\n                  rootSpan.end();\n                }\n              },\n            }),\n          );\n\n        stitchableStream.addStream(transformedStream);\n      },\n    })\n      .catch(error => {\n        // add an empty stream with an error to break the stream:\n        stitchableStream.addStream(\n          new ReadableStream({\n            start(controller) {\n              controller.enqueue({ type: 'error', error });\n              controller.close();\n            },\n          }),\n        );\n      })\n      .finally(() => {\n        stitchableStream.close();\n      });\n\n    this.outputStrategy = outputStrategy;\n  }\n\n  get object() {\n    return this.objectPromise.value;\n  }\n\n  get usage() {\n    return this.usagePromise.value;\n  }\n\n  get experimental_providerMetadata() {\n    return this.providerMetadataPromise.value;\n  }\n\n  get providerMetadata() {\n    return this.providerMetadataPromise.value;\n  }\n\n  get warnings() {\n    return this.warningsPromise.value;\n  }\n\n  get request() {\n    return this.requestPromise.value;\n  }\n\n  get response() {\n    return this.responsePromise.value;\n  }\n\n  get partialObjectStream(): AsyncIterableStream<PARTIAL> {\n    return createAsyncIterableStream(\n      this.baseStream.pipeThrough(\n        new TransformStream<ObjectStreamPart<PARTIAL>, PARTIAL>({\n          transform(chunk, controller) {\n            switch (chunk.type) {\n              case 'object':\n                controller.enqueue(chunk.object);\n                break;\n\n              case 'text-delta':\n              case 'finish':\n              case 'error': // suppress error (use onError instead)\n                break;\n\n              default: {\n                const _exhaustiveCheck: never = chunk;\n                throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n              }\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get elementStream(): ELEMENT_STREAM {\n    return this.outputStrategy.createElementStream(this.baseStream);\n  }\n\n  get textStream(): AsyncIterableStream<string> {\n    return createAsyncIterableStream(\n      this.baseStream.pipeThrough(\n        new TransformStream<ObjectStreamPart<PARTIAL>, string>({\n          transform(chunk, controller) {\n            switch (chunk.type) {\n              case 'text-delta':\n                controller.enqueue(chunk.textDelta);\n                break;\n\n              case 'object':\n              case 'finish':\n              case 'error': // suppress error (use onError instead)\n                break;\n\n              default: {\n                const _exhaustiveCheck: never = chunk;\n                throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n              }\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get fullStream(): AsyncIterableStream<ObjectStreamPart<PARTIAL>> {\n    return createAsyncIterableStream(this.baseStream);\n  }\n\n  pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n    writeToServerResponse({\n      response,\n      status: init?.status,\n      statusText: init?.statusText,\n      headers: prepareOutgoingHttpHeaders(init?.headers, {\n        contentType: 'text/plain; charset=utf-8',\n      }),\n      stream: this.textStream.pipeThrough(new TextEncoderStream()),\n    });\n  }\n\n  toTextStreamResponse(init?: ResponseInit): Response {\n    return new Response(this.textStream.pipeThrough(new TextEncoderStream()), {\n      status: init?.status ?? 200,\n      headers: prepareResponseHeaders(init?.headers, {\n        contentType: 'text/plain; charset=utf-8',\n      }),\n    });\n  }\n}\n\nexport type ObjectStreamInputPart =\n  | {\n      type: 'error';\n      error: unknown;\n    }\n  | {\n      type: 'response-metadata';\n      id?: string;\n      timestamp?: Date;\n      modelId?: string;\n    }\n  | {\n      type: 'finish';\n      finishReason: FinishReason;\n      logprobs?: LogProbs;\n      usage: LanguageModelUsage;\n      providerMetadata?: ProviderMetadata;\n    };\n","import { createIdGenerator, IDGenerator } from '@ai-sdk/provider-utils';\nimport { Tracer } from '@opentelemetry/api';\nimport { InvalidArgumentError } from '../../errors/invalid-argument-error';\nimport { NoOutputSpecifiedError } from '../../errors/no-output-specified-error';\nimport { ToolExecutionError } from '../../errors/tool-execution-error';\nimport { UnsupportedModelVersionError } from '../../errors/unsupported-model-version-error';\nimport { CoreAssistantMessage, CoreMessage } from '../prompt';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareRetries } from '../prompt/prepare-retries';\nimport { prepareToolsAndToolChoice } from '../prompt/prepare-tools-and-tool-choice';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { stringifyForTelemetry } from '../prompt/stringify-for-telemetry';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordErrorOnSpan, recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { LanguageModel, ToolChoice } from '../types';\nimport { ProviderMetadata, ProviderOptions } from '../types/provider-metadata';\nimport {\n  addLanguageModelUsage,\n  calculateLanguageModelUsage,\n  LanguageModelUsage,\n} from '../types/usage';\nimport { removeTextAfterLastWhitespace } from '../util/remove-text-after-last-whitespace';\nimport { GenerateTextResult } from './generate-text-result';\nimport { DefaultGeneratedFile, GeneratedFile } from './generated-file';\nimport { Output } from './output';\nimport { parseToolCall } from './parse-tool-call';\nimport { asReasoningText, ReasoningDetail } from './reasoning-detail';\nimport { ResponseMessage, StepResult } from './step-result';\nimport { toResponseMessages } from './to-response-messages';\nimport { ToolCallArray } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair';\nimport { ToolResultArray } from './tool-result';\nimport { ToolSet } from './tool-set';\n\nconst originalGenerateId = createIdGenerator({\n  prefix: 'aitxt',\n  size: 24,\n});\n\nconst originalGenerateMessageId = createIdGenerator({\n  prefix: 'msg',\n  size: 24,\n});\n\n/**\nCallback that is set using the `onStepFinish` option.\n\n@param stepResult - The result of the step.\n */\nexport type GenerateTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n  stepResult: StepResult<TOOLS>,\n) => Promise<void> | void;\n\n/**\nGenerate a text and call tools for a given prompt using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamText` instead.\n\n@param model - The language model to use.\n\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n@param toolChoice - The tool choice strategy. Default: 'auto'.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param maxSteps - Maximum number of sequential LLM calls (steps), e.g. when you use tool calls.\n@param experimental_generateMessageId - Generate a unique ID for each message.\n\n@param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n\n@returns\nA result object that contains the generated text, the results of the tool calls, and additional information.\n */\nexport async function generateText<\n  TOOLS extends ToolSet,\n  OUTPUT = never,\n  OUTPUT_PARTIAL = never,\n>({\n  model,\n  tools,\n  toolChoice,\n  system,\n  prompt,\n  messages,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers,\n  maxSteps = 1,\n  experimental_generateMessageId: generateMessageId = originalGenerateMessageId,\n  experimental_output: output,\n  experimental_continueSteps: continueSteps = false,\n  experimental_telemetry: telemetry,\n  experimental_providerMetadata,\n  providerOptions = experimental_providerMetadata,\n  experimental_activeTools: activeTools,\n  experimental_prepareStep: prepareStep,\n  experimental_repairToolCall: repairToolCall,\n  _internal: {\n    generateId = originalGenerateId,\n    currentDate = () => new Date(),\n  } = {},\n  onStepFinish,\n  ...settings\n}: CallSettings &\n  Prompt & {\n    /**\nThe language model to use.\n     */\n    model: LanguageModel;\n\n    /**\nThe tools that the model can call. The model needs to support calling tools.\n*/\n    tools?: TOOLS;\n\n    /**\nThe tool choice strategy. Default: 'auto'.\n     */\n    toolChoice?: ToolChoice<TOOLS>;\n\n    /**\nMaximum number of sequential LLM calls (steps), e.g. when you use tool calls. Must be at least 1.\n\nA maximum number is required to prevent infinite loops in the case of misconfigured tools.\n\nBy default, it's set to 1, which means that only a single LLM call is made.\n     */\n    maxSteps?: number;\n\n    /**\nGenerate a unique ID for each message.\n     */\n    experimental_generateMessageId?: IDGenerator;\n\n    /**\nWhen enabled, the model will perform additional steps if the finish reason is \"length\" (experimental).\n\nBy default, it's set to false.\n     */\n    experimental_continueSteps?: boolean;\n\n    /**\nOptional telemetry configuration (experimental).\n     */\n    experimental_telemetry?: TelemetrySettings;\n\n    /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n    providerOptions?: ProviderOptions;\n\n    /**\n@deprecated Use `providerOptions` instead.\n     */\n    experimental_providerMetadata?: ProviderMetadata;\n\n    /**\nLimits the tools that are available for the model to call without\nchanging the tool call and result types in the result.\n     */\n    experimental_activeTools?: Array<keyof TOOLS>;\n\n    /**\nOptional specification for parsing structured outputs from the LLM response.\n     */\n    experimental_output?: Output<OUTPUT, OUTPUT_PARTIAL>;\n\n    /**\nOptional function that you can use to provide different settings for a step.\n\n@param options - The options for the step.\n@param options.steps - The steps that have been executed so far.\n@param options.stepNumber - The number of the step that is being executed.\n@param options.maxSteps - The maximum number of steps.\n@param options.model - The model that is being used.\n\n@returns An object that contains the settings for the step.\nIf you return undefined (or for undefined settings), the settings from the outer level will be used.\n    */\n    experimental_prepareStep?: (options: {\n      steps: Array<StepResult<TOOLS>>;\n      stepNumber: number;\n      maxSteps: number;\n      model: LanguageModel;\n    }) => PromiseLike<\n      | {\n          model?: LanguageModel;\n          toolChoice?: ToolChoice<TOOLS>;\n          experimental_activeTools?: Array<keyof TOOLS>;\n        }\n      | undefined\n    >;\n\n    /**\nA function that attempts to repair a tool call that failed to parse.\n     */\n    experimental_repairToolCall?: ToolCallRepairFunction<TOOLS>;\n\n    /**\n    Callback that is called when each step (LLM call) is finished, including intermediate steps.\n    */\n    onStepFinish?: GenerateTextOnStepFinishCallback<TOOLS>;\n\n    /**\n     * Internal. For test use only. May change without notice.\n     */\n    _internal?: {\n      generateId?: IDGenerator;\n      currentDate?: () => Date;\n    };\n  }): Promise<GenerateTextResult<TOOLS, OUTPUT>> {\n  if (typeof model === 'string' || model.specificationVersion !== 'v1') {\n    throw new UnsupportedModelVersionError();\n  }\n\n  if (maxSteps < 1) {\n    throw new InvalidArgumentError({\n      parameter: 'maxSteps',\n      value: maxSteps,\n      message: 'maxSteps must be at least 1',\n    });\n  }\n\n  const { maxRetries, retry } = prepareRetries({ maxRetries: maxRetriesArg });\n\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers,\n    settings: { ...settings, maxRetries },\n  });\n\n  const initialPrompt = standardizePrompt({\n    prompt: {\n      system: output?.injectIntoSystemPrompt({ system, model }) ?? system,\n      prompt,\n      messages,\n    },\n    tools,\n  });\n\n  const tracer = getTracer(telemetry);\n\n  return recordSpan({\n    name: 'ai.generateText',\n    attributes: selectTelemetryAttributes({\n      telemetry,\n      attributes: {\n        ...assembleOperationName({\n          operationId: 'ai.generateText',\n          telemetry,\n        }),\n        ...baseTelemetryAttributes,\n        // model:\n        'ai.model.provider': model.provider,\n        'ai.model.id': model.modelId,\n        // specific settings that only make sense on the outer level:\n        'ai.prompt': {\n          input: () => JSON.stringify({ system, prompt, messages }),\n        },\n        'ai.settings.maxSteps': maxSteps,\n      },\n    }),\n    tracer,\n    fn: async span => {\n      const callSettings = prepareCallSettings(settings);\n\n      let currentModelResponse: Awaited<\n        ReturnType<LanguageModel['doGenerate']>\n      > & { response: { id: string; timestamp: Date; modelId: string } };\n      let currentToolCalls: ToolCallArray<TOOLS> = [];\n      let currentToolResults: ToolResultArray<TOOLS> = [];\n      let currentReasoningDetails: Array<ReasoningDetail> = [];\n      let stepCount = 0;\n      const responseMessages: Array<ResponseMessage> = [];\n      let text = '';\n      const sources: GenerateTextResult<TOOLS, OUTPUT>['sources'] = [];\n      const steps: GenerateTextResult<TOOLS, OUTPUT>['steps'] = [];\n      let usage: LanguageModelUsage = {\n        completionTokens: 0,\n        promptTokens: 0,\n        totalTokens: 0,\n      };\n\n      let stepType: 'initial' | 'tool-result' | 'continue' | 'done' = 'initial';\n\n      do {\n        // after the 1st step, we need to switch to messages format:\n        const promptFormat = stepCount === 0 ? initialPrompt.type : 'messages';\n\n        const stepInputMessages = [\n          ...initialPrompt.messages,\n          ...responseMessages,\n        ];\n\n        const prepareStepResult = await prepareStep?.({\n          model,\n          steps,\n          maxSteps,\n          stepNumber: stepCount,\n        });\n\n        const stepToolChoice = prepareStepResult?.toolChoice ?? toolChoice;\n        const stepActiveTools =\n          prepareStepResult?.experimental_activeTools ?? activeTools;\n        const stepModel = prepareStepResult?.model ?? model;\n\n        const promptMessages = await convertToLanguageModelPrompt({\n          prompt: {\n            type: promptFormat,\n            system: initialPrompt.system,\n            messages: stepInputMessages,\n          },\n          modelSupportsImageUrls: stepModel.supportsImageUrls,\n          modelSupportsUrl: stepModel.supportsUrl?.bind(stepModel), // support 'this' context\n        });\n\n        const mode = {\n          type: 'regular' as const,\n          ...prepareToolsAndToolChoice({\n            tools,\n            toolChoice: stepToolChoice,\n            activeTools: stepActiveTools,\n          }),\n        };\n\n        currentModelResponse = await retry(() =>\n          recordSpan({\n            name: 'ai.generateText.doGenerate',\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: 'ai.generateText.doGenerate',\n                  telemetry,\n                }),\n                ...baseTelemetryAttributes,\n                // model:\n                'ai.model.provider': stepModel.provider,\n                'ai.model.id': stepModel.modelId,\n                // prompt:\n                'ai.prompt.format': { input: () => promptFormat },\n                'ai.prompt.messages': {\n                  input: () => stringifyForTelemetry(promptMessages),\n                },\n                'ai.prompt.tools': {\n                  // convert the language model level tools:\n                  input: () => mode.tools?.map(tool => JSON.stringify(tool)),\n                },\n                'ai.prompt.toolChoice': {\n                  input: () =>\n                    mode.toolChoice != null\n                      ? JSON.stringify(mode.toolChoice)\n                      : undefined,\n                },\n\n                // standardized gen-ai llm span attributes:\n                'gen_ai.system': stepModel.provider,\n                'gen_ai.request.model': stepModel.modelId,\n                'gen_ai.request.frequency_penalty': settings.frequencyPenalty,\n                'gen_ai.request.max_tokens': settings.maxTokens,\n                'gen_ai.request.presence_penalty': settings.presencePenalty,\n                'gen_ai.request.stop_sequences': settings.stopSequences,\n                'gen_ai.request.temperature': settings.temperature,\n                'gen_ai.request.top_k': settings.topK,\n                'gen_ai.request.top_p': settings.topP,\n              },\n            }),\n            tracer,\n            fn: async span => {\n              const result = await stepModel.doGenerate({\n                mode,\n                ...callSettings,\n                inputFormat: promptFormat,\n                responseFormat: output?.responseFormat({ model }),\n                prompt: promptMessages,\n                providerMetadata: providerOptions,\n                abortSignal,\n                headers,\n              });\n\n              // Fill in default values:\n              const responseData = {\n                id: result.response?.id ?? generateId(),\n                timestamp: result.response?.timestamp ?? currentDate(),\n                modelId: result.response?.modelId ?? stepModel.modelId,\n              };\n\n              // Add response information to the span:\n              span.setAttributes(\n                selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    'ai.response.finishReason': result.finishReason,\n                    'ai.response.text': {\n                      output: () => result.text,\n                    },\n                    'ai.response.toolCalls': {\n                      output: () => JSON.stringify(result.toolCalls),\n                    },\n                    'ai.response.id': responseData.id,\n                    'ai.response.model': responseData.modelId,\n                    'ai.response.timestamp':\n                      responseData.timestamp.toISOString(),\n                    'ai.response.providerMetadata': JSON.stringify(\n                      result.providerMetadata,\n                    ),\n\n                    'ai.usage.promptTokens': result.usage.promptTokens,\n                    'ai.usage.completionTokens': result.usage.completionTokens,\n\n                    // standardized gen-ai llm span attributes:\n                    'gen_ai.response.finish_reasons': [result.finishReason],\n                    'gen_ai.response.id': responseData.id,\n                    'gen_ai.response.model': responseData.modelId,\n                    'gen_ai.usage.input_tokens': result.usage.promptTokens,\n                    'gen_ai.usage.output_tokens': result.usage.completionTokens,\n                  },\n                }),\n              );\n\n              return { ...result, response: responseData };\n            },\n          }),\n        );\n\n        // parse tool calls:\n        currentToolCalls = await Promise.all(\n          (currentModelResponse.toolCalls ?? []).map(toolCall =>\n            parseToolCall({\n              toolCall,\n              tools,\n              repairToolCall,\n              system,\n              messages: stepInputMessages,\n            }),\n          ),\n        );\n\n        // execute tools:\n        currentToolResults =\n          tools == null\n            ? []\n            : await executeTools({\n                toolCalls: currentToolCalls,\n                tools,\n                tracer,\n                telemetry,\n                messages: stepInputMessages,\n                abortSignal,\n              });\n\n        // token usage:\n        const currentUsage = calculateLanguageModelUsage(\n          currentModelResponse.usage,\n        );\n        usage = addLanguageModelUsage(usage, currentUsage);\n\n        // check if another step is needed:\n        let nextStepType: 'done' | 'continue' | 'tool-result' = 'done';\n        if (++stepCount < maxSteps) {\n          if (\n            continueSteps &&\n            currentModelResponse.finishReason === 'length' &&\n            // only use continue when there are no tool calls:\n            currentToolCalls.length === 0\n          ) {\n            nextStepType = 'continue';\n          } else if (\n            // there are tool calls:\n            currentToolCalls.length > 0 &&\n            // all current tool calls have results:\n            currentToolResults.length === currentToolCalls.length\n          ) {\n            nextStepType = 'tool-result';\n          }\n        }\n\n        // text:\n        const originalText = currentModelResponse.text ?? '';\n        const stepTextLeadingWhitespaceTrimmed =\n          stepType === 'continue' && // only for continue steps\n          text.trimEnd() !== text // only trim when there is preceding whitespace\n            ? originalText.trimStart()\n            : originalText;\n        const stepText =\n          nextStepType === 'continue'\n            ? removeTextAfterLastWhitespace(stepTextLeadingWhitespaceTrimmed)\n            : stepTextLeadingWhitespaceTrimmed;\n\n        text =\n          nextStepType === 'continue' || stepType === 'continue'\n            ? text + stepText\n            : stepText;\n\n        currentReasoningDetails = asReasoningDetails(\n          currentModelResponse.reasoning,\n        );\n\n        // sources:\n        sources.push(...(currentModelResponse.sources ?? []));\n\n        // append to messages for potential next step:\n        if (stepType === 'continue') {\n          // continue step: update the last assistant message\n          // continue is only possible when there are no tool calls,\n          // so we can assume that there is a single last assistant message:\n          const lastMessage = responseMessages[\n            responseMessages.length - 1\n          ] as CoreAssistantMessage;\n\n          if (typeof lastMessage.content === 'string') {\n            lastMessage.content += stepText;\n          } else {\n            lastMessage.content.push({\n              text: stepText,\n              type: 'text',\n            });\n          }\n        } else {\n          responseMessages.push(\n            ...toResponseMessages({\n              text,\n              files: asFiles(currentModelResponse.files),\n              reasoning: asReasoningDetails(currentModelResponse.reasoning),\n              tools: tools ?? ({} as TOOLS),\n              toolCalls: currentToolCalls,\n              toolResults: currentToolResults,\n              messageId: generateMessageId(),\n              generateMessageId,\n            }),\n          );\n        }\n\n        // Add step information (after response messages are updated):\n        const currentStepResult: StepResult<TOOLS> = {\n          stepType,\n          text: stepText,\n          // TODO v5: rename reasoning to reasoningText (and use reasoning for composite array)\n          reasoning: asReasoningText(currentReasoningDetails),\n          reasoningDetails: currentReasoningDetails,\n          files: asFiles(currentModelResponse.files),\n          sources: currentModelResponse.sources ?? [],\n          toolCalls: currentToolCalls,\n          toolResults: currentToolResults,\n          finishReason: currentModelResponse.finishReason,\n          usage: currentUsage,\n          warnings: currentModelResponse.warnings,\n          logprobs: currentModelResponse.logprobs,\n          request: currentModelResponse.request ?? {},\n          response: {\n            ...currentModelResponse.response,\n            headers: currentModelResponse.rawResponse?.headers,\n            body: currentModelResponse.rawResponse?.body,\n\n            // deep clone msgs to avoid mutating past messages in multi-step:\n            messages: structuredClone(responseMessages),\n          },\n          providerMetadata: currentModelResponse.providerMetadata,\n          experimental_providerMetadata: currentModelResponse.providerMetadata,\n          isContinued: nextStepType === 'continue',\n        };\n        steps.push(currentStepResult);\n        await onStepFinish?.(currentStepResult);\n\n        stepType = nextStepType;\n      } while (stepType !== 'done');\n\n      // Add response information to the span:\n      span.setAttributes(\n        selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            'ai.response.finishReason': currentModelResponse.finishReason,\n            'ai.response.text': {\n              output: () => currentModelResponse.text,\n            },\n            'ai.response.toolCalls': {\n              output: () => JSON.stringify(currentModelResponse.toolCalls),\n            },\n\n            'ai.usage.promptTokens': currentModelResponse.usage.promptTokens,\n            'ai.usage.completionTokens':\n              currentModelResponse.usage.completionTokens,\n            'ai.response.providerMetadata': JSON.stringify(\n              currentModelResponse.providerMetadata,\n            ),\n          },\n        }),\n      );\n\n      return new DefaultGenerateTextResult({\n        text,\n        files: asFiles(currentModelResponse.files),\n        reasoning: asReasoningText(currentReasoningDetails),\n        reasoningDetails: currentReasoningDetails,\n        sources,\n        outputResolver: () => {\n          if (output == null) {\n            throw new NoOutputSpecifiedError();\n          }\n\n          return output.parseOutput(\n            { text },\n            {\n              response: currentModelResponse.response,\n              usage,\n              finishReason: currentModelResponse.finishReason,\n            },\n          );\n        },\n        toolCalls: currentToolCalls,\n        toolResults: currentToolResults,\n        finishReason: currentModelResponse.finishReason,\n        usage,\n        warnings: currentModelResponse.warnings,\n        request: currentModelResponse.request ?? {},\n        response: {\n          ...currentModelResponse.response,\n          headers: currentModelResponse.rawResponse?.headers,\n          body: currentModelResponse.rawResponse?.body,\n          messages: responseMessages,\n        },\n        logprobs: currentModelResponse.logprobs,\n        steps,\n        providerMetadata: currentModelResponse.providerMetadata,\n      });\n    },\n  });\n}\n\nasync function executeTools<TOOLS extends ToolSet>({\n  toolCalls,\n  tools,\n  tracer,\n  telemetry,\n  messages,\n  abortSignal,\n}: {\n  toolCalls: ToolCallArray<TOOLS>;\n  tools: TOOLS;\n  tracer: Tracer;\n  telemetry: TelemetrySettings | undefined;\n  messages: CoreMessage[];\n  abortSignal: AbortSignal | undefined;\n}): Promise<ToolResultArray<TOOLS>> {\n  const toolResults = await Promise.all(\n    toolCalls.map(async ({ toolCallId, toolName, args }) => {\n      const tool = tools[toolName];\n\n      if (tool?.execute == null) {\n        return undefined;\n      }\n\n      const result = await recordSpan({\n        name: 'ai.toolCall',\n        attributes: selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            ...assembleOperationName({\n              operationId: 'ai.toolCall',\n              telemetry,\n            }),\n            'ai.toolCall.name': toolName,\n            'ai.toolCall.id': toolCallId,\n            'ai.toolCall.args': {\n              output: () => JSON.stringify(args),\n            },\n          },\n        }),\n        tracer,\n        fn: async span => {\n          try {\n            const result = await tool.execute!(args, {\n              toolCallId,\n              messages,\n              abortSignal,\n            });\n\n            try {\n              span.setAttributes(\n                selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    'ai.toolCall.result': {\n                      output: () => JSON.stringify(result),\n                    },\n                  },\n                }),\n              );\n            } catch (ignored) {\n              // JSON stringify might fail if the result is not serializable,\n              // in which case we just ignore it. In the future we might want to\n              // add an optional serialize method to the tool interface and warn\n              // if the result is not serializable.\n            }\n\n            return result;\n          } catch (error) {\n            recordErrorOnSpan(span, error);\n            throw new ToolExecutionError({\n              toolCallId,\n              toolName,\n              toolArgs: args,\n              cause: error,\n            });\n          }\n        },\n      });\n\n      return {\n        type: 'tool-result',\n        toolCallId,\n        toolName,\n        args,\n        result,\n      } as ToolResultArray<TOOLS>[number];\n    }),\n  );\n\n  return toolResults.filter(\n    (result): result is NonNullable<typeof result> => result != null,\n  );\n}\n\nclass DefaultGenerateTextResult<TOOLS extends ToolSet, OUTPUT>\n  implements GenerateTextResult<TOOLS, OUTPUT>\n{\n  readonly text: GenerateTextResult<TOOLS, OUTPUT>['text'];\n  readonly files: GenerateTextResult<TOOLS, OUTPUT>['files'];\n  readonly reasoning: GenerateTextResult<TOOLS, OUTPUT>['reasoning'];\n  readonly reasoningDetails: GenerateTextResult<\n    TOOLS,\n    OUTPUT\n  >['reasoningDetails'];\n  readonly toolCalls: GenerateTextResult<TOOLS, OUTPUT>['toolCalls'];\n  readonly toolResults: GenerateTextResult<TOOLS, OUTPUT>['toolResults'];\n  readonly finishReason: GenerateTextResult<TOOLS, OUTPUT>['finishReason'];\n  readonly usage: GenerateTextResult<TOOLS, OUTPUT>['usage'];\n  readonly warnings: GenerateTextResult<TOOLS, OUTPUT>['warnings'];\n  readonly steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n  readonly logprobs: GenerateTextResult<TOOLS, OUTPUT>['logprobs'];\n  readonly experimental_providerMetadata: GenerateTextResult<\n    TOOLS,\n    OUTPUT\n  >['experimental_providerMetadata'];\n  readonly providerMetadata: GenerateTextResult<\n    TOOLS,\n    OUTPUT\n  >['providerMetadata'];\n  readonly response: GenerateTextResult<TOOLS, OUTPUT>['response'];\n  readonly request: GenerateTextResult<TOOLS, OUTPUT>['request'];\n  readonly sources: GenerateTextResult<TOOLS, OUTPUT>['sources'];\n\n  private readonly outputResolver: () => GenerateTextResult<\n    TOOLS,\n    OUTPUT\n  >['experimental_output'];\n\n  constructor(options: {\n    text: GenerateTextResult<TOOLS, OUTPUT>['text'];\n    files: GenerateTextResult<TOOLS, OUTPUT>['files'];\n    reasoning: GenerateTextResult<TOOLS, OUTPUT>['reasoning'];\n    reasoningDetails: GenerateTextResult<TOOLS, OUTPUT>['reasoningDetails'];\n    toolCalls: GenerateTextResult<TOOLS, OUTPUT>['toolCalls'];\n    toolResults: GenerateTextResult<TOOLS, OUTPUT>['toolResults'];\n    finishReason: GenerateTextResult<TOOLS, OUTPUT>['finishReason'];\n    usage: GenerateTextResult<TOOLS, OUTPUT>['usage'];\n    warnings: GenerateTextResult<TOOLS, OUTPUT>['warnings'];\n    logprobs: GenerateTextResult<TOOLS, OUTPUT>['logprobs'];\n    steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n    providerMetadata: GenerateTextResult<TOOLS, OUTPUT>['providerMetadata'];\n    response: GenerateTextResult<TOOLS, OUTPUT>['response'];\n    request: GenerateTextResult<TOOLS, OUTPUT>['request'];\n    outputResolver: () => GenerateTextResult<\n      TOOLS,\n      OUTPUT\n    >['experimental_output'];\n    sources: GenerateTextResult<TOOLS, OUTPUT>['sources'];\n  }) {\n    this.text = options.text;\n    this.files = options.files;\n    this.reasoning = options.reasoning;\n    this.reasoningDetails = options.reasoningDetails;\n    this.toolCalls = options.toolCalls;\n    this.toolResults = options.toolResults;\n    this.finishReason = options.finishReason;\n    this.usage = options.usage;\n    this.warnings = options.warnings;\n    this.request = options.request;\n    this.response = options.response;\n    this.steps = options.steps;\n    this.experimental_providerMetadata = options.providerMetadata;\n    this.providerMetadata = options.providerMetadata;\n    this.logprobs = options.logprobs;\n    this.outputResolver = options.outputResolver;\n    this.sources = options.sources;\n  }\n\n  get experimental_output() {\n    return this.outputResolver();\n  }\n}\n\nfunction asReasoningDetails(\n  reasoning:\n    | string\n    | Array<\n        | { type: 'text'; text: string; signature?: string }\n        | { type: 'redacted'; data: string }\n      >\n    | undefined,\n): Array<\n  | { type: 'text'; text: string; signature?: string }\n  | { type: 'redacted'; data: string }\n> {\n  if (reasoning == null) {\n    return [];\n  }\n\n  if (typeof reasoning === 'string') {\n    return [{ type: 'text', text: reasoning }];\n  }\n\n  return reasoning;\n}\n\nfunction asFiles(\n  files:\n    | Array<{\n        data: string | Uint8Array;\n        mimeType: string;\n      }>\n    | undefined,\n): Array<GeneratedFile> {\n  return files?.map(file => new DefaultGeneratedFile(file)) ?? [];\n}\n","import { safeParseJSON, safeValidateTypes } from '@ai-sdk/provider-utils';\nimport {\n  asSchema,\n  DeepPartial,\n  parsePartialJson,\n  Schema,\n} from '@ai-sdk/ui-utils';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../errors';\nimport { injectJsonInstruction } from '../generate-object/inject-json-instruction';\nimport {\n  FinishReason,\n  LanguageModel,\n  LanguageModelV1CallOptions,\n} from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../types/usage';\n\nexport interface Output<OUTPUT, PARTIAL> {\n  readonly type: 'object' | 'text';\n  injectIntoSystemPrompt(options: {\n    system: string | undefined;\n    model: LanguageModel;\n  }): string | undefined;\n\n  responseFormat: (options: {\n    model: LanguageModel;\n  }) => LanguageModelV1CallOptions['responseFormat'];\n\n  parsePartial(options: { text: string }): { partial: PARTIAL } | undefined;\n\n  parseOutput(\n    options: { text: string },\n    context: {\n      response: LanguageModelResponseMetadata;\n      usage: LanguageModelUsage;\n      finishReason: FinishReason;\n    },\n  ): OUTPUT;\n}\n\nexport const text = (): Output<string, string> => ({\n  type: 'text',\n\n  responseFormat: () => ({ type: 'text' }),\n\n  injectIntoSystemPrompt({ system }: { system: string | undefined }) {\n    return system;\n  },\n\n  parsePartial({ text }: { text: string }) {\n    return { partial: text };\n  },\n\n  parseOutput({ text }: { text: string }) {\n    return text;\n  },\n});\n\nexport const object = <OUTPUT>({\n  schema: inputSchema,\n}: {\n  schema: z.Schema<OUTPUT, z.ZodTypeDef, any> | Schema<OUTPUT>;\n}): Output<OUTPUT, DeepPartial<OUTPUT>> => {\n  const schema = asSchema(inputSchema);\n\n  return {\n    type: 'object',\n\n    responseFormat: ({ model }) => ({\n      type: 'json',\n      schema: model.supportsStructuredOutputs ? schema.jsonSchema : undefined,\n    }),\n\n    injectIntoSystemPrompt({ system, model }) {\n      // when the model supports structured outputs,\n      // we can use the system prompt as is:\n      return model.supportsStructuredOutputs\n        ? system\n        : injectJsonInstruction({\n            prompt: system,\n            schema: schema.jsonSchema,\n          });\n    },\n\n    parsePartial({ text }: { text: string }) {\n      const result = parsePartialJson(text);\n\n      switch (result.state) {\n        case 'failed-parse':\n        case 'undefined-input':\n          return undefined;\n\n        case 'repaired-parse':\n        case 'successful-parse':\n          return {\n            // Note: currently no validation of partial results:\n            partial: result.value as DeepPartial<OUTPUT>,\n          };\n\n        default: {\n          const _exhaustiveCheck: never = result.state;\n          throw new Error(`Unsupported parse state: ${_exhaustiveCheck}`);\n        }\n      }\n    },\n\n    parseOutput(\n      { text }: { text: string },\n      context: {\n        response: LanguageModelResponseMetadata;\n        usage: LanguageModelUsage;\n        finishReason: FinishReason;\n      },\n    ) {\n      const parseResult = safeParseJSON({ text });\n\n      if (!parseResult.success) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: could not parse the response.',\n          cause: parseResult.error,\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      const validationResult = safeValidateTypes({\n        value: parseResult.value,\n        schema,\n      });\n\n      if (!validationResult.success) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: response did not match schema.',\n          cause: validationResult.error,\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      return validationResult.value;\n    },\n  };\n};\n","/**\n * Merges two readable streams into a single readable stream, emitting values\n * from each stream as they become available.\n *\n * The first stream is prioritized over the second stream. If both streams have\n * values available, the first stream's value is emitted first.\n *\n * @template VALUE1 - The type of values emitted by the first stream.\n * @template VALUE2 - The type of values emitted by the second stream.\n * @param {ReadableStream<VALUE1>} stream1 - The first readable stream.\n * @param {ReadableStream<VALUE2>} stream2 - The second readable stream.\n * @returns {ReadableStream<VALUE1 | VALUE2>} A new readable stream that emits values from both input streams.\n */\nexport function mergeStreams<VALUE1, VALUE2>(\n  stream1: ReadableStream<VALUE1>,\n  stream2: ReadableStream<VALUE2>,\n): ReadableStream<VALUE1 | VALUE2> {\n  const reader1 = stream1.getReader();\n  const reader2 = stream2.getReader();\n\n  let lastRead1: Promise<ReadableStreamReadResult<VALUE1>> | undefined =\n    undefined;\n  let lastRead2: Promise<ReadableStreamReadResult<VALUE2>> | undefined =\n    undefined;\n\n  let stream1Done = false;\n  let stream2Done = false;\n\n  // only use when stream 2 is done:\n  async function readStream1(\n    controller: ReadableStreamDefaultController<VALUE1 | VALUE2>,\n  ) {\n    try {\n      if (lastRead1 == null) {\n        lastRead1 = reader1.read();\n      }\n\n      const result = await lastRead1;\n      lastRead1 = undefined;\n\n      if (!result.done) {\n        controller.enqueue(result.value);\n      } else {\n        controller.close();\n      }\n    } catch (error) {\n      controller.error(error);\n    }\n  }\n\n  // only use when stream 1 is done:\n  async function readStream2(\n    controller: ReadableStreamDefaultController<VALUE1 | VALUE2>,\n  ) {\n    try {\n      if (lastRead2 == null) {\n        lastRead2 = reader2.read();\n      }\n\n      const result = await lastRead2;\n      lastRead2 = undefined;\n\n      if (!result.done) {\n        controller.enqueue(result.value);\n      } else {\n        controller.close();\n      }\n    } catch (error) {\n      controller.error(error);\n    }\n  }\n\n  return new ReadableStream<VALUE1 | VALUE2>({\n    async pull(controller) {\n      try {\n        // stream 1 is done, we can only read from stream 2:\n        if (stream1Done) {\n          await readStream2(controller);\n          return;\n        }\n\n        // stream 2 is done, we can only read from stream 1:\n        if (stream2Done) {\n          await readStream1(controller);\n          return;\n        }\n\n        // pull the next value from the stream that was read last:\n        if (lastRead1 == null) {\n          lastRead1 = reader1.read();\n        }\n        if (lastRead2 == null) {\n          lastRead2 = reader2.read();\n        }\n\n        // Note on Promise.race (prioritizing stream 1 over stream 2):\n        // If the iterable contains one or more non-promise values and/or an already settled promise,\n        // then Promise.race() will settle to the first of these values found in the iterable.\n        const { result, reader } = await Promise.race([\n          lastRead1.then(result => ({ result, reader: reader1 })),\n          lastRead2.then(result => ({ result, reader: reader2 })),\n        ]);\n\n        if (!result.done) {\n          controller.enqueue(result.value);\n        }\n\n        if (reader === reader1) {\n          lastRead1 = undefined;\n          if (result.done) {\n            // stream 1 is done, we can only read from stream 2:\n            await readStream2(controller);\n            stream1Done = true;\n          }\n        } else {\n          lastRead2 = undefined;\n          // stream 2 is done, we can only read from stream 1:\n          if (result.done) {\n            stream2Done = true;\n            await readStream1(controller);\n          }\n        }\n      } catch (error) {\n        controller.error(error);\n      }\n    },\n    cancel() {\n      reader1.cancel();\n      reader2.cancel();\n    },\n  });\n}\n","import { AISDKError, LanguageModelV1Source } from '@ai-sdk/provider';\nimport { createIdGenerator, IDGenerator } from '@ai-sdk/provider-utils';\nimport { DataStreamString, formatDataStreamPart } from '@ai-sdk/ui-utils';\nimport { Span } from '@opentelemetry/api';\nimport { ServerResponse } from 'node:http';\nimport { InvalidArgumentError } from '../../errors/invalid-argument-error';\nimport { InvalidStreamPartError } from '../../errors/invalid-stream-part-error';\nimport { NoOutputSpecifiedError } from '../../errors/no-output-specified-error';\nimport { UnsupportedModelVersionError } from '../../errors/unsupported-model-version-error';\nimport { StreamData } from '../../streams/stream-data';\nimport { asArray } from '../../util/as-array';\nimport { consumeStream } from '../../util/consume-stream';\nimport { DelayedPromise } from '../../util/delayed-promise';\nimport { DataStreamWriter } from '../data-stream/data-stream-writer';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { CoreAssistantMessage } from '../prompt/message';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareRetries } from '../prompt/prepare-retries';\nimport { prepareToolsAndToolChoice } from '../prompt/prepare-tools-and-tool-choice';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { stringifyForTelemetry } from '../prompt/stringify-for-telemetry';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport {\n  FinishReason,\n  LanguageModel,\n  LogProbs,\n  ToolChoice,\n} from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata, ProviderOptions } from '../types/provider-metadata';\nimport { addLanguageModelUsage, LanguageModelUsage } from '../types/usage';\nimport {\n  AsyncIterableStream,\n  createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport { mergeStreams } from '../util/merge-streams';\nimport { now as originalNow } from '../util/now';\nimport { prepareOutgoingHttpHeaders } from '../util/prepare-outgoing-http-headers';\nimport { prepareResponseHeaders } from '../util/prepare-response-headers';\nimport { splitOnLastWhitespace } from '../util/split-on-last-whitespace';\nimport { writeToServerResponse } from '../util/write-to-server-response';\nimport { GeneratedFile } from './generated-file';\nimport { Output } from './output';\nimport { asReasoningText, ReasoningDetail } from './reasoning-detail';\nimport {\n  runToolsTransformation,\n  SingleRequestTextStreamPart,\n} from './run-tools-transformation';\nimport { ResponseMessage, StepResult } from './step-result';\nimport {\n  ConsumeStreamOptions,\n  DataStreamOptions,\n  StreamTextResult,\n  TextStreamPart,\n} from './stream-text-result';\nimport { toResponseMessages } from './to-response-messages';\nimport { ToolCallUnion } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair';\nimport { ToolResultUnion } from './tool-result';\nimport { ToolSet } from './tool-set';\n\nconst originalGenerateId = createIdGenerator({\n  prefix: 'aitxt',\n  size: 24,\n});\n\nconst originalGenerateMessageId = createIdGenerator({\n  prefix: 'msg',\n  size: 24,\n});\n\n/**\nA transformation that is applied to the stream.\n\n@param stopStream - A function that stops the source stream.\n@param tools - The tools that are accessible to and can be called by the model. The model needs to support calling tools.\n */\nexport type StreamTextTransform<TOOLS extends ToolSet> = (options: {\n  tools: TOOLS; // for type inference\n  stopStream: () => void;\n}) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;\n\n/**\nCallback that is set using the `onError` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnErrorCallback = (event: {\n  error: unknown;\n}) => Promise<void> | void;\n\n/**\nCallback that is set using the `onStepFinish` option.\n\n@param stepResult - The result of the step.\n */\nexport type StreamTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n  stepResult: StepResult<TOOLS>,\n) => Promise<void> | void;\n\n/**\nCallback that is set using the `onChunk` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnChunkCallback<TOOLS extends ToolSet> = (event: {\n  chunk: Extract<\n    TextStreamPart<TOOLS>,\n    {\n      type:\n        | 'text-delta'\n        | 'reasoning'\n        | 'source'\n        | 'tool-call'\n        | 'tool-call-streaming-start'\n        | 'tool-call-delta'\n        | 'tool-result';\n    }\n  >;\n}) => Promise<void> | void;\n\n/**\nCallback that is set using the `onFinish` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnFinishCallback<TOOLS extends ToolSet> = (\n  event: Omit<StepResult<TOOLS>, 'stepType' | 'isContinued'> & {\n    /**\nDetails for all steps.\n   */\n    readonly steps: StepResult<TOOLS>[];\n  },\n) => Promise<void> | void;\n\n/**\nGenerate a text and call tools for a given prompt using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateText` instead.\n\n@param model - The language model to use.\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param maxSteps - Maximum number of sequential LLM calls (steps), e.g. when you use tool calls.\n@param experimental_generateMessageId - Generate a unique ID for each message.\n\n@param onChunk - Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.\n@param onError - Callback that is called when an error occurs during streaming. You can use it to log errors.\n@param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n@param onFinish - Callback that is called when the LLM response and all request tool executions\n(for tools that have an `execute` function) are finished.\n\n@return\nA result object for accessing different stream types and additional information.\n */\nexport function streamText<\n  TOOLS extends ToolSet,\n  OUTPUT = never,\n  PARTIAL_OUTPUT = never,\n>({\n  model,\n  tools,\n  toolChoice,\n  system,\n  prompt,\n  messages,\n  maxRetries,\n  abortSignal,\n  headers,\n  maxSteps = 1,\n  experimental_generateMessageId: generateMessageId = originalGenerateMessageId,\n  experimental_output: output,\n  experimental_continueSteps: continueSteps = false,\n  experimental_telemetry: telemetry,\n  experimental_providerMetadata,\n  providerOptions = experimental_providerMetadata,\n  experimental_toolCallStreaming = false,\n  toolCallStreaming = experimental_toolCallStreaming,\n  experimental_activeTools: activeTools,\n  experimental_repairToolCall: repairToolCall,\n  experimental_transform: transform,\n  onChunk,\n  onError,\n  onFinish,\n  onStepFinish,\n  _internal: {\n    now = originalNow,\n    generateId = originalGenerateId,\n    currentDate = () => new Date(),\n  } = {},\n  ...settings\n}: CallSettings &\n  Prompt & {\n    /**\nThe language model to use.\n     */\n    model: LanguageModel;\n\n    /**\nThe tools that the model can call. The model needs to support calling tools.\n    */\n    tools?: TOOLS;\n\n    /**\nThe tool choice strategy. Default: 'auto'.\n     */\n    toolChoice?: ToolChoice<TOOLS>;\n\n    /**\nMaximum number of sequential LLM calls (steps), e.g. when you use tool calls. Must be at least 1.\n\nA maximum number is required to prevent infinite loops in the case of misconfigured tools.\n\nBy default, it's set to 1, which means that only a single LLM call is made.\n */\n    maxSteps?: number;\n\n    /**\nGenerate a unique ID for each message.\n     */\n    experimental_generateMessageId?: IDGenerator;\n\n    /**\nWhen enabled, the model will perform additional steps if the finish reason is \"length\" (experimental).\n\nBy default, it's set to false.\n     */\n    experimental_continueSteps?: boolean;\n\n    /**\nOptional telemetry configuration (experimental).\n     */\n    experimental_telemetry?: TelemetrySettings;\n\n    /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n    providerOptions?: ProviderOptions;\n\n    /**\n@deprecated Use `providerOptions` instead.\n */\n    experimental_providerMetadata?: ProviderMetadata;\n\n    /**\nLimits the tools that are available for the model to call without\nchanging the tool call and result types in the result.\n     */\n    experimental_activeTools?: Array<keyof TOOLS>;\n\n    /**\nOptional specification for parsing structured outputs from the LLM response.\n     */\n    experimental_output?: Output<OUTPUT, PARTIAL_OUTPUT>;\n\n    /**\nA function that attempts to repair a tool call that failed to parse.\n     */\n    experimental_repairToolCall?: ToolCallRepairFunction<TOOLS>;\n\n    /**\nEnable streaming of tool call deltas as they are generated. Disabled by default.\n     */\n    toolCallStreaming?: boolean;\n\n    /**\n@deprecated Use `toolCallStreaming` instead.\n     */\n    experimental_toolCallStreaming?: boolean;\n\n    /**\nOptional stream transformations.\nThey are applied in the order they are provided.\nThe stream transformations must maintain the stream structure for streamText to work correctly.\n     */\n    experimental_transform?:\n      | StreamTextTransform<TOOLS>\n      | Array<StreamTextTransform<TOOLS>>;\n\n    /**\nCallback that is called for each chunk of the stream.\nThe stream processing will pause until the callback promise is resolved.\n     */\n    onChunk?: StreamTextOnChunkCallback<TOOLS>;\n\n    /**\nCallback that is invoked when an error occurs during streaming.\nYou can use it to log errors.\nThe stream processing will pause until the callback promise is resolved.\n     */\n    onError?: StreamTextOnErrorCallback;\n\n    /**\nCallback that is called when the LLM response and all request tool executions\n(for tools that have an `execute` function) are finished.\n\nThe usage is the combined usage of all steps.\n     */\n    onFinish?: StreamTextOnFinishCallback<TOOLS>;\n\n    /**\nCallback that is called when each step (LLM call) is finished, including intermediate steps.\n    */\n    onStepFinish?: StreamTextOnStepFinishCallback<TOOLS>;\n\n    /**\nInternal. For test use only. May change without notice.\n     */\n    _internal?: {\n      now?: () => number;\n      generateId?: IDGenerator;\n      currentDate?: () => Date;\n    };\n  }): StreamTextResult<TOOLS, PARTIAL_OUTPUT> {\n  if (typeof model === 'string' || model.specificationVersion !== 'v1') {\n    throw new UnsupportedModelVersionError();\n  }\n\n  return new DefaultStreamTextResult<TOOLS, OUTPUT, PARTIAL_OUTPUT>({\n    model,\n    telemetry,\n    headers,\n    settings,\n    maxRetries,\n    abortSignal,\n    system,\n    prompt,\n    messages,\n    tools,\n    toolChoice,\n    toolCallStreaming,\n    transforms: asArray(transform),\n    activeTools,\n    repairToolCall,\n    maxSteps,\n    output,\n    continueSteps,\n    providerOptions,\n    onChunk,\n    onError,\n    onFinish,\n    onStepFinish,\n    now,\n    currentDate,\n    generateId,\n    generateMessageId,\n  });\n}\n\ntype EnrichedStreamPart<TOOLS extends ToolSet, PARTIAL_OUTPUT> = {\n  part: TextStreamPart<TOOLS>;\n  partialOutput: PARTIAL_OUTPUT | undefined;\n};\n\nfunction createOutputTransformStream<\n  TOOLS extends ToolSet,\n  OUTPUT,\n  PARTIAL_OUTPUT,\n>(\n  output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined,\n): TransformStream<\n  TextStreamPart<TOOLS>,\n  EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n> {\n  if (!output) {\n    return new TransformStream<\n      TextStreamPart<TOOLS>,\n      EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n    >({\n      transform(chunk, controller) {\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n      },\n    });\n  }\n\n  let text = '';\n  let textChunk = '';\n  let lastPublishedJson = '';\n\n  function publishTextChunk({\n    controller,\n    partialOutput = undefined,\n  }: {\n    controller: TransformStreamDefaultController<\n      EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n    >;\n    partialOutput?: PARTIAL_OUTPUT;\n  }) {\n    controller.enqueue({\n      part: { type: 'text-delta', textDelta: textChunk },\n      partialOutput,\n    });\n    textChunk = '';\n  }\n\n  return new TransformStream<\n    TextStreamPart<TOOLS>,\n    EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n  >({\n    transform(chunk, controller) {\n      // ensure that we publish the last text chunk before the step finish:\n      if (chunk.type === 'step-finish') {\n        publishTextChunk({ controller });\n      }\n\n      if (chunk.type !== 'text-delta') {\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n        return;\n      }\n\n      text += chunk.textDelta;\n      textChunk += chunk.textDelta;\n\n      // only publish if partial json can be parsed:\n      const result = output.parsePartial({ text });\n      if (result != null) {\n        // only send new json if it has changed:\n        const currentJson = JSON.stringify(result.partial);\n        if (currentJson !== lastPublishedJson) {\n          publishTextChunk({ controller, partialOutput: result.partial });\n          lastPublishedJson = currentJson;\n        }\n      }\n    },\n\n    flush(controller) {\n      // publish remaining text (there should be none if the content was correctly formatted):\n      if (textChunk.length > 0) {\n        publishTextChunk({ controller });\n      }\n    },\n  });\n}\n\nclass DefaultStreamTextResult<TOOLS extends ToolSet, OUTPUT, PARTIAL_OUTPUT>\n  implements StreamTextResult<TOOLS, PARTIAL_OUTPUT>\n{\n  private readonly warningsPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['warnings']>\n  >();\n  private readonly usagePromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['usage']>\n  >();\n  private readonly finishReasonPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['finishReason']>\n  >();\n  private readonly providerMetadataPromise = new DelayedPromise<\n    Awaited<\n      StreamTextResult<TOOLS, PARTIAL_OUTPUT>['experimental_providerMetadata']\n    >\n  >();\n  private readonly textPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['text']>\n  >();\n  private readonly reasoningPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['reasoning']>\n  >();\n  private readonly reasoningDetailsPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['reasoningDetails']>\n  >();\n  private readonly sourcesPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['sources']>\n  >();\n  private readonly filesPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['files']>\n  >();\n  private readonly toolCallsPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['toolCalls']>\n  >();\n  private readonly toolResultsPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['toolResults']>\n  >();\n  private readonly requestPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['request']>\n  >();\n  private readonly responsePromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['response']>\n  >();\n  private readonly stepsPromise = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['steps']>\n  >();\n\n  private readonly addStream: (\n    stream: ReadableStream<TextStreamPart<TOOLS>>,\n  ) => void;\n\n  private readonly closeStream: () => void;\n\n  private baseStream: ReadableStream<EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>>;\n\n  private output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined;\n\n  constructor({\n    model,\n    telemetry,\n    headers,\n    settings,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    system,\n    prompt,\n    messages,\n    tools,\n    toolChoice,\n    toolCallStreaming,\n    transforms,\n    activeTools,\n    repairToolCall,\n    maxSteps,\n    output,\n    continueSteps,\n    providerOptions,\n    now,\n    currentDate,\n    generateId,\n    generateMessageId,\n    onChunk,\n    onError,\n    onFinish,\n    onStepFinish,\n  }: {\n    model: LanguageModel;\n    telemetry: TelemetrySettings | undefined;\n    headers: Record<string, string | undefined> | undefined;\n    settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n    maxRetries: number | undefined;\n    abortSignal: AbortSignal | undefined;\n    system: Prompt['system'];\n    prompt: Prompt['prompt'];\n    messages: Prompt['messages'];\n    tools: TOOLS | undefined;\n    toolChoice: ToolChoice<TOOLS> | undefined;\n    toolCallStreaming: boolean;\n    transforms: Array<StreamTextTransform<TOOLS>>;\n    activeTools: Array<keyof TOOLS> | undefined;\n    repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;\n    maxSteps: number;\n    output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined;\n    continueSteps: boolean;\n    providerOptions: ProviderOptions | undefined;\n    now: () => number;\n    currentDate: () => Date;\n    generateId: () => string;\n    generateMessageId: () => string;\n\n    // callbacks:\n    onChunk: undefined | StreamTextOnChunkCallback<TOOLS>;\n    onError: undefined | StreamTextOnErrorCallback;\n    onFinish: undefined | StreamTextOnFinishCallback<TOOLS>;\n    onStepFinish: undefined | StreamTextOnStepFinishCallback<TOOLS>;\n  }) {\n    if (maxSteps < 1) {\n      throw new InvalidArgumentError({\n        parameter: 'maxSteps',\n        value: maxSteps,\n        message: 'maxSteps must be at least 1',\n      });\n    }\n\n    this.output = output;\n\n    // event processor for telemetry, invoking callbacks, etc.\n    // The event processor reads the transformed stream to enable correct\n    // recording of the final transformed outputs.\n    let recordedStepText = '';\n    let recordedContinuationText = '';\n    let recordedFullText = '';\n\n    let stepReasoning: Array<ReasoningDetail> = [];\n    let stepFiles: Array<GeneratedFile> = [];\n    let activeReasoningText: undefined | (ReasoningDetail & { type: 'text' }) =\n      undefined;\n\n    let recordedStepSources: LanguageModelV1Source[] = [];\n    const recordedSources: LanguageModelV1Source[] = [];\n\n    const recordedResponse: LanguageModelResponseMetadata & {\n      messages: Array<ResponseMessage>;\n    } = {\n      id: generateId(),\n      timestamp: currentDate(),\n      modelId: model.modelId,\n      messages: [],\n    };\n    let recordedToolCalls: ToolCallUnion<TOOLS>[] = [];\n    let recordedToolResults: ToolResultUnion<TOOLS>[] = [];\n    let recordedFinishReason: FinishReason | undefined = undefined;\n    let recordedUsage: LanguageModelUsage | undefined = undefined;\n    let stepType: 'initial' | 'continue' | 'tool-result' = 'initial';\n    const recordedSteps: StepResult<TOOLS>[] = [];\n    let rootSpan!: Span;\n\n    const eventProcessor = new TransformStream<\n      EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n      EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n    >({\n      async transform(chunk, controller) {\n        controller.enqueue(chunk); // forward the chunk to the next stream\n\n        const { part } = chunk;\n\n        if (\n          part.type === 'text-delta' ||\n          part.type === 'reasoning' ||\n          part.type === 'source' ||\n          part.type === 'tool-call' ||\n          part.type === 'tool-result' ||\n          part.type === 'tool-call-streaming-start' ||\n          part.type === 'tool-call-delta'\n        ) {\n          await onChunk?.({ chunk: part });\n        }\n\n        if (part.type === 'error') {\n          await onError?.({ error: part.error });\n        }\n\n        if (part.type === 'text-delta') {\n          recordedStepText += part.textDelta;\n          recordedContinuationText += part.textDelta;\n          recordedFullText += part.textDelta;\n        }\n\n        if (part.type === 'reasoning') {\n          if (activeReasoningText == null) {\n            activeReasoningText = { type: 'text', text: part.textDelta };\n            stepReasoning.push(activeReasoningText);\n          } else {\n            activeReasoningText.text += part.textDelta;\n          }\n        }\n\n        if (part.type === 'reasoning-signature') {\n          if (activeReasoningText == null) {\n            throw new AISDKError({\n              name: 'InvalidStreamPart',\n              message: 'reasoning-signature without reasoning',\n            });\n          }\n\n          activeReasoningText.signature = part.signature;\n          activeReasoningText = undefined; // signature concludes reasoning part\n        }\n\n        if (part.type === 'redacted-reasoning') {\n          stepReasoning.push({ type: 'redacted', data: part.data });\n        }\n\n        if (part.type === 'file') {\n          stepFiles.push(part);\n        }\n\n        if (part.type === 'source') {\n          recordedSources.push(part.source);\n          recordedStepSources.push(part.source);\n        }\n\n        if (part.type === 'tool-call') {\n          recordedToolCalls.push(part);\n        }\n\n        if (part.type === 'tool-result') {\n          recordedToolResults.push(part);\n        }\n\n        if (part.type === 'step-finish') {\n          const stepMessages = toResponseMessages({\n            text: recordedContinuationText,\n            files: stepFiles,\n            reasoning: stepReasoning,\n            tools: tools ?? ({} as TOOLS),\n            toolCalls: recordedToolCalls,\n            toolResults: recordedToolResults,\n            messageId: part.messageId,\n            generateMessageId,\n          });\n\n          // determine the next step type\n          const currentStep = recordedSteps.length;\n          let nextStepType: 'done' | 'continue' | 'tool-result' = 'done';\n          if (currentStep + 1 < maxSteps) {\n            if (\n              continueSteps &&\n              part.finishReason === 'length' &&\n              // only use continue when there are no tool calls:\n              recordedToolCalls.length === 0\n            ) {\n              nextStepType = 'continue';\n            } else if (\n              // there are tool calls:\n              recordedToolCalls.length > 0 &&\n              // all current tool calls have results:\n              recordedToolResults.length === recordedToolCalls.length\n            ) {\n              nextStepType = 'tool-result';\n            }\n          }\n\n          // Add step information (after response messages are updated):\n          const currentStepResult: StepResult<TOOLS> = {\n            stepType,\n            text: recordedStepText,\n            reasoning: asReasoningText(stepReasoning),\n            reasoningDetails: stepReasoning,\n            files: stepFiles,\n            sources: recordedStepSources,\n            toolCalls: recordedToolCalls,\n            toolResults: recordedToolResults,\n            finishReason: part.finishReason,\n            usage: part.usage,\n            warnings: part.warnings,\n            logprobs: part.logprobs,\n            request: part.request,\n            response: {\n              ...part.response,\n              messages: [...recordedResponse.messages, ...stepMessages],\n            },\n            providerMetadata: part.experimental_providerMetadata,\n            experimental_providerMetadata: part.experimental_providerMetadata,\n            isContinued: part.isContinued,\n          };\n\n          await onStepFinish?.(currentStepResult);\n\n          recordedSteps.push(currentStepResult);\n\n          recordedToolCalls = [];\n          recordedToolResults = [];\n          recordedStepText = '';\n          recordedStepSources = [];\n          stepReasoning = [];\n          stepFiles = [];\n          activeReasoningText = undefined;\n\n          if (nextStepType !== 'done') {\n            stepType = nextStepType;\n          }\n\n          if (nextStepType !== 'continue') {\n            recordedResponse.messages.push(...stepMessages);\n            recordedContinuationText = '';\n          }\n        }\n\n        if (part.type === 'finish') {\n          recordedResponse.id = part.response.id;\n          recordedResponse.timestamp = part.response.timestamp;\n          recordedResponse.modelId = part.response.modelId;\n          recordedResponse.headers = part.response.headers;\n          recordedUsage = part.usage;\n          recordedFinishReason = part.finishReason;\n        }\n      },\n\n      async flush(controller) {\n        try {\n          if (recordedSteps.length === 0) {\n            return; // no steps recorded (e.g. in error scenario)\n          }\n\n          // from last step (when there are errors there may be no last step)\n          const lastStep = recordedSteps[recordedSteps.length - 1];\n\n          self.warningsPromise.resolve(lastStep.warnings);\n          self.requestPromise.resolve(lastStep.request);\n          self.responsePromise.resolve(lastStep.response);\n          self.toolCallsPromise.resolve(lastStep.toolCalls);\n          self.toolResultsPromise.resolve(lastStep.toolResults);\n          self.providerMetadataPromise.resolve(\n            lastStep.experimental_providerMetadata,\n          );\n          self.reasoningPromise.resolve(lastStep.reasoning);\n          self.reasoningDetailsPromise.resolve(lastStep.reasoningDetails);\n\n          // derived:\n          const finishReason = recordedFinishReason ?? 'unknown';\n          const usage = recordedUsage ?? {\n            completionTokens: NaN,\n            promptTokens: NaN,\n            totalTokens: NaN,\n          };\n\n          // from finish:\n          self.finishReasonPromise.resolve(finishReason);\n          self.usagePromise.resolve(usage);\n\n          // aggregate results:\n          self.textPromise.resolve(recordedFullText);\n          self.sourcesPromise.resolve(recordedSources);\n          self.filesPromise.resolve(lastStep.files);\n          self.stepsPromise.resolve(recordedSteps);\n\n          // call onFinish callback:\n          await onFinish?.({\n            finishReason,\n            logprobs: undefined,\n            usage,\n            text: recordedFullText,\n            reasoning: lastStep.reasoning,\n            reasoningDetails: lastStep.reasoningDetails,\n            files: lastStep.files,\n            sources: lastStep.sources,\n            toolCalls: lastStep.toolCalls,\n            toolResults: lastStep.toolResults,\n            request: lastStep.request ?? {},\n            response: lastStep.response,\n            warnings: lastStep.warnings,\n            providerMetadata: lastStep.providerMetadata,\n            experimental_providerMetadata:\n              lastStep.experimental_providerMetadata,\n            steps: recordedSteps,\n          });\n\n          // Add response information to the root span:\n          rootSpan.setAttributes(\n            selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                'ai.response.finishReason': finishReason,\n                'ai.response.text': { output: () => recordedFullText },\n                'ai.response.toolCalls': {\n                  output: () =>\n                    lastStep.toolCalls?.length\n                      ? JSON.stringify(lastStep.toolCalls)\n                      : undefined,\n                },\n\n                'ai.usage.promptTokens': usage.promptTokens,\n                'ai.usage.completionTokens': usage.completionTokens,\n                'ai.response.providerMetadata': JSON.stringify(\n                  lastStep.providerMetadata,\n                ),\n              },\n            }),\n          );\n        } catch (error) {\n          controller.error(error);\n        } finally {\n          rootSpan.end();\n        }\n      },\n    });\n\n    // initialize the stitchable stream and the transformed stream:\n    const stitchableStream = createStitchableStream<TextStreamPart<TOOLS>>();\n    this.addStream = stitchableStream.addStream;\n    this.closeStream = stitchableStream.close;\n\n    let stream = stitchableStream.stream;\n\n    // transform the stream before output parsing\n    // to enable replacement of stream segments:\n    for (const transform of transforms) {\n      stream = stream.pipeThrough(\n        transform({\n          tools: tools as TOOLS,\n          stopStream() {\n            stitchableStream.terminate();\n          },\n        }),\n      );\n    }\n\n    this.baseStream = stream\n      .pipeThrough(createOutputTransformStream(output))\n      .pipeThrough(eventProcessor);\n\n    const { maxRetries, retry } = prepareRetries({\n      maxRetries: maxRetriesArg,\n    });\n\n    const tracer = getTracer(telemetry);\n\n    const baseTelemetryAttributes = getBaseTelemetryAttributes({\n      model,\n      telemetry,\n      headers,\n      settings: { ...settings, maxRetries },\n    });\n\n    const initialPrompt = standardizePrompt({\n      prompt: {\n        system: output?.injectIntoSystemPrompt({ system, model }) ?? system,\n        prompt,\n        messages,\n      },\n      tools,\n    });\n\n    const self = this;\n\n    recordSpan({\n      name: 'ai.streamText',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({ operationId: 'ai.streamText', telemetry }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n          'ai.settings.maxSteps': maxSteps,\n        },\n      }),\n      tracer,\n      endWhenDone: false,\n      fn: async rootSpanArg => {\n        rootSpan = rootSpanArg;\n\n        async function streamStep({\n          currentStep,\n          responseMessages,\n          usage,\n          stepType,\n          previousStepText,\n          hasLeadingWhitespace,\n          messageId,\n        }: {\n          currentStep: number;\n          responseMessages: Array<ResponseMessage>;\n          usage: LanguageModelUsage;\n          stepType: 'initial' | 'continue' | 'tool-result';\n          previousStepText: string;\n          hasLeadingWhitespace: boolean;\n          messageId: string;\n        }) {\n          // after the 1st step, we need to switch to messages format:\n          const promptFormat =\n            responseMessages.length === 0 ? initialPrompt.type : 'messages';\n\n          const stepInputMessages = [\n            ...initialPrompt.messages,\n            ...responseMessages,\n          ];\n\n          const promptMessages = await convertToLanguageModelPrompt({\n            prompt: {\n              type: promptFormat,\n              system: initialPrompt.system,\n              messages: stepInputMessages,\n            },\n            modelSupportsImageUrls: model.supportsImageUrls,\n            modelSupportsUrl: model.supportsUrl?.bind(model), // support 'this' context\n          });\n\n          const mode = {\n            type: 'regular' as const,\n            ...prepareToolsAndToolChoice({ tools, toolChoice, activeTools }),\n          };\n\n          const {\n            result: { stream, warnings, rawResponse, request },\n            doStreamSpan,\n            startTimestampMs,\n          } = await retry(() =>\n            recordSpan({\n              name: 'ai.streamText.doStream',\n              attributes: selectTelemetryAttributes({\n                telemetry,\n                attributes: {\n                  ...assembleOperationName({\n                    operationId: 'ai.streamText.doStream',\n                    telemetry,\n                  }),\n                  ...baseTelemetryAttributes,\n                  'ai.prompt.format': {\n                    input: () => promptFormat,\n                  },\n                  'ai.prompt.messages': {\n                    input: () => stringifyForTelemetry(promptMessages),\n                  },\n                  'ai.prompt.tools': {\n                    // convert the language model level tools:\n                    input: () => mode.tools?.map(tool => JSON.stringify(tool)),\n                  },\n                  'ai.prompt.toolChoice': {\n                    input: () =>\n                      mode.toolChoice != null\n                        ? JSON.stringify(mode.toolChoice)\n                        : undefined,\n                  },\n\n                  // standardized gen-ai llm span attributes:\n                  'gen_ai.system': model.provider,\n                  'gen_ai.request.model': model.modelId,\n                  'gen_ai.request.frequency_penalty': settings.frequencyPenalty,\n                  'gen_ai.request.max_tokens': settings.maxTokens,\n                  'gen_ai.request.presence_penalty': settings.presencePenalty,\n                  'gen_ai.request.stop_sequences': settings.stopSequences,\n                  'gen_ai.request.temperature': settings.temperature,\n                  'gen_ai.request.top_k': settings.topK,\n                  'gen_ai.request.top_p': settings.topP,\n                },\n              }),\n              tracer,\n              endWhenDone: false,\n              fn: async doStreamSpan => ({\n                startTimestampMs: now(), // get before the call\n                doStreamSpan,\n                result: await model.doStream({\n                  mode,\n                  ...prepareCallSettings(settings),\n                  inputFormat: promptFormat,\n                  responseFormat: output?.responseFormat({ model }),\n                  prompt: promptMessages,\n                  providerMetadata: providerOptions,\n                  abortSignal,\n                  headers,\n                }),\n              }),\n            }),\n          );\n\n          const transformedStream = runToolsTransformation({\n            tools,\n            generatorStream: stream,\n            toolCallStreaming,\n            tracer,\n            telemetry,\n            system,\n            messages: stepInputMessages,\n            repairToolCall,\n            abortSignal,\n          });\n\n          const stepRequest = request ?? {};\n          const stepToolCalls: ToolCallUnion<TOOLS>[] = [];\n          const stepToolResults: ToolResultUnion<TOOLS>[] = [];\n\n          const stepReasoning: Array<ReasoningDetail> = [];\n          const stepFiles: Array<GeneratedFile> = [];\n          let activeReasoningText:\n            | undefined\n            | (ReasoningDetail & { type: 'text' }) = undefined;\n\n          let stepFinishReason: FinishReason = 'unknown';\n          let stepUsage: LanguageModelUsage = {\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0,\n          };\n          let stepProviderMetadata: ProviderMetadata | undefined;\n          let stepFirstChunk = true;\n          let stepText = '';\n          let fullStepText = stepType === 'continue' ? previousStepText : '';\n          let stepLogProbs: LogProbs | undefined;\n          let stepResponse: { id: string; timestamp: Date; modelId: string } = {\n            id: generateId(),\n            timestamp: currentDate(),\n            modelId: model.modelId,\n          };\n\n          // chunk buffer when using continue:\n          let chunkBuffer = '';\n          let chunkTextPublished = false;\n          let inWhitespacePrefix = true;\n          let hasWhitespaceSuffix = false; // for next step. when true, step ended with whitespace\n\n          async function publishTextChunk({\n            controller,\n            chunk,\n          }: {\n            controller: TransformStreamDefaultController<TextStreamPart<TOOLS>>;\n            chunk: TextStreamPart<TOOLS> & { type: 'text-delta' };\n          }) {\n            controller.enqueue(chunk);\n\n            stepText += chunk.textDelta;\n            fullStepText += chunk.textDelta;\n            chunkTextPublished = true;\n            hasWhitespaceSuffix = chunk.textDelta.trimEnd() !== chunk.textDelta;\n          }\n\n          self.addStream(\n            transformedStream.pipeThrough(\n              new TransformStream<\n                SingleRequestTextStreamPart<TOOLS>,\n                TextStreamPart<TOOLS>\n              >({\n                async transform(chunk, controller): Promise<void> {\n                  if (stepFirstChunk) {\n                    // Telemetry for first chunk:\n                    const msToFirstChunk = now() - startTimestampMs;\n\n                    stepFirstChunk = false;\n\n                    doStreamSpan.addEvent('ai.stream.firstChunk', {\n                      'ai.response.msToFirstChunk': msToFirstChunk,\n                    });\n\n                    doStreamSpan.setAttributes({\n                      'ai.response.msToFirstChunk': msToFirstChunk,\n                    });\n\n                    // Step start:\n                    controller.enqueue({\n                      type: 'step-start',\n                      messageId,\n                      request: stepRequest,\n                      warnings: warnings ?? [],\n                    });\n                  }\n\n                  // Filter out empty text deltas\n                  if (\n                    chunk.type === 'text-delta' &&\n                    chunk.textDelta.length === 0\n                  ) {\n                    return;\n                  }\n\n                  const chunkType = chunk.type;\n                  switch (chunkType) {\n                    case 'text-delta': {\n                      if (continueSteps) {\n                        // when a new step starts, leading whitespace is to be discarded\n                        // when there is already preceding whitespace in the chunk buffer\n                        const trimmedChunkText =\n                          inWhitespacePrefix && hasLeadingWhitespace\n                            ? chunk.textDelta.trimStart()\n                            : chunk.textDelta;\n\n                        if (trimmedChunkText.length === 0) {\n                          break;\n                        }\n\n                        inWhitespacePrefix = false;\n                        chunkBuffer += trimmedChunkText;\n\n                        const split = splitOnLastWhitespace(chunkBuffer);\n\n                        // publish the text until the last whitespace:\n                        if (split != null) {\n                          chunkBuffer = split.suffix;\n\n                          await publishTextChunk({\n                            controller,\n                            chunk: {\n                              type: 'text-delta',\n                              textDelta: split.prefix + split.whitespace,\n                            },\n                          });\n                        }\n                      } else {\n                        await publishTextChunk({ controller, chunk });\n                      }\n                      break;\n                    }\n\n                    case 'reasoning': {\n                      controller.enqueue(chunk);\n\n                      if (activeReasoningText == null) {\n                        activeReasoningText = {\n                          type: 'text',\n                          text: chunk.textDelta,\n                        };\n                        stepReasoning.push(activeReasoningText);\n                      } else {\n                        activeReasoningText.text += chunk.textDelta;\n                      }\n\n                      break;\n                    }\n\n                    case 'reasoning-signature': {\n                      controller.enqueue(chunk);\n\n                      if (activeReasoningText == null) {\n                        throw new InvalidStreamPartError({\n                          chunk,\n                          message: 'reasoning-signature without reasoning',\n                        });\n                      }\n\n                      activeReasoningText.signature = chunk.signature;\n                      activeReasoningText = undefined; // signature concludes reasoning part\n                      break;\n                    }\n\n                    case 'redacted-reasoning': {\n                      controller.enqueue(chunk);\n                      stepReasoning.push({\n                        type: 'redacted',\n                        data: chunk.data,\n                      });\n\n                      break;\n                    }\n\n                    case 'tool-call': {\n                      controller.enqueue(chunk);\n                      // store tool calls for onFinish callback and toolCalls promise:\n                      stepToolCalls.push(chunk);\n                      break;\n                    }\n\n                    case 'tool-result': {\n                      controller.enqueue(chunk);\n                      // store tool results for onFinish callback and toolResults promise:\n                      stepToolResults.push(chunk);\n                      break;\n                    }\n\n                    case 'response-metadata': {\n                      stepResponse = {\n                        id: chunk.id ?? stepResponse.id,\n                        timestamp: chunk.timestamp ?? stepResponse.timestamp,\n                        modelId: chunk.modelId ?? stepResponse.modelId,\n                      };\n                      break;\n                    }\n\n                    case 'finish': {\n                      // Note: tool executions might not be finished yet when the finish event is emitted.\n                      // store usage and finish reason for promises and onFinish callback:\n                      stepUsage = chunk.usage;\n                      stepFinishReason = chunk.finishReason;\n                      stepProviderMetadata =\n                        chunk.experimental_providerMetadata;\n                      stepLogProbs = chunk.logprobs;\n\n                      // Telemetry for finish event timing\n                      // (since tool executions can take longer and distort calculations)\n                      const msToFinish = now() - startTimestampMs;\n                      doStreamSpan.addEvent('ai.stream.finish');\n                      doStreamSpan.setAttributes({\n                        'ai.response.msToFinish': msToFinish,\n                        'ai.response.avgCompletionTokensPerSecond':\n                          (1000 * stepUsage.completionTokens) / msToFinish,\n                      });\n\n                      break;\n                    }\n\n                    case 'file': {\n                      stepFiles.push(chunk);\n                      controller.enqueue(chunk);\n                      break;\n                    }\n\n                    // forward:\n                    case 'source':\n                    case 'tool-call-streaming-start':\n                    case 'tool-call-delta': {\n                      controller.enqueue(chunk);\n                      break;\n                    }\n\n                    case 'error': {\n                      controller.enqueue(chunk);\n                      stepFinishReason = 'error';\n                      break;\n                    }\n\n                    default: {\n                      const exhaustiveCheck: never = chunkType;\n                      throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n                    }\n                  }\n                },\n\n                // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n                async flush(controller) {\n                  const stepToolCallsJson =\n                    stepToolCalls.length > 0\n                      ? JSON.stringify(stepToolCalls)\n                      : undefined;\n\n                  // determine the next step type\n                  let nextStepType: 'done' | 'continue' | 'tool-result' =\n                    'done';\n                  if (currentStep + 1 < maxSteps) {\n                    if (\n                      continueSteps &&\n                      stepFinishReason === 'length' &&\n                      // only use continue when there are no tool calls:\n                      stepToolCalls.length === 0\n                    ) {\n                      nextStepType = 'continue';\n                    } else if (\n                      // there are tool calls:\n                      stepToolCalls.length > 0 &&\n                      // all current tool calls have results:\n                      stepToolResults.length === stepToolCalls.length\n                    ) {\n                      nextStepType = 'tool-result';\n                    }\n                  }\n\n                  // when using continuation, publish buffer on final step or if there\n                  // was no whitespace in the step:\n                  if (\n                    continueSteps &&\n                    chunkBuffer.length > 0 &&\n                    (nextStepType !== 'continue' || // when the next step is a regular step, publish the buffer\n                      (stepType === 'continue' && !chunkTextPublished)) // when the next step is a continue step, publish the buffer if no text was published in the step\n                  ) {\n                    await publishTextChunk({\n                      controller,\n                      chunk: {\n                        type: 'text-delta',\n                        textDelta: chunkBuffer,\n                      },\n                    });\n                    chunkBuffer = '';\n                  }\n\n                  // record telemetry information first to ensure best effort timing\n                  try {\n                    doStreamSpan.setAttributes(\n                      selectTelemetryAttributes({\n                        telemetry,\n                        attributes: {\n                          'ai.response.finishReason': stepFinishReason,\n                          'ai.response.text': { output: () => stepText },\n                          'ai.response.toolCalls': {\n                            output: () => stepToolCallsJson,\n                          },\n                          'ai.response.id': stepResponse.id,\n                          'ai.response.model': stepResponse.modelId,\n                          'ai.response.timestamp':\n                            stepResponse.timestamp.toISOString(),\n                          'ai.response.providerMetadata':\n                            JSON.stringify(stepProviderMetadata),\n\n                          'ai.usage.promptTokens': stepUsage.promptTokens,\n                          'ai.usage.completionTokens':\n                            stepUsage.completionTokens,\n\n                          // standardized gen-ai llm span attributes:\n                          'gen_ai.response.finish_reasons': [stepFinishReason],\n                          'gen_ai.response.id': stepResponse.id,\n                          'gen_ai.response.model': stepResponse.modelId,\n                          'gen_ai.usage.input_tokens': stepUsage.promptTokens,\n                          'gen_ai.usage.output_tokens':\n                            stepUsage.completionTokens,\n                        },\n                      }),\n                    );\n                  } catch (error) {\n                    // ignore error setting telemetry attributes\n                  } finally {\n                    // finish doStreamSpan before other operations for correct timing:\n                    doStreamSpan.end();\n                  }\n\n                  controller.enqueue({\n                    type: 'step-finish',\n                    finishReason: stepFinishReason,\n                    usage: stepUsage,\n                    providerMetadata: stepProviderMetadata,\n                    experimental_providerMetadata: stepProviderMetadata,\n                    logprobs: stepLogProbs,\n                    request: stepRequest,\n                    response: {\n                      ...stepResponse,\n                      headers: rawResponse?.headers,\n                    },\n                    warnings,\n                    isContinued: nextStepType === 'continue',\n                    messageId,\n                  });\n\n                  const combinedUsage = addLanguageModelUsage(usage, stepUsage);\n\n                  if (nextStepType === 'done') {\n                    controller.enqueue({\n                      type: 'finish',\n                      finishReason: stepFinishReason,\n                      usage: combinedUsage,\n                      providerMetadata: stepProviderMetadata,\n                      experimental_providerMetadata: stepProviderMetadata,\n                      logprobs: stepLogProbs,\n                      response: {\n                        ...stepResponse,\n                        headers: rawResponse?.headers,\n                      },\n                    });\n\n                    self.closeStream(); // close the stitchable stream\n                  } else {\n                    // append to messages for the next step:\n                    if (stepType === 'continue') {\n                      // continue step: update the last assistant message\n                      // continue is only possible when there are no tool calls,\n                      // so we can assume that there is a single last assistant message:\n                      const lastMessage = responseMessages[\n                        responseMessages.length - 1\n                      ] as CoreAssistantMessage;\n\n                      if (typeof lastMessage.content === 'string') {\n                        lastMessage.content += stepText;\n                      } else {\n                        lastMessage.content.push({\n                          text: stepText,\n                          type: 'text',\n                        });\n                      }\n                    } else {\n                      responseMessages.push(\n                        ...toResponseMessages({\n                          text: stepText,\n                          files: stepFiles,\n                          reasoning: stepReasoning,\n                          tools: tools ?? ({} as TOOLS),\n                          toolCalls: stepToolCalls,\n                          toolResults: stepToolResults,\n                          messageId,\n                          generateMessageId,\n                        }),\n                      );\n                    }\n\n                    await streamStep({\n                      currentStep: currentStep + 1,\n                      responseMessages,\n                      usage: combinedUsage,\n                      stepType: nextStepType,\n                      previousStepText: fullStepText,\n                      hasLeadingWhitespace: hasWhitespaceSuffix,\n                      messageId:\n                        // keep the same id when continuing a step:\n                        nextStepType === 'continue'\n                          ? messageId\n                          : generateMessageId(),\n                    });\n                  }\n                },\n              }),\n            ),\n          );\n        }\n\n        // add the initial stream to the stitchable stream\n        await streamStep({\n          currentStep: 0,\n          responseMessages: [],\n          usage: {\n            promptTokens: 0,\n            completionTokens: 0,\n            totalTokens: 0,\n          },\n          previousStepText: '',\n          stepType: 'initial',\n          hasLeadingWhitespace: false,\n          messageId: generateMessageId(),\n        });\n      },\n    }).catch(error => {\n      // add an error stream part and close the streams:\n      self.addStream(\n        new ReadableStream({\n          start(controller) {\n            controller.enqueue({ type: 'error', error });\n            controller.close();\n          },\n        }),\n      );\n      self.closeStream();\n    });\n  }\n\n  get warnings() {\n    return this.warningsPromise.value;\n  }\n\n  get usage() {\n    return this.usagePromise.value;\n  }\n\n  get finishReason() {\n    return this.finishReasonPromise.value;\n  }\n\n  get experimental_providerMetadata() {\n    return this.providerMetadataPromise.value;\n  }\n\n  get providerMetadata() {\n    return this.providerMetadataPromise.value;\n  }\n\n  get text() {\n    return this.textPromise.value;\n  }\n\n  get reasoning() {\n    return this.reasoningPromise.value;\n  }\n\n  get reasoningDetails() {\n    return this.reasoningDetailsPromise.value;\n  }\n\n  get sources() {\n    return this.sourcesPromise.value;\n  }\n\n  get files() {\n    return this.filesPromise.value;\n  }\n\n  get toolCalls() {\n    return this.toolCallsPromise.value;\n  }\n\n  get toolResults() {\n    return this.toolResultsPromise.value;\n  }\n\n  get request() {\n    return this.requestPromise.value;\n  }\n\n  get response() {\n    return this.responsePromise.value;\n  }\n\n  get steps() {\n    return this.stepsPromise.value;\n  }\n\n  /**\nSplit out a new stream from the original stream.\nThe original stream is replaced to allow for further splitting,\nsince we do not know how many times the stream will be split.\n\nNote: this leads to buffering the stream content on the server.\nHowever, the LLM results are expected to be small enough to not cause issues.\n   */\n  private teeStream() {\n    const [stream1, stream2] = this.baseStream.tee();\n    this.baseStream = stream2;\n    return stream1;\n  }\n\n  get textStream(): AsyncIterableStream<string> {\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream<EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>, string>({\n          transform({ part }, controller) {\n            if (part.type === 'text-delta') {\n              controller.enqueue(part.textDelta);\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get fullStream(): AsyncIterableStream<TextStreamPart<TOOLS>> {\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream<\n          EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n          TextStreamPart<TOOLS>\n        >({\n          transform({ part }, controller) {\n            controller.enqueue(part);\n          },\n        }),\n      ),\n    );\n  }\n\n  async consumeStream(options?: ConsumeStreamOptions): Promise<void> {\n    try {\n      await consumeStream({\n        stream: this.fullStream,\n        onError: options?.onError,\n      });\n    } catch (error) {\n      options?.onError?.(error);\n    }\n  }\n\n  get experimental_partialOutputStream(): AsyncIterableStream<PARTIAL_OUTPUT> {\n    if (this.output == null) {\n      throw new NoOutputSpecifiedError();\n    }\n\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream<\n          EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n          PARTIAL_OUTPUT\n        >({\n          transform({ partialOutput }, controller) {\n            if (partialOutput != null) {\n              controller.enqueue(partialOutput);\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  private toDataStreamInternal({\n    getErrorMessage = () => 'An error occurred.', // mask error messages for safety by default\n    sendUsage = true,\n    sendReasoning = false,\n    sendSources = false,\n    experimental_sendFinish = true,\n  }: {\n    getErrorMessage: ((error: unknown) => string) | undefined;\n    sendUsage: boolean | undefined;\n    sendReasoning: boolean | undefined;\n    sendSources: boolean | undefined;\n    experimental_sendFinish: boolean | undefined;\n  }): ReadableStream<DataStreamString> {\n    return this.fullStream.pipeThrough(\n      new TransformStream<TextStreamPart<TOOLS>, DataStreamString>({\n        transform: async (chunk, controller) => {\n          const chunkType = chunk.type;\n          switch (chunkType) {\n            case 'text-delta': {\n              controller.enqueue(formatDataStreamPart('text', chunk.textDelta));\n              break;\n            }\n\n            case 'reasoning': {\n              if (sendReasoning) {\n                controller.enqueue(\n                  formatDataStreamPart('reasoning', chunk.textDelta),\n                );\n              }\n              break;\n            }\n\n            case 'redacted-reasoning': {\n              if (sendReasoning) {\n                controller.enqueue(\n                  formatDataStreamPart('redacted_reasoning', {\n                    data: chunk.data,\n                  }),\n                );\n              }\n              break;\n            }\n\n            case 'reasoning-signature': {\n              if (sendReasoning) {\n                controller.enqueue(\n                  formatDataStreamPart('reasoning_signature', {\n                    signature: chunk.signature,\n                  }),\n                );\n              }\n              break;\n            }\n\n            case 'file': {\n              controller.enqueue(\n                formatDataStreamPart('file', {\n                  mimeType: chunk.mimeType,\n                  data: chunk.base64,\n                }),\n              );\n              break;\n            }\n\n            case 'source': {\n              if (sendSources) {\n                controller.enqueue(\n                  formatDataStreamPart('source', chunk.source),\n                );\n              }\n              break;\n            }\n\n            case 'tool-call-streaming-start': {\n              controller.enqueue(\n                formatDataStreamPart('tool_call_streaming_start', {\n                  toolCallId: chunk.toolCallId,\n                  toolName: chunk.toolName,\n                }),\n              );\n              break;\n            }\n\n            case 'tool-call-delta': {\n              controller.enqueue(\n                formatDataStreamPart('tool_call_delta', {\n                  toolCallId: chunk.toolCallId,\n                  argsTextDelta: chunk.argsTextDelta,\n                }),\n              );\n              break;\n            }\n\n            case 'tool-call': {\n              controller.enqueue(\n                formatDataStreamPart('tool_call', {\n                  toolCallId: chunk.toolCallId,\n                  toolName: chunk.toolName,\n                  args: chunk.args,\n                }),\n              );\n              break;\n            }\n\n            case 'tool-result': {\n              controller.enqueue(\n                formatDataStreamPart('tool_result', {\n                  toolCallId: chunk.toolCallId,\n                  result: chunk.result,\n                }),\n              );\n              break;\n            }\n\n            case 'error': {\n              controller.enqueue(\n                formatDataStreamPart('error', getErrorMessage(chunk.error)),\n              );\n              break;\n            }\n\n            case 'step-start': {\n              controller.enqueue(\n                formatDataStreamPart('start_step', {\n                  messageId: chunk.messageId,\n                }),\n              );\n              break;\n            }\n\n            case 'step-finish': {\n              controller.enqueue(\n                formatDataStreamPart('finish_step', {\n                  finishReason: chunk.finishReason,\n                  usage: sendUsage\n                    ? {\n                        promptTokens: chunk.usage.promptTokens,\n                        completionTokens: chunk.usage.completionTokens,\n                      }\n                    : undefined,\n                  isContinued: chunk.isContinued,\n                }),\n              );\n              break;\n            }\n\n            case 'finish': {\n              if (experimental_sendFinish) {\n                controller.enqueue(\n                  formatDataStreamPart('finish_message', {\n                    finishReason: chunk.finishReason,\n                    usage: sendUsage\n                      ? {\n                          promptTokens: chunk.usage.promptTokens,\n                          completionTokens: chunk.usage.completionTokens,\n                        }\n                      : undefined,\n                  }),\n                );\n              }\n              break;\n            }\n\n            default: {\n              const exhaustiveCheck: never = chunkType;\n              throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n            }\n          }\n        },\n      }),\n    );\n  }\n\n  pipeDataStreamToResponse(\n    response: ServerResponse,\n    {\n      status,\n      statusText,\n      headers,\n      data,\n      getErrorMessage,\n      sendUsage,\n      sendReasoning,\n      sendSources,\n      experimental_sendFinish,\n    }: ResponseInit &\n      DataStreamOptions & {\n        data?: StreamData;\n        getErrorMessage?: (error: unknown) => string;\n      } = {},\n  ) {\n    writeToServerResponse({\n      response,\n      status,\n      statusText,\n      headers: prepareOutgoingHttpHeaders(headers, {\n        contentType: 'text/plain; charset=utf-8',\n        dataStreamVersion: 'v1',\n      }),\n      stream: this.toDataStream({\n        data,\n        getErrorMessage,\n        sendUsage,\n        sendReasoning,\n        sendSources,\n        experimental_sendFinish,\n      }),\n    });\n  }\n\n  pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n    writeToServerResponse({\n      response,\n      status: init?.status,\n      statusText: init?.statusText,\n      headers: prepareOutgoingHttpHeaders(init?.headers, {\n        contentType: 'text/plain; charset=utf-8',\n      }),\n      stream: this.textStream.pipeThrough(new TextEncoderStream()),\n    });\n  }\n\n  // TODO breaking change 5.0: remove pipeThrough(new TextEncoderStream())\n  toDataStream(\n    options?: DataStreamOptions & {\n      data?: StreamData;\n      getErrorMessage?: (error: unknown) => string;\n    },\n  ) {\n    const stream = this.toDataStreamInternal({\n      getErrorMessage: options?.getErrorMessage,\n      sendUsage: options?.sendUsage,\n      sendReasoning: options?.sendReasoning,\n      sendSources: options?.sendSources,\n      experimental_sendFinish: options?.experimental_sendFinish,\n    }).pipeThrough(new TextEncoderStream());\n\n    return options?.data ? mergeStreams(options?.data.stream, stream) : stream;\n  }\n\n  mergeIntoDataStream(writer: DataStreamWriter, options?: DataStreamOptions) {\n    writer.merge(\n      this.toDataStreamInternal({\n        getErrorMessage: writer.onError,\n        sendUsage: options?.sendUsage,\n        sendReasoning: options?.sendReasoning,\n        sendSources: options?.sendSources,\n        experimental_sendFinish: options?.experimental_sendFinish,\n      }),\n    );\n  }\n\n  toDataStreamResponse({\n    headers,\n    status,\n    statusText,\n    data,\n    getErrorMessage,\n    sendUsage,\n    sendReasoning,\n    sendSources,\n    experimental_sendFinish,\n  }: ResponseInit &\n    DataStreamOptions & {\n      data?: StreamData;\n      getErrorMessage?: (error: unknown) => string;\n    } = {}): Response {\n    return new Response(\n      this.toDataStream({\n        data,\n        getErrorMessage,\n        sendUsage,\n        sendReasoning,\n        sendSources,\n        experimental_sendFinish,\n      }),\n      {\n        status,\n        statusText,\n        headers: prepareResponseHeaders(headers, {\n          contentType: 'text/plain; charset=utf-8',\n          dataStreamVersion: 'v1',\n        }),\n      },\n    );\n  }\n\n  toTextStreamResponse(init?: ResponseInit): Response {\n    return new Response(this.textStream.pipeThrough(new TextEncoderStream()), {\n      status: init?.status ?? 200,\n      headers: prepareResponseHeaders(init?.headers, {\n        contentType: 'text/plain; charset=utf-8',\n      }),\n    });\n  }\n}\n","import { z } from 'zod';\nimport {\n  inferParameters,\n  Tool,\n  ToolExecutionOptions,\n  ToolParameters,\n} from '../tool';\n\nexport const LATEST_PROTOCOL_VERSION = '2024-11-05';\nexport const SUPPORTED_PROTOCOL_VERSIONS = [\n  LATEST_PROTOCOL_VERSION,\n  '2024-10-07',\n];\n\nexport type ToolSchemas =\n  | Record<string, { parameters: ToolParameters }>\n  | 'automatic'\n  | undefined;\n\nexport type McpToolSet<TOOL_SCHEMAS extends ToolSchemas = 'automatic'> =\n  TOOL_SCHEMAS extends Record<string, { parameters: ToolParameters }>\n    ? {\n        [K in keyof TOOL_SCHEMAS]: Tool<\n          TOOL_SCHEMAS[K]['parameters'],\n          CallToolResult\n        > & {\n          execute: (\n            args: inferParameters<TOOL_SCHEMAS[K]['parameters']>,\n            options: ToolExecutionOptions,\n          ) => PromiseLike<CallToolResult>;\n        };\n      }\n    : {\n        [k: string]: Tool<z.ZodUnknown, CallToolResult> & {\n          execute: (\n            args: unknown,\n            options: ToolExecutionOptions,\n          ) => PromiseLike<CallToolResult>;\n        };\n      };\n\nconst ClientOrServerImplementationSchema = z\n  .object({\n    name: z.string(),\n    version: z.string(),\n  })\n  .passthrough();\nexport type Configuration = z.infer<typeof ClientOrServerImplementationSchema>;\n\nexport const BaseParamsSchema = z\n  .object({\n    _meta: z.optional(z.object({}).passthrough()),\n  })\n  .passthrough();\ntype BaseParams = z.infer<typeof BaseParamsSchema>;\nexport const ResultSchema = BaseParamsSchema;\n\nexport const RequestSchema = z.object({\n  method: z.string(),\n  params: z.optional(BaseParamsSchema),\n});\nexport type Request = z.infer<typeof RequestSchema>;\nexport type RequestOptions = {\n  signal?: AbortSignal;\n  timeout?: number;\n  maxTotalTimeout?: number;\n};\n\nexport type Notification = z.infer<typeof RequestSchema>;\n\nconst ServerCapabilitiesSchema = z\n  .object({\n    experimental: z.optional(z.object({}).passthrough()),\n    logging: z.optional(z.object({}).passthrough()),\n    prompts: z.optional(\n      z\n        .object({\n          listChanged: z.optional(z.boolean()),\n        })\n        .passthrough(),\n    ),\n    resources: z.optional(\n      z\n        .object({\n          subscribe: z.optional(z.boolean()),\n          listChanged: z.optional(z.boolean()),\n        })\n        .passthrough(),\n    ),\n    tools: z.optional(\n      z\n        .object({\n          listChanged: z.optional(z.boolean()),\n        })\n        .passthrough(),\n    ),\n  })\n  .passthrough();\nexport type ServerCapabilities = z.infer<typeof ServerCapabilitiesSchema>;\n\nexport const InitializeResultSchema = ResultSchema.extend({\n  protocolVersion: z.string(),\n  capabilities: ServerCapabilitiesSchema,\n  serverInfo: ClientOrServerImplementationSchema,\n  instructions: z.optional(z.string()),\n});\nexport type InitializeResult = z.infer<typeof InitializeResultSchema>;\n\nexport type PaginatedRequest = Request & {\n  params?: BaseParams & {\n    cursor?: string;\n  };\n};\n\nconst PaginatedResultSchema = ResultSchema.extend({\n  nextCursor: z.optional(z.string()),\n});\n\nconst ToolSchema = z\n  .object({\n    name: z.string(),\n    description: z.optional(z.string()),\n    inputSchema: z\n      .object({\n        type: z.literal('object'),\n        properties: z.optional(z.object({}).passthrough()),\n      })\n      .passthrough(),\n  })\n  .passthrough();\nexport type MCPTool = z.infer<typeof ToolSchema>;\nexport const ListToolsResultSchema = PaginatedResultSchema.extend({\n  tools: z.array(ToolSchema),\n});\nexport type ListToolsResult = z.infer<typeof ListToolsResultSchema>;\n\nconst TextContentSchema = z\n  .object({\n    type: z.literal('text'),\n    text: z.string(),\n  })\n  .passthrough();\nconst ImageContentSchema = z\n  .object({\n    type: z.literal('image'),\n    data: z.string().base64(),\n    mimeType: z.string(),\n  })\n  .passthrough();\nconst ResourceContentsSchema = z\n  .object({\n    /**\n     * The URI of this resource.\n     */\n    uri: z.string(),\n    /**\n     * The MIME type of this resource, if known.\n     */\n    mimeType: z.optional(z.string()),\n  })\n  .passthrough();\nconst TextResourceContentsSchema = ResourceContentsSchema.extend({\n  text: z.string(),\n});\nconst BlobResourceContentsSchema = ResourceContentsSchema.extend({\n  blob: z.string().base64(),\n});\nconst EmbeddedResourceSchema = z\n  .object({\n    type: z.literal('resource'),\n    resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),\n  })\n  .passthrough();\n\nexport const CallToolResultSchema = ResultSchema.extend({\n  content: z.array(\n    z.union([TextContentSchema, ImageContentSchema, EmbeddedResourceSchema]),\n  ),\n  isError: z.boolean().default(false).optional(),\n}).or(\n  ResultSchema.extend({\n    toolResult: z.unknown(),\n  }),\n);\nexport type CallToolResult = z.infer<typeof CallToolResultSchema>;\n","import { z } from 'zod';\nimport { BaseParamsSchema, RequestSchema, ResultSchema } from './types';\n\nconst JSONRPC_VERSION = '2.0';\n\nconst JSONRPCRequestSchema = z\n  .object({\n    jsonrpc: z.literal(JSONRPC_VERSION),\n    id: z.union([z.string(), z.number().int()]),\n  })\n  .merge(RequestSchema)\n  .strict();\n\nexport type JSONRPCRequest = z.infer<typeof JSONRPCRequestSchema>;\n\nconst JSONRPCResponseSchema = z\n  .object({\n    jsonrpc: z.literal(JSONRPC_VERSION),\n    id: z.union([z.string(), z.number().int()]),\n    result: ResultSchema,\n  })\n  .strict();\n\nexport type JSONRPCResponse = z.infer<typeof JSONRPCResponseSchema>;\n\nconst JSONRPCErrorSchema = z\n  .object({\n    jsonrpc: z.literal(JSONRPC_VERSION),\n    id: z.union([z.string(), z.number().int()]),\n    error: z.object({\n      code: z.number().int(),\n      message: z.string(),\n      data: z.optional(z.unknown()),\n    }),\n  })\n  .strict();\n\nexport type JSONRPCError = z.infer<typeof JSONRPCErrorSchema>;\n\nconst JSONRPCNotificationSchema = z\n  .object({\n    jsonrpc: z.literal(JSONRPC_VERSION),\n  })\n  .merge(\n    z.object({\n      method: z.string(),\n      params: z.optional(BaseParamsSchema),\n    }),\n  )\n  .strict();\n\nexport type JSONRPCNotification = z.infer<typeof JSONRPCNotificationSchema>;\n\nexport const JSONRPCMessageSchema = z.union([\n  JSONRPCRequestSchema,\n  JSONRPCNotificationSchema,\n  JSONRPCResponseSchema,\n  JSONRPCErrorSchema,\n]);\n\nexport type JSONRPCMessage = z.infer<typeof JSONRPCMessageSchema>;\n","import { formatDataStreamPart } from '@ai-sdk/ui-utils';\nimport { DataStreamWriter } from '../core/data-stream/data-stream-writer';\nimport { mergeStreams } from '../core/util/merge-streams';\nimport { prepareResponseHeaders } from '../core/util/prepare-response-headers';\nimport {\n  createCallbacksTransformer,\n  StreamCallbacks,\n} from './stream-callbacks';\nimport { StreamData } from './stream-data';\n\ntype LangChainImageDetail = 'auto' | 'low' | 'high';\n\ntype LangChainMessageContentText = {\n  type: 'text';\n  text: string;\n};\n\ntype LangChainMessageContentImageUrl = {\n  type: 'image_url';\n  image_url:\n    | string\n    | {\n        url: string;\n        detail?: LangChainImageDetail;\n      };\n};\n\ntype LangChainMessageContentComplex =\n  | LangChainMessageContentText\n  | LangChainMessageContentImageUrl\n  | (Record<string, any> & {\n      type?: 'text' | 'image_url' | string;\n    })\n  | (Record<string, any> & {\n      type?: never;\n    });\n\ntype LangChainMessageContent = string | LangChainMessageContentComplex[];\n\ntype LangChainAIMessageChunk = {\n  content: LangChainMessageContent;\n};\n\n// LC stream event v2\ntype LangChainStreamEvent = {\n  event: string;\n  data: any;\n};\n\nfunction toDataStreamInternal(\n  stream:\n    | ReadableStream<LangChainStreamEvent>\n    | ReadableStream<LangChainAIMessageChunk>\n    | ReadableStream<string>,\n  callbacks?: StreamCallbacks,\n) {\n  return stream\n    .pipeThrough(\n      new TransformStream<\n        LangChainStreamEvent | LangChainAIMessageChunk | string\n      >({\n        transform: async (value, controller) => {\n          // text stream:\n          if (typeof value === 'string') {\n            controller.enqueue(value);\n            return;\n          }\n\n          // LC stream events v2:\n          if ('event' in value) {\n            // chunk is AIMessage Chunk for on_chat_model_stream event:\n            if (value.event === 'on_chat_model_stream') {\n              forwardAIMessageChunk(\n                value.data?.chunk as LangChainAIMessageChunk,\n                controller,\n              );\n            }\n            return;\n          }\n\n          // AI Message chunk stream:\n          forwardAIMessageChunk(value, controller);\n        },\n      }),\n    )\n    .pipeThrough(createCallbacksTransformer(callbacks))\n    .pipeThrough(new TextDecoderStream())\n    .pipeThrough(\n      new TransformStream({\n        transform: async (chunk, controller) => {\n          controller.enqueue(formatDataStreamPart('text', chunk));\n        },\n      }),\n    );\n}\n\n/**\nConverts LangChain output streams to an AI SDK Data Stream.\n\nThe following streams are supported:\n- `LangChainAIMessageChunk` streams (LangChain `model.stream` output)\n- `string` streams (LangChain `StringOutputParser` output)\n */\nexport function toDataStream(\n  stream:\n    | ReadableStream<LangChainStreamEvent>\n    | ReadableStream<LangChainAIMessageChunk>\n    | ReadableStream<string>,\n  callbacks?: StreamCallbacks,\n) {\n  return toDataStreamInternal(stream, callbacks).pipeThrough(\n    new TextEncoderStream(),\n  );\n}\n\nexport function toDataStreamResponse(\n  stream:\n    | ReadableStream<LangChainStreamEvent>\n    | ReadableStream<LangChainAIMessageChunk>\n    | ReadableStream<string>,\n  options?: {\n    init?: ResponseInit;\n    data?: StreamData;\n    callbacks?: StreamCallbacks;\n  },\n) {\n  const dataStream = toDataStreamInternal(\n    stream,\n    options?.callbacks,\n  ).pipeThrough(new TextEncoderStream());\n  const data = options?.data;\n  const init = options?.init;\n\n  const responseStream = data\n    ? mergeStreams(data.stream, dataStream)\n    : dataStream;\n\n  return new Response(responseStream, {\n    status: init?.status ?? 200,\n    statusText: init?.statusText,\n    headers: prepareResponseHeaders(init?.headers, {\n      contentType: 'text/plain; charset=utf-8',\n      dataStreamVersion: 'v1',\n    }),\n  });\n}\n\nexport function mergeIntoDataStream(\n  stream:\n    | ReadableStream<LangChainStreamEvent>\n    | ReadableStream<LangChainAIMessageChunk>\n    | ReadableStream<string>,\n  options: { dataStream: DataStreamWriter; callbacks?: StreamCallbacks },\n) {\n  options.dataStream.merge(toDataStreamInternal(stream, options.callbacks));\n}\n\nfunction forwardAIMessageChunk(\n  chunk: LangChainAIMessageChunk,\n  controller: TransformStreamDefaultController<any>,\n) {\n  if (typeof chunk.content === 'string') {\n    controller.enqueue(chunk.content);\n  } else {\n    const content: LangChainMessageContentComplex[] = chunk.content;\n    for (const item of content) {\n      if (item.type === 'text') {\n        controller.enqueue(item.text);\n      }\n    }\n  }\n}\n","/**\n * Configuration options and helper callback methods for stream lifecycle events.\n */\nexport interface StreamCallbacks {\n  /** `onStart`: Called once when the stream is initialized. */\n  onStart?: () => Promise<void> | void;\n\n  /**\n   * `onCompletion`: Called for each tokenized message.\n   *\n   * @deprecated Use `onFinal` instead.\n   */\n  onCompletion?: (completion: string) => Promise<void> | void;\n\n  /** `onFinal`: Called once when the stream is closed with the final completion message. */\n  onFinal?: (completion: string) => Promise<void> | void;\n\n  /** `onToken`: Called for each tokenized message. */\n  onToken?: (token: string) => Promise<void> | void;\n\n  /** `onText`: Called for each text chunk. */\n  onText?: (text: string) => Promise<void> | void;\n}\n\n/**\n * Creates a transform stream that encodes input messages and invokes optional callback functions.\n * The transform stream uses the provided callbacks to execute custom logic at different stages of the stream's lifecycle.\n * - `onStart`: Called once when the stream is initialized.\n * - `onToken`: Called for each tokenized message.\n * - `onCompletion`: Called every time a completion message is received. This can occur multiple times when using e.g. OpenAI functions\n * - `onFinal`: Called once when the stream is closed with the final completion message.\n *\n * This function is useful when you want to process a stream of messages and perform specific actions during the stream's lifecycle.\n *\n * @param {StreamCallbacks} [callbacks] - An object containing the callback functions.\n * @return {TransformStream<string, Uint8Array>} A transform stream that encodes input messages as Uint8Array and allows the execution of custom logic through callbacks.\n *\n * @example\n * const callbacks = {\n *   onStart: async () => console.log('Stream started'),\n *   onToken: async (token) => console.log(`Token: ${token}`),\n *   onCompletion: async (completion) => console.log(`Completion: ${completion}`)\n *   onFinal: async () => data.close()\n * };\n * const transformer = createCallbacksTransformer(callbacks);\n */\nexport function createCallbacksTransformer(\n  callbacks: StreamCallbacks | undefined = {},\n): TransformStream<string, Uint8Array> {\n  const textEncoder = new TextEncoder();\n  let aggregatedResponse = '';\n\n  return new TransformStream({\n    async start(): Promise<void> {\n      if (callbacks.onStart) await callbacks.onStart();\n    },\n\n    async transform(message, controller): Promise<void> {\n      controller.enqueue(textEncoder.encode(message));\n\n      aggregatedResponse += message;\n\n      if (callbacks.onToken) await callbacks.onToken(message);\n      if (callbacks.onText && typeof message === 'string') {\n        await callbacks.onText(message);\n      }\n    },\n\n    async flush(): Promise<void> {\n      if (callbacks.onCompletion) {\n        await callbacks.onCompletion(aggregatedResponse);\n      }\n      if (callbacks.onFinal) {\n        await callbacks.onFinal(aggregatedResponse);\n      }\n    },\n  });\n}\n","import { convertAsyncIteratorToReadableStream } from '@ai-sdk/provider-utils';\nimport { formatDataStreamPart } from '@ai-sdk/ui-utils';\nimport { DataStreamWriter } from '../core/data-stream/data-stream-writer';\nimport { mergeStreams } from '../core/util/merge-streams';\nimport { prepareResponseHeaders } from '../core/util/prepare-response-headers';\nimport {\n  createCallbacksTransformer,\n  StreamCallbacks,\n} from './stream-callbacks';\nimport { StreamData } from './stream-data';\n\ntype EngineResponse = {\n  delta: string;\n};\n\nfunction toDataStreamInternal(\n  stream: AsyncIterable<EngineResponse>,\n  callbacks?: StreamCallbacks,\n) {\n  const trimStart = trimStartOfStream();\n\n  return convertAsyncIteratorToReadableStream(stream[Symbol.asyncIterator]())\n    .pipeThrough(\n      new TransformStream({\n        async transform(message, controller): Promise<void> {\n          controller.enqueue(trimStart(message.delta));\n        },\n      }),\n    )\n    .pipeThrough(createCallbacksTransformer(callbacks))\n    .pipeThrough(new TextDecoderStream())\n    .pipeThrough(\n      new TransformStream({\n        transform: async (chunk, controller) => {\n          controller.enqueue(formatDataStreamPart('text', chunk));\n        },\n      }),\n    );\n}\n\nexport function toDataStream(\n  stream: AsyncIterable<EngineResponse>,\n  callbacks?: StreamCallbacks,\n) {\n  return toDataStreamInternal(stream, callbacks).pipeThrough(\n    new TextEncoderStream(),\n  );\n}\n\nexport function toDataStreamResponse(\n  stream: AsyncIterable<EngineResponse>,\n  options: {\n    init?: ResponseInit;\n    data?: StreamData;\n    callbacks?: StreamCallbacks;\n  } = {},\n) {\n  const { init, data, callbacks } = options;\n  const dataStream = toDataStreamInternal(stream, callbacks).pipeThrough(\n    new TextEncoderStream(),\n  );\n  const responseStream = data\n    ? mergeStreams(data.stream, dataStream)\n    : dataStream;\n\n  return new Response(responseStream, {\n    status: init?.status ?? 200,\n    statusText: init?.statusText,\n    headers: prepareResponseHeaders(init?.headers, {\n      contentType: 'text/plain; charset=utf-8',\n      dataStreamVersion: 'v1',\n    }),\n  });\n}\n\nexport function mergeIntoDataStream(\n  stream: AsyncIterable<EngineResponse>,\n  options: {\n    dataStream: DataStreamWriter;\n    callbacks?: StreamCallbacks;\n  },\n) {\n  options.dataStream.merge(toDataStreamInternal(stream, options.callbacks));\n}\n\nfunction trimStartOfStream(): (text: string) => string {\n  let isStreamStart = true;\n\n  return (text: string): string => {\n    if (isStreamStart) {\n      text = text.trimStart();\n      if (text) isStreamStart = false;\n    }\n    return text;\n  };\n}\n","/**\n * Symbol used for identifying AI SDK Error instances.\n * Enables checking if an error is an instance of AISDKError across package versions.\n */\nconst marker = 'vercel.ai.error';\nconst symbol = Symbol.for(marker);\n\n/**\n * Custom error class for AI SDK related errors.\n * @extends Error\n */\nexport class AISDKError extends Error {\n  private readonly [symbol] = true; // used in isInstance\n\n  /**\n   * The underlying cause of the error, if any.\n   */\n  readonly cause?: unknown;\n\n  /**\n   * Creates an AI SDK Error.\n   *\n   * @param {Object} params - The parameters for creating the error.\n   * @param {string} params.name - The name of the error.\n   * @param {string} params.message - The error message.\n   * @param {unknown} [params.cause] - The underlying cause of the error.\n   */\n  constructor({\n    name,\n    message,\n    cause,\n  }: {\n    name: string;\n    message: string;\n    cause?: unknown;\n  }) {\n    super(message);\n\n    this.name = name;\n    this.cause = cause;\n  }\n\n  /**\n   * Checks if the given error is an AI SDK Error.\n   * @param {unknown} error - The error to check.\n   * @returns {boolean} True if the error is an AI SDK Error, false otherwise.\n   */\n  static isInstance(error: unknown): error is AISDKError {\n    return AISDKError.hasMarker(error, marker);\n  }\n\n  protected static hasMarker(error: unknown, marker: string): boolean {\n    const markerSymbol = Symbol.for(marker);\n    return (\n      error != null &&\n      typeof error === 'object' &&\n      markerSymbol in error &&\n      typeof error[markerSymbol] === 'boolean' &&\n      error[markerSymbol] === true\n    );\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_APICallError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class APICallError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly url: string;\n  readonly requestBodyValues: unknown;\n  readonly statusCode?: number;\n\n  readonly responseHeaders?: Record<string, string>;\n  readonly responseBody?: string;\n\n  readonly isRetryable: boolean;\n  readonly data?: unknown;\n\n  constructor({\n    message,\n    url,\n    requestBodyValues,\n    statusCode,\n    responseHeaders,\n    responseBody,\n    cause,\n    isRetryable = statusCode != null &&\n      (statusCode === 408 || // request timeout\n        statusCode === 409 || // conflict\n        statusCode === 429 || // too many requests\n        statusCode >= 500), // server error\n    data,\n  }: {\n    message: string;\n    url: string;\n    requestBodyValues: unknown;\n    statusCode?: number;\n    responseHeaders?: Record<string, string>;\n    responseBody?: string;\n    cause?: unknown;\n    isRetryable?: boolean;\n    data?: unknown;\n  }) {\n    super({ name, message, cause });\n\n    this.url = url;\n    this.requestBodyValues = requestBodyValues;\n    this.statusCode = statusCode;\n    this.responseHeaders = responseHeaders;\n    this.responseBody = responseBody;\n    this.isRetryable = isRetryable;\n    this.data = data;\n  }\n\n  static isInstance(error: unknown): error is APICallError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_EmptyResponseBodyError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class EmptyResponseBodyError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  constructor({ message = 'Empty response body' }: { message?: string } = {}) {\n    super({ name, message });\n  }\n\n  static isInstance(error: unknown): error is EmptyResponseBodyError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","export function getErrorMessage(error: unknown | undefined) {\n  if (error == null) {\n    return 'unknown error';\n  }\n\n  if (typeof error === 'string') {\n    return error;\n  }\n\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  return JSON.stringify(error);\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_InvalidArgumentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * A function argument is invalid.\n */\nexport class InvalidArgumentError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly argument: string;\n\n  constructor({\n    message,\n    cause,\n    argument,\n  }: {\n    argument: string;\n    message: string;\n    cause?: unknown;\n  }) {\n    super({ name, message, cause });\n\n    this.argument = argument;\n  }\n\n  static isInstance(error: unknown): error is InvalidArgumentError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\nimport { getErrorMessage } from './get-error-message';\n\nconst name = 'AI_JSONParseError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n// TODO v5: rename to ParseError\nexport class JSONParseError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly text: string;\n\n  constructor({ text, cause }: { text: string; cause: unknown }) {\n    super({\n      name,\n      message:\n        `JSON parsing failed: ` +\n        `Text: ${text}.\\n` +\n        `Error message: ${getErrorMessage(cause)}`,\n      cause,\n    });\n\n    this.text = text;\n  }\n\n  static isInstance(error: unknown): error is JSONParseError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\nimport { getErrorMessage } from './get-error-message';\n\nconst name = 'AI_TypeValidationError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class TypeValidationError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly value: unknown;\n\n  constructor({ value, cause }: { value: unknown; cause: unknown }) {\n    super({\n      name,\n      message:\n        `Type validation failed: ` +\n        `Value: ${JSON.stringify(value)}.\\n` +\n        `Error message: ${getErrorMessage(cause)}`,\n      cause,\n    });\n\n    this.value = value;\n  }\n\n  static isInstance(error: unknown): error is TypeValidationError {\n    return AISDKError.hasMarker(error, marker);\n  }\n\n  /**\n   * Wraps an error into a TypeValidationError.\n   * If the cause is already a TypeValidationError with the same value, it returns the cause.\n   * Otherwise, it creates a new TypeValidationError.\n   *\n   * @param {Object} params - The parameters for wrapping the error.\n   * @param {unknown} params.value - The value that failed validation.\n   * @param {unknown} params.cause - The original error or cause of the validation failure.\n   * @returns {TypeValidationError} A TypeValidationError instance.\n   */\n  static wrap({\n    value,\n    cause,\n  }: {\n    value: unknown;\n    cause: unknown;\n  }): TypeValidationError {\n    return TypeValidationError.isInstance(cause) && cause.value === value\n      ? cause\n      : new TypeValidationError({ value, cause });\n  }\n}\n","/**\n * The type of error that occurred.\n * @public\n */\nexport type ErrorType = 'invalid-retry' | 'unknown-field'\n\n/**\n * Error thrown when encountering an issue during parsing.\n *\n * @public\n */\nexport class ParseError extends Error {\n  /**\n   * The type of error that occurred.\n   */\n  type: ErrorType\n\n  /**\n   * In the case of an unknown field encountered in the stream, this will be the field name.\n   */\n  field?: string | undefined\n\n  /**\n   * In the case of an unknown field encountered in the stream, this will be the value of the field.\n   */\n  value?: string | undefined\n\n  /**\n   * The line that caused the error, if available.\n   */\n  line?: string | undefined\n\n  constructor(\n    message: string,\n    options: {type: ErrorType; field?: string; value?: string; line?: string},\n  ) {\n    super(message)\n    this.name = 'ParseError'\n    this.type = options.type\n    this.field = options.field\n    this.value = options.value\n    this.line = options.line\n  }\n}\n","/**\n * EventSource/Server-Sent Events parser\n * @see https://html.spec.whatwg.org/multipage/server-sent-events.html\n */\nimport {ParseError} from './errors.ts'\nimport type {EventSourceParser, ParserCallbacks} from './types.ts'\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nfunction noop(_arg: unknown) {\n  // intentional noop\n}\n\n/**\n * Creates a new EventSource parser.\n *\n * @param callbacks - Callbacks to invoke on different parsing events:\n *   - `onEvent` when a new event is parsed\n *   - `onError` when an error occurs\n *   - `onRetry` when a new reconnection interval has been sent from the server\n *   - `onComment` when a comment is encountered in the stream\n *\n * @returns A new EventSource parser, with `parse` and `reset` methods.\n * @public\n */\nexport function createParser(callbacks: ParserCallbacks): EventSourceParser {\n  if (typeof callbacks === 'function') {\n    throw new TypeError(\n      '`callbacks` must be an object, got a function instead. Did you mean `{onEvent: fn}`?',\n    )\n  }\n\n  const {onEvent = noop, onError = noop, onRetry = noop, onComment} = callbacks\n\n  let incompleteLine = ''\n\n  let isFirstChunk = true\n  let id: string | undefined\n  let data = ''\n  let eventType = ''\n\n  function feed(newChunk: string) {\n    // Strip any UTF8 byte order mark (BOM) at the start of the stream\n    const chunk = isFirstChunk ? newChunk.replace(/^\\xEF\\xBB\\xBF/, '') : newChunk\n\n    // If there was a previous incomplete line, append it to the new chunk,\n    // so we may process it together as a new (hopefully complete) chunk.\n    const [complete, incomplete] = splitLines(`${incompleteLine}${chunk}`)\n\n    for (const line of complete) {\n      parseLine(line)\n    }\n\n    incompleteLine = incomplete\n    isFirstChunk = false\n  }\n\n  function parseLine(line: string) {\n    // If the line is empty (a blank line), dispatch the event\n    if (line === '') {\n      dispatchEvent()\n      return\n    }\n\n    // If the line starts with a U+003A COLON character (:), ignore the line.\n    if (line.startsWith(':')) {\n      if (onComment) {\n        onComment(line.slice(line.startsWith(': ') ? 2 : 1))\n      }\n      return\n    }\n\n    // If the line contains a U+003A COLON character (:)\n    const fieldSeparatorIndex = line.indexOf(':')\n    if (fieldSeparatorIndex !== -1) {\n      // Collect the characters on the line before the first U+003A COLON character (:),\n      // and let `field` be that string.\n      const field = line.slice(0, fieldSeparatorIndex)\n\n      // Collect the characters on the line after the first U+003A COLON character (:),\n      // and let `value` be that string. If value starts with a U+0020 SPACE character,\n      // remove it from value.\n      const offset = line[fieldSeparatorIndex + 1] === ' ' ? 2 : 1\n      const value = line.slice(fieldSeparatorIndex + offset)\n\n      processField(field, value, line)\n      return\n    }\n\n    // Otherwise, the string is not empty but does not contain a U+003A COLON character (:)\n    // Process the field using the whole line as the field name, and an empty string as the field value.\n    // 👆 This is according to spec. That means that a line that has the value `data` will result in\n    // a newline being added to the current `data` buffer, for instance.\n    processField(line, '', line)\n  }\n\n  function processField(field: string, value: string, line: string) {\n    // Field names must be compared literally, with no case folding performed.\n    switch (field) {\n      case 'event':\n        // Set the `event type` buffer to field value\n        eventType = value\n        break\n      case 'data':\n        // Append the field value to the `data` buffer, then append a single U+000A LINE FEED(LF)\n        // character to the `data` buffer.\n        data = `${data}${value}\\n`\n        break\n      case 'id':\n        // If the field value does not contain U+0000 NULL, then set the `ID` buffer to\n        // the field value. Otherwise, ignore the field.\n        id = value.includes('\\0') ? undefined : value\n        break\n      case 'retry':\n        // If the field value consists of only ASCII digits, then interpret the field value as an\n        // integer in base ten, and set the event stream's reconnection time to that integer.\n        // Otherwise, ignore the field.\n        if (/^\\d+$/.test(value)) {\n          onRetry(parseInt(value, 10))\n        } else {\n          onError(\n            new ParseError(`Invalid \\`retry\\` value: \"${value}\"`, {\n              type: 'invalid-retry',\n              value,\n              line,\n            }),\n          )\n        }\n        break\n      default:\n        // Otherwise, the field is ignored.\n        onError(\n          new ParseError(\n            `Unknown field \"${field.length > 20 ? `${field.slice(0, 20)}…` : field}\"`,\n            {type: 'unknown-field', field, value, line},\n          ),\n        )\n        break\n    }\n  }\n\n  function dispatchEvent() {\n    const shouldDispatch = data.length > 0\n    if (shouldDispatch) {\n      onEvent({\n        id,\n        event: eventType || undefined,\n        // If the data buffer's last character is a U+000A LINE FEED (LF) character,\n        // then remove the last character from the data buffer.\n        data: data.endsWith('\\n') ? data.slice(0, -1) : data,\n      })\n    }\n\n    // Reset for the next event\n    id = undefined\n    data = ''\n    eventType = ''\n  }\n\n  function reset(options: {consume?: boolean} = {}) {\n    if (incompleteLine && options.consume) {\n      parseLine(incompleteLine)\n    }\n\n    isFirstChunk = true\n    id = undefined\n    data = ''\n    eventType = ''\n    incompleteLine = ''\n  }\n\n  return {feed, reset}\n}\n\n/**\n * For the given `chunk`, split it into lines according to spec, and return any remaining incomplete line.\n *\n * @param chunk - The chunk to split into lines\n * @returns A tuple containing an array of complete lines, and any remaining incomplete line\n * @internal\n */\nfunction splitLines(chunk: string): [complete: Array<string>, incomplete: string] {\n  /**\n   * According to the spec, a line is terminated by either:\n   * - U+000D CARRIAGE RETURN U+000A LINE FEED (CRLF) character pair\n   * - a single U+000A LINE FEED(LF) character not preceded by a U+000D CARRIAGE RETURN(CR) character\n   * - a single U+000D CARRIAGE RETURN(CR) character not followed by a U+000A LINE FEED(LF) character\n   */\n  const lines: Array<string> = []\n  let incompleteLine = ''\n  let searchIndex = 0\n\n  while (searchIndex < chunk.length) {\n    // Find next line terminator\n    const crIndex = chunk.indexOf('\\r', searchIndex)\n    const lfIndex = chunk.indexOf('\\n', searchIndex)\n\n    // Determine line end\n    let lineEnd = -1\n    if (crIndex !== -1 && lfIndex !== -1) {\n      // CRLF case\n      lineEnd = Math.min(crIndex, lfIndex)\n    } else if (crIndex !== -1) {\n      // CR at the end of a chunk might be part of a CRLF sequence that spans chunks,\n      // so we shouldn't treat it as a line terminator (yet)\n      if (crIndex === chunk.length - 1) {\n        lineEnd = -1\n      } else {\n        lineEnd = crIndex\n      }\n    } else if (lfIndex !== -1) {\n      lineEnd = lfIndex\n    }\n\n    // Extract line if terminator found\n    if (lineEnd === -1) {\n      // No terminator found, rest is incomplete\n      incompleteLine = chunk.slice(searchIndex)\n      break\n    } else {\n      const line = chunk.slice(searchIndex, lineEnd)\n      lines.push(line)\n\n      // Move past line terminator\n      searchIndex = lineEnd + 1\n      if (chunk[searchIndex - 1] === '\\r' && chunk[searchIndex] === '\\n') {\n        searchIndex++\n      }\n    }\n  }\n\n  return [lines, incompleteLine]\n}\n","import {createParser} from './parse.ts'\nimport type {EventSourceMessage, EventSourceParser} from './types.ts'\n\n/**\n * Options for the EventSourceParserStream.\n *\n * @public\n */\nexport interface StreamOptions {\n  /**\n   * Behavior when a parsing error occurs.\n   *\n   * - A custom function can be provided to handle the error.\n   * - `'terminate'` will error the stream and stop parsing.\n   * - Any other value will ignore the error and continue parsing.\n   *\n   * @defaultValue `undefined`\n   */\n  onError?: ('terminate' | ((error: Error) => void)) | undefined\n\n  /**\n   * Callback for when a reconnection interval is sent from the server.\n   *\n   * @param retry - The number of milliseconds to wait before reconnecting.\n   */\n  onRetry?: ((retry: number) => void) | undefined\n\n  /**\n   * Callback for when a comment is encountered in the stream.\n   *\n   * @param comment - The comment encountered in the stream.\n   */\n  onComment?: ((comment: string) => void) | undefined\n}\n\n/**\n * A TransformStream that ingests a stream of strings and produces a stream of `EventSourceMessage`.\n *\n * @example Basic usage\n * ```\n * const eventStream =\n *   response.body\n *     .pipeThrough(new TextDecoderStream())\n *     .pipeThrough(new EventSourceParserStream())\n * ```\n *\n * @example Terminate stream on parsing errors\n * ```\n * const eventStream =\n *  response.body\n *   .pipeThrough(new TextDecoderStream())\n *   .pipeThrough(new EventSourceParserStream({terminateOnError: true}))\n * ```\n *\n * @public\n */\nexport class EventSourceParserStream extends TransformStream<string, EventSourceMessage> {\n  constructor({onError, onRetry, onComment}: StreamOptions = {}) {\n    let parser!: EventSourceParser\n\n    super({\n      start(controller) {\n        parser = createParser({\n          onEvent: (event) => {\n            controller.enqueue(event)\n          },\n          onError(error) {\n            if (onError === 'terminate') {\n              controller.error(error)\n            } else if (typeof onError === 'function') {\n              onError(error)\n            }\n\n            // Ignore by default\n          },\n          onRetry,\n          onComment,\n        })\n      },\n      transform(chunk) {\n        parser.feed(chunk)\n      },\n    })\n  }\n}\n\nexport {type ErrorType, ParseError} from './errors.ts'\nexport type {EventSourceMessage} from './types.ts'\n","export function combineHeaders(\n  ...headers: Array<Record<string, string | undefined> | undefined>\n): Record<string, string | undefined> {\n  return headers.reduce(\n    (combinedHeaders, currentHeaders) => ({\n      ...combinedHeaders,\n      ...(currentHeaders ?? {}),\n    }),\n    {},\n  ) as Record<string, string | undefined>;\n}\n","/**\n * Creates a Promise that resolves after a specified delay\n * @param delayInMs - The delay duration in milliseconds. If null or undefined, resolves immediately.\n * @param signal - Optional AbortSignal to cancel the delay\n * @returns A Promise that resolves after the specified delay\n * @throws {DOMException} When the signal is aborted\n */\nexport async function delay(\n  delayInMs?: number | null,\n  options?: {\n    abortSignal?: AbortSignal;\n  },\n): Promise<void> {\n  if (delayInMs == null) {\n    return Promise.resolve();\n  }\n\n  const signal = options?.abortSignal;\n\n  return new Promise<void>((resolve, reject) => {\n    if (signal?.aborted) {\n      reject(createAbortError());\n      return;\n    }\n\n    const timeoutId = setTimeout(() => {\n      cleanup();\n      resolve();\n    }, delayInMs);\n\n    const cleanup = () => {\n      clearTimeout(timeoutId);\n      signal?.removeEventListener('abort', onAbort);\n    };\n\n    const onAbort = () => {\n      cleanup();\n      reject(createAbortError());\n    };\n\n    signal?.addEventListener('abort', onAbort);\n  });\n}\n\nfunction createAbortError(): DOMException {\n  return new DOMException('Delay was aborted', 'AbortError');\n}\n","/**\nExtracts the headers from a response object and returns them as a key-value object.\n\n@param response - The response object to extract headers from.\n@returns The headers as a key-value object.\n*/\nexport function extractResponseHeaders(response: Response) {\n  return Object.fromEntries<string>([...response.headers]);\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\n\n/**\nCreates an ID generator.\nThe total length of the ID is the sum of the prefix, separator, and random part length.\nNot cryptographically secure.\n\n@param alphabet - The alphabet to use for the ID. Default: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.\n@param prefix - The prefix of the ID to generate. Optional.\n@param separator - The separator between the prefix and the random part of the ID. Default: '-'.\n@param size - The size of the random part of the ID to generate. Default: 16.\n */\nexport const createIdGenerator = ({\n  prefix,\n  size = 16,\n  alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n  separator = '-',\n}: {\n  prefix?: string;\n  separator?: string;\n  size?: number;\n  alphabet?: string;\n} = {}): IdGenerator => {\n  const generator = () => {\n    const alphabetLength = alphabet.length;\n    const chars = new Array(size);\n    for (let i = 0; i < size; i++) {\n      chars[i] = alphabet[(Math.random() * alphabetLength) | 0];\n    }\n    return chars.join('');\n  };\n\n  if (prefix == null) {\n    return generator;\n  }\n\n  // check that the prefix is not part of the alphabet (otherwise prefix checking can fail randomly)\n  if (alphabet.includes(separator)) {\n    throw new InvalidArgumentError({\n      argument: 'separator',\n      message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`,\n    });\n  }\n\n  return () => `${prefix}${separator}${generator()}`;\n};\n\n/**\nA function that generates an ID.\n */\nexport type IdGenerator = () => string;\n\n/**\nGenerates a 16-character random string to use for IDs.\nNot cryptographically secure.\n */\nexport const generateId = createIdGenerator();\n","export function getErrorMessage(error: unknown | undefined) {\n  if (error == null) {\n    return 'unknown error';\n  }\n\n  if (typeof error === 'string') {\n    return error;\n  }\n\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  return JSON.stringify(error);\n}\n","export function isAbortError(error: unknown): error is Error {\n  return (\n    (error instanceof Error || error instanceof DOMException) &&\n    (error.name === 'AbortError' ||\n      error.name === 'ResponseAborted' || // Next.js\n      error.name === 'TimeoutError')\n  );\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { isAbortError } from './is-abort-error';\n\nconst FETCH_FAILED_ERROR_MESSAGES = ['fetch failed', 'failed to fetch'];\n\nexport function handleFetchError({\n  error,\n  url,\n  requestBodyValues,\n}: {\n  error: unknown;\n  url: string;\n  requestBodyValues: unknown;\n}) {\n  if (isAbortError(error)) {\n    return error;\n  }\n\n  // unwrap original error when fetch failed (for easier debugging):\n  if (\n    error instanceof TypeError &&\n    FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())\n  ) {\n    const cause = (error as any).cause;\n\n    if (cause != null) {\n      // Failed to connect to server:\n      return new APICallError({\n        message: `Cannot connect to API: ${cause.message}`,\n        cause,\n        url,\n        requestBodyValues,\n        isRetryable: true, // retry when network error\n      });\n    }\n  }\n\n  return error;\n}\n","export function getRuntimeEnvironmentUserAgent(\n  globalThisAny: any = globalThis as any,\n): string {\n  // Browsers\n  if (globalThisAny.window) {\n    return `runtime/browser`;\n  }\n\n  // Cloudflare Workers / Deno / Bun / Node.js >= 21.1\n  if (globalThisAny.navigator?.userAgent) {\n    return `runtime/${globalThisAny.navigator.userAgent.toLowerCase()}`;\n  }\n\n  // Nodes.js < 21.1\n  if (globalThisAny.process?.versions?.node) {\n    return `runtime/node.js/${globalThisAny.process.version.substring(0)}`;\n  }\n\n  if (globalThisAny.EdgeRuntime) {\n    return `runtime/vercel-edge`;\n  }\n\n  return 'runtime/unknown';\n}\n","/**\n * Normalizes different header inputs into a plain record with lower-case keys.\n * Entries with `undefined` or `null` values are removed.\n *\n * @param headers - Input headers (`Headers`, tuples array, plain record) to normalize.\n * @returns A record containing the normalized header entries.\n */\nexport function normalizeHeaders(\n  headers:\n    | HeadersInit\n    | Record<string, string | undefined>\n    | Array<[string, string | undefined]>\n    | undefined,\n): Record<string, string> {\n  if (headers == null) {\n    return {};\n  }\n\n  const normalized: Record<string, string> = {};\n\n  if (headers instanceof Headers) {\n    headers.forEach((value, key) => {\n      normalized[key.toLowerCase()] = value;\n    });\n  } else {\n    if (!Array.isArray(headers)) {\n      headers = Object.entries(headers);\n    }\n\n    for (const [key, value] of headers) {\n      if (value != null) {\n        normalized[key.toLowerCase()] = value;\n      }\n    }\n  }\n\n  return normalized;\n}\n","import { normalizeHeaders } from './normalize-headers';\n\n/**\n * Appends suffix parts to the `user-agent` header.\n * If a `user-agent` header already exists, the suffix parts are appended to it.\n * If no `user-agent` header exists, a new one is created with the suffix parts.\n * Automatically removes undefined entries from the headers.\n *\n * @param headers - The original headers.\n * @param userAgentSuffixParts - The parts to append to the `user-agent` header.\n * @returns The new headers with the `user-agent` header set or updated.\n */\nexport function withUserAgentSuffix(\n  headers: HeadersInit | Record<string, string | undefined> | undefined,\n  ...userAgentSuffixParts: string[]\n): Record<string, string> {\n  const normalizedHeaders = new Headers(normalizeHeaders(headers));\n\n  const currentUserAgentHeader = normalizedHeaders.get('user-agent') || '';\n\n  normalizedHeaders.set(\n    'user-agent',\n    [currentUserAgentHeader, ...userAgentSuffixParts].filter(Boolean).join(' '),\n  );\n\n  return Object.fromEntries(normalizedHeaders.entries());\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n  typeof __PACKAGE_VERSION__ !== 'undefined'\n    ? __PACKAGE_VERSION__\n    : '0.0.0-test';\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const getFromApi = async <T>({\n  url,\n  headers = {},\n  successfulResponseHandler,\n  failedResponseHandler,\n  abortSignal,\n  fetch = getOriginalFetch(),\n}: {\n  url: string;\n  headers?: Record<string, string | undefined>;\n  failedResponseHandler: ResponseHandler<Error>;\n  successfulResponseHandler: ResponseHandler<T>;\n  abortSignal?: AbortSignal;\n  fetch?: FetchFunction;\n}) => {\n  try {\n    const response = await fetch(url, {\n      method: 'GET',\n      headers: withUserAgentSuffix(\n        headers,\n        `ai-sdk/provider-utils/${VERSION}`,\n        getRuntimeEnvironmentUserAgent(),\n      ),\n      signal: abortSignal,\n    });\n\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (!response.ok) {\n      let errorInformation: {\n        value: Error;\n        responseHeaders?: Record<string, string> | undefined;\n      };\n\n      try {\n        errorInformation = await failedResponseHandler({\n          response,\n          url,\n          requestBodyValues: {},\n        });\n      } catch (error) {\n        if (isAbortError(error) || APICallError.isInstance(error)) {\n          throw error;\n        }\n\n        throw new APICallError({\n          message: 'Failed to process error response',\n          cause: error,\n          statusCode: response.status,\n          url,\n          responseHeaders,\n          requestBodyValues: {},\n        });\n      }\n\n      throw errorInformation.value;\n    }\n\n    try {\n      return await successfulResponseHandler({\n        response,\n        url,\n        requestBodyValues: {},\n      });\n    } catch (error) {\n      if (error instanceof Error) {\n        if (isAbortError(error) || APICallError.isInstance(error)) {\n          throw error;\n        }\n      }\n\n      throw new APICallError({\n        message: 'Failed to process successful response',\n        cause: error,\n        statusCode: response.status,\n        url,\n        responseHeaders,\n        requestBodyValues: {},\n      });\n    }\n  } catch (error) {\n    throw handleFetchError({ error, url, requestBodyValues: {} });\n  }\n};\n","/**\n * Loads an optional `string` setting from the environment or a parameter.\n *\n * @param settingValue - The setting value.\n * @param environmentVariableName - The environment variable name.\n * @returns The setting value.\n */\nexport function loadOptionalSetting({\n  settingValue,\n  environmentVariableName,\n}: {\n  settingValue: string | undefined;\n  environmentVariableName: string;\n}): string | undefined {\n  if (typeof settingValue === 'string') {\n    return settingValue;\n  }\n\n  if (settingValue != null || typeof process === 'undefined') {\n    return undefined;\n  }\n\n  settingValue = process.env[environmentVariableName];\n\n  if (settingValue == null || typeof settingValue !== 'string') {\n    return undefined;\n  }\n\n  return settingValue;\n}\n","// Licensed under BSD-3-Clause (this file only)\n// Code adapted from https://github.com/fastify/secure-json-parse/blob/783fcb1b5434709466759847cec974381939673a/index.js\n//\n// Copyright (c) Vercel, Inc. (https://vercel.com)\n// Copyright (c) 2019 The Fastify Team\n// Copyright (c) 2019, Sideway Inc, and project contributors\n// All rights reserved.\n//\n// The complete list of contributors can be found at:\n// - https://github.com/hapijs/bourne/graphs/contributors\n// - https://github.com/fastify/secure-json-parse/graphs/contributors\n// - https://github.com/vercel/ai/commits/main/packages/provider-utils/src/secure-parse-json.ts\n//\n// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n//\n// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nconst suspectProtoRx =\n  /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/;\nconst suspectConstructorRx =\n  /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/;\n\nfunction _parse(text: string) {\n  // Parse normally\n  const obj = JSON.parse(text);\n\n  // Ignore null and non-objects\n  if (obj === null || typeof obj !== 'object') {\n    return obj;\n  }\n\n  if (\n    suspectProtoRx.test(text) === false &&\n    suspectConstructorRx.test(text) === false\n  ) {\n    return obj;\n  }\n\n  // Scan result for proto keys\n  return filter(obj);\n}\n\nfunction filter(obj: any) {\n  let next = [obj];\n\n  while (next.length) {\n    const nodes = next;\n    next = [];\n\n    for (const node of nodes) {\n      if (Object.prototype.hasOwnProperty.call(node, '__proto__')) {\n        throw new SyntaxError('Object contains forbidden prototype property');\n      }\n\n      if (\n        Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n        node.constructor !== null &&\n        typeof node.constructor === 'object' &&\n        Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')\n      ) {\n        throw new SyntaxError('Object contains forbidden prototype property');\n      }\n\n      for (const key in node) {\n        const value = node[key];\n        if (value && typeof value === 'object') {\n          next.push(value);\n        }\n      }\n    }\n  }\n  return obj;\n}\n\nexport function secureJsonParse(text: string) {\n  const { stackTraceLimit } = Error;\n  try {\n    // Performance optimization, see https://github.com/fastify/secure-json-parse/pull/90\n    Error.stackTraceLimit = 0;\n  } catch (e) {\n    // Fallback in case Error is immutable (v8 readonly)\n    return _parse(text);\n  }\n\n  try {\n    return _parse(text);\n  } finally {\n    Error.stackTraceLimit = stackTraceLimit;\n  }\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { StandardSchemaV1 } from '@standard-schema/spec';\n\n/**\n * Used to mark validator functions so we can support both Zod and custom schemas.\n */\nexport const validatorSymbol = Symbol.for('vercel.ai.validator');\n\nexport type ValidationResult<OBJECT> =\n  | { success: true; value: OBJECT }\n  | { success: false; error: Error };\n\nexport type Validator<OBJECT = unknown> = {\n  /**\n   * Used to mark validator functions so we can support both Zod and custom schemas.\n   */\n  [validatorSymbol]: true;\n\n  /**\n   * Optional. Validates that the structure of a value matches this schema,\n   * and returns a typed version of the value if it does.\n   */\n  readonly validate?: (\n    value: unknown,\n  ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n};\n\n/**\n * Create a validator.\n *\n * @param validate A validation function for the schema.\n */\nexport function validator<OBJECT>(\n  validate?:\n    | undefined\n    | ((\n        value: unknown,\n      ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>),\n): Validator<OBJECT> {\n  return { [validatorSymbol]: true, validate };\n}\n\nexport function isValidator(value: unknown): value is Validator {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    validatorSymbol in value &&\n    value[validatorSymbol] === true &&\n    'validate' in value\n  );\n}\n\n/**\n * Creates a validator with deferred creation.\n * This is important to reduce the startup time of the library\n * and to avoid initializing unused validators.\n *\n * @param createValidator A function that creates a validator.\n * @returns A function that returns a validator.\n */\nexport function lazyValidator<OBJECT>(\n  createValidator: () => Validator<OBJECT>,\n): LazyValidator<OBJECT> {\n  // cache the validator to avoid initializing it multiple times\n  let validator: Validator<OBJECT> | undefined;\n  return () => {\n    if (validator == null) {\n      validator = createValidator();\n    }\n    return validator;\n  };\n}\n\nexport type LazyValidator<OBJECT> = () => Validator<OBJECT>;\n\nexport type FlexibleValidator<OBJECT> =\n  | Validator<OBJECT>\n  | LazyValidator<OBJECT>\n  | StandardSchemaV1<unknown, OBJECT>;\n\nexport type InferValidator<SCHEMA> =\n  SCHEMA extends StandardSchemaV1<unknown, infer T>\n    ? T\n    : SCHEMA extends LazyValidator<infer T>\n      ? T\n      : SCHEMA extends Validator<infer T>\n        ? T\n        : never;\n\nexport function asValidator<OBJECT>(\n  value: FlexibleValidator<OBJECT>,\n): Validator<OBJECT> {\n  return isValidator(value)\n    ? value\n    : typeof value === 'function'\n      ? value()\n      : standardSchemaValidator(value);\n}\n\nexport function standardSchemaValidator<OBJECT>(\n  standardSchema: StandardSchemaV1<unknown, OBJECT>,\n): Validator<OBJECT> {\n  return validator(async value => {\n    const result = await standardSchema['~standard'].validate(value);\n\n    return result.issues == null\n      ? { success: true, value: result.value }\n      : {\n          success: false,\n          error: new TypeValidationError({\n            value,\n            cause: result.issues,\n          }),\n        };\n  });\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { FlexibleValidator, asValidator } from './validator';\n\n/**\n * Validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @returns {Promise<T>} - The typed object.\n */\nexport async function validateTypes<OBJECT>({\n  value,\n  schema,\n}: {\n  value: unknown;\n  schema: FlexibleValidator<OBJECT>;\n}): Promise<OBJECT> {\n  const result = await safeValidateTypes({ value, schema });\n\n  if (!result.success) {\n    throw TypeValidationError.wrap({ value, cause: result.error });\n  }\n\n  return result.value;\n}\n\n/**\n * Safely validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The JSON object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeValidateTypes<OBJECT>({\n  value,\n  schema,\n}: {\n  value: unknown;\n  schema: FlexibleValidator<OBJECT>;\n}): Promise<\n  | {\n      success: true;\n      value: OBJECT;\n      rawValue: unknown;\n    }\n  | {\n      success: false;\n      error: TypeValidationError;\n      rawValue: unknown;\n    }\n> {\n  const validator = asValidator(schema);\n\n  try {\n    if (validator.validate == null) {\n      return { success: true, value: value as OBJECT, rawValue: value };\n    }\n\n    const result = await validator.validate(value);\n\n    if (result.success) {\n      return { success: true, value: result.value, rawValue: value };\n    }\n\n    return {\n      success: false,\n      error: TypeValidationError.wrap({ value, cause: result.error }),\n      rawValue: value,\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: TypeValidationError.wrap({ value, cause: error }),\n      rawValue: value,\n    };\n  }\n}\n","import {\n  JSONParseError,\n  JSONValue,\n  TypeValidationError,\n} from '@ai-sdk/provider';\nimport { secureJsonParse } from './secure-json-parse';\nimport { safeValidateTypes, validateTypes } from './validate-types';\nimport { FlexibleValidator, Validator } from './validator';\n\n/**\n * Parses a JSON string into an unknown object.\n *\n * @param text - The JSON string to parse.\n * @returns {JSONValue} - The parsed JSON object.\n */\nexport async function parseJSON(options: {\n  text: string;\n  schema?: undefined;\n}): Promise<JSONValue>;\n/**\n * Parses a JSON string into a strongly-typed object using the provided schema.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns {Promise<T>} - The parsed object.\n */\nexport async function parseJSON<T>(options: {\n  text: string;\n  schema: FlexibleValidator<T>;\n}): Promise<T>;\nexport async function parseJSON<T>({\n  text,\n  schema,\n}: {\n  text: string;\n  schema?: FlexibleValidator<T>;\n}): Promise<T> {\n  try {\n    const value = secureJsonParse(text);\n\n    if (schema == null) {\n      return value;\n    }\n\n    return validateTypes<T>({ value, schema });\n  } catch (error) {\n    if (\n      JSONParseError.isInstance(error) ||\n      TypeValidationError.isInstance(error)\n    ) {\n      throw error;\n    }\n\n    throw new JSONParseError({ text, cause: error });\n  }\n}\n\nexport type ParseResult<T> =\n  | { success: true; value: T; rawValue: unknown }\n  | {\n      success: false;\n      error: JSONParseError | TypeValidationError;\n      rawValue: unknown;\n    };\n\n/**\n * Safely parses a JSON string and returns the result as an object of type `unknown`.\n *\n * @param text - The JSON string to parse.\n * @returns {Promise<object>} Either an object with `success: true` and the parsed data, or an object with `success: false` and the error that occurred.\n */\nexport async function safeParseJSON(options: {\n  text: string;\n  schema?: undefined;\n}): Promise<ParseResult<JSONValue>>;\n/**\n * Safely parses a JSON string into a strongly-typed object, using a provided schema to validate the object.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeParseJSON<T>(options: {\n  text: string;\n  schema: FlexibleValidator<T>;\n}): Promise<ParseResult<T>>;\nexport async function safeParseJSON<T>({\n  text,\n  schema,\n}: {\n  text: string;\n  schema?: FlexibleValidator<T>;\n}): Promise<ParseResult<T>> {\n  try {\n    const value = secureJsonParse(text);\n\n    if (schema == null) {\n      return { success: true, value: value as T, rawValue: value };\n    }\n\n    return await safeValidateTypes<T>({ value, schema });\n  } catch (error) {\n    return {\n      success: false,\n      error: JSONParseError.isInstance(error)\n        ? error\n        : new JSONParseError({ text, cause: error }),\n      rawValue: undefined,\n    };\n  }\n}\n\nexport function isParsableJson(input: string): boolean {\n  try {\n    secureJsonParse(input);\n    return true;\n  } catch {\n    return false;\n  }\n}\n","import {\n  EventSourceMessage,\n  EventSourceParserStream,\n} from 'eventsource-parser/stream';\nimport { ParseResult, safeParseJSON } from './parse-json';\nimport { FlexibleValidator } from './validator';\n\n/**\n * Parses a JSON event stream into a stream of parsed JSON objects.\n */\nexport function parseJsonEventStream<T>({\n  stream,\n  schema,\n}: {\n  stream: ReadableStream<Uint8Array>;\n  schema: FlexibleValidator<T>;\n}): ReadableStream<ParseResult<T>> {\n  return stream\n    .pipeThrough(new TextDecoderStream())\n    .pipeThrough(new EventSourceParserStream())\n    .pipeThrough(\n      new TransformStream<EventSourceMessage, ParseResult<T>>({\n        async transform({ data }, controller) {\n          // ignore the 'DONE' event that e.g. OpenAI sends:\n          if (data === '[DONE]') {\n            return;\n          }\n\n          controller.enqueue(await safeParseJSON({ text: data, schema }));\n        },\n      }),\n    );\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const postJsonToApi = async <T>({\n  url,\n  headers,\n  body,\n  failedResponseHandler,\n  successfulResponseHandler,\n  abortSignal,\n  fetch,\n}: {\n  url: string;\n  headers?: Record<string, string | undefined>;\n  body: unknown;\n  failedResponseHandler: ResponseHandler<APICallError>;\n  successfulResponseHandler: ResponseHandler<T>;\n  abortSignal?: AbortSignal;\n  fetch?: FetchFunction;\n}) =>\n  postToApi({\n    url,\n    headers: {\n      'Content-Type': 'application/json',\n      ...headers,\n    },\n    body: {\n      content: JSON.stringify(body),\n      values: body,\n    },\n    failedResponseHandler,\n    successfulResponseHandler,\n    abortSignal,\n    fetch,\n  });\n\nexport const postFormDataToApi = async <T>({\n  url,\n  headers,\n  formData,\n  failedResponseHandler,\n  successfulResponseHandler,\n  abortSignal,\n  fetch,\n}: {\n  url: string;\n  headers?: Record<string, string | undefined>;\n  formData: FormData;\n  failedResponseHandler: ResponseHandler<APICallError>;\n  successfulResponseHandler: ResponseHandler<T>;\n  abortSignal?: AbortSignal;\n  fetch?: FetchFunction;\n}) =>\n  postToApi({\n    url,\n    headers,\n    body: {\n      content: formData,\n      values: Object.fromEntries((formData as any).entries()),\n    },\n    failedResponseHandler,\n    successfulResponseHandler,\n    abortSignal,\n    fetch,\n  });\n\nexport const postToApi = async <T>({\n  url,\n  headers = {},\n  body,\n  successfulResponseHandler,\n  failedResponseHandler,\n  abortSignal,\n  fetch = getOriginalFetch(),\n}: {\n  url: string;\n  headers?: Record<string, string | undefined>;\n  body: {\n    content: string | FormData | Uint8Array;\n    values: unknown;\n  };\n  failedResponseHandler: ResponseHandler<Error>;\n  successfulResponseHandler: ResponseHandler<T>;\n  abortSignal?: AbortSignal;\n  fetch?: FetchFunction;\n}) => {\n  try {\n    const response = await fetch(url, {\n      method: 'POST',\n      headers: withUserAgentSuffix(\n        headers,\n        `ai-sdk/provider-utils/${VERSION}`,\n        getRuntimeEnvironmentUserAgent(),\n      ),\n      body: body.content,\n      signal: abortSignal,\n    });\n\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (!response.ok) {\n      let errorInformation: {\n        value: Error;\n        responseHeaders?: Record<string, string> | undefined;\n      };\n\n      try {\n        errorInformation = await failedResponseHandler({\n          response,\n          url,\n          requestBodyValues: body.values,\n        });\n      } catch (error) {\n        if (isAbortError(error) || APICallError.isInstance(error)) {\n          throw error;\n        }\n\n        throw new APICallError({\n          message: 'Failed to process error response',\n          cause: error,\n          statusCode: response.status,\n          url,\n          responseHeaders,\n          requestBodyValues: body.values,\n        });\n      }\n\n      throw errorInformation.value;\n    }\n\n    try {\n      return await successfulResponseHandler({\n        response,\n        url,\n        requestBodyValues: body.values,\n      });\n    } catch (error) {\n      if (error instanceof Error) {\n        if (isAbortError(error) || APICallError.isInstance(error)) {\n          throw error;\n        }\n      }\n\n      throw new APICallError({\n        message: 'Failed to process successful response',\n        cause: error,\n        statusCode: response.status,\n        url,\n        responseHeaders,\n        requestBodyValues: body.values,\n      });\n    }\n  } catch (error) {\n    throw handleFetchError({ error, url, requestBodyValues: body.values });\n  }\n};\n","import { JSONValue, LanguageModelV2ToolResultPart } from '@ai-sdk/provider';\nimport { FlexibleSchema } from '../schema';\nimport { ModelMessage } from './model-message';\nimport { ProviderOptions } from './provider-options';\n\n/**\n * Additional options that are sent into each tool call.\n */\n// TODO AI SDK 6: rename to ToolExecutionOptions\nexport interface ToolCallOptions {\n  /**\n   * The ID of the tool call. You can use it e.g. when sending tool-call related information with stream data.\n   */\n  toolCallId: string;\n\n  /**\n   * Messages that were sent to the language model to initiate the response that contained the tool call.\n   * The messages **do not** include the system prompt nor the assistant response that contained the tool call.\n   */\n  messages: ModelMessage[];\n\n  /**\n   * An optional abort signal that indicates that the overall operation should be aborted.\n   */\n  abortSignal?: AbortSignal;\n\n  /**\n   * Additional context.\n   *\n   * Experimental (can break in patch releases).\n   */\n  experimental_context?: unknown;\n}\n\nexport type ToolExecuteFunction<INPUT, OUTPUT> = (\n  input: INPUT,\n  options: ToolCallOptions,\n) => AsyncIterable<OUTPUT> | PromiseLike<OUTPUT> | OUTPUT;\n\n// 0 extends 1 & N checks for any\n// [N] extends [never] checks for never\ntype NeverOptional<N, T> = 0 extends 1 & N\n  ? Partial<T>\n  : [N] extends [never]\n    ? Partial<Record<keyof T, undefined>>\n    : T;\n\ntype ToolOutputProperties<INPUT, OUTPUT> = NeverOptional<\n  OUTPUT,\n  | {\n      /**\nAn async function that is called with the arguments from the tool call and produces a result.\nIf not provided, the tool will not be executed automatically.\n\n@args is the input of the tool call.\n@options.abortSignal is a signal that can be used to abort the tool call.\n    */\n      execute: ToolExecuteFunction<INPUT, OUTPUT>;\n\n      outputSchema?: FlexibleSchema<OUTPUT>;\n    }\n  | {\n      outputSchema: FlexibleSchema<OUTPUT>;\n\n      execute?: never;\n    }\n>;\n\n/**\nA tool contains the description and the schema of the input that the tool expects.\nThis enables the language model to generate the input.\n\nThe tool can also contain an optional execute function for the actual execution function of the tool.\n */\nexport type Tool<\n  INPUT extends JSONValue | unknown | never = any,\n  OUTPUT extends JSONValue | unknown | never = any,\n> = {\n  /**\nAn optional description of what the tool does.\nWill be used by the language model to decide whether to use the tool.\nNot used for provider-defined tools.\n   */\n  description?: string;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n   */\n  providerOptions?: ProviderOptions;\n\n  /**\nThe schema of the input that the tool expects. The language model will use this to generate the input.\nIt is also used to validate the output of the language model.\nUse descriptions to make the input understandable for the language model.\n   */\n  inputSchema: FlexibleSchema<INPUT>;\n\n  /**\n   * Optional function that is called when the argument streaming starts.\n   * Only called when the tool is used in a streaming context.\n   */\n  onInputStart?: (options: ToolCallOptions) => void | PromiseLike<void>;\n\n  /**\n   * Optional function that is called when an argument streaming delta is available.\n   * Only called when the tool is used in a streaming context.\n   */\n  onInputDelta?: (\n    options: { inputTextDelta: string } & ToolCallOptions,\n  ) => void | PromiseLike<void>;\n\n  /**\n   * Optional function that is called when a tool call can be started,\n   * even if the execute function is not provided.\n   */\n  onInputAvailable?: (\n    options: {\n      input: [INPUT] extends [never] ? undefined : INPUT;\n    } & ToolCallOptions,\n  ) => void | PromiseLike<void>;\n} & ToolOutputProperties<INPUT, OUTPUT> & {\n    /**\nOptional conversion function that maps the tool result to an output that can be used by the language model.\n\nIf not provided, the tool result will be sent as a JSON object.\n  */\n    toModelOutput?: (\n      output: 0 extends 1 & OUTPUT\n        ? any\n        : [OUTPUT] extends [never]\n          ? any\n          : NoInfer<OUTPUT>,\n    ) => LanguageModelV2ToolResultPart['output'];\n  } & (\n    | {\n        /**\nTool with user-defined input and output schemas.\n     */\n        type?: undefined | 'function';\n      }\n    | {\n        /**\nTool that is defined at runtime (e.g. an MCP tool).\nThe types of input and output are not known at development time.\n       */\n        type: 'dynamic';\n      }\n    | {\n        /**\nTool with provider-defined input and output schemas.\n     */\n        type: 'provider-defined';\n\n        /**\nThe ID of the tool. Should follow the format `<provider-name>.<unique-tool-name>`.\n   */\n        id: `${string}.${string}`;\n\n        /**\nThe name of the tool that the user must use in the tool set.\n */\n        name: string;\n\n        /**\nThe arguments for configuring the tool. Must match the expected arguments defined by the provider for this tool.\n     */\n        args: Record<string, unknown>;\n      }\n  );\n\n/**\n * Infer the input type of a tool.\n */\nexport type InferToolInput<TOOL extends Tool> =\n  TOOL extends Tool<infer INPUT, any> ? INPUT : never;\n\n/**\n * Infer the output type of a tool.\n */\nexport type InferToolOutput<TOOL extends Tool> =\n  TOOL extends Tool<any, infer OUTPUT> ? OUTPUT : never;\n\n/**\nHelper function for inferring the execute args of a tool.\n */\n// Note: overload order is important for auto-completion\nexport function tool<INPUT, OUTPUT>(\n  tool: Tool<INPUT, OUTPUT>,\n): Tool<INPUT, OUTPUT>;\nexport function tool<INPUT>(tool: Tool<INPUT, never>): Tool<INPUT, never>;\nexport function tool<OUTPUT>(tool: Tool<never, OUTPUT>): Tool<never, OUTPUT>;\nexport function tool(tool: Tool<never, never>): Tool<never, never>;\nexport function tool(tool: any): any {\n  return tool;\n}\n\n/**\nHelper function for defining a dynamic tool.\n */\nexport function dynamicTool(tool: {\n  description?: string;\n  providerOptions?: ProviderOptions;\n  inputSchema: FlexibleSchema<unknown>;\n  execute: ToolExecuteFunction<unknown, unknown>;\n  toModelOutput?: (output: unknown) => LanguageModelV2ToolResultPart['output'];\n}): Tool<unknown, unknown> & {\n  type: 'dynamic';\n} {\n  return { ...tool, type: 'dynamic' };\n}\n","import { tool, Tool, ToolExecuteFunction } from './types/tool';\nimport { FlexibleSchema } from './schema';\n\nexport type ProviderDefinedToolFactory<INPUT, ARGS extends object> = <OUTPUT>(\n  options: ARGS & {\n    execute?: ToolExecuteFunction<INPUT, OUTPUT>;\n    toModelOutput?: Tool<INPUT, OUTPUT>['toModelOutput'];\n    onInputStart?: Tool<INPUT, OUTPUT>['onInputStart'];\n    onInputDelta?: Tool<INPUT, OUTPUT>['onInputDelta'];\n    onInputAvailable?: Tool<INPUT, OUTPUT>['onInputAvailable'];\n  },\n) => Tool<INPUT, OUTPUT>;\n\nexport function createProviderDefinedToolFactory<INPUT, ARGS extends object>({\n  id,\n  name,\n  inputSchema,\n}: {\n  id: `${string}.${string}`;\n  name: string;\n  inputSchema: FlexibleSchema<INPUT>;\n}): ProviderDefinedToolFactory<INPUT, ARGS> {\n  return <OUTPUT>({\n    execute,\n    outputSchema,\n    toModelOutput,\n    onInputStart,\n    onInputDelta,\n    onInputAvailable,\n    ...args\n  }: ARGS & {\n    execute?: ToolExecuteFunction<INPUT, OUTPUT>;\n    outputSchema?: FlexibleSchema<OUTPUT>;\n    toModelOutput?: Tool<INPUT, OUTPUT>['toModelOutput'];\n    onInputStart?: Tool<INPUT, OUTPUT>['onInputStart'];\n    onInputDelta?: Tool<INPUT, OUTPUT>['onInputDelta'];\n    onInputAvailable?: Tool<INPUT, OUTPUT>['onInputAvailable'];\n  }): Tool<INPUT, OUTPUT> =>\n    tool({\n      type: 'provider-defined',\n      id,\n      name,\n      args,\n      inputSchema,\n      outputSchema,\n      execute,\n      toModelOutput,\n      onInputStart,\n      onInputDelta,\n      onInputAvailable,\n    });\n}\n\nexport type ProviderDefinedToolFactoryWithOutputSchema<\n  INPUT,\n  OUTPUT,\n  ARGS extends object,\n> = (\n  options: ARGS & {\n    execute?: ToolExecuteFunction<INPUT, OUTPUT>;\n    toModelOutput?: Tool<INPUT, OUTPUT>['toModelOutput'];\n    onInputStart?: Tool<INPUT, OUTPUT>['onInputStart'];\n    onInputDelta?: Tool<INPUT, OUTPUT>['onInputDelta'];\n    onInputAvailable?: Tool<INPUT, OUTPUT>['onInputAvailable'];\n  },\n) => Tool<INPUT, OUTPUT>;\n\nexport function createProviderDefinedToolFactoryWithOutputSchema<\n  INPUT,\n  OUTPUT,\n  ARGS extends object,\n>({\n  id,\n  name,\n  inputSchema,\n  outputSchema,\n}: {\n  id: `${string}.${string}`;\n  name: string;\n  inputSchema: FlexibleSchema<INPUT>;\n  outputSchema: FlexibleSchema<OUTPUT>;\n}): ProviderDefinedToolFactoryWithOutputSchema<INPUT, OUTPUT, ARGS> {\n  return ({\n    execute,\n    toModelOutput,\n    onInputStart,\n    onInputDelta,\n    onInputAvailable,\n    ...args\n  }: ARGS & {\n    execute?: ToolExecuteFunction<INPUT, OUTPUT>;\n    toModelOutput?: Tool<INPUT, OUTPUT>['toModelOutput'];\n    onInputStart?: Tool<INPUT, OUTPUT>['onInputStart'];\n    onInputDelta?: Tool<INPUT, OUTPUT>['onInputDelta'];\n    onInputAvailable?: Tool<INPUT, OUTPUT>['onInputAvailable'];\n  }): Tool<INPUT, OUTPUT> =>\n    tool({\n      type: 'provider-defined',\n      id,\n      name,\n      args,\n      inputSchema,\n      outputSchema,\n      execute,\n      toModelOutput,\n      onInputStart,\n      onInputDelta,\n      onInputAvailable,\n    });\n}\n","export type Resolvable<T> =\n  | T // Raw value\n  | Promise<T> // Promise of value\n  | (() => T) // Function returning value\n  | (() => Promise<T>); // Function returning promise of value\n\n/**\n * Resolves a value that could be a raw value, a Promise, a function returning a value,\n * or a function returning a Promise.\n */\nexport async function resolve<T>(value: Resolvable<T>): Promise<T> {\n  // If it's a function, call it to get the value/promise\n  if (typeof value === 'function') {\n    value = (value as Function)();\n  }\n\n  // Otherwise just resolve whatever we got (value or promise)\n  return Promise.resolve(value as T);\n}\n","import { APICallError, EmptyResponseBodyError } from '@ai-sdk/provider';\nimport { ZodType } from 'zod/v4';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { parseJSON, ParseResult, safeParseJSON } from './parse-json';\nimport { parseJsonEventStream } from './parse-json-event-stream';\nimport { FlexibleValidator } from './validator';\n\nexport type ResponseHandler<RETURN_TYPE> = (options: {\n  url: string;\n  requestBodyValues: unknown;\n  response: Response;\n}) => PromiseLike<{\n  value: RETURN_TYPE;\n  rawValue?: unknown;\n  responseHeaders?: Record<string, string>;\n}>;\n\nexport const createJsonErrorResponseHandler =\n  <T>({\n    errorSchema,\n    errorToMessage,\n    isRetryable,\n  }: {\n    errorSchema: FlexibleValidator<T>;\n    errorToMessage: (error: T) => string;\n    isRetryable?: (response: Response, error?: T) => boolean;\n  }): ResponseHandler<APICallError> =>\n  async ({ response, url, requestBodyValues }) => {\n    const responseBody = await response.text();\n    const responseHeaders = extractResponseHeaders(response);\n\n    // Some providers return an empty response body for some errors:\n    if (responseBody.trim() === '') {\n      return {\n        responseHeaders,\n        value: new APICallError({\n          message: response.statusText,\n          url,\n          requestBodyValues,\n          statusCode: response.status,\n          responseHeaders,\n          responseBody,\n          isRetryable: isRetryable?.(response),\n        }),\n      };\n    }\n\n    // resilient parsing in case the response is not JSON or does not match the schema:\n    try {\n      const parsedError = await parseJSON({\n        text: responseBody,\n        schema: errorSchema,\n      });\n\n      return {\n        responseHeaders,\n        value: new APICallError({\n          message: errorToMessage(parsedError),\n          url,\n          requestBodyValues,\n          statusCode: response.status,\n          responseHeaders,\n          responseBody,\n          data: parsedError,\n          isRetryable: isRetryable?.(response, parsedError),\n        }),\n      };\n    } catch (parseError) {\n      return {\n        responseHeaders,\n        value: new APICallError({\n          message: response.statusText,\n          url,\n          requestBodyValues,\n          statusCode: response.status,\n          responseHeaders,\n          responseBody,\n          isRetryable: isRetryable?.(response),\n        }),\n      };\n    }\n  };\n\nexport const createEventSourceResponseHandler =\n  <T>(\n    chunkSchema: FlexibleValidator<T>,\n  ): ResponseHandler<ReadableStream<ParseResult<T>>> =>\n  async ({ response }: { response: Response }) => {\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (response.body == null) {\n      throw new EmptyResponseBodyError({});\n    }\n\n    return {\n      responseHeaders,\n      value: parseJsonEventStream({\n        stream: response.body,\n        schema: chunkSchema,\n      }),\n    };\n  };\n\nexport const createJsonStreamResponseHandler =\n  <T>(\n    chunkSchema: ZodType<T>,\n  ): ResponseHandler<ReadableStream<ParseResult<T>>> =>\n  async ({ response }: { response: Response }) => {\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (response.body == null) {\n      throw new EmptyResponseBodyError({});\n    }\n\n    let buffer = '';\n\n    return {\n      responseHeaders,\n      value: response.body.pipeThrough(new TextDecoderStream()).pipeThrough(\n        new TransformStream<string, ParseResult<T>>({\n          async transform(chunkText, controller) {\n            if (chunkText.endsWith('\\n')) {\n              controller.enqueue(\n                await safeParseJSON({\n                  text: buffer + chunkText,\n                  schema: chunkSchema,\n                }),\n              );\n              buffer = '';\n            } else {\n              buffer += chunkText;\n            }\n          },\n        }),\n      ),\n    };\n  };\n\nexport const createJsonResponseHandler =\n  <T>(responseSchema: FlexibleValidator<T>): ResponseHandler<T> =>\n  async ({ response, url, requestBodyValues }) => {\n    const responseBody = await response.text();\n\n    const parsedResult = await safeParseJSON({\n      text: responseBody,\n      schema: responseSchema,\n    });\n\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (!parsedResult.success) {\n      throw new APICallError({\n        message: 'Invalid JSON response',\n        cause: parsedResult.error,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody,\n        url,\n        requestBodyValues,\n      });\n    }\n\n    return {\n      responseHeaders,\n      value: parsedResult.value,\n      rawValue: parsedResult.rawValue,\n    };\n  };\n\nexport const createBinaryResponseHandler =\n  (): ResponseHandler<Uint8Array> =>\n  async ({ response, url, requestBodyValues }) => {\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (!response.body) {\n      throw new APICallError({\n        message: 'Response body is empty',\n        url,\n        requestBodyValues,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody: undefined,\n      });\n    }\n\n    try {\n      const buffer = await response.arrayBuffer();\n      return {\n        responseHeaders,\n        value: new Uint8Array(buffer),\n      };\n    } catch (error) {\n      throw new APICallError({\n        message: 'Failed to read response as array buffer',\n        url,\n        requestBodyValues,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody: undefined,\n        cause: error,\n      });\n    }\n  };\n\nexport const createStatusCodeErrorResponseHandler =\n  (): ResponseHandler<APICallError> =>\n  async ({ response, url, requestBodyValues }) => {\n    const responseHeaders = extractResponseHeaders(response);\n    const responseBody = await response.text();\n\n    return {\n      responseHeaders,\n      value: new APICallError({\n        message: response.statusText,\n        url,\n        requestBodyValues: requestBodyValues as Record<string, unknown>,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody,\n      }),\n    };\n  };\n","import { JSONSchema7 } from '@ai-sdk/provider';\n\n/**\n * Recursively adds additionalProperties: false to the JSON schema. This is necessary because some providers (e.g. OpenAI) do not support additionalProperties: true.\n */\nexport function addAdditionalPropertiesToJsonSchema(\n  jsonSchema: JSONSchema7,\n): JSONSchema7 {\n  if (jsonSchema.type === 'object') {\n    jsonSchema.additionalProperties = false;\n    const properties = jsonSchema.properties;\n    if (properties != null) {\n      for (const property in properties) {\n        properties[property] = addAdditionalPropertiesToJsonSchema(\n          properties[property] as JSONSchema7,\n        );\n      }\n    }\n  }\n  if (jsonSchema.type === 'array' && jsonSchema.items != null) {\n    if (Array.isArray(jsonSchema.items)) {\n      jsonSchema.items = jsonSchema.items.map(item =>\n        addAdditionalPropertiesToJsonSchema(item as JSONSchema7),\n      );\n    } else {\n      jsonSchema.items = addAdditionalPropertiesToJsonSchema(\n        jsonSchema.items as JSONSchema7,\n      );\n    }\n  }\n  return jsonSchema;\n}\n","export const getRelativePath = (pathA: string[], pathB: string[]) => {\n  let i = 0;\n  for (; i < pathA.length && i < pathB.length; i++) {\n    if (pathA[i] !== pathB[i]) break;\n  }\n  return [(pathA.length - i).toString(), ...pathB.slice(i)].join('/');\n};\n","import { ZodSchema, ZodTypeDef } from 'zod/v3';\nimport { Refs, Seen } from './refs';\nimport { JsonSchema7Type } from './parse-types';\n\nexport type DateStrategy =\n  | 'format:date-time'\n  | 'format:date'\n  | 'string'\n  | 'integer';\n\nexport const ignoreOverride = Symbol(\n  'Let zodToJsonSchema decide on which parser to use',\n);\n\nexport type OverrideCallback = (\n  def: ZodTypeDef,\n  refs: Refs,\n  seen: Seen | undefined,\n  forceResolution?: boolean,\n) => JsonSchema7Type | undefined | typeof ignoreOverride;\n\nexport type PostProcessCallback = (\n  jsonSchema: JsonSchema7Type | undefined,\n  def: ZodTypeDef,\n  refs: Refs,\n) => JsonSchema7Type | undefined;\n\nexport const jsonDescription: PostProcessCallback = (jsonSchema, def) => {\n  if (def.description) {\n    try {\n      return {\n        ...jsonSchema,\n        ...JSON.parse(def.description),\n      };\n    } catch {}\n  }\n\n  return jsonSchema;\n};\n\nexport type Options = {\n  name: string | undefined;\n  $refStrategy: 'root' | 'relative' | 'none' | 'seen';\n  basePath: string[];\n  effectStrategy: 'input' | 'any';\n  pipeStrategy: 'input' | 'output' | 'all';\n  dateStrategy: DateStrategy | DateStrategy[];\n  mapStrategy: 'entries' | 'record';\n  removeAdditionalStrategy: 'passthrough' | 'strict';\n  allowedAdditionalProperties: true | undefined;\n  rejectedAdditionalProperties: false | undefined;\n  strictUnions: boolean;\n  definitionPath: string;\n  definitions: Record<string, ZodSchema>;\n  errorMessages: boolean;\n  patternStrategy: 'escape' | 'preserve';\n  applyRegexFlags: boolean;\n  emailStrategy: 'format:email' | 'format:idn-email' | 'pattern:zod';\n  base64Strategy: 'format:binary' | 'contentEncoding:base64' | 'pattern:zod';\n  nameStrategy: 'ref' | 'title';\n  override?: OverrideCallback;\n  postProcess?: PostProcessCallback;\n};\n\nexport const defaultOptions: Options = {\n  name: undefined,\n  $refStrategy: 'root',\n  basePath: ['#'],\n  effectStrategy: 'input',\n  pipeStrategy: 'all',\n  dateStrategy: 'format:date-time',\n  mapStrategy: 'entries',\n  removeAdditionalStrategy: 'passthrough',\n  allowedAdditionalProperties: true,\n  rejectedAdditionalProperties: false,\n  definitionPath: 'definitions',\n  strictUnions: false,\n  definitions: {},\n  errorMessages: false,\n  patternStrategy: 'escape',\n  applyRegexFlags: false,\n  emailStrategy: 'format:email',\n  base64Strategy: 'contentEncoding:base64',\n  nameStrategy: 'ref',\n};\n\nexport const getDefaultOptions = (\n  options: Partial<Options> | string | undefined,\n) =>\n  (typeof options === 'string'\n    ? {\n        ...defaultOptions,\n        name: options,\n      }\n    : {\n        ...defaultOptions,\n        ...options,\n      }) as Options;\n","export type JsonSchema7AnyType = { $ref?: string };\n\nexport function parseAnyDef(): JsonSchema7AnyType {\n  return {};\n}\n","import { ZodArrayDef, ZodFirstPartyTypeKind } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7ArrayType = {\n  type: 'array';\n  items?: JsonSchema7Type;\n  minItems?: number;\n  maxItems?: number;\n};\n\nexport function parseArrayDef(def: ZodArrayDef, refs: Refs) {\n  const res: JsonSchema7ArrayType = {\n    type: 'array',\n  };\n  if (\n    def.type?._def &&\n    def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny\n  ) {\n    res.items = parseDef(def.type._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'items'],\n    });\n  }\n\n  if (def.minLength) {\n    res.minItems = def.minLength.value;\n  }\n  if (def.maxLength) {\n    res.maxItems = def.maxLength.value;\n  }\n  if (def.exactLength) {\n    res.minItems = def.exactLength.value;\n    res.maxItems = def.exactLength.value;\n  }\n  return res;\n}\n","import { ZodBigIntDef } from 'zod/v3';\n\nexport type JsonSchema7BigintType = {\n  type: 'integer';\n  format: 'int64';\n  minimum?: BigInt;\n  exclusiveMinimum?: BigInt;\n  maximum?: BigInt;\n  exclusiveMaximum?: BigInt;\n  multipleOf?: BigInt;\n};\n\nexport function parseBigintDef(def: ZodBigIntDef): JsonSchema7BigintType {\n  const res: JsonSchema7BigintType = {\n    type: 'integer',\n    format: 'int64',\n  };\n\n  if (!def.checks) return res;\n\n  for (const check of def.checks) {\n    switch (check.kind) {\n      case 'min':\n        if (check.inclusive) {\n          res.minimum = check.value;\n        } else {\n          res.exclusiveMinimum = check.value;\n        }\n        break;\n      case 'max':\n        if (check.inclusive) {\n          res.maximum = check.value;\n        } else {\n          res.exclusiveMaximum = check.value;\n        }\n\n        break;\n      case 'multipleOf':\n        res.multipleOf = check.value;\n        break;\n    }\n  }\n  return res;\n}\n","export type JsonSchema7BooleanType = {\n  type: 'boolean';\n};\n\nexport function parseBooleanDef(): JsonSchema7BooleanType {\n  return { type: 'boolean' };\n}\n","import { ZodBrandedDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { Refs } from '../refs';\n\nexport function parseBrandedDef(_def: ZodBrandedDef<any>, refs: Refs) {\n  return parseDef(_def.type._def, refs);\n}\n","import { ZodCatchDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { Refs } from '../refs';\n\nexport const parseCatchDef = (def: ZodCatchDef<any>, refs: Refs) => {\n  return parseDef(def.innerType._def, refs);\n};\n","import { ZodDateDef } from 'zod/v3';\nimport { Refs } from '../refs';\nimport { DateStrategy } from '../options';\n\nexport type JsonSchema7DateType =\n  | {\n      type: 'integer' | 'string';\n      format: 'unix-time' | 'date-time' | 'date';\n      minimum?: number;\n      maximum?: number;\n    }\n  | {\n      anyOf: JsonSchema7DateType[];\n    };\n\nexport function parseDateDef(\n  def: ZodDateDef,\n  refs: Refs,\n  overrideDateStrategy?: DateStrategy,\n): JsonSchema7DateType {\n  const strategy = overrideDateStrategy ?? refs.dateStrategy;\n\n  if (Array.isArray(strategy)) {\n    return {\n      anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n    };\n  }\n\n  switch (strategy) {\n    case 'string':\n    case 'format:date-time':\n      return {\n        type: 'string',\n        format: 'date-time',\n      };\n    case 'format:date':\n      return {\n        type: 'string',\n        format: 'date',\n      };\n    case 'integer':\n      return integerDateParser(def);\n  }\n}\n\nconst integerDateParser = (def: ZodDateDef) => {\n  const res: JsonSchema7DateType = {\n    type: 'integer',\n    format: 'unix-time',\n  };\n\n  for (const check of def.checks) {\n    switch (check.kind) {\n      case 'min':\n        res.minimum = check.value;\n        break;\n      case 'max':\n        res.maximum = check.value;\n        break;\n    }\n  }\n\n  return res;\n};\n","import { ZodDefaultDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport function parseDefaultDef(\n  _def: ZodDefaultDef,\n  refs: Refs,\n): JsonSchema7Type & { default: any } {\n  return {\n    ...parseDef(_def.innerType._def, refs),\n    default: _def.defaultValue(),\n  };\n}\n","import { ZodEffectsDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport function parseEffectsDef(\n  _def: ZodEffectsDef,\n  refs: Refs,\n): JsonSchema7Type | undefined {\n  return refs.effectStrategy === 'input'\n    ? parseDef(_def.schema._def, refs)\n    : parseAnyDef();\n}\n","import { ZodEnumDef } from 'zod/v3';\n\nexport type JsonSchema7EnumType = {\n  type: 'string';\n  enum: string[];\n};\n\nexport function parseEnumDef(def: ZodEnumDef): JsonSchema7EnumType {\n  return {\n    type: 'string',\n    enum: Array.from(def.values),\n  };\n}\n","import { ZodIntersectionDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { JsonSchema7StringType } from './string';\n\nexport type JsonSchema7AllOfType = {\n  allOf: JsonSchema7Type[];\n  unevaluatedProperties?: boolean;\n};\n\nconst isJsonSchema7AllOfType = (\n  type: JsonSchema7Type | JsonSchema7StringType,\n): type is JsonSchema7AllOfType => {\n  if ('type' in type && type.type === 'string') return false;\n  return 'allOf' in type;\n};\n\nexport function parseIntersectionDef(\n  def: ZodIntersectionDef,\n  refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined {\n  const allOf = [\n    parseDef(def.left._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'allOf', '0'],\n    }),\n    parseDef(def.right._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'allOf', '1'],\n    }),\n  ].filter((x): x is JsonSchema7Type => !!x);\n\n  const mergedAllOf: JsonSchema7Type[] = [];\n  // If either of the schemas is an allOf, merge them into a single allOf\n  allOf.forEach(schema => {\n    if (isJsonSchema7AllOfType(schema)) {\n      mergedAllOf.push(...schema.allOf);\n    } else {\n      let nestedSchema: JsonSchema7Type = schema;\n      if (\n        'additionalProperties' in schema &&\n        schema.additionalProperties === false\n      ) {\n        const { additionalProperties, ...rest } = schema;\n        nestedSchema = rest;\n      }\n      mergedAllOf.push(nestedSchema);\n    }\n  });\n  return mergedAllOf.length ? { allOf: mergedAllOf } : undefined;\n}\n","import { ZodLiteralDef } from 'zod/v3';\n\nexport type JsonSchema7LiteralType =\n  | {\n      type: 'string' | 'number' | 'integer' | 'boolean';\n      const: string | number | boolean;\n    }\n  | {\n      type: 'object' | 'array';\n    };\n\nexport function parseLiteralDef(def: ZodLiteralDef): JsonSchema7LiteralType {\n  const parsedType = typeof def.value;\n  if (\n    parsedType !== 'bigint' &&\n    parsedType !== 'number' &&\n    parsedType !== 'boolean' &&\n    parsedType !== 'string'\n  ) {\n    return {\n      type: Array.isArray(def.value) ? 'array' : 'object',\n    };\n  }\n\n  return {\n    type: parsedType === 'bigint' ? 'integer' : parsedType,\n    const: def.value,\n  };\n}\n","import { ZodStringDef } from 'zod/v3';\nimport { Refs } from '../refs';\n\nlet emojiRegex: RegExp | undefined = undefined;\n\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n  /**\n   * `c` was changed to `[cC]` to replicate /i flag\n   */\n  cuid: /^[cC][^\\s-]{8,}$/,\n  cuid2: /^[0-9a-z]+$/,\n  ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n  /**\n   * `a-z` was added to replicate /i flag\n   */\n  email:\n    /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n  /**\n   * Constructed a valid Unicode RegExp\n   *\n   * Lazily instantiate since this type of regex isn't supported\n   * in all envs (e.g. React Native).\n   *\n   * See:\n   * https://github.com/colinhacks/zod/issues/2433\n   * Fix in Zod:\n   * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n   */\n  emoji: () => {\n    if (emojiRegex === undefined) {\n      emojiRegex = RegExp(\n        '^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$',\n        'u',\n      );\n    }\n    return emojiRegex;\n  },\n  /**\n   * Unused\n   */\n  uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n  /**\n   * Unused\n   */\n  ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n  ipv4Cidr:\n    /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n  /**\n   * Unused\n   */\n  ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n  ipv6Cidr:\n    /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n  base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n  base64url:\n    /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n  nanoid: /^[a-zA-Z0-9_-]{21}$/,\n  jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n} as const;\n\nexport type JsonSchema7StringType = {\n  type: 'string';\n  minLength?: number;\n  maxLength?: number;\n  format?:\n    | 'email'\n    | 'idn-email'\n    | 'uri'\n    | 'uuid'\n    | 'date-time'\n    | 'ipv4'\n    | 'ipv6'\n    | 'date'\n    | 'time'\n    | 'duration';\n  pattern?: string;\n  allOf?: {\n    pattern: string;\n  }[];\n  anyOf?: {\n    format: string;\n  }[];\n  contentEncoding?: string;\n};\n\nexport function parseStringDef(\n  def: ZodStringDef,\n  refs: Refs,\n): JsonSchema7StringType {\n  const res: JsonSchema7StringType = {\n    type: 'string',\n  };\n\n  if (def.checks) {\n    for (const check of def.checks) {\n      switch (check.kind) {\n        case 'min':\n          res.minLength =\n            typeof res.minLength === 'number'\n              ? Math.max(res.minLength, check.value)\n              : check.value;\n          break;\n        case 'max':\n          res.maxLength =\n            typeof res.maxLength === 'number'\n              ? Math.min(res.maxLength, check.value)\n              : check.value;\n\n          break;\n        case 'email':\n          switch (refs.emailStrategy) {\n            case 'format:email':\n              addFormat(res, 'email', check.message, refs);\n              break;\n            case 'format:idn-email':\n              addFormat(res, 'idn-email', check.message, refs);\n              break;\n            case 'pattern:zod':\n              addPattern(res, zodPatterns.email, check.message, refs);\n              break;\n          }\n\n          break;\n        case 'url':\n          addFormat(res, 'uri', check.message, refs);\n          break;\n        case 'uuid':\n          addFormat(res, 'uuid', check.message, refs);\n          break;\n        case 'regex':\n          addPattern(res, check.regex, check.message, refs);\n          break;\n        case 'cuid':\n          addPattern(res, zodPatterns.cuid, check.message, refs);\n          break;\n        case 'cuid2':\n          addPattern(res, zodPatterns.cuid2, check.message, refs);\n          break;\n        case 'startsWith':\n          addPattern(\n            res,\n            RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`),\n            check.message,\n            refs,\n          );\n          break;\n        case 'endsWith':\n          addPattern(\n            res,\n            RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`),\n            check.message,\n            refs,\n          );\n          break;\n        case 'datetime':\n          addFormat(res, 'date-time', check.message, refs);\n          break;\n        case 'date':\n          addFormat(res, 'date', check.message, refs);\n          break;\n        case 'time':\n          addFormat(res, 'time', check.message, refs);\n          break;\n        case 'duration':\n          addFormat(res, 'duration', check.message, refs);\n          break;\n        case 'length':\n          res.minLength =\n            typeof res.minLength === 'number'\n              ? Math.max(res.minLength, check.value)\n              : check.value;\n          res.maxLength =\n            typeof res.maxLength === 'number'\n              ? Math.min(res.maxLength, check.value)\n              : check.value;\n          break;\n        case 'includes': {\n          addPattern(\n            res,\n            RegExp(escapeLiteralCheckValue(check.value, refs)),\n            check.message,\n            refs,\n          );\n          break;\n        }\n        case 'ip': {\n          if (check.version !== 'v6') {\n            addFormat(res, 'ipv4', check.message, refs);\n          }\n          if (check.version !== 'v4') {\n            addFormat(res, 'ipv6', check.message, refs);\n          }\n          break;\n        }\n        case 'base64url':\n          addPattern(res, zodPatterns.base64url, check.message, refs);\n          break;\n        case 'jwt':\n          addPattern(res, zodPatterns.jwt, check.message, refs);\n          break;\n        case 'cidr': {\n          if (check.version !== 'v6') {\n            addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n          }\n          if (check.version !== 'v4') {\n            addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n          }\n          break;\n        }\n        case 'emoji':\n          addPattern(res, zodPatterns.emoji(), check.message, refs);\n          break;\n        case 'ulid': {\n          addPattern(res, zodPatterns.ulid, check.message, refs);\n          break;\n        }\n        case 'base64': {\n          switch (refs.base64Strategy) {\n            case 'format:binary': {\n              addFormat(res, 'binary' as any, check.message, refs);\n              break;\n            }\n\n            case 'contentEncoding:base64': {\n              res.contentEncoding = 'base64';\n              break;\n            }\n\n            case 'pattern:zod': {\n              addPattern(res, zodPatterns.base64, check.message, refs);\n              break;\n            }\n          }\n          break;\n        }\n        case 'nanoid': {\n          addPattern(res, zodPatterns.nanoid, check.message, refs);\n        }\n        case 'toLowerCase':\n        case 'toUpperCase':\n        case 'trim':\n          break;\n        default:\n          /* c8 ignore next */\n          ((_: never) => {})(check);\n      }\n    }\n  }\n\n  return res;\n}\n\nfunction escapeLiteralCheckValue(literal: string, refs: Refs): string {\n  return refs.patternStrategy === 'escape'\n    ? escapeNonAlphaNumeric(literal)\n    : literal;\n}\n\nconst ALPHA_NUMERIC = new Set(\n  'ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789',\n);\n\nfunction escapeNonAlphaNumeric(source: string) {\n  let result = '';\n\n  for (let i = 0; i < source.length; i++) {\n    if (!ALPHA_NUMERIC.has(source[i])) {\n      result += '\\\\';\n    }\n\n    result += source[i];\n  }\n\n  return result;\n}\n\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(\n  schema: JsonSchema7StringType,\n  value: Required<JsonSchema7StringType>['format'],\n  message: string | undefined,\n  refs: Refs,\n) {\n  if (schema.format || schema.anyOf?.some(x => x.format)) {\n    if (!schema.anyOf) {\n      schema.anyOf = [];\n    }\n\n    if (schema.format) {\n      schema.anyOf!.push({\n        format: schema.format,\n      });\n      delete schema.format;\n    }\n\n    schema.anyOf!.push({\n      format: value,\n      ...(message &&\n        refs.errorMessages && { errorMessage: { format: message } }),\n    });\n  } else {\n    schema.format = value;\n  }\n}\n\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(\n  schema: JsonSchema7StringType,\n  regex: RegExp,\n  message: string | undefined,\n  refs: Refs,\n) {\n  if (schema.pattern || schema.allOf?.some(x => x.pattern)) {\n    if (!schema.allOf) {\n      schema.allOf = [];\n    }\n\n    if (schema.pattern) {\n      schema.allOf!.push({\n        pattern: schema.pattern,\n      });\n      delete schema.pattern;\n    }\n\n    schema.allOf!.push({\n      pattern: stringifyRegExpWithFlags(regex, refs),\n      ...(message &&\n        refs.errorMessages && { errorMessage: { pattern: message } }),\n    });\n  } else {\n    schema.pattern = stringifyRegExpWithFlags(regex, refs);\n  }\n}\n\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex: RegExp, refs: Refs): string {\n  if (!refs.applyRegexFlags || !regex.flags) {\n    return regex.source;\n  }\n\n  // Currently handled flags\n  const flags = {\n    i: regex.flags.includes('i'), // Case-insensitive\n    m: regex.flags.includes('m'), // `^` and `$` matches adjacent to newline characters\n    s: regex.flags.includes('s'), // `.` matches newlines\n  };\n\n  // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n  const source = flags.i ? regex.source.toLowerCase() : regex.source;\n  let pattern = '';\n  let isEscaped = false;\n  let inCharGroup = false;\n  let inCharRange = false;\n\n  for (let i = 0; i < source.length; i++) {\n    if (isEscaped) {\n      pattern += source[i];\n      isEscaped = false;\n      continue;\n    }\n\n    if (flags.i) {\n      if (inCharGroup) {\n        if (source[i].match(/[a-z]/)) {\n          if (inCharRange) {\n            pattern += source[i];\n            pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n            inCharRange = false;\n          } else if (source[i + 1] === '-' && source[i + 2]?.match(/[a-z]/)) {\n            pattern += source[i];\n            inCharRange = true;\n          } else {\n            pattern += `${source[i]}${source[i].toUpperCase()}`;\n          }\n          continue;\n        }\n      } else if (source[i].match(/[a-z]/)) {\n        pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n        continue;\n      }\n    }\n\n    if (flags.m) {\n      if (source[i] === '^') {\n        pattern += `(^|(?<=[\\r\\n]))`;\n        continue;\n      } else if (source[i] === '$') {\n        pattern += `($|(?=[\\r\\n]))`;\n        continue;\n      }\n    }\n\n    if (flags.s && source[i] === '.') {\n      pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n      continue;\n    }\n\n    pattern += source[i];\n    if (source[i] === '\\\\') {\n      isEscaped = true;\n    } else if (inCharGroup && source[i] === ']') {\n      inCharGroup = false;\n    } else if (!inCharGroup && source[i] === '[') {\n      inCharGroup = true;\n    }\n  }\n\n  try {\n    new RegExp(pattern);\n  } catch {\n    console.warn(\n      `Could not convert regex pattern at ${refs.currentPath.join(\n        '/',\n      )} to a flag-independent form! Falling back to the flag-ignorant source`,\n    );\n    return regex.source;\n  }\n\n  return pattern;\n}\n","import {\n  ZodFirstPartyTypeKind,\n  ZodMapDef,\n  ZodRecordDef,\n  ZodTypeAny,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseBrandedDef } from './branded';\nimport { JsonSchema7EnumType } from './enum';\nimport { JsonSchema7StringType, parseStringDef } from './string';\n\ntype JsonSchema7RecordPropertyNamesType =\n  | Omit<JsonSchema7StringType, 'type'>\n  | Omit<JsonSchema7EnumType, 'type'>;\n\nexport type JsonSchema7RecordType = {\n  type: 'object';\n  additionalProperties?: JsonSchema7Type | true;\n  propertyNames?: JsonSchema7RecordPropertyNamesType;\n};\n\nexport function parseRecordDef(\n  def: ZodRecordDef<ZodTypeAny, ZodTypeAny> | ZodMapDef,\n  refs: Refs,\n): JsonSchema7RecordType {\n  const schema: JsonSchema7RecordType = {\n    type: 'object',\n    additionalProperties:\n      parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, 'additionalProperties'],\n      }) ?? refs.allowedAdditionalProperties,\n  };\n\n  if (\n    def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n    def.keyType._def.checks?.length\n  ) {\n    const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n\n    return {\n      ...schema,\n      propertyNames: keyType,\n    };\n  } else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n    return {\n      ...schema,\n      propertyNames: {\n        enum: def.keyType._def.values,\n      },\n    };\n  } else if (\n    def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n    def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n    def.keyType._def.type._def.checks?.length\n  ) {\n    const { type, ...keyType } = parseBrandedDef(\n      def.keyType._def,\n      refs,\n    ) as JsonSchema7StringType;\n\n    return {\n      ...schema,\n      propertyNames: keyType,\n    };\n  }\n\n  return schema;\n}\n","import { ZodMapDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseAnyDef } from './any';\nimport { JsonSchema7RecordType, parseRecordDef } from './record';\n\nexport type JsonSchema7MapType = {\n  type: 'array';\n  maxItems: 125;\n  items: {\n    type: 'array';\n    items: [JsonSchema7Type, JsonSchema7Type];\n    minItems: 2;\n    maxItems: 2;\n  };\n};\n\nexport function parseMapDef(\n  def: ZodMapDef,\n  refs: Refs,\n): JsonSchema7MapType | JsonSchema7RecordType {\n  if (refs.mapStrategy === 'record') {\n    return parseRecordDef(def, refs);\n  }\n\n  const keys =\n    parseDef(def.keyType._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'items', 'items', '0'],\n    }) || parseAnyDef();\n  const values =\n    parseDef(def.valueType._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'items', 'items', '1'],\n    }) || parseAnyDef();\n  return {\n    type: 'array',\n    maxItems: 125,\n    items: {\n      type: 'array',\n      items: [keys, values],\n      minItems: 2,\n      maxItems: 2,\n    },\n  };\n}\n","import { ZodNativeEnumDef } from 'zod/v3';\n\nexport type JsonSchema7NativeEnumType = {\n  type: 'string' | 'number' | ['string', 'number'];\n  enum: (string | number)[];\n};\n\nexport function parseNativeEnumDef(\n  def: ZodNativeEnumDef,\n): JsonSchema7NativeEnumType {\n  const object = def.values;\n  const actualKeys = Object.keys(def.values).filter((key: string) => {\n    return typeof object[object[key]] !== 'number';\n  });\n\n  const actualValues = actualKeys.map((key: string) => object[key]);\n\n  const parsedTypes = Array.from(\n    new Set(actualValues.map((values: string | number) => typeof values)),\n  );\n\n  return {\n    type:\n      parsedTypes.length === 1\n        ? parsedTypes[0] === 'string'\n          ? 'string'\n          : 'number'\n        : ['string', 'number'],\n    enum: actualValues,\n  };\n}\n","import { JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7NeverType = {\n  not: JsonSchema7AnyType;\n};\n\nexport function parseNeverDef(): JsonSchema7NeverType | undefined {\n  return { not: parseAnyDef() };\n}\n","export type JsonSchema7NullType = {\n  type: 'null';\n};\n\nexport function parseNullDef(): JsonSchema7NullType {\n  return {\n    type: 'null',\n  };\n}\n","import {\n  ZodDiscriminatedUnionDef,\n  ZodLiteralDef,\n  ZodTypeAny,\n  ZodUnionDef,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport const primitiveMappings = {\n  ZodString: 'string',\n  ZodNumber: 'number',\n  ZodBigInt: 'integer',\n  ZodBoolean: 'boolean',\n  ZodNull: 'null',\n} as const;\ntype ZodPrimitive = keyof typeof primitiveMappings;\ntype JsonSchema7Primitive =\n  (typeof primitiveMappings)[keyof typeof primitiveMappings];\n\nexport type JsonSchema7UnionType =\n  | JsonSchema7PrimitiveUnionType\n  | JsonSchema7AnyOfType;\n\ntype JsonSchema7PrimitiveUnionType =\n  | {\n      type: JsonSchema7Primitive | JsonSchema7Primitive[];\n    }\n  | {\n      type: JsonSchema7Primitive | JsonSchema7Primitive[];\n      enum: (string | number | bigint | boolean | null)[];\n    };\n\ntype JsonSchema7AnyOfType = {\n  anyOf: JsonSchema7Type[];\n};\n\nexport function parseUnionDef(\n  def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n  refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined {\n  const options: readonly ZodTypeAny[] =\n    def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n\n  // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n  if (\n    options.every(\n      x =>\n        x._def.typeName in primitiveMappings &&\n        (!x._def.checks || !x._def.checks.length),\n    )\n  ) {\n    // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n\n    const types = options.reduce((types: JsonSchema7Primitive[], x) => {\n      const type = primitiveMappings[x._def.typeName as ZodPrimitive]; //Can be safely casted due to row 43\n      return type && !types.includes(type) ? [...types, type] : types;\n    }, []);\n\n    return {\n      type: types.length > 1 ? types : types[0],\n    };\n  } else if (\n    options.every(x => x._def.typeName === 'ZodLiteral' && !x.description)\n  ) {\n    // all options literals\n\n    const types = options.reduce(\n      (acc: JsonSchema7Primitive[], x: { _def: ZodLiteralDef }) => {\n        const type = typeof x._def.value;\n        switch (type) {\n          case 'string':\n          case 'number':\n          case 'boolean':\n            return [...acc, type];\n          case 'bigint':\n            return [...acc, 'integer' as const];\n          case 'object':\n            if (x._def.value === null) return [...acc, 'null' as const];\n          case 'symbol':\n          case 'undefined':\n          case 'function':\n          default:\n            return acc;\n        }\n      },\n      [],\n    );\n\n    if (types.length === options.length) {\n      // all the literals are primitive, as far as null can be considered primitive\n\n      const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n      return {\n        type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n        enum: options.reduce(\n          (acc, x) => {\n            return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n          },\n          [] as (string | number | bigint | boolean | null)[],\n        ),\n      };\n    }\n  } else if (options.every(x => x._def.typeName === 'ZodEnum')) {\n    return {\n      type: 'string',\n      enum: options.reduce(\n        (acc: string[], x) => [\n          ...acc,\n          ...x._def.values.filter((x: string) => !acc.includes(x)),\n        ],\n        [],\n      ),\n    };\n  }\n\n  return asAnyOf(def, refs);\n}\n\nconst asAnyOf = (\n  def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n  refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined => {\n  const anyOf = (\n    (def.options instanceof Map\n      ? Array.from(def.options.values())\n      : def.options) as any[]\n  )\n    .map((x, i) =>\n      parseDef(x._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, 'anyOf', `${i}`],\n      }),\n    )\n    .filter(\n      (x): x is JsonSchema7Type =>\n        !!x &&\n        (!refs.strictUnions ||\n          (typeof x === 'object' && Object.keys(x).length > 0)),\n    );\n\n  return anyOf.length ? { anyOf } : undefined;\n};\n","import { ZodNullableDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { JsonSchema7NullType } from './null';\nimport { primitiveMappings } from './union';\n\nexport type JsonSchema7NullableType =\n  | {\n      anyOf: [JsonSchema7Type, JsonSchema7NullType];\n    }\n  | {\n      type: [string, 'null'];\n    };\n\nexport function parseNullableDef(\n  def: ZodNullableDef,\n  refs: Refs,\n): JsonSchema7NullableType | undefined {\n  if (\n    ['ZodString', 'ZodNumber', 'ZodBigInt', 'ZodBoolean', 'ZodNull'].includes(\n      def.innerType._def.typeName,\n    ) &&\n    (!def.innerType._def.checks || !def.innerType._def.checks.length)\n  ) {\n    return {\n      type: [\n        primitiveMappings[\n          def.innerType._def.typeName as keyof typeof primitiveMappings\n        ],\n        'null',\n      ],\n    };\n  }\n\n  const base = parseDef(def.innerType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'anyOf', '0'],\n  });\n\n  return base && { anyOf: [base, { type: 'null' }] };\n}\n","import { ZodNumberDef } from 'zod/v3';\n\nexport type JsonSchema7NumberType = {\n  type: 'number' | 'integer';\n  minimum?: number;\n  exclusiveMinimum?: number;\n  maximum?: number;\n  exclusiveMaximum?: number;\n  multipleOf?: number;\n};\n\nexport function parseNumberDef(def: ZodNumberDef): JsonSchema7NumberType {\n  const res: JsonSchema7NumberType = {\n    type: 'number',\n  };\n\n  if (!def.checks) return res;\n\n  for (const check of def.checks) {\n    switch (check.kind) {\n      case 'int':\n        res.type = 'integer';\n        break;\n      case 'min':\n        if (check.inclusive) {\n          res.minimum = check.value;\n        } else {\n          res.exclusiveMinimum = check.value;\n        }\n        break;\n      case 'max':\n        if (check.inclusive) {\n          res.maximum = check.value;\n        } else {\n          res.exclusiveMaximum = check.value;\n        }\n        break;\n      case 'multipleOf':\n        res.multipleOf = check.value;\n        break;\n    }\n  }\n  return res;\n}\n","import { ZodObjectDef, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7ObjectType = {\n  type: 'object';\n  properties: Record<string, JsonSchema7Type>;\n  additionalProperties?: boolean | JsonSchema7Type;\n  required?: string[];\n};\n\nexport function parseObjectDef(def: ZodObjectDef, refs: Refs) {\n  const result: JsonSchema7ObjectType = {\n    type: 'object',\n    properties: {},\n  };\n\n  const required: string[] = [];\n\n  const shape = def.shape();\n\n  for (const propName in shape) {\n    let propDef = shape[propName];\n\n    if (propDef === undefined || propDef._def === undefined) {\n      continue;\n    }\n\n    const propOptional = safeIsOptional(propDef);\n\n    const parsedDef = parseDef(propDef._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'properties', propName],\n      propertyPath: [...refs.currentPath, 'properties', propName],\n    });\n\n    if (parsedDef === undefined) {\n      continue;\n    }\n\n    result.properties[propName] = parsedDef;\n\n    if (!propOptional) {\n      required.push(propName);\n    }\n  }\n\n  if (required.length) {\n    result.required = required;\n  }\n\n  const additionalProperties = decideAdditionalProperties(def, refs);\n\n  if (additionalProperties !== undefined) {\n    result.additionalProperties = additionalProperties;\n  }\n\n  return result;\n}\n\nfunction decideAdditionalProperties(def: ZodObjectDef, refs: Refs) {\n  if (def.catchall._def.typeName !== 'ZodNever') {\n    return parseDef(def.catchall._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'additionalProperties'],\n    });\n  }\n\n  switch (def.unknownKeys) {\n    case 'passthrough':\n      return refs.allowedAdditionalProperties;\n    case 'strict':\n      return refs.rejectedAdditionalProperties;\n    case 'strip':\n      return refs.removeAdditionalStrategy === 'strict'\n        ? refs.allowedAdditionalProperties\n        : refs.rejectedAdditionalProperties;\n  }\n}\n\nfunction safeIsOptional(schema: ZodTypeAny): boolean {\n  try {\n    return schema.isOptional();\n  } catch {\n    return true;\n  }\n}\n","import { ZodOptionalDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport const parseOptionalDef = (\n  def: ZodOptionalDef,\n  refs: Refs,\n): JsonSchema7Type | undefined => {\n  if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n    return parseDef(def.innerType._def, refs);\n  }\n\n  const innerSchema = parseDef(def.innerType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'anyOf', '1'],\n  });\n\n  return innerSchema\n    ? { anyOf: [{ not: parseAnyDef() }, innerSchema] }\n    : parseAnyDef();\n};\n","import { ZodPipelineDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { JsonSchema7AllOfType } from './intersection';\n\nexport const parsePipelineDef = (\n  def: ZodPipelineDef<any, any>,\n  refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined => {\n  if (refs.pipeStrategy === 'input') {\n    return parseDef(def.in._def, refs);\n  } else if (refs.pipeStrategy === 'output') {\n    return parseDef(def.out._def, refs);\n  }\n\n  const a = parseDef(def.in._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'allOf', '0'],\n  });\n  const b = parseDef(def.out._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'allOf', a ? '1' : '0'],\n  });\n\n  return {\n    allOf: [a, b].filter((x): x is JsonSchema7Type => x !== undefined),\n  };\n};\n","import { ZodPromiseDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport function parsePromiseDef(\n  def: ZodPromiseDef,\n  refs: Refs,\n): JsonSchema7Type | undefined {\n  return parseDef(def.type._def, refs);\n}\n","import { ZodSetDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7SetType = {\n  type: 'array';\n  uniqueItems: true;\n  items?: JsonSchema7Type;\n  minItems?: number;\n  maxItems?: number;\n};\n\nexport function parseSetDef(def: ZodSetDef, refs: Refs): JsonSchema7SetType {\n  const items = parseDef(def.valueType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'items'],\n  });\n\n  const schema: JsonSchema7SetType = {\n    type: 'array',\n    uniqueItems: true,\n    items,\n  };\n\n  if (def.minSize) {\n    schema.minItems = def.minSize.value;\n  }\n\n  if (def.maxSize) {\n    schema.maxItems = def.maxSize.value;\n  }\n\n  return schema;\n}\n","import { ZodTupleDef, ZodTupleItems, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7TupleType = {\n  type: 'array';\n  minItems: number;\n  items: JsonSchema7Type[];\n} & (\n  | {\n      maxItems: number;\n    }\n  | {\n      additionalItems?: JsonSchema7Type;\n    }\n);\n\nexport function parseTupleDef(\n  def: ZodTupleDef<ZodTupleItems | [], ZodTypeAny | null>,\n  refs: Refs,\n): JsonSchema7TupleType {\n  if (def.rest) {\n    return {\n      type: 'array',\n      minItems: def.items.length,\n      items: def.items\n        .map((x, i) =>\n          parseDef(x._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, 'items', `${i}`],\n          }),\n        )\n        .reduce(\n          (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n          [],\n        ),\n      additionalItems: parseDef(def.rest._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, 'additionalItems'],\n      }),\n    };\n  } else {\n    return {\n      type: 'array',\n      minItems: def.items.length,\n      maxItems: def.items.length,\n      items: def.items\n        .map((x, i) =>\n          parseDef(x._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, 'items', `${i}`],\n          }),\n        )\n        .reduce(\n          (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n          [],\n        ),\n    };\n  }\n}\n","import { JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7UndefinedType = {\n  not: JsonSchema7AnyType;\n};\n\nexport function parseUndefinedDef(): JsonSchema7UndefinedType {\n  return {\n    not: parseAnyDef(),\n  };\n}\n","import { JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7UnknownType = JsonSchema7AnyType;\n\nexport function parseUnknownDef(): JsonSchema7UnknownType {\n  return parseAnyDef();\n}\n","import { ZodReadonlyDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { Refs } from '../refs';\n\nexport const parseReadonlyDef = (def: ZodReadonlyDef<any>, refs: Refs) => {\n  return parseDef(def.innerType._def, refs);\n};\n","import { ZodFirstPartyTypeKind } from 'zod/v3';\nimport { parseAnyDef } from './parsers/any';\nimport { parseArrayDef } from './parsers/array';\nimport { parseBigintDef } from './parsers/bigint';\nimport { parseBooleanDef } from './parsers/boolean';\nimport { parseBrandedDef } from './parsers/branded';\nimport { parseCatchDef } from './parsers/catch';\nimport { parseDateDef } from './parsers/date';\nimport { parseDefaultDef } from './parsers/default';\nimport { parseEffectsDef } from './parsers/effects';\nimport { parseEnumDef } from './parsers/enum';\nimport { parseIntersectionDef } from './parsers/intersection';\nimport { parseLiteralDef } from './parsers/literal';\nimport { parseMapDef } from './parsers/map';\nimport { parseNativeEnumDef } from './parsers/native-enum';\nimport { parseNeverDef } from './parsers/never';\nimport { parseNullDef } from './parsers/null';\nimport { parseNullableDef } from './parsers/nullable';\nimport { parseNumberDef } from './parsers/number';\nimport { parseObjectDef } from './parsers/object';\nimport { parseOptionalDef } from './parsers/optional';\nimport { parsePipelineDef } from './parsers/pipeline';\nimport { parsePromiseDef } from './parsers/promise';\nimport { parseRecordDef } from './parsers/record';\nimport { parseSetDef } from './parsers/set';\nimport { parseStringDef } from './parsers/string';\nimport { parseTupleDef } from './parsers/tuple';\nimport { parseUndefinedDef } from './parsers/undefined';\nimport { parseUnionDef } from './parsers/union';\nimport { parseUnknownDef } from './parsers/unknown';\nimport { Refs } from './refs';\nimport { parseReadonlyDef } from './parsers/readonly';\nimport { JsonSchema7Type } from './parse-types';\n\nexport type InnerDefGetter = () => any;\n\nexport const selectParser = (\n  def: any,\n  typeName: ZodFirstPartyTypeKind,\n  refs: Refs,\n): JsonSchema7Type | undefined | InnerDefGetter => {\n  switch (typeName) {\n    case ZodFirstPartyTypeKind.ZodString:\n      return parseStringDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodNumber:\n      return parseNumberDef(def);\n    case ZodFirstPartyTypeKind.ZodObject:\n      return parseObjectDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodBigInt:\n      return parseBigintDef(def);\n    case ZodFirstPartyTypeKind.ZodBoolean:\n      return parseBooleanDef();\n    case ZodFirstPartyTypeKind.ZodDate:\n      return parseDateDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodUndefined:\n      return parseUndefinedDef();\n    case ZodFirstPartyTypeKind.ZodNull:\n      return parseNullDef();\n    case ZodFirstPartyTypeKind.ZodArray:\n      return parseArrayDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodUnion:\n    case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n      return parseUnionDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodIntersection:\n      return parseIntersectionDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodTuple:\n      return parseTupleDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodRecord:\n      return parseRecordDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodLiteral:\n      return parseLiteralDef(def);\n    case ZodFirstPartyTypeKind.ZodEnum:\n      return parseEnumDef(def);\n    case ZodFirstPartyTypeKind.ZodNativeEnum:\n      return parseNativeEnumDef(def);\n    case ZodFirstPartyTypeKind.ZodNullable:\n      return parseNullableDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodOptional:\n      return parseOptionalDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodMap:\n      return parseMapDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodSet:\n      return parseSetDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodLazy:\n      return () => (def as any).getter()._def;\n    case ZodFirstPartyTypeKind.ZodPromise:\n      return parsePromiseDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodNaN:\n    case ZodFirstPartyTypeKind.ZodNever:\n      return parseNeverDef();\n    case ZodFirstPartyTypeKind.ZodEffects:\n      return parseEffectsDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodAny:\n      return parseAnyDef();\n    case ZodFirstPartyTypeKind.ZodUnknown:\n      return parseUnknownDef();\n    case ZodFirstPartyTypeKind.ZodDefault:\n      return parseDefaultDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodBranded:\n      return parseBrandedDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodReadonly:\n      return parseReadonlyDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodCatch:\n      return parseCatchDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodPipeline:\n      return parsePipelineDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodFunction:\n    case ZodFirstPartyTypeKind.ZodVoid:\n    case ZodFirstPartyTypeKind.ZodSymbol:\n      return undefined;\n    default:\n      /* c8 ignore next */\n      return ((_: never) => undefined)(typeName);\n  }\n};\n","import { ZodTypeDef } from 'zod/v3';\nimport { Refs, Seen } from './refs';\nimport { ignoreOverride } from './options';\nimport { JsonSchema7Type } from './parse-types';\nimport { selectParser } from './select-parser';\nimport { getRelativePath } from './get-relative-path';\nimport { parseAnyDef } from './parsers/any';\n\nexport function parseDef(\n  def: ZodTypeDef,\n  refs: Refs,\n  forceResolution = false, // Forces a new schema to be instantiated even though its def has been seen. Used for improving refs in definitions. See https://github.com/StefanTerdell/zod-to-json-schema/pull/61.\n): JsonSchema7Type | undefined {\n  const seenItem = refs.seen.get(def);\n\n  if (refs.override) {\n    const overrideResult = refs.override?.(\n      def,\n      refs,\n      seenItem,\n      forceResolution,\n    );\n\n    if (overrideResult !== ignoreOverride) {\n      return overrideResult;\n    }\n  }\n\n  if (seenItem && !forceResolution) {\n    const seenSchema = get$ref(seenItem, refs);\n\n    if (seenSchema !== undefined) {\n      return seenSchema;\n    }\n  }\n\n  const newItem: Seen = { def, path: refs.currentPath, jsonSchema: undefined };\n\n  refs.seen.set(def, newItem);\n\n  const jsonSchemaOrGetter = selectParser(def, (def as any).typeName, refs);\n\n  // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n  const jsonSchema =\n    typeof jsonSchemaOrGetter === 'function'\n      ? parseDef(jsonSchemaOrGetter(), refs)\n      : jsonSchemaOrGetter;\n\n  if (jsonSchema) {\n    addMeta(def, refs, jsonSchema);\n  }\n\n  if (refs.postProcess) {\n    const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n\n    newItem.jsonSchema = jsonSchema;\n\n    return postProcessResult;\n  }\n\n  newItem.jsonSchema = jsonSchema;\n\n  return jsonSchema;\n}\n\nconst get$ref = (\n  item: Seen,\n  refs: Refs,\n):\n  | {\n      $ref: string;\n    }\n  | {}\n  | undefined => {\n  switch (refs.$refStrategy) {\n    case 'root':\n      return { $ref: item.path.join('/') };\n    case 'relative':\n      return { $ref: getRelativePath(refs.currentPath, item.path) };\n    case 'none':\n    case 'seen': {\n      if (\n        item.path.length < refs.currentPath.length &&\n        item.path.every((value, index) => refs.currentPath[index] === value)\n      ) {\n        console.warn(\n          `Recursive reference detected at ${refs.currentPath.join(\n            '/',\n          )}! Defaulting to any`,\n        );\n\n        return parseAnyDef();\n      }\n\n      return refs.$refStrategy === 'seen' ? parseAnyDef() : undefined;\n    }\n  }\n};\n\nconst addMeta = (\n  def: ZodTypeDef,\n  refs: Refs,\n  jsonSchema: JsonSchema7Type,\n): JsonSchema7Type => {\n  if (def.description) {\n    jsonSchema.description = def.description;\n  }\n  return jsonSchema;\n};\n","import { ZodTypeDef } from 'zod/v3';\nimport { getDefaultOptions, Options } from './options';\nimport { JsonSchema7Type } from './parse-types';\n\nexport type Refs = {\n  seen: Map<ZodTypeDef, Seen>;\n  currentPath: string[];\n  propertyPath: string[] | undefined;\n} & Options;\n\nexport type Seen = {\n  def: ZodTypeDef;\n  path: string[];\n  jsonSchema: JsonSchema7Type | undefined;\n};\n\nexport const getRefs = (options?: string | Partial<Options>): Refs => {\n  const _options = getDefaultOptions(options);\n  const currentPath =\n    _options.name !== undefined\n      ? [..._options.basePath, _options.definitionPath, _options.name]\n      : _options.basePath;\n  return {\n    ..._options,\n    currentPath: currentPath,\n    propertyPath: undefined,\n    seen: new Map(\n      Object.entries(_options.definitions).map(([name, def]) => [\n        def._def,\n        {\n          def: def._def,\n          path: [..._options.basePath, _options.definitionPath, name],\n          // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n          jsonSchema: undefined,\n        },\n      ]),\n    ),\n  };\n};\n","import { ZodSchema } from 'zod/v3';\nimport { Options } from './options';\nimport { parseDef } from './parse-def';\nimport { JsonSchema7Type } from './parse-types';\nimport { getRefs } from './refs';\nimport { parseAnyDef } from './parsers/any';\n\nconst zodToJsonSchema = (\n  schema: ZodSchema<any>,\n  options?: Partial<Options> | string,\n): JsonSchema7Type & {\n  $schema?: string;\n  definitions?: {\n    [key: string]: JsonSchema7Type;\n  };\n} => {\n  const refs = getRefs(options);\n\n  let definitions =\n    typeof options === 'object' && options.definitions\n      ? Object.entries(options.definitions).reduce(\n          (acc: { [key: string]: JsonSchema7Type }, [name, schema]) => ({\n            ...acc,\n            [name]:\n              parseDef(\n                schema._def,\n                {\n                  ...refs,\n                  currentPath: [...refs.basePath, refs.definitionPath, name],\n                },\n                true,\n              ) ?? parseAnyDef(),\n          }),\n          {},\n        )\n      : undefined;\n\n  const name =\n    typeof options === 'string'\n      ? options\n      : options?.nameStrategy === 'title'\n        ? undefined\n        : options?.name;\n\n  const main =\n    parseDef(\n      schema._def,\n      name === undefined\n        ? refs\n        : {\n            ...refs,\n            currentPath: [...refs.basePath, refs.definitionPath, name],\n          },\n      false,\n    ) ?? (parseAnyDef() as JsonSchema7Type);\n\n  const title =\n    typeof options === 'object' &&\n    options.name !== undefined &&\n    options.nameStrategy === 'title'\n      ? options.name\n      : undefined;\n\n  if (title !== undefined) {\n    main.title = title;\n  }\n\n  const combined: ReturnType<typeof zodToJsonSchema> =\n    name === undefined\n      ? definitions\n        ? {\n            ...main,\n            [refs.definitionPath]: definitions,\n          }\n        : main\n      : {\n          $ref: [\n            ...(refs.$refStrategy === 'relative' ? [] : refs.basePath),\n            refs.definitionPath,\n            name,\n          ].join('/'),\n          [refs.definitionPath]: {\n            ...definitions,\n            [name]: main,\n          },\n        };\n\n  combined.$schema = 'http://json-schema.org/draft-07/schema#';\n\n  return combined;\n};\n\nexport { zodToJsonSchema };\n","export * from './get-relative-path';\nexport * from './options';\nexport * from './parse-def';\nexport * from './parse-types';\nexport * from './parsers/any';\nexport * from './parsers/array';\nexport * from './parsers/bigint';\nexport * from './parsers/boolean';\nexport * from './parsers/branded';\nexport * from './parsers/catch';\nexport * from './parsers/date';\nexport * from './parsers/default';\nexport * from './parsers/effects';\nexport * from './parsers/enum';\nexport * from './parsers/intersection';\nexport * from './parsers/literal';\nexport * from './parsers/map';\nexport * from './parsers/native-enum';\nexport * from './parsers/never';\nexport * from './parsers/null';\nexport * from './parsers/nullable';\nexport * from './parsers/number';\nexport * from './parsers/object';\nexport * from './parsers/optional';\nexport * from './parsers/pipeline';\nexport * from './parsers/promise';\nexport * from './parsers/readonly';\nexport * from './parsers/record';\nexport * from './parsers/set';\nexport * from './parsers/string';\nexport * from './parsers/tuple';\nexport * from './parsers/undefined';\nexport * from './parsers/union';\nexport * from './parsers/unknown';\nexport * from './refs';\nexport * from './select-parser';\nexport * from './zod-to-json-schema';\nimport { zodToJsonSchema } from './zod-to-json-schema';\nexport default zodToJsonSchema;\n","import { JSONSchema7 } from '@ai-sdk/provider';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4';\nimport { addAdditionalPropertiesToJsonSchema } from './add-additional-properties-to-json-schema';\nimport { jsonSchema, Schema } from './schema';\nimport zodToJsonSchema from './zod-to-json-schema';\n\nexport function zod3Schema<OBJECT>(\n  zodSchema: z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n  options?: {\n    /**\n     * Enables support for references in the schema.\n     * This is required for recursive schemas, e.g. with `z.lazy`.\n     * However, not all language models and providers support such references.\n     * Defaults to `false`.\n     */\n    useReferences?: boolean;\n  },\n): Schema<OBJECT> {\n  // default to no references (to support openapi conversion for google)\n  const useReferences = options?.useReferences ?? false;\n\n  return jsonSchema(\n    // defer json schema creation to avoid unnecessary computation when only validation is needed\n    () =>\n      zodToJsonSchema(zodSchema, {\n        $refStrategy: useReferences ? 'root' : 'none',\n      }) as JSONSchema7,\n    {\n      validate: async value => {\n        const result = await zodSchema.safeParseAsync(value);\n        return result.success\n          ? { success: true, value: result.data }\n          : { success: false, error: result.error };\n      },\n    },\n  );\n}\n\nexport function zod4Schema<OBJECT>(\n  zodSchema: z4.core.$ZodType<OBJECT, any>,\n  options?: {\n    /**\n     * Enables support for references in the schema.\n     * This is required for recursive schemas, e.g. with `z.lazy`.\n     * However, not all language models and providers support such references.\n     * Defaults to `false`.\n     */\n    useReferences?: boolean;\n  },\n): Schema<OBJECT> {\n  // default to no references (to support openapi conversion for google)\n  const useReferences = options?.useReferences ?? false;\n\n  return jsonSchema(\n    // defer json schema creation to avoid unnecessary computation when only validation is needed\n    () =>\n      addAdditionalPropertiesToJsonSchema(\n        z4.toJSONSchema(zodSchema, {\n          target: 'draft-7',\n          io: 'input',\n          reused: useReferences ? 'ref' : 'inline',\n        }) as JSONSchema7,\n      ),\n    {\n      validate: async value => {\n        const result = await z4.safeParseAsync(zodSchema, value);\n        return result.success\n          ? { success: true, value: result.data }\n          : { success: false, error: result.error };\n      },\n    },\n  );\n}\n\nexport function isZod4Schema(\n  zodSchema: z4.core.$ZodType<any, any> | z3.Schema<any, z3.ZodTypeDef, any>,\n): zodSchema is z4.core.$ZodType<any, any> {\n  // https://zod.dev/library-authors?id=how-to-support-zod-3-and-zod-4-simultaneously\n  return '_zod' in zodSchema;\n}\n\nexport function zodSchema<OBJECT>(\n  zodSchema:\n    | z4.core.$ZodType<OBJECT, any>\n    | z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n  options?: {\n    /**\n     * Enables support for references in the schema.\n     * This is required for recursive schemas, e.g. with `z.lazy`.\n     * However, not all language models and providers support such references.\n     * Defaults to `false`.\n     */\n    useReferences?: boolean;\n  },\n): Schema<OBJECT> {\n  if (isZod4Schema(zodSchema)) {\n    return zod4Schema(zodSchema, options);\n  } else {\n    return zod3Schema(zodSchema, options);\n  }\n}\n","import { JSONSchema7 } from '@ai-sdk/provider';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4';\nimport { Validator, validatorSymbol, type ValidationResult } from './validator';\nimport { zodSchema } from './zod-schema';\n\n/**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\nconst schemaSymbol = Symbol.for('vercel.ai.schema');\n\nexport type Schema<OBJECT = unknown> = Validator<OBJECT> & {\n  /**\n   * Used to mark schemas so we can support both Zod and custom schemas.\n   */\n  [schemaSymbol]: true;\n\n  /**\n   * Schema type for inference.\n   */\n  _type: OBJECT;\n\n  /**\n   * The JSON Schema for the schema. It is passed to the providers.\n   */\n  readonly jsonSchema: JSONSchema7;\n};\n\n/**\n * Creates a schema with deferred creation.\n * This is important to reduce the startup time of the library\n * and to avoid initializing unused validators.\n *\n * @param createValidator A function that creates a schema.\n * @returns A function that returns a schema.\n */\nexport function lazySchema<SCHEMA>(\n  createSchema: () => Schema<SCHEMA>,\n): LazySchema<SCHEMA> {\n  // cache the validator to avoid initializing it multiple times\n  let schema: Schema<SCHEMA> | undefined;\n  return () => {\n    if (schema == null) {\n      schema = createSchema();\n    }\n    return schema;\n  };\n}\n\nexport type LazySchema<SCHEMA> = () => Schema<SCHEMA>;\n\n// Note: Zod types here exactly match the types in zod-schema.ts\n// to prevent type errors when using zod schemas with flexible schemas.\nexport type FlexibleSchema<SCHEMA> =\n  | z4.core.$ZodType<SCHEMA, any>\n  | z3.Schema<SCHEMA, z3.ZodTypeDef, any>\n  | Schema<SCHEMA>\n  | LazySchema<SCHEMA>;\n\nexport type InferSchema<SCHEMA> = SCHEMA extends z3.Schema\n  ? z3.infer<SCHEMA>\n  : SCHEMA extends z4.core.$ZodType\n    ? z4.infer<SCHEMA>\n    : SCHEMA extends LazySchema<infer T>\n      ? T\n      : SCHEMA extends Schema<infer T>\n        ? T\n        : never;\n\n/**\n * Create a schema using a JSON Schema.\n *\n * @param jsonSchema The JSON Schema for the schema.\n * @param options.validate Optional. A validation function for the schema.\n */\nexport function jsonSchema<OBJECT = unknown>(\n  jsonSchema: JSONSchema7 | (() => JSONSchema7),\n  {\n    validate,\n  }: {\n    validate?: (\n      value: unknown,\n    ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n  } = {},\n): Schema<OBJECT> {\n  return {\n    [schemaSymbol]: true,\n    _type: undefined as OBJECT, // should never be used directly\n    [validatorSymbol]: true,\n    get jsonSchema() {\n      if (typeof jsonSchema === 'function') {\n        jsonSchema = jsonSchema(); // cache the function results\n      }\n      return jsonSchema;\n    },\n    validate,\n  };\n}\n\nfunction isSchema(value: unknown): value is Schema {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    schemaSymbol in value &&\n    value[schemaSymbol] === true &&\n    'jsonSchema' in value &&\n    'validate' in value\n  );\n}\n\nexport function asSchema<OBJECT>(\n  schema: FlexibleSchema<OBJECT> | undefined,\n): Schema<OBJECT> {\n  return schema == null\n    ? jsonSchema({\n        properties: {},\n        additionalProperties: false,\n      })\n    : isSchema(schema)\n      ? schema\n      : typeof schema === 'function'\n        ? schema()\n        : zodSchema(schema);\n}\n","export function withoutTrailingSlash(url: string | undefined) {\n  return url?.replace(/\\/$/, '');\n}\n","export function getContext() {\n  return {\n    headers: {},\n  };\n}\n\nexport async function getVercelOidcToken(): Promise<string> {\n  if (process.env.VERCEL_OIDC_TOKEN) {\n    return process.env.VERCEL_OIDC_TOKEN ?? '';\n  }\n\n  throw new Error('@vercel/oidc is not available in the vendored @internal AI packages. Provide an API key instead.');\n}\n","const marker = 'vercel.ai.gateway.error';\nconst symbol = Symbol.for(marker);\n\nexport abstract class GatewayError extends Error {\n  private readonly [symbol] = true; // used in isInstance\n\n  abstract readonly name: string;\n  abstract readonly type: string;\n  readonly statusCode: number;\n  readonly cause?: unknown;\n\n  constructor({\n    message,\n    statusCode = 500,\n    cause,\n  }: {\n    message: string;\n    statusCode?: number;\n    cause?: unknown;\n  }) {\n    super(message);\n    this.statusCode = statusCode;\n    this.cause = cause;\n  }\n\n  /**\n   * Checks if the given error is a Gateway Error.\n   * @param {unknown} error - The error to check.\n   * @returns {boolean} True if the error is a Gateway Error, false otherwise.\n   */\n  static isInstance(error: unknown): error is GatewayError {\n    return GatewayError.hasMarker(error);\n  }\n\n  static hasMarker(error: unknown): error is GatewayError {\n    return (\n      typeof error === 'object' &&\n      error !== null &&\n      symbol in error &&\n      (error as any)[symbol] === true\n    );\n  }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayAuthenticationError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Authentication failed - invalid API key or OIDC token\n */\nexport class GatewayAuthenticationError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'authentication_error';\n\n  constructor({\n    message = 'Authentication failed',\n    statusCode = 401,\n    cause,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n  } = {}) {\n    super({ message, statusCode, cause });\n  }\n\n  static isInstance(error: unknown): error is GatewayAuthenticationError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n\n  /**\n   * Creates a contextual error message when authentication fails\n   */\n  static createContextualError({\n    apiKeyProvided,\n    oidcTokenProvided,\n    message = 'Authentication failed',\n    statusCode = 401,\n    cause,\n  }: {\n    apiKeyProvided: boolean;\n    oidcTokenProvided: boolean;\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n  }): GatewayAuthenticationError {\n    let contextualMessage: string;\n\n    if (apiKeyProvided) {\n      contextualMessage = `AI Gateway authentication failed: Invalid API key.\n\nCreate a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\n\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n    } else if (oidcTokenProvided) {\n      contextualMessage = `AI Gateway authentication failed: Invalid OIDC token.\n\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.\n\nAlternatively, use an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys`;\n    } else {\n      contextualMessage = `AI Gateway authentication failed: No authentication provided.\n\nOption 1 - API key:\nCreate an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.\n\nOption 2 - OIDC token:\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;\n    }\n\n    return new GatewayAuthenticationError({\n      message: contextualMessage,\n      statusCode,\n      cause,\n    });\n  }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInvalidRequestError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Invalid request - missing headers, malformed data, etc.\n */\nexport class GatewayInvalidRequestError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'invalid_request_error';\n\n  constructor({\n    message = 'Invalid request',\n    statusCode = 400,\n    cause,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n  } = {}) {\n    super({ message, statusCode, cause });\n  }\n\n  static isInstance(error: unknown): error is GatewayInvalidRequestError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayRateLimitError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Rate limit exceeded.\n */\nexport class GatewayRateLimitError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'rate_limit_exceeded';\n\n  constructor({\n    message = 'Rate limit exceeded',\n    statusCode = 429,\n    cause,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n  } = {}) {\n    super({ message, statusCode, cause });\n  }\n\n  static isInstance(error: unknown): error is GatewayRateLimitError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { z } from 'zod/v4';\nimport { GatewayError } from './gateway-error';\nimport { lazyValidator, zodSchema } from '@ai-sdk/provider-utils';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = lazyValidator(() =>\n  zodSchema(\n    z.object({\n      modelId: z.string(),\n    }),\n  ),\n);\n\n/**\n * Model not found or not available\n */\nexport class GatewayModelNotFoundError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'model_not_found';\n  readonly modelId?: string;\n\n  constructor({\n    message = 'Model not found',\n    statusCode = 404,\n    modelId,\n    cause,\n  }: {\n    message?: string;\n    statusCode?: number;\n    modelId?: string;\n    cause?: unknown;\n  } = {}) {\n    super({ message, statusCode, cause });\n    this.modelId = modelId;\n  }\n\n  static isInstance(error: unknown): error is GatewayModelNotFoundError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInternalServerError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Internal server error from the Gateway\n */\nexport class GatewayInternalServerError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'internal_server_error';\n\n  constructor({\n    message = 'Internal server error',\n    statusCode = 500,\n    cause,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n  } = {}) {\n    super({ message, statusCode, cause });\n  }\n\n  static isInstance(error: unknown): error is GatewayInternalServerError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { GatewayError } from './gateway-error';\n\nconst name = 'GatewayResponseError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Gateway response parsing error\n */\nexport class GatewayResponseError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'response_error';\n  readonly response?: unknown;\n  readonly validationError?: TypeValidationError;\n\n  constructor({\n    message = 'Invalid response from Gateway',\n    statusCode = 502,\n    response,\n    validationError,\n    cause,\n  }: {\n    message?: string;\n    statusCode?: number;\n    response?: unknown;\n    validationError?: TypeValidationError;\n    cause?: unknown;\n  } = {}) {\n    super({ message, statusCode, cause });\n    this.response = response;\n    this.validationError = validationError;\n  }\n\n  static isInstance(error: unknown): error is GatewayResponseError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { z } from 'zod/v4';\nimport type { GatewayError } from './gateway-error';\nimport { GatewayAuthenticationError } from './gateway-authentication-error';\nimport { GatewayInvalidRequestError } from './gateway-invalid-request-error';\nimport { GatewayRateLimitError } from './gateway-rate-limit-error';\nimport {\n  GatewayModelNotFoundError,\n  modelNotFoundParamSchema,\n} from './gateway-model-not-found-error';\nimport { GatewayInternalServerError } from './gateway-internal-server-error';\nimport { GatewayResponseError } from './gateway-response-error';\nimport {\n  InferValidator,\n  lazyValidator,\n  safeValidateTypes,\n  validateTypes,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport async function createGatewayErrorFromResponse({\n  response,\n  statusCode,\n  defaultMessage = 'Gateway request failed',\n  cause,\n  authMethod,\n}: {\n  response: unknown;\n  statusCode: number;\n  defaultMessage?: string;\n  cause?: unknown;\n  authMethod?: 'api-key' | 'oidc';\n}): Promise<GatewayError> {\n  const parseResult = await safeValidateTypes({\n    value: response,\n    schema: gatewayErrorResponseSchema,\n  });\n\n  if (!parseResult.success) {\n    return new GatewayResponseError({\n      message: `Invalid error response format: ${defaultMessage}`,\n      statusCode,\n      response,\n      validationError: parseResult.error,\n      cause,\n    });\n  }\n\n  const validatedResponse: GatewayErrorResponse = parseResult.value;\n  const errorType = validatedResponse.error.type;\n  const message = validatedResponse.error.message;\n\n  switch (errorType) {\n    case 'authentication_error':\n      return GatewayAuthenticationError.createContextualError({\n        apiKeyProvided: authMethod === 'api-key',\n        oidcTokenProvided: authMethod === 'oidc',\n        statusCode,\n        cause,\n      });\n    case 'invalid_request_error':\n      return new GatewayInvalidRequestError({ message, statusCode, cause });\n    case 'rate_limit_exceeded':\n      return new GatewayRateLimitError({ message, statusCode, cause });\n    case 'model_not_found': {\n      const modelResult = await safeValidateTypes({\n        value: validatedResponse.error.param,\n        schema: modelNotFoundParamSchema,\n      });\n\n      return new GatewayModelNotFoundError({\n        message,\n        statusCode,\n        modelId: modelResult.success ? modelResult.value.modelId : undefined,\n        cause,\n      });\n    }\n    case 'internal_server_error':\n      return new GatewayInternalServerError({ message, statusCode, cause });\n    default:\n      return new GatewayInternalServerError({ message, statusCode, cause });\n  }\n}\n\nconst gatewayErrorResponseSchema = lazyValidator(() =>\n  zodSchema(\n    z.object({\n      error: z.object({\n        message: z.string(),\n        type: z.string().nullish(),\n        param: z.unknown().nullish(),\n        code: z.union([z.string(), z.number()]).nullish(),\n      }),\n    }),\n  ),\n);\n\nexport type GatewayErrorResponse = InferValidator<\n  typeof gatewayErrorResponseSchema\n>;\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayTimeoutError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Client request timed out before receiving a response.\n */\nexport class GatewayTimeoutError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'timeout_error';\n\n  constructor({\n    message = 'Request timed out',\n    statusCode = 408,\n    cause,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n  } = {}) {\n    super({ message, statusCode, cause });\n  }\n\n  static isInstance(error: unknown): error is GatewayTimeoutError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n\n  /**\n   * Creates a helpful timeout error message with troubleshooting guidance\n   */\n  static createTimeoutError({\n    originalMessage,\n    statusCode = 408,\n    cause,\n  }: {\n    originalMessage: string;\n    statusCode?: number;\n    cause?: unknown;\n  }): GatewayTimeoutError {\n    const message = `Gateway request timed out: ${originalMessage}\n\n    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`;\n\n    return new GatewayTimeoutError({\n      message,\n      statusCode,\n      cause,\n    });\n  }\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\nimport { GatewayTimeoutError } from './gateway-timeout-error';\n\n/**\n * Checks if an error is a timeout error from undici.\n * Only checks undici-specific error codes to avoid false positives.\n */\nfunction isTimeoutError(error: unknown): boolean {\n  if (!(error instanceof Error)) {\n    return false;\n  }\n\n  // Check for undici-specific timeout error codes\n  const errorCode = (error as any).code;\n  if (typeof errorCode === 'string') {\n    const undiciTimeoutCodes = [\n      'UND_ERR_HEADERS_TIMEOUT',\n      'UND_ERR_BODY_TIMEOUT',\n      'UND_ERR_CONNECT_TIMEOUT',\n    ];\n    return undiciTimeoutCodes.includes(errorCode);\n  }\n\n  return false;\n}\n\nexport async function asGatewayError(\n  error: unknown,\n  authMethod?: 'api-key' | 'oidc',\n) {\n  if (GatewayError.isInstance(error)) {\n    return error;\n  }\n\n  // Check if this is a timeout error (or has a timeout error in the cause chain)\n  if (isTimeoutError(error)) {\n    return GatewayTimeoutError.createTimeoutError({\n      originalMessage: error instanceof Error ? error.message : 'Unknown error',\n      cause: error,\n    });\n  }\n\n  // Check if this is an APICallError caused by a timeout\n  if (APICallError.isInstance(error)) {\n    // Check if the cause is a timeout error\n    if (error.cause && isTimeoutError(error.cause)) {\n      return GatewayTimeoutError.createTimeoutError({\n        originalMessage: error.message,\n        cause: error,\n      });\n    }\n\n    return await createGatewayErrorFromResponse({\n      response: extractApiCallResponse(error),\n      statusCode: error.statusCode ?? 500,\n      defaultMessage: 'Gateway request failed',\n      cause: error,\n      authMethod,\n    });\n  }\n\n  return await createGatewayErrorFromResponse({\n    response: {},\n    statusCode: 500,\n    defaultMessage:\n      error instanceof Error\n        ? `Gateway request failed: ${error.message}`\n        : 'Unknown Gateway error',\n    cause: error,\n    authMethod,\n  });\n}\n","import type { APICallError } from '@ai-sdk/provider';\n\nexport function extractApiCallResponse(error: APICallError): unknown {\n  if (error.data !== undefined) {\n    return error.data;\n  }\n  if (error.responseBody != null) {\n    try {\n      return JSON.parse(error.responseBody);\n    } catch {\n      return error.responseBody;\n    }\n  }\n  return {};\n}\n","import { z } from 'zod/v4';\nimport {\n  lazyValidator,\n  safeValidateTypes,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport const GATEWAY_AUTH_METHOD_HEADER = 'ai-gateway-auth-method' as const;\n\nexport async function parseAuthMethod(\n  headers: Record<string, string | undefined>,\n) {\n  const result = await safeValidateTypes({\n    value: headers[GATEWAY_AUTH_METHOD_HEADER],\n    schema: gatewayAuthMethodSchema,\n  });\n\n  return result.success ? result.value : undefined;\n}\n\nconst gatewayAuthMethodSchema = lazyValidator(() =>\n  zodSchema(z.union([z.literal('api-key'), z.literal('oidc')])),\n);\n","import type { LanguageModelV2 } from '@ai-sdk/provider';\n\nexport const KNOWN_MODEL_TYPES = ['embedding', 'image', 'language'] as const;\n\nexport type KnownModelType = (typeof KNOWN_MODEL_TYPES)[number];\n\nexport interface GatewayLanguageModelEntry {\n  /**\n   * The model id used by the remote provider in model settings and for specifying the\n   * intended model for text generation.\n   */\n  id: string;\n\n  /**\n   * The display name of the model for presentation in user-facing contexts.\n   */\n  name: string;\n\n  /**\n   * Optional description of the model.\n   */\n  description?: string | null;\n\n  /**\n   * Optional pricing information for the model.\n   */\n  pricing?: {\n    /**\n     * Cost per input token in USD.\n     */\n    input: string;\n    /**\n     * Cost per output token in USD.\n     */\n    output: string;\n    /**\n     * Cost per cached input token in USD.\n     * Only present for providers/models that support prompt caching.\n     */\n    cachedInputTokens?: string;\n    /**\n     * Cost per input token to create/write cache entries in USD.\n     * Only present for providers/models that support prompt caching.\n     */\n    cacheCreationInputTokens?: string;\n  } | null;\n\n  /**\n   * Additional AI SDK language model specifications for the model.\n   */\n  specification: GatewayLanguageModelSpecification;\n\n  /**\n   * Optional field to differentiate between model types.\n   */\n  modelType?: KnownModelType | null;\n}\n\nexport type GatewayLanguageModelSpecification = Pick<\n  LanguageModelV2,\n  'specificationVersion' | 'provider' | 'modelId'\n>;\n","import {\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  getFromApi,\n  lazyValidator,\n  resolve,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport {\n  KNOWN_MODEL_TYPES,\n  type GatewayLanguageModelEntry,\n  type KnownModelType,\n} from './gateway-model-entry';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n  models: GatewayLanguageModelEntry[];\n}\n\nexport interface GatewayCreditsResponse {\n  /** The remaining gateway credit balance available for API usage */\n  balance: string;\n  /** The total amount of gateway credits that have been consumed */\n  totalUsed: string;\n}\n\nexport class GatewayFetchMetadata {\n  constructor(private readonly config: GatewayFetchMetadataConfig) {}\n\n  async getAvailableModels(): Promise<GatewayFetchMetadataResponse> {\n    try {\n      const { value } = await getFromApi({\n        url: `${this.config.baseURL}/config`,\n        headers: await resolve(this.config.headers()),\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayAvailableModelsResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        fetch: this.config.fetch,\n      });\n\n      return value;\n    } catch (error) {\n      throw await asGatewayError(error);\n    }\n  }\n\n  async getCredits(): Promise<GatewayCreditsResponse> {\n    try {\n      const baseUrl = new URL(this.config.baseURL);\n\n      const { value } = await getFromApi({\n        url: `${baseUrl.origin}/v1/credits`,\n        headers: await resolve(this.config.headers()),\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayCreditsResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        fetch: this.config.fetch,\n      });\n\n      return value;\n    } catch (error) {\n      throw await asGatewayError(error);\n    }\n  }\n}\n\nconst gatewayAvailableModelsResponseSchema = lazyValidator(() =>\n  zodSchema(\n    z.object({\n      models: z\n        .array(\n          z.object({\n            id: z.string(),\n            name: z.string(),\n            description: z.string().nullish(),\n            pricing: z\n              .object({\n                input: z.string(),\n                output: z.string(),\n                input_cache_read: z.string().nullish(),\n                input_cache_write: z.string().nullish(),\n              })\n              .transform(\n                ({ input, output, input_cache_read, input_cache_write }) => ({\n                  input,\n                  output,\n                  ...(input_cache_read\n                    ? { cachedInputTokens: input_cache_read }\n                    : {}),\n                  ...(input_cache_write\n                    ? { cacheCreationInputTokens: input_cache_write }\n                    : {}),\n                }),\n              )\n              .nullish(),\n            specification: z.object({\n              specificationVersion: z.literal('v2'),\n              provider: z.string(),\n              modelId: z.string(),\n            }),\n            modelType: z.string().nullish(),\n          }),\n        )\n        .transform(models =>\n          models.filter(\n            (m): m is typeof m & { modelType?: KnownModelType | null } =>\n              m.modelType == null ||\n              KNOWN_MODEL_TYPES.includes(m.modelType as KnownModelType),\n          ),\n        ),\n    }),\n  ),\n);\n\nconst gatewayCreditsResponseSchema = lazyValidator(() =>\n  zodSchema(\n    z\n      .object({\n        balance: z.string(),\n        total_used: z.string(),\n      })\n      .transform(({ balance, total_used }) => ({\n        balance,\n        totalUsed: total_used,\n      })),\n  ),\n);\n","import {\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  getFromApi,\n  lazySchema,\n  resolve,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\n\nexport interface GatewaySpendReportParams {\n  /** Start date in YYYY-MM-DD format (inclusive) */\n  startDate: string;\n  /** End date in YYYY-MM-DD format (inclusive) */\n  endDate: string;\n  /** Primary aggregation dimension. Defaults to 'day'. */\n  groupBy?: 'day' | 'user' | 'model' | 'tag' | 'provider' | 'credential_type';\n  /** Time granularity when groupBy is 'day'. */\n  datePart?: 'day' | 'hour';\n  /** Filter to a specific user's spend. */\n  userId?: string;\n  /** Filter to a specific model (e.g. 'anthropic/claude-sonnet-4.5'). */\n  model?: string;\n  /** Filter to a specific provider (e.g. 'anthropic'). */\n  provider?: string;\n  /** Filter to BYOK or system credentials. */\n  credentialType?: 'byok' | 'system';\n  /** Filter to requests with these tags. */\n  tags?: string[];\n}\n\nexport interface GatewaySpendReportRow {\n  /** Date string (present when groupBy is 'day') */\n  day?: string;\n  /** Hour timestamp (present when groupBy is 'day' and datePart is 'hour') */\n  hour?: string;\n  /** User identifier (present when groupBy is 'user') */\n  user?: string;\n  /** Model identifier (present when groupBy is 'model') */\n  model?: string;\n  /** Tag value (present when groupBy is 'tag') */\n  tag?: string;\n  /** Provider name (present when groupBy is 'provider') */\n  provider?: string;\n  /** Credential type (present when groupBy is 'credential_type') */\n  credentialType?: 'byok' | 'system';\n\n  /** Total cost in USD */\n  totalCost: number;\n  /** Market cost in USD */\n  marketCost?: number;\n  /** Number of input tokens */\n  inputTokens?: number;\n  /** Number of output tokens */\n  outputTokens?: number;\n  /** Number of cached input tokens */\n  cachedInputTokens?: number;\n  /** Number of cache creation input tokens */\n  cacheCreationInputTokens?: number;\n  /** Number of reasoning tokens */\n  reasoningTokens?: number;\n  /** Number of requests */\n  requestCount?: number;\n}\n\nexport interface GatewaySpendReportResponse {\n  results: GatewaySpendReportRow[];\n}\n\nexport class GatewaySpendReport {\n  constructor(private readonly config: GatewayConfig) {}\n\n  async getSpendReport(\n    params: GatewaySpendReportParams,\n  ): Promise<GatewaySpendReportResponse> {\n    try {\n      const baseUrl = new URL(this.config.baseURL);\n\n      const searchParams = new URLSearchParams();\n      searchParams.set('start_date', params.startDate);\n      searchParams.set('end_date', params.endDate);\n\n      if (params.groupBy) {\n        searchParams.set('group_by', params.groupBy);\n      }\n      if (params.datePart) {\n        searchParams.set('date_part', params.datePart);\n      }\n      if (params.userId) {\n        searchParams.set('user_id', params.userId);\n      }\n      if (params.model) {\n        searchParams.set('model', params.model);\n      }\n      if (params.provider) {\n        searchParams.set('provider', params.provider);\n      }\n      if (params.credentialType) {\n        searchParams.set('credential_type', params.credentialType);\n      }\n      if (params.tags && params.tags.length > 0) {\n        searchParams.set('tags', params.tags.join(','));\n      }\n\n      const { value } = await getFromApi({\n        url: `${baseUrl.origin}/v1/report?${searchParams.toString()}`,\n        headers: await resolve(this.config.headers()),\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewaySpendReportResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        fetch: this.config.fetch,\n      });\n\n      return value;\n    } catch (error) {\n      throw await asGatewayError(error);\n    }\n  }\n}\n\nconst gatewaySpendReportResponseSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      results: z.array(\n        z\n          .object({\n            day: z.string().optional(),\n            hour: z.string().optional(),\n            user: z.string().optional(),\n            model: z.string().optional(),\n            tag: z.string().optional(),\n            provider: z.string().optional(),\n            credential_type: z.enum(['byok', 'system']).optional(),\n            total_cost: z.number(),\n            market_cost: z.number().optional(),\n            input_tokens: z.number().optional(),\n            output_tokens: z.number().optional(),\n            cached_input_tokens: z.number().optional(),\n            cache_creation_input_tokens: z.number().optional(),\n            reasoning_tokens: z.number().optional(),\n            request_count: z.number().optional(),\n          })\n          .transform(\n            ({\n              credential_type,\n              total_cost,\n              market_cost,\n              input_tokens,\n              output_tokens,\n              cached_input_tokens,\n              cache_creation_input_tokens,\n              reasoning_tokens,\n              request_count,\n              ...rest\n            }) => ({\n              ...rest,\n              ...(credential_type !== undefined\n                ? { credentialType: credential_type }\n                : {}),\n              totalCost: total_cost,\n              ...(market_cost !== undefined ? { marketCost: market_cost } : {}),\n              ...(input_tokens !== undefined\n                ? { inputTokens: input_tokens }\n                : {}),\n              ...(output_tokens !== undefined\n                ? { outputTokens: output_tokens }\n                : {}),\n              ...(cached_input_tokens !== undefined\n                ? { cachedInputTokens: cached_input_tokens }\n                : {}),\n              ...(cache_creation_input_tokens !== undefined\n                ? { cacheCreationInputTokens: cache_creation_input_tokens }\n                : {}),\n              ...(reasoning_tokens !== undefined\n                ? { reasoningTokens: reasoning_tokens }\n                : {}),\n              ...(request_count !== undefined\n                ? { requestCount: request_count }\n                : {}),\n            }),\n          ),\n      ),\n    }),\n  ),\n);\n","import {\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  getFromApi,\n  lazySchema,\n  resolve,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\n\nexport interface GatewayGenerationInfoParams {\n  /** The generation ID to look up (format: gen_<ulid>) */\n  id: string;\n}\n\nexport interface GatewayGenerationInfo {\n  /** The generation ID */\n  id: string;\n  /** Total cost in USD */\n  totalCost: number;\n  /** Upstream inference cost in USD (BYOK only) */\n  upstreamInferenceCost: number;\n  /** Usage cost in USD (same as totalCost) */\n  usage: number;\n  /** ISO 8601 timestamp when the generation was created */\n  createdAt: string;\n  /** Model identifier */\n  model: string;\n  /** Whether BYOK credentials were used */\n  isByok: boolean;\n  /** Provider that served this generation */\n  providerName: string;\n  /** Whether streaming was used */\n  streamed: boolean;\n  /** Finish reason (e.g. 'stop') */\n  finishReason: string;\n  /** Time to first token in milliseconds */\n  latency: number;\n  /** Total generation time in milliseconds */\n  generationTime: number;\n  /** Number of prompt tokens */\n  promptTokens: number;\n  /** Number of completion tokens */\n  completionTokens: number;\n  /** Reasoning tokens used */\n  reasoningTokens: number;\n  /** Cached tokens used */\n  cachedTokens: number;\n  /** Cache creation input tokens */\n  cacheCreationTokens: number;\n  /** Billable web search calls */\n  billableWebSearchCalls: number;\n}\n\nexport class GatewayGenerationInfoFetcher {\n  constructor(private readonly config: GatewayConfig) {}\n\n  async getGenerationInfo(\n    params: GatewayGenerationInfoParams,\n  ): Promise<GatewayGenerationInfo> {\n    try {\n      const baseUrl = new URL(this.config.baseURL);\n\n      const { value } = await getFromApi({\n        url: `${baseUrl.origin}/v1/generation?id=${encodeURIComponent(params.id)}`,\n        headers: await resolve(this.config.headers()),\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayGenerationInfoResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        fetch: this.config.fetch,\n      });\n\n      return value;\n    } catch (error) {\n      throw await asGatewayError(error);\n    }\n  }\n}\n\nconst gatewayGenerationInfoResponseSchema = lazySchema(() =>\n  zodSchema(\n    z\n      .object({\n        data: z\n          .object({\n            id: z.string(),\n            total_cost: z.number(),\n            upstream_inference_cost: z.number(),\n            usage: z.number(),\n            created_at: z.string(),\n            model: z.string(),\n            is_byok: z.boolean(),\n            provider_name: z.string(),\n            streamed: z.boolean(),\n            finish_reason: z.string(),\n            latency: z.number(),\n            generation_time: z.number(),\n            native_tokens_prompt: z.number(),\n            native_tokens_completion: z.number(),\n            native_tokens_reasoning: z.number(),\n            native_tokens_cached: z.number(),\n            native_tokens_cache_creation: z.number(),\n            billable_web_search_calls: z.number(),\n          })\n          .transform(\n            ({\n              total_cost,\n              upstream_inference_cost,\n              created_at,\n              is_byok,\n              provider_name,\n              finish_reason,\n              generation_time,\n              native_tokens_prompt,\n              native_tokens_completion,\n              native_tokens_reasoning,\n              native_tokens_cached,\n              native_tokens_cache_creation,\n              billable_web_search_calls,\n              ...rest\n            }) => ({\n              ...rest,\n              totalCost: total_cost,\n              upstreamInferenceCost: upstream_inference_cost,\n              createdAt: created_at,\n              isByok: is_byok,\n              providerName: provider_name,\n              finishReason: finish_reason,\n              generationTime: generation_time,\n              promptTokens: native_tokens_prompt,\n              completionTokens: native_tokens_completion,\n              reasoningTokens: native_tokens_reasoning,\n              cachedTokens: native_tokens_cached,\n              cacheCreationTokens: native_tokens_cache_creation,\n              billableWebSearchCalls: billable_web_search_calls,\n            }),\n          ),\n      })\n      .transform(({ data }) => data),\n  ),\n);\n","import type {\n  LanguageModelV2,\n  LanguageModelV2CallOptions,\n  LanguageModelV2CallWarning,\n  LanguageModelV2FilePart,\n  LanguageModelV2StreamPart,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createEventSourceResponseHandler,\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  postJsonToApi,\n  resolve,\n  type ParseResult,\n  type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\ntype GatewayChatConfig = GatewayConfig & {\n  provider: string;\n  o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV2 {\n  readonly specificationVersion = 'v2';\n  readonly supportedUrls = { '*/*': [/.*/] };\n\n  constructor(\n    readonly modelId: GatewayModelId,\n    private readonly config: GatewayChatConfig,\n  ) {}\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  private async getArgs(options: Parameters<LanguageModelV2['doGenerate']>[0]) {\n    const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options;\n\n    return {\n      args: this.maybeEncodeFileParts(optionsWithoutSignal),\n      warnings: [],\n    };\n  }\n\n  async doGenerate(\n    options: Parameters<LanguageModelV2['doGenerate']>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV2['doGenerate']>>> {\n    const { args, warnings } = await this.getArgs(options);\n    const { abortSignal } = options;\n\n    const resolvedHeaders = await resolve(this.config.headers());\n\n    try {\n      const {\n        responseHeaders,\n        value: responseBody,\n        rawValue: rawResponse,\n      } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          options.headers,\n          this.getModelConfigHeaders(this.modelId, false),\n          await resolve(this.config.o11yHeaders),\n        ),\n        body: args,\n        successfulResponseHandler: createJsonResponseHandler(z.any()),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        ...responseBody,\n        request: { body: args },\n        response: { headers: responseHeaders, body: rawResponse },\n        warnings,\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  async doStream(\n    options: Parameters<LanguageModelV2['doStream']>[0],\n  ): Promise<Awaited<ReturnType<LanguageModelV2['doStream']>>> {\n    const { args, warnings } = await this.getArgs(options);\n    const { abortSignal } = options;\n\n    const resolvedHeaders = await resolve(this.config.headers());\n\n    try {\n      const { value: response, responseHeaders } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          options.headers,\n          this.getModelConfigHeaders(this.modelId, true),\n          await resolve(this.config.o11yHeaders),\n        ),\n        body: args,\n        successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        stream: response.pipeThrough(\n          new TransformStream<\n            ParseResult<LanguageModelV2StreamPart>,\n            LanguageModelV2StreamPart\n          >({\n            start(controller) {\n              if (warnings.length > 0) {\n                controller.enqueue({ type: 'stream-start', warnings });\n              }\n            },\n            transform(chunk, controller) {\n              if (chunk.success) {\n                const streamPart = chunk.value;\n\n                // Handle raw chunks: if this is a raw chunk from the gateway API,\n                // only emit it if includeRawChunks is true\n                if (streamPart.type === 'raw' && !options.includeRawChunks) {\n                  return; // Skip raw chunks if not requested\n                }\n\n                if (\n                  streamPart.type === 'response-metadata' &&\n                  streamPart.timestamp &&\n                  typeof streamPart.timestamp === 'string'\n                ) {\n                  streamPart.timestamp = new Date(streamPart.timestamp);\n                }\n\n                controller.enqueue(streamPart);\n              } else {\n                controller.error(\n                  (chunk as { success: false; error: unknown }).error,\n                );\n              }\n            },\n          }),\n        ),\n        request: { body: args },\n        response: { headers: responseHeaders },\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  private isFilePart(part: unknown) {\n    return (\n      part && typeof part === 'object' && 'type' in part && part.type === 'file'\n    );\n  }\n\n  /**\n   * Encodes file parts in the prompt to base64. Mutates the passed options\n   * instance directly to avoid copying the file data.\n   * @param options - The options to encode.\n   * @returns The options with the file parts encoded.\n   */\n  private maybeEncodeFileParts(options: LanguageModelV2CallOptions) {\n    for (const message of options.prompt) {\n      for (const part of message.content) {\n        if (this.isFilePart(part)) {\n          const filePart = part as LanguageModelV2FilePart;\n          // If the file part is a URL it will get cleanly converted to a string.\n          // If it's a binary file attachment we convert it to a data url.\n          // In either case, server-side we should only ever see URLs as strings.\n          if (filePart.data instanceof Uint8Array) {\n            const buffer = Uint8Array.from(filePart.data);\n            const base64Data = Buffer.from(buffer).toString('base64');\n            filePart.data = new URL(\n              `data:${filePart.mediaType || 'application/octet-stream'};base64,${base64Data}`,\n            );\n          }\n        }\n      }\n    }\n    return options;\n  }\n\n  private getUrl() {\n    return `${this.config.baseURL}/language-model`;\n  }\n\n  private getModelConfigHeaders(modelId: string, streaming: boolean) {\n    return {\n      'ai-language-model-specification-version': '2',\n      'ai-language-model-id': modelId,\n      'ai-language-model-streaming': String(streaming),\n    };\n  }\n}\n","import type {\n  EmbeddingModelV2,\n  SharedV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  lazyValidator,\n  postJsonToApi,\n  resolve,\n  zodSchema,\n  type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport type { GatewayConfig } from './gateway-config';\n\nexport class GatewayEmbeddingModel implements EmbeddingModelV2<string> {\n  readonly specificationVersion = 'v2';\n  readonly maxEmbeddingsPerCall = 2048;\n  readonly supportsParallelCalls = true;\n\n  constructor(\n    readonly modelId: string,\n    private readonly config: GatewayConfig & {\n      provider: string;\n      o11yHeaders: Resolvable<Record<string, string>>;\n    },\n  ) {}\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  async doEmbed({\n    values,\n    headers,\n    abortSignal,\n    providerOptions,\n  }: Parameters<EmbeddingModelV2<string>['doEmbed']>[0]): Promise<\n    Awaited<ReturnType<EmbeddingModelV2<string>['doEmbed']>>\n  > {\n    const resolvedHeaders = await resolve(this.config.headers());\n    try {\n      const {\n        responseHeaders,\n        value: responseBody,\n        rawValue,\n      } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          headers ?? {},\n          this.getModelConfigHeaders(),\n          await resolve(this.config.o11yHeaders),\n        ),\n        body: {\n          input: values.length === 1 ? values[0] : values,\n          ...(providerOptions ? { providerOptions } : {}),\n        },\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayEmbeddingResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        embeddings: responseBody.embeddings,\n        usage: responseBody.usage ?? undefined,\n        providerMetadata:\n          responseBody.providerMetadata as unknown as SharedV2ProviderMetadata,\n        response: { headers: responseHeaders, body: rawValue },\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  private getUrl() {\n    return `${this.config.baseURL}/embedding-model`;\n  }\n\n  private getModelConfigHeaders() {\n    return {\n      'ai-embedding-model-specification-version': '2',\n      'ai-model-id': this.modelId,\n    };\n  }\n}\n\nconst gatewayEmbeddingResponseSchema = lazyValidator(() =>\n  zodSchema(\n    z.object({\n      embeddings: z.array(z.array(z.number())),\n      usage: z.object({ tokens: z.number() }).nullish(),\n      providerMetadata: z\n        .record(z.string(), z.record(z.string(), z.unknown()))\n        .optional(),\n    }),\n  ),\n);\n","import type {\n  ImageModelV2,\n  ImageModelV2CallWarning,\n  ImageModelV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createJsonResponseHandler,\n  createJsonErrorResponseHandler,\n  postJsonToApi,\n  resolve,\n  type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayImageModel implements ImageModelV2 {\n  readonly specificationVersion = 'v2';\n  // Set a very large number to prevent client-side splitting of requests\n  readonly maxImagesPerCall = Number.MAX_SAFE_INTEGER;\n\n  constructor(\n    readonly modelId: string,\n    private readonly config: GatewayConfig & {\n      provider: string;\n      o11yHeaders: Resolvable<Record<string, string>>;\n    },\n  ) {}\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  async doGenerate({\n    prompt,\n    n,\n    size,\n    aspectRatio,\n    seed,\n    providerOptions,\n    headers,\n    abortSignal,\n  }: Parameters<ImageModelV2['doGenerate']>[0]) {\n    const resolvedHeaders = await resolve(this.config.headers());\n    try {\n      const {\n        responseHeaders,\n        value: responseBody,\n        rawValue,\n      } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          headers ?? {},\n          this.getModelConfigHeaders(),\n          await resolve(this.config.o11yHeaders),\n        ),\n        body: {\n          prompt,\n          n,\n          ...(size && { size }),\n          ...(aspectRatio && { aspectRatio }),\n          ...(seed && { seed }),\n          ...(providerOptions && { providerOptions }),\n        },\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayImageResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        images: responseBody.images, // Always base64 strings from server\n        warnings: responseBody.warnings ?? [],\n        providerMetadata:\n          responseBody.providerMetadata as ImageModelV2ProviderMetadata,\n        response: {\n          timestamp: new Date(),\n          modelId: this.modelId,\n          headers: responseHeaders,\n        },\n        ...(responseBody.usage != null && {\n          usage: {\n            inputTokens: responseBody.usage.inputTokens ?? undefined,\n            outputTokens: responseBody.usage.outputTokens ?? undefined,\n            totalTokens: responseBody.usage.totalTokens ?? undefined,\n          },\n        }),\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  private getUrl() {\n    return `${this.config.baseURL}/image-model`;\n  }\n\n  private getModelConfigHeaders() {\n    return {\n      'ai-image-model-specification-version': '2',\n      'ai-model-id': this.modelId,\n    };\n  }\n}\n\nconst providerMetadataEntrySchema = z\n  .object({\n    images: z.array(z.unknown()).optional(),\n  })\n  .catchall(z.unknown());\n\nconst gatewayImageUsageSchema = z.object({\n  inputTokens: z.number().nullish(),\n  outputTokens: z.number().nullish(),\n  totalTokens: z.number().nullish(),\n});\n\nconst gatewayImageResponseSchema = z.object({\n  images: z.array(z.string()), // Always base64 strings over the wire\n  warnings: z\n    .array(\n      z.object({\n        type: z.literal('other'),\n        message: z.string(),\n      }),\n    )\n    .optional(),\n  providerMetadata: z\n    .record(z.string(), providerMetadataEntrySchema)\n    .optional(),\n  usage: gatewayImageUsageSchema.optional(),\n});\n","import {\n  createProviderDefinedToolFactoryWithOutputSchema,\n  lazySchema,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface ParallelSearchSourcePolicy {\n  /**\n   * List of domains to include in search results.\n   * Example: ['wikipedia.org', 'nature.com']\n   */\n  includeDomains?: string[];\n\n  /**\n   * List of domains to exclude from search results.\n   * Example: ['reddit.com', 'twitter.com']\n   */\n  excludeDomains?: string[];\n\n  /**\n   * Only include results published after this date (ISO 8601 format).\n   * Example: '2024-01-01'\n   */\n  afterDate?: string;\n}\n\nexport interface ParallelSearchExcerpts {\n  /**\n   * Maximum characters per result.\n   */\n  maxCharsPerResult?: number;\n\n  /**\n   * Maximum total characters across all results.\n   */\n  maxCharsTotal?: number;\n}\n\nexport interface ParallelSearchFetchPolicy {\n  /**\n   * Maximum age in seconds for cached content.\n   * Set to 0 to always fetch fresh content.\n   */\n  maxAgeSeconds?: number;\n}\n\nexport interface ParallelSearchConfig {\n  /**\n   * Mode preset for different use cases:\n   * - \"one-shot\": Comprehensive results with longer excerpts for single-response answers (default)\n   * - \"agentic\": Concise, token-efficient results for multi-step agentic workflows\n   */\n  mode?: 'one-shot' | 'agentic';\n\n  /**\n   * Default maximum number of results to return (1-20).\n   * Defaults to 10 if not specified.\n   */\n  maxResults?: number;\n\n  /**\n   * Default source policy for controlling which domains to include/exclude.\n   */\n  sourcePolicy?: ParallelSearchSourcePolicy;\n\n  /**\n   * Default excerpt configuration for controlling result length.\n   */\n  excerpts?: ParallelSearchExcerpts;\n\n  /**\n   * Default fetch policy for controlling content freshness.\n   */\n  fetchPolicy?: ParallelSearchFetchPolicy;\n}\n\nexport interface ParallelSearchResult {\n  /** URL of the search result */\n  url: string;\n  /** Title of the search result */\n  title: string;\n  /** Extracted text excerpt/content from the page */\n  excerpt: string;\n  /** Publication date of the content (may be null) */\n  publishDate?: string | null;\n  /** Relevance score for the result */\n  relevanceScore?: number;\n}\n\nexport interface ParallelSearchResponse {\n  /** Unique identifier for this search request */\n  searchId: string;\n  /** Array of search results */\n  results: ParallelSearchResult[];\n}\n\nexport interface ParallelSearchError {\n  /** Error type */\n  error:\n    | 'api_error'\n    | 'rate_limit'\n    | 'timeout'\n    | 'invalid_input'\n    | 'configuration_error'\n    | 'unknown';\n  /** HTTP status code if applicable */\n  statusCode?: number;\n  /** Human-readable error message */\n  message: string;\n}\n\nexport interface ParallelSearchInput {\n  /**\n   * Natural-language description of the web research goal.\n   * Include source or freshness guidance and broader context from the task.\n   * Maximum 5000 characters.\n   */\n  objective: string;\n\n  /**\n   * Optional search queries to supplement the objective.\n   * Maximum 200 characters per query.\n   */\n  search_queries?: string[];\n\n  /**\n   * Mode preset for different use cases:\n   * - \"one-shot\": Comprehensive results with longer excerpts\n   * - \"agentic\": Concise, token-efficient results for multi-step workflows\n   */\n  mode?: 'one-shot' | 'agentic';\n\n  /**\n   * Maximum number of results to return (1-20).\n   * Defaults to 10 if not specified.\n   */\n  max_results?: number;\n\n  /**\n   * Source policy for controlling which domains to include/exclude.\n   */\n  source_policy?: {\n    include_domains?: string[];\n    exclude_domains?: string[];\n    after_date?: string;\n  };\n\n  /**\n   * Excerpt configuration for controlling result length.\n   */\n  excerpts?: {\n    max_chars_per_result?: number;\n    max_chars_total?: number;\n  };\n\n  /**\n   * Fetch policy for controlling content freshness.\n   */\n  fetch_policy?: {\n    max_age_seconds?: number;\n  };\n}\n\nexport type ParallelSearchOutput = ParallelSearchResponse | ParallelSearchError;\n\nconst parallelSearchInputSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      objective: z\n        .string()\n        .describe(\n          'Natural-language description of the web research goal, including source or freshness guidance and broader context from the task. Maximum 5000 characters.',\n        ),\n\n      search_queries: z\n        .array(z.string())\n        .optional()\n        .describe(\n          'Optional search queries to supplement the objective. Maximum 200 characters per query.',\n        ),\n\n      mode: z\n        .enum(['one-shot', 'agentic'])\n        .optional()\n        .describe(\n          'Mode preset: \"one-shot\" for comprehensive results with longer excerpts (default), \"agentic\" for concise, token-efficient results for multi-step workflows.',\n        ),\n\n      max_results: z\n        .number()\n        .optional()\n        .describe(\n          'Maximum number of results to return (1-20). Defaults to 10 if not specified.',\n        ),\n\n      source_policy: z\n        .object({\n          include_domains: z\n            .array(z.string())\n            .optional()\n            .describe('List of domains to include in search results.'),\n          exclude_domains: z\n            .array(z.string())\n            .optional()\n            .describe('List of domains to exclude from search results.'),\n          after_date: z\n            .string()\n            .optional()\n            .describe(\n              'Only include results published after this date (ISO 8601 format).',\n            ),\n        })\n        .optional()\n        .describe(\n          'Source policy for controlling which domains to include/exclude and freshness.',\n        ),\n\n      excerpts: z\n        .object({\n          max_chars_per_result: z\n            .number()\n            .optional()\n            .describe('Maximum characters per result.'),\n          max_chars_total: z\n            .number()\n            .optional()\n            .describe('Maximum total characters across all results.'),\n        })\n        .optional()\n        .describe('Excerpt configuration for controlling result length.'),\n\n      fetch_policy: z\n        .object({\n          max_age_seconds: z\n            .number()\n            .optional()\n            .describe(\n              'Maximum age in seconds for cached content. Set to 0 to always fetch fresh content.',\n            ),\n        })\n        .optional()\n        .describe('Fetch policy for controlling content freshness.'),\n    }),\n  ),\n);\n\nconst parallelSearchOutputSchema = lazySchema(() =>\n  zodSchema(\n    z.union([\n      // Success response\n      z.object({\n        searchId: z.string(),\n        results: z.array(\n          z.object({\n            url: z.string(),\n            title: z.string(),\n            excerpt: z.string(),\n            publishDate: z.string().nullable().optional(),\n            relevanceScore: z.number().optional(),\n          }),\n        ),\n      }),\n      // Error response\n      z.object({\n        error: z.enum([\n          'api_error',\n          'rate_limit',\n          'timeout',\n          'invalid_input',\n          'configuration_error',\n          'unknown',\n        ]),\n        statusCode: z.number().optional(),\n        message: z.string(),\n      }),\n    ]),\n  ),\n);\n\nexport const parallelSearchToolFactory =\n  createProviderDefinedToolFactoryWithOutputSchema<\n    ParallelSearchInput,\n    ParallelSearchOutput,\n    ParallelSearchConfig\n  >({\n    id: 'gateway.parallel_search',\n    name: 'parallel_search',\n    inputSchema: parallelSearchInputSchema,\n    outputSchema: parallelSearchOutputSchema,\n  });\n\nexport const parallelSearch = (\n  config: ParallelSearchConfig = {},\n): ReturnType<typeof parallelSearchToolFactory> =>\n  parallelSearchToolFactory(config);\n","import {\n  createProviderDefinedToolFactoryWithOutputSchema,\n  lazySchema,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface PerplexitySearchConfig {\n  /**\n   * Default maximum number of search results to return (1-20, default: 10).\n   */\n  maxResults?: number;\n\n  /**\n   * Default maximum tokens to extract per search result page (256-2048, default: 2048).\n   */\n  maxTokensPerPage?: number;\n\n  /**\n   * Default maximum total tokens across all search results (default: 25000, max: 1000000).\n   */\n  maxTokens?: number;\n\n  /**\n   * Default two-letter ISO 3166-1 alpha-2 country code for regional search results.\n   * Examples: 'US', 'GB', 'FR'\n   */\n  country?: string;\n\n  /**\n   * Default list of domains to include or exclude from search results (max 20).\n   * To include: ['nature.com', 'science.org']\n   * To exclude: ['-example.com', '-spam.net']\n   */\n  searchDomainFilter?: string[];\n\n  /**\n   * Default list of ISO 639-1 language codes to filter results (max 10, lowercase).\n   * Examples: ['en', 'fr', 'de']\n   */\n  searchLanguageFilter?: string[];\n\n  /**\n   * Default recency filter for results.\n   * Cannot be combined with searchAfterDate/searchBeforeDate at runtime.\n   */\n  searchRecencyFilter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport interface PerplexitySearchResult {\n  /** Title of the search result */\n  title: string;\n  /** URL of the search result */\n  url: string;\n  /** Text snippet/preview of the content */\n  snippet: string;\n  /** Publication date of the content */\n  date?: string;\n  /** Last updated date of the content */\n  lastUpdated?: string;\n}\n\nexport interface PerplexitySearchResponse {\n  /** Array of search results */\n  results: PerplexitySearchResult[];\n  /** Unique identifier for this search request */\n  id: string;\n}\n\nexport interface PerplexitySearchError {\n  /** Error type */\n  error: 'api_error' | 'rate_limit' | 'timeout' | 'invalid_input' | 'unknown';\n  /** HTTP status code if applicable */\n  statusCode?: number;\n  /** Human-readable error message */\n  message: string;\n}\n\nexport interface PerplexitySearchInput {\n  /**\n   * Search query (string) or multiple queries (array of up to 5 strings).\n   * Multi-query searches return combined results from all queries.\n   */\n  query: string | string[];\n\n  /**\n   * Maximum number of search results to return (1-20, default: 10).\n   */\n  max_results?: number;\n\n  /**\n   * Maximum number of tokens to extract per search result page (256-2048, default: 2048).\n   */\n  max_tokens_per_page?: number;\n\n  /**\n   * Maximum total tokens across all search results (default: 25000, max: 1000000).\n   */\n  max_tokens?: number;\n\n  /**\n   * Two-letter ISO 3166-1 alpha-2 country code for regional search results.\n   * Examples: 'US', 'GB', 'FR'\n   */\n  country?: string;\n\n  /**\n   * List of domains to include or exclude from search results (max 20).\n   * To include: ['nature.com', 'science.org']\n   * To exclude: ['-example.com', '-spam.net']\n   */\n  search_domain_filter?: string[];\n\n  /**\n   * List of ISO 639-1 language codes to filter results (max 10, lowercase).\n   * Examples: ['en', 'fr', 'de']\n   */\n  search_language_filter?: string[];\n\n  /**\n   * Include only results published after this date.\n   * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n   * Cannot be used with search_recency_filter.\n   */\n  search_after_date?: string;\n\n  /**\n   * Include only results published before this date.\n   * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n   * Cannot be used with search_recency_filter.\n   */\n  search_before_date?: string;\n\n  /**\n   * Include only results last updated after this date.\n   * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n   * Cannot be used with search_recency_filter.\n   */\n  last_updated_after_filter?: string;\n\n  /**\n   * Include only results last updated before this date.\n   * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n   * Cannot be used with search_recency_filter.\n   */\n  last_updated_before_filter?: string;\n\n  /**\n   * Filter results by relative time period.\n   * Cannot be used with search_after_date or search_before_date.\n   */\n  search_recency_filter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport type PerplexitySearchOutput =\n  | PerplexitySearchResponse\n  | PerplexitySearchError;\n\nconst perplexitySearchInputSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      query: z\n        .union([z.string(), z.array(z.string())])\n        .describe(\n          'Search query (string) or multiple queries (array of up to 5 strings). Multi-query searches return combined results from all queries.',\n        ),\n\n      max_results: z\n        .number()\n        .optional()\n        .describe(\n          'Maximum number of search results to return (1-20, default: 10)',\n        ),\n\n      max_tokens_per_page: z\n        .number()\n        .optional()\n        .describe(\n          'Maximum number of tokens to extract per search result page (256-2048, default: 2048)',\n        ),\n\n      max_tokens: z\n        .number()\n        .optional()\n        .describe(\n          'Maximum total tokens across all search results (default: 25000, max: 1000000)',\n        ),\n\n      country: z\n        .string()\n        .optional()\n        .describe(\n          \"Two-letter ISO 3166-1 alpha-2 country code for regional search results (e.g., 'US', 'GB', 'FR')\",\n        ),\n\n      search_domain_filter: z\n        .array(z.string())\n        .optional()\n        .describe(\n          \"List of domains to include or exclude from search results (max 20). To include: ['nature.com', 'science.org']. To exclude: ['-example.com', '-spam.net']\",\n        ),\n\n      search_language_filter: z\n        .array(z.string())\n        .optional()\n        .describe(\n          \"List of ISO 639-1 language codes to filter results (max 10, lowercase). Examples: ['en', 'fr', 'de']\",\n        ),\n\n      search_after_date: z\n        .string()\n        .optional()\n        .describe(\n          \"Include only results published after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n        ),\n\n      search_before_date: z\n        .string()\n        .optional()\n        .describe(\n          \"Include only results published before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n        ),\n\n      last_updated_after_filter: z\n        .string()\n        .optional()\n        .describe(\n          \"Include only results last updated after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n        ),\n\n      last_updated_before_filter: z\n        .string()\n        .optional()\n        .describe(\n          \"Include only results last updated before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n        ),\n\n      search_recency_filter: z\n        .enum(['day', 'week', 'month', 'year'])\n        .optional()\n        .describe(\n          'Filter results by relative time period. Cannot be used with search_after_date or search_before_date.',\n        ),\n    }),\n  ),\n);\n\nconst perplexitySearchOutputSchema = lazySchema(() =>\n  zodSchema(\n    z.union([\n      // Success response\n      z.object({\n        results: z.array(\n          z.object({\n            title: z.string(),\n            url: z.string(),\n            snippet: z.string(),\n            date: z.string().optional(),\n            lastUpdated: z.string().optional(),\n          }),\n        ),\n        id: z.string(),\n      }),\n      // Error response\n      z.object({\n        error: z.enum([\n          'api_error',\n          'rate_limit',\n          'timeout',\n          'invalid_input',\n          'unknown',\n        ]),\n        statusCode: z.number().optional(),\n        message: z.string(),\n      }),\n    ]),\n  ),\n);\n\nexport const perplexitySearchToolFactory =\n  createProviderDefinedToolFactoryWithOutputSchema<\n    PerplexitySearchInput,\n    PerplexitySearchOutput,\n    PerplexitySearchConfig\n  >({\n    id: 'gateway.perplexity_search',\n    name: 'perplexity_search',\n    inputSchema: perplexitySearchInputSchema,\n    outputSchema: perplexitySearchOutputSchema,\n  });\n\nexport const perplexitySearch = (\n  config: PerplexitySearchConfig = {},\n): ReturnType<typeof perplexitySearchToolFactory> =>\n  perplexitySearchToolFactory(config);\n","import { parallelSearch } from './tool/parallel-search';\nimport { perplexitySearch } from './tool/perplexity-search';\n\n/**\n * Gateway-specific provider-defined tools.\n */\nexport const gatewayTools = {\n  /**\n   * Search the web using Parallel AI's Search API for LLM-optimized excerpts.\n   *\n   * Takes a natural language objective and returns relevant excerpts,\n   * replacing multiple keyword searches with a single call for broad\n   * or complex queries. Supports different search types for depth vs\n   * breadth tradeoffs.\n   */\n  parallelSearch,\n\n  /**\n   * Search the web using Perplexity's Search API for real-time information,\n   * news, research papers, and articles.\n   *\n   * Provides ranked search results with advanced filtering options including\n   * domain, language, date range, and recency filters.\n   */\n  perplexitySearch,\n};\n","import { getContext } from '@vercel/oidc';\nexport { getVercelOidcToken } from '@vercel/oidc';\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n  return getContext().headers?.['x-vercel-id'];\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n  typeof __PACKAGE_VERSION__ !== 'undefined'\n    ? __PACKAGE_VERSION__\n    : '0.0.0-test';\n","import {\n  loadOptionalSetting,\n  withoutTrailingSlash,\n  type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError, GatewayAuthenticationError } from './errors';\nimport {\n  GATEWAY_AUTH_METHOD_HEADER,\n  parseAuthMethod,\n} from './errors/parse-auth-method';\nimport {\n  GatewayFetchMetadata,\n  type GatewayFetchMetadataResponse,\n  type GatewayCreditsResponse,\n} from './gateway-fetch-metadata';\nimport {\n  GatewaySpendReport,\n  type GatewaySpendReportParams,\n  type GatewaySpendReportResponse,\n} from './gateway-spend-report';\nimport {\n  GatewayGenerationInfoFetcher,\n  type GatewayGenerationInfoParams,\n  type GatewayGenerationInfo,\n} from './gateway-generation-info';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport { GatewayEmbeddingModel } from './gateway-embedding-model';\nimport { GatewayImageModel } from './gateway-image-model';\nimport type { GatewayEmbeddingModelId } from './gateway-embedding-model-settings';\nimport type { GatewayImageModelId } from './gateway-image-model-settings';\nimport { gatewayTools } from './gateway-tools';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport type {\n  LanguageModelV2,\n  EmbeddingModelV2,\n  ImageModelV2,\n  ProviderV2,\n} from '@ai-sdk/provider';\nimport { withUserAgentSuffix } from '@ai-sdk/provider-utils';\nimport { VERSION } from './version';\n\nexport interface GatewayProvider extends ProviderV2 {\n  (modelId: GatewayModelId): LanguageModelV2;\n\n  /**\nCreates a model for text generation.\n*/\n  languageModel(modelId: GatewayModelId): LanguageModelV2;\n\n  /**\nReturns available providers and models for use with the remote provider.\n */\n  getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n\n  /**\nReturns credit information for the authenticated user.\n */\n  getCredits(): Promise<GatewayCreditsResponse>;\n\n  /**\n   * Returns a spend report with cost, token, and request count data,\n   * aggregated by the specified dimension.\n   */\n  getSpendReport(\n    params: GatewaySpendReportParams,\n  ): Promise<GatewaySpendReportResponse>;\n\n  /**\n   * Returns detailed information about a specific generation by its ID,\n   * including cost, token usage, latency, and provider details.\n   */\n  getGenerationInfo(\n    params: GatewayGenerationInfoParams,\n  ): Promise<GatewayGenerationInfo>;\n\n  /**\nCreates a model for generating text embeddings.\n*/\n  textEmbeddingModel(\n    modelId: GatewayEmbeddingModelId,\n  ): EmbeddingModelV2<string>;\n\n  /**\nCreates a model for generating images.\n*/\n  imageModel(modelId: GatewayImageModelId): ImageModelV2;\n\n  /**\nGateway-specific tools executed server-side.\n*/\n  tools: typeof gatewayTools;\n}\n\nexport interface GatewayProviderSettings {\n  /**\nThe base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n   */\n  baseURL?: string;\n\n  /**\nAPI key that is being sent using the `Authorization` header.\n   */\n  apiKey?: string;\n\n  /**\nCustom headers to include in the requests.\n     */\n  headers?: Record<string, string>;\n\n  /**\nCustom fetch implementation. You can use it as a middleware to intercept requests,\nor to provide a custom fetch implementation for e.g. testing.\n    */\n  fetch?: FetchFunction;\n\n  /**\nHow frequently to refresh the metadata cache in milliseconds.\n   */\n  metadataCacheRefreshMillis?: number;\n\n  /**\n   * @internal For testing purposes only\n   */\n  _internal?: {\n    currentDate?: () => Date;\n  };\n}\n\nconst AI_GATEWAY_PROTOCOL_VERSION = '0.0.1';\n\n/**\nCreate a remote provider instance.\n */\nexport function createGatewayProvider(\n  options: GatewayProviderSettings = {},\n): GatewayProvider {\n  let pendingMetadata: Promise<GatewayFetchMetadataResponse> | null = null;\n  let metadataCache: GatewayFetchMetadataResponse | null = null;\n  const cacheRefreshMillis =\n    options.metadataCacheRefreshMillis ?? 1000 * 60 * 5;\n  let lastFetchTime = 0;\n\n  const baseURL =\n    withoutTrailingSlash(options.baseURL) ??\n    'https://ai-gateway.vercel.sh/v1/ai';\n\n  const getHeaders = async () => {\n    const auth = await getGatewayAuthToken(options);\n    if (auth) {\n      return withUserAgentSuffix(\n        {\n          Authorization: `Bearer ${auth.token}`,\n          'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n          [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,\n          ...options.headers,\n        },\n        `ai-sdk/gateway/${VERSION}`,\n      );\n    }\n\n    throw GatewayAuthenticationError.createContextualError({\n      apiKeyProvided: false,\n      oidcTokenProvided: false,\n      statusCode: 401,\n    });\n  };\n\n  const createO11yHeaders = () => {\n    const deploymentId = loadOptionalSetting({\n      settingValue: undefined,\n      environmentVariableName: 'VERCEL_DEPLOYMENT_ID',\n    });\n    const environment = loadOptionalSetting({\n      settingValue: undefined,\n      environmentVariableName: 'VERCEL_ENV',\n    });\n    const region = loadOptionalSetting({\n      settingValue: undefined,\n      environmentVariableName: 'VERCEL_REGION',\n    });\n    const projectId = loadOptionalSetting({\n      settingValue: undefined,\n      environmentVariableName: 'VERCEL_PROJECT_ID',\n    });\n\n    return async () => {\n      const requestId = await getVercelRequestId();\n      return {\n        ...(deploymentId && { 'ai-o11y-deployment-id': deploymentId }),\n        ...(environment && { 'ai-o11y-environment': environment }),\n        ...(region && { 'ai-o11y-region': region }),\n        ...(requestId && { 'ai-o11y-request-id': requestId }),\n        ...(projectId && { 'ai-o11y-project-id': projectId }),\n      };\n    };\n  };\n\n  const createLanguageModel = (modelId: GatewayModelId) => {\n    return new GatewayLanguageModel(modelId, {\n      provider: 'gateway',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n      o11yHeaders: createO11yHeaders(),\n    });\n  };\n\n  const getAvailableModels = async () => {\n    const now = options._internal?.currentDate?.().getTime() ?? Date.now();\n    if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {\n      lastFetchTime = now;\n\n      pendingMetadata = new GatewayFetchMetadata({\n        baseURL,\n        headers: getHeaders,\n        fetch: options.fetch,\n      })\n        .getAvailableModels()\n        .then(metadata => {\n          metadataCache = metadata;\n          return metadata;\n        })\n        .catch(async (error: unknown) => {\n          throw await asGatewayError(\n            error,\n            await parseAuthMethod(await getHeaders()),\n          );\n        });\n    }\n\n    return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n  };\n\n  const getCredits = async () => {\n    return new GatewayFetchMetadata({\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n    })\n      .getCredits()\n      .catch(async (error: unknown) => {\n        throw await asGatewayError(\n          error,\n          await parseAuthMethod(await getHeaders()),\n        );\n      });\n  };\n\n  const getSpendReport = async (params: GatewaySpendReportParams) => {\n    return new GatewaySpendReport({\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n    })\n      .getSpendReport(params)\n      .catch(async (error: unknown) => {\n        throw await asGatewayError(\n          error,\n          await parseAuthMethod(await getHeaders()),\n        );\n      });\n  };\n\n  const getGenerationInfo = async (params: GatewayGenerationInfoParams) => {\n    return new GatewayGenerationInfoFetcher({\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n    })\n      .getGenerationInfo(params)\n      .catch(async (error: unknown) => {\n        throw await asGatewayError(\n          error,\n          await parseAuthMethod(await getHeaders()),\n        );\n      });\n  };\n\n  const provider = function (modelId: GatewayModelId) {\n    if (new.target) {\n      throw new Error(\n        'The Gateway Provider model function cannot be called with the new keyword.',\n      );\n    }\n\n    return createLanguageModel(modelId);\n  };\n\n  provider.getAvailableModels = getAvailableModels;\n  provider.getCredits = getCredits;\n  provider.getSpendReport = getSpendReport;\n  provider.getGenerationInfo = getGenerationInfo;\n  provider.imageModel = (modelId: GatewayImageModelId) => {\n    return new GatewayImageModel(modelId, {\n      provider: 'gateway',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n      o11yHeaders: createO11yHeaders(),\n    });\n  };\n  provider.languageModel = createLanguageModel;\n  provider.textEmbeddingModel = (modelId: GatewayEmbeddingModelId) => {\n    return new GatewayEmbeddingModel(modelId, {\n      provider: 'gateway',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n      o11yHeaders: createO11yHeaders(),\n    });\n  };\n  provider.tools = gatewayTools;\n\n  return provider;\n}\n\nexport const gateway = createGatewayProvider();\n\nexport async function getGatewayAuthToken(\n  options: GatewayProviderSettings,\n): Promise<{\n  token: string;\n  authMethod: 'api-key' | 'oidc';\n} | null> {\n  const apiKey = loadOptionalSetting({\n    settingValue: options.apiKey,\n    environmentVariableName: 'AI_GATEWAY_API_KEY',\n  });\n\n  if (apiKey) {\n    return {\n      token: apiKey,\n      authMethod: 'api-key',\n    };\n  }\n\n  try {\n    const oidcToken = await getVercelOidcToken();\n    return {\n      token: oidcToken,\n      authMethod: 'oidc',\n    };\n  } catch {\n    return null;\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidArgumentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidArgumentError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly parameter: string;\n  readonly value: unknown;\n\n  constructor({\n    parameter,\n    value,\n    message,\n  }: {\n    parameter: string;\n    value: unknown;\n    message: string;\n  }) {\n    super({\n      name,\n      message: `Invalid argument for parameter ${parameter}: ${message}`,\n    });\n\n    this.parameter = parameter;\n    this.value = value;\n  }\n\n  static isInstance(error: unknown): error is InvalidArgumentError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { FinishReason } from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../types/usage';\n\nconst name = 'AI_NoObjectGeneratedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\nThrown when no object could be generated. This can have several causes:\n\n- The model failed to generate a response.\n- The model generated a response that could not be parsed.\n- The model generated a response that could not be validated against the schema.\n\nThe error contains the following properties:\n\n- `text`: The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n */\nexport class NoObjectGeneratedError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  /**\n  The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n   */\n  readonly text: string | undefined;\n\n  /**\n  The response metadata.\n   */\n  readonly response: LanguageModelResponseMetadata | undefined;\n\n  /**\n  The usage of the model.\n   */\n  readonly usage: LanguageModelUsage | undefined;\n\n  /**\n  Reason why the model finished generating a response.\n   */\n  readonly finishReason: FinishReason | undefined;\n\n  constructor({\n    message = 'No object generated.',\n    cause,\n    text,\n    response,\n    usage,\n    finishReason,\n  }: {\n    message?: string;\n    cause?: Error;\n    text?: string;\n    response: LanguageModelResponseMetadata;\n    usage: LanguageModelUsage;\n    finishReason: FinishReason;\n  }) {\n    super({ name, message, cause });\n\n    this.text = text;\n    this.response = response;\n    this.usage = usage;\n    this.finishReason = finishReason;\n  }\n\n  static isInstance(error: unknown): error is NoObjectGeneratedError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\n/**\nError that is thrown when a model with an unsupported version is used.\n */\nexport class UnsupportedModelVersionError extends AISDKError {\n  readonly version: string;\n  readonly provider: string;\n  readonly modelId: string;\n\n  constructor(options: { version: string; provider: string; modelId: string }) {\n    super({\n      name: 'AI_UnsupportedModelVersionError',\n      message:\n        `Unsupported model version ${options.version} for provider \"${options.provider}\" and model \"${options.modelId}\". ` +\n        `AI SDK 5 only supports models that implement specification version \"v2\".`,\n    });\n\n    this.version = options.version;\n    this.provider = options.provider;\n    this.modelId = options.modelId;\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_RetryError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport type RetryErrorReason =\n  | 'maxRetriesExceeded'\n  | 'errorNotRetryable'\n  | 'abort';\n\nexport class RetryError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  // note: property order determines debugging output\n  readonly reason: RetryErrorReason;\n  readonly lastError: unknown;\n  readonly errors: Array<unknown>;\n\n  constructor({\n    message,\n    reason,\n    errors,\n  }: {\n    message: string;\n    reason: RetryErrorReason;\n    errors: Array<unknown>;\n  }) {\n    super({ name, message });\n\n    this.reason = reason;\n    this.errors = errors;\n\n    // separate our last error to make debugging via log easier:\n    this.lastError = errors[errors.length - 1];\n  }\n\n  static isInstance(error: unknown): error is RetryError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { gateway } from '@ai-sdk/gateway';\nimport {\n  EmbeddingModelV2,\n  ImageModelV2,\n  LanguageModelV2,\n  ProviderV2,\n} from '@ai-sdk/provider';\nimport { UnsupportedModelVersionError } from '../error';\nimport { EmbeddingModel } from '../types/embedding-model';\nimport { LanguageModel } from '../types/language-model';\nimport { ImageModel } from '../types/image-model';\n\nexport function resolveLanguageModel(model: LanguageModel): LanguageModelV2 {\n  if (typeof model !== 'string') {\n    if (model.specificationVersion !== 'v2') {\n      throw new UnsupportedModelVersionError({\n        version: model.specificationVersion,\n        provider: model.provider,\n        modelId: model.modelId,\n      });\n    }\n\n    return model;\n  }\n\n  return getGlobalProvider().languageModel(model);\n}\n\nexport function resolveEmbeddingModel<VALUE = string>(\n  model: EmbeddingModel<VALUE>,\n): EmbeddingModelV2<VALUE> {\n  if (typeof model !== 'string') {\n    if (model.specificationVersion !== 'v2') {\n      throw new UnsupportedModelVersionError({\n        version: model.specificationVersion,\n        provider: model.provider,\n        modelId: model.modelId,\n      });\n    }\n\n    return model;\n  }\n\n  // TODO AI SDK 6: figure out how to cleanly support different generic types\n  return getGlobalProvider().textEmbeddingModel(\n    model,\n  ) as EmbeddingModelV2<VALUE>;\n}\n\nexport function resolveImageModel(model: ImageModel): ImageModelV2 {\n  if (typeof model !== 'string') {\n    if (model.specificationVersion !== 'v2') {\n      throw new UnsupportedModelVersionError({\n        version: model.specificationVersion,\n        provider: model.provider,\n        modelId: model.modelId,\n      });\n    }\n\n    return model;\n  }\n\n  return getGlobalProvider().imageModel(model);\n}\n\nfunction getGlobalProvider(): ProviderV2 {\n  return globalThis.AI_SDK_DEFAULT_PROVIDER ?? gateway;\n}\n","declare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n  typeof __PACKAGE_VERSION__ !== 'undefined'\n    ? __PACKAGE_VERSION__\n    : '0.0.0-test';\n","import { AISDKError, LanguageModelV2DataContent } from '@ai-sdk/provider';\nimport {\n  convertBase64ToUint8Array,\n  convertUint8ArrayToBase64,\n  DataContent,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { InvalidDataContentError } from './invalid-data-content-error';\nimport { splitDataUrl } from './split-data-url';\n\n/**\n@internal\n */\nexport const dataContentSchema: z.ZodType<DataContent> = z.union([\n  z.string(),\n  z.instanceof(Uint8Array),\n  z.instanceof(ArrayBuffer),\n  z.custom<Buffer>(\n    // Buffer might not be available in some environments such as CloudFlare:\n    (value: unknown): value is Buffer =>\n      globalThis.Buffer?.isBuffer(value) ?? false,\n    { message: 'Must be a Buffer' },\n  ),\n]);\n\nexport function convertToLanguageModelV2DataContent(\n  content: DataContent | URL,\n): {\n  data: LanguageModelV2DataContent;\n  mediaType: string | undefined;\n} {\n  // Buffer & Uint8Array:\n  if (content instanceof Uint8Array) {\n    return { data: content, mediaType: undefined };\n  }\n\n  // ArrayBuffer needs conversion to Uint8Array (lightweight):\n  if (content instanceof ArrayBuffer) {\n    return { data: new Uint8Array(content), mediaType: undefined };\n  }\n\n  // Attempt to create a URL from the data. If it fails, we can assume the data\n  // is not a URL and likely some other sort of data.\n  if (typeof content === 'string') {\n    try {\n      content = new URL(content);\n    } catch (error) {\n      // ignored\n    }\n  }\n\n  // Extract data from data URL:\n  if (content instanceof URL && content.protocol === 'data:') {\n    const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(\n      content.toString(),\n    );\n\n    if (dataUrlMediaType == null || base64Content == null) {\n      throw new AISDKError({\n        name: 'InvalidDataContentError',\n        message: `Invalid data URL format in content ${content.toString()}`,\n      });\n    }\n\n    return { data: base64Content, mediaType: dataUrlMediaType };\n  }\n\n  return { data: content, mediaType: undefined };\n}\n\n/**\nConverts data content to a base64-encoded string.\n\n@param content - Data content to convert.\n@returns Base64-encoded string.\n*/\nexport function convertDataContentToBase64String(content: DataContent): string {\n  if (typeof content === 'string') {\n    return content;\n  }\n\n  if (content instanceof ArrayBuffer) {\n    return convertUint8ArrayToBase64(new Uint8Array(content));\n  }\n\n  return convertUint8ArrayToBase64(content);\n}\n\n/**\nConverts data content to a Uint8Array.\n\n@param content - Data content to convert.\n@returns Uint8Array.\n */\nexport function convertDataContentToUint8Array(\n  content: DataContent,\n): Uint8Array {\n  if (content instanceof Uint8Array) {\n    return content;\n  }\n\n  if (typeof content === 'string') {\n    try {\n      return convertBase64ToUint8Array(content);\n    } catch (error) {\n      throw new InvalidDataContentError({\n        message:\n          'Invalid data content. Content string is not a base64-encoded media.',\n        content,\n        cause: error,\n      });\n    }\n  }\n\n  if (content instanceof ArrayBuffer) {\n    return new Uint8Array(content);\n  }\n\n  throw new InvalidDataContentError({ content });\n}\n\n/**\n * Converts a Uint8Array to a string of text.\n *\n * @param uint8Array - The Uint8Array to convert.\n * @returns The converted string.\n */\nexport function convertUint8ArrayToText(uint8Array: Uint8Array): string {\n  try {\n    return new TextDecoder().decode(uint8Array);\n  } catch (error) {\n    throw new Error('Error decoding Uint8Array to text');\n  }\n}\n","import { JSONValue as OriginalJSONValue } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\n\nexport const jsonValueSchema: z.ZodType<JSONValue> = z.lazy(() =>\n  z.union([\n    z.null(),\n    z.string(),\n    z.number(),\n    z.boolean(),\n    z.record(z.string(), jsonValueSchema),\n    z.array(jsonValueSchema),\n  ]),\n);\n\nexport type JSONValue = OriginalJSONValue;\n","import { SharedV2ProviderMetadata } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from './json-value';\n\n/**\nAdditional provider-specific metadata that is returned from the provider.\n\nThis is needed to enable provider-specific functionality that can be\nfully encapsulated in the provider.\n */\nexport type ProviderMetadata = SharedV2ProviderMetadata;\n\nexport const providerMetadataSchema: z.ZodType<ProviderMetadata> = z.record(\n  z.string(),\n  z.record(z.string(), jsonValueSchema),\n);\n","import { LanguageModelV2ToolResultOutput } from '@ai-sdk/provider';\nimport {\n  FilePart,\n  ImagePart,\n  ProviderOptions,\n  ReasoningPart,\n  TextPart,\n  ToolResultPart,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from '../types/json-value';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport { dataContentSchema } from './data-content';\n\n/**\n@internal\n */\nexport const textPartSchema: z.ZodType<TextPart> = z.object({\n  type: z.literal('text'),\n  text: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@internal\n */\nexport const imagePartSchema: z.ZodType<ImagePart> = z.object({\n  type: z.literal('image'),\n  image: z.union([dataContentSchema, z.instanceof(URL)]),\n  mediaType: z.string().optional(),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@internal\n */\nexport const filePartSchema: z.ZodType<FilePart> = z.object({\n  type: z.literal('file'),\n  data: z.union([dataContentSchema, z.instanceof(URL)]),\n  filename: z.string().optional(),\n  mediaType: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@internal\n */\nexport const reasoningPartSchema: z.ZodType<ReasoningPart> = z.object({\n  type: z.literal('reasoning'),\n  text: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\nTool call content part of a prompt. It contains a tool call (usually generated by the AI model).\n */\nexport interface ToolCallPart {\n  type: 'tool-call';\n\n  /**\nID of the tool call. This ID is used to match the tool call with the tool result.\n */\n  toolCallId: string;\n\n  /**\nName of the tool that is being called.\n */\n  toolName: string;\n\n  /**\nArguments of the tool call. This is a JSON-serializable object that matches the tool's input schema.\n   */\n  input: unknown;\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n  providerOptions?: ProviderOptions;\n}\n\n/**\n@internal\n */\nexport const toolCallPartSchema: z.ZodType<ToolCallPart> = z.object({\n  type: z.literal('tool-call'),\n  toolCallId: z.string(),\n  toolName: z.string(),\n  input: z.unknown(),\n  providerOptions: providerMetadataSchema.optional(),\n  providerExecuted: z.boolean().optional(),\n}) as z.ZodType<ToolCallPart>; // necessary bc input is optional on Zod type\n\n/**\n@internal\n */\nexport const outputSchema: z.ZodType<LanguageModelV2ToolResultOutput> =\n  z.discriminatedUnion('type', [\n    z.object({\n      type: z.literal('text'),\n      value: z.string(),\n    }),\n    z.object({\n      type: z.literal('json'),\n      value: jsonValueSchema,\n    }),\n    z.object({\n      type: z.literal('error-text'),\n      value: z.string(),\n    }),\n    z.object({\n      type: z.literal('error-json'),\n      value: jsonValueSchema,\n    }),\n    z.object({\n      type: z.literal('content'),\n      value: z.array(\n        z.union([\n          z.object({\n            type: z.literal('text'),\n            text: z.string(),\n          }),\n          z.object({\n            type: z.literal('media'),\n            data: z.string(),\n            mediaType: z.string(),\n          }),\n        ]),\n      ),\n    }),\n  ]);\n\n/**\n@internal\n */\nexport const toolResultPartSchema: z.ZodType<ToolResultPart> = z.object({\n  type: z.literal('tool-result'),\n  toolCallId: z.string(),\n  toolName: z.string(),\n  output: outputSchema,\n  providerOptions: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolResultPart>; // necessary bc result is optional on Zod type\n","import {\n  AssistantModelMessage,\n  ModelMessage,\n  SystemModelMessage,\n  ToolModelMessage,\n  UserModelMessage,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport {\n  filePartSchema,\n  imagePartSchema,\n  reasoningPartSchema,\n  textPartSchema,\n  toolCallPartSchema,\n  toolResultPartSchema,\n} from './content-part';\n\n/**\n@deprecated Use `SystemModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreSystemMessage = SystemModelMessage;\n\nexport const systemModelMessageSchema: z.ZodType<SystemModelMessage> = z.object(\n  {\n    role: z.literal('system'),\n    content: z.string(),\n    providerOptions: providerMetadataSchema.optional(),\n  },\n);\n\n/**\n@deprecated Use `systemModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreSystemMessageSchema = systemModelMessageSchema;\n\n/**\n@deprecated Use `UserModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreUserMessage = UserModelMessage;\n\nexport const userModelMessageSchema: z.ZodType<UserModelMessage> = z.object({\n  role: z.literal('user'),\n  content: z.union([\n    z.string(),\n    z.array(z.union([textPartSchema, imagePartSchema, filePartSchema])),\n  ]),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@deprecated Use `userModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreUserMessageSchema = userModelMessageSchema;\n\n/**\n@deprecated Use `AssistantModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreAssistantMessage = AssistantModelMessage;\n\nexport const assistantModelMessageSchema: z.ZodType<AssistantModelMessage> =\n  z.object({\n    role: z.literal('assistant'),\n    content: z.union([\n      z.string(),\n      z.array(\n        z.union([\n          textPartSchema,\n          filePartSchema,\n          reasoningPartSchema,\n          toolCallPartSchema,\n          toolResultPartSchema,\n        ]),\n      ),\n    ]),\n    providerOptions: providerMetadataSchema.optional(),\n  });\n\n/**\n@deprecated Use `assistantModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreAssistantMessageSchema = assistantModelMessageSchema;\n\n/**\n@deprecated Use `ToolModelMessage` instead.\n */\n// TODO remove in AI SDK 6\nexport type CoreToolMessage = ToolModelMessage;\n\nexport const toolModelMessageSchema: z.ZodType<ToolModelMessage> = z.object({\n  role: z.literal('tool'),\n  content: z.array(toolResultPartSchema),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n@deprecated Use `toolModelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreToolMessageSchema = toolModelMessageSchema;\n\n/**\n@deprecated Use `ModelMessage` instead.\n   */\n// TODO remove in AI SDK 6\nexport type CoreMessage = ModelMessage;\n\nexport const modelMessageSchema: z.ZodType<ModelMessage> = z.union([\n  systemModelMessageSchema,\n  userModelMessageSchema,\n  assistantModelMessageSchema,\n  toolModelMessageSchema,\n]);\n\n/**\n@deprecated Use `modelMessageSchema` instead.\n */\n// TODO remove in AI SDK 6\nexport const coreMessageSchema: z.ZodType<CoreMessage> = modelMessageSchema;\n","import { TelemetrySettings } from './telemetry-settings';\n\nexport function assembleOperationName({\n  operationId,\n  telemetry,\n}: {\n  operationId: string;\n  telemetry?: TelemetrySettings;\n}) {\n  return {\n    // standardized operation and resource name:\n    'operation.name': `${operationId}${\n      telemetry?.functionId != null ? ` ${telemetry.functionId}` : ''\n    }`,\n    'resource.name': telemetry?.functionId,\n\n    // detailed, AI SDK specific data:\n    'ai.operationId': operationId,\n    'ai.telemetry.functionId': telemetry?.functionId,\n  };\n}\n","import { Attributes } from '@opentelemetry/api';\nimport { CallSettings } from '../prompt/call-settings';\nimport { TelemetrySettings } from './telemetry-settings';\n\nexport function getBaseTelemetryAttributes({\n  model,\n  settings,\n  telemetry,\n  headers,\n}: {\n  model: { modelId: string; provider: string };\n  settings: Omit<CallSettings, 'abortSignal' | 'headers' | 'temperature'>;\n  telemetry: TelemetrySettings | undefined;\n  headers: Record<string, string | undefined> | undefined;\n}): Attributes {\n  return {\n    'ai.model.provider': model.provider,\n    'ai.model.id': model.modelId,\n\n    // settings:\n    ...Object.entries(settings).reduce((attributes, [key, value]) => {\n      attributes[`ai.settings.${key}`] = value;\n      return attributes;\n    }, {} as Attributes),\n\n    // add metadata as attributes:\n    ...Object.entries(telemetry?.metadata ?? {}).reduce(\n      (attributes, [key, value]) => {\n        attributes[`ai.telemetry.metadata.${key}`] = value;\n        return attributes;\n      },\n      {} as Attributes,\n    ),\n\n    // request headers\n    ...Object.entries(headers ?? {}).reduce((attributes, [key, value]) => {\n      if (value !== undefined) {\n        attributes[`ai.request.headers.${key}`] = value;\n      }\n      return attributes;\n    }, {} as Attributes),\n  };\n}\n","import { Span, SpanContext, Tracer } from '@opentelemetry/api';\n\n/**\n * Tracer implementation that does nothing (null object).\n */\nexport const noopTracer: Tracer = {\n  startSpan(): Span {\n    return noopSpan;\n  },\n\n  startActiveSpan<F extends (span: Span) => unknown>(\n    name: unknown,\n    arg1: unknown,\n    arg2?: unknown,\n    arg3?: F,\n  ): ReturnType<any> {\n    if (typeof arg1 === 'function') {\n      return arg1(noopSpan);\n    }\n    if (typeof arg2 === 'function') {\n      return arg2(noopSpan);\n    }\n    if (typeof arg3 === 'function') {\n      return arg3(noopSpan);\n    }\n  },\n};\n\nconst noopSpan: Span = {\n  spanContext() {\n    return noopSpanContext;\n  },\n  setAttribute() {\n    return this;\n  },\n  setAttributes() {\n    return this;\n  },\n  addEvent() {\n    return this;\n  },\n  addLink() {\n    return this;\n  },\n  addLinks() {\n    return this;\n  },\n  setStatus() {\n    return this;\n  },\n  updateName() {\n    return this;\n  },\n  end() {\n    return this;\n  },\n  isRecording() {\n    return false;\n  },\n  recordException() {\n    return this;\n  },\n};\n\nconst noopSpanContext: SpanContext = {\n  traceId: '',\n  spanId: '',\n  traceFlags: 0,\n};\n","import { Tracer, trace } from '@opentelemetry/api';\nimport { noopTracer } from './noop-tracer';\n\nexport function getTracer({\n  isEnabled = false,\n  tracer,\n}: {\n  isEnabled?: boolean;\n  tracer?: Tracer;\n} = {}): Tracer {\n  if (!isEnabled) {\n    return noopTracer;\n  }\n\n  if (tracer) {\n    return tracer;\n  }\n\n  return trace.getTracer('ai');\n}\n","import { Attributes, Span, Tracer, SpanStatusCode } from '@opentelemetry/api';\n\nexport function recordSpan<T>({\n  name,\n  tracer,\n  attributes,\n  fn,\n  endWhenDone = true,\n}: {\n  name: string;\n  tracer: Tracer;\n  attributes: Attributes;\n  fn: (span: Span) => Promise<T>;\n  endWhenDone?: boolean;\n}) {\n  return tracer.startActiveSpan(name, { attributes }, async span => {\n    try {\n      const result = await fn(span);\n\n      if (endWhenDone) {\n        span.end();\n      }\n\n      return result;\n    } catch (error) {\n      try {\n        recordErrorOnSpan(span, error);\n      } finally {\n        // always stop the span when there is an error:\n        span.end();\n      }\n\n      throw error;\n    }\n  });\n}\n\n/**\n * Record an error on a span. If the error is an instance of Error, an exception event will be recorded on the span, otherwise\n * the span will be set to an error status.\n *\n * @param span - The span to record the error on.\n * @param error - The error to record on the span.\n */\nexport function recordErrorOnSpan(span: Span, error: unknown) {\n  if (error instanceof Error) {\n    span.recordException({\n      name: error.name,\n      message: error.message,\n      stack: error.stack,\n    });\n    span.setStatus({\n      code: SpanStatusCode.ERROR,\n      message: error.message,\n    });\n  } else {\n    span.setStatus({ code: SpanStatusCode.ERROR });\n  }\n}\n","import type { Attributes, AttributeValue } from '@opentelemetry/api';\nimport type { TelemetrySettings } from './telemetry-settings';\n\nexport function selectTelemetryAttributes({\n  telemetry,\n  attributes,\n}: {\n  telemetry?: TelemetrySettings;\n  attributes: {\n    [attributeKey: string]:\n      | AttributeValue\n      | { input: () => AttributeValue | undefined }\n      | { output: () => AttributeValue | undefined }\n      | undefined;\n  };\n}): Attributes {\n  // when telemetry is disabled, return an empty object to avoid serialization overhead:\n  if (telemetry?.isEnabled !== true) {\n    return {};\n  }\n\n  return Object.entries(attributes).reduce((attributes, [key, value]) => {\n    if (value == null) {\n      return attributes;\n    }\n\n    // input value, check if it should be recorded:\n    if (\n      typeof value === 'object' &&\n      'input' in value &&\n      typeof value.input === 'function'\n    ) {\n      // default to true:\n      if (telemetry?.recordInputs === false) {\n        return attributes;\n      }\n\n      const result = value.input();\n\n      return result == null ? attributes : { ...attributes, [key]: result };\n    }\n\n    // output value, check if it should be recorded:\n    if (\n      typeof value === 'object' &&\n      'output' in value &&\n      typeof value.output === 'function'\n    ) {\n      // default to true:\n      if (telemetry?.recordOutputs === false) {\n        return attributes;\n      }\n\n      const result = value.output();\n\n      return result == null ? attributes : { ...attributes, [key]: result };\n    }\n\n    // value is an attribute value already:\n    return { ...attributes, [key]: value };\n  }, {});\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { delay, getErrorMessage, isAbortError } from '@ai-sdk/provider-utils';\nimport { RetryError } from './retry-error';\n\nexport type RetryFunction = <OUTPUT>(\n  fn: () => PromiseLike<OUTPUT>,\n) => PromiseLike<OUTPUT>;\n\nfunction getRetryDelayInMs({\n  error,\n  exponentialBackoffDelay,\n}: {\n  error: APICallError;\n  exponentialBackoffDelay: number;\n}): number {\n  const headers = error.responseHeaders;\n\n  if (!headers) return exponentialBackoffDelay;\n\n  let ms: number | undefined;\n\n  // retry-ms is more precise than retry-after and used by e.g. OpenAI\n  const retryAfterMs = headers['retry-after-ms'];\n  if (retryAfterMs) {\n    const timeoutMs = parseFloat(retryAfterMs);\n    if (!Number.isNaN(timeoutMs)) {\n      ms = timeoutMs;\n    }\n  }\n\n  // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n  const retryAfter = headers['retry-after'];\n  if (retryAfter && ms === undefined) {\n    const timeoutSeconds = parseFloat(retryAfter);\n    if (!Number.isNaN(timeoutSeconds)) {\n      ms = timeoutSeconds * 1000;\n    } else {\n      ms = Date.parse(retryAfter) - Date.now();\n    }\n  }\n\n  // check that the delay is reasonable:\n  if (\n    ms != null &&\n    !Number.isNaN(ms) &&\n    0 <= ms &&\n    (ms < 60 * 1000 || ms < exponentialBackoffDelay)\n  ) {\n    return ms;\n  }\n\n  return exponentialBackoffDelay;\n}\n\n/**\nThe `retryWithExponentialBackoffRespectingRetryHeaders` strategy retries a failed API call with an exponential backoff,\nwhile respecting rate limit headers (retry-after-ms and retry-after) if they are provided and reasonable (0-60 seconds).\nYou can configure the maximum number of retries, the initial delay, and the backoff factor.\n */\nexport const retryWithExponentialBackoffRespectingRetryHeaders =\n  ({\n    maxRetries = 2,\n    initialDelayInMs = 2000,\n    backoffFactor = 2,\n    abortSignal,\n  }: {\n    maxRetries?: number;\n    initialDelayInMs?: number;\n    backoffFactor?: number;\n    abortSignal?: AbortSignal;\n  } = {}): RetryFunction =>\n  async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n    _retryWithExponentialBackoff(f, {\n      maxRetries,\n      delayInMs: initialDelayInMs,\n      backoffFactor,\n      abortSignal,\n    });\n\nasync function _retryWithExponentialBackoff<OUTPUT>(\n  f: () => PromiseLike<OUTPUT>,\n  {\n    maxRetries,\n    delayInMs,\n    backoffFactor,\n    abortSignal,\n  }: {\n    maxRetries: number;\n    delayInMs: number;\n    backoffFactor: number;\n    abortSignal: AbortSignal | undefined;\n  },\n  errors: unknown[] = [],\n): Promise<OUTPUT> {\n  try {\n    return await f();\n  } catch (error) {\n    if (isAbortError(error)) {\n      throw error; // don't retry when the request was aborted\n    }\n\n    if (maxRetries === 0) {\n      throw error; // don't wrap the error when retries are disabled\n    }\n\n    const errorMessage = getErrorMessage(error);\n    const newErrors = [...errors, error];\n    const tryNumber = newErrors.length;\n\n    if (tryNumber > maxRetries) {\n      throw new RetryError({\n        message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,\n        reason: 'maxRetriesExceeded',\n        errors: newErrors,\n      });\n    }\n\n    if (\n      error instanceof Error &&\n      APICallError.isInstance(error) &&\n      error.isRetryable === true &&\n      tryNumber <= maxRetries\n    ) {\n      await delay(\n        getRetryDelayInMs({\n          error,\n          exponentialBackoffDelay: delayInMs,\n        }),\n        { abortSignal },\n      );\n\n      return _retryWithExponentialBackoff(\n        f,\n        {\n          maxRetries,\n          delayInMs: backoffFactor * delayInMs,\n          backoffFactor,\n          abortSignal,\n        },\n        newErrors,\n      );\n    }\n\n    if (tryNumber === 1) {\n      throw error; // don't wrap the error when a non-retryable error occurs on the first try\n    }\n\n    throw new RetryError({\n      message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,\n      reason: 'errorNotRetryable',\n      errors: newErrors,\n    });\n  }\n}\n","import { InvalidArgumentError } from '../error/invalid-argument-error';\nimport {\n  RetryFunction,\n  retryWithExponentialBackoffRespectingRetryHeaders,\n} from '../util/retry-with-exponential-backoff';\n\n/**\n * Validate and prepare retries.\n */\nexport function prepareRetries({\n  maxRetries,\n  abortSignal,\n}: {\n  maxRetries: number | undefined;\n  abortSignal: AbortSignal | undefined;\n}): {\n  maxRetries: number;\n  retry: RetryFunction;\n} {\n  if (maxRetries != null) {\n    if (!Number.isInteger(maxRetries)) {\n      throw new InvalidArgumentError({\n        parameter: 'maxRetries',\n        value: maxRetries,\n        message: 'maxRetries must be an integer',\n      });\n    }\n\n    if (maxRetries < 0) {\n      throw new InvalidArgumentError({\n        parameter: 'maxRetries',\n        value: maxRetries,\n        message: 'maxRetries must be >= 0',\n      });\n    }\n  }\n\n  const maxRetriesResult = maxRetries ?? 2;\n\n  return {\n    maxRetries: maxRetriesResult,\n    retry: retryWithExponentialBackoffRespectingRetryHeaders({\n      maxRetries: maxRetriesResult,\n      abortSignal,\n    }),\n  };\n}\n","import {\n  LanguageModelV2,\n  LanguageModelV2Content,\n  LanguageModelV2ToolCall,\n} from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  executeTool,\n  getErrorMessage,\n  IdGenerator,\n  ProviderOptions,\n  withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { Tracer } from '@opentelemetry/api';\nimport { NoOutputSpecifiedError } from '../error/no-output-specified-error';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { ModelMessage } from '../prompt';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareToolsAndToolChoice } from '../prompt/prepare-tools-and-tool-choice';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordErrorOnSpan, recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { LanguageModel, ToolChoice } from '../types';\nimport { addLanguageModelUsage, LanguageModelUsage } from '../types/usage';\nimport { asArray } from '../util/as-array';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { ContentPart } from './content-part';\nimport { extractTextContent } from './extract-text-content';\nimport { GenerateTextResult } from './generate-text-result';\nimport { DefaultGeneratedFile } from './generated-file';\nimport { Output } from './output';\nimport { parseToolCall } from './parse-tool-call';\nimport { PrepareStepFunction } from './prepare-step';\nimport { ResponseMessage } from './response-message';\nimport { DefaultStepResult, StepResult } from './step-result';\nimport {\n  isStopConditionMet,\n  stepCountIs,\n  StopCondition,\n} from './stop-condition';\nimport { toResponseMessages } from './to-response-messages';\nimport { TypedToolCall } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair-function';\nimport { TypedToolError } from './tool-error';\nimport { ToolOutput } from './tool-output';\nimport { TypedToolResult } from './tool-result';\nimport { ToolSet } from './tool-set';\nimport { VERSION } from '../version';\n\nconst originalGenerateId = createIdGenerator({\n  prefix: 'aitxt',\n  size: 24,\n});\n\n/**\nCallback that is set using the `onStepFinish` option.\n\n@param stepResult - The result of the step.\n */\nexport type GenerateTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n  stepResult: StepResult<TOOLS>,\n) => Promise<void> | void;\n\n/**\nGenerate a text and call tools for a given prompt using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamText` instead.\n\n@param model - The language model to use.\n\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n@param toolChoice - The tool choice strategy. Default: 'auto'.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxOutputTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param experimental_generateMessageId - Generate a unique ID for each message.\n\n@param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n\n@returns\nA result object that contains the generated text, the results of the tool calls, and additional information.\n */\nexport async function generateText<\n  TOOLS extends ToolSet,\n  OUTPUT = never,\n  OUTPUT_PARTIAL = never,\n>({\n  model: modelArg,\n  tools,\n  toolChoice,\n  system,\n  prompt,\n  messages,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers,\n  stopWhen = stepCountIs(1),\n  experimental_output: output,\n  experimental_telemetry: telemetry,\n  providerOptions,\n  experimental_activeTools,\n  activeTools = experimental_activeTools,\n  experimental_prepareStep,\n  prepareStep = experimental_prepareStep,\n  experimental_repairToolCall: repairToolCall,\n  experimental_download: download,\n  experimental_context,\n  _internal: {\n    generateId = originalGenerateId,\n    currentDate = () => new Date(),\n  } = {},\n  onStepFinish,\n  ...settings\n}: CallSettings &\n  Prompt & {\n    /**\nThe language model to use.\n     */\n    model: LanguageModel;\n\n    /**\nThe tools that the model can call. The model needs to support calling tools.\n*/\n    tools?: TOOLS;\n\n    /**\nThe tool choice strategy. Default: 'auto'.\n     */\n    toolChoice?: ToolChoice<NoInfer<TOOLS>>;\n\n    /**\nCondition for stopping the generation when there are tool results in the last step.\nWhen the condition is an array, any of the conditions can be met to stop the generation.\n\n@default stepCountIs(1)\n     */\n    stopWhen?:\n      | StopCondition<NoInfer<TOOLS>>\n      | Array<StopCondition<NoInfer<TOOLS>>>;\n\n    /**\nOptional telemetry configuration (experimental).\n     */\n    experimental_telemetry?: TelemetrySettings;\n\n    /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n    providerOptions?: ProviderOptions;\n\n    /**\n     * @deprecated Use `activeTools` instead.\n     */\n    experimental_activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n    /**\nLimits the tools that are available for the model to call without\nchanging the tool call and result types in the result.\n     */\n    activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n    /**\nOptional specification for parsing structured outputs from the LLM response.\n     */\n    experimental_output?: Output<OUTPUT, OUTPUT_PARTIAL>;\n\n    /**\nCustom download function to use for URLs.\n\nBy default, files are downloaded if the model does not support the URL for the given media type.\n     */\n    experimental_download?: DownloadFunction | undefined;\n\n    /**\n     * @deprecated Use `prepareStep` instead.\n     */\n    experimental_prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n    /**\nOptional function that you can use to provide different settings for a step.\n    */\n    prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n    /**\nA function that attempts to repair a tool call that failed to parse.\n     */\n    experimental_repairToolCall?: ToolCallRepairFunction<NoInfer<TOOLS>>;\n\n    /**\n    Callback that is called when each step (LLM call) is finished, including intermediate steps.\n    */\n    onStepFinish?: GenerateTextOnStepFinishCallback<NoInfer<TOOLS>>;\n\n    /**\n     * Context that is passed into tool execution.\n     *\n     * Experimental (can break in patch releases).\n     *\n     * @default undefined\n     */\n    experimental_context?: unknown;\n\n    /**\n     * Internal. For test use only. May change without notice.\n     */\n    _internal?: {\n      generateId?: IdGenerator;\n      currentDate?: () => Date;\n    };\n  }): Promise<GenerateTextResult<TOOLS, OUTPUT>> {\n  const model = resolveLanguageModel(modelArg);\n  const stopConditions = asArray(stopWhen);\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal,\n  });\n\n  const callSettings = prepareCallSettings(settings);\n\n  const headersWithUserAgent = withUserAgentSuffix(\n    headers ?? {},\n    `ai/${VERSION}`,\n  );\n\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { ...callSettings, maxRetries },\n  });\n\n  const initialPrompt = await standardizePrompt({\n    system,\n    prompt,\n    messages,\n  } as Prompt);\n\n  const tracer = getTracer(telemetry);\n\n  try {\n    return await recordSpan({\n      name: 'ai.generateText',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: 'ai.generateText',\n            telemetry,\n          }),\n          ...baseTelemetryAttributes,\n          // model:\n          'ai.model.provider': model.provider,\n          'ai.model.id': model.modelId,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n        },\n      }),\n      tracer,\n      fn: async span => {\n        const callSettings = prepareCallSettings(settings);\n\n        let currentModelResponse: Awaited<\n          ReturnType<LanguageModelV2['doGenerate']>\n        > & { response: { id: string; timestamp: Date; modelId: string } };\n        let clientToolCalls: Array<TypedToolCall<TOOLS>> = [];\n        let clientToolOutputs: Array<ToolOutput<TOOLS>> = [];\n        const responseMessages: Array<ResponseMessage> = [];\n        const steps: GenerateTextResult<TOOLS, OUTPUT>['steps'] = [];\n\n        do {\n          const stepInputMessages = [\n            ...initialPrompt.messages,\n            ...responseMessages,\n          ];\n\n          const prepareStepResult = await prepareStep?.({\n            model,\n            steps,\n            stepNumber: steps.length,\n            messages: stepInputMessages,\n          });\n\n          const stepModel = resolveLanguageModel(\n            prepareStepResult?.model ?? model,\n          );\n\n          const promptMessages = await convertToLanguageModelPrompt({\n            prompt: {\n              system: prepareStepResult?.system ?? initialPrompt.system,\n              messages: prepareStepResult?.messages ?? stepInputMessages,\n            },\n            supportedUrls: await stepModel.supportedUrls,\n            download,\n          });\n\n          const { toolChoice: stepToolChoice, tools: stepTools } =\n            prepareToolsAndToolChoice({\n              tools,\n              toolChoice: prepareStepResult?.toolChoice ?? toolChoice,\n              activeTools: prepareStepResult?.activeTools ?? activeTools,\n            });\n\n          currentModelResponse = await retry(() =>\n            recordSpan({\n              name: 'ai.generateText.doGenerate',\n              attributes: selectTelemetryAttributes({\n                telemetry,\n                attributes: {\n                  ...assembleOperationName({\n                    operationId: 'ai.generateText.doGenerate',\n                    telemetry,\n                  }),\n                  ...baseTelemetryAttributes,\n                  // model:\n                  'ai.model.provider': stepModel.provider,\n                  'ai.model.id': stepModel.modelId,\n                  // prompt:\n                  'ai.prompt.messages': {\n                    input: () => stringifyForTelemetry(promptMessages),\n                  },\n                  'ai.prompt.tools': {\n                    // convert the language model level tools:\n                    input: () => stepTools?.map(tool => JSON.stringify(tool)),\n                  },\n                  'ai.prompt.toolChoice': {\n                    input: () =>\n                      stepToolChoice != null\n                        ? JSON.stringify(stepToolChoice)\n                        : undefined,\n                  },\n\n                  // standardized gen-ai llm span attributes:\n                  'gen_ai.system': stepModel.provider,\n                  'gen_ai.request.model': stepModel.modelId,\n                  'gen_ai.request.frequency_penalty': settings.frequencyPenalty,\n                  'gen_ai.request.max_tokens': settings.maxOutputTokens,\n                  'gen_ai.request.presence_penalty': settings.presencePenalty,\n                  'gen_ai.request.stop_sequences': settings.stopSequences,\n                  'gen_ai.request.temperature':\n                    settings.temperature ?? undefined,\n                  'gen_ai.request.top_k': settings.topK,\n                  'gen_ai.request.top_p': settings.topP,\n                },\n              }),\n              tracer,\n              fn: async span => {\n                const result = await stepModel.doGenerate({\n                  ...callSettings,\n                  tools: stepTools,\n                  toolChoice: stepToolChoice,\n                  responseFormat: output?.responseFormat,\n                  prompt: promptMessages,\n                  providerOptions,\n                  abortSignal,\n                  headers: headersWithUserAgent,\n                });\n\n                // Fill in default values:\n                const responseData = {\n                  id: result.response?.id ?? generateId(),\n                  timestamp: result.response?.timestamp ?? currentDate(),\n                  modelId: result.response?.modelId ?? stepModel.modelId,\n                  headers: result.response?.headers,\n                  body: result.response?.body,\n                };\n\n                // Add response information to the span:\n                span.setAttributes(\n                  selectTelemetryAttributes({\n                    telemetry,\n                    attributes: {\n                      'ai.response.finishReason': result.finishReason,\n                      'ai.response.text': {\n                        output: () => extractTextContent(result.content),\n                      },\n                      'ai.response.toolCalls': {\n                        output: () => {\n                          const toolCalls = asToolCalls(result.content);\n                          return toolCalls == null\n                            ? undefined\n                            : JSON.stringify(toolCalls);\n                        },\n                      },\n                      'ai.response.id': responseData.id,\n                      'ai.response.model': responseData.modelId,\n                      'ai.response.timestamp':\n                        responseData.timestamp.toISOString(),\n                      'ai.response.providerMetadata': JSON.stringify(\n                        result.providerMetadata,\n                      ),\n\n                      // TODO rename telemetry attributes to inputTokens and outputTokens\n                      'ai.usage.promptTokens': result.usage.inputTokens,\n                      'ai.usage.completionTokens': result.usage.outputTokens,\n\n                      // standardized gen-ai llm span attributes:\n                      'gen_ai.response.finish_reasons': [result.finishReason],\n                      'gen_ai.response.id': responseData.id,\n                      'gen_ai.response.model': responseData.modelId,\n                      'gen_ai.usage.input_tokens': result.usage.inputTokens,\n                      'gen_ai.usage.output_tokens': result.usage.outputTokens,\n                    },\n                  }),\n                );\n\n                return { ...result, response: responseData };\n              },\n            }),\n          );\n\n          // parse tool calls:\n          const stepToolCalls: TypedToolCall<TOOLS>[] = await Promise.all(\n            currentModelResponse.content\n              .filter(\n                (part): part is LanguageModelV2ToolCall =>\n                  part.type === 'tool-call',\n              )\n              .map(toolCall =>\n                parseToolCall({\n                  toolCall,\n                  tools,\n                  repairToolCall,\n                  system,\n                  messages: stepInputMessages,\n                }),\n              ),\n          );\n\n          // notify the tools that the tool calls are available:\n          for (const toolCall of stepToolCalls) {\n            if (toolCall.invalid) {\n              continue; // ignore invalid tool calls\n            }\n\n            const tool = tools![toolCall.toolName];\n            if (tool?.onInputAvailable != null) {\n              await tool.onInputAvailable({\n                input: toolCall.input,\n                toolCallId: toolCall.toolCallId,\n                messages: stepInputMessages,\n                abortSignal,\n                experimental_context,\n              });\n            }\n          }\n\n          // insert error tool outputs for invalid tool calls:\n          // TODO AI SDK 6: invalid inputs should not require output parts\n          const invalidToolCalls = stepToolCalls.filter(\n            toolCall => toolCall.invalid && toolCall.dynamic,\n          );\n\n          clientToolOutputs = [];\n\n          for (const toolCall of invalidToolCalls) {\n            clientToolOutputs.push({\n              type: 'tool-error',\n              toolCallId: toolCall.toolCallId,\n              toolName: toolCall.toolName,\n              input: toolCall.input,\n              error: getErrorMessage(toolCall.error!),\n              dynamic: true,\n            });\n          }\n\n          // execute client tool calls:\n          clientToolCalls = stepToolCalls.filter(\n            toolCall => !toolCall.providerExecuted,\n          );\n\n          if (tools != null) {\n            clientToolOutputs.push(\n              ...(await executeTools({\n                toolCalls: clientToolCalls.filter(\n                  toolCall => !toolCall.invalid,\n                ),\n                tools,\n                tracer,\n                telemetry,\n                messages: stepInputMessages,\n                abortSignal,\n                experimental_context,\n              })),\n            );\n          }\n\n          // content:\n          const stepContent = asContent({\n            content: currentModelResponse.content,\n            toolCalls: stepToolCalls,\n            toolOutputs: clientToolOutputs,\n          });\n\n          // append to messages for potential next step:\n          responseMessages.push(\n            ...toResponseMessages({\n              content: stepContent,\n              tools,\n            }),\n          );\n\n          // Add step information (after response messages are updated):\n          const currentStepResult: StepResult<TOOLS> = new DefaultStepResult({\n            content: stepContent,\n            finishReason: currentModelResponse.finishReason,\n            usage: currentModelResponse.usage,\n            warnings: currentModelResponse.warnings,\n            providerMetadata: currentModelResponse.providerMetadata,\n            request: currentModelResponse.request ?? {},\n            response: {\n              ...currentModelResponse.response,\n              // deep clone msgs to avoid mutating past messages in multi-step:\n              messages: structuredClone(responseMessages),\n            },\n          });\n\n          logWarnings(currentModelResponse.warnings ?? []);\n\n          steps.push(currentStepResult);\n          await onStepFinish?.(currentStepResult);\n        } while (\n          // there are tool calls:\n          clientToolCalls.length > 0 &&\n          // all current tool calls have outputs (incl. execution errors):\n          clientToolOutputs.length === clientToolCalls.length &&\n          // continue until a stop condition is met:\n          !(await isStopConditionMet({ stopConditions, steps }))\n        );\n\n        // Add response information to the span:\n        span.setAttributes(\n          selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              'ai.response.finishReason': currentModelResponse.finishReason,\n              'ai.response.text': {\n                output: () => extractTextContent(currentModelResponse.content),\n              },\n              'ai.response.toolCalls': {\n                output: () => {\n                  const toolCalls = asToolCalls(currentModelResponse.content);\n                  return toolCalls == null\n                    ? undefined\n                    : JSON.stringify(toolCalls);\n                },\n              },\n              'ai.response.providerMetadata': JSON.stringify(\n                currentModelResponse.providerMetadata,\n              ),\n\n              // TODO rename telemetry attributes to inputTokens and outputTokens\n              'ai.usage.promptTokens': currentModelResponse.usage.inputTokens,\n              'ai.usage.completionTokens':\n                currentModelResponse.usage.outputTokens,\n            },\n          }),\n        );\n\n        const lastStep = steps[steps.length - 1];\n\n        // parse output only if the last step was finished with \"stop\":\n        let resolvedOutput;\n        if (lastStep.finishReason === 'stop') {\n          resolvedOutput = await output?.parseOutput(\n            { text: lastStep.text },\n            {\n              response: lastStep.response,\n              usage: lastStep.usage,\n              finishReason: lastStep.finishReason,\n            },\n          );\n        }\n\n        return new DefaultGenerateTextResult({\n          steps,\n          resolvedOutput,\n        });\n      },\n    });\n  } catch (error) {\n    throw wrapGatewayError(error);\n  }\n}\n\nasync function executeTools<TOOLS extends ToolSet>({\n  toolCalls,\n  tools,\n  tracer,\n  telemetry,\n  messages,\n  abortSignal,\n  experimental_context,\n}: {\n  toolCalls: Array<TypedToolCall<TOOLS>>;\n  tools: TOOLS;\n  tracer: Tracer;\n  telemetry: TelemetrySettings | undefined;\n  messages: ModelMessage[];\n  abortSignal: AbortSignal | undefined;\n  experimental_context: unknown;\n}): Promise<Array<ToolOutput<TOOLS>>> {\n  const toolOutputs = await Promise.all(\n    toolCalls.map(async ({ toolCallId, toolName, input }) => {\n      const tool = tools[toolName];\n\n      if (tool?.execute == null) {\n        return undefined;\n      }\n\n      return recordSpan({\n        name: 'ai.toolCall',\n        attributes: selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            ...assembleOperationName({\n              operationId: 'ai.toolCall',\n              telemetry,\n            }),\n            'ai.toolCall.name': toolName,\n            'ai.toolCall.id': toolCallId,\n            'ai.toolCall.args': {\n              output: () => JSON.stringify(input),\n            },\n          },\n        }),\n        tracer,\n        fn: async span => {\n          try {\n            const stream = executeTool({\n              execute: tool.execute!.bind(tool),\n              input,\n              options: {\n                toolCallId,\n                messages,\n                abortSignal,\n                experimental_context,\n              },\n            });\n\n            let output: unknown;\n            for await (const part of stream) {\n              if (part.type === 'final') {\n                output = part.output;\n              }\n            }\n            try {\n              span.setAttributes(\n                selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    'ai.toolCall.result': {\n                      output: () => JSON.stringify(output),\n                    },\n                  },\n                }),\n              );\n            } catch (ignored) {\n              // JSON stringify might fail if the result is not serializable,\n              // in which case we just ignore it. In the future we might want to\n              // add an optional serialize method to the tool interface and warn\n              // if the result is not serializable.\n            }\n\n            return {\n              type: 'tool-result',\n              toolCallId,\n              toolName,\n              input,\n              output,\n              dynamic: tool.type === 'dynamic',\n            } as TypedToolResult<TOOLS>;\n          } catch (error) {\n            recordErrorOnSpan(span, error);\n            return {\n              type: 'tool-error',\n              toolCallId,\n              toolName,\n              input,\n              error,\n              dynamic: tool.type === 'dynamic',\n            } as TypedToolError<TOOLS>;\n          }\n        },\n      });\n    }),\n  );\n\n  return toolOutputs.filter(\n    (output): output is NonNullable<typeof output> => output != null,\n  );\n}\n\nclass DefaultGenerateTextResult<\n  TOOLS extends ToolSet,\n  OUTPUT,\n> implements GenerateTextResult<TOOLS, OUTPUT> {\n  readonly steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n\n  private readonly resolvedOutput: OUTPUT;\n\n  constructor(options: {\n    steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n    resolvedOutput: OUTPUT;\n  }) {\n    this.steps = options.steps;\n    this.resolvedOutput = options.resolvedOutput;\n  }\n\n  private get finalStep() {\n    return this.steps[this.steps.length - 1];\n  }\n\n  get content() {\n    return this.finalStep.content;\n  }\n\n  get text() {\n    return this.finalStep.text;\n  }\n\n  get files() {\n    return this.finalStep.files;\n  }\n\n  get reasoningText() {\n    return this.finalStep.reasoningText;\n  }\n\n  get reasoning() {\n    return this.finalStep.reasoning;\n  }\n\n  get toolCalls() {\n    return this.finalStep.toolCalls;\n  }\n\n  get staticToolCalls() {\n    return this.finalStep.staticToolCalls;\n  }\n\n  get dynamicToolCalls() {\n    return this.finalStep.dynamicToolCalls;\n  }\n\n  get toolResults() {\n    return this.finalStep.toolResults;\n  }\n\n  get staticToolResults() {\n    return this.finalStep.staticToolResults;\n  }\n\n  get dynamicToolResults() {\n    return this.finalStep.dynamicToolResults;\n  }\n\n  get sources() {\n    return this.finalStep.sources;\n  }\n\n  get finishReason() {\n    return this.finalStep.finishReason;\n  }\n\n  get warnings() {\n    return this.finalStep.warnings;\n  }\n\n  get providerMetadata() {\n    return this.finalStep.providerMetadata;\n  }\n\n  get response() {\n    return this.finalStep.response;\n  }\n\n  get request() {\n    return this.finalStep.request;\n  }\n\n  get usage() {\n    return this.finalStep.usage;\n  }\n\n  get totalUsage() {\n    return this.steps.reduce(\n      (totalUsage, step) => {\n        return addLanguageModelUsage(totalUsage, step.usage);\n      },\n      {\n        inputTokens: undefined,\n        outputTokens: undefined,\n        totalTokens: undefined,\n        reasoningTokens: undefined,\n        cachedInputTokens: undefined,\n      } as LanguageModelUsage,\n    );\n  }\n\n  get experimental_output() {\n    if (this.resolvedOutput == null) {\n      throw new NoOutputSpecifiedError();\n    }\n\n    return this.resolvedOutput;\n  }\n}\n\nfunction asToolCalls(content: Array<LanguageModelV2Content>) {\n  const parts = content.filter(\n    (part): part is LanguageModelV2ToolCall => part.type === 'tool-call',\n  );\n\n  if (parts.length === 0) {\n    return undefined;\n  }\n\n  return parts.map(toolCall => ({\n    toolCallId: toolCall.toolCallId,\n    toolName: toolCall.toolName,\n    input: toolCall.input,\n  }));\n}\n\nfunction asContent<TOOLS extends ToolSet>({\n  content,\n  toolCalls,\n  toolOutputs,\n}: {\n  content: Array<LanguageModelV2Content>;\n  toolCalls: Array<TypedToolCall<TOOLS>>;\n  toolOutputs: Array<ToolOutput<TOOLS>>;\n}): Array<ContentPart<TOOLS>> {\n  return [\n    ...content.map(part => {\n      switch (part.type) {\n        case 'text':\n        case 'reasoning':\n        case 'source':\n          return part;\n\n        case 'file': {\n          return {\n            type: 'file' as const,\n            file: new DefaultGeneratedFile(part),\n          };\n        }\n\n        case 'tool-call': {\n          return toolCalls.find(\n            toolCall => toolCall.toolCallId === part.toolCallId,\n          )!;\n        }\n\n        case 'tool-result': {\n          const toolCall = toolCalls.find(\n            toolCall => toolCall.toolCallId === part.toolCallId,\n          )!;\n\n          if (toolCall == null) {\n            throw new Error(`Tool call ${part.toolCallId} not found.`);\n          }\n\n          if (part.isError) {\n            return {\n              type: 'tool-error' as const,\n              toolCallId: part.toolCallId,\n              toolName: part.toolName as keyof TOOLS & string,\n              input: toolCall.input,\n              error: part.result,\n              providerExecuted: true,\n              dynamic: toolCall.dynamic,\n            } as TypedToolError<TOOLS>;\n          }\n\n          return {\n            type: 'tool-result' as const,\n            toolCallId: part.toolCallId,\n            toolName: part.toolName as keyof TOOLS & string,\n            input: toolCall.input,\n            output: part.result,\n            providerExecuted: true,\n            dynamic: toolCall.dynamic,\n          } as TypedToolResult<TOOLS>;\n        }\n      }\n    }),\n    ...toolOutputs,\n  ];\n}\n","type State =\n  | 'ROOT'\n  | 'FINISH'\n  | 'INSIDE_STRING'\n  | 'INSIDE_STRING_ESCAPE'\n  | 'INSIDE_LITERAL'\n  | 'INSIDE_NUMBER'\n  | 'INSIDE_OBJECT_START'\n  | 'INSIDE_OBJECT_KEY'\n  | 'INSIDE_OBJECT_AFTER_KEY'\n  | 'INSIDE_OBJECT_BEFORE_VALUE'\n  | 'INSIDE_OBJECT_AFTER_VALUE'\n  | 'INSIDE_OBJECT_AFTER_COMMA'\n  | 'INSIDE_ARRAY_START'\n  | 'INSIDE_ARRAY_AFTER_VALUE'\n  | 'INSIDE_ARRAY_AFTER_COMMA';\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n  const stack: State[] = ['ROOT'];\n  let lastValidIndex = -1;\n  let literalStart: number | null = null;\n\n  function processValueStart(char: string, i: number, swapState: State) {\n    {\n      switch (char) {\n        case '\"': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_STRING');\n          break;\n        }\n\n        case 'f':\n        case 't':\n        case 'n': {\n          lastValidIndex = i;\n          literalStart = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_LITERAL');\n          break;\n        }\n\n        case '-': {\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_NUMBER');\n          break;\n        }\n        case '0':\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_NUMBER');\n          break;\n        }\n\n        case '{': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_OBJECT_START');\n          break;\n        }\n\n        case '[': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_ARRAY_START');\n          break;\n        }\n      }\n    }\n  }\n\n  function processAfterObjectValue(char: string, i: number) {\n    switch (char) {\n      case ',': {\n        stack.pop();\n        stack.push('INSIDE_OBJECT_AFTER_COMMA');\n        break;\n      }\n      case '}': {\n        lastValidIndex = i;\n        stack.pop();\n        break;\n      }\n    }\n  }\n\n  function processAfterArrayValue(char: string, i: number) {\n    switch (char) {\n      case ',': {\n        stack.pop();\n        stack.push('INSIDE_ARRAY_AFTER_COMMA');\n        break;\n      }\n      case ']': {\n        lastValidIndex = i;\n        stack.pop();\n        break;\n      }\n    }\n  }\n\n  for (let i = 0; i < input.length; i++) {\n    const char = input[i];\n    const currentState = stack[stack.length - 1];\n\n    switch (currentState) {\n      case 'ROOT':\n        processValueStart(char, i, 'FINISH');\n        break;\n\n      case 'INSIDE_OBJECT_START': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_KEY');\n            break;\n          }\n          case '}': {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_AFTER_COMMA': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_KEY');\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_KEY': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_AFTER_KEY');\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_AFTER_KEY': {\n        switch (char) {\n          case ':': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_BEFORE_VALUE');\n\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_BEFORE_VALUE': {\n        processValueStart(char, i, 'INSIDE_OBJECT_AFTER_VALUE');\n        break;\n      }\n\n      case 'INSIDE_OBJECT_AFTER_VALUE': {\n        processAfterObjectValue(char, i);\n        break;\n      }\n\n      case 'INSIDE_STRING': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            lastValidIndex = i;\n            break;\n          }\n\n          case '\\\\': {\n            stack.push('INSIDE_STRING_ESCAPE');\n            break;\n          }\n\n          default: {\n            lastValidIndex = i;\n          }\n        }\n\n        break;\n      }\n\n      case 'INSIDE_ARRAY_START': {\n        switch (char) {\n          case ']': {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n\n          default: {\n            lastValidIndex = i;\n            processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_ARRAY_AFTER_VALUE': {\n        switch (char) {\n          case ',': {\n            stack.pop();\n            stack.push('INSIDE_ARRAY_AFTER_COMMA');\n            break;\n          }\n\n          case ']': {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n\n          default: {\n            lastValidIndex = i;\n            break;\n          }\n        }\n\n        break;\n      }\n\n      case 'INSIDE_ARRAY_AFTER_COMMA': {\n        processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n        break;\n      }\n\n      case 'INSIDE_STRING_ESCAPE': {\n        stack.pop();\n        lastValidIndex = i;\n\n        break;\n      }\n\n      case 'INSIDE_NUMBER': {\n        switch (char) {\n          case '0':\n          case '1':\n          case '2':\n          case '3':\n          case '4':\n          case '5':\n          case '6':\n          case '7':\n          case '8':\n          case '9': {\n            lastValidIndex = i;\n            break;\n          }\n\n          case 'e':\n          case 'E':\n          case '-':\n          case '.': {\n            break;\n          }\n\n          case ',': {\n            stack.pop();\n\n            if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n              processAfterArrayValue(char, i);\n            }\n\n            if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n              processAfterObjectValue(char, i);\n            }\n\n            break;\n          }\n\n          case '}': {\n            stack.pop();\n\n            if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n              processAfterObjectValue(char, i);\n            }\n\n            break;\n          }\n\n          case ']': {\n            stack.pop();\n\n            if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n              processAfterArrayValue(char, i);\n            }\n\n            break;\n          }\n\n          default: {\n            stack.pop();\n            break;\n          }\n        }\n\n        break;\n      }\n\n      case 'INSIDE_LITERAL': {\n        const partialLiteral = input.substring(literalStart!, i + 1);\n\n        if (\n          !'false'.startsWith(partialLiteral) &&\n          !'true'.startsWith(partialLiteral) &&\n          !'null'.startsWith(partialLiteral)\n        ) {\n          stack.pop();\n\n          if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n            processAfterObjectValue(char, i);\n          } else if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n            processAfterArrayValue(char, i);\n          }\n        } else {\n          lastValidIndex = i;\n        }\n\n        break;\n      }\n    }\n  }\n\n  let result = input.slice(0, lastValidIndex + 1);\n\n  for (let i = stack.length - 1; i >= 0; i--) {\n    const state = stack[i];\n\n    switch (state) {\n      case 'INSIDE_STRING': {\n        result += '\"';\n        break;\n      }\n\n      case 'INSIDE_OBJECT_KEY':\n      case 'INSIDE_OBJECT_AFTER_KEY':\n      case 'INSIDE_OBJECT_AFTER_COMMA':\n      case 'INSIDE_OBJECT_START':\n      case 'INSIDE_OBJECT_BEFORE_VALUE':\n      case 'INSIDE_OBJECT_AFTER_VALUE': {\n        result += '}';\n        break;\n      }\n\n      case 'INSIDE_ARRAY_START':\n      case 'INSIDE_ARRAY_AFTER_COMMA':\n      case 'INSIDE_ARRAY_AFTER_VALUE': {\n        result += ']';\n        break;\n      }\n\n      case 'INSIDE_LITERAL': {\n        const partialLiteral = input.substring(literalStart!, input.length);\n\n        if ('true'.startsWith(partialLiteral)) {\n          result += 'true'.slice(partialLiteral.length);\n        } else if ('false'.startsWith(partialLiteral)) {\n          result += 'false'.slice(partialLiteral.length);\n        } else if ('null'.startsWith(partialLiteral)) {\n          result += 'null'.slice(partialLiteral.length);\n        }\n      }\n    }\n  }\n\n  return result;\n}\n","import { JSONValue } from '@ai-sdk/provider';\nimport { safeParseJSON } from '@ai-sdk/provider-utils';\nimport { fixJson } from './fix-json';\n\nexport async function parsePartialJson(jsonText: string | undefined): Promise<{\n  value: JSONValue | undefined;\n  state:\n    | 'undefined-input'\n    | 'successful-parse'\n    | 'repaired-parse'\n    | 'failed-parse';\n}> {\n  if (jsonText === undefined) {\n    return { value: undefined, state: 'undefined-input' };\n  }\n\n  let result = await safeParseJSON({ text: jsonText });\n\n  if (result.success) {\n    return { value: result.value, state: 'successful-parse' };\n  }\n\n  result = await safeParseJSON({ text: fixJson(jsonText) });\n\n  if (result.success) {\n    return { value: result.value, state: 'repaired-parse' };\n  }\n\n  return { value: undefined, state: 'failed-parse' };\n}\n","import {\n  getErrorMessage,\n  LanguageModelV2,\n  LanguageModelV2CallWarning,\n} from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  DelayedPromise,\n  IdGenerator,\n  isAbortError,\n  ProviderOptions,\n} from '@ai-sdk/provider-utils';\nimport { Span } from '@opentelemetry/api';\nimport { ServerResponse } from 'node:http';\nimport { NoOutputGeneratedError } from '../error';\nimport { NoOutputSpecifiedError } from '../error/no-output-specified-error';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareToolsAndToolChoice } from '../prompt/prepare-tools-and-tool-choice';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { createTextStreamResponse } from '../text-stream/create-text-stream-response';\nimport { pipeTextStreamToResponse } from '../text-stream/pipe-text-stream-to-response';\nimport { LanguageModelRequestMetadata } from '../types';\nimport {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n  ToolChoice,\n} from '../types/language-model';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport { addLanguageModelUsage, LanguageModelUsage } from '../types/usage';\nimport { UIMessage } from '../ui';\nimport { createUIMessageStreamResponse } from '../ui-message-stream/create-ui-message-stream-response';\nimport { getResponseUIMessageId } from '../ui-message-stream/get-response-ui-message-id';\nimport { handleUIMessageStreamFinish } from '../ui-message-stream/handle-ui-message-stream-finish';\nimport { pipeUIMessageStreamToResponse } from '../ui-message-stream/pipe-ui-message-stream-to-response';\nimport {\n  InferUIMessageChunk,\n  UIMessageChunk,\n} from '../ui-message-stream/ui-message-chunks';\nimport { UIMessageStreamResponseInit } from '../ui-message-stream/ui-message-stream-response-init';\nimport { InferUIMessageData, InferUIMessageMetadata } from '../ui/ui-messages';\nimport { asArray } from '../util/as-array';\nimport {\n  AsyncIterableStream,\n  createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { consumeStream } from '../util/consume-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { now as originalNow } from '../util/now';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { ContentPart } from './content-part';\nimport { Output } from './output';\nimport { PrepareStepFunction } from './prepare-step';\nimport { ResponseMessage } from './response-message';\nimport {\n  runToolsTransformation,\n  SingleRequestTextStreamPart,\n} from './run-tools-transformation';\nimport { DefaultStepResult, StepResult } from './step-result';\nimport {\n  isStopConditionMet,\n  stepCountIs,\n  StopCondition,\n} from './stop-condition';\nimport {\n  ConsumeStreamOptions,\n  StreamTextResult,\n  TextStreamPart,\n  UIMessageStreamOptions,\n} from './stream-text-result';\nimport { toResponseMessages } from './to-response-messages';\nimport { TypedToolCall } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair-function';\nimport { ToolOutput } from './tool-output';\nimport { ToolSet } from './tool-set';\n\nconst originalGenerateId = createIdGenerator({\n  prefix: 'aitxt',\n  size: 24,\n});\n\n/**\nA transformation that is applied to the stream.\n\n@param stopStream - A function that stops the source stream.\n@param tools - The tools that are accessible to and can be called by the model. The model needs to support calling tools.\n */\nexport type StreamTextTransform<TOOLS extends ToolSet> = (options: {\n  tools: TOOLS; // for type inference\n  stopStream: () => void;\n}) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;\n\n/**\nCallback that is set using the `onError` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnErrorCallback = (event: {\n  error: unknown;\n}) => PromiseLike<void> | void;\n\n/**\nCallback that is set using the `onStepFinish` option.\n\n@param stepResult - The result of the step.\n */\nexport type StreamTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n  stepResult: StepResult<TOOLS>,\n) => PromiseLike<void> | void;\n\n/**\nCallback that is set using the `onChunk` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnChunkCallback<TOOLS extends ToolSet> = (event: {\n  chunk: Extract<\n    TextStreamPart<TOOLS>,\n    {\n      type:\n        | 'text-delta'\n        | 'reasoning-delta'\n        | 'source'\n        | 'tool-call'\n        | 'tool-input-start'\n        | 'tool-input-delta'\n        | 'tool-result'\n        | 'raw';\n    }\n  >;\n}) => PromiseLike<void> | void;\n\n/**\nCallback that is set using the `onFinish` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnFinishCallback<TOOLS extends ToolSet> = (\n  event: StepResult<TOOLS> & {\n    /**\nDetails for all steps.\n   */\n    readonly steps: StepResult<TOOLS>[];\n\n    /**\nTotal usage for all steps. This is the sum of the usage of all steps.\n     */\n    readonly totalUsage: LanguageModelUsage;\n  },\n) => PromiseLike<void> | void;\n\n/**\nCallback that is set using the `onAbort` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamTextOnAbortCallback<TOOLS extends ToolSet> = (event: {\n  /**\nDetails for all previously finished steps.\n   */\n  readonly steps: StepResult<TOOLS>[];\n}) => PromiseLike<void> | void;\n\n/**\nGenerate a text and call tools for a given prompt using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateText` instead.\n\n@param model - The language model to use.\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxOutputTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param maxSteps - Maximum number of sequential LLM calls (steps), e.g. when you use tool calls.\n\n@param onChunk - Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.\n@param onError - Callback that is called when an error occurs during streaming. You can use it to log errors.\n@param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n@param onFinish - Callback that is called when the LLM response and all request tool executions\n(for tools that have an `execute` function) are finished.\n\n@return\nA result object for accessing different stream types and additional information.\n */\nexport function streamText<\n  TOOLS extends ToolSet,\n  OUTPUT = never,\n  PARTIAL_OUTPUT = never,\n>({\n  model,\n  tools,\n  toolChoice,\n  system,\n  prompt,\n  messages,\n  maxRetries,\n  abortSignal,\n  headers,\n  stopWhen = stepCountIs(1),\n  experimental_output: output,\n  experimental_telemetry: telemetry,\n  prepareStep,\n  providerOptions,\n  experimental_activeTools,\n  activeTools = experimental_activeTools,\n  experimental_repairToolCall: repairToolCall,\n  experimental_transform: transform,\n  experimental_download: download,\n  includeRawChunks = false,\n  onChunk,\n  onError = ({ error }) => {\n    console.error(error);\n  },\n  onFinish,\n  onAbort,\n  onStepFinish,\n  experimental_context,\n  _internal: {\n    now = originalNow,\n    generateId = originalGenerateId,\n    currentDate = () => new Date(),\n  } = {},\n  ...settings\n}: CallSettings &\n  Prompt & {\n    /**\nThe language model to use.\n     */\n    model: LanguageModel;\n\n    /**\nThe tools that the model can call. The model needs to support calling tools.\n    */\n    tools?: TOOLS;\n\n    /**\nThe tool choice strategy. Default: 'auto'.\n     */\n    toolChoice?: ToolChoice<TOOLS>;\n\n    /**\nCondition for stopping the generation when there are tool results in the last step.\nWhen the condition is an array, any of the conditions can be met to stop the generation.\n\n@default stepCountIs(1)\n     */\n    stopWhen?:\n      | StopCondition<NoInfer<TOOLS>>\n      | Array<StopCondition<NoInfer<TOOLS>>>;\n\n    /**\nOptional telemetry configuration (experimental).\n     */\n    experimental_telemetry?: TelemetrySettings;\n\n    /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n    providerOptions?: ProviderOptions;\n\n    /**\n     * @deprecated Use `activeTools` instead.\n     */\n    experimental_activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n    /**\n   Limits the tools that are available for the model to call without\n   changing the tool call and result types in the result.\n        */\n    activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n    /**\nOptional specification for parsing structured outputs from the LLM response.\n     */\n    experimental_output?: Output<OUTPUT, PARTIAL_OUTPUT>;\n\n    /**\nOptional function that you can use to provide different settings for a step.\n\n@param options - The options for the step.\n@param options.steps - The steps that have been executed so far.\n@param options.stepNumber - The number of the step that is being executed.\n@param options.model - The model that is being used.\n\n@returns An object that contains the settings for the step.\nIf you return undefined (or for undefined settings), the settings from the outer level will be used.\n    */\n    prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n    /**\nA function that attempts to repair a tool call that failed to parse.\n     */\n    experimental_repairToolCall?: ToolCallRepairFunction<TOOLS>;\n\n    /**\nOptional stream transformations.\nThey are applied in the order they are provided.\nThe stream transformations must maintain the stream structure for streamText to work correctly.\n     */\n    experimental_transform?:\n      | StreamTextTransform<TOOLS>\n      | Array<StreamTextTransform<TOOLS>>;\n\n    /**\nCustom download function to use for URLs.\n\nBy default, files are downloaded if the model does not support the URL for the given media type.\n     */\n    experimental_download?: DownloadFunction | undefined;\n\n    /**\nWhether to include raw chunks from the provider in the stream.\nWhen enabled, you will receive raw chunks with type 'raw' that contain the unprocessed data from the provider.\nThis allows access to cutting-edge provider features not yet wrapped by the AI SDK.\nDefaults to false.\n     */\n    includeRawChunks?: boolean;\n\n    /**\nCallback that is called for each chunk of the stream.\nThe stream processing will pause until the callback promise is resolved.\n     */\n    onChunk?: StreamTextOnChunkCallback<TOOLS>;\n\n    /**\nCallback that is invoked when an error occurs during streaming.\nYou can use it to log errors.\nThe stream processing will pause until the callback promise is resolved.\n     */\n    onError?: StreamTextOnErrorCallback;\n\n    /**\nCallback that is called when the LLM response and all request tool executions\n(for tools that have an `execute` function) are finished.\n\nThe usage is the combined usage of all steps.\n     */\n    onFinish?: StreamTextOnFinishCallback<TOOLS>;\n\n    onAbort?: StreamTextOnAbortCallback<TOOLS>;\n\n    /**\nCallback that is called when each step (LLM call) is finished, including intermediate steps.\n    */\n    onStepFinish?: StreamTextOnStepFinishCallback<TOOLS>;\n\n    /**\n     * Context that is passed into tool execution.\n     *\n     * Experimental (can break in patch releases).\n     *\n     * @default undefined\n     */\n    experimental_context?: unknown;\n\n    /**\nInternal. For test use only. May change without notice.\n     */\n    _internal?: {\n      now?: () => number;\n      generateId?: IdGenerator;\n      currentDate?: () => Date;\n    };\n  }): StreamTextResult<TOOLS, PARTIAL_OUTPUT> {\n  return new DefaultStreamTextResult<TOOLS, OUTPUT, PARTIAL_OUTPUT>({\n    model: resolveLanguageModel(model),\n    telemetry,\n    headers,\n    settings,\n    maxRetries,\n    abortSignal,\n    system,\n    prompt,\n    messages,\n    tools,\n    toolChoice,\n    transforms: asArray(transform),\n    activeTools,\n    repairToolCall,\n    stopConditions: asArray(stopWhen),\n    output,\n    providerOptions,\n    prepareStep,\n    includeRawChunks,\n    onChunk,\n    onError,\n    onFinish,\n    onAbort,\n    onStepFinish,\n    now,\n    currentDate,\n    generateId,\n    experimental_context,\n    download,\n  });\n}\n\ntype EnrichedStreamPart<TOOLS extends ToolSet, PARTIAL_OUTPUT> = {\n  part: TextStreamPart<TOOLS>;\n  partialOutput: PARTIAL_OUTPUT | undefined;\n};\n\nfunction createOutputTransformStream<\n  TOOLS extends ToolSet,\n  OUTPUT,\n  PARTIAL_OUTPUT,\n>(\n  output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined,\n): TransformStream<\n  TextStreamPart<TOOLS>,\n  EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n> {\n  if (!output) {\n    return new TransformStream<\n      TextStreamPart<TOOLS>,\n      EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n    >({\n      transform(chunk, controller) {\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n      },\n    });\n  }\n\n  let firstTextChunkId: string | undefined = undefined;\n  let text = '';\n  let textChunk = '';\n  let lastPublishedJson = '';\n\n  function publishTextChunk({\n    controller,\n    partialOutput = undefined,\n  }: {\n    controller: TransformStreamDefaultController<\n      EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n    >;\n    partialOutput?: PARTIAL_OUTPUT;\n  }) {\n    controller.enqueue({\n      part: {\n        type: 'text-delta',\n        id: firstTextChunkId!,\n        text: textChunk,\n      },\n      partialOutput,\n    });\n    textChunk = '';\n  }\n\n  return new TransformStream<\n    TextStreamPart<TOOLS>,\n    EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n  >({\n    async transform(chunk, controller) {\n      // ensure that we publish the last text chunk before the step finish:\n      if (chunk.type === 'finish-step' && textChunk.length > 0) {\n        publishTextChunk({ controller });\n      }\n\n      if (\n        chunk.type !== 'text-delta' &&\n        chunk.type !== 'text-start' &&\n        chunk.type !== 'text-end'\n      ) {\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n        return;\n      }\n\n      // we have to pick a text chunk which contains the json text\n      // since we are streaming, we have to pick the first text chunk\n      if (firstTextChunkId == null) {\n        firstTextChunkId = chunk.id;\n      } else if (chunk.id !== firstTextChunkId) {\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n        return;\n      }\n\n      if (chunk.type === 'text-start') {\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n        return;\n      }\n\n      if (chunk.type === 'text-end') {\n        if (textChunk.length > 0) {\n          publishTextChunk({ controller });\n        }\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n        return;\n      }\n\n      text += chunk.text;\n      textChunk += chunk.text;\n\n      // only publish if partial json can be parsed:\n      const result = await output.parsePartial({ text });\n      if (result != null) {\n        // only send new json if it has changed:\n        const currentJson = JSON.stringify(result.partial);\n        if (currentJson !== lastPublishedJson) {\n          publishTextChunk({ controller, partialOutput: result.partial });\n          lastPublishedJson = currentJson;\n        }\n      }\n    },\n  });\n}\n\nclass DefaultStreamTextResult<\n  TOOLS extends ToolSet,\n  OUTPUT,\n  PARTIAL_OUTPUT,\n> implements StreamTextResult<TOOLS, PARTIAL_OUTPUT> {\n  private readonly _totalUsage = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['usage']>\n  >();\n  private readonly _finishReason = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['finishReason']>\n  >();\n  private readonly _steps = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, PARTIAL_OUTPUT>['steps']>\n  >();\n\n  private readonly addStream: (\n    stream: ReadableStream<TextStreamPart<TOOLS>>,\n  ) => void;\n\n  private readonly closeStream: () => void;\n\n  private baseStream: ReadableStream<EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>>;\n\n  private output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined;\n\n  private includeRawChunks: boolean;\n\n  private tools: TOOLS | undefined;\n\n  constructor({\n    model,\n    telemetry,\n    headers,\n    settings,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    system,\n    prompt,\n    messages,\n    tools,\n    toolChoice,\n    transforms,\n    activeTools,\n    repairToolCall,\n    stopConditions,\n    output,\n    providerOptions,\n    prepareStep,\n    includeRawChunks,\n    now,\n    currentDate,\n    generateId,\n    onChunk,\n    onError,\n    onFinish,\n    onAbort,\n    onStepFinish,\n    experimental_context,\n    download,\n  }: {\n    model: LanguageModelV2;\n    telemetry: TelemetrySettings | undefined;\n    headers: Record<string, string | undefined> | undefined;\n    settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n    maxRetries: number | undefined;\n    abortSignal: AbortSignal | undefined;\n    system: Prompt['system'];\n    prompt: Prompt['prompt'];\n    messages: Prompt['messages'];\n    tools: TOOLS | undefined;\n    toolChoice: ToolChoice<TOOLS> | undefined;\n    transforms: Array<StreamTextTransform<TOOLS>>;\n    activeTools: Array<keyof TOOLS> | undefined;\n    repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;\n    stopConditions: Array<StopCondition<NoInfer<TOOLS>>>;\n    output: Output<OUTPUT, PARTIAL_OUTPUT> | undefined;\n    providerOptions: ProviderOptions | undefined;\n    prepareStep: PrepareStepFunction<NoInfer<TOOLS>> | undefined;\n    includeRawChunks: boolean;\n    now: () => number;\n    currentDate: () => Date;\n    generateId: () => string;\n    experimental_context: unknown;\n    download: DownloadFunction | undefined;\n\n    // callbacks:\n    onChunk: undefined | StreamTextOnChunkCallback<TOOLS>;\n    onError: StreamTextOnErrorCallback;\n    onFinish: undefined | StreamTextOnFinishCallback<TOOLS>;\n    onAbort: undefined | StreamTextOnAbortCallback<TOOLS>;\n    onStepFinish: undefined | StreamTextOnStepFinishCallback<TOOLS>;\n  }) {\n    this.output = output;\n    this.includeRawChunks = includeRawChunks;\n    this.tools = tools;\n\n    // promise to ensure that the step has been fully processed by the event processor\n    // before a new step is started. This is required because the continuation condition\n    // needs the updated steps to determine if another step is needed.\n    let stepFinish!: DelayedPromise<void>;\n\n    let recordedContent: Array<ContentPart<TOOLS>> = [];\n    const recordedResponseMessages: Array<ResponseMessage> = [];\n    let recordedFinishReason: FinishReason | undefined = undefined;\n    let recordedTotalUsage: LanguageModelUsage | undefined = undefined;\n    let recordedRequest: LanguageModelRequestMetadata = {};\n    let recordedWarnings: Array<CallWarning> = [];\n    const recordedSteps: StepResult<TOOLS>[] = [];\n\n    let rootSpan!: Span;\n\n    let activeTextContent: Record<\n      string,\n      {\n        type: 'text';\n        text: string;\n        providerMetadata: ProviderMetadata | undefined;\n      }\n    > = {};\n\n    let activeReasoningContent: Record<\n      string,\n      {\n        type: 'reasoning';\n        text: string;\n        providerMetadata: ProviderMetadata | undefined;\n      }\n    > = {};\n\n    const eventProcessor = new TransformStream<\n      EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n      EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>\n    >({\n      async transform(chunk, controller) {\n        controller.enqueue(chunk); // forward the chunk to the next stream\n\n        const { part } = chunk;\n\n        if (\n          part.type === 'text-delta' ||\n          part.type === 'reasoning-delta' ||\n          part.type === 'source' ||\n          part.type === 'tool-call' ||\n          part.type === 'tool-result' ||\n          part.type === 'tool-input-start' ||\n          part.type === 'tool-input-delta' ||\n          part.type === 'raw'\n        ) {\n          await onChunk?.({ chunk: part });\n        }\n\n        if (part.type === 'error') {\n          await onError({ error: wrapGatewayError(part.error) });\n        }\n\n        if (part.type === 'text-start') {\n          activeTextContent[part.id] = {\n            type: 'text',\n            text: '',\n            providerMetadata: part.providerMetadata,\n          };\n\n          recordedContent.push(activeTextContent[part.id]);\n        }\n\n        if (part.type === 'text-delta') {\n          const activeText = activeTextContent[part.id];\n\n          if (activeText == null) {\n            controller.enqueue({\n              part: {\n                type: 'error',\n                error: `text part ${part.id} not found`,\n              },\n              partialOutput: undefined,\n            });\n            return;\n          }\n\n          activeText.text += part.text;\n          activeText.providerMetadata =\n            part.providerMetadata ?? activeText.providerMetadata;\n        }\n\n        if (part.type === 'text-end') {\n          const activeText = activeTextContent[part.id];\n\n          if (activeText == null) {\n            controller.enqueue({\n              part: {\n                type: 'error',\n                error: `text part ${part.id} not found`,\n              },\n              partialOutput: undefined,\n            });\n            return;\n          }\n\n          activeText.providerMetadata =\n            part.providerMetadata ?? activeText.providerMetadata;\n\n          delete activeTextContent[part.id];\n        }\n\n        if (part.type === 'reasoning-start') {\n          activeReasoningContent[part.id] = {\n            type: 'reasoning',\n            text: '',\n            providerMetadata: part.providerMetadata,\n          };\n\n          recordedContent.push(activeReasoningContent[part.id]);\n        }\n\n        if (part.type === 'reasoning-delta') {\n          const activeReasoning = activeReasoningContent[part.id];\n\n          if (activeReasoning == null) {\n            controller.enqueue({\n              part: {\n                type: 'error',\n                error: `reasoning part ${part.id} not found`,\n              },\n              partialOutput: undefined,\n            });\n            return;\n          }\n\n          activeReasoning.text += part.text;\n          activeReasoning.providerMetadata =\n            part.providerMetadata ?? activeReasoning.providerMetadata;\n        }\n\n        if (part.type === 'reasoning-end') {\n          const activeReasoning = activeReasoningContent[part.id];\n\n          if (activeReasoning == null) {\n            controller.enqueue({\n              part: {\n                type: 'error',\n                error: `reasoning part ${part.id} not found`,\n              },\n              partialOutput: undefined,\n            });\n            return;\n          }\n\n          activeReasoning.providerMetadata =\n            part.providerMetadata ?? activeReasoning.providerMetadata;\n\n          delete activeReasoningContent[part.id];\n        }\n\n        if (part.type === 'file') {\n          recordedContent.push({ type: 'file', file: part.file });\n        }\n\n        if (part.type === 'source') {\n          recordedContent.push(part);\n        }\n\n        if (part.type === 'tool-call') {\n          recordedContent.push(part);\n        }\n\n        if (part.type === 'tool-result' && !part.preliminary) {\n          recordedContent.push(part);\n        }\n\n        if (part.type === 'tool-error') {\n          recordedContent.push(part);\n        }\n\n        if (part.type === 'start-step') {\n          recordedRequest = part.request;\n          recordedWarnings = part.warnings;\n        }\n\n        if (part.type === 'finish-step') {\n          const stepMessages = toResponseMessages({\n            content: recordedContent,\n            tools,\n          });\n\n          // Add step information (after response messages are updated):\n          const currentStepResult: StepResult<TOOLS> = new DefaultStepResult({\n            content: recordedContent,\n            finishReason: part.finishReason,\n            usage: part.usage,\n            warnings: recordedWarnings,\n            request: recordedRequest,\n            response: {\n              ...part.response,\n              messages: [...recordedResponseMessages, ...stepMessages],\n            },\n            providerMetadata: part.providerMetadata,\n          });\n\n          await onStepFinish?.(currentStepResult);\n\n          logWarnings(recordedWarnings);\n\n          recordedSteps.push(currentStepResult);\n\n          recordedContent = [];\n          activeReasoningContent = {};\n          activeTextContent = {};\n\n          recordedResponseMessages.push(...stepMessages);\n\n          // resolve the promise to signal that the step has been fully processed\n          // by the event processor:\n          stepFinish.resolve();\n        }\n\n        if (part.type === 'finish') {\n          recordedTotalUsage = part.totalUsage;\n          recordedFinishReason = part.finishReason;\n        }\n      },\n\n      async flush(controller) {\n        try {\n          if (recordedSteps.length === 0) {\n            const error = new NoOutputGeneratedError({\n              message: 'No output generated. Check the stream for errors.',\n            });\n\n            self._finishReason.reject(error);\n            self._totalUsage.reject(error);\n            self._steps.reject(error);\n\n            return; // no steps recorded (e.g. in error scenario)\n          }\n\n          // derived:\n          const finishReason = recordedFinishReason ?? 'unknown';\n          const totalUsage = recordedTotalUsage ?? {\n            inputTokens: undefined,\n            outputTokens: undefined,\n            totalTokens: undefined,\n          };\n\n          // from finish:\n          self._finishReason.resolve(finishReason);\n          self._totalUsage.resolve(totalUsage);\n\n          // aggregate results:\n          self._steps.resolve(recordedSteps);\n\n          // call onFinish callback:\n          const finalStep = recordedSteps[recordedSteps.length - 1];\n          await onFinish?.({\n            finishReason,\n            totalUsage,\n            usage: finalStep.usage,\n            content: finalStep.content,\n            text: finalStep.text,\n            reasoningText: finalStep.reasoningText,\n            reasoning: finalStep.reasoning,\n            files: finalStep.files,\n            sources: finalStep.sources,\n            toolCalls: finalStep.toolCalls,\n            staticToolCalls: finalStep.staticToolCalls,\n            dynamicToolCalls: finalStep.dynamicToolCalls,\n            toolResults: finalStep.toolResults,\n            staticToolResults: finalStep.staticToolResults,\n            dynamicToolResults: finalStep.dynamicToolResults,\n            request: finalStep.request,\n            response: finalStep.response,\n            warnings: finalStep.warnings,\n            providerMetadata: finalStep.providerMetadata,\n            steps: recordedSteps,\n          });\n\n          // Add response information to the root span:\n          rootSpan.setAttributes(\n            selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                'ai.response.finishReason': finishReason,\n                'ai.response.text': { output: () => finalStep.text },\n                'ai.response.toolCalls': {\n                  output: () =>\n                    finalStep.toolCalls?.length\n                      ? JSON.stringify(finalStep.toolCalls)\n                      : undefined,\n                },\n                'ai.response.providerMetadata': JSON.stringify(\n                  finalStep.providerMetadata,\n                ),\n\n                'ai.usage.inputTokens': totalUsage.inputTokens,\n                'ai.usage.outputTokens': totalUsage.outputTokens,\n                'ai.usage.totalTokens': totalUsage.totalTokens,\n                'ai.usage.reasoningTokens': totalUsage.reasoningTokens,\n                'ai.usage.cachedInputTokens': totalUsage.cachedInputTokens,\n              },\n            }),\n          );\n        } catch (error) {\n          controller.error(error);\n        } finally {\n          rootSpan.end();\n        }\n      },\n    });\n\n    // initialize the stitchable stream and the transformed stream:\n    const stitchableStream = createStitchableStream<TextStreamPart<TOOLS>>();\n    this.addStream = stitchableStream.addStream;\n    this.closeStream = stitchableStream.close;\n\n    // resilient stream that handles abort signals and errors:\n    const reader = stitchableStream.stream.getReader();\n    let stream = new ReadableStream<TextStreamPart<TOOLS>>({\n      async start(controller) {\n        // send start event:\n        controller.enqueue({ type: 'start' });\n      },\n\n      async pull(controller) {\n        // abort handling:\n        function abort() {\n          onAbort?.({ steps: recordedSteps });\n          controller.enqueue({ type: 'abort' });\n          controller.close();\n        }\n\n        try {\n          const { done, value } = await reader.read();\n\n          if (done) {\n            controller.close();\n            return;\n          }\n\n          if (abortSignal?.aborted) {\n            abort();\n            return;\n          }\n\n          controller.enqueue(value);\n        } catch (error) {\n          if (isAbortError(error) && abortSignal?.aborted) {\n            abort();\n          } else {\n            controller.error(error);\n          }\n        }\n      },\n\n      cancel(reason) {\n        return stitchableStream.stream.cancel(reason);\n      },\n    });\n\n    // transform the stream before output parsing\n    // to enable replacement of stream segments:\n    for (const transform of transforms) {\n      stream = stream.pipeThrough(\n        transform({\n          tools: tools as TOOLS,\n          stopStream() {\n            stitchableStream.terminate();\n          },\n        }),\n      );\n    }\n\n    this.baseStream = stream\n      .pipeThrough(createOutputTransformStream(output))\n      .pipeThrough(eventProcessor);\n\n    const { maxRetries, retry } = prepareRetries({\n      maxRetries: maxRetriesArg,\n      abortSignal,\n    });\n\n    const tracer = getTracer(telemetry);\n\n    const callSettings = prepareCallSettings(settings);\n\n    const baseTelemetryAttributes = getBaseTelemetryAttributes({\n      model,\n      telemetry,\n      headers,\n      settings: { ...callSettings, maxRetries },\n    });\n\n    const self = this;\n\n    recordSpan({\n      name: 'ai.streamText',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({ operationId: 'ai.streamText', telemetry }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n        },\n      }),\n      tracer,\n      endWhenDone: false,\n      fn: async rootSpanArg => {\n        rootSpan = rootSpanArg;\n\n        async function streamStep({\n          currentStep,\n          responseMessages,\n          usage,\n        }: {\n          currentStep: number;\n          responseMessages: Array<ResponseMessage>;\n          usage: LanguageModelUsage;\n        }) {\n          const includeRawChunks = self.includeRawChunks;\n\n          stepFinish = new DelayedPromise<void>();\n\n          const initialPrompt = await standardizePrompt({\n            system,\n            prompt,\n            messages,\n          } as Prompt);\n\n          const stepInputMessages = [\n            ...initialPrompt.messages,\n            ...responseMessages,\n          ];\n\n          const prepareStepResult = await prepareStep?.({\n            model,\n            steps: recordedSteps,\n            stepNumber: recordedSteps.length,\n            messages: stepInputMessages,\n          });\n\n          const stepModel = resolveLanguageModel(\n            prepareStepResult?.model ?? model,\n          );\n\n          const promptMessages = await convertToLanguageModelPrompt({\n            prompt: {\n              system: prepareStepResult?.system ?? initialPrompt.system,\n              messages: prepareStepResult?.messages ?? stepInputMessages,\n            },\n            supportedUrls: await stepModel.supportedUrls,\n            download,\n          });\n\n          const { toolChoice: stepToolChoice, tools: stepTools } =\n            prepareToolsAndToolChoice({\n              tools,\n              toolChoice: prepareStepResult?.toolChoice ?? toolChoice,\n              activeTools: prepareStepResult?.activeTools ?? activeTools,\n            });\n\n          const {\n            result: { stream, response, request },\n            doStreamSpan,\n            startTimestampMs,\n          } = await retry(() =>\n            recordSpan({\n              name: 'ai.streamText.doStream',\n              attributes: selectTelemetryAttributes({\n                telemetry,\n                attributes: {\n                  ...assembleOperationName({\n                    operationId: 'ai.streamText.doStream',\n                    telemetry,\n                  }),\n                  ...baseTelemetryAttributes,\n                  // model:\n                  'ai.model.provider': stepModel.provider,\n                  'ai.model.id': stepModel.modelId,\n                  // prompt:\n                  'ai.prompt.messages': {\n                    input: () => stringifyForTelemetry(promptMessages),\n                  },\n                  'ai.prompt.tools': {\n                    // convert the language model level tools:\n                    input: () => stepTools?.map(tool => JSON.stringify(tool)),\n                  },\n                  'ai.prompt.toolChoice': {\n                    input: () =>\n                      stepToolChoice != null\n                        ? JSON.stringify(stepToolChoice)\n                        : undefined,\n                  },\n\n                  // standardized gen-ai llm span attributes:\n                  'gen_ai.system': stepModel.provider,\n                  'gen_ai.request.model': stepModel.modelId,\n                  'gen_ai.request.frequency_penalty':\n                    callSettings.frequencyPenalty,\n                  'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n                  'gen_ai.request.presence_penalty':\n                    callSettings.presencePenalty,\n                  'gen_ai.request.stop_sequences': callSettings.stopSequences,\n                  'gen_ai.request.temperature': callSettings.temperature,\n                  'gen_ai.request.top_k': callSettings.topK,\n                  'gen_ai.request.top_p': callSettings.topP,\n                },\n              }),\n              tracer,\n              endWhenDone: false,\n              fn: async doStreamSpan => {\n                return {\n                  startTimestampMs: now(), // get before the call\n                  doStreamSpan,\n                  result: await stepModel.doStream({\n                    ...callSettings,\n                    tools: stepTools,\n                    toolChoice: stepToolChoice,\n                    responseFormat: output?.responseFormat,\n                    prompt: promptMessages,\n                    providerOptions,\n                    abortSignal,\n                    headers,\n                    includeRawChunks,\n                  }),\n                };\n              },\n            }),\n          );\n\n          const streamWithToolResults = runToolsTransformation({\n            tools,\n            generatorStream: stream,\n            tracer,\n            telemetry,\n            system,\n            messages: stepInputMessages,\n            repairToolCall,\n            abortSignal,\n            experimental_context,\n          });\n\n          const stepRequest = request ?? {};\n          const stepToolCalls: TypedToolCall<TOOLS>[] = [];\n          const stepToolOutputs: ToolOutput<TOOLS>[] = [];\n          let warnings: LanguageModelV2CallWarning[] | undefined;\n\n          const activeToolCallToolNames: Record<string, string> = {};\n\n          let stepFinishReason: FinishReason = 'unknown';\n          let stepUsage: LanguageModelUsage = {\n            inputTokens: undefined,\n            outputTokens: undefined,\n            totalTokens: undefined,\n          };\n          let stepProviderMetadata: ProviderMetadata | undefined;\n          let stepFirstChunk = true;\n          let stepResponse: { id: string; timestamp: Date; modelId: string } = {\n            id: generateId(),\n            timestamp: currentDate(),\n            modelId: model.modelId,\n          };\n\n          // raw text as it comes from the provider. recorded for telemetry.\n          let activeText = '';\n\n          self.addStream(\n            streamWithToolResults.pipeThrough(\n              new TransformStream<\n                SingleRequestTextStreamPart<TOOLS>,\n                TextStreamPart<TOOLS>\n              >({\n                async transform(chunk, controller): Promise<void> {\n                  if (chunk.type === 'stream-start') {\n                    warnings = chunk.warnings;\n                    return; // stream start chunks are sent immediately and do not count as first chunk\n                  }\n\n                  if (stepFirstChunk) {\n                    // Telemetry for first chunk:\n                    const msToFirstChunk = now() - startTimestampMs;\n\n                    stepFirstChunk = false;\n\n                    doStreamSpan.addEvent('ai.stream.firstChunk', {\n                      'ai.response.msToFirstChunk': msToFirstChunk,\n                    });\n\n                    doStreamSpan.setAttributes({\n                      'ai.response.msToFirstChunk': msToFirstChunk,\n                    });\n\n                    // Step start:\n                    controller.enqueue({\n                      type: 'start-step',\n                      request: stepRequest,\n                      warnings: warnings ?? [],\n                    });\n                  }\n\n                  const chunkType = chunk.type;\n                  switch (chunkType) {\n                    case 'text-start':\n                    case 'text-end': {\n                      controller.enqueue(chunk);\n                      break;\n                    }\n\n                    case 'text-delta': {\n                      if (chunk.delta.length > 0) {\n                        controller.enqueue({\n                          type: 'text-delta',\n                          id: chunk.id,\n                          text: chunk.delta,\n                          providerMetadata: chunk.providerMetadata,\n                        });\n                        activeText += chunk.delta;\n                      }\n                      break;\n                    }\n\n                    case 'reasoning-start':\n                    case 'reasoning-end': {\n                      controller.enqueue(chunk);\n                      break;\n                    }\n\n                    case 'reasoning-delta': {\n                      controller.enqueue({\n                        type: 'reasoning-delta',\n                        id: chunk.id,\n                        text: chunk.delta,\n                        providerMetadata: chunk.providerMetadata,\n                      });\n                      break;\n                    }\n\n                    case 'tool-call': {\n                      controller.enqueue(chunk);\n                      // store tool calls for onFinish callback and toolCalls promise:\n                      stepToolCalls.push(chunk);\n                      break;\n                    }\n\n                    case 'tool-result': {\n                      controller.enqueue(chunk);\n\n                      if (!chunk.preliminary) {\n                        stepToolOutputs.push(chunk);\n                      }\n\n                      break;\n                    }\n\n                    case 'tool-error': {\n                      controller.enqueue(chunk);\n                      stepToolOutputs.push(chunk);\n                      break;\n                    }\n\n                    case 'response-metadata': {\n                      stepResponse = {\n                        id: chunk.id ?? stepResponse.id,\n                        timestamp: chunk.timestamp ?? stepResponse.timestamp,\n                        modelId: chunk.modelId ?? stepResponse.modelId,\n                      };\n                      break;\n                    }\n\n                    case 'finish': {\n                      // Note: tool executions might not be finished yet when the finish event is emitted.\n                      // store usage and finish reason for promises and onFinish callback:\n                      stepUsage = chunk.usage;\n                      stepFinishReason = chunk.finishReason;\n                      stepProviderMetadata = chunk.providerMetadata;\n\n                      // Telemetry for finish event timing\n                      // (since tool executions can take longer and distort calculations)\n                      const msToFinish = now() - startTimestampMs;\n                      doStreamSpan.addEvent('ai.stream.finish');\n                      doStreamSpan.setAttributes({\n                        'ai.response.msToFinish': msToFinish,\n                        'ai.response.avgOutputTokensPerSecond':\n                          (1000 * (stepUsage.outputTokens ?? 0)) / msToFinish,\n                      });\n\n                      break;\n                    }\n\n                    case 'file': {\n                      controller.enqueue(chunk);\n                      break;\n                    }\n\n                    case 'source': {\n                      controller.enqueue(chunk);\n                      break;\n                    }\n\n                    case 'tool-input-start': {\n                      activeToolCallToolNames[chunk.id] = chunk.toolName;\n\n                      const tool = tools?.[chunk.toolName];\n                      if (tool?.onInputStart != null) {\n                        await tool.onInputStart({\n                          toolCallId: chunk.id,\n                          messages: stepInputMessages,\n                          abortSignal,\n                          experimental_context,\n                        });\n                      }\n\n                      controller.enqueue({\n                        ...chunk,\n                        dynamic: tool?.type === 'dynamic',\n                      });\n                      break;\n                    }\n\n                    case 'tool-input-end': {\n                      delete activeToolCallToolNames[chunk.id];\n                      controller.enqueue(chunk);\n                      break;\n                    }\n\n                    case 'tool-input-delta': {\n                      const toolName = activeToolCallToolNames[chunk.id];\n                      const tool = tools?.[toolName];\n\n                      if (tool?.onInputDelta != null) {\n                        await tool.onInputDelta({\n                          inputTextDelta: chunk.delta,\n                          toolCallId: chunk.id,\n                          messages: stepInputMessages,\n                          abortSignal,\n                          experimental_context,\n                        });\n                      }\n\n                      controller.enqueue(chunk);\n                      break;\n                    }\n\n                    case 'error': {\n                      controller.enqueue(chunk);\n                      stepFinishReason = 'error';\n                      break;\n                    }\n\n                    case 'raw': {\n                      if (includeRawChunks) {\n                        controller.enqueue(chunk);\n                      }\n                      break;\n                    }\n\n                    default: {\n                      const exhaustiveCheck: never = chunkType;\n                      throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n                    }\n                  }\n                },\n\n                // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n                async flush(controller) {\n                  const stepToolCallsJson =\n                    stepToolCalls.length > 0\n                      ? JSON.stringify(stepToolCalls)\n                      : undefined;\n\n                  // record telemetry information first to ensure best effort timing\n                  try {\n                    doStreamSpan.setAttributes(\n                      selectTelemetryAttributes({\n                        telemetry,\n                        attributes: {\n                          'ai.response.finishReason': stepFinishReason,\n                          'ai.response.text': {\n                            output: () => activeText,\n                          },\n                          'ai.response.toolCalls': {\n                            output: () => stepToolCallsJson,\n                          },\n                          'ai.response.id': stepResponse.id,\n                          'ai.response.model': stepResponse.modelId,\n                          'ai.response.timestamp':\n                            stepResponse.timestamp.toISOString(),\n                          'ai.response.providerMetadata':\n                            JSON.stringify(stepProviderMetadata),\n\n                          'ai.usage.inputTokens': stepUsage.inputTokens,\n                          'ai.usage.outputTokens': stepUsage.outputTokens,\n                          'ai.usage.totalTokens': stepUsage.totalTokens,\n                          'ai.usage.reasoningTokens': stepUsage.reasoningTokens,\n                          'ai.usage.cachedInputTokens':\n                            stepUsage.cachedInputTokens,\n\n                          // standardized gen-ai llm span attributes:\n                          'gen_ai.response.finish_reasons': [stepFinishReason],\n                          'gen_ai.response.id': stepResponse.id,\n                          'gen_ai.response.model': stepResponse.modelId,\n                          'gen_ai.usage.input_tokens': stepUsage.inputTokens,\n                          'gen_ai.usage.output_tokens': stepUsage.outputTokens,\n                        },\n                      }),\n                    );\n                  } catch (error) {\n                    // ignore error setting telemetry attributes\n                  } finally {\n                    // finish doStreamSpan before other operations for correct timing:\n                    doStreamSpan.end();\n                  }\n\n                  controller.enqueue({\n                    type: 'finish-step',\n                    finishReason: stepFinishReason,\n                    usage: stepUsage,\n                    providerMetadata: stepProviderMetadata,\n                    response: {\n                      ...stepResponse,\n                      headers: response?.headers,\n                    },\n                  });\n\n                  const combinedUsage = addLanguageModelUsage(usage, stepUsage);\n\n                  // wait for the step to be fully processed by the event processor\n                  // to ensure that the recorded steps are complete:\n                  await stepFinish.promise;\n\n                  const clientToolCalls = stepToolCalls.filter(\n                    toolCall => toolCall.providerExecuted !== true,\n                  );\n                  const clientToolOutputs = stepToolOutputs.filter(\n                    toolOutput => toolOutput.providerExecuted !== true,\n                  );\n\n                  if (\n                    clientToolCalls.length > 0 &&\n                    // all current tool calls have outputs (incl. execution errors):\n                    clientToolOutputs.length === clientToolCalls.length &&\n                    // continue until a stop condition is met:\n                    !(await isStopConditionMet({\n                      stopConditions,\n                      steps: recordedSteps,\n                    }))\n                  ) {\n                    // append to messages for the next step:\n                    responseMessages.push(\n                      ...toResponseMessages({\n                        content:\n                          // use transformed content to create the messages for the next step:\n                          recordedSteps[recordedSteps.length - 1].content,\n                        tools,\n                      }),\n                    );\n\n                    try {\n                      await streamStep({\n                        currentStep: currentStep + 1,\n                        responseMessages,\n                        usage: combinedUsage,\n                      });\n                    } catch (error) {\n                      controller.enqueue({\n                        type: 'error',\n                        error,\n                      });\n\n                      self.closeStream();\n                    }\n                  } else {\n                    controller.enqueue({\n                      type: 'finish',\n                      finishReason: stepFinishReason,\n                      totalUsage: combinedUsage,\n                    });\n\n                    self.closeStream(); // close the stitchable stream\n                  }\n                },\n              }),\n            ),\n          );\n        }\n\n        // add the initial stream to the stitchable stream\n        await streamStep({\n          currentStep: 0,\n          responseMessages: [],\n          usage: {\n            inputTokens: undefined,\n            outputTokens: undefined,\n            totalTokens: undefined,\n          },\n        });\n      },\n    }).catch(error => {\n      // add an error stream part and close the streams:\n      self.addStream(\n        new ReadableStream({\n          start(controller) {\n            controller.enqueue({ type: 'error', error });\n            controller.close();\n          },\n        }),\n      );\n      self.closeStream();\n    });\n  }\n\n  get steps() {\n    // when any of the promises are accessed, the stream is consumed\n    // so it resolves without needing to consume the stream separately\n    this.consumeStream();\n\n    return this._steps.promise;\n  }\n\n  private get finalStep() {\n    return this.steps.then(steps => steps[steps.length - 1]);\n  }\n\n  get content() {\n    return this.finalStep.then(step => step.content);\n  }\n\n  get warnings() {\n    return this.finalStep.then(step => step.warnings);\n  }\n\n  get providerMetadata() {\n    return this.finalStep.then(step => step.providerMetadata);\n  }\n\n  get text() {\n    return this.finalStep.then(step => step.text);\n  }\n\n  get reasoningText() {\n    return this.finalStep.then(step => step.reasoningText);\n  }\n\n  get reasoning() {\n    return this.finalStep.then(step => step.reasoning);\n  }\n\n  get sources() {\n    return this.finalStep.then(step => step.sources);\n  }\n\n  get files() {\n    return this.finalStep.then(step => step.files);\n  }\n\n  get toolCalls() {\n    return this.finalStep.then(step => step.toolCalls);\n  }\n\n  get staticToolCalls() {\n    return this.finalStep.then(step => step.staticToolCalls);\n  }\n\n  get dynamicToolCalls() {\n    return this.finalStep.then(step => step.dynamicToolCalls);\n  }\n\n  get toolResults() {\n    return this.finalStep.then(step => step.toolResults);\n  }\n\n  get staticToolResults() {\n    return this.finalStep.then(step => step.staticToolResults);\n  }\n\n  get dynamicToolResults() {\n    return this.finalStep.then(step => step.dynamicToolResults);\n  }\n\n  get usage() {\n    return this.finalStep.then(step => step.usage);\n  }\n\n  get request() {\n    return this.finalStep.then(step => step.request);\n  }\n\n  get response() {\n    return this.finalStep.then(step => step.response);\n  }\n\n  get totalUsage() {\n    // when any of the promises are accessed, the stream is consumed\n    // so it resolves without needing to consume the stream separately\n    this.consumeStream();\n\n    return this._totalUsage.promise;\n  }\n\n  get finishReason() {\n    // when any of the promises are accessed, the stream is consumed\n    // so it resolves without needing to consume the stream separately\n    this.consumeStream();\n\n    return this._finishReason.promise;\n  }\n\n  /**\nSplit out a new stream from the original stream.\nThe original stream is replaced to allow for further splitting,\nsince we do not know how many times the stream will be split.\n\nNote: this leads to buffering the stream content on the server.\nHowever, the LLM results are expected to be small enough to not cause issues.\n   */\n  private teeStream() {\n    const [stream1, stream2] = this.baseStream.tee();\n    this.baseStream = stream2;\n    return stream1;\n  }\n\n  get textStream(): AsyncIterableStream<string> {\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream<EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>, string>({\n          transform({ part }, controller) {\n            if (part.type === 'text-delta') {\n              controller.enqueue(part.text);\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get fullStream(): AsyncIterableStream<TextStreamPart<TOOLS>> {\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream<\n          EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n          TextStreamPart<TOOLS>\n        >({\n          transform({ part }, controller) {\n            controller.enqueue(part);\n          },\n        }),\n      ),\n    );\n  }\n\n  async consumeStream(options?: ConsumeStreamOptions): Promise<void> {\n    try {\n      await consumeStream({\n        stream: this.fullStream,\n        onError: options?.onError,\n      });\n    } catch (error) {\n      options?.onError?.(error);\n    }\n  }\n\n  get experimental_partialOutputStream(): AsyncIterableStream<PARTIAL_OUTPUT> {\n    if (this.output == null) {\n      throw new NoOutputSpecifiedError();\n    }\n\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream<\n          EnrichedStreamPart<TOOLS, PARTIAL_OUTPUT>,\n          PARTIAL_OUTPUT\n        >({\n          transform({ partialOutput }, controller) {\n            if (partialOutput != null) {\n              controller.enqueue(partialOutput);\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  toUIMessageStream<UI_MESSAGE extends UIMessage>({\n    originalMessages,\n    generateMessageId,\n    onFinish,\n    messageMetadata,\n    sendReasoning = true,\n    sendSources = false,\n    sendStart = true,\n    sendFinish = true,\n    onError = getErrorMessage,\n  }: UIMessageStreamOptions<UI_MESSAGE> = {}): AsyncIterableStream<\n    InferUIMessageChunk<UI_MESSAGE>\n  > {\n    const responseMessageId =\n      generateMessageId != null\n        ? getResponseUIMessageId({\n            originalMessages,\n            responseMessageId: generateMessageId,\n          })\n        : undefined;\n\n    const toolNamesByCallId: Record<string, string> = {};\n\n    const isDynamic = (toolCallId: string) => {\n      const toolName = toolNamesByCallId[toolCallId];\n      const dynamic = this.tools?.[toolName]?.type === 'dynamic';\n      return dynamic ? true : undefined; // only send when dynamic to reduce data transfer\n    };\n\n    const baseStream = this.fullStream.pipeThrough(\n      new TransformStream<\n        TextStreamPart<TOOLS>,\n        UIMessageChunk<\n          InferUIMessageMetadata<UI_MESSAGE>,\n          InferUIMessageData<UI_MESSAGE>\n        >\n      >({\n        transform: async (part, controller) => {\n          const messageMetadataValue = messageMetadata?.({ part });\n\n          const partType = part.type;\n          switch (partType) {\n            case 'text-start': {\n              controller.enqueue({\n                type: 'text-start',\n                id: part.id,\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n              });\n              break;\n            }\n\n            case 'text-delta': {\n              controller.enqueue({\n                type: 'text-delta',\n                id: part.id,\n                delta: part.text,\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n              });\n              break;\n            }\n\n            case 'text-end': {\n              controller.enqueue({\n                type: 'text-end',\n                id: part.id,\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n              });\n              break;\n            }\n\n            case 'reasoning-start': {\n              controller.enqueue({\n                type: 'reasoning-start',\n                id: part.id,\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n              });\n              break;\n            }\n\n            case 'reasoning-delta': {\n              if (sendReasoning) {\n                controller.enqueue({\n                  type: 'reasoning-delta',\n                  id: part.id,\n                  delta: part.text,\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                });\n              }\n              break;\n            }\n\n            case 'reasoning-end': {\n              controller.enqueue({\n                type: 'reasoning-end',\n                id: part.id,\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n              });\n              break;\n            }\n\n            case 'file': {\n              controller.enqueue({\n                type: 'file',\n                mediaType: part.file.mediaType,\n                url: `data:${part.file.mediaType};base64,${part.file.base64}`,\n              });\n              break;\n            }\n\n            case 'source': {\n              if (sendSources && part.sourceType === 'url') {\n                controller.enqueue({\n                  type: 'source-url',\n                  sourceId: part.id,\n                  url: part.url,\n                  title: part.title,\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                });\n              }\n\n              if (sendSources && part.sourceType === 'document') {\n                controller.enqueue({\n                  type: 'source-document',\n                  sourceId: part.id,\n                  mediaType: part.mediaType,\n                  title: part.title,\n                  filename: part.filename,\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                });\n              }\n              break;\n            }\n\n            case 'tool-input-start': {\n              toolNamesByCallId[part.id] = part.toolName;\n              const dynamic = isDynamic(part.id);\n\n              controller.enqueue({\n                type: 'tool-input-start',\n                toolCallId: part.id,\n                toolName: part.toolName,\n                ...(part.providerExecuted != null\n                  ? { providerExecuted: part.providerExecuted }\n                  : {}),\n                ...(dynamic != null ? { dynamic } : {}),\n              });\n              break;\n            }\n\n            case 'tool-input-delta': {\n              controller.enqueue({\n                type: 'tool-input-delta',\n                toolCallId: part.id,\n                inputTextDelta: part.delta,\n              });\n              break;\n            }\n\n            case 'tool-call': {\n              toolNamesByCallId[part.toolCallId] = part.toolName;\n              const dynamic = isDynamic(part.toolCallId);\n\n              if (part.invalid) {\n                controller.enqueue({\n                  type: 'tool-input-error',\n                  toolCallId: part.toolCallId,\n                  toolName: part.toolName,\n                  input: part.input,\n                  ...(part.providerExecuted != null\n                    ? { providerExecuted: part.providerExecuted }\n                    : {}),\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                  ...(dynamic != null ? { dynamic } : {}),\n                  errorText: onError(part.error),\n                });\n              } else {\n                controller.enqueue({\n                  type: 'tool-input-available',\n                  toolCallId: part.toolCallId,\n                  toolName: part.toolName,\n                  input: part.input,\n                  ...(part.providerExecuted != null\n                    ? { providerExecuted: part.providerExecuted }\n                    : {}),\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                  ...(dynamic != null ? { dynamic } : {}),\n                });\n              }\n\n              break;\n            }\n\n            case 'tool-result': {\n              const dynamic = isDynamic(part.toolCallId);\n\n              controller.enqueue({\n                type: 'tool-output-available',\n                toolCallId: part.toolCallId,\n                output: part.output,\n                ...(part.providerExecuted != null\n                  ? { providerExecuted: part.providerExecuted }\n                  : {}),\n                ...(part.preliminary != null\n                  ? { preliminary: part.preliminary }\n                  : {}),\n                ...(dynamic != null ? { dynamic } : {}),\n              });\n              break;\n            }\n\n            case 'tool-error': {\n              const dynamic = isDynamic(part.toolCallId);\n\n              controller.enqueue({\n                type: 'tool-output-error',\n                toolCallId: part.toolCallId,\n                errorText: onError(part.error),\n                ...(part.providerExecuted != null\n                  ? { providerExecuted: part.providerExecuted }\n                  : {}),\n                ...(dynamic != null ? { dynamic } : {}),\n              });\n              break;\n            }\n\n            case 'error': {\n              controller.enqueue({\n                type: 'error',\n                errorText: onError(part.error),\n              });\n              break;\n            }\n\n            case 'start-step': {\n              controller.enqueue({ type: 'start-step' });\n              break;\n            }\n\n            case 'finish-step': {\n              controller.enqueue({ type: 'finish-step' });\n              break;\n            }\n\n            case 'start': {\n              if (sendStart) {\n                controller.enqueue({\n                  type: 'start',\n                  ...(messageMetadataValue != null\n                    ? { messageMetadata: messageMetadataValue }\n                    : {}),\n                  ...(responseMessageId != null\n                    ? { messageId: responseMessageId }\n                    : {}),\n                });\n              }\n              break;\n            }\n\n            case 'finish': {\n              if (sendFinish) {\n                controller.enqueue({\n                  type: 'finish',\n                  finishReason: part.finishReason,\n                  ...(messageMetadataValue != null\n                    ? { messageMetadata: messageMetadataValue }\n                    : {}),\n                });\n              }\n              break;\n            }\n\n            case 'abort': {\n              controller.enqueue(part);\n              break;\n            }\n\n            case 'tool-input-end': {\n              break;\n            }\n\n            case 'raw': {\n              // Raw chunks are not included in UI message streams\n              // as they contain provider-specific data for developer use\n              break;\n            }\n\n            default: {\n              const exhaustiveCheck: never = partType;\n              throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n            }\n          }\n\n          // start and finish events already have metadata\n          // so we only need to send metadata for other parts\n          if (\n            messageMetadataValue != null &&\n            partType !== 'start' &&\n            partType !== 'finish'\n          ) {\n            controller.enqueue({\n              type: 'message-metadata',\n              messageMetadata: messageMetadataValue,\n            });\n          }\n        },\n      }),\n    );\n\n    return createAsyncIterableStream(\n      handleUIMessageStreamFinish<UI_MESSAGE>({\n        stream: baseStream,\n        messageId: responseMessageId ?? generateMessageId?.(),\n        originalMessages,\n        onFinish,\n        onError,\n      }),\n    );\n  }\n\n  pipeUIMessageStreamToResponse<UI_MESSAGE extends UIMessage>(\n    response: ServerResponse,\n    {\n      originalMessages,\n      generateMessageId,\n      onFinish,\n      messageMetadata,\n      sendReasoning,\n      sendSources,\n      sendFinish,\n      sendStart,\n      onError,\n      ...init\n    }: UIMessageStreamResponseInit & UIMessageStreamOptions<UI_MESSAGE> = {},\n  ) {\n    pipeUIMessageStreamToResponse({\n      response,\n      stream: this.toUIMessageStream({\n        originalMessages,\n        generateMessageId,\n        onFinish,\n        messageMetadata,\n        sendReasoning,\n        sendSources,\n        sendFinish,\n        sendStart,\n        onError,\n      }),\n      ...init,\n    });\n  }\n\n  pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n    pipeTextStreamToResponse({\n      response,\n      textStream: this.textStream,\n      ...init,\n    });\n  }\n\n  toUIMessageStreamResponse<UI_MESSAGE extends UIMessage>({\n    originalMessages,\n    generateMessageId,\n    onFinish,\n    messageMetadata,\n    sendReasoning,\n    sendSources,\n    sendFinish,\n    sendStart,\n    onError,\n    ...init\n  }: UIMessageStreamResponseInit &\n    UIMessageStreamOptions<UI_MESSAGE> = {}): Response {\n    return createUIMessageStreamResponse({\n      stream: this.toUIMessageStream({\n        originalMessages,\n        generateMessageId,\n        onFinish,\n        messageMetadata,\n        sendReasoning,\n        sendSources,\n        sendFinish,\n        sendStart,\n        onError,\n      }),\n      ...init,\n    });\n  }\n\n  toTextStreamResponse(init?: ResponseInit): Response {\n    return createTextStreamResponse({\n      textStream: this.textStream,\n      ...init,\n    });\n  }\n}\n","/**\n * Splits an array into chunks of a specified size.\n *\n * @template T - The type of elements in the array.\n * @param {T[]} array - The array to split.\n * @param {number} chunkSize - The size of each chunk.\n * @returns {T[][]} - A new array containing the chunks.\n */\nexport function splitArray<T>(array: T[], chunkSize: number): T[][] {\n  if (chunkSize <= 0) {\n    throw new Error('chunkSize must be greater than 0');\n  }\n\n  const result = [];\n  for (let i = 0; i < array.length; i += chunkSize) {\n    result.push(array.slice(i, i + chunkSize));\n  }\n\n  return result;\n}\n","import { ProviderOptions, withUserAgentSuffix } from '@ai-sdk/provider-utils';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { splitArray } from '../util/split-array';\nimport { UnsupportedModelVersionError } from '../error/unsupported-model-version-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { Embedding, EmbeddingModel, ProviderMetadata } from '../types';\nimport { resolveEmbeddingModel } from '../model/resolve-model';\nimport { EmbedManyResult } from './embed-many-result';\nimport { VERSION } from '../version';\n\n/**\nEmbed several values using an embedding model. The type of the value is defined\nby the embedding model.\n\n`embedMany` automatically splits large requests into smaller chunks if the model\nhas a limit on how many embeddings can be generated in a single call.\n\n@param model - The embedding model to use.\n@param values - The values that should be embedded.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@returns A result object that contains the embeddings, the value, and additional information.\n */\nexport async function embedMany<VALUE = string>({\n  model: modelArg,\n  values,\n  maxParallelCalls = Infinity,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers,\n  providerOptions,\n  experimental_telemetry: telemetry,\n}: {\n  /**\nThe embedding model to use.\n     */\n  model: EmbeddingModel<VALUE>;\n\n  /**\nThe values that should be embedded.\n   */\n  values: Array<VALUE>;\n\n  /**\nMaximum number of retries per embedding model call. Set to 0 to disable retries.\n\n@default 2\n   */\n  maxRetries?: number;\n\n  /**\nAbort signal.\n */\n  abortSignal?: AbortSignal;\n\n  /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n  headers?: Record<string, string>;\n\n  /**\n   * Optional telemetry configuration (experimental).\n   */\n  experimental_telemetry?: TelemetrySettings;\n\n  /**\n  Additional provider-specific options. They are passed through\n  to the provider from the AI SDK and enable provider-specific\n  functionality that can be fully encapsulated in the provider.\n  */\n  providerOptions?: ProviderOptions;\n\n  /**\n   * Maximum number of concurrent requests.\n   *\n   * @default Infinity\n   */\n  maxParallelCalls?: number;\n}): Promise<EmbedManyResult<VALUE>> {\n  const model = resolveEmbeddingModel<VALUE>(modelArg);\n\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal,\n  });\n\n  const headersWithUserAgent = withUserAgentSuffix(\n    headers ?? {},\n    `ai/${VERSION}`,\n  );\n\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { maxRetries },\n  });\n\n  const tracer = getTracer(telemetry);\n\n  return recordSpan({\n    name: 'ai.embedMany',\n    attributes: selectTelemetryAttributes({\n      telemetry,\n      attributes: {\n        ...assembleOperationName({ operationId: 'ai.embedMany', telemetry }),\n        ...baseTelemetryAttributes,\n        // specific settings that only make sense on the outer level:\n        'ai.values': {\n          input: () => values.map(value => JSON.stringify(value)),\n        },\n      },\n    }),\n    tracer,\n    fn: async span => {\n      const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([\n        model.maxEmbeddingsPerCall,\n        model.supportsParallelCalls,\n      ]);\n\n      // the model has not specified limits on\n      // how many embeddings can be generated in a single call\n      if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {\n        const { embeddings, usage, response, providerMetadata } = await retry(\n          () => {\n            // nested spans to align with the embedMany telemetry data:\n            return recordSpan({\n              name: 'ai.embedMany.doEmbed',\n              attributes: selectTelemetryAttributes({\n                telemetry,\n                attributes: {\n                  ...assembleOperationName({\n                    operationId: 'ai.embedMany.doEmbed',\n                    telemetry,\n                  }),\n                  ...baseTelemetryAttributes,\n                  // specific settings that only make sense on the outer level:\n                  'ai.values': {\n                    input: () => values.map(value => JSON.stringify(value)),\n                  },\n                },\n              }),\n              tracer,\n              fn: async doEmbedSpan => {\n                const modelResponse = await model.doEmbed({\n                  values,\n                  abortSignal,\n                  headers: headersWithUserAgent,\n                  providerOptions,\n                });\n\n                const embeddings = modelResponse.embeddings;\n                const usage = modelResponse.usage ?? { tokens: NaN };\n\n                doEmbedSpan.setAttributes(\n                  selectTelemetryAttributes({\n                    telemetry,\n                    attributes: {\n                      'ai.embeddings': {\n                        output: () =>\n                          embeddings.map(embedding =>\n                            JSON.stringify(embedding),\n                          ),\n                      },\n                      'ai.usage.tokens': usage.tokens,\n                    },\n                  }),\n                );\n\n                return {\n                  embeddings,\n                  usage,\n                  providerMetadata: modelResponse.providerMetadata,\n                  response: modelResponse.response,\n                };\n              },\n            });\n          },\n        );\n\n        span.setAttributes(\n          selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              'ai.embeddings': {\n                output: () =>\n                  embeddings.map(embedding => JSON.stringify(embedding)),\n              },\n              'ai.usage.tokens': usage.tokens,\n            },\n          }),\n        );\n\n        return new DefaultEmbedManyResult({\n          values,\n          embeddings,\n          usage,\n          providerMetadata,\n          responses: [response],\n        });\n      }\n\n      // split the values into chunks that are small enough for the model:\n      const valueChunks = splitArray(values, maxEmbeddingsPerCall);\n\n      // serially embed the chunks:\n      const embeddings: Array<Embedding> = [];\n      const responses: Array<\n        | {\n            headers?: Record<string, string>;\n            body?: unknown;\n          }\n        | undefined\n      > = [];\n      let tokens = 0;\n      let providerMetadata: ProviderMetadata | undefined;\n\n      const parallelChunks = splitArray(\n        valueChunks,\n        supportsParallelCalls ? maxParallelCalls : 1,\n      );\n\n      for (const parallelChunk of parallelChunks) {\n        const results = await Promise.all(\n          parallelChunk.map(chunk => {\n            return retry(() => {\n              // nested spans to align with the embedMany telemetry data:\n              return recordSpan({\n                name: 'ai.embedMany.doEmbed',\n                attributes: selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    ...assembleOperationName({\n                      operationId: 'ai.embedMany.doEmbed',\n                      telemetry,\n                    }),\n                    ...baseTelemetryAttributes,\n                    // specific settings that only make sense on the outer level:\n                    'ai.values': {\n                      input: () => chunk.map(value => JSON.stringify(value)),\n                    },\n                  },\n                }),\n                tracer,\n                fn: async doEmbedSpan => {\n                  const modelResponse = await model.doEmbed({\n                    values: chunk,\n                    abortSignal,\n                    headers: headersWithUserAgent,\n                    providerOptions,\n                  });\n\n                  const embeddings = modelResponse.embeddings;\n                  const usage = modelResponse.usage ?? { tokens: NaN };\n\n                  doEmbedSpan.setAttributes(\n                    selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        'ai.embeddings': {\n                          output: () =>\n                            embeddings.map(embedding =>\n                              JSON.stringify(embedding),\n                            ),\n                        },\n                        'ai.usage.tokens': usage.tokens,\n                      },\n                    }),\n                  );\n\n                  return {\n                    embeddings,\n                    usage,\n                    providerMetadata: modelResponse.providerMetadata,\n                    response: modelResponse.response,\n                  };\n                },\n              });\n            });\n          }),\n        );\n\n        for (const result of results) {\n          embeddings.push(...result.embeddings);\n          responses.push(result.response);\n          tokens += result.usage.tokens;\n          if (result.providerMetadata) {\n            if (!providerMetadata) {\n              providerMetadata = { ...result.providerMetadata };\n            } else {\n              for (const [providerName, metadata] of Object.entries(\n                result.providerMetadata,\n              )) {\n                providerMetadata[providerName] = {\n                  ...(providerMetadata[providerName] ?? {}),\n                  ...metadata,\n                };\n              }\n            }\n          }\n        }\n      }\n\n      span.setAttributes(\n        selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            'ai.embeddings': {\n              output: () =>\n                embeddings.map(embedding => JSON.stringify(embedding)),\n            },\n            'ai.usage.tokens': tokens,\n          },\n        }),\n      );\n\n      return new DefaultEmbedManyResult({\n        values,\n        embeddings,\n        usage: { tokens },\n        providerMetadata: providerMetadata,\n        responses,\n      });\n    },\n  });\n}\n\nclass DefaultEmbedManyResult<VALUE> implements EmbedManyResult<VALUE> {\n  readonly values: EmbedManyResult<VALUE>['values'];\n  readonly embeddings: EmbedManyResult<VALUE>['embeddings'];\n  readonly usage: EmbedManyResult<VALUE>['usage'];\n  readonly providerMetadata: EmbedManyResult<VALUE>['providerMetadata'];\n  readonly responses: EmbedManyResult<VALUE>['responses'];\n\n  constructor(options: {\n    values: EmbedManyResult<VALUE>['values'];\n    embeddings: EmbedManyResult<VALUE>['embeddings'];\n    usage: EmbedManyResult<VALUE>['usage'];\n    providerMetadata?: EmbedManyResult<VALUE>['providerMetadata'];\n    responses?: EmbedManyResult<VALUE>['responses'];\n  }) {\n    this.values = options.values;\n    this.embeddings = options.embeddings;\n    this.usage = options.usage;\n    this.providerMetadata = options.providerMetadata;\n    this.responses = options.responses;\n  }\n}\n","import { JSONValue } from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  FlexibleSchema,\n  InferSchema,\n  ProviderOptions,\n  withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { NoObjectGeneratedError } from '../error/no-object-generated-error';\nimport { extractReasoningContent } from '../generate-text/extract-reasoning-content';\nimport { extractTextContent } from '../generate-text/extract-text-content';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n} from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { prepareHeaders } from '../util/prepare-headers';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { VERSION } from '../version';\nimport { GenerateObjectResult } from './generate-object-result';\nimport { getOutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport { RepairTextFunction } from './repair-text';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function does not stream the output. If you want to stream the output, use `streamObject` instead.\n\n@param model - The language model to use.\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxOutputTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param schema - The schema of the object that the model should generate.\n@param schemaName - Optional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n@param schemaDescription - Optional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n\n@param output - The type of the output.\n\n- 'object': The output is an object.\n- 'array': The output is an array.\n- 'enum': The output is an enum.\n- 'no-schema': The output is not a schema.\n\n@param experimental_repairText - A function that attempts to repair the raw output of the model\nto enable JSON parsing.\n\n@param experimental_telemetry - Optional telemetry configuration (experimental).\n\n@param providerOptions - Additional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n\n@returns\nA result object that contains the generated object, the finish reason, the token usage, and additional information.\n */\nexport async function generateObject<\n  SCHEMA extends FlexibleSchema<unknown> = FlexibleSchema<JSONValue>,\n  OUTPUT extends 'object' | 'array' | 'enum' | 'no-schema' =\n    InferSchema<SCHEMA> extends string ? 'enum' : 'object',\n  RESULT = OUTPUT extends 'array'\n    ? Array<InferSchema<SCHEMA>>\n    : InferSchema<SCHEMA>,\n>(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt &\n    (OUTPUT extends 'enum'\n      ? {\n          /**\nThe enum values that the model should use.\n        */\n          enum: Array<RESULT>;\n          output: 'enum';\n        }\n      : OUTPUT extends 'no-schema'\n        ? {}\n        : {\n            /**\nThe schema of the object that the model should generate.\n        */\n            schema: SCHEMA;\n\n            /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n        */\n            schemaName?: string;\n\n            /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n        */\n            schemaDescription?: string;\n          }) & {\n      output?: OUTPUT;\n\n      /**\n  The language model to use.\n       */\n      model: LanguageModel;\n      /**\n  A function that attempts to repair the raw output of the model\n  to enable JSON parsing.\n       */\n      experimental_repairText?: RepairTextFunction;\n\n      /**\n  Optional telemetry configuration (experimental).\n         */\n\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\n  Custom download function to use for URLs.\n\n  By default, files are downloaded if the model does not support the URL for the given media type.\n       */\n      experimental_download?: DownloadFunction | undefined;\n\n      /**\n  Additional provider-specific options. They are passed through\n  to the provider from the AI SDK and enable provider-specific\n  functionality that can be fully encapsulated in the provider.\n   */\n      providerOptions?: ProviderOptions;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n      };\n    },\n): Promise<GenerateObjectResult<RESULT>> {\n  const {\n    model: modelArg,\n    output = 'object',\n    system,\n    prompt,\n    messages,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    headers,\n    experimental_repairText: repairText,\n    experimental_telemetry: telemetry,\n    experimental_download: download,\n    providerOptions,\n    _internal: {\n      generateId = originalGenerateId,\n      currentDate = () => new Date(),\n    } = {},\n    ...settings\n  } = options;\n\n  const model = resolveLanguageModel(modelArg);\n\n  const enumValues = 'enum' in options ? options.enum : undefined;\n  const {\n    schema: inputSchema,\n    schemaDescription,\n    schemaName,\n  } = 'schema' in options ? options : {};\n\n  validateObjectGenerationInput({\n    output,\n    schema: inputSchema,\n    schemaName,\n    schemaDescription,\n    enumValues,\n  });\n\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal,\n  });\n\n  const outputStrategy = getOutputStrategy({\n    output,\n    schema: inputSchema,\n    enumValues,\n  });\n\n  const callSettings = prepareCallSettings(settings);\n\n  const headersWithUserAgent = withUserAgentSuffix(\n    headers ?? {},\n    `ai/${VERSION}`,\n  );\n\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { ...callSettings, maxRetries },\n  });\n\n  const tracer = getTracer(telemetry);\n\n  try {\n    return await recordSpan({\n      name: 'ai.generateObject',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: 'ai.generateObject',\n            telemetry,\n          }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n          'ai.schema':\n            outputStrategy.jsonSchema != null\n              ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n              : undefined,\n          'ai.schema.name': schemaName,\n          'ai.schema.description': schemaDescription,\n          'ai.settings.output': outputStrategy.type,\n        },\n      }),\n      tracer,\n      fn: async span => {\n        let result: string;\n        let finishReason: FinishReason;\n        let usage: LanguageModelUsage;\n        let warnings: CallWarning[] | undefined;\n        let response: LanguageModelResponseMetadata;\n        let request: LanguageModelRequestMetadata;\n        let resultProviderMetadata: ProviderMetadata | undefined;\n        let reasoning: string | undefined;\n\n        const standardizedPrompt = await standardizePrompt({\n          system,\n          prompt,\n          messages,\n        } as Prompt);\n\n        const promptMessages = await convertToLanguageModelPrompt({\n          prompt: standardizedPrompt,\n          supportedUrls: await model.supportedUrls,\n          download,\n        });\n\n        const generateResult = await retry(() =>\n          recordSpan({\n            name: 'ai.generateObject.doGenerate',\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: 'ai.generateObject.doGenerate',\n                  telemetry,\n                }),\n                ...baseTelemetryAttributes,\n                'ai.prompt.messages': {\n                  input: () => stringifyForTelemetry(promptMessages),\n                },\n\n                // standardized gen-ai llm span attributes:\n                'gen_ai.system': model.provider,\n                'gen_ai.request.model': model.modelId,\n                'gen_ai.request.frequency_penalty':\n                  callSettings.frequencyPenalty,\n                'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n                'gen_ai.request.presence_penalty': callSettings.presencePenalty,\n                'gen_ai.request.temperature': callSettings.temperature,\n                'gen_ai.request.top_k': callSettings.topK,\n                'gen_ai.request.top_p': callSettings.topP,\n              },\n            }),\n            tracer,\n            fn: async span => {\n              const result = await model.doGenerate({\n                responseFormat: {\n                  type: 'json',\n                  schema: outputStrategy.jsonSchema,\n                  name: schemaName,\n                  description: schemaDescription,\n                },\n                ...prepareCallSettings(settings),\n                prompt: promptMessages,\n                providerOptions,\n                abortSignal,\n                headers: headersWithUserAgent,\n              });\n\n              const responseData = {\n                id: result.response?.id ?? generateId(),\n                timestamp: result.response?.timestamp ?? currentDate(),\n                modelId: result.response?.modelId ?? model.modelId,\n                headers: result.response?.headers,\n                body: result.response?.body,\n              };\n\n              const text = extractTextContent(result.content);\n              const reasoning = extractReasoningContent(result.content);\n\n              if (text === undefined) {\n                throw new NoObjectGeneratedError({\n                  message:\n                    'No object generated: the model did not return a response.',\n                  response: responseData,\n                  usage: result.usage,\n                  finishReason: result.finishReason,\n                });\n              }\n\n              // Add response information to the span:\n              span.setAttributes(\n                selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    'ai.response.finishReason': result.finishReason,\n                    'ai.response.object': { output: () => text },\n                    'ai.response.id': responseData.id,\n                    'ai.response.model': responseData.modelId,\n                    'ai.response.timestamp':\n                      responseData.timestamp.toISOString(),\n                    'ai.response.providerMetadata': JSON.stringify(\n                      result.providerMetadata,\n                    ),\n\n                    // TODO rename telemetry attributes to inputTokens and outputTokens\n                    'ai.usage.promptTokens': result.usage.inputTokens,\n                    'ai.usage.completionTokens': result.usage.outputTokens,\n\n                    // standardized gen-ai llm span attributes:\n                    'gen_ai.response.finish_reasons': [result.finishReason],\n                    'gen_ai.response.id': responseData.id,\n                    'gen_ai.response.model': responseData.modelId,\n                    'gen_ai.usage.input_tokens': result.usage.inputTokens,\n                    'gen_ai.usage.output_tokens': result.usage.outputTokens,\n                  },\n                }),\n              );\n\n              return {\n                ...result,\n                objectText: text,\n                reasoning,\n                responseData,\n              };\n            },\n          }),\n        );\n\n        result = generateResult.objectText;\n        finishReason = generateResult.finishReason;\n        usage = generateResult.usage;\n        warnings = generateResult.warnings;\n        resultProviderMetadata = generateResult.providerMetadata;\n        request = generateResult.request ?? {};\n        response = generateResult.responseData;\n        reasoning = generateResult.reasoning;\n\n        logWarnings(warnings);\n\n        const object = await parseAndValidateObjectResultWithRepair(\n          result,\n          outputStrategy,\n          repairText,\n          {\n            response,\n            usage,\n            finishReason,\n          },\n        );\n\n        // Add response information to the span:\n        span.setAttributes(\n          selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              'ai.response.finishReason': finishReason,\n              'ai.response.object': {\n                output: () => JSON.stringify(object),\n              },\n              'ai.response.providerMetadata': JSON.stringify(\n                resultProviderMetadata,\n              ),\n\n              // TODO rename telemetry attributes to inputTokens and outputTokens\n              'ai.usage.promptTokens': usage.inputTokens,\n              'ai.usage.completionTokens': usage.outputTokens,\n            },\n          }),\n        );\n\n        return new DefaultGenerateObjectResult({\n          object,\n          reasoning,\n          finishReason,\n          usage,\n          warnings,\n          request,\n          response,\n          providerMetadata: resultProviderMetadata,\n        });\n      },\n    });\n  } catch (error) {\n    throw wrapGatewayError(error);\n  }\n}\n\nclass DefaultGenerateObjectResult<T> implements GenerateObjectResult<T> {\n  readonly object: GenerateObjectResult<T>['object'];\n  readonly finishReason: GenerateObjectResult<T>['finishReason'];\n  readonly usage: GenerateObjectResult<T>['usage'];\n  readonly warnings: GenerateObjectResult<T>['warnings'];\n  readonly providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n  readonly response: GenerateObjectResult<T>['response'];\n  readonly request: GenerateObjectResult<T>['request'];\n  readonly reasoning: GenerateObjectResult<T>['reasoning'];\n\n  constructor(options: {\n    object: GenerateObjectResult<T>['object'];\n    finishReason: GenerateObjectResult<T>['finishReason'];\n    usage: GenerateObjectResult<T>['usage'];\n    warnings: GenerateObjectResult<T>['warnings'];\n    providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n    response: GenerateObjectResult<T>['response'];\n    request: GenerateObjectResult<T>['request'];\n    reasoning: GenerateObjectResult<T>['reasoning'];\n  }) {\n    this.object = options.object;\n    this.finishReason = options.finishReason;\n    this.usage = options.usage;\n    this.warnings = options.warnings;\n    this.providerMetadata = options.providerMetadata;\n    this.response = options.response;\n    this.request = options.request;\n    this.reasoning = options.reasoning;\n  }\n\n  toJsonResponse(init?: ResponseInit): Response {\n    return new Response(JSON.stringify(this.object), {\n      status: init?.status ?? 200,\n      headers: prepareHeaders(init?.headers, {\n        'content-type': 'application/json; charset=utf-8',\n      }),\n    });\n  }\n}\n","import {\n  JSONValue,\n  LanguageModelV2CallWarning,\n  LanguageModelV2FinishReason,\n  LanguageModelV2StreamPart,\n  LanguageModelV2Usage,\n  SharedV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  DelayedPromise,\n  FlexibleSchema,\n  ProviderOptions,\n  type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { ServerResponse } from 'http';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { createTextStreamResponse } from '../text-stream/create-text-stream-response';\nimport { pipeTextStreamToResponse } from '../text-stream/pipe-text-stream-to-response';\nimport {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n} from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { DeepPartial, isDeepEqualData, parsePartialJson } from '../util';\nimport {\n  AsyncIterableStream,\n  createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { now as originalNow } from '../util/now';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { getOutputStrategy, OutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport { RepairTextFunction } from './repair-text';\nimport { ObjectStreamPart, StreamObjectResult } from './stream-object-result';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\nCallback that is set using the `onError` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamObjectOnErrorCallback = (event: {\n  error: unknown;\n}) => Promise<void> | void;\n\n/**\nCallback that is set using the `onFinish` option.\n\n@param event - The event that is passed to the callback.\n */\nexport type StreamObjectOnFinishCallback<RESULT> = (event: {\n  /**\nThe token usage of the generated response.\n*/\n  usage: LanguageModelUsage;\n\n  /**\nThe generated object. Can be undefined if the final object does not match the schema.\n*/\n  object: RESULT | undefined;\n\n  /**\nOptional error object. This is e.g. a TypeValidationError when the final object does not match the schema.\n*/\n  error: unknown | undefined;\n\n  /**\nResponse metadata.\n */\n  response: LanguageModelResponseMetadata;\n\n  /**\nWarnings from the model provider (e.g. unsupported settings).\n*/\n  warnings?: CallWarning[];\n\n  /**\nAdditional provider-specific metadata. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n*/\n  providerMetadata: ProviderMetadata | undefined;\n}) => Promise<void> | void;\n\n/**\nGenerate a structured, typed object for a given prompt and schema using a language model.\n\nThis function streams the output. If you do not want to stream the output, use `generateObject` instead.\n\n@param model - The language model to use.\n@param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n\n@param system - A system message that will be part of the prompt.\n@param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n@param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n\n@param maxOutputTokens - Maximum number of tokens to generate.\n@param temperature - Temperature setting.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topP - Nucleus sampling.\nThe value is passed through to the provider. The range depends on the provider and model.\nIt is recommended to set either `temperature` or `topP`, but not both.\n@param topK - Only sample from the top K options for each subsequent token.\nUsed to remove \"long tail\" low probability responses.\nRecommended for advanced use cases only. You usually only need to use temperature.\n@param presencePenalty - Presence penalty setting.\nIt affects the likelihood of the model to repeat information that is already in the prompt.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param frequencyPenalty - Frequency penalty setting.\nIt affects the likelihood of the model to repeatedly use the same words or phrases.\nThe value is passed through to the provider. The range depends on the provider and model.\n@param stopSequences - Stop sequences.\nIf set, the model will stop generating text when one of the stop sequences is generated.\n@param seed - The seed (integer) to use for random sampling.\nIf set and supported by the model, calls will generate deterministic results.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@param schema - The schema of the object that the model should generate.\n@param schemaName - Optional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n@param schemaDescription - Optional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n\n@param output - The type of the output.\n\n- 'object': The output is an object.\n- 'array': The output is an array.\n- 'enum': The output is an enum.\n- 'no-schema': The output is not a schema.\n\n@param experimental_telemetry - Optional telemetry configuration (experimental).\n\n@param providerOptions - Additional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n\n@returns\nA result object for accessing the partial object stream and additional information.\n */\nexport function streamObject<\n  SCHEMA extends FlexibleSchema<unknown> = FlexibleSchema<JSONValue>,\n  OUTPUT extends 'object' | 'array' | 'enum' | 'no-schema' =\n    InferSchema<SCHEMA> extends string ? 'enum' : 'object',\n  RESULT = OUTPUT extends 'array'\n    ? Array<InferSchema<SCHEMA>>\n    : InferSchema<SCHEMA>,\n>(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt &\n    (OUTPUT extends 'enum'\n      ? {\n          /**\nThe enum values that the model should use.\n        */\n          enum: Array<RESULT>;\n          output: 'enum';\n        }\n      : OUTPUT extends 'no-schema'\n        ? {}\n        : {\n            /**\nThe schema of the object that the model should generate.\n      */\n            schema: SCHEMA;\n\n            /**\nOptional name of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema name.\n      */\n            schemaName?: string;\n\n            /**\nOptional description of the output that should be generated.\nUsed by some providers for additional LLM guidance, e.g.\nvia tool or schema description.\n      */\n            schemaDescription?: string;\n          }) & {\n      output?: OUTPUT;\n\n      /**\nThe language model to use.\n     */\n      model: LanguageModel;\n\n      /**\nA function that attempts to repair the raw output of the model\nto enable JSON parsing.\n       */\n      experimental_repairText?: RepairTextFunction;\n\n      /**\nOptional telemetry configuration (experimental).\n       */\n\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\n  Custom download function to use for URLs.\n\n  By default, files are downloaded if the model does not support the URL for the given media type.\n       */\n      experimental_download?: DownloadFunction | undefined;\n\n      /**\nAdditional provider-specific options. They are passed through\nto the provider from the AI SDK and enable provider-specific\nfunctionality that can be fully encapsulated in the provider.\n */\n      providerOptions?: ProviderOptions;\n\n      /**\nCallback that is invoked when an error occurs during streaming.\nYou can use it to log errors.\nThe stream processing will pause until the callback promise is resolved.\n     */\n      onError?: StreamObjectOnErrorCallback;\n\n      /**\nCallback that is called when the LLM response and the final object validation are finished.\n*/\n      onFinish?: StreamObjectOnFinishCallback<RESULT>;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n        now?: () => number;\n      };\n    },\n): StreamObjectResult<\n  OUTPUT extends 'enum'\n    ? string\n    : OUTPUT extends 'array'\n      ? RESULT\n      : DeepPartial<RESULT>,\n  OUTPUT extends 'array' ? RESULT : RESULT,\n  OUTPUT extends 'array'\n    ? RESULT extends Array<infer U>\n      ? AsyncIterableStream<U>\n      : never\n    : never\n> {\n  const {\n    model,\n    output = 'object',\n    system,\n    prompt,\n    messages,\n    maxRetries,\n    abortSignal,\n    headers,\n    experimental_repairText: repairText,\n    experimental_telemetry: telemetry,\n    experimental_download: download,\n    providerOptions,\n    onError = ({ error }: { error: unknown }) => {\n      console.error(error);\n    },\n    onFinish,\n    _internal: {\n      generateId = originalGenerateId,\n      currentDate = () => new Date(),\n      now = originalNow,\n    } = {},\n    ...settings\n  } = options;\n\n  const enumValues =\n    'enum' in options && options.enum ? options.enum : undefined;\n\n  const {\n    schema: inputSchema,\n    schemaDescription,\n    schemaName,\n  } = 'schema' in options ? options : {};\n\n  validateObjectGenerationInput({\n    output,\n    schema: inputSchema,\n    schemaName,\n    schemaDescription,\n    enumValues,\n  });\n\n  const outputStrategy = getOutputStrategy({\n    output,\n    schema: inputSchema,\n    enumValues,\n  });\n\n  return new DefaultStreamObjectResult({\n    model,\n    telemetry,\n    headers,\n    settings,\n    maxRetries,\n    abortSignal,\n    outputStrategy,\n    system,\n    prompt,\n    messages,\n    schemaName,\n    schemaDescription,\n    providerOptions,\n    repairText,\n    onError,\n    onFinish,\n    download,\n    generateId,\n    currentDate,\n    now,\n  });\n}\n\nclass DefaultStreamObjectResult<\n  PARTIAL,\n  RESULT,\n  ELEMENT_STREAM,\n> implements StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM> {\n  private readonly _object = new DelayedPromise<RESULT>();\n  private readonly _usage = new DelayedPromise<LanguageModelUsage>();\n  private readonly _providerMetadata = new DelayedPromise<\n    ProviderMetadata | undefined\n  >();\n  private readonly _warnings = new DelayedPromise<CallWarning[] | undefined>();\n  private readonly _request =\n    new DelayedPromise<LanguageModelRequestMetadata>();\n  private readonly _response =\n    new DelayedPromise<LanguageModelResponseMetadata>();\n  private readonly _finishReason = new DelayedPromise<FinishReason>();\n\n  private readonly baseStream: ReadableStream<ObjectStreamPart<PARTIAL>>;\n\n  private readonly outputStrategy: OutputStrategy<\n    PARTIAL,\n    RESULT,\n    ELEMENT_STREAM\n  >;\n\n  constructor({\n    model: modelArg,\n    headers,\n    telemetry,\n    settings,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    outputStrategy,\n    system,\n    prompt,\n    messages,\n    schemaName,\n    schemaDescription,\n    providerOptions,\n    repairText,\n    onError,\n    onFinish,\n    download,\n    generateId,\n    currentDate,\n    now,\n  }: {\n    model: LanguageModel;\n    telemetry: TelemetrySettings | undefined;\n    headers: Record<string, string | undefined> | undefined;\n    settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n    maxRetries: number | undefined;\n    abortSignal: AbortSignal | undefined;\n    outputStrategy: OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM>;\n    system: Prompt['system'];\n    prompt: Prompt['prompt'];\n    messages: Prompt['messages'];\n    schemaName: string | undefined;\n    schemaDescription: string | undefined;\n    providerOptions: ProviderOptions | undefined;\n    repairText: RepairTextFunction | undefined;\n    onError: StreamObjectOnErrorCallback;\n    onFinish: StreamObjectOnFinishCallback<RESULT> | undefined;\n    download: DownloadFunction | undefined;\n    generateId: () => string;\n    currentDate: () => Date;\n    now: () => number;\n  }) {\n    const model = resolveLanguageModel(modelArg);\n\n    const { maxRetries, retry } = prepareRetries({\n      maxRetries: maxRetriesArg,\n      abortSignal,\n    });\n\n    const callSettings = prepareCallSettings(settings);\n\n    const baseTelemetryAttributes = getBaseTelemetryAttributes({\n      model,\n      telemetry,\n      headers,\n      settings: { ...callSettings, maxRetries },\n    });\n\n    const tracer = getTracer(telemetry);\n    const self = this;\n\n    const stitchableStream =\n      createStitchableStream<ObjectStreamPart<PARTIAL>>();\n\n    const eventProcessor = new TransformStream<\n      ObjectStreamPart<PARTIAL>,\n      ObjectStreamPart<PARTIAL>\n    >({\n      transform(chunk, controller) {\n        controller.enqueue(chunk);\n\n        if (chunk.type === 'error') {\n          onError({ error: wrapGatewayError(chunk.error) });\n        }\n      },\n    });\n\n    this.baseStream = stitchableStream.stream.pipeThrough(eventProcessor);\n\n    recordSpan({\n      name: 'ai.streamObject',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: 'ai.streamObject',\n            telemetry,\n          }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n          'ai.schema':\n            outputStrategy.jsonSchema != null\n              ? { input: () => JSON.stringify(outputStrategy.jsonSchema) }\n              : undefined,\n          'ai.schema.name': schemaName,\n          'ai.schema.description': schemaDescription,\n          'ai.settings.output': outputStrategy.type,\n        },\n      }),\n      tracer,\n      endWhenDone: false,\n      fn: async rootSpan => {\n        const standardizedPrompt = await standardizePrompt({\n          system,\n          prompt,\n          messages,\n        } as Prompt);\n\n        const callOptions = {\n          responseFormat: {\n            type: 'json' as const,\n            schema: outputStrategy.jsonSchema,\n            name: schemaName,\n            description: schemaDescription,\n          },\n          ...prepareCallSettings(settings),\n          prompt: await convertToLanguageModelPrompt({\n            prompt: standardizedPrompt,\n            supportedUrls: await model.supportedUrls,\n            download,\n          }),\n          providerOptions,\n          abortSignal,\n          headers,\n          includeRawChunks: false,\n        };\n\n        const transformer: Transformer<\n          LanguageModelV2StreamPart,\n          ObjectStreamInputPart\n        > = {\n          transform: (chunk, controller) => {\n            switch (chunk.type) {\n              case 'text-delta':\n                controller.enqueue(chunk.delta);\n                break;\n              case 'response-metadata':\n              case 'finish':\n              case 'error':\n              case 'stream-start':\n                controller.enqueue(chunk);\n                break;\n            }\n          },\n        };\n\n        const {\n          result: { stream, response, request },\n          doStreamSpan,\n          startTimestampMs,\n        } = await retry(() =>\n          recordSpan({\n            name: 'ai.streamObject.doStream',\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: 'ai.streamObject.doStream',\n                  telemetry,\n                }),\n                ...baseTelemetryAttributes,\n                'ai.prompt.messages': {\n                  input: () => stringifyForTelemetry(callOptions.prompt),\n                },\n\n                // standardized gen-ai llm span attributes:\n                'gen_ai.system': model.provider,\n                'gen_ai.request.model': model.modelId,\n                'gen_ai.request.frequency_penalty':\n                  callSettings.frequencyPenalty,\n                'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n                'gen_ai.request.presence_penalty': callSettings.presencePenalty,\n                'gen_ai.request.temperature': callSettings.temperature,\n                'gen_ai.request.top_k': callSettings.topK,\n                'gen_ai.request.top_p': callSettings.topP,\n              },\n            }),\n            tracer,\n            endWhenDone: false,\n            fn: async doStreamSpan => ({\n              startTimestampMs: now(),\n              doStreamSpan,\n              result: await model.doStream(callOptions),\n            }),\n          }),\n        );\n\n        self._request.resolve(request ?? {});\n\n        // store information for onFinish callback:\n        let warnings: LanguageModelV2CallWarning[] | undefined;\n        let usage: LanguageModelUsage = {\n          inputTokens: undefined,\n          outputTokens: undefined,\n          totalTokens: undefined,\n        };\n        let finishReason: LanguageModelV2FinishReason | undefined;\n        let providerMetadata: ProviderMetadata | undefined;\n        let object: RESULT | undefined;\n        let error: unknown | undefined;\n\n        // pipe chunks through a transformation stream that extracts metadata:\n        let accumulatedText = '';\n        let textDelta = '';\n        let fullResponse: {\n          id: string;\n          timestamp: Date;\n          modelId: string;\n        } = {\n          id: generateId(),\n          timestamp: currentDate(),\n          modelId: model.modelId,\n        };\n\n        // Keep track of raw parse result before type validation, since e.g. Zod might\n        // change the object by mapping properties.\n        let latestObjectJson: JSONValue | undefined = undefined;\n        let latestObject: PARTIAL | undefined = undefined;\n        let isFirstChunk = true;\n        let isFirstDelta = true;\n\n        const transformedStream = stream\n          .pipeThrough(new TransformStream(transformer))\n          .pipeThrough(\n            new TransformStream<\n              string | ObjectStreamInputPart,\n              ObjectStreamPart<PARTIAL>\n            >({\n              async transform(chunk, controller): Promise<void> {\n                if (\n                  typeof chunk === 'object' &&\n                  chunk.type === 'stream-start'\n                ) {\n                  warnings = chunk.warnings;\n                  return; // stream start chunks are sent immediately and do not count as first chunk\n                }\n\n                // Telemetry event for first chunk:\n                if (isFirstChunk) {\n                  const msToFirstChunk = now() - startTimestampMs;\n\n                  isFirstChunk = false;\n\n                  doStreamSpan.addEvent('ai.stream.firstChunk', {\n                    'ai.stream.msToFirstChunk': msToFirstChunk,\n                  });\n\n                  doStreamSpan.setAttributes({\n                    'ai.stream.msToFirstChunk': msToFirstChunk,\n                  });\n                }\n\n                // process partial text chunks\n                if (typeof chunk === 'string') {\n                  accumulatedText += chunk;\n                  textDelta += chunk;\n\n                  const { value: currentObjectJson, state: parseState } =\n                    await parsePartialJson(accumulatedText);\n\n                  if (\n                    currentObjectJson !== undefined &&\n                    !isDeepEqualData(latestObjectJson, currentObjectJson)\n                  ) {\n                    const validationResult =\n                      await outputStrategy.validatePartialResult({\n                        value: currentObjectJson,\n                        textDelta,\n                        latestObject,\n                        isFirstDelta,\n                        isFinalDelta: parseState === 'successful-parse',\n                      });\n\n                    if (\n                      validationResult.success &&\n                      !isDeepEqualData(\n                        latestObject,\n                        validationResult.value.partial,\n                      )\n                    ) {\n                      // inside inner check to correctly parse the final element in array mode:\n                      latestObjectJson = currentObjectJson;\n                      latestObject = validationResult.value.partial;\n\n                      controller.enqueue({\n                        type: 'object',\n                        object: latestObject,\n                      });\n\n                      controller.enqueue({\n                        type: 'text-delta',\n                        textDelta: validationResult.value.textDelta,\n                      });\n\n                      textDelta = '';\n                      isFirstDelta = false;\n                    }\n                  }\n\n                  return;\n                }\n\n                switch (chunk.type) {\n                  case 'response-metadata': {\n                    fullResponse = {\n                      id: chunk.id ?? fullResponse.id,\n                      timestamp: chunk.timestamp ?? fullResponse.timestamp,\n                      modelId: chunk.modelId ?? fullResponse.modelId,\n                    };\n                    break;\n                  }\n\n                  case 'finish': {\n                    // send final text delta:\n                    if (textDelta !== '') {\n                      controller.enqueue({ type: 'text-delta', textDelta });\n                    }\n\n                    // store finish reason for telemetry:\n                    finishReason = chunk.finishReason;\n\n                    // store usage and metadata for promises and onFinish callback:\n                    usage = chunk.usage;\n                    providerMetadata = chunk.providerMetadata;\n\n                    controller.enqueue({\n                      ...chunk,\n                      usage,\n                      response: fullResponse,\n                    });\n\n                    // log warnings:\n                    logWarnings(warnings ?? []);\n\n                    // resolve promises that can be resolved now:\n                    self._usage.resolve(usage);\n                    self._providerMetadata.resolve(providerMetadata);\n                    self._warnings.resolve(warnings);\n                    self._response.resolve({\n                      ...fullResponse,\n                      headers: response?.headers,\n                    });\n                    self._finishReason.resolve(finishReason ?? 'unknown');\n\n                    try {\n                      object = await parseAndValidateObjectResultWithRepair(\n                        accumulatedText,\n                        outputStrategy,\n                        repairText,\n                        {\n                          response: fullResponse,\n                          usage,\n                          finishReason,\n                        },\n                      );\n                      self._object.resolve(object);\n                    } catch (e) {\n                      error = e;\n                      self._object.reject(e);\n                    }\n                    break;\n                  }\n\n                  default: {\n                    controller.enqueue(chunk);\n                    break;\n                  }\n                }\n              },\n\n              // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n              async flush(controller) {\n                try {\n                  const finalUsage = usage ?? {\n                    promptTokens: NaN,\n                    completionTokens: NaN,\n                    totalTokens: NaN,\n                  };\n\n                  doStreamSpan.setAttributes(\n                    selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        'ai.response.finishReason': finishReason,\n                        'ai.response.object': {\n                          output: () => JSON.stringify(object),\n                        },\n                        'ai.response.id': fullResponse.id,\n                        'ai.response.model': fullResponse.modelId,\n                        'ai.response.timestamp':\n                          fullResponse.timestamp.toISOString(),\n                        'ai.response.providerMetadata':\n                          JSON.stringify(providerMetadata),\n\n                        'ai.usage.inputTokens': finalUsage.inputTokens,\n                        'ai.usage.outputTokens': finalUsage.outputTokens,\n                        'ai.usage.totalTokens': finalUsage.totalTokens,\n                        'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n                        'ai.usage.cachedInputTokens':\n                          finalUsage.cachedInputTokens,\n\n                        // standardized gen-ai llm span attributes:\n                        'gen_ai.response.finish_reasons': [finishReason],\n                        'gen_ai.response.id': fullResponse.id,\n                        'gen_ai.response.model': fullResponse.modelId,\n                        'gen_ai.usage.input_tokens': finalUsage.inputTokens,\n                        'gen_ai.usage.output_tokens': finalUsage.outputTokens,\n                      },\n                    }),\n                  );\n\n                  // finish doStreamSpan before other operations for correct timing:\n                  doStreamSpan.end();\n\n                  // Add response information to the root span:\n                  rootSpan.setAttributes(\n                    selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        'ai.usage.inputTokens': finalUsage.inputTokens,\n                        'ai.usage.outputTokens': finalUsage.outputTokens,\n                        'ai.usage.totalTokens': finalUsage.totalTokens,\n                        'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n                        'ai.usage.cachedInputTokens':\n                          finalUsage.cachedInputTokens,\n                        'ai.response.object': {\n                          output: () => JSON.stringify(object),\n                        },\n                        'ai.response.providerMetadata':\n                          JSON.stringify(providerMetadata),\n                      },\n                    }),\n                  );\n\n                  // call onFinish callback:\n                  await onFinish?.({\n                    usage: finalUsage,\n                    object,\n                    error,\n                    response: {\n                      ...fullResponse,\n                      headers: response?.headers,\n                    },\n                    warnings,\n                    providerMetadata,\n                  });\n                } catch (error) {\n                  controller.enqueue({ type: 'error', error });\n                } finally {\n                  rootSpan.end();\n                }\n              },\n            }),\n          );\n\n        stitchableStream.addStream(transformedStream);\n      },\n    })\n      .catch(error => {\n        // add an empty stream with an error to break the stream:\n        stitchableStream.addStream(\n          new ReadableStream({\n            start(controller) {\n              controller.enqueue({ type: 'error', error });\n              controller.close();\n            },\n          }),\n        );\n      })\n      .finally(() => {\n        stitchableStream.close();\n      });\n\n    this.outputStrategy = outputStrategy;\n  }\n\n  get object() {\n    return this._object.promise;\n  }\n\n  get usage() {\n    return this._usage.promise;\n  }\n\n  get providerMetadata() {\n    return this._providerMetadata.promise;\n  }\n\n  get warnings() {\n    return this._warnings.promise;\n  }\n\n  get request() {\n    return this._request.promise;\n  }\n\n  get response() {\n    return this._response.promise;\n  }\n\n  get finishReason() {\n    return this._finishReason.promise;\n  }\n\n  get partialObjectStream(): AsyncIterableStream<PARTIAL> {\n    return createAsyncIterableStream(\n      this.baseStream.pipeThrough(\n        new TransformStream<ObjectStreamPart<PARTIAL>, PARTIAL>({\n          transform(chunk, controller) {\n            switch (chunk.type) {\n              case 'object':\n                controller.enqueue(chunk.object);\n                break;\n\n              case 'text-delta':\n              case 'finish':\n              case 'error': // suppress error (use onError instead)\n                break;\n\n              default: {\n                const _exhaustiveCheck: never = chunk;\n                throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n              }\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get elementStream(): ELEMENT_STREAM {\n    return this.outputStrategy.createElementStream(this.baseStream);\n  }\n\n  get textStream(): AsyncIterableStream<string> {\n    return createAsyncIterableStream(\n      this.baseStream.pipeThrough(\n        new TransformStream<ObjectStreamPart<PARTIAL>, string>({\n          transform(chunk, controller) {\n            switch (chunk.type) {\n              case 'text-delta':\n                controller.enqueue(chunk.textDelta);\n                break;\n\n              case 'object':\n              case 'finish':\n              case 'error': // suppress error (use onError instead)\n                break;\n\n              default: {\n                const _exhaustiveCheck: never = chunk;\n                throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n              }\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get fullStream(): AsyncIterableStream<ObjectStreamPart<PARTIAL>> {\n    return createAsyncIterableStream(this.baseStream);\n  }\n\n  pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n    pipeTextStreamToResponse({\n      response,\n      textStream: this.textStream,\n      ...init,\n    });\n  }\n\n  toTextStreamResponse(init?: ResponseInit): Response {\n    return createTextStreamResponse({\n      textStream: this.textStream,\n      ...init,\n    });\n  }\n}\n\nexport type ObjectStreamInputPart =\n  | string\n  | {\n      type: 'stream-start';\n      warnings: LanguageModelV2CallWarning[];\n    }\n  | {\n      type: 'error';\n      error: unknown;\n    }\n  | {\n      type: 'response-metadata';\n      id?: string;\n      timestamp?: Date;\n      modelId?: string;\n    }\n  | {\n      type: 'finish';\n      finishReason: LanguageModelV2FinishReason;\n      usage: LanguageModelV2Usage;\n      providerMetadata?: SharedV2ProviderMetadata;\n    };\n","import { LanguageModelV2CallOptions } from '@ai-sdk/provider';\nimport {\n  asSchema,\n  FlexibleSchema,\n  safeParseJSON,\n  safeValidateTypes,\n} from '@ai-sdk/provider-utils';\nimport { NoObjectGeneratedError } from '../error/no-object-generated-error';\nimport { FinishReason } from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { DeepPartial } from '../util/deep-partial';\nimport { parsePartialJson } from '../util/parse-partial-json';\n\nexport interface Output<OUTPUT, PARTIAL> {\n  readonly type: 'object' | 'text';\n\n  responseFormat: LanguageModelV2CallOptions['responseFormat'];\n\n  parsePartial(options: {\n    text: string;\n  }): Promise<{ partial: PARTIAL } | undefined>;\n\n  parseOutput(\n    options: { text: string },\n    context: {\n      response: LanguageModelResponseMetadata;\n      usage: LanguageModelUsage;\n      finishReason: FinishReason;\n    },\n  ): Promise<OUTPUT>;\n}\n\nexport const text = (): Output<string, string> => ({\n  type: 'text',\n\n  responseFormat: { type: 'text' },\n\n  async parsePartial({ text }: { text: string }) {\n    return { partial: text };\n  },\n\n  async parseOutput({ text }: { text: string }) {\n    return text;\n  },\n});\n\nexport const object = <OUTPUT>({\n  schema: inputSchema,\n}: {\n  schema: FlexibleSchema<OUTPUT>;\n}): Output<OUTPUT, DeepPartial<OUTPUT>> => {\n  const schema = asSchema(inputSchema);\n\n  return {\n    type: 'object',\n\n    responseFormat: {\n      type: 'json',\n      schema: schema.jsonSchema,\n    },\n\n    async parsePartial({ text }: { text: string }) {\n      const result = await parsePartialJson(text);\n\n      switch (result.state) {\n        case 'failed-parse':\n        case 'undefined-input':\n          return undefined;\n\n        case 'repaired-parse':\n        case 'successful-parse':\n          return {\n            // Note: currently no validation of partial results:\n            partial: result.value as DeepPartial<OUTPUT>,\n          };\n\n        default: {\n          const _exhaustiveCheck: never = result.state;\n          throw new Error(`Unsupported parse state: ${_exhaustiveCheck}`);\n        }\n      }\n    },\n\n    async parseOutput(\n      { text }: { text: string },\n      context: {\n        response: LanguageModelResponseMetadata;\n        usage: LanguageModelUsage;\n        finishReason: FinishReason;\n      },\n    ) {\n      const parseResult = await safeParseJSON({ text });\n\n      if (!parseResult.success) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: could not parse the response.',\n          cause: parseResult.error,\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      const validationResult = await safeValidateTypes({\n        value: parseResult.value,\n        schema,\n      });\n\n      if (!validationResult.success) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: response did not match schema.',\n          cause: validationResult.error,\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      return validationResult.value;\n    },\n  };\n};\n","/**\n * Symbol used for identifying AI SDK Error instances.\n * Enables checking if an error is an instance of AISDKError across package versions.\n */\nconst marker = 'vercel.ai.error';\nconst symbol = Symbol.for(marker);\n\n/**\n * Custom error class for AI SDK related errors.\n * @extends Error\n */\nexport class AISDKError extends Error {\n  private readonly [symbol] = true; // used in isInstance\n\n  /**\n   * The underlying cause of the error, if any.\n   */\n  readonly cause?: unknown;\n\n  /**\n   * Creates an AI SDK Error.\n   *\n   * @param {Object} params - The parameters for creating the error.\n   * @param {string} params.name - The name of the error.\n   * @param {string} params.message - The error message.\n   * @param {unknown} [params.cause] - The underlying cause of the error.\n   */\n  constructor({\n    name,\n    message,\n    cause,\n  }: {\n    name: string;\n    message: string;\n    cause?: unknown;\n  }) {\n    super(message);\n\n    this.name = name;\n    this.cause = cause;\n  }\n\n  /**\n   * Checks if the given error is an AI SDK Error.\n   * @param {unknown} error - The error to check.\n   * @returns {boolean} True if the error is an AI SDK Error, false otherwise.\n   */\n  static isInstance(error: unknown): error is AISDKError {\n    return AISDKError.hasMarker(error, marker);\n  }\n\n  protected static hasMarker(error: unknown, marker: string): boolean {\n    const markerSymbol = Symbol.for(marker);\n    return (\n      error != null &&\n      typeof error === 'object' &&\n      markerSymbol in error &&\n      typeof error[markerSymbol] === 'boolean' &&\n      error[markerSymbol] === true\n    );\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_APICallError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class APICallError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly url: string;\n  readonly requestBodyValues: unknown;\n  readonly statusCode?: number;\n\n  readonly responseHeaders?: Record<string, string>;\n  readonly responseBody?: string;\n\n  readonly isRetryable: boolean;\n  readonly data?: unknown;\n\n  constructor({\n    message,\n    url,\n    requestBodyValues,\n    statusCode,\n    responseHeaders,\n    responseBody,\n    cause,\n    isRetryable = statusCode != null &&\n      (statusCode === 408 || // request timeout\n        statusCode === 409 || // conflict\n        statusCode === 429 || // too many requests\n        statusCode >= 500), // server error\n    data,\n  }: {\n    message: string;\n    url: string;\n    requestBodyValues: unknown;\n    statusCode?: number;\n    responseHeaders?: Record<string, string>;\n    responseBody?: string;\n    cause?: unknown;\n    isRetryable?: boolean;\n    data?: unknown;\n  }) {\n    super({ name, message, cause });\n\n    this.url = url;\n    this.requestBodyValues = requestBodyValues;\n    this.statusCode = statusCode;\n    this.responseHeaders = responseHeaders;\n    this.responseBody = responseBody;\n    this.isRetryable = isRetryable;\n    this.data = data;\n  }\n\n  static isInstance(error: unknown): error is APICallError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_EmptyResponseBodyError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class EmptyResponseBodyError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  constructor({ message = 'Empty response body' }: { message?: string } = {}) {\n    super({ name, message });\n  }\n\n  static isInstance(error: unknown): error is EmptyResponseBodyError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","export function getErrorMessage(error: unknown | undefined) {\n  if (error == null) {\n    return 'unknown error';\n  }\n\n  if (typeof error === 'string') {\n    return error;\n  }\n\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  return JSON.stringify(error);\n}\n","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_InvalidArgumentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * A function argument is invalid.\n */\nexport class InvalidArgumentError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly argument: string;\n\n  constructor({\n    message,\n    cause,\n    argument,\n  }: {\n    argument: string;\n    message: string;\n    cause?: unknown;\n  }) {\n    super({ name, message, cause });\n\n    this.argument = argument;\n  }\n\n  static isInstance(error: unknown): error is InvalidArgumentError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\nimport { getErrorMessage } from './get-error-message';\n\nconst name = 'AI_JSONParseError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class JSONParseError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly text: string;\n\n  constructor({ text, cause }: { text: string; cause: unknown }) {\n    super({\n      name,\n      message:\n        `JSON parsing failed: ` +\n        `Text: ${text}.\\n` +\n        `Error message: ${getErrorMessage(cause)}`,\n      cause,\n    });\n\n    this.text = text;\n  }\n\n  static isInstance(error: unknown): error is JSONParseError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from './ai-sdk-error';\nimport { getErrorMessage } from './get-error-message';\n\nconst name = 'AI_TypeValidationError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport interface TypeValidationContext {\n  /**\n   * Field path in dot notation (e.g., \"message.metadata\", \"message.parts[3].data\")\n   */\n  field?: string;\n\n  /**\n   * Entity name (e.g., tool name, data type name)\n   */\n  entityName?: string;\n\n  /**\n   * Entity identifier (e.g., message ID, tool call ID)\n   */\n  entityId?: string;\n}\n\nexport class TypeValidationError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly value: unknown;\n  readonly context?: TypeValidationContext;\n\n  constructor({\n    value,\n    cause,\n    context,\n  }: {\n    value: unknown;\n    cause: unknown;\n    context?: TypeValidationContext;\n  }) {\n    let contextPrefix = 'Type validation failed';\n\n    if (context?.field) {\n      contextPrefix += ` for ${context.field}`;\n    }\n\n    if (context?.entityName || context?.entityId) {\n      contextPrefix += ' (';\n      const parts: string[] = [];\n      if (context.entityName) {\n        parts.push(context.entityName);\n      }\n      if (context.entityId) {\n        parts.push(`id: \"${context.entityId}\"`);\n      }\n      contextPrefix += parts.join(', ');\n      contextPrefix += ')';\n    }\n\n    super({\n      name,\n      message:\n        `${contextPrefix}: ` +\n        `Value: ${JSON.stringify(value)}.\\n` +\n        `Error message: ${getErrorMessage(cause)}`,\n      cause,\n    });\n\n    this.value = value;\n    this.context = context;\n  }\n\n  static isInstance(error: unknown): error is TypeValidationError {\n    return AISDKError.hasMarker(error, marker);\n  }\n\n  /**\n   * Wraps an error into a TypeValidationError.\n   * If the cause is already a TypeValidationError with the same value and context, it returns the cause.\n   * Otherwise, it creates a new TypeValidationError.\n   *\n   * @param {Object} params - The parameters for wrapping the error.\n   * @param {unknown} params.value - The value that failed validation.\n   * @param {unknown} params.cause - The original error or cause of the validation failure.\n   * @param {TypeValidationContext} params.context - Optional context about what is being validated.\n   * @returns {TypeValidationError} A TypeValidationError instance.\n   */\n  static wrap({\n    value,\n    cause,\n    context,\n  }: {\n    value: unknown;\n    cause: unknown;\n    context?: TypeValidationContext;\n  }): TypeValidationError {\n    if (\n      TypeValidationError.isInstance(cause) &&\n      cause.value === value &&\n      cause.context?.field === context?.field &&\n      cause.context?.entityName === context?.entityName &&\n      cause.context?.entityId === context?.entityId\n    ) {\n      return cause;\n    }\n\n    return new TypeValidationError({ value, cause, context });\n  }\n}\n","export function combineHeaders(\n  ...headers: Array<Record<string, string | undefined> | undefined>\n): Record<string, string | undefined> {\n  return headers.reduce(\n    (combinedHeaders, currentHeaders) => ({\n      ...combinedHeaders,\n      ...(currentHeaders ?? {}),\n    }),\n    {},\n  ) as Record<string, string | undefined>;\n}\n","/**\n * Creates a Promise that resolves after a specified delay\n * @param delayInMs - The delay duration in milliseconds. If null or undefined, resolves immediately.\n * @param signal - Optional AbortSignal to cancel the delay\n * @returns A Promise that resolves after the specified delay\n * @throws {DOMException} When the signal is aborted\n */\nexport async function delay(\n  delayInMs?: number | null,\n  options?: {\n    abortSignal?: AbortSignal;\n  },\n): Promise<void> {\n  if (delayInMs == null) {\n    return Promise.resolve();\n  }\n\n  const signal = options?.abortSignal;\n\n  return new Promise<void>((resolve, reject) => {\n    if (signal?.aborted) {\n      reject(createAbortError());\n      return;\n    }\n\n    const timeoutId = setTimeout(() => {\n      cleanup();\n      resolve();\n    }, delayInMs);\n\n    const cleanup = () => {\n      clearTimeout(timeoutId);\n      signal?.removeEventListener('abort', onAbort);\n    };\n\n    const onAbort = () => {\n      cleanup();\n      reject(createAbortError());\n    };\n\n    signal?.addEventListener('abort', onAbort);\n  });\n}\n\nfunction createAbortError(): DOMException {\n  return new DOMException('Delay was aborted', 'AbortError');\n}\n","/**\n * Extracts the headers from a response object and returns them as a key-value object.\n *\n * @param response - The response object to extract headers from.\n * @returns The headers as a key-value object.\n */\nexport function extractResponseHeaders(response: Response) {\n  return Object.fromEntries<string>([...response.headers]);\n}\n","// btoa and atob need to be invoked as a function call, not as a method call.\n// Otherwise CloudFlare will throw a\n// \"TypeError: Illegal invocation: function called with incorrect this reference\"\nconst { btoa, atob } = globalThis;\n\nexport function convertBase64ToUint8Array(base64String: string) {\n  const base64Url = base64String.replace(/-/g, '+').replace(/_/g, '/');\n  const latin1string = atob(base64Url);\n  return Uint8Array.from(latin1string, byte => byte.codePointAt(0)!);\n}\n\nexport function convertUint8ArrayToBase64(array: Uint8Array): string {\n  let latin1string = '';\n\n  // Note: regular for loop to support older JavaScript versions that\n  // do not support for..of on Uint8Array\n  for (let i = 0; i < array.length; i++) {\n    latin1string += String.fromCodePoint(array[i]);\n  }\n\n  return btoa(latin1string);\n}\n\nexport function convertToBase64(value: string | Uint8Array): string {\n  return value instanceof Uint8Array ? convertUint8ArrayToBase64(value) : value;\n}\n","import { InvalidArgumentError } from '@ai-sdk/provider';\n\n/**\n * Creates an ID generator.\n * The total length of the ID is the sum of the prefix, separator, and random part length.\n * Not cryptographically secure.\n *\n * @param alphabet - The alphabet to use for the ID. Default: '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.\n * @param prefix - The prefix of the ID to generate. Optional.\n * @param separator - The separator between the prefix and the random part of the ID. Default: '-'.\n * @param size - The size of the random part of the ID to generate. Default: 16.\n */\nexport const createIdGenerator = ({\n  prefix,\n  size = 16,\n  alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\n  separator = '-',\n}: {\n  prefix?: string;\n  separator?: string;\n  size?: number;\n  alphabet?: string;\n} = {}): IdGenerator => {\n  const generator = () => {\n    const alphabetLength = alphabet.length;\n    const chars = new Array(size);\n    for (let i = 0; i < size; i++) {\n      chars[i] = alphabet[(Math.random() * alphabetLength) | 0];\n    }\n    return chars.join('');\n  };\n\n  if (prefix == null) {\n    return generator;\n  }\n\n  // check that the prefix is not part of the alphabet (otherwise prefix checking can fail randomly)\n  if (alphabet.includes(separator)) {\n    throw new InvalidArgumentError({\n      argument: 'separator',\n      message: `The separator \"${separator}\" must not be part of the alphabet \"${alphabet}\".`,\n    });\n  }\n\n  return () => `${prefix}${separator}${generator()}`;\n};\n\n/**\n * A function that generates an ID.\n */\nexport type IdGenerator = () => string;\n\n/**\n * Generates a 16-character random string to use for IDs.\n * Not cryptographically secure.\n */\nexport const generateId = createIdGenerator();\n","export function getErrorMessage(error: unknown | undefined) {\n  if (error == null) {\n    return 'unknown error';\n  }\n\n  if (typeof error === 'string') {\n    return error;\n  }\n\n  if (error instanceof Error) {\n    return error.message;\n  }\n\n  return JSON.stringify(error);\n}\n","export function isAbortError(error: unknown): error is Error {\n  return (\n    (error instanceof Error || error instanceof DOMException) &&\n    (error.name === 'AbortError' ||\n      error.name === 'ResponseAborted' || // Next.js\n      error.name === 'TimeoutError')\n  );\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { isAbortError } from './is-abort-error';\n\nconst FETCH_FAILED_ERROR_MESSAGES = ['fetch failed', 'failed to fetch'];\n\nconst BUN_ERROR_CODES = [\n  'ConnectionRefused',\n  'ConnectionClosed',\n  'FailedToOpenSocket',\n  'ECONNRESET',\n  'ECONNREFUSED',\n  'ETIMEDOUT',\n  'EPIPE',\n];\n\nfunction isBunNetworkError(error: unknown): error is Error & { code?: string } {\n  if (!(error instanceof Error)) {\n    return false;\n  }\n\n  const code = (error as any).code;\n  if (typeof code === 'string' && BUN_ERROR_CODES.includes(code)) {\n    return true;\n  }\n\n  return false;\n}\n\nexport function handleFetchError({\n  error,\n  url,\n  requestBodyValues,\n}: {\n  error: unknown;\n  url: string;\n  requestBodyValues: unknown;\n}) {\n  if (isAbortError(error)) {\n    return error;\n  }\n\n  // unwrap original error when fetch failed (for easier debugging):\n  if (\n    error instanceof TypeError &&\n    FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())\n  ) {\n    const cause = (error as any).cause;\n\n    if (cause != null) {\n      // Failed to connect to server:\n      return new APICallError({\n        message: `Cannot connect to API: ${cause.message}`,\n        cause,\n        url,\n        requestBodyValues,\n        isRetryable: true, // retry when network error\n      });\n    }\n  }\n\n  if (isBunNetworkError(error)) {\n    return new APICallError({\n      message: `Cannot connect to API: ${error.message}`,\n      cause: error,\n      url,\n      requestBodyValues,\n      isRetryable: true,\n    });\n  }\n\n  return error;\n}\n","export function getRuntimeEnvironmentUserAgent(\n  globalThisAny: any = globalThis as any,\n): string {\n  // Browsers\n  if (globalThisAny.window) {\n    return `runtime/browser`;\n  }\n\n  // Cloudflare Workers / Deno / Bun / Node.js >= 21.1\n  if (globalThisAny.navigator?.userAgent) {\n    return `runtime/${globalThisAny.navigator.userAgent.toLowerCase()}`;\n  }\n\n  // Nodes.js < 21.1\n  if (globalThisAny.process?.versions?.node) {\n    return `runtime/node.js/${globalThisAny.process.version.substring(0)}`;\n  }\n\n  if (globalThisAny.EdgeRuntime) {\n    return `runtime/vercel-edge`;\n  }\n\n  return 'runtime/unknown';\n}\n","/**\n * Normalizes different header inputs into a plain record with lower-case keys.\n * Entries with `undefined` or `null` values are removed.\n *\n * @param headers - Input headers (`Headers`, tuples array, plain record) to normalize.\n * @returns A record containing the normalized header entries.\n */\nexport function normalizeHeaders(\n  headers:\n    | HeadersInit\n    | Record<string, string | undefined>\n    | Array<[string, string | undefined]>\n    | undefined,\n): Record<string, string> {\n  if (headers == null) {\n    return {};\n  }\n\n  const normalized: Record<string, string> = {};\n\n  if (headers instanceof Headers) {\n    headers.forEach((value, key) => {\n      normalized[key.toLowerCase()] = value;\n    });\n  } else {\n    if (!Array.isArray(headers)) {\n      headers = Object.entries(headers);\n    }\n\n    for (const [key, value] of headers) {\n      if (value != null) {\n        normalized[key.toLowerCase()] = value;\n      }\n    }\n  }\n\n  return normalized;\n}\n","import { normalizeHeaders } from './normalize-headers';\n\n/**\n * Appends suffix parts to the `user-agent` header.\n * If a `user-agent` header already exists, the suffix parts are appended to it.\n * If no `user-agent` header exists, a new one is created with the suffix parts.\n * Automatically removes undefined entries from the headers.\n *\n * @param headers - The original headers.\n * @param userAgentSuffixParts - The parts to append to the `user-agent` header.\n * @returns The new headers with the `user-agent` header set or updated.\n */\nexport function withUserAgentSuffix(\n  headers: HeadersInit | Record<string, string | undefined> | undefined,\n  ...userAgentSuffixParts: string[]\n): Record<string, string> {\n  const normalizedHeaders = new Headers(normalizeHeaders(headers));\n\n  const currentUserAgentHeader = normalizedHeaders.get('user-agent') || '';\n\n  normalizedHeaders.set(\n    'user-agent',\n    [currentUserAgentHeader, ...userAgentSuffixParts].filter(Boolean).join(' '),\n  );\n\n  return Object.fromEntries(normalizedHeaders.entries());\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n  typeof __PACKAGE_VERSION__ !== 'undefined'\n    ? __PACKAGE_VERSION__\n    : '0.0.0-test';\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const getFromApi = async <T>({\n  url,\n  headers = {},\n  successfulResponseHandler,\n  failedResponseHandler,\n  abortSignal,\n  fetch = getOriginalFetch(),\n}: {\n  url: string;\n  headers?: Record<string, string | undefined>;\n  failedResponseHandler: ResponseHandler<Error>;\n  successfulResponseHandler: ResponseHandler<T>;\n  abortSignal?: AbortSignal;\n  fetch?: FetchFunction;\n}) => {\n  try {\n    const response = await fetch(url, {\n      method: 'GET',\n      headers: withUserAgentSuffix(\n        headers,\n        `ai-sdk/provider-utils/${VERSION}`,\n        getRuntimeEnvironmentUserAgent(),\n      ),\n      signal: abortSignal,\n    });\n\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (!response.ok) {\n      let errorInformation: {\n        value: Error;\n        responseHeaders?: Record<string, string> | undefined;\n      };\n\n      try {\n        errorInformation = await failedResponseHandler({\n          response,\n          url,\n          requestBodyValues: {},\n        });\n      } catch (error) {\n        if (isAbortError(error) || APICallError.isInstance(error)) {\n          throw error;\n        }\n\n        throw new APICallError({\n          message: 'Failed to process error response',\n          cause: error,\n          statusCode: response.status,\n          url,\n          responseHeaders,\n          requestBodyValues: {},\n        });\n      }\n\n      throw errorInformation.value;\n    }\n\n    try {\n      return await successfulResponseHandler({\n        response,\n        url,\n        requestBodyValues: {},\n      });\n    } catch (error) {\n      if (error instanceof Error) {\n        if (isAbortError(error) || APICallError.isInstance(error)) {\n          throw error;\n        }\n      }\n\n      throw new APICallError({\n        message: 'Failed to process successful response',\n        cause: error,\n        statusCode: response.status,\n        url,\n        responseHeaders,\n        requestBodyValues: {},\n      });\n    }\n  } catch (error) {\n    throw handleFetchError({ error, url, requestBodyValues: {} });\n  }\n};\n","/**\n * Loads an optional `string` setting from the environment or a parameter.\n *\n * @param settingValue - The setting value.\n * @param environmentVariableName - The environment variable name.\n * @returns The setting value.\n */\nexport function loadOptionalSetting({\n  settingValue,\n  environmentVariableName,\n}: {\n  settingValue: string | undefined;\n  environmentVariableName: string;\n}): string | undefined {\n  if (typeof settingValue === 'string') {\n    return settingValue;\n  }\n\n  if (settingValue != null || typeof process === 'undefined') {\n    return undefined;\n  }\n\n  settingValue = process.env[environmentVariableName];\n\n  if (settingValue == null || typeof settingValue !== 'string') {\n    return undefined;\n  }\n\n  return settingValue;\n}\n","// Licensed under BSD-3-Clause (this file only)\n// Code adapted from https://github.com/fastify/secure-json-parse/blob/783fcb1b5434709466759847cec974381939673a/index.js\n//\n// Copyright (c) Vercel, Inc. (https://vercel.com)\n// Copyright (c) 2019 The Fastify Team\n// Copyright (c) 2019, Sideway Inc, and project contributors\n// All rights reserved.\n//\n// The complete list of contributors can be found at:\n// - https://github.com/hapijs/bourne/graphs/contributors\n// - https://github.com/fastify/secure-json-parse/graphs/contributors\n// - https://github.com/vercel/ai/commits/main/packages/provider-utils/src/secure-parse-json.ts\n//\n// Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n//\n// 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n//\n// 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n//\n// 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\n//\n// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\nconst suspectProtoRx =\n  /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/;\nconst suspectConstructorRx =\n  /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/;\n\nfunction _parse(text: string) {\n  // Parse normally\n  const obj = JSON.parse(text);\n\n  // Ignore null and non-objects\n  if (obj === null || typeof obj !== 'object') {\n    return obj;\n  }\n\n  if (\n    suspectProtoRx.test(text) === false &&\n    suspectConstructorRx.test(text) === false\n  ) {\n    return obj;\n  }\n\n  // Scan result for proto keys\n  return filter(obj);\n}\n\nfunction filter(obj: any) {\n  let next = [obj];\n\n  while (next.length) {\n    const nodes = next;\n    next = [];\n\n    for (const node of nodes) {\n      if (Object.prototype.hasOwnProperty.call(node, '__proto__')) {\n        throw new SyntaxError('Object contains forbidden prototype property');\n      }\n\n      if (\n        Object.prototype.hasOwnProperty.call(node, 'constructor') &&\n        node.constructor !== null &&\n        typeof node.constructor === 'object' &&\n        Object.prototype.hasOwnProperty.call(node.constructor, 'prototype')\n      ) {\n        throw new SyntaxError('Object contains forbidden prototype property');\n      }\n\n      for (const key in node) {\n        const value = node[key];\n        if (value && typeof value === 'object') {\n          next.push(value);\n        }\n      }\n    }\n  }\n  return obj;\n}\n\nexport function secureJsonParse(text: string) {\n  const { stackTraceLimit } = Error;\n  try {\n    // Performance optimization, see https://github.com/fastify/secure-json-parse/pull/90\n    Error.stackTraceLimit = 0;\n  } catch (e) {\n    // Fallback in case Error is immutable (v8 readonly)\n    return _parse(text);\n  }\n\n  try {\n    return _parse(text);\n  } finally {\n    Error.stackTraceLimit = stackTraceLimit;\n  }\n}\n","import { JSONSchema7, JSONSchema7Definition } from '@ai-sdk/provider';\n\n/**\n * Recursively adds additionalProperties: false to the JSON schema. This is necessary because some providers (e.g. OpenAI) do not support additionalProperties: true.\n */\nexport function addAdditionalPropertiesToJsonSchema(\n  jsonSchema: JSONSchema7,\n): JSONSchema7 {\n  if (\n    jsonSchema.type === 'object' ||\n    (Array.isArray(jsonSchema.type) && jsonSchema.type.includes('object'))\n  ) {\n    jsonSchema.additionalProperties = false;\n    const { properties } = jsonSchema;\n    if (properties != null) {\n      for (const key of Object.keys(properties)) {\n        properties[key] = visit(properties[key]);\n      }\n    }\n  }\n\n  if (jsonSchema.items != null) {\n    jsonSchema.items = Array.isArray(jsonSchema.items)\n      ? jsonSchema.items.map(visit)\n      : visit(jsonSchema.items);\n  }\n\n  if (jsonSchema.anyOf != null) {\n    jsonSchema.anyOf = jsonSchema.anyOf.map(visit);\n  }\n\n  if (jsonSchema.allOf != null) {\n    jsonSchema.allOf = jsonSchema.allOf.map(visit);\n  }\n\n  if (jsonSchema.oneOf != null) {\n    jsonSchema.oneOf = jsonSchema.oneOf.map(visit);\n  }\n\n  const { definitions } = jsonSchema;\n  if (definitions != null) {\n    for (const key of Object.keys(definitions)) {\n      definitions[key] = visit(definitions[key]);\n    }\n  }\n\n  return jsonSchema;\n}\n\nfunction visit(def: JSONSchema7Definition): JSONSchema7Definition {\n  if (typeof def === 'boolean') return def;\n  return addAdditionalPropertiesToJsonSchema(def);\n}\n","import { ZodSchema, ZodTypeDef } from 'zod/v3';\nimport { Refs, Seen } from './refs';\nimport { JsonSchema7Type } from './parse-types';\n\nexport type DateStrategy =\n  | 'format:date-time'\n  | 'format:date'\n  | 'string'\n  | 'integer';\n\nexport const ignoreOverride = Symbol(\n  'Let zodToJsonSchema decide on which parser to use',\n);\n\nexport type OverrideCallback = (\n  def: ZodTypeDef,\n  refs: Refs,\n  seen: Seen | undefined,\n  forceResolution?: boolean,\n) => JsonSchema7Type | undefined | typeof ignoreOverride;\n\nexport type PostProcessCallback = (\n  jsonSchema: JsonSchema7Type | undefined,\n  def: ZodTypeDef,\n  refs: Refs,\n) => JsonSchema7Type | undefined;\n\nexport const jsonDescription: PostProcessCallback = (jsonSchema, def) => {\n  if (def.description) {\n    try {\n      return {\n        ...jsonSchema,\n        ...JSON.parse(def.description),\n      };\n    } catch {}\n  }\n\n  return jsonSchema;\n};\n\nexport type Options = {\n  name: string | undefined;\n  $refStrategy: 'root' | 'relative' | 'none' | 'seen';\n  basePath: string[];\n  effectStrategy: 'input' | 'any';\n  pipeStrategy: 'input' | 'output' | 'all';\n  dateStrategy: DateStrategy | DateStrategy[];\n  mapStrategy: 'entries' | 'record';\n  removeAdditionalStrategy: 'passthrough' | 'strict';\n  allowedAdditionalProperties: true | undefined;\n  rejectedAdditionalProperties: false | undefined;\n  strictUnions: boolean;\n  definitionPath: string;\n  definitions: Record<string, ZodSchema>;\n  errorMessages: boolean;\n  patternStrategy: 'escape' | 'preserve';\n  applyRegexFlags: boolean;\n  emailStrategy: 'format:email' | 'format:idn-email' | 'pattern:zod';\n  base64Strategy: 'format:binary' | 'contentEncoding:base64' | 'pattern:zod';\n  nameStrategy: 'ref' | 'title';\n  override?: OverrideCallback;\n  postProcess?: PostProcessCallback;\n};\n\nexport const defaultOptions: Options = {\n  name: undefined,\n  $refStrategy: 'root',\n  basePath: ['#'],\n  effectStrategy: 'input',\n  pipeStrategy: 'all',\n  dateStrategy: 'format:date-time',\n  mapStrategy: 'entries',\n  removeAdditionalStrategy: 'passthrough',\n  allowedAdditionalProperties: true,\n  rejectedAdditionalProperties: false,\n  definitionPath: 'definitions',\n  strictUnions: false,\n  definitions: {},\n  errorMessages: false,\n  patternStrategy: 'escape',\n  applyRegexFlags: false,\n  emailStrategy: 'format:email',\n  base64Strategy: 'contentEncoding:base64',\n  nameStrategy: 'ref',\n};\n\nexport const getDefaultOptions = (\n  options: Partial<Options> | string | undefined,\n) =>\n  (typeof options === 'string'\n    ? {\n        ...defaultOptions,\n        name: options,\n      }\n    : {\n        ...defaultOptions,\n        ...options,\n      }) as Options;\n","export type JsonSchema7AnyType = { $ref?: string };\n\nexport function parseAnyDef(): JsonSchema7AnyType {\n  return {};\n}\n","import { ZodArrayDef, ZodFirstPartyTypeKind } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7ArrayType = {\n  type: 'array';\n  items?: JsonSchema7Type;\n  minItems?: number;\n  maxItems?: number;\n};\n\nexport function parseArrayDef(def: ZodArrayDef, refs: Refs) {\n  const res: JsonSchema7ArrayType = {\n    type: 'array',\n  };\n  if (\n    def.type?._def &&\n    def.type?._def?.typeName !== ZodFirstPartyTypeKind.ZodAny\n  ) {\n    res.items = parseDef(def.type._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'items'],\n    });\n  }\n\n  if (def.minLength) {\n    res.minItems = def.minLength.value;\n  }\n  if (def.maxLength) {\n    res.maxItems = def.maxLength.value;\n  }\n  if (def.exactLength) {\n    res.minItems = def.exactLength.value;\n    res.maxItems = def.exactLength.value;\n  }\n  return res;\n}\n","import { ZodBigIntDef } from 'zod/v3';\n\nexport type JsonSchema7BigintType = {\n  type: 'integer';\n  format: 'int64';\n  minimum?: BigInt;\n  exclusiveMinimum?: BigInt;\n  maximum?: BigInt;\n  exclusiveMaximum?: BigInt;\n  multipleOf?: BigInt;\n};\n\nexport function parseBigintDef(def: ZodBigIntDef): JsonSchema7BigintType {\n  const res: JsonSchema7BigintType = {\n    type: 'integer',\n    format: 'int64',\n  };\n\n  if (!def.checks) return res;\n\n  for (const check of def.checks) {\n    switch (check.kind) {\n      case 'min':\n        if (check.inclusive) {\n          res.minimum = check.value;\n        } else {\n          res.exclusiveMinimum = check.value;\n        }\n        break;\n      case 'max':\n        if (check.inclusive) {\n          res.maximum = check.value;\n        } else {\n          res.exclusiveMaximum = check.value;\n        }\n\n        break;\n      case 'multipleOf':\n        res.multipleOf = check.value;\n        break;\n    }\n  }\n  return res;\n}\n","export type JsonSchema7BooleanType = {\n  type: 'boolean';\n};\n\nexport function parseBooleanDef(): JsonSchema7BooleanType {\n  return { type: 'boolean' };\n}\n","import { ZodBrandedDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { Refs } from '../refs';\n\nexport function parseBrandedDef(_def: ZodBrandedDef<any>, refs: Refs) {\n  return parseDef(_def.type._def, refs);\n}\n","import { ZodCatchDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { Refs } from '../refs';\n\nexport const parseCatchDef = (def: ZodCatchDef<any>, refs: Refs) => {\n  return parseDef(def.innerType._def, refs);\n};\n","import { ZodDateDef } from 'zod/v3';\nimport { Refs } from '../refs';\nimport { DateStrategy } from '../options';\n\nexport type JsonSchema7DateType =\n  | {\n      type: 'integer' | 'string';\n      format: 'unix-time' | 'date-time' | 'date';\n      minimum?: number;\n      maximum?: number;\n    }\n  | {\n      anyOf: JsonSchema7DateType[];\n    };\n\nexport function parseDateDef(\n  def: ZodDateDef,\n  refs: Refs,\n  overrideDateStrategy?: DateStrategy,\n): JsonSchema7DateType {\n  const strategy = overrideDateStrategy ?? refs.dateStrategy;\n\n  if (Array.isArray(strategy)) {\n    return {\n      anyOf: strategy.map((item, i) => parseDateDef(def, refs, item)),\n    };\n  }\n\n  switch (strategy) {\n    case 'string':\n    case 'format:date-time':\n      return {\n        type: 'string',\n        format: 'date-time',\n      };\n    case 'format:date':\n      return {\n        type: 'string',\n        format: 'date',\n      };\n    case 'integer':\n      return integerDateParser(def);\n  }\n}\n\nconst integerDateParser = (def: ZodDateDef) => {\n  const res: JsonSchema7DateType = {\n    type: 'integer',\n    format: 'unix-time',\n  };\n\n  for (const check of def.checks) {\n    switch (check.kind) {\n      case 'min':\n        res.minimum = check.value;\n        break;\n      case 'max':\n        res.maximum = check.value;\n        break;\n    }\n  }\n\n  return res;\n};\n","import { ZodDefaultDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport function parseDefaultDef(\n  _def: ZodDefaultDef,\n  refs: Refs,\n): JsonSchema7Type & { default: any } {\n  return {\n    ...parseDef(_def.innerType._def, refs),\n    default: _def.defaultValue(),\n  };\n}\n","import { ZodEffectsDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport function parseEffectsDef(\n  _def: ZodEffectsDef,\n  refs: Refs,\n): JsonSchema7Type | undefined {\n  return refs.effectStrategy === 'input'\n    ? parseDef(_def.schema._def, refs)\n    : parseAnyDef();\n}\n","import { ZodEnumDef } from 'zod/v3';\n\nexport type JsonSchema7EnumType = {\n  type: 'string';\n  enum: string[];\n};\n\nexport function parseEnumDef(def: ZodEnumDef): JsonSchema7EnumType {\n  return {\n    type: 'string',\n    enum: Array.from(def.values),\n  };\n}\n","import { ZodIntersectionDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { JsonSchema7StringType } from './string';\n\nexport type JsonSchema7AllOfType = {\n  allOf: JsonSchema7Type[];\n  unevaluatedProperties?: boolean;\n};\n\nconst isJsonSchema7AllOfType = (\n  type: JsonSchema7Type | JsonSchema7StringType,\n): type is JsonSchema7AllOfType => {\n  if ('type' in type && type.type === 'string') return false;\n  return 'allOf' in type;\n};\n\nexport function parseIntersectionDef(\n  def: ZodIntersectionDef,\n  refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined {\n  const allOf = [\n    parseDef(def.left._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'allOf', '0'],\n    }),\n    parseDef(def.right._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'allOf', '1'],\n    }),\n  ].filter((x): x is JsonSchema7Type => !!x);\n\n  const mergedAllOf: JsonSchema7Type[] = [];\n  // If either of the schemas is an allOf, merge them into a single allOf\n  allOf.forEach(schema => {\n    if (isJsonSchema7AllOfType(schema)) {\n      mergedAllOf.push(...schema.allOf);\n    } else {\n      let nestedSchema: JsonSchema7Type = schema;\n      if (\n        'additionalProperties' in schema &&\n        schema.additionalProperties === false\n      ) {\n        const { additionalProperties, ...rest } = schema;\n        nestedSchema = rest;\n      }\n      mergedAllOf.push(nestedSchema);\n    }\n  });\n  return mergedAllOf.length ? { allOf: mergedAllOf } : undefined;\n}\n","import { ZodLiteralDef } from 'zod/v3';\n\nexport type JsonSchema7LiteralType =\n  | {\n      type: 'string' | 'number' | 'integer' | 'boolean';\n      const: string | number | boolean;\n    }\n  | {\n      type: 'object' | 'array';\n    };\n\nexport function parseLiteralDef(def: ZodLiteralDef): JsonSchema7LiteralType {\n  const parsedType = typeof def.value;\n  if (\n    parsedType !== 'bigint' &&\n    parsedType !== 'number' &&\n    parsedType !== 'boolean' &&\n    parsedType !== 'string'\n  ) {\n    return {\n      type: Array.isArray(def.value) ? 'array' : 'object',\n    };\n  }\n\n  return {\n    type: parsedType === 'bigint' ? 'integer' : parsedType,\n    const: def.value,\n  };\n}\n","import { ZodStringDef } from 'zod/v3';\nimport { Refs } from '../refs';\n\nlet emojiRegex: RegExp | undefined = undefined;\n\n/**\n * Generated from the regular expressions found here as of 2024-05-22:\n * https://github.com/colinhacks/zod/blob/master/src/types.ts.\n *\n * Expressions with /i flag have been changed accordingly.\n */\nexport const zodPatterns = {\n  /**\n   * `c` was changed to `[cC]` to replicate /i flag\n   */\n  cuid: /^[cC][^\\s-]{8,}$/,\n  cuid2: /^[0-9a-z]+$/,\n  ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,\n  /**\n   * `a-z` was added to replicate /i flag\n   */\n  email:\n    /^(?!\\.)(?!.*\\.\\.)([a-zA-Z0-9_'+\\-\\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\\-]*\\.)+[a-zA-Z]{2,}$/,\n  /**\n   * Constructed a valid Unicode RegExp\n   *\n   * Lazily instantiate since this type of regex isn't supported\n   * in all envs (e.g. React Native).\n   *\n   * See:\n   * https://github.com/colinhacks/zod/issues/2433\n   * Fix in Zod:\n   * https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b\n   */\n  emoji: () => {\n    if (emojiRegex === undefined) {\n      emojiRegex = RegExp(\n        '^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$',\n        'u',\n      );\n    }\n    return emojiRegex;\n  },\n  /**\n   * Unused\n   */\n  uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n  /**\n   * Unused\n   */\n  ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n  ipv4Cidr:\n    /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\/(3[0-2]|[12]?[0-9])$/,\n  /**\n   * Unused\n   */\n  ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,\n  ipv6Cidr:\n    /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,\n  base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,\n  base64url:\n    /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,\n  nanoid: /^[a-zA-Z0-9_-]{21}$/,\n  jwt: /^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]*$/,\n} as const;\n\nexport type JsonSchema7StringType = {\n  type: 'string';\n  minLength?: number;\n  maxLength?: number;\n  format?:\n    | 'email'\n    | 'idn-email'\n    | 'uri'\n    | 'uuid'\n    | 'date-time'\n    | 'ipv4'\n    | 'ipv6'\n    | 'date'\n    | 'time'\n    | 'duration';\n  pattern?: string;\n  allOf?: {\n    pattern: string;\n  }[];\n  anyOf?: {\n    format: string;\n  }[];\n  contentEncoding?: string;\n};\n\nexport function parseStringDef(\n  def: ZodStringDef,\n  refs: Refs,\n): JsonSchema7StringType {\n  const res: JsonSchema7StringType = {\n    type: 'string',\n  };\n\n  if (def.checks) {\n    for (const check of def.checks) {\n      switch (check.kind) {\n        case 'min':\n          res.minLength =\n            typeof res.minLength === 'number'\n              ? Math.max(res.minLength, check.value)\n              : check.value;\n          break;\n        case 'max':\n          res.maxLength =\n            typeof res.maxLength === 'number'\n              ? Math.min(res.maxLength, check.value)\n              : check.value;\n\n          break;\n        case 'email':\n          switch (refs.emailStrategy) {\n            case 'format:email':\n              addFormat(res, 'email', check.message, refs);\n              break;\n            case 'format:idn-email':\n              addFormat(res, 'idn-email', check.message, refs);\n              break;\n            case 'pattern:zod':\n              addPattern(res, zodPatterns.email, check.message, refs);\n              break;\n          }\n\n          break;\n        case 'url':\n          addFormat(res, 'uri', check.message, refs);\n          break;\n        case 'uuid':\n          addFormat(res, 'uuid', check.message, refs);\n          break;\n        case 'regex':\n          addPattern(res, check.regex, check.message, refs);\n          break;\n        case 'cuid':\n          addPattern(res, zodPatterns.cuid, check.message, refs);\n          break;\n        case 'cuid2':\n          addPattern(res, zodPatterns.cuid2, check.message, refs);\n          break;\n        case 'startsWith':\n          addPattern(\n            res,\n            RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`),\n            check.message,\n            refs,\n          );\n          break;\n        case 'endsWith':\n          addPattern(\n            res,\n            RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`),\n            check.message,\n            refs,\n          );\n          break;\n        case 'datetime':\n          addFormat(res, 'date-time', check.message, refs);\n          break;\n        case 'date':\n          addFormat(res, 'date', check.message, refs);\n          break;\n        case 'time':\n          addFormat(res, 'time', check.message, refs);\n          break;\n        case 'duration':\n          addFormat(res, 'duration', check.message, refs);\n          break;\n        case 'length':\n          res.minLength =\n            typeof res.minLength === 'number'\n              ? Math.max(res.minLength, check.value)\n              : check.value;\n          res.maxLength =\n            typeof res.maxLength === 'number'\n              ? Math.min(res.maxLength, check.value)\n              : check.value;\n          break;\n        case 'includes': {\n          addPattern(\n            res,\n            RegExp(escapeLiteralCheckValue(check.value, refs)),\n            check.message,\n            refs,\n          );\n          break;\n        }\n        case 'ip': {\n          if (check.version !== 'v6') {\n            addFormat(res, 'ipv4', check.message, refs);\n          }\n          if (check.version !== 'v4') {\n            addFormat(res, 'ipv6', check.message, refs);\n          }\n          break;\n        }\n        case 'base64url':\n          addPattern(res, zodPatterns.base64url, check.message, refs);\n          break;\n        case 'jwt':\n          addPattern(res, zodPatterns.jwt, check.message, refs);\n          break;\n        case 'cidr': {\n          if (check.version !== 'v6') {\n            addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n          }\n          if (check.version !== 'v4') {\n            addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n          }\n          break;\n        }\n        case 'emoji':\n          addPattern(res, zodPatterns.emoji(), check.message, refs);\n          break;\n        case 'ulid': {\n          addPattern(res, zodPatterns.ulid, check.message, refs);\n          break;\n        }\n        case 'base64': {\n          switch (refs.base64Strategy) {\n            case 'format:binary': {\n              addFormat(res, 'binary' as any, check.message, refs);\n              break;\n            }\n\n            case 'contentEncoding:base64': {\n              res.contentEncoding = 'base64';\n              break;\n            }\n\n            case 'pattern:zod': {\n              addPattern(res, zodPatterns.base64, check.message, refs);\n              break;\n            }\n          }\n          break;\n        }\n        case 'nanoid': {\n          addPattern(res, zodPatterns.nanoid, check.message, refs);\n        }\n        case 'toLowerCase':\n        case 'toUpperCase':\n        case 'trim':\n          break;\n        default:\n          /* c8 ignore next */\n          ((_: never) => {})(check);\n      }\n    }\n  }\n\n  return res;\n}\n\nfunction escapeLiteralCheckValue(literal: string, refs: Refs): string {\n  return refs.patternStrategy === 'escape'\n    ? escapeNonAlphaNumeric(literal)\n    : literal;\n}\n\nconst ALPHA_NUMERIC = new Set(\n  'ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789',\n);\n\nfunction escapeNonAlphaNumeric(source: string) {\n  let result = '';\n\n  for (let i = 0; i < source.length; i++) {\n    if (!ALPHA_NUMERIC.has(source[i])) {\n      result += '\\\\';\n    }\n\n    result += source[i];\n  }\n\n  return result;\n}\n\n// Adds a \"format\" keyword to the schema. If a format exists, both formats will be joined in an allOf-node, along with subsequent ones.\nfunction addFormat(\n  schema: JsonSchema7StringType,\n  value: Required<JsonSchema7StringType>['format'],\n  message: string | undefined,\n  refs: Refs,\n) {\n  if (schema.format || schema.anyOf?.some(x => x.format)) {\n    if (!schema.anyOf) {\n      schema.anyOf = [];\n    }\n\n    if (schema.format) {\n      schema.anyOf!.push({\n        format: schema.format,\n      });\n      delete schema.format;\n    }\n\n    schema.anyOf!.push({\n      format: value,\n      ...(message &&\n        refs.errorMessages && { errorMessage: { format: message } }),\n    });\n  } else {\n    schema.format = value;\n  }\n}\n\n// Adds a \"pattern\" keyword to the schema. If a pattern exists, both patterns will be joined in an allOf-node, along with subsequent ones.\nfunction addPattern(\n  schema: JsonSchema7StringType,\n  regex: RegExp,\n  message: string | undefined,\n  refs: Refs,\n) {\n  if (schema.pattern || schema.allOf?.some(x => x.pattern)) {\n    if (!schema.allOf) {\n      schema.allOf = [];\n    }\n\n    if (schema.pattern) {\n      schema.allOf!.push({\n        pattern: schema.pattern,\n      });\n      delete schema.pattern;\n    }\n\n    schema.allOf!.push({\n      pattern: stringifyRegExpWithFlags(regex, refs),\n      ...(message &&\n        refs.errorMessages && { errorMessage: { pattern: message } }),\n    });\n  } else {\n    schema.pattern = stringifyRegExpWithFlags(regex, refs);\n  }\n}\n\n// Mutate z.string.regex() in a best attempt to accommodate for regex flags when applyRegexFlags is true\nfunction stringifyRegExpWithFlags(regex: RegExp, refs: Refs): string {\n  if (!refs.applyRegexFlags || !regex.flags) {\n    return regex.source;\n  }\n\n  // Currently handled flags\n  const flags = {\n    i: regex.flags.includes('i'), // Case-insensitive\n    m: regex.flags.includes('m'), // `^` and `$` matches adjacent to newline characters\n    s: regex.flags.includes('s'), // `.` matches newlines\n  };\n\n  // The general principle here is to step through each character, one at a time, applying mutations as flags require. We keep track when the current character is escaped, and when it's inside a group /like [this]/ or (also) a range like /[a-z]/. The following is fairly brittle imperative code; edit at your peril!\n  const source = flags.i ? regex.source.toLowerCase() : regex.source;\n  let pattern = '';\n  let isEscaped = false;\n  let inCharGroup = false;\n  let inCharRange = false;\n\n  for (let i = 0; i < source.length; i++) {\n    if (isEscaped) {\n      pattern += source[i];\n      isEscaped = false;\n      continue;\n    }\n\n    if (flags.i) {\n      if (inCharGroup) {\n        if (source[i].match(/[a-z]/)) {\n          if (inCharRange) {\n            pattern += source[i];\n            pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();\n            inCharRange = false;\n          } else if (source[i + 1] === '-' && source[i + 2]?.match(/[a-z]/)) {\n            pattern += source[i];\n            inCharRange = true;\n          } else {\n            pattern += `${source[i]}${source[i].toUpperCase()}`;\n          }\n          continue;\n        }\n      } else if (source[i].match(/[a-z]/)) {\n        pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n        continue;\n      }\n    }\n\n    if (flags.m) {\n      if (source[i] === '^') {\n        pattern += `(^|(?<=[\\r\\n]))`;\n        continue;\n      } else if (source[i] === '$') {\n        pattern += `($|(?=[\\r\\n]))`;\n        continue;\n      }\n    }\n\n    if (flags.s && source[i] === '.') {\n      pattern += inCharGroup ? `${source[i]}\\r\\n` : `[${source[i]}\\r\\n]`;\n      continue;\n    }\n\n    pattern += source[i];\n    if (source[i] === '\\\\') {\n      isEscaped = true;\n    } else if (inCharGroup && source[i] === ']') {\n      inCharGroup = false;\n    } else if (!inCharGroup && source[i] === '[') {\n      inCharGroup = true;\n    }\n  }\n\n  try {\n    new RegExp(pattern);\n  } catch {\n    console.warn(\n      `Could not convert regex pattern at ${refs.currentPath.join(\n        '/',\n      )} to a flag-independent form! Falling back to the flag-ignorant source`,\n    );\n    return regex.source;\n  }\n\n  return pattern;\n}\n","import {\n  ZodFirstPartyTypeKind,\n  ZodMapDef,\n  ZodRecordDef,\n  ZodTypeAny,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseBrandedDef } from './branded';\nimport { JsonSchema7EnumType } from './enum';\nimport { JsonSchema7StringType, parseStringDef } from './string';\n\ntype JsonSchema7RecordPropertyNamesType =\n  | Omit<JsonSchema7StringType, 'type'>\n  | Omit<JsonSchema7EnumType, 'type'>;\n\nexport type JsonSchema7RecordType = {\n  type: 'object';\n  additionalProperties?: JsonSchema7Type | true;\n  propertyNames?: JsonSchema7RecordPropertyNamesType;\n};\n\nexport function parseRecordDef(\n  def: ZodRecordDef<ZodTypeAny, ZodTypeAny> | ZodMapDef,\n  refs: Refs,\n): JsonSchema7RecordType {\n  const schema: JsonSchema7RecordType = {\n    type: 'object',\n    additionalProperties:\n      parseDef(def.valueType._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, 'additionalProperties'],\n      }) ?? refs.allowedAdditionalProperties,\n  };\n\n  if (\n    def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n    def.keyType._def.checks?.length\n  ) {\n    const { type, ...keyType } = parseStringDef(def.keyType._def, refs);\n\n    return {\n      ...schema,\n      propertyNames: keyType,\n    };\n  } else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodEnum) {\n    return {\n      ...schema,\n      propertyNames: {\n        enum: def.keyType._def.values,\n      },\n    };\n  } else if (\n    def.keyType?._def.typeName === ZodFirstPartyTypeKind.ZodBranded &&\n    def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind.ZodString &&\n    def.keyType._def.type._def.checks?.length\n  ) {\n    const { type, ...keyType } = parseBrandedDef(\n      def.keyType._def,\n      refs,\n    ) as JsonSchema7StringType;\n\n    return {\n      ...schema,\n      propertyNames: keyType,\n    };\n  }\n\n  return schema;\n}\n","import { ZodMapDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseAnyDef } from './any';\nimport { JsonSchema7RecordType, parseRecordDef } from './record';\n\nexport type JsonSchema7MapType = {\n  type: 'array';\n  maxItems: 125;\n  items: {\n    type: 'array';\n    items: [JsonSchema7Type, JsonSchema7Type];\n    minItems: 2;\n    maxItems: 2;\n  };\n};\n\nexport function parseMapDef(\n  def: ZodMapDef,\n  refs: Refs,\n): JsonSchema7MapType | JsonSchema7RecordType {\n  if (refs.mapStrategy === 'record') {\n    return parseRecordDef(def, refs);\n  }\n\n  const keys =\n    parseDef(def.keyType._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'items', 'items', '0'],\n    }) || parseAnyDef();\n  const values =\n    parseDef(def.valueType._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'items', 'items', '1'],\n    }) || parseAnyDef();\n  return {\n    type: 'array',\n    maxItems: 125,\n    items: {\n      type: 'array',\n      items: [keys, values],\n      minItems: 2,\n      maxItems: 2,\n    },\n  };\n}\n","import { ZodNativeEnumDef } from 'zod/v3';\n\nexport type JsonSchema7NativeEnumType = {\n  type: 'string' | 'number' | ['string', 'number'];\n  enum: (string | number)[];\n};\n\nexport function parseNativeEnumDef(\n  def: ZodNativeEnumDef,\n): JsonSchema7NativeEnumType {\n  const object = def.values;\n  const actualKeys = Object.keys(def.values).filter((key: string) => {\n    return typeof object[object[key]] !== 'number';\n  });\n\n  const actualValues = actualKeys.map((key: string) => object[key]);\n\n  const parsedTypes = Array.from(\n    new Set(actualValues.map((values: string | number) => typeof values)),\n  );\n\n  return {\n    type:\n      parsedTypes.length === 1\n        ? parsedTypes[0] === 'string'\n          ? 'string'\n          : 'number'\n        : ['string', 'number'],\n    enum: actualValues,\n  };\n}\n","import { JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7NeverType = {\n  not: JsonSchema7AnyType;\n};\n\nexport function parseNeverDef(): JsonSchema7NeverType | undefined {\n  return { not: parseAnyDef() };\n}\n","export type JsonSchema7NullType = {\n  type: 'null';\n};\n\nexport function parseNullDef(): JsonSchema7NullType {\n  return {\n    type: 'null',\n  };\n}\n","import {\n  ZodDiscriminatedUnionDef,\n  ZodLiteralDef,\n  ZodTypeAny,\n  ZodUnionDef,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport const primitiveMappings = {\n  ZodString: 'string',\n  ZodNumber: 'number',\n  ZodBigInt: 'integer',\n  ZodBoolean: 'boolean',\n  ZodNull: 'null',\n} as const;\ntype ZodPrimitive = keyof typeof primitiveMappings;\ntype JsonSchema7Primitive =\n  (typeof primitiveMappings)[keyof typeof primitiveMappings];\n\nexport type JsonSchema7UnionType =\n  | JsonSchema7PrimitiveUnionType\n  | JsonSchema7AnyOfType;\n\ntype JsonSchema7PrimitiveUnionType =\n  | {\n      type: JsonSchema7Primitive | JsonSchema7Primitive[];\n    }\n  | {\n      type: JsonSchema7Primitive | JsonSchema7Primitive[];\n      enum: (string | number | bigint | boolean | null)[];\n    };\n\ntype JsonSchema7AnyOfType = {\n  anyOf: JsonSchema7Type[];\n};\n\nexport function parseUnionDef(\n  def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n  refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined {\n  const options: readonly ZodTypeAny[] =\n    def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n\n  // This blocks tries to look ahead a bit to produce nicer looking schemas with type array instead of anyOf.\n  if (\n    options.every(\n      x =>\n        x._def.typeName in primitiveMappings &&\n        (!x._def.checks || !x._def.checks.length),\n    )\n  ) {\n    // all types in union are primitive and lack checks, so might as well squash into {type: [...]}\n\n    const types = options.reduce((types: JsonSchema7Primitive[], x) => {\n      const type = primitiveMappings[x._def.typeName as ZodPrimitive]; //Can be safely casted due to row 43\n      return type && !types.includes(type) ? [...types, type] : types;\n    }, []);\n\n    return {\n      type: types.length > 1 ? types : types[0],\n    };\n  } else if (\n    options.every(x => x._def.typeName === 'ZodLiteral' && !x.description)\n  ) {\n    // all options literals\n\n    const types = options.reduce(\n      (acc: JsonSchema7Primitive[], x: { _def: ZodLiteralDef }) => {\n        const type = typeof x._def.value;\n        switch (type) {\n          case 'string':\n          case 'number':\n          case 'boolean':\n            return [...acc, type];\n          case 'bigint':\n            return [...acc, 'integer' as const];\n          case 'object':\n            if (x._def.value === null) return [...acc, 'null' as const];\n          case 'symbol':\n          case 'undefined':\n          case 'function':\n          default:\n            return acc;\n        }\n      },\n      [],\n    );\n\n    if (types.length === options.length) {\n      // all the literals are primitive, as far as null can be considered primitive\n\n      const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n      return {\n        type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n        enum: options.reduce(\n          (acc, x) => {\n            return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n          },\n          [] as (string | number | bigint | boolean | null)[],\n        ),\n      };\n    }\n  } else if (options.every(x => x._def.typeName === 'ZodEnum')) {\n    return {\n      type: 'string',\n      enum: options.reduce(\n        (acc: string[], x) => [\n          ...acc,\n          ...x._def.values.filter((x: string) => !acc.includes(x)),\n        ],\n        [],\n      ),\n    };\n  }\n\n  return asAnyOf(def, refs);\n}\n\nconst asAnyOf = (\n  def: ZodUnionDef | ZodDiscriminatedUnionDef<any, any>,\n  refs: Refs,\n): JsonSchema7PrimitiveUnionType | JsonSchema7AnyOfType | undefined => {\n  const anyOf = (\n    (def.options instanceof Map\n      ? Array.from(def.options.values())\n      : def.options) as any[]\n  )\n    .map((x, i) =>\n      parseDef(x._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, 'anyOf', `${i}`],\n      }),\n    )\n    .filter(\n      (x): x is JsonSchema7Type =>\n        !!x &&\n        (!refs.strictUnions ||\n          (typeof x === 'object' && Object.keys(x).length > 0)),\n    );\n\n  return anyOf.length ? { anyOf } : undefined;\n};\n","import { ZodNullableDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { JsonSchema7NullType } from './null';\nimport { primitiveMappings } from './union';\n\nexport type JsonSchema7NullableType =\n  | {\n      anyOf: [JsonSchema7Type, JsonSchema7NullType];\n    }\n  | {\n      type: [string, 'null'];\n    };\n\nexport function parseNullableDef(\n  def: ZodNullableDef,\n  refs: Refs,\n): JsonSchema7NullableType | undefined {\n  if (\n    ['ZodString', 'ZodNumber', 'ZodBigInt', 'ZodBoolean', 'ZodNull'].includes(\n      def.innerType._def.typeName,\n    ) &&\n    (!def.innerType._def.checks || !def.innerType._def.checks.length)\n  ) {\n    return {\n      type: [\n        primitiveMappings[\n          def.innerType._def.typeName as keyof typeof primitiveMappings\n        ],\n        'null',\n      ],\n    };\n  }\n\n  const base = parseDef(def.innerType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'anyOf', '0'],\n  });\n\n  return base && { anyOf: [base, { type: 'null' }] };\n}\n","import { ZodNumberDef } from 'zod/v3';\n\nexport type JsonSchema7NumberType = {\n  type: 'number' | 'integer';\n  minimum?: number;\n  exclusiveMinimum?: number;\n  maximum?: number;\n  exclusiveMaximum?: number;\n  multipleOf?: number;\n};\n\nexport function parseNumberDef(def: ZodNumberDef): JsonSchema7NumberType {\n  const res: JsonSchema7NumberType = {\n    type: 'number',\n  };\n\n  if (!def.checks) return res;\n\n  for (const check of def.checks) {\n    switch (check.kind) {\n      case 'int':\n        res.type = 'integer';\n        break;\n      case 'min':\n        if (check.inclusive) {\n          res.minimum = check.value;\n        } else {\n          res.exclusiveMinimum = check.value;\n        }\n        break;\n      case 'max':\n        if (check.inclusive) {\n          res.maximum = check.value;\n        } else {\n          res.exclusiveMaximum = check.value;\n        }\n        break;\n      case 'multipleOf':\n        res.multipleOf = check.value;\n        break;\n    }\n  }\n  return res;\n}\n","import { ZodObjectDef, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7ObjectType = {\n  type: 'object';\n  properties: Record<string, JsonSchema7Type>;\n  additionalProperties?: boolean | JsonSchema7Type;\n  required?: string[];\n};\n\nexport function parseObjectDef(def: ZodObjectDef, refs: Refs) {\n  const result: JsonSchema7ObjectType = {\n    type: 'object',\n    properties: {},\n  };\n\n  const required: string[] = [];\n\n  const shape = def.shape();\n\n  for (const propName in shape) {\n    let propDef = shape[propName];\n\n    if (propDef === undefined || propDef._def === undefined) {\n      continue;\n    }\n\n    const propOptional = safeIsOptional(propDef);\n\n    const parsedDef = parseDef(propDef._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'properties', propName],\n      propertyPath: [...refs.currentPath, 'properties', propName],\n    });\n\n    if (parsedDef === undefined) {\n      continue;\n    }\n\n    result.properties[propName] = parsedDef;\n\n    if (!propOptional) {\n      required.push(propName);\n    }\n  }\n\n  if (required.length) {\n    result.required = required;\n  }\n\n  const additionalProperties = decideAdditionalProperties(def, refs);\n\n  if (additionalProperties !== undefined) {\n    result.additionalProperties = additionalProperties;\n  }\n\n  return result;\n}\n\nfunction decideAdditionalProperties(def: ZodObjectDef, refs: Refs) {\n  if (def.catchall._def.typeName !== 'ZodNever') {\n    return parseDef(def.catchall._def, {\n      ...refs,\n      currentPath: [...refs.currentPath, 'additionalProperties'],\n    });\n  }\n\n  switch (def.unknownKeys) {\n    case 'passthrough':\n      return refs.allowedAdditionalProperties;\n    case 'strict':\n      return refs.rejectedAdditionalProperties;\n    case 'strip':\n      return refs.removeAdditionalStrategy === 'strict'\n        ? refs.allowedAdditionalProperties\n        : refs.rejectedAdditionalProperties;\n  }\n}\n\nfunction safeIsOptional(schema: ZodTypeAny): boolean {\n  try {\n    return schema.isOptional();\n  } catch {\n    return true;\n  }\n}\n","import { ZodOptionalDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { parseAnyDef } from './any';\n\nexport const parseOptionalDef = (\n  def: ZodOptionalDef,\n  refs: Refs,\n): JsonSchema7Type | undefined => {\n  if (refs.currentPath.toString() === refs.propertyPath?.toString()) {\n    return parseDef(def.innerType._def, refs);\n  }\n\n  const innerSchema = parseDef(def.innerType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'anyOf', '1'],\n  });\n\n  return innerSchema\n    ? { anyOf: [{ not: parseAnyDef() }, innerSchema] }\n    : parseAnyDef();\n};\n","import { ZodPipelineDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\nimport { JsonSchema7AllOfType } from './intersection';\n\nexport const parsePipelineDef = (\n  def: ZodPipelineDef<any, any>,\n  refs: Refs,\n): JsonSchema7AllOfType | JsonSchema7Type | undefined => {\n  if (refs.pipeStrategy === 'input') {\n    return parseDef(def.in._def, refs);\n  } else if (refs.pipeStrategy === 'output') {\n    return parseDef(def.out._def, refs);\n  }\n\n  const a = parseDef(def.in._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'allOf', '0'],\n  });\n  const b = parseDef(def.out._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'allOf', a ? '1' : '0'],\n  });\n\n  return {\n    allOf: [a, b].filter((x): x is JsonSchema7Type => x !== undefined),\n  };\n};\n","import { ZodPromiseDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport function parsePromiseDef(\n  def: ZodPromiseDef,\n  refs: Refs,\n): JsonSchema7Type | undefined {\n  return parseDef(def.type._def, refs);\n}\n","import { ZodSetDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7SetType = {\n  type: 'array';\n  uniqueItems: true;\n  items?: JsonSchema7Type;\n  minItems?: number;\n  maxItems?: number;\n};\n\nexport function parseSetDef(def: ZodSetDef, refs: Refs): JsonSchema7SetType {\n  const items = parseDef(def.valueType._def, {\n    ...refs,\n    currentPath: [...refs.currentPath, 'items'],\n  });\n\n  const schema: JsonSchema7SetType = {\n    type: 'array',\n    uniqueItems: true,\n    items,\n  };\n\n  if (def.minSize) {\n    schema.minItems = def.minSize.value;\n  }\n\n  if (def.maxSize) {\n    schema.maxItems = def.maxSize.value;\n  }\n\n  return schema;\n}\n","import { ZodTupleDef, ZodTupleItems, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { JsonSchema7Type } from '../parse-types';\nimport { Refs } from '../refs';\n\nexport type JsonSchema7TupleType = {\n  type: 'array';\n  minItems: number;\n  items: JsonSchema7Type[];\n} & (\n  | {\n      maxItems: number;\n    }\n  | {\n      additionalItems?: JsonSchema7Type;\n    }\n);\n\nexport function parseTupleDef(\n  def: ZodTupleDef<ZodTupleItems | [], ZodTypeAny | null>,\n  refs: Refs,\n): JsonSchema7TupleType {\n  if (def.rest) {\n    return {\n      type: 'array',\n      minItems: def.items.length,\n      items: def.items\n        .map((x, i) =>\n          parseDef(x._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, 'items', `${i}`],\n          }),\n        )\n        .reduce(\n          (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n          [],\n        ),\n      additionalItems: parseDef(def.rest._def, {\n        ...refs,\n        currentPath: [...refs.currentPath, 'additionalItems'],\n      }),\n    };\n  } else {\n    return {\n      type: 'array',\n      minItems: def.items.length,\n      maxItems: def.items.length,\n      items: def.items\n        .map((x, i) =>\n          parseDef(x._def, {\n            ...refs,\n            currentPath: [...refs.currentPath, 'items', `${i}`],\n          }),\n        )\n        .reduce(\n          (acc: JsonSchema7Type[], x) => (x === undefined ? acc : [...acc, x]),\n          [],\n        ),\n    };\n  }\n}\n","import { JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7UndefinedType = {\n  not: JsonSchema7AnyType;\n};\n\nexport function parseUndefinedDef(): JsonSchema7UndefinedType {\n  return {\n    not: parseAnyDef(),\n  };\n}\n","import { JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7UnknownType = JsonSchema7AnyType;\n\nexport function parseUnknownDef(): JsonSchema7UnknownType {\n  return parseAnyDef();\n}\n","import { ZodReadonlyDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport { Refs } from '../refs';\n\nexport const parseReadonlyDef = (def: ZodReadonlyDef<any>, refs: Refs) => {\n  return parseDef(def.innerType._def, refs);\n};\n","import { ZodFirstPartyTypeKind } from 'zod/v3';\nimport { parseAnyDef } from './parsers/any';\nimport { parseArrayDef } from './parsers/array';\nimport { parseBigintDef } from './parsers/bigint';\nimport { parseBooleanDef } from './parsers/boolean';\nimport { parseBrandedDef } from './parsers/branded';\nimport { parseCatchDef } from './parsers/catch';\nimport { parseDateDef } from './parsers/date';\nimport { parseDefaultDef } from './parsers/default';\nimport { parseEffectsDef } from './parsers/effects';\nimport { parseEnumDef } from './parsers/enum';\nimport { parseIntersectionDef } from './parsers/intersection';\nimport { parseLiteralDef } from './parsers/literal';\nimport { parseMapDef } from './parsers/map';\nimport { parseNativeEnumDef } from './parsers/native-enum';\nimport { parseNeverDef } from './parsers/never';\nimport { parseNullDef } from './parsers/null';\nimport { parseNullableDef } from './parsers/nullable';\nimport { parseNumberDef } from './parsers/number';\nimport { parseObjectDef } from './parsers/object';\nimport { parseOptionalDef } from './parsers/optional';\nimport { parsePipelineDef } from './parsers/pipeline';\nimport { parsePromiseDef } from './parsers/promise';\nimport { parseRecordDef } from './parsers/record';\nimport { parseSetDef } from './parsers/set';\nimport { parseStringDef } from './parsers/string';\nimport { parseTupleDef } from './parsers/tuple';\nimport { parseUndefinedDef } from './parsers/undefined';\nimport { parseUnionDef } from './parsers/union';\nimport { parseUnknownDef } from './parsers/unknown';\nimport { Refs } from './refs';\nimport { parseReadonlyDef } from './parsers/readonly';\nimport { JsonSchema7Type } from './parse-types';\n\nexport type InnerDefGetter = () => any;\n\nexport const selectParser = (\n  def: any,\n  typeName: ZodFirstPartyTypeKind,\n  refs: Refs,\n): JsonSchema7Type | undefined | InnerDefGetter => {\n  switch (typeName) {\n    case ZodFirstPartyTypeKind.ZodString:\n      return parseStringDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodNumber:\n      return parseNumberDef(def);\n    case ZodFirstPartyTypeKind.ZodObject:\n      return parseObjectDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodBigInt:\n      return parseBigintDef(def);\n    case ZodFirstPartyTypeKind.ZodBoolean:\n      return parseBooleanDef();\n    case ZodFirstPartyTypeKind.ZodDate:\n      return parseDateDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodUndefined:\n      return parseUndefinedDef();\n    case ZodFirstPartyTypeKind.ZodNull:\n      return parseNullDef();\n    case ZodFirstPartyTypeKind.ZodArray:\n      return parseArrayDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodUnion:\n    case ZodFirstPartyTypeKind.ZodDiscriminatedUnion:\n      return parseUnionDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodIntersection:\n      return parseIntersectionDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodTuple:\n      return parseTupleDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodRecord:\n      return parseRecordDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodLiteral:\n      return parseLiteralDef(def);\n    case ZodFirstPartyTypeKind.ZodEnum:\n      return parseEnumDef(def);\n    case ZodFirstPartyTypeKind.ZodNativeEnum:\n      return parseNativeEnumDef(def);\n    case ZodFirstPartyTypeKind.ZodNullable:\n      return parseNullableDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodOptional:\n      return parseOptionalDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodMap:\n      return parseMapDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodSet:\n      return parseSetDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodLazy:\n      return () => (def as any).getter()._def;\n    case ZodFirstPartyTypeKind.ZodPromise:\n      return parsePromiseDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodNaN:\n    case ZodFirstPartyTypeKind.ZodNever:\n      return parseNeverDef();\n    case ZodFirstPartyTypeKind.ZodEffects:\n      return parseEffectsDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodAny:\n      return parseAnyDef();\n    case ZodFirstPartyTypeKind.ZodUnknown:\n      return parseUnknownDef();\n    case ZodFirstPartyTypeKind.ZodDefault:\n      return parseDefaultDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodBranded:\n      return parseBrandedDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodReadonly:\n      return parseReadonlyDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodCatch:\n      return parseCatchDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodPipeline:\n      return parsePipelineDef(def, refs);\n    case ZodFirstPartyTypeKind.ZodFunction:\n    case ZodFirstPartyTypeKind.ZodVoid:\n    case ZodFirstPartyTypeKind.ZodSymbol:\n      return undefined;\n    default:\n      /* c8 ignore next */\n      return ((_: never) => undefined)(typeName);\n  }\n};\n","export const getRelativePath = (pathA: string[], pathB: string[]) => {\n  let i = 0;\n  for (; i < pathA.length && i < pathB.length; i++) {\n    if (pathA[i] !== pathB[i]) break;\n  }\n  return [(pathA.length - i).toString(), ...pathB.slice(i)].join('/');\n};\n","import { ZodTypeDef } from 'zod/v3';\nimport { Refs, Seen } from './refs';\nimport { ignoreOverride } from './options';\nimport { JsonSchema7Type } from './parse-types';\nimport { selectParser } from './select-parser';\nimport { getRelativePath } from './get-relative-path';\nimport { parseAnyDef } from './parsers/any';\n\nexport function parseDef(\n  def: ZodTypeDef,\n  refs: Refs,\n  forceResolution = false, // Forces a new schema to be instantiated even though its def has been seen. Used for improving refs in definitions. See https://github.com/StefanTerdell/zod-to-json-schema/pull/61.\n): JsonSchema7Type | undefined {\n  const seenItem = refs.seen.get(def);\n\n  if (refs.override) {\n    const overrideResult = refs.override?.(\n      def,\n      refs,\n      seenItem,\n      forceResolution,\n    );\n\n    if (overrideResult !== ignoreOverride) {\n      return overrideResult;\n    }\n  }\n\n  if (seenItem && !forceResolution) {\n    const seenSchema = get$ref(seenItem, refs);\n\n    if (seenSchema !== undefined) {\n      return seenSchema;\n    }\n  }\n\n  const newItem: Seen = { def, path: refs.currentPath, jsonSchema: undefined };\n\n  refs.seen.set(def, newItem);\n\n  const jsonSchemaOrGetter = selectParser(def, (def as any).typeName, refs);\n\n  // If the return was a function, then the inner definition needs to be extracted before a call to parseDef (recursive)\n  const jsonSchema =\n    typeof jsonSchemaOrGetter === 'function'\n      ? parseDef(jsonSchemaOrGetter(), refs)\n      : jsonSchemaOrGetter;\n\n  if (jsonSchema) {\n    addMeta(def, refs, jsonSchema);\n  }\n\n  if (refs.postProcess) {\n    const postProcessResult = refs.postProcess(jsonSchema, def, refs);\n\n    newItem.jsonSchema = jsonSchema;\n\n    return postProcessResult;\n  }\n\n  newItem.jsonSchema = jsonSchema;\n\n  return jsonSchema;\n}\n\nconst get$ref = (\n  item: Seen,\n  refs: Refs,\n):\n  | {\n      $ref: string;\n    }\n  | {}\n  | undefined => {\n  switch (refs.$refStrategy) {\n    case 'root':\n      return { $ref: item.path.join('/') };\n    case 'relative':\n      return { $ref: getRelativePath(refs.currentPath, item.path) };\n    case 'none':\n    case 'seen': {\n      if (\n        item.path.length < refs.currentPath.length &&\n        item.path.every((value, index) => refs.currentPath[index] === value)\n      ) {\n        console.warn(\n          `Recursive reference detected at ${refs.currentPath.join(\n            '/',\n          )}! Defaulting to any`,\n        );\n\n        return parseAnyDef();\n      }\n\n      return refs.$refStrategy === 'seen' ? parseAnyDef() : undefined;\n    }\n  }\n};\n\nconst addMeta = (\n  def: ZodTypeDef,\n  refs: Refs,\n  jsonSchema: JsonSchema7Type,\n): JsonSchema7Type => {\n  if (def.description) {\n    jsonSchema.description = def.description;\n  }\n  return jsonSchema;\n};\n","import { ZodTypeDef } from 'zod/v3';\nimport { getDefaultOptions, Options } from './options';\nimport { JsonSchema7Type } from './parse-types';\n\nexport type Refs = {\n  seen: Map<ZodTypeDef, Seen>;\n  currentPath: string[];\n  propertyPath: string[] | undefined;\n} & Options;\n\nexport type Seen = {\n  def: ZodTypeDef;\n  path: string[];\n  jsonSchema: JsonSchema7Type | undefined;\n};\n\nexport const getRefs = (options?: string | Partial<Options>): Refs => {\n  const _options = getDefaultOptions(options);\n  const currentPath =\n    _options.name !== undefined\n      ? [..._options.basePath, _options.definitionPath, _options.name]\n      : _options.basePath;\n  return {\n    ..._options,\n    currentPath: currentPath,\n    propertyPath: undefined,\n    seen: new Map(\n      Object.entries(_options.definitions).map(([name, def]) => [\n        def._def,\n        {\n          def: def._def,\n          path: [..._options.basePath, _options.definitionPath, name],\n          // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n          jsonSchema: undefined,\n        },\n      ]),\n    ),\n  };\n};\n","import { ZodSchema } from 'zod/v3';\nimport { Options } from './options';\nimport { parseDef } from './parse-def';\nimport { JsonSchema7Type } from './parse-types';\nimport { getRefs } from './refs';\nimport { parseAnyDef } from './parsers/any';\n\nconst zod3ToJsonSchema = (\n  schema: ZodSchema<any>,\n  options?: Partial<Options> | string,\n): JsonSchema7Type & {\n  $schema?: string;\n  definitions?: {\n    [key: string]: JsonSchema7Type;\n  };\n} => {\n  const refs = getRefs(options);\n\n  let definitions =\n    typeof options === 'object' && options.definitions\n      ? Object.entries(options.definitions).reduce(\n          (acc: { [key: string]: JsonSchema7Type }, [name, schema]) => ({\n            ...acc,\n            [name]:\n              parseDef(\n                schema._def,\n                {\n                  ...refs,\n                  currentPath: [...refs.basePath, refs.definitionPath, name],\n                },\n                true,\n              ) ?? parseAnyDef(),\n          }),\n          {},\n        )\n      : undefined;\n\n  const name =\n    typeof options === 'string'\n      ? options\n      : options?.nameStrategy === 'title'\n        ? undefined\n        : options?.name;\n\n  const main =\n    parseDef(\n      schema._def,\n      name === undefined\n        ? refs\n        : {\n            ...refs,\n            currentPath: [...refs.basePath, refs.definitionPath, name],\n          },\n      false,\n    ) ?? (parseAnyDef() as JsonSchema7Type);\n\n  const title =\n    typeof options === 'object' &&\n    options.name !== undefined &&\n    options.nameStrategy === 'title'\n      ? options.name\n      : undefined;\n\n  if (title !== undefined) {\n    main.title = title;\n  }\n\n  const combined: ReturnType<typeof zod3ToJsonSchema> =\n    name === undefined\n      ? definitions\n        ? {\n            ...main,\n            [refs.definitionPath]: definitions,\n          }\n        : main\n      : {\n          $ref: [\n            ...(refs.$refStrategy === 'relative' ? [] : refs.basePath),\n            refs.definitionPath,\n            name,\n          ].join('/'),\n          [refs.definitionPath]: {\n            ...definitions,\n            [name]: main,\n          },\n        };\n\n  combined.$schema = 'http://json-schema.org/draft-07/schema#';\n\n  return combined;\n};\n\nexport { zod3ToJsonSchema };\n","import { JSONSchema7, TypeValidationError } from '@ai-sdk/provider';\nimport { StandardSchemaV1, StandardJSONSchemaV1 } from '@standard-schema/spec';\nimport * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4';\nimport { addAdditionalPropertiesToJsonSchema } from './add-additional-properties-to-json-schema';\nimport { zod3ToJsonSchema } from './to-json-schema/zod3-to-json-schema';\n\n/**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\nconst schemaSymbol = Symbol.for('vercel.ai.schema');\n\nexport type ValidationResult<OBJECT> =\n  | { success: true; value: OBJECT }\n  | { success: false; error: Error };\n\nexport type Schema<OBJECT = unknown> = {\n  /**\n   * Used to mark schemas so we can support both Zod and custom schemas.\n   */\n  [schemaSymbol]: true;\n\n  /**\n   * Schema type for inference.\n   */\n  _type: OBJECT;\n\n  /**\n   * Optional. Validates that the structure of a value matches this schema,\n   * and returns a typed version of the value if it does.\n   */\n  readonly validate?: (\n    value: unknown,\n  ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n\n  /**\n   * The JSON Schema for the schema. It is passed to the providers.\n   */\n  readonly jsonSchema: JSONSchema7 | PromiseLike<JSONSchema7>;\n};\n\n/**\n * Creates a schema with deferred creation.\n * This is important to reduce the startup time of the library\n * and to avoid initializing unused validators.\n *\n * @param createValidator A function that creates a schema.\n * @returns A function that returns a schema.\n */\nexport function lazySchema<SCHEMA>(\n  createSchema: () => Schema<SCHEMA>,\n): LazySchema<SCHEMA> {\n  // cache the validator to avoid initializing it multiple times\n  let schema: Schema<SCHEMA> | undefined;\n  return () => {\n    if (schema == null) {\n      schema = createSchema();\n    }\n    return schema;\n  };\n}\n\nexport type LazySchema<SCHEMA> = () => Schema<SCHEMA>;\n\nexport type ZodSchema<SCHEMA = any> =\n  | z3.Schema<SCHEMA, z3.ZodTypeDef, any>\n  | z4.core.$ZodType<SCHEMA, any>;\n\nexport type StandardSchema<SCHEMA = any> = StandardSchemaV1<unknown, SCHEMA> &\n  StandardJSONSchemaV1<unknown, SCHEMA>;\n\nexport type FlexibleSchema<SCHEMA = any> =\n  | Schema<SCHEMA>\n  | LazySchema<SCHEMA>\n  | ZodSchema<SCHEMA>\n  | StandardSchema<SCHEMA>;\n\nexport type InferSchema<SCHEMA> =\n  SCHEMA extends ZodSchema<infer T>\n    ? T\n    : SCHEMA extends StandardSchema<infer T>\n      ? T\n      : SCHEMA extends LazySchema<infer T>\n        ? T\n        : SCHEMA extends Schema<infer T>\n          ? T\n          : never;\n\n/**\n * Create a schema using a JSON Schema.\n *\n * @param jsonSchema The JSON Schema for the schema.\n * @param options.validate Optional. A validation function for the schema.\n */\nexport function jsonSchema<OBJECT = unknown>(\n  jsonSchema:\n    | JSONSchema7\n    | PromiseLike<JSONSchema7>\n    | (() => JSONSchema7 | PromiseLike<JSONSchema7>),\n  {\n    validate,\n  }: {\n    validate?: (\n      value: unknown,\n    ) => ValidationResult<OBJECT> | PromiseLike<ValidationResult<OBJECT>>;\n  } = {},\n): Schema<OBJECT> {\n  return {\n    [schemaSymbol]: true,\n    _type: undefined as OBJECT, // should never be used directly\n    get jsonSchema() {\n      if (typeof jsonSchema === 'function') {\n        jsonSchema = jsonSchema(); // cache the function results\n      }\n      return jsonSchema;\n    },\n    validate,\n  };\n}\n\nfunction isSchema(value: unknown): value is Schema {\n  return (\n    typeof value === 'object' &&\n    value !== null &&\n    schemaSymbol in value &&\n    value[schemaSymbol] === true &&\n    'jsonSchema' in value &&\n    'validate' in value\n  );\n}\n\nexport function asSchema<OBJECT>(\n  schema: FlexibleSchema<OBJECT> | undefined,\n): Schema<OBJECT> {\n  return schema == null\n    ? jsonSchema({ properties: {}, additionalProperties: false })\n    : isSchema(schema)\n      ? schema\n      : '~standard' in schema\n        ? schema['~standard'].vendor === 'zod'\n          ? zodSchema(schema as ZodSchema<OBJECT>)\n          : standardSchema(schema as StandardSchema<OBJECT>)\n        : schema();\n}\n\nfunction standardSchema<OBJECT>(\n  standardSchema: StandardSchema<OBJECT>,\n): Schema<OBJECT> {\n  return jsonSchema(\n    () =>\n      addAdditionalPropertiesToJsonSchema(\n        standardSchema['~standard'].jsonSchema.input({\n          target: 'draft-07',\n        }) as JSONSchema7,\n      ),\n    {\n      validate: async value => {\n        const result = await standardSchema['~standard'].validate(value);\n        return 'value' in result\n          ? { success: true, value: result.value }\n          : {\n              success: false,\n              error: new TypeValidationError({\n                value,\n                cause: result.issues,\n              }),\n            };\n      },\n    },\n  );\n}\n\nexport function zod3Schema<OBJECT>(\n  zodSchema: z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n  options?: {\n    /**\n     * Enables support for references in the schema.\n     * This is required for recursive schemas, e.g. with `z.lazy`.\n     * However, not all language models and providers support such references.\n     * Defaults to `false`.\n     */\n    useReferences?: boolean;\n  },\n): Schema<OBJECT> {\n  // default to no references (to support openapi conversion for google)\n  const useReferences = options?.useReferences ?? false;\n\n  return jsonSchema(\n    // defer json schema creation to avoid unnecessary computation when only validation is needed\n    () =>\n      zod3ToJsonSchema(zodSchema, {\n        $refStrategy: useReferences ? 'root' : 'none',\n      }) as JSONSchema7,\n    {\n      validate: async value => {\n        const result = await zodSchema.safeParseAsync(value);\n        return result.success\n          ? { success: true, value: result.data }\n          : { success: false, error: result.error };\n      },\n    },\n  );\n}\n\nexport function zod4Schema<OBJECT>(\n  zodSchema: z4.core.$ZodType<OBJECT, any>,\n  options?: {\n    /**\n     * Enables support for references in the schema.\n     * This is required for recursive schemas, e.g. with `z.lazy`.\n     * However, not all language models and providers support such references.\n     * Defaults to `false`.\n     */\n    useReferences?: boolean;\n  },\n): Schema<OBJECT> {\n  // default to no references (to support openapi conversion for google)\n  const useReferences = options?.useReferences ?? false;\n\n  return jsonSchema(\n    // defer json schema creation to avoid unnecessary computation when only validation is needed\n    () =>\n      addAdditionalPropertiesToJsonSchema(\n        z4.toJSONSchema(zodSchema, {\n          target: 'draft-7',\n          io: 'input',\n          reused: useReferences ? 'ref' : 'inline',\n        }) as JSONSchema7,\n      ),\n    {\n      validate: async value => {\n        const result = await z4.safeParseAsync(zodSchema, value);\n        return result.success\n          ? { success: true, value: result.data }\n          : { success: false, error: result.error };\n      },\n    },\n  );\n}\n\nexport function isZod4Schema(\n  zodSchema: z4.core.$ZodType<any, any> | z3.Schema<any, z3.ZodTypeDef, any>,\n): zodSchema is z4.core.$ZodType<any, any> {\n  // https://zod.dev/library-authors?id=how-to-support-zod-3-and-zod-4-simultaneously\n  return '_zod' in zodSchema;\n}\n\nexport function zodSchema<OBJECT>(\n  zodSchema:\n    | z4.core.$ZodType<OBJECT, any>\n    | z3.Schema<OBJECT, z3.ZodTypeDef, any>,\n  options?: {\n    /**\n     * Enables support for references in the schema.\n     * This is required for recursive schemas, e.g. with `z.lazy`.\n     * However, not all language models and providers support such references.\n     * Defaults to `false`.\n     */\n    useReferences?: boolean;\n  },\n): Schema<OBJECT> {\n  if (isZod4Schema(zodSchema)) {\n    return zod4Schema(zodSchema, options);\n  } else {\n    return zod3Schema(zodSchema, options);\n  }\n}\n","import { TypeValidationContext, TypeValidationError } from '@ai-sdk/provider';\nimport { FlexibleSchema, asSchema } from './schema';\n\n/**\n * Validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @param {TypeValidationContext} options.context - Optional context about what is being validated.\n * @returns {Promise<T>} - The typed object.\n */\nexport async function validateTypes<OBJECT>({\n  value,\n  schema,\n  context,\n}: {\n  value: unknown;\n  schema: FlexibleSchema<OBJECT>;\n  context?: TypeValidationContext;\n}): Promise<OBJECT> {\n  const result = await safeValidateTypes({ value, schema, context });\n\n  if (!result.success) {\n    throw TypeValidationError.wrap({ value, cause: result.error, context });\n  }\n\n  return result.value;\n}\n\n/**\n * Safely validates the types of an unknown object using a schema and\n * return a strongly-typed object.\n *\n * @template T - The type of the object to validate.\n * @param {string} options.value - The JSON object to validate.\n * @param {Validator<T>} options.schema - The schema to use for validating the JSON.\n * @param {TypeValidationContext} options.context - Optional context about what is being validated.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeValidateTypes<OBJECT>({\n  value,\n  schema,\n  context,\n}: {\n  value: unknown;\n  schema: FlexibleSchema<OBJECT>;\n  context?: TypeValidationContext;\n}): Promise<\n  | {\n      success: true;\n      value: OBJECT;\n      rawValue: unknown;\n    }\n  | {\n      success: false;\n      error: TypeValidationError;\n      rawValue: unknown;\n    }\n> {\n  const actualSchema = asSchema(schema);\n\n  try {\n    if (actualSchema.validate == null) {\n      return { success: true, value: value as OBJECT, rawValue: value };\n    }\n\n    const result = await actualSchema.validate(value);\n\n    if (result.success) {\n      return { success: true, value: result.value, rawValue: value };\n    }\n\n    return {\n      success: false,\n      error: TypeValidationError.wrap({ value, cause: result.error, context }),\n      rawValue: value,\n    };\n  } catch (error) {\n    return {\n      success: false,\n      error: TypeValidationError.wrap({ value, cause: error, context }),\n      rawValue: value,\n    };\n  }\n}\n","import {\n  JSONParseError,\n  JSONValue,\n  TypeValidationError,\n} from '@ai-sdk/provider';\nimport { secureJsonParse } from './secure-json-parse';\nimport { safeValidateTypes, validateTypes } from './validate-types';\nimport { FlexibleSchema } from './schema';\n\n/**\n * Parses a JSON string into an unknown object.\n *\n * @param text - The JSON string to parse.\n * @returns {JSONValue} - The parsed JSON object.\n */\nexport async function parseJSON(options: {\n  text: string;\n  schema?: undefined;\n}): Promise<JSONValue>;\n/**\n * Parses a JSON string into a strongly-typed object using the provided schema.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns {Promise<T>} - The parsed object.\n */\nexport async function parseJSON<T>(options: {\n  text: string;\n  schema: FlexibleSchema<T>;\n}): Promise<T>;\nexport async function parseJSON<T>({\n  text,\n  schema,\n}: {\n  text: string;\n  schema?: FlexibleSchema<T>;\n}): Promise<T> {\n  try {\n    const value = secureJsonParse(text);\n\n    if (schema == null) {\n      return value;\n    }\n\n    return validateTypes<T>({ value, schema });\n  } catch (error) {\n    if (\n      JSONParseError.isInstance(error) ||\n      TypeValidationError.isInstance(error)\n    ) {\n      throw error;\n    }\n\n    throw new JSONParseError({ text, cause: error });\n  }\n}\n\nexport type ParseResult<T> =\n  | { success: true; value: T; rawValue: unknown }\n  | {\n      success: false;\n      error: JSONParseError | TypeValidationError;\n      rawValue: unknown;\n    };\n\n/**\n * Safely parses a JSON string and returns the result as an object of type `unknown`.\n *\n * @param text - The JSON string to parse.\n * @returns {Promise<object>} Either an object with `success: true` and the parsed data, or an object with `success: false` and the error that occurred.\n */\nexport async function safeParseJSON(options: {\n  text: string;\n  schema?: undefined;\n}): Promise<ParseResult<JSONValue>>;\n/**\n * Safely parses a JSON string into a strongly-typed object, using a provided schema to validate the object.\n *\n * @template T - The type of the object to parse the JSON into.\n * @param {string} text - The JSON string to parse.\n * @param {Validator<T>} schema - The schema to use for parsing the JSON.\n * @returns An object with either a `success` flag and the parsed and typed data, or a `success` flag and an error object.\n */\nexport async function safeParseJSON<T>(options: {\n  text: string;\n  schema: FlexibleSchema<T>;\n}): Promise<ParseResult<T>>;\nexport async function safeParseJSON<T>({\n  text,\n  schema,\n}: {\n  text: string;\n  schema?: FlexibleSchema<T>;\n}): Promise<ParseResult<T>> {\n  try {\n    const value = secureJsonParse(text);\n\n    if (schema == null) {\n      return { success: true, value: value as T, rawValue: value };\n    }\n\n    return await safeValidateTypes<T>({ value, schema });\n  } catch (error) {\n    return {\n      success: false,\n      error: JSONParseError.isInstance(error)\n        ? error\n        : new JSONParseError({ text, cause: error }),\n      rawValue: undefined,\n    };\n  }\n}\n\nexport function isParsableJson(input: string): boolean {\n  try {\n    secureJsonParse(input);\n    return true;\n  } catch {\n    return false;\n  }\n}\n","import {\n  EventSourceMessage,\n  EventSourceParserStream,\n} from 'eventsource-parser/stream';\nimport { ParseResult, safeParseJSON } from './parse-json';\nimport { FlexibleSchema } from './schema';\n\n/**\n * Parses a JSON event stream into a stream of parsed JSON objects.\n */\nexport function parseJsonEventStream<T>({\n  stream,\n  schema,\n}: {\n  stream: ReadableStream<Uint8Array>;\n  schema: FlexibleSchema<T>;\n}): ReadableStream<ParseResult<T>> {\n  return stream\n    .pipeThrough(new TextDecoderStream())\n    .pipeThrough(new EventSourceParserStream())\n    .pipeThrough(\n      new TransformStream<EventSourceMessage, ParseResult<T>>({\n        async transform({ data }, controller) {\n          // ignore the 'DONE' event that e.g. OpenAI sends:\n          if (data === '[DONE]') {\n            return;\n          }\n\n          controller.enqueue(await safeParseJSON({ text: data, schema }));\n        },\n      }),\n    );\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport { ResponseHandler } from './response-handler';\nimport { getRuntimeEnvironmentUserAgent } from './get-runtime-environment-user-agent';\nimport { withUserAgentSuffix } from './with-user-agent-suffix';\nimport { VERSION } from './version';\n\n// use function to allow for mocking in tests:\nconst getOriginalFetch = () => globalThis.fetch;\n\nexport const postJsonToApi = async <T>({\n  url,\n  headers,\n  body,\n  failedResponseHandler,\n  successfulResponseHandler,\n  abortSignal,\n  fetch,\n}: {\n  url: string;\n  headers?: Record<string, string | undefined>;\n  body: unknown;\n  failedResponseHandler: ResponseHandler<APICallError>;\n  successfulResponseHandler: ResponseHandler<T>;\n  abortSignal?: AbortSignal;\n  fetch?: FetchFunction;\n}) =>\n  postToApi({\n    url,\n    headers: {\n      'Content-Type': 'application/json',\n      ...headers,\n    },\n    body: {\n      content: JSON.stringify(body),\n      values: body,\n    },\n    failedResponseHandler,\n    successfulResponseHandler,\n    abortSignal,\n    fetch,\n  });\n\nexport const postFormDataToApi = async <T>({\n  url,\n  headers,\n  formData,\n  failedResponseHandler,\n  successfulResponseHandler,\n  abortSignal,\n  fetch,\n}: {\n  url: string;\n  headers?: Record<string, string | undefined>;\n  formData: FormData;\n  failedResponseHandler: ResponseHandler<APICallError>;\n  successfulResponseHandler: ResponseHandler<T>;\n  abortSignal?: AbortSignal;\n  fetch?: FetchFunction;\n}) =>\n  postToApi({\n    url,\n    headers,\n    body: {\n      content: formData,\n      values: Object.fromEntries((formData as any).entries()),\n    },\n    failedResponseHandler,\n    successfulResponseHandler,\n    abortSignal,\n    fetch,\n  });\n\nexport const postToApi = async <T>({\n  url,\n  headers = {},\n  body,\n  successfulResponseHandler,\n  failedResponseHandler,\n  abortSignal,\n  fetch = getOriginalFetch(),\n}: {\n  url: string;\n  headers?: Record<string, string | undefined>;\n  body: {\n    content: string | FormData | Uint8Array;\n    values: unknown;\n  };\n  failedResponseHandler: ResponseHandler<Error>;\n  successfulResponseHandler: ResponseHandler<T>;\n  abortSignal?: AbortSignal;\n  fetch?: FetchFunction;\n}) => {\n  try {\n    const response = await fetch(url, {\n      method: 'POST',\n      headers: withUserAgentSuffix(\n        headers,\n        `ai-sdk/provider-utils/${VERSION}`,\n        getRuntimeEnvironmentUserAgent(),\n      ),\n      body: body.content,\n      signal: abortSignal,\n    });\n\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (!response.ok) {\n      let errorInformation: {\n        value: Error;\n        responseHeaders?: Record<string, string> | undefined;\n      };\n\n      try {\n        errorInformation = await failedResponseHandler({\n          response,\n          url,\n          requestBodyValues: body.values,\n        });\n      } catch (error) {\n        if (isAbortError(error) || APICallError.isInstance(error)) {\n          throw error;\n        }\n\n        throw new APICallError({\n          message: 'Failed to process error response',\n          cause: error,\n          statusCode: response.status,\n          url,\n          responseHeaders,\n          requestBodyValues: body.values,\n        });\n      }\n\n      throw errorInformation.value;\n    }\n\n    try {\n      return await successfulResponseHandler({\n        response,\n        url,\n        requestBodyValues: body.values,\n      });\n    } catch (error) {\n      if (error instanceof Error) {\n        if (isAbortError(error) || APICallError.isInstance(error)) {\n          throw error;\n        }\n      }\n\n      throw new APICallError({\n        message: 'Failed to process successful response',\n        cause: error,\n        statusCode: response.status,\n        url,\n        responseHeaders,\n        requestBodyValues: body.values,\n      });\n    }\n  } catch (error) {\n    throw handleFetchError({ error, url, requestBodyValues: body.values });\n  }\n};\n","import { JSONValue } from '@ai-sdk/provider';\nimport { FlexibleSchema } from '../schema';\nimport { ToolResultOutput } from './content-part';\nimport { ModelMessage } from './model-message';\nimport { ProviderOptions } from './provider-options';\n\n/**\n * Additional options that are sent into each tool call.\n */\nexport interface ToolExecutionOptions {\n  /**\n   * The ID of the tool call. You can use it e.g. when sending tool-call related information with stream data.\n   */\n  toolCallId: string;\n\n  /**\n   * Messages that were sent to the language model to initiate the response that contained the tool call.\n   * The messages **do not** include the system prompt nor the assistant response that contained the tool call.\n   */\n  messages: ModelMessage[];\n\n  /**\n   * An optional abort signal that indicates that the overall operation should be aborted.\n   */\n  abortSignal?: AbortSignal;\n\n  /**\n   * User-defined context.\n   *\n   * Treat the context object as immutable inside tools.\n   * Mutating the context object can lead to race conditions and unexpected results\n   * when tools are called in parallel.\n   *\n   * If you need to mutate the context, analyze the tool calls and results\n   * in `prepareStep` and update it there.\n   *\n   * Experimental (can break in patch releases).\n   */\n  experimental_context?: unknown;\n}\n\n/**\n * Function that is called to determine if the tool needs approval before it can be executed.\n */\nexport type ToolNeedsApprovalFunction<INPUT> = (\n  input: INPUT,\n  options: {\n    /**\n     * The ID of the tool call. You can use it e.g. when sending tool-call related information with stream data.\n     */\n    toolCallId: string;\n\n    /**\n     * Messages that were sent to the language model to initiate the response that contained the tool call.\n     * The messages **do not** include the system prompt nor the assistant response that contained the tool call.\n     */\n    messages: ModelMessage[];\n\n    /**\n     * Additional context.\n     *\n     * Experimental (can break in patch releases).\n     */\n    experimental_context?: unknown;\n  },\n) => boolean | PromiseLike<boolean>;\n\nexport type ToolExecuteFunction<INPUT, OUTPUT> = (\n  input: INPUT,\n  options: ToolExecutionOptions,\n) => AsyncIterable<OUTPUT> | PromiseLike<OUTPUT> | OUTPUT;\n\n// 0 extends 1 & N checks for any\n// [N] extends [never] checks for never\ntype NeverOptional<N, T> = 0 extends 1 & N\n  ? Partial<T>\n  : [N] extends [never]\n    ? Partial<Record<keyof T, undefined>>\n    : T;\n\ntype ToolOutputProperties<INPUT, OUTPUT> = NeverOptional<\n  OUTPUT,\n  | {\n      /**\n       * An async function that is called with the arguments from the tool call and produces a result.\n       * If not provided, the tool will not be executed automatically.\n       *\n       * @args is the input of the tool call.\n       * @options.abortSignal is a signal that can be used to abort the tool call.\n       */\n      execute: ToolExecuteFunction<INPUT, OUTPUT>;\n\n      outputSchema?: FlexibleSchema<OUTPUT>;\n    }\n  | {\n      outputSchema: FlexibleSchema<OUTPUT>;\n\n      execute?: never;\n    }\n>;\n\n/**\n * A tool contains the description and the schema of the input that the tool expects.\n * This enables the language model to generate the input.\n *\n * The tool can also contain an optional execute function for the actual execution function of the tool.\n */\nexport type Tool<\n  INPUT extends JSONValue | unknown | never = any,\n  OUTPUT extends JSONValue | unknown | never = any,\n> = {\n  /**\n   * An optional description of what the tool does.\n   * Will be used by the language model to decide whether to use the tool.\n   * Not used for provider-defined tools.\n   */\n  description?: string;\n\n  /**\n   * An optional title of the tool.\n   */\n  title?: string;\n\n  /**\n   * Additional provider-specific metadata. They are passed through\n   * to the provider from the AI SDK and enable provider-specific\n   * functionality that can be fully encapsulated in the provider.\n   */\n  providerOptions?: ProviderOptions;\n\n  /**\n   * The schema of the input that the tool expects.\n   * The language model will use this to generate the input.\n   * It is also used to validate the output of the language model.\n   *\n   * You can use descriptions on the schema properties to make the input understandable for the language model.\n   */\n  inputSchema: FlexibleSchema<INPUT>;\n\n  /**\n   * An optional list of input examples that show the language\n   * model what the input should look like.\n   */\n  inputExamples?: Array<{ input: NoInfer<INPUT> }>;\n\n  /**\n   * Whether the tool needs approval before it can be executed.\n   */\n  needsApproval?:\n    | boolean\n    | ToolNeedsApprovalFunction<[INPUT] extends [never] ? unknown : INPUT>;\n\n  /**\n   * Strict mode setting for the tool.\n   *\n   * Providers that support strict mode will use this setting to determine\n   * how the input should be generated. Strict mode will always produce\n   * valid inputs, but it might limit what input schemas are supported.\n   */\n  strict?: boolean;\n\n  /**\n   * Optional function that is called when the argument streaming starts.\n   * Only called when the tool is used in a streaming context.\n   */\n  onInputStart?: (options: ToolExecutionOptions) => void | PromiseLike<void>;\n\n  /**\n   * Optional function that is called when an argument streaming delta is available.\n   * Only called when the tool is used in a streaming context.\n   */\n  onInputDelta?: (\n    options: { inputTextDelta: string } & ToolExecutionOptions,\n  ) => void | PromiseLike<void>;\n\n  /**\n   * Optional function that is called when a tool call can be started,\n   * even if the execute function is not provided.\n   */\n  onInputAvailable?: (\n    options: {\n      input: [INPUT] extends [never] ? unknown : INPUT;\n    } & ToolExecutionOptions,\n  ) => void | PromiseLike<void>;\n} & ToolOutputProperties<INPUT, OUTPUT> & {\n    /**\n     * Optional conversion function that maps the tool result to an output that can be used by the language model.\n     *\n     * If not provided, the tool result will be sent as a JSON object.\n     */\n    toModelOutput?: (options: {\n      /**\n       * The ID of the tool call. You can use it e.g. when sending tool-call related information with stream data.\n       */\n      toolCallId: string;\n\n      /**\n       * The input of the tool call.\n       */\n      input: [INPUT] extends [never] ? unknown : INPUT;\n\n      /**\n       * The output of the tool call.\n       */\n      output: 0 extends 1 & OUTPUT\n        ? any\n        : [OUTPUT] extends [never]\n          ? any\n          : NoInfer<OUTPUT>;\n    }) => ToolResultOutput | PromiseLike<ToolResultOutput>;\n  } & (\n    | {\n        /**\n         * Tool with user-defined input and output schemas.\n         */\n        type?: undefined | 'function';\n      }\n    | {\n        /**\n         * Tool that is defined at runtime (e.g. an MCP tool).\n         * The types of input and output are not known at development time.\n         */\n        type: 'dynamic';\n      }\n    | {\n        /**\n         * Tool with provider-defined input and output schemas.\n         */\n        type: 'provider';\n\n        /**\n         * The ID of the tool. Must follow the format `<provider-name>.<unique-tool-name>`.\n         */\n        id: `${string}.${string}`;\n\n        /**\n         * The arguments for configuring the tool. Must match the expected arguments defined by the provider for this tool.\n         */\n        args: Record<string, unknown>;\n\n        /**\n         * Whether this provider-executed tool supports deferred results.\n         *\n         * When true, the tool result may not be returned in the same turn as the\n         * tool call (e.g., when using programmatic tool calling where a server tool\n         * triggers a client-executed tool, and the server tool's result is deferred\n         * until the client tool is resolved).\n         *\n         * This flag allows the AI SDK to handle tool results that arrive without\n         * a matching tool call in the current response.\n         *\n         * @default false\n         */\n        supportsDeferredResults?: boolean;\n      }\n  );\n\n/**\n * Infer the input type of a tool.\n */\nexport type InferToolInput<TOOL extends Tool> =\n  TOOL extends Tool<infer INPUT, any> ? INPUT : never;\n\n/**\n * Infer the output type of a tool.\n */\nexport type InferToolOutput<TOOL extends Tool> =\n  TOOL extends Tool<any, infer OUTPUT> ? OUTPUT : never;\n\n/**\n * Helper function for inferring the execute args of a tool.\n */\n// Note: overload order is important for auto-completion\nexport function tool<INPUT, OUTPUT>(\n  tool: Tool<INPUT, OUTPUT>,\n): Tool<INPUT, OUTPUT>;\nexport function tool<INPUT>(tool: Tool<INPUT, never>): Tool<INPUT, never>;\nexport function tool<OUTPUT>(tool: Tool<never, OUTPUT>): Tool<never, OUTPUT>;\nexport function tool(tool: Tool<never, never>): Tool<never, never>;\nexport function tool(tool: any): any {\n  return tool;\n}\n\n/**\n * Defines a dynamic tool.\n */\nexport function dynamicTool(tool: {\n  description?: string;\n  title?: string;\n  providerOptions?: ProviderOptions;\n  inputSchema: FlexibleSchema<unknown>;\n  execute: ToolExecuteFunction<unknown, unknown>;\n\n  /**\n   * Optional conversion function that maps the tool result to an output that can be used by the language model.\n   *\n   * If not provided, the tool result will be sent as a JSON object.\n   */\n  toModelOutput?: (options: {\n    /**\n     * The ID of the tool call. You can use it e.g. when sending tool-call related information with stream data.\n     */\n    toolCallId: string;\n\n    /**\n     * The input of the tool call.\n     */\n    input: unknown;\n\n    /**\n     * The output of the tool call.\n     */\n    output: unknown;\n  }) => ToolResultOutput | PromiseLike<ToolResultOutput>;\n\n  /**\n   * Whether the tool needs approval before it can be executed.\n   */\n  needsApproval?: boolean | ToolNeedsApprovalFunction<unknown>;\n}): Tool<unknown, unknown> & {\n  type: 'dynamic';\n} {\n  return { ...tool, type: 'dynamic' };\n}\n","import { tool, Tool, ToolExecuteFunction } from './types/tool';\nimport { FlexibleSchema } from './schema';\n\nexport type ProviderToolFactory<INPUT, ARGS extends object> = <OUTPUT>(\n  options: ARGS & {\n    execute?: ToolExecuteFunction<INPUT, OUTPUT>;\n    needsApproval?: Tool<INPUT, OUTPUT>['needsApproval'];\n    toModelOutput?: Tool<INPUT, OUTPUT>['toModelOutput'];\n    onInputStart?: Tool<INPUT, OUTPUT>['onInputStart'];\n    onInputDelta?: Tool<INPUT, OUTPUT>['onInputDelta'];\n    onInputAvailable?: Tool<INPUT, OUTPUT>['onInputAvailable'];\n  },\n) => Tool<INPUT, OUTPUT>;\n\nexport function createProviderToolFactory<INPUT, ARGS extends object>({\n  id,\n  inputSchema,\n}: {\n  id: `${string}.${string}`;\n  inputSchema: FlexibleSchema<INPUT>;\n}): ProviderToolFactory<INPUT, ARGS> {\n  return <OUTPUT>({\n    execute,\n    outputSchema,\n    needsApproval,\n    toModelOutput,\n    onInputStart,\n    onInputDelta,\n    onInputAvailable,\n    ...args\n  }: ARGS & {\n    execute?: ToolExecuteFunction<INPUT, OUTPUT>;\n    outputSchema?: FlexibleSchema<OUTPUT>;\n    needsApproval?: Tool<INPUT, OUTPUT>['needsApproval'];\n    toModelOutput?: Tool<INPUT, OUTPUT>['toModelOutput'];\n    onInputStart?: Tool<INPUT, OUTPUT>['onInputStart'];\n    onInputDelta?: Tool<INPUT, OUTPUT>['onInputDelta'];\n    onInputAvailable?: Tool<INPUT, OUTPUT>['onInputAvailable'];\n  }): Tool<INPUT, OUTPUT> =>\n    tool({\n      type: 'provider',\n      id,\n      args,\n      inputSchema,\n      outputSchema,\n      execute,\n      needsApproval,\n      toModelOutput,\n      onInputStart,\n      onInputDelta,\n      onInputAvailable,\n    });\n}\n\nexport type ProviderToolFactoryWithOutputSchema<\n  INPUT,\n  OUTPUT,\n  ARGS extends object,\n> = (\n  options: ARGS & {\n    execute?: ToolExecuteFunction<INPUT, OUTPUT>;\n    needsApproval?: Tool<INPUT, OUTPUT>['needsApproval'];\n    toModelOutput?: Tool<INPUT, OUTPUT>['toModelOutput'];\n    onInputStart?: Tool<INPUT, OUTPUT>['onInputStart'];\n    onInputDelta?: Tool<INPUT, OUTPUT>['onInputDelta'];\n    onInputAvailable?: Tool<INPUT, OUTPUT>['onInputAvailable'];\n  },\n) => Tool<INPUT, OUTPUT>;\n\nexport function createProviderToolFactoryWithOutputSchema<\n  INPUT,\n  OUTPUT,\n  ARGS extends object,\n>({\n  id,\n  inputSchema,\n  outputSchema,\n  supportsDeferredResults,\n}: {\n  id: `${string}.${string}`;\n  inputSchema: FlexibleSchema<INPUT>;\n  outputSchema: FlexibleSchema<OUTPUT>;\n  /**\n   * Whether this provider-executed tool supports deferred results.\n   *\n   * When true, the tool result may not be returned in the same turn as the\n   * tool call (e.g., when using programmatic tool calling where a server tool\n   * triggers a client-executed tool, and the server tool's result is deferred\n   * until the client tool is resolved).\n   *\n   * @default false\n   */\n  supportsDeferredResults?: boolean;\n}): ProviderToolFactoryWithOutputSchema<INPUT, OUTPUT, ARGS> {\n  return ({\n    execute,\n    needsApproval,\n    toModelOutput,\n    onInputStart,\n    onInputDelta,\n    onInputAvailable,\n    ...args\n  }: ARGS & {\n    execute?: ToolExecuteFunction<INPUT, OUTPUT>;\n    needsApproval?: Tool<INPUT, OUTPUT>['needsApproval'];\n    toModelOutput?: Tool<INPUT, OUTPUT>['toModelOutput'];\n    onInputStart?: Tool<INPUT, OUTPUT>['onInputStart'];\n    onInputDelta?: Tool<INPUT, OUTPUT>['onInputDelta'];\n    onInputAvailable?: Tool<INPUT, OUTPUT>['onInputAvailable'];\n  }): Tool<INPUT, OUTPUT> =>\n    tool({\n      type: 'provider',\n      id,\n      args,\n      inputSchema,\n      outputSchema,\n      execute,\n      needsApproval,\n      toModelOutput,\n      onInputStart,\n      onInputDelta,\n      onInputAvailable,\n      supportsDeferredResults,\n    });\n}\n","import { MaybePromiseLike } from './maybe-promise-like';\n\nexport type Resolvable<T> = MaybePromiseLike<T> | (() => MaybePromiseLike<T>);\n\n/**\n * Resolves a value that could be a raw value, a Promise, a function returning a value,\n * or a function returning a Promise.\n */\nexport async function resolve<T>(value: Resolvable<T>): Promise<T> {\n  // If it's a function, call it to get the value/promise\n  if (typeof value === 'function') {\n    value = (value as Function)();\n  }\n\n  // Otherwise just resolve whatever we got (value or promise)\n  return Promise.resolve(value as T);\n}\n","import { APICallError, EmptyResponseBodyError } from '@ai-sdk/provider';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { parseJSON, ParseResult, safeParseJSON } from './parse-json';\nimport { parseJsonEventStream } from './parse-json-event-stream';\nimport { FlexibleSchema } from './schema';\n\nexport type ResponseHandler<RETURN_TYPE> = (options: {\n  url: string;\n  requestBodyValues: unknown;\n  response: Response;\n}) => PromiseLike<{\n  value: RETURN_TYPE;\n  rawValue?: unknown;\n  responseHeaders?: Record<string, string>;\n}>;\n\nexport const createJsonErrorResponseHandler =\n  <T>({\n    errorSchema,\n    errorToMessage,\n    isRetryable,\n  }: {\n    errorSchema: FlexibleSchema<T>;\n    errorToMessage: (error: T) => string;\n    isRetryable?: (response: Response, error?: T) => boolean;\n  }): ResponseHandler<APICallError> =>\n  async ({ response, url, requestBodyValues }) => {\n    const responseBody = await response.text();\n    const responseHeaders = extractResponseHeaders(response);\n\n    // Some providers return an empty response body for some errors:\n    if (responseBody.trim() === '') {\n      return {\n        responseHeaders,\n        value: new APICallError({\n          message: response.statusText,\n          url,\n          requestBodyValues,\n          statusCode: response.status,\n          responseHeaders,\n          responseBody,\n          isRetryable: isRetryable?.(response),\n        }),\n      };\n    }\n\n    // resilient parsing in case the response is not JSON or does not match the schema:\n    try {\n      const parsedError = await parseJSON({\n        text: responseBody,\n        schema: errorSchema,\n      });\n\n      return {\n        responseHeaders,\n        value: new APICallError({\n          message: errorToMessage(parsedError),\n          url,\n          requestBodyValues,\n          statusCode: response.status,\n          responseHeaders,\n          responseBody,\n          data: parsedError,\n          isRetryable: isRetryable?.(response, parsedError),\n        }),\n      };\n    } catch (parseError) {\n      return {\n        responseHeaders,\n        value: new APICallError({\n          message: response.statusText,\n          url,\n          requestBodyValues,\n          statusCode: response.status,\n          responseHeaders,\n          responseBody,\n          isRetryable: isRetryable?.(response),\n        }),\n      };\n    }\n  };\n\nexport const createEventSourceResponseHandler =\n  <T>(\n    chunkSchema: FlexibleSchema<T>,\n  ): ResponseHandler<ReadableStream<ParseResult<T>>> =>\n  async ({ response }: { response: Response }) => {\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (response.body == null) {\n      throw new EmptyResponseBodyError({});\n    }\n\n    return {\n      responseHeaders,\n      value: parseJsonEventStream({\n        stream: response.body,\n        schema: chunkSchema,\n      }),\n    };\n  };\n\nexport const createJsonResponseHandler =\n  <T>(responseSchema: FlexibleSchema<T>): ResponseHandler<T> =>\n  async ({ response, url, requestBodyValues }) => {\n    const responseBody = await response.text();\n\n    const parsedResult = await safeParseJSON({\n      text: responseBody,\n      schema: responseSchema,\n    });\n\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (!parsedResult.success) {\n      throw new APICallError({\n        message: 'Invalid JSON response',\n        cause: parsedResult.error,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody,\n        url,\n        requestBodyValues,\n      });\n    }\n\n    return {\n      responseHeaders,\n      value: parsedResult.value,\n      rawValue: parsedResult.rawValue,\n    };\n  };\n\nexport const createBinaryResponseHandler =\n  (): ResponseHandler<Uint8Array> =>\n  async ({ response, url, requestBodyValues }) => {\n    const responseHeaders = extractResponseHeaders(response);\n\n    if (!response.body) {\n      throw new APICallError({\n        message: 'Response body is empty',\n        url,\n        requestBodyValues,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody: undefined,\n      });\n    }\n\n    try {\n      const buffer = await response.arrayBuffer();\n      return {\n        responseHeaders,\n        value: new Uint8Array(buffer),\n      };\n    } catch (error) {\n      throw new APICallError({\n        message: 'Failed to read response as array buffer',\n        url,\n        requestBodyValues,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody: undefined,\n        cause: error,\n      });\n    }\n  };\n\nexport const createStatusCodeErrorResponseHandler =\n  (): ResponseHandler<APICallError> =>\n  async ({ response, url, requestBodyValues }) => {\n    const responseHeaders = extractResponseHeaders(response);\n    const responseBody = await response.text();\n\n    return {\n      responseHeaders,\n      value: new APICallError({\n        message: response.statusText,\n        url,\n        requestBodyValues: requestBodyValues as Record<string, unknown>,\n        statusCode: response.status,\n        responseHeaders,\n        responseBody,\n      }),\n    };\n  };\n","export function withoutTrailingSlash(url: string | undefined) {\n  return url?.replace(/\\/$/, '');\n}\n","const marker = 'vercel.ai.gateway.error';\nconst symbol = Symbol.for(marker);\n\nexport abstract class GatewayError extends Error {\n  private readonly [symbol] = true; // used in isInstance\n\n  abstract readonly name: string;\n  abstract readonly type: string;\n  readonly statusCode: number;\n  readonly cause?: unknown;\n  readonly generationId?: string;\n\n  constructor({\n    message,\n    statusCode = 500,\n    cause,\n    generationId,\n  }: {\n    message: string;\n    statusCode?: number;\n    cause?: unknown;\n    generationId?: string;\n  }) {\n    super(generationId ? `${message} [${generationId}]` : message);\n    this.statusCode = statusCode;\n    this.cause = cause;\n    this.generationId = generationId;\n  }\n\n  /**\n   * Checks if the given error is a Gateway Error.\n   * @param {unknown} error - The error to check.\n   * @returns {boolean} True if the error is a Gateway Error, false otherwise.\n   */\n  static isInstance(error: unknown): error is GatewayError {\n    return GatewayError.hasMarker(error);\n  }\n\n  static hasMarker(error: unknown): error is GatewayError {\n    return (\n      typeof error === 'object' &&\n      error !== null &&\n      symbol in error &&\n      (error as any)[symbol] === true\n    );\n  }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayAuthenticationError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Authentication failed - invalid API key or OIDC token\n */\nexport class GatewayAuthenticationError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'authentication_error';\n\n  constructor({\n    message = 'Authentication failed',\n    statusCode = 401,\n    cause,\n    generationId,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n    generationId?: string;\n  } = {}) {\n    super({ message, statusCode, cause, generationId });\n  }\n\n  static isInstance(error: unknown): error is GatewayAuthenticationError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n\n  /**\n   * Creates a contextual error message when authentication fails\n   */\n  static createContextualError({\n    apiKeyProvided,\n    oidcTokenProvided,\n    message = 'Authentication failed',\n    statusCode = 401,\n    cause,\n    generationId,\n  }: {\n    apiKeyProvided: boolean;\n    oidcTokenProvided: boolean;\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n    generationId?: string;\n  }): GatewayAuthenticationError {\n    let contextualMessage: string;\n\n    if (apiKeyProvided) {\n      contextualMessage = `AI Gateway authentication failed: Invalid API key.\n\nCreate a new API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\n\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.`;\n    } else if (oidcTokenProvided) {\n      contextualMessage = `AI Gateway authentication failed: Invalid OIDC token.\n\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.\n\nAlternatively, use an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys`;\n    } else {\n      contextualMessage = `AI Gateway authentication failed: No authentication provided.\n\nOption 1 - API key:\nCreate an API key: https://vercel.com/d?to=%2F%5Bteam%5D%2F%7E%2Fai%2Fapi-keys\nProvide via 'apiKey' option or 'AI_GATEWAY_API_KEY' environment variable.\n\nOption 2 - OIDC token:\nRun 'npx vercel link' to link your project, then 'vc env pull' to fetch the token.`;\n    }\n\n    return new GatewayAuthenticationError({\n      message: contextualMessage,\n      statusCode,\n      cause,\n      generationId,\n    });\n  }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInvalidRequestError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Invalid request - missing headers, malformed data, etc.\n */\nexport class GatewayInvalidRequestError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'invalid_request_error';\n\n  constructor({\n    message = 'Invalid request',\n    statusCode = 400,\n    cause,\n    generationId,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n    generationId?: string;\n  } = {}) {\n    super({ message, statusCode, cause, generationId });\n  }\n\n  static isInstance(error: unknown): error is GatewayInvalidRequestError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayRateLimitError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Rate limit exceeded.\n */\nexport class GatewayRateLimitError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'rate_limit_exceeded';\n\n  constructor({\n    message = 'Rate limit exceeded',\n    statusCode = 429,\n    cause,\n    generationId,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n    generationId?: string;\n  } = {}) {\n    super({ message, statusCode, cause, generationId });\n  }\n\n  static isInstance(error: unknown): error is GatewayRateLimitError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { z } from 'zod/v4';\nimport { GatewayError } from './gateway-error';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\n\nconst name = 'GatewayModelNotFoundError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport const modelNotFoundParamSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      modelId: z.string(),\n    }),\n  ),\n);\n\n/**\n * Model not found or not available\n */\nexport class GatewayModelNotFoundError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'model_not_found';\n  readonly modelId?: string;\n\n  constructor({\n    message = 'Model not found',\n    statusCode = 404,\n    modelId,\n    cause,\n    generationId,\n  }: {\n    message?: string;\n    statusCode?: number;\n    modelId?: string;\n    cause?: unknown;\n    generationId?: string;\n  } = {}) {\n    super({ message, statusCode, cause, generationId });\n    this.modelId = modelId;\n  }\n\n  static isInstance(error: unknown): error is GatewayModelNotFoundError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayInternalServerError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Internal server error from the Gateway\n */\nexport class GatewayInternalServerError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'internal_server_error';\n\n  constructor({\n    message = 'Internal server error',\n    statusCode = 500,\n    cause,\n    generationId,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n    generationId?: string;\n  } = {}) {\n    super({ message, statusCode, cause, generationId });\n  }\n\n  static isInstance(error: unknown): error is GatewayInternalServerError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { TypeValidationError } from '@ai-sdk/provider';\nimport { GatewayError } from './gateway-error';\n\nconst name = 'GatewayResponseError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Gateway response parsing error\n */\nexport class GatewayResponseError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'response_error';\n  readonly response?: unknown;\n  readonly validationError?: TypeValidationError;\n\n  constructor({\n    message = 'Invalid response from Gateway',\n    statusCode = 502,\n    response,\n    validationError,\n    cause,\n    generationId,\n  }: {\n    message?: string;\n    statusCode?: number;\n    response?: unknown;\n    validationError?: TypeValidationError;\n    cause?: unknown;\n    generationId?: string;\n  } = {}) {\n    super({ message, statusCode, cause, generationId });\n    this.response = response;\n    this.validationError = validationError;\n  }\n\n  static isInstance(error: unknown): error is GatewayResponseError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n}\n","import { z } from 'zod/v4';\nimport type { GatewayError } from './gateway-error';\nimport { GatewayAuthenticationError } from './gateway-authentication-error';\nimport { GatewayInvalidRequestError } from './gateway-invalid-request-error';\nimport { GatewayRateLimitError } from './gateway-rate-limit-error';\nimport {\n  GatewayModelNotFoundError,\n  modelNotFoundParamSchema,\n} from './gateway-model-not-found-error';\nimport { GatewayInternalServerError } from './gateway-internal-server-error';\nimport { GatewayResponseError } from './gateway-response-error';\nimport {\n  InferSchema,\n  lazySchema,\n  safeValidateTypes,\n  validateTypes,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport async function createGatewayErrorFromResponse({\n  response,\n  statusCode,\n  defaultMessage = 'Gateway request failed',\n  cause,\n  authMethod,\n}: {\n  response: unknown;\n  statusCode: number;\n  defaultMessage?: string;\n  cause?: unknown;\n  authMethod?: 'api-key' | 'oidc';\n}): Promise<GatewayError> {\n  const parseResult = await safeValidateTypes({\n    value: response,\n    schema: gatewayErrorResponseSchema,\n  });\n\n  if (!parseResult.success) {\n    // Try to extract generationId even if validation failed\n    const rawGenerationId =\n      typeof response === 'object' &&\n      response !== null &&\n      'generationId' in response\n        ? (response as { generationId?: string }).generationId\n        : undefined;\n\n    return new GatewayResponseError({\n      message: `Invalid error response format: ${defaultMessage}`,\n      statusCode,\n      response,\n      validationError: parseResult.error,\n      cause,\n      generationId: rawGenerationId,\n    });\n  }\n\n  const validatedResponse: GatewayErrorResponse = parseResult.value;\n  const errorType = validatedResponse.error.type;\n  const message = validatedResponse.error.message;\n  const generationId = validatedResponse.generationId ?? undefined;\n\n  switch (errorType) {\n    case 'authentication_error':\n      return GatewayAuthenticationError.createContextualError({\n        apiKeyProvided: authMethod === 'api-key',\n        oidcTokenProvided: authMethod === 'oidc',\n        statusCode,\n        cause,\n        generationId,\n      });\n    case 'invalid_request_error':\n      return new GatewayInvalidRequestError({\n        message,\n        statusCode,\n        cause,\n        generationId,\n      });\n    case 'rate_limit_exceeded':\n      return new GatewayRateLimitError({\n        message,\n        statusCode,\n        cause,\n        generationId,\n      });\n    case 'model_not_found': {\n      const modelResult = await safeValidateTypes({\n        value: validatedResponse.error.param,\n        schema: modelNotFoundParamSchema,\n      });\n\n      return new GatewayModelNotFoundError({\n        message,\n        statusCode,\n        modelId: modelResult.success ? modelResult.value.modelId : undefined,\n        cause,\n        generationId,\n      });\n    }\n    case 'internal_server_error':\n      return new GatewayInternalServerError({\n        message,\n        statusCode,\n        cause,\n        generationId,\n      });\n    default:\n      return new GatewayInternalServerError({\n        message,\n        statusCode,\n        cause,\n        generationId,\n      });\n  }\n}\n\nconst gatewayErrorResponseSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      error: z.object({\n        message: z.string(),\n        type: z.string().nullish(),\n        param: z.unknown().nullish(),\n        code: z.union([z.string(), z.number()]).nullish(),\n      }),\n      generationId: z.string().nullish(),\n    }),\n  ),\n);\n\nexport type GatewayErrorResponse = InferSchema<\n  typeof gatewayErrorResponseSchema\n>;\n","import { GatewayError } from './gateway-error';\n\nconst name = 'GatewayTimeoutError';\nconst marker = `vercel.ai.gateway.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Client request timed out before receiving a response.\n */\nexport class GatewayTimeoutError extends GatewayError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly name = name;\n  readonly type = 'timeout_error';\n\n  constructor({\n    message = 'Request timed out',\n    statusCode = 408,\n    cause,\n    generationId,\n  }: {\n    message?: string;\n    statusCode?: number;\n    cause?: unknown;\n    generationId?: string;\n  } = {}) {\n    super({ message, statusCode, cause, generationId });\n  }\n\n  static isInstance(error: unknown): error is GatewayTimeoutError {\n    return GatewayError.hasMarker(error) && symbol in error;\n  }\n\n  /**\n   * Creates a helpful timeout error message with troubleshooting guidance\n   */\n  static createTimeoutError({\n    originalMessage,\n    statusCode = 408,\n    cause,\n    generationId,\n  }: {\n    originalMessage: string;\n    statusCode?: number;\n    cause?: unknown;\n    generationId?: string;\n  }): GatewayTimeoutError {\n    const message = `Gateway request timed out: ${originalMessage}\n\n    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`;\n\n    return new GatewayTimeoutError({\n      message,\n      statusCode,\n      cause,\n      generationId,\n    });\n  }\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { extractApiCallResponse, GatewayError } from '.';\nimport { createGatewayErrorFromResponse } from './create-gateway-error';\nimport { GatewayTimeoutError } from './gateway-timeout-error';\n\n/**\n * Checks if an error is a timeout error from undici.\n * Only checks undici-specific error codes to avoid false positives.\n */\nfunction isTimeoutError(error: unknown): boolean {\n  if (!(error instanceof Error)) {\n    return false;\n  }\n\n  // Check for undici-specific timeout error codes\n  const errorCode = (error as any).code;\n  if (typeof errorCode === 'string') {\n    const undiciTimeoutCodes = [\n      'UND_ERR_HEADERS_TIMEOUT',\n      'UND_ERR_BODY_TIMEOUT',\n      'UND_ERR_CONNECT_TIMEOUT',\n    ];\n    return undiciTimeoutCodes.includes(errorCode);\n  }\n\n  return false;\n}\n\nexport async function asGatewayError(\n  error: unknown,\n  authMethod?: 'api-key' | 'oidc',\n) {\n  if (GatewayError.isInstance(error)) {\n    return error;\n  }\n\n  // Check if this is a timeout error (or has a timeout error in the cause chain)\n  if (isTimeoutError(error)) {\n    return GatewayTimeoutError.createTimeoutError({\n      originalMessage: error instanceof Error ? error.message : 'Unknown error',\n      cause: error,\n    });\n  }\n\n  // Check if this is an APICallError caused by a timeout\n  if (APICallError.isInstance(error)) {\n    // Check if the cause is a timeout error\n    if (error.cause && isTimeoutError(error.cause)) {\n      return GatewayTimeoutError.createTimeoutError({\n        originalMessage: error.message,\n        cause: error,\n      });\n    }\n\n    return await createGatewayErrorFromResponse({\n      response: extractApiCallResponse(error),\n      statusCode: error.statusCode ?? 500,\n      defaultMessage: 'Gateway request failed',\n      cause: error,\n      authMethod,\n    });\n  }\n\n  return await createGatewayErrorFromResponse({\n    response: {},\n    statusCode: 500,\n    defaultMessage:\n      error instanceof Error\n        ? `Gateway request failed: ${error.message}`\n        : 'Unknown Gateway error',\n    cause: error,\n    authMethod,\n  });\n}\n","import type { APICallError } from '@ai-sdk/provider';\n\nexport function extractApiCallResponse(error: APICallError): unknown {\n  if (error.data !== undefined) {\n    return error.data;\n  }\n  if (error.responseBody != null) {\n    try {\n      return JSON.parse(error.responseBody);\n    } catch {\n      return error.responseBody;\n    }\n  }\n  return {};\n}\n","import { z } from 'zod/v4';\nimport {\n  lazySchema,\n  safeValidateTypes,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\n\nexport const GATEWAY_AUTH_METHOD_HEADER = 'ai-gateway-auth-method' as const;\n\nexport async function parseAuthMethod(\n  headers: Record<string, string | undefined>,\n) {\n  const result = await safeValidateTypes({\n    value: headers[GATEWAY_AUTH_METHOD_HEADER],\n    schema: gatewayAuthMethodSchema,\n  });\n\n  return result.success ? result.value : undefined;\n}\n\nconst gatewayAuthMethodSchema = lazySchema(() =>\n  zodSchema(z.union([z.literal('api-key'), z.literal('oidc')])),\n);\n","import type { LanguageModelV3 } from '@ai-sdk/provider';\n\nexport const KNOWN_MODEL_TYPES = [\n  'embedding',\n  'image',\n  'language',\n  'reranking',\n  'video',\n] as const;\n\nexport type KnownModelType = (typeof KNOWN_MODEL_TYPES)[number];\n\nexport interface GatewayLanguageModelEntry {\n  /**\n   * The model id used by the remote provider in model settings and for specifying the\n   * intended model for text generation.\n   */\n  id: string;\n\n  /**\n   * The display name of the model for presentation in user-facing contexts.\n   */\n  name: string;\n\n  /**\n   * Optional description of the model.\n   */\n  description?: string | null;\n\n  /**\n   * Optional pricing information for the model.\n   */\n  pricing?: {\n    /**\n     * Cost per input token in USD.\n     */\n    input: string;\n    /**\n     * Cost per output token in USD.\n     */\n    output: string;\n    /**\n     * Cost per cached input token in USD.\n     * Only present for providers/models that support prompt caching.\n     */\n    cachedInputTokens?: string;\n    /**\n     * Cost per input token to create/write cache entries in USD.\n     * Only present for providers/models that support prompt caching.\n     */\n    cacheCreationInputTokens?: string;\n  } | null;\n\n  /**\n   * Additional AI SDK language model specifications for the model.\n   */\n  specification: GatewayLanguageModelSpecification;\n\n  /**\n   * Optional field to differentiate between model types.\n   */\n  modelType?: KnownModelType | null;\n}\n\nexport type GatewayLanguageModelSpecification = Pick<\n  LanguageModelV3,\n  'specificationVersion' | 'provider' | 'modelId'\n>;\n","import {\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  getFromApi,\n  lazySchema,\n  resolve,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\nimport {\n  KNOWN_MODEL_TYPES,\n  type GatewayLanguageModelEntry,\n  type KnownModelType,\n} from './gateway-model-entry';\n\ntype GatewayFetchMetadataConfig = GatewayConfig;\n\nexport interface GatewayFetchMetadataResponse {\n  models: GatewayLanguageModelEntry[];\n}\n\nexport interface GatewayCreditsResponse {\n  /** The remaining gateway credit balance available for API usage */\n  balance: string;\n  /** The total amount of gateway credits that have been consumed */\n  totalUsed: string;\n}\n\nexport class GatewayFetchMetadata {\n  constructor(private readonly config: GatewayFetchMetadataConfig) {}\n\n  async getAvailableModels(): Promise<GatewayFetchMetadataResponse> {\n    try {\n      const { value } = await getFromApi({\n        url: `${this.config.baseURL}/config`,\n        headers: await resolve(this.config.headers()),\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayAvailableModelsResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        fetch: this.config.fetch,\n      });\n\n      return value;\n    } catch (error) {\n      throw await asGatewayError(error);\n    }\n  }\n\n  async getCredits(): Promise<GatewayCreditsResponse> {\n    try {\n      const baseUrl = new URL(this.config.baseURL);\n\n      const { value } = await getFromApi({\n        url: `${baseUrl.origin}/v1/credits`,\n        headers: await resolve(this.config.headers()),\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayCreditsResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        fetch: this.config.fetch,\n      });\n\n      return value;\n    } catch (error) {\n      throw await asGatewayError(error);\n    }\n  }\n}\n\nconst gatewayAvailableModelsResponseSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      models: z\n        .array(\n          z.object({\n            id: z.string(),\n            name: z.string(),\n            description: z.string().nullish(),\n            pricing: z\n              .object({\n                input: z.string(),\n                output: z.string(),\n                input_cache_read: z.string().nullish(),\n                input_cache_write: z.string().nullish(),\n              })\n              .transform(\n                ({ input, output, input_cache_read, input_cache_write }) => ({\n                  input,\n                  output,\n                  ...(input_cache_read\n                    ? { cachedInputTokens: input_cache_read }\n                    : {}),\n                  ...(input_cache_write\n                    ? { cacheCreationInputTokens: input_cache_write }\n                    : {}),\n                }),\n              )\n              .nullish(),\n            specification: z.object({\n              specificationVersion: z.literal('v3'),\n              provider: z.string(),\n              modelId: z.string(),\n            }),\n            modelType: z.string().nullish(),\n          }),\n        )\n        .transform(models =>\n          models.filter(\n            (m): m is typeof m & { modelType?: KnownModelType | null } =>\n              m.modelType == null ||\n              KNOWN_MODEL_TYPES.includes(m.modelType as KnownModelType),\n          ),\n        ),\n    }),\n  ),\n);\n\nconst gatewayCreditsResponseSchema = lazySchema(() =>\n  zodSchema(\n    z\n      .object({\n        balance: z.string(),\n        total_used: z.string(),\n      })\n      .transform(({ balance, total_used }) => ({\n        balance,\n        totalUsed: total_used,\n      })),\n  ),\n);\n","import {\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  getFromApi,\n  lazySchema,\n  resolve,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\n\nexport interface GatewaySpendReportParams {\n  /** Start date in YYYY-MM-DD format (inclusive) */\n  startDate: string;\n  /** End date in YYYY-MM-DD format (inclusive) */\n  endDate: string;\n  /** Primary aggregation dimension. Defaults to 'day'. */\n  groupBy?: 'day' | 'user' | 'model' | 'tag' | 'provider' | 'credential_type';\n  /** Time granularity when groupBy is 'day'. */\n  datePart?: 'day' | 'hour';\n  /** Filter to a specific user's spend. */\n  userId?: string;\n  /** Filter to a specific model (e.g. 'anthropic/claude-sonnet-4.5'). */\n  model?: string;\n  /** Filter to a specific provider (e.g. 'anthropic'). */\n  provider?: string;\n  /** Filter to BYOK or system credentials. */\n  credentialType?: 'byok' | 'system';\n  /** Filter to requests with these tags. */\n  tags?: string[];\n}\n\nexport interface GatewaySpendReportRow {\n  /** Date string (present when groupBy is 'day') */\n  day?: string;\n  /** Hour timestamp (present when groupBy is 'day' and datePart is 'hour') */\n  hour?: string;\n  /** User identifier (present when groupBy is 'user') */\n  user?: string;\n  /** Model identifier (present when groupBy is 'model') */\n  model?: string;\n  /** Tag value (present when groupBy is 'tag') */\n  tag?: string;\n  /** Provider name (present when groupBy is 'provider') */\n  provider?: string;\n  /** Credential type (present when groupBy is 'credential_type') */\n  credentialType?: 'byok' | 'system';\n\n  /** Total cost in USD */\n  totalCost: number;\n  /** Market cost in USD */\n  marketCost?: number;\n  /** Number of input tokens */\n  inputTokens?: number;\n  /** Number of output tokens */\n  outputTokens?: number;\n  /** Number of cached input tokens */\n  cachedInputTokens?: number;\n  /** Number of cache creation input tokens */\n  cacheCreationInputTokens?: number;\n  /** Number of reasoning tokens */\n  reasoningTokens?: number;\n  /** Number of requests */\n  requestCount?: number;\n}\n\nexport interface GatewaySpendReportResponse {\n  results: GatewaySpendReportRow[];\n}\n\nexport class GatewaySpendReport {\n  constructor(private readonly config: GatewayConfig) {}\n\n  async getSpendReport(\n    params: GatewaySpendReportParams,\n  ): Promise<GatewaySpendReportResponse> {\n    try {\n      const baseUrl = new URL(this.config.baseURL);\n\n      const searchParams = new URLSearchParams();\n      searchParams.set('start_date', params.startDate);\n      searchParams.set('end_date', params.endDate);\n\n      if (params.groupBy) {\n        searchParams.set('group_by', params.groupBy);\n      }\n      if (params.datePart) {\n        searchParams.set('date_part', params.datePart);\n      }\n      if (params.userId) {\n        searchParams.set('user_id', params.userId);\n      }\n      if (params.model) {\n        searchParams.set('model', params.model);\n      }\n      if (params.provider) {\n        searchParams.set('provider', params.provider);\n      }\n      if (params.credentialType) {\n        searchParams.set('credential_type', params.credentialType);\n      }\n      if (params.tags && params.tags.length > 0) {\n        searchParams.set('tags', params.tags.join(','));\n      }\n\n      const { value } = await getFromApi({\n        url: `${baseUrl.origin}/v1/report?${searchParams.toString()}`,\n        headers: await resolve(this.config.headers()),\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewaySpendReportResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        fetch: this.config.fetch,\n      });\n\n      return value;\n    } catch (error) {\n      throw await asGatewayError(error);\n    }\n  }\n}\n\nconst gatewaySpendReportResponseSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      results: z.array(\n        z\n          .object({\n            day: z.string().optional(),\n            hour: z.string().optional(),\n            user: z.string().optional(),\n            model: z.string().optional(),\n            tag: z.string().optional(),\n            provider: z.string().optional(),\n            credential_type: z.enum(['byok', 'system']).optional(),\n            total_cost: z.number(),\n            market_cost: z.number().optional(),\n            input_tokens: z.number().optional(),\n            output_tokens: z.number().optional(),\n            cached_input_tokens: z.number().optional(),\n            cache_creation_input_tokens: z.number().optional(),\n            reasoning_tokens: z.number().optional(),\n            request_count: z.number().optional(),\n          })\n          .transform(\n            ({\n              credential_type,\n              total_cost,\n              market_cost,\n              input_tokens,\n              output_tokens,\n              cached_input_tokens,\n              cache_creation_input_tokens,\n              reasoning_tokens,\n              request_count,\n              ...rest\n            }) => ({\n              ...rest,\n              ...(credential_type !== undefined\n                ? { credentialType: credential_type }\n                : {}),\n              totalCost: total_cost,\n              ...(market_cost !== undefined ? { marketCost: market_cost } : {}),\n              ...(input_tokens !== undefined\n                ? { inputTokens: input_tokens }\n                : {}),\n              ...(output_tokens !== undefined\n                ? { outputTokens: output_tokens }\n                : {}),\n              ...(cached_input_tokens !== undefined\n                ? { cachedInputTokens: cached_input_tokens }\n                : {}),\n              ...(cache_creation_input_tokens !== undefined\n                ? { cacheCreationInputTokens: cache_creation_input_tokens }\n                : {}),\n              ...(reasoning_tokens !== undefined\n                ? { reasoningTokens: reasoning_tokens }\n                : {}),\n              ...(request_count !== undefined\n                ? { requestCount: request_count }\n                : {}),\n            }),\n          ),\n      ),\n    }),\n  ),\n);\n","import {\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  getFromApi,\n  lazySchema,\n  resolve,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport type { GatewayConfig } from './gateway-config';\n\nexport interface GatewayGenerationInfoParams {\n  /** The generation ID to look up (format: gen_<ulid>) */\n  id: string;\n}\n\nexport interface GatewayGenerationInfo {\n  /** The generation ID */\n  id: string;\n  /** Total cost in USD */\n  totalCost: number;\n  /** Upstream inference cost in USD (BYOK only) */\n  upstreamInferenceCost: number;\n  /** Usage cost in USD (same as totalCost) */\n  usage: number;\n  /** ISO 8601 timestamp when the generation was created */\n  createdAt: string;\n  /** Model identifier */\n  model: string;\n  /** Whether BYOK credentials were used */\n  isByok: boolean;\n  /** Provider that served this generation */\n  providerName: string;\n  /** Whether streaming was used */\n  streamed: boolean;\n  /** Finish reason (e.g. 'stop') */\n  finishReason: string;\n  /** Time to first token in milliseconds */\n  latency: number;\n  /** Total generation time in milliseconds */\n  generationTime: number;\n  /** Number of prompt tokens */\n  promptTokens: number;\n  /** Number of completion tokens */\n  completionTokens: number;\n  /** Reasoning tokens used */\n  reasoningTokens: number;\n  /** Cached tokens used */\n  cachedTokens: number;\n  /** Cache creation input tokens */\n  cacheCreationTokens: number;\n  /** Billable web search calls */\n  billableWebSearchCalls: number;\n}\n\nexport class GatewayGenerationInfoFetcher {\n  constructor(private readonly config: GatewayConfig) {}\n\n  async getGenerationInfo(\n    params: GatewayGenerationInfoParams,\n  ): Promise<GatewayGenerationInfo> {\n    try {\n      const baseUrl = new URL(this.config.baseURL);\n\n      const { value } = await getFromApi({\n        url: `${baseUrl.origin}/v1/generation?id=${encodeURIComponent(params.id)}`,\n        headers: await resolve(this.config.headers()),\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayGenerationInfoResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        fetch: this.config.fetch,\n      });\n\n      return value;\n    } catch (error) {\n      throw await asGatewayError(error);\n    }\n  }\n}\n\nconst gatewayGenerationInfoResponseSchema = lazySchema(() =>\n  zodSchema(\n    z\n      .object({\n        data: z\n          .object({\n            id: z.string(),\n            total_cost: z.number(),\n            upstream_inference_cost: z.number(),\n            usage: z.number(),\n            created_at: z.string(),\n            model: z.string(),\n            is_byok: z.boolean(),\n            provider_name: z.string(),\n            streamed: z.boolean(),\n            finish_reason: z.string(),\n            latency: z.number(),\n            generation_time: z.number(),\n            native_tokens_prompt: z.number(),\n            native_tokens_completion: z.number(),\n            native_tokens_reasoning: z.number(),\n            native_tokens_cached: z.number(),\n            native_tokens_cache_creation: z.number(),\n            billable_web_search_calls: z.number(),\n          })\n          .transform(\n            ({\n              total_cost,\n              upstream_inference_cost,\n              created_at,\n              is_byok,\n              provider_name,\n              finish_reason,\n              generation_time,\n              native_tokens_prompt,\n              native_tokens_completion,\n              native_tokens_reasoning,\n              native_tokens_cached,\n              native_tokens_cache_creation,\n              billable_web_search_calls,\n              ...rest\n            }) => ({\n              ...rest,\n              totalCost: total_cost,\n              upstreamInferenceCost: upstream_inference_cost,\n              createdAt: created_at,\n              isByok: is_byok,\n              providerName: provider_name,\n              finishReason: finish_reason,\n              generationTime: generation_time,\n              promptTokens: native_tokens_prompt,\n              completionTokens: native_tokens_completion,\n              reasoningTokens: native_tokens_reasoning,\n              cachedTokens: native_tokens_cached,\n              cacheCreationTokens: native_tokens_cache_creation,\n              billableWebSearchCalls: billable_web_search_calls,\n            }),\n          ),\n      })\n      .transform(({ data }) => data),\n  ),\n);\n","import type {\n  LanguageModelV3,\n  LanguageModelV3CallOptions,\n  SharedV3Warning,\n  LanguageModelV3FilePart,\n  LanguageModelV3StreamPart,\n  LanguageModelV3GenerateResult,\n  LanguageModelV3StreamResult,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createEventSourceResponseHandler,\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  postJsonToApi,\n  resolve,\n  type ParseResult,\n  type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\ntype GatewayChatConfig = GatewayConfig & {\n  provider: string;\n  o11yHeaders: Resolvable<Record<string, string>>;\n};\n\nexport class GatewayLanguageModel implements LanguageModelV3 {\n  readonly specificationVersion = 'v3';\n  readonly supportedUrls = { '*/*': [/.*/] };\n\n  constructor(\n    readonly modelId: GatewayModelId,\n    private readonly config: GatewayChatConfig,\n  ) {}\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  private async getArgs(options: LanguageModelV3CallOptions) {\n    const { abortSignal: _abortSignal, ...optionsWithoutSignal } = options;\n\n    return {\n      args: this.maybeEncodeFileParts(optionsWithoutSignal),\n      warnings: [],\n    };\n  }\n\n  async doGenerate(\n    options: LanguageModelV3CallOptions,\n  ): Promise<LanguageModelV3GenerateResult> {\n    const { args, warnings } = await this.getArgs(options);\n    const { abortSignal } = options;\n\n    const resolvedHeaders = await resolve(this.config.headers());\n\n    try {\n      const {\n        responseHeaders,\n        value: responseBody,\n        rawValue: rawResponse,\n      } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          options.headers,\n          this.getModelConfigHeaders(this.modelId, false),\n          await resolve(this.config.o11yHeaders),\n        ),\n        body: args,\n        successfulResponseHandler: createJsonResponseHandler(z.any()),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        ...responseBody,\n        request: { body: args },\n        response: { headers: responseHeaders, body: rawResponse },\n        warnings,\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  async doStream(\n    options: LanguageModelV3CallOptions,\n  ): Promise<LanguageModelV3StreamResult> {\n    const { args, warnings } = await this.getArgs(options);\n    const { abortSignal } = options;\n\n    const resolvedHeaders = await resolve(this.config.headers());\n\n    try {\n      const { value: response, responseHeaders } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          options.headers,\n          this.getModelConfigHeaders(this.modelId, true),\n          await resolve(this.config.o11yHeaders),\n        ),\n        body: args,\n        successfulResponseHandler: createEventSourceResponseHandler(z.any()),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        stream: response.pipeThrough(\n          new TransformStream<\n            ParseResult<LanguageModelV3StreamPart>,\n            LanguageModelV3StreamPart\n          >({\n            start(controller) {\n              if (warnings.length > 0) {\n                controller.enqueue({ type: 'stream-start', warnings });\n              }\n            },\n            transform(chunk, controller) {\n              if (chunk.success) {\n                const streamPart = chunk.value;\n\n                // Handle raw chunks: if this is a raw chunk from the gateway API,\n                // only emit it if includeRawChunks is true\n                if (streamPart.type === 'raw' && !options.includeRawChunks) {\n                  return; // Skip raw chunks if not requested\n                }\n\n                if (\n                  streamPart.type === 'response-metadata' &&\n                  streamPart.timestamp &&\n                  typeof streamPart.timestamp === 'string'\n                ) {\n                  streamPart.timestamp = new Date(streamPart.timestamp);\n                }\n\n                controller.enqueue(streamPart);\n              } else {\n                controller.error(\n                  (chunk as { success: false; error: unknown }).error,\n                );\n              }\n            },\n          }),\n        ),\n        request: { body: args },\n        response: { headers: responseHeaders },\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  private isFilePart(part: unknown) {\n    return (\n      part && typeof part === 'object' && 'type' in part && part.type === 'file'\n    );\n  }\n\n  /**\n   * Encodes file parts in the prompt to base64. Mutates the passed options\n   * instance directly to avoid copying the file data.\n   * @param options - The options to encode.\n   * @returns The options with the file parts encoded.\n   */\n  private maybeEncodeFileParts(options: LanguageModelV3CallOptions) {\n    for (const message of options.prompt) {\n      for (const part of message.content) {\n        if (this.isFilePart(part)) {\n          const filePart = part as LanguageModelV3FilePart;\n          // If the file part is a URL it will get cleanly converted to a string.\n          // If it's a binary file attachment we convert it to a data url.\n          // In either case, server-side we should only ever see URLs as strings.\n          if (filePart.data instanceof Uint8Array) {\n            const buffer = Uint8Array.from(filePart.data);\n            const base64Data = Buffer.from(buffer).toString('base64');\n            filePart.data = new URL(\n              `data:${filePart.mediaType || 'application/octet-stream'};base64,${base64Data}`,\n            );\n          }\n        }\n      }\n    }\n    return options;\n  }\n\n  private getUrl() {\n    return `${this.config.baseURL}/language-model`;\n  }\n\n  private getModelConfigHeaders(modelId: string, streaming: boolean) {\n    return {\n      'ai-language-model-specification-version': '3',\n      'ai-language-model-id': modelId,\n      'ai-language-model-streaming': String(streaming),\n    };\n  }\n}\n","import type {\n  EmbeddingModelV3,\n  SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  lazySchema,\n  postJsonToApi,\n  resolve,\n  zodSchema,\n  type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport type { GatewayConfig } from './gateway-config';\n\nexport class GatewayEmbeddingModel implements EmbeddingModelV3 {\n  readonly specificationVersion = 'v3';\n  readonly maxEmbeddingsPerCall = 2048;\n  readonly supportsParallelCalls = true;\n\n  constructor(\n    readonly modelId: string,\n    private readonly config: GatewayConfig & {\n      provider: string;\n      o11yHeaders: Resolvable<Record<string, string>>;\n    },\n  ) {}\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  async doEmbed({\n    values,\n    headers,\n    abortSignal,\n    providerOptions,\n  }: Parameters<EmbeddingModelV3['doEmbed']>[0]): Promise<\n    Awaited<ReturnType<EmbeddingModelV3['doEmbed']>>\n  > {\n    const resolvedHeaders = await resolve(this.config.headers());\n    try {\n      const {\n        responseHeaders,\n        value: responseBody,\n        rawValue,\n      } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          headers ?? {},\n          this.getModelConfigHeaders(),\n          await resolve(this.config.o11yHeaders),\n        ),\n        body: {\n          values,\n          ...(providerOptions ? { providerOptions } : {}),\n        },\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayEmbeddingResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        embeddings: responseBody.embeddings,\n        usage: responseBody.usage ?? undefined,\n        providerMetadata:\n          responseBody.providerMetadata as unknown as SharedV3ProviderMetadata,\n        response: { headers: responseHeaders, body: rawValue },\n        warnings: [],\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  private getUrl() {\n    return `${this.config.baseURL}/embedding-model`;\n  }\n\n  private getModelConfigHeaders() {\n    return {\n      'ai-embedding-model-specification-version': '3',\n      'ai-model-id': this.modelId,\n    };\n  }\n}\n\nconst gatewayEmbeddingResponseSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      embeddings: z.array(z.array(z.number())),\n      usage: z.object({ tokens: z.number() }).nullish(),\n      providerMetadata: z\n        .record(z.string(), z.record(z.string(), z.unknown()))\n        .optional(),\n    }),\n  ),\n);\n","import type {\n  ImageModelV3,\n  ImageModelV3File,\n  ImageModelV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  convertUint8ArrayToBase64,\n  createJsonResponseHandler,\n  createJsonErrorResponseHandler,\n  postJsonToApi,\n  resolve,\n  type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayImageModel implements ImageModelV3 {\n  readonly specificationVersion = 'v3' as const;\n  // Set a very large number to prevent client-side splitting of requests\n  readonly maxImagesPerCall = Number.MAX_SAFE_INTEGER;\n\n  constructor(\n    readonly modelId: string,\n    private readonly config: GatewayConfig & {\n      provider: string;\n      o11yHeaders: Resolvable<Record<string, string>>;\n    },\n  ) {}\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  async doGenerate({\n    prompt,\n    n,\n    size,\n    aspectRatio,\n    seed,\n    files,\n    mask,\n    providerOptions,\n    headers,\n    abortSignal,\n  }: Parameters<ImageModelV3['doGenerate']>[0]): Promise<\n    Awaited<ReturnType<ImageModelV3['doGenerate']>>\n  > {\n    const resolvedHeaders = await resolve(this.config.headers());\n    try {\n      const {\n        responseHeaders,\n        value: responseBody,\n        rawValue,\n      } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          headers ?? {},\n          this.getModelConfigHeaders(),\n          await resolve(this.config.o11yHeaders),\n        ),\n        body: {\n          prompt,\n          n,\n          ...(size && { size }),\n          ...(aspectRatio && { aspectRatio }),\n          ...(seed && { seed }),\n          ...(providerOptions && { providerOptions }),\n          ...(files && {\n            files: files.map(file => maybeEncodeImageFile(file)),\n          }),\n          ...(mask && { mask: maybeEncodeImageFile(mask) }),\n        },\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayImageResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        images: responseBody.images, // Always base64 strings from server\n        warnings: responseBody.warnings ?? [],\n        providerMetadata:\n          responseBody.providerMetadata as ImageModelV3ProviderMetadata,\n        response: {\n          timestamp: new Date(),\n          modelId: this.modelId,\n          headers: responseHeaders,\n        },\n        ...(responseBody.usage != null && {\n          usage: {\n            inputTokens: responseBody.usage.inputTokens ?? undefined,\n            outputTokens: responseBody.usage.outputTokens ?? undefined,\n            totalTokens: responseBody.usage.totalTokens ?? undefined,\n          },\n        }),\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  private getUrl() {\n    return `${this.config.baseURL}/image-model`;\n  }\n\n  private getModelConfigHeaders() {\n    return {\n      'ai-image-model-specification-version': '3',\n      'ai-model-id': this.modelId,\n    };\n  }\n}\n\nfunction maybeEncodeImageFile(file: ImageModelV3File) {\n  if (file.type === 'file' && file.data instanceof Uint8Array) {\n    return {\n      ...file,\n      data: convertUint8ArrayToBase64(file.data),\n    };\n  }\n  return file;\n}\n\nconst providerMetadataEntrySchema = z\n  .object({\n    images: z.array(z.unknown()).optional(),\n  })\n  .catchall(z.unknown());\n\nconst gatewayImageWarningSchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal('unsupported'),\n    feature: z.string(),\n    details: z.string().optional(),\n  }),\n  z.object({\n    type: z.literal('compatibility'),\n    feature: z.string(),\n    details: z.string().optional(),\n  }),\n  z.object({\n    type: z.literal('other'),\n    message: z.string(),\n  }),\n]);\n\nconst gatewayImageUsageSchema = z.object({\n  inputTokens: z.number().nullish(),\n  outputTokens: z.number().nullish(),\n  totalTokens: z.number().nullish(),\n});\n\nconst gatewayImageResponseSchema = z.object({\n  images: z.array(z.string()), // Always base64 strings over the wire\n  warnings: z.array(gatewayImageWarningSchema).optional(),\n  providerMetadata: z\n    .record(z.string(), providerMetadataEntrySchema)\n    .optional(),\n  usage: gatewayImageUsageSchema.optional(),\n});\n","import type {\n  Experimental_VideoModelV3,\n  Experimental_VideoModelV3CallOptions,\n  Experimental_VideoModelV3File,\n  Experimental_VideoModelV3VideoData,\n  SharedV3ProviderMetadata,\n  SharedV3Warning,\n} from '@ai-sdk/provider';\nimport { APICallError } from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  convertUint8ArrayToBase64,\n  createJsonErrorResponseHandler,\n  parseJsonEventStream,\n  postJsonToApi,\n  resolve,\n  type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport type { GatewayConfig } from './gateway-config';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\n\nexport class GatewayVideoModel implements Experimental_VideoModelV3 {\n  readonly specificationVersion = 'v3' as const;\n  // Set a very large number to prevent client-side splitting of requests\n  readonly maxVideosPerCall = Number.MAX_SAFE_INTEGER;\n\n  constructor(\n    readonly modelId: string,\n    private readonly config: GatewayConfig & {\n      provider: string;\n      o11yHeaders: Resolvable<Record<string, string>>;\n    },\n  ) {}\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  async doGenerate({\n    prompt,\n    n,\n    aspectRatio,\n    resolution,\n    duration,\n    fps,\n    seed,\n    image,\n    providerOptions,\n    headers,\n    abortSignal,\n  }: Experimental_VideoModelV3CallOptions): Promise<{\n    videos: Array<Experimental_VideoModelV3VideoData>;\n    warnings: Array<SharedV3Warning>;\n    providerMetadata?: SharedV3ProviderMetadata;\n    response: {\n      timestamp: Date;\n      modelId: string;\n      headers: Record<string, string> | undefined;\n    };\n  }> {\n    const resolvedHeaders = await resolve(this.config.headers());\n    try {\n      const { responseHeaders, value: responseBody } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          headers ?? {},\n          this.getModelConfigHeaders(),\n          await resolve(this.config.o11yHeaders),\n          { accept: 'text/event-stream' },\n        ),\n        body: {\n          prompt,\n          n,\n          ...(aspectRatio && { aspectRatio }),\n          ...(resolution && { resolution }),\n          ...(duration && { duration }),\n          ...(fps && { fps }),\n          ...(seed && { seed }),\n          ...(providerOptions && { providerOptions }),\n          ...(image && { image: maybeEncodeVideoFile(image) }),\n        },\n        successfulResponseHandler: async ({\n          response,\n          url,\n          requestBodyValues,\n        }: {\n          url: string;\n          requestBodyValues: unknown;\n          response: Response;\n        }) => {\n          if (response.body == null) {\n            throw new APICallError({\n              message: 'SSE response body is empty',\n              url,\n              requestBodyValues,\n              statusCode: response.status,\n            });\n          }\n\n          const eventStream = parseJsonEventStream({\n            stream: response.body,\n            schema: gatewayVideoEventSchema,\n          });\n\n          const reader = eventStream.getReader();\n          const { done, value: parseResult } = await reader.read();\n          reader.releaseLock();\n\n          if (done || !parseResult) {\n            throw new APICallError({\n              message: 'SSE stream ended without a data event',\n              url,\n              requestBodyValues,\n              statusCode: response.status,\n            });\n          }\n\n          if (!parseResult.success) {\n            throw new APICallError({\n              message: 'Failed to parse video SSE event',\n              cause: parseResult.error,\n              url,\n              requestBodyValues,\n              statusCode: response.status,\n            });\n          }\n\n          const event = parseResult.value;\n\n          if (event.type === 'error') {\n            throw new APICallError({\n              message: event.message,\n              statusCode: event.statusCode,\n              url,\n              requestBodyValues,\n              responseHeaders: Object.fromEntries([...response.headers]),\n              responseBody: JSON.stringify(event),\n              data: {\n                error: {\n                  message: event.message,\n                  type: event.errorType,\n                  param: event.param,\n                },\n              },\n            });\n          }\n\n          // event.type === 'result'\n          return {\n            value: {\n              videos: event.videos,\n              warnings: event.warnings,\n              providerMetadata: event.providerMetadata,\n            },\n            responseHeaders: Object.fromEntries([...response.headers]),\n          };\n        },\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        videos: responseBody.videos,\n        warnings: responseBody.warnings ?? [],\n        providerMetadata:\n          responseBody.providerMetadata as SharedV3ProviderMetadata,\n        response: {\n          timestamp: new Date(),\n          modelId: this.modelId,\n          headers: responseHeaders,\n        },\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  private getUrl() {\n    return `${this.config.baseURL}/video-model`;\n  }\n\n  private getModelConfigHeaders() {\n    return {\n      'ai-video-model-specification-version': '3',\n      'ai-model-id': this.modelId,\n    };\n  }\n}\n\nfunction maybeEncodeVideoFile(file: Experimental_VideoModelV3File) {\n  if (file.type === 'file' && file.data instanceof Uint8Array) {\n    return {\n      ...file,\n      data: convertUint8ArrayToBase64(file.data),\n    };\n  }\n  return file;\n}\n\nconst providerMetadataEntrySchema = z\n  .object({\n    videos: z.array(z.unknown()).optional(),\n  })\n  .catchall(z.unknown());\n\nconst gatewayVideoDataSchema = z.union([\n  z.object({\n    type: z.literal('url'),\n    url: z.string(),\n    mediaType: z.string(),\n  }),\n  z.object({\n    type: z.literal('base64'),\n    data: z.string(),\n    mediaType: z.string(),\n  }),\n]);\n\nconst gatewayVideoWarningSchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal('unsupported'),\n    feature: z.string(),\n    details: z.string().optional(),\n  }),\n  z.object({\n    type: z.literal('compatibility'),\n    feature: z.string(),\n    details: z.string().optional(),\n  }),\n  z.object({\n    type: z.literal('other'),\n    message: z.string(),\n  }),\n]);\n\nconst gatewayVideoEventSchema = z.discriminatedUnion('type', [\n  z.object({\n    type: z.literal('result'),\n    videos: z.array(gatewayVideoDataSchema),\n    warnings: z.array(gatewayVideoWarningSchema).optional(),\n    providerMetadata: z\n      .record(z.string(), providerMetadataEntrySchema)\n      .optional(),\n  }),\n  z.object({\n    type: z.literal('error'),\n    message: z.string(),\n    errorType: z.string(),\n    statusCode: z.number(),\n    param: z.unknown().nullable(),\n  }),\n]);\n","import type {\n  RerankingModelV3,\n  SharedV3ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n  combineHeaders,\n  createJsonErrorResponseHandler,\n  createJsonResponseHandler,\n  lazySchema,\n  postJsonToApi,\n  resolve,\n  zodSchema,\n  type Resolvable,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { asGatewayError } from './errors';\nimport { parseAuthMethod } from './errors/parse-auth-method';\nimport type { GatewayConfig } from './gateway-config';\n\nexport class GatewayRerankingModel implements RerankingModelV3 {\n  readonly specificationVersion = 'v3';\n\n  constructor(\n    readonly modelId: string,\n    private readonly config: GatewayConfig & {\n      provider: string;\n      o11yHeaders: Resolvable<Record<string, string>>;\n    },\n  ) {}\n\n  get provider(): string {\n    return this.config.provider;\n  }\n\n  async doRerank({\n    documents,\n    query,\n    topN,\n    headers,\n    abortSignal,\n    providerOptions,\n  }: Parameters<RerankingModelV3['doRerank']>[0]): Promise<\n    Awaited<ReturnType<RerankingModelV3['doRerank']>>\n  > {\n    const resolvedHeaders = await resolve(this.config.headers());\n    try {\n      const {\n        responseHeaders,\n        value: responseBody,\n        rawValue,\n      } = await postJsonToApi({\n        url: this.getUrl(),\n        headers: combineHeaders(\n          resolvedHeaders,\n          headers ?? {},\n          this.getModelConfigHeaders(),\n          await resolve(this.config.o11yHeaders),\n        ),\n        body: {\n          documents,\n          query,\n          ...(topN != null ? { topN } : {}),\n          ...(providerOptions ? { providerOptions } : {}),\n        },\n        successfulResponseHandler: createJsonResponseHandler(\n          gatewayRerankingResponseSchema,\n        ),\n        failedResponseHandler: createJsonErrorResponseHandler({\n          errorSchema: z.any(),\n          errorToMessage: data => data,\n        }),\n        ...(abortSignal && { abortSignal }),\n        fetch: this.config.fetch,\n      });\n\n      return {\n        ranking: responseBody.ranking,\n        providerMetadata:\n          responseBody.providerMetadata as unknown as SharedV3ProviderMetadata,\n        response: { headers: responseHeaders, body: rawValue },\n        warnings: [],\n      };\n    } catch (error) {\n      throw await asGatewayError(error, await parseAuthMethod(resolvedHeaders));\n    }\n  }\n\n  private getUrl() {\n    return `${this.config.baseURL}/reranking-model`;\n  }\n\n  private getModelConfigHeaders() {\n    return {\n      'ai-reranking-model-specification-version': '3',\n      'ai-model-id': this.modelId,\n    };\n  }\n}\n\nconst gatewayRerankingResponseSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      ranking: z.array(\n        z.object({\n          index: z.number(),\n          relevanceScore: z.number(),\n        }),\n      ),\n      providerMetadata: z\n        .record(z.string(), z.record(z.string(), z.unknown()))\n        .optional(),\n    }),\n  ),\n);\n","import {\n  createProviderToolFactoryWithOutputSchema,\n  lazySchema,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface ParallelSearchSourcePolicy {\n  /**\n   * List of domains to include in search results.\n   * Example: ['wikipedia.org', 'nature.com']\n   */\n  includeDomains?: string[];\n\n  /**\n   * List of domains to exclude from search results.\n   * Example: ['reddit.com', 'twitter.com']\n   */\n  excludeDomains?: string[];\n\n  /**\n   * Only include results published after this date (ISO 8601 format).\n   * Example: '2024-01-01'\n   */\n  afterDate?: string;\n}\n\nexport interface ParallelSearchExcerpts {\n  /**\n   * Maximum characters per result.\n   */\n  maxCharsPerResult?: number;\n\n  /**\n   * Maximum total characters across all results.\n   */\n  maxCharsTotal?: number;\n}\n\nexport interface ParallelSearchFetchPolicy {\n  /**\n   * Maximum age in seconds for cached content.\n   * Set to 0 to always fetch fresh content.\n   */\n  maxAgeSeconds?: number;\n}\n\nexport interface ParallelSearchConfig {\n  /**\n   * Mode preset for different use cases:\n   * - \"one-shot\": Comprehensive results with longer excerpts for single-response answers (default)\n   * - \"agentic\": Concise, token-efficient results for multi-step agentic workflows\n   */\n  mode?: 'one-shot' | 'agentic';\n\n  /**\n   * Default maximum number of results to return (1-20).\n   * Defaults to 10 if not specified.\n   */\n  maxResults?: number;\n\n  /**\n   * Default source policy for controlling which domains to include/exclude.\n   */\n  sourcePolicy?: ParallelSearchSourcePolicy;\n\n  /**\n   * Default excerpt configuration for controlling result length.\n   */\n  excerpts?: ParallelSearchExcerpts;\n\n  /**\n   * Default fetch policy for controlling content freshness.\n   */\n  fetchPolicy?: ParallelSearchFetchPolicy;\n}\n\nexport interface ParallelSearchResult {\n  /** URL of the search result */\n  url: string;\n  /** Title of the search result */\n  title: string;\n  /** Extracted text excerpt/content from the page */\n  excerpt: string;\n  /** Publication date of the content (may be null) */\n  publishDate?: string | null;\n  /** Relevance score for the result */\n  relevanceScore?: number;\n}\n\nexport interface ParallelSearchResponse {\n  /** Unique identifier for this search request */\n  searchId: string;\n  /** Array of search results */\n  results: ParallelSearchResult[];\n}\n\nexport interface ParallelSearchError {\n  /** Error type */\n  error:\n    | 'api_error'\n    | 'rate_limit'\n    | 'timeout'\n    | 'invalid_input'\n    | 'configuration_error'\n    | 'unknown';\n  /** HTTP status code if applicable */\n  statusCode?: number;\n  /** Human-readable error message */\n  message: string;\n}\n\nexport interface ParallelSearchInput {\n  /**\n   * Natural-language description of the web research goal.\n   * Include source or freshness guidance and broader context from the task.\n   * Maximum 5000 characters.\n   */\n  objective: string;\n\n  /**\n   * Optional search queries to supplement the objective.\n   * Maximum 200 characters per query.\n   */\n  search_queries?: string[];\n\n  /**\n   * Mode preset for different use cases:\n   * - \"one-shot\": Comprehensive results with longer excerpts\n   * - \"agentic\": Concise, token-efficient results for multi-step workflows\n   */\n  mode?: 'one-shot' | 'agentic';\n\n  /**\n   * Maximum number of results to return (1-20).\n   * Defaults to 10 if not specified.\n   */\n  max_results?: number;\n\n  /**\n   * Source policy for controlling which domains to include/exclude.\n   */\n  source_policy?: {\n    include_domains?: string[];\n    exclude_domains?: string[];\n    after_date?: string;\n  };\n\n  /**\n   * Excerpt configuration for controlling result length.\n   */\n  excerpts?: {\n    max_chars_per_result?: number;\n    max_chars_total?: number;\n  };\n\n  /**\n   * Fetch policy for controlling content freshness.\n   */\n  fetch_policy?: {\n    max_age_seconds?: number;\n  };\n}\n\nexport type ParallelSearchOutput = ParallelSearchResponse | ParallelSearchError;\n\nconst parallelSearchInputSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      objective: z\n        .string()\n        .describe(\n          'Natural-language description of the web research goal, including source or freshness guidance and broader context from the task. Maximum 5000 characters.',\n        ),\n\n      search_queries: z\n        .array(z.string())\n        .optional()\n        .describe(\n          'Optional search queries to supplement the objective. Maximum 200 characters per query.',\n        ),\n\n      mode: z\n        .enum(['one-shot', 'agentic'])\n        .optional()\n        .describe(\n          'Mode preset: \"one-shot\" for comprehensive results with longer excerpts (default), \"agentic\" for concise, token-efficient results for multi-step workflows.',\n        ),\n\n      max_results: z\n        .number()\n        .optional()\n        .describe(\n          'Maximum number of results to return (1-20). Defaults to 10 if not specified.',\n        ),\n\n      source_policy: z\n        .object({\n          include_domains: z\n            .array(z.string())\n            .optional()\n            .describe('List of domains to include in search results.'),\n          exclude_domains: z\n            .array(z.string())\n            .optional()\n            .describe('List of domains to exclude from search results.'),\n          after_date: z\n            .string()\n            .optional()\n            .describe(\n              'Only include results published after this date (ISO 8601 format).',\n            ),\n        })\n        .optional()\n        .describe(\n          'Source policy for controlling which domains to include/exclude and freshness.',\n        ),\n\n      excerpts: z\n        .object({\n          max_chars_per_result: z\n            .number()\n            .optional()\n            .describe('Maximum characters per result.'),\n          max_chars_total: z\n            .number()\n            .optional()\n            .describe('Maximum total characters across all results.'),\n        })\n        .optional()\n        .describe('Excerpt configuration for controlling result length.'),\n\n      fetch_policy: z\n        .object({\n          max_age_seconds: z\n            .number()\n            .optional()\n            .describe(\n              'Maximum age in seconds for cached content. Set to 0 to always fetch fresh content.',\n            ),\n        })\n        .optional()\n        .describe('Fetch policy for controlling content freshness.'),\n    }),\n  ),\n);\n\nconst parallelSearchOutputSchema = lazySchema(() =>\n  zodSchema(\n    z.union([\n      // Success response\n      z.object({\n        searchId: z.string(),\n        results: z.array(\n          z.object({\n            url: z.string(),\n            title: z.string(),\n            excerpt: z.string(),\n            publishDate: z.string().nullable().optional(),\n            relevanceScore: z.number().optional(),\n          }),\n        ),\n      }),\n      // Error response\n      z.object({\n        error: z.enum([\n          'api_error',\n          'rate_limit',\n          'timeout',\n          'invalid_input',\n          'configuration_error',\n          'unknown',\n        ]),\n        statusCode: z.number().optional(),\n        message: z.string(),\n      }),\n    ]),\n  ),\n);\n\nexport const parallelSearchToolFactory =\n  createProviderToolFactoryWithOutputSchema<\n    ParallelSearchInput,\n    ParallelSearchOutput,\n    ParallelSearchConfig\n  >({\n    id: 'gateway.parallel_search',\n    inputSchema: parallelSearchInputSchema,\n    outputSchema: parallelSearchOutputSchema,\n  });\n\nexport const parallelSearch = (\n  config: ParallelSearchConfig = {},\n): ReturnType<typeof parallelSearchToolFactory> =>\n  parallelSearchToolFactory(config);\n","import {\n  createProviderToolFactoryWithOutputSchema,\n  lazySchema,\n  zodSchema,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod';\n\nexport interface PerplexitySearchConfig {\n  /**\n   * Default maximum number of search results to return (1-20, default: 10).\n   */\n  maxResults?: number;\n\n  /**\n   * Default maximum tokens to extract per search result page (256-2048, default: 2048).\n   */\n  maxTokensPerPage?: number;\n\n  /**\n   * Default maximum total tokens across all search results (default: 25000, max: 1000000).\n   */\n  maxTokens?: number;\n\n  /**\n   * Default two-letter ISO 3166-1 alpha-2 country code for regional search results.\n   * Examples: 'US', 'GB', 'FR'\n   */\n  country?: string;\n\n  /**\n   * Default list of domains to include or exclude from search results (max 20).\n   * To include: ['nature.com', 'science.org']\n   * To exclude: ['-example.com', '-spam.net']\n   */\n  searchDomainFilter?: string[];\n\n  /**\n   * Default list of ISO 639-1 language codes to filter results (max 10, lowercase).\n   * Examples: ['en', 'fr', 'de']\n   */\n  searchLanguageFilter?: string[];\n\n  /**\n   * Default recency filter for results.\n   * Cannot be combined with searchAfterDate/searchBeforeDate at runtime.\n   */\n  searchRecencyFilter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport interface PerplexitySearchResult {\n  /** Title of the search result */\n  title: string;\n  /** URL of the search result */\n  url: string;\n  /** Text snippet/preview of the content */\n  snippet: string;\n  /** Publication date of the content */\n  date?: string;\n  /** Last updated date of the content */\n  lastUpdated?: string;\n}\n\nexport interface PerplexitySearchResponse {\n  /** Array of search results */\n  results: PerplexitySearchResult[];\n  /** Unique identifier for this search request */\n  id: string;\n}\n\nexport interface PerplexitySearchError {\n  /** Error type */\n  error: 'api_error' | 'rate_limit' | 'timeout' | 'invalid_input' | 'unknown';\n  /** HTTP status code if applicable */\n  statusCode?: number;\n  /** Human-readable error message */\n  message: string;\n}\n\nexport interface PerplexitySearchInput {\n  /**\n   * Search query (string) or multiple queries (array of up to 5 strings).\n   * Multi-query searches return combined results from all queries.\n   */\n  query: string | string[];\n\n  /**\n   * Maximum number of search results to return (1-20, default: 10).\n   */\n  max_results?: number;\n\n  /**\n   * Maximum number of tokens to extract per search result page (256-2048, default: 2048).\n   */\n  max_tokens_per_page?: number;\n\n  /**\n   * Maximum total tokens across all search results (default: 25000, max: 1000000).\n   */\n  max_tokens?: number;\n\n  /**\n   * Two-letter ISO 3166-1 alpha-2 country code for regional search results.\n   * Examples: 'US', 'GB', 'FR'\n   */\n  country?: string;\n\n  /**\n   * List of domains to include or exclude from search results (max 20).\n   * To include: ['nature.com', 'science.org']\n   * To exclude: ['-example.com', '-spam.net']\n   */\n  search_domain_filter?: string[];\n\n  /**\n   * List of ISO 639-1 language codes to filter results (max 10, lowercase).\n   * Examples: ['en', 'fr', 'de']\n   */\n  search_language_filter?: string[];\n\n  /**\n   * Include only results published after this date.\n   * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n   * Cannot be used with search_recency_filter.\n   */\n  search_after_date?: string;\n\n  /**\n   * Include only results published before this date.\n   * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n   * Cannot be used with search_recency_filter.\n   */\n  search_before_date?: string;\n\n  /**\n   * Include only results last updated after this date.\n   * Format: 'MM/DD/YYYY' (e.g., '3/1/2025')\n   * Cannot be used with search_recency_filter.\n   */\n  last_updated_after_filter?: string;\n\n  /**\n   * Include only results last updated before this date.\n   * Format: 'MM/DD/YYYY' (e.g., '3/15/2025')\n   * Cannot be used with search_recency_filter.\n   */\n  last_updated_before_filter?: string;\n\n  /**\n   * Filter results by relative time period.\n   * Cannot be used with search_after_date or search_before_date.\n   */\n  search_recency_filter?: 'day' | 'week' | 'month' | 'year';\n}\n\nexport type PerplexitySearchOutput =\n  | PerplexitySearchResponse\n  | PerplexitySearchError;\n\nconst perplexitySearchInputSchema = lazySchema(() =>\n  zodSchema(\n    z.object({\n      query: z\n        .union([z.string(), z.array(z.string())])\n        .describe(\n          'Search query (string) or multiple queries (array of up to 5 strings). Multi-query searches return combined results from all queries.',\n        ),\n\n      max_results: z\n        .number()\n        .optional()\n        .describe(\n          'Maximum number of search results to return (1-20, default: 10)',\n        ),\n\n      max_tokens_per_page: z\n        .number()\n        .optional()\n        .describe(\n          'Maximum number of tokens to extract per search result page (256-2048, default: 2048)',\n        ),\n\n      max_tokens: z\n        .number()\n        .optional()\n        .describe(\n          'Maximum total tokens across all search results (default: 25000, max: 1000000)',\n        ),\n\n      country: z\n        .string()\n        .optional()\n        .describe(\n          \"Two-letter ISO 3166-1 alpha-2 country code for regional search results (e.g., 'US', 'GB', 'FR')\",\n        ),\n\n      search_domain_filter: z\n        .array(z.string())\n        .optional()\n        .describe(\n          \"List of domains to include or exclude from search results (max 20). To include: ['nature.com', 'science.org']. To exclude: ['-example.com', '-spam.net']\",\n        ),\n\n      search_language_filter: z\n        .array(z.string())\n        .optional()\n        .describe(\n          \"List of ISO 639-1 language codes to filter results (max 10, lowercase). Examples: ['en', 'fr', 'de']\",\n        ),\n\n      search_after_date: z\n        .string()\n        .optional()\n        .describe(\n          \"Include only results published after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n        ),\n\n      search_before_date: z\n        .string()\n        .optional()\n        .describe(\n          \"Include only results published before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n        ),\n\n      last_updated_after_filter: z\n        .string()\n        .optional()\n        .describe(\n          \"Include only results last updated after this date. Format: 'MM/DD/YYYY' (e.g., '3/1/2025'). Cannot be used with search_recency_filter.\",\n        ),\n\n      last_updated_before_filter: z\n        .string()\n        .optional()\n        .describe(\n          \"Include only results last updated before this date. Format: 'MM/DD/YYYY' (e.g., '3/15/2025'). Cannot be used with search_recency_filter.\",\n        ),\n\n      search_recency_filter: z\n        .enum(['day', 'week', 'month', 'year'])\n        .optional()\n        .describe(\n          'Filter results by relative time period. Cannot be used with search_after_date or search_before_date.',\n        ),\n    }),\n  ),\n);\n\nconst perplexitySearchOutputSchema = lazySchema(() =>\n  zodSchema(\n    z.union([\n      // Success response\n      z.object({\n        results: z.array(\n          z.object({\n            title: z.string(),\n            url: z.string(),\n            snippet: z.string(),\n            date: z.string().optional(),\n            lastUpdated: z.string().optional(),\n          }),\n        ),\n        id: z.string(),\n      }),\n      // Error response\n      z.object({\n        error: z.enum([\n          'api_error',\n          'rate_limit',\n          'timeout',\n          'invalid_input',\n          'unknown',\n        ]),\n        statusCode: z.number().optional(),\n        message: z.string(),\n      }),\n    ]),\n  ),\n);\n\nexport const perplexitySearchToolFactory =\n  createProviderToolFactoryWithOutputSchema<\n    PerplexitySearchInput,\n    PerplexitySearchOutput,\n    PerplexitySearchConfig\n  >({\n    id: 'gateway.perplexity_search',\n    inputSchema: perplexitySearchInputSchema,\n    outputSchema: perplexitySearchOutputSchema,\n  });\n\nexport const perplexitySearch = (\n  config: PerplexitySearchConfig = {},\n): ReturnType<typeof perplexitySearchToolFactory> =>\n  perplexitySearchToolFactory(config);\n","import { parallelSearch } from './tool/parallel-search';\nimport { perplexitySearch } from './tool/perplexity-search';\n\n/**\n * Gateway-specific provider-defined tools.\n */\nexport const gatewayTools = {\n  /**\n   * Search the web using Parallel AI's Search API for LLM-optimized excerpts.\n   *\n   * Takes a natural language objective and returns relevant excerpts,\n   * replacing multiple keyword searches with a single call for broad\n   * or complex queries. Supports different search types for depth vs\n   * breadth tradeoffs.\n   */\n  parallelSearch,\n\n  /**\n   * Search the web using Perplexity's Search API for real-time information,\n   * news, research papers, and articles.\n   *\n   * Provides ranked search results with advanced filtering options including\n   * domain, language, date range, and recency filters.\n   */\n  perplexitySearch,\n};\n","import { getContext } from '@vercel/oidc';\nexport { getVercelOidcToken } from '@vercel/oidc';\n\nexport async function getVercelRequestId(): Promise<string | undefined> {\n  return getContext().headers?.['x-vercel-id'];\n}\n","// Version string of this package injected at build time.\ndeclare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n  typeof __PACKAGE_VERSION__ !== 'undefined'\n    ? __PACKAGE_VERSION__\n    : '0.0.0-test';\n","import {\n  loadOptionalSetting,\n  withoutTrailingSlash,\n  type FetchFunction,\n} from '@ai-sdk/provider-utils';\nimport { asGatewayError, GatewayAuthenticationError } from './errors';\nimport {\n  GATEWAY_AUTH_METHOD_HEADER,\n  parseAuthMethod,\n} from './errors/parse-auth-method';\nimport {\n  GatewayFetchMetadata,\n  type GatewayFetchMetadataResponse,\n  type GatewayCreditsResponse,\n} from './gateway-fetch-metadata';\nimport {\n  GatewaySpendReport,\n  type GatewaySpendReportParams,\n  type GatewaySpendReportResponse,\n} from './gateway-spend-report';\nimport {\n  GatewayGenerationInfoFetcher,\n  type GatewayGenerationInfoParams,\n  type GatewayGenerationInfo,\n} from './gateway-generation-info';\nimport { GatewayLanguageModel } from './gateway-language-model';\nimport { GatewayEmbeddingModel } from './gateway-embedding-model';\nimport { GatewayImageModel } from './gateway-image-model';\nimport { GatewayVideoModel } from './gateway-video-model';\nimport { GatewayRerankingModel } from './gateway-reranking-model';\nimport type { GatewayEmbeddingModelId } from './gateway-embedding-model-settings';\nimport type { GatewayImageModelId } from './gateway-image-model-settings';\nimport type { GatewayRerankingModelId } from './gateway-reranking-model-settings';\nimport type { GatewayVideoModelId } from './gateway-video-model-settings';\nimport { gatewayTools } from './gateway-tools';\nimport { getVercelOidcToken, getVercelRequestId } from './vercel-environment';\nimport type { GatewayModelId } from './gateway-language-model-settings';\nimport type {\n  LanguageModelV3,\n  EmbeddingModelV3,\n  ImageModelV3,\n  RerankingModelV3,\n  Experimental_VideoModelV3,\n  ProviderV3,\n} from '@ai-sdk/provider';\nimport { withUserAgentSuffix } from '@ai-sdk/provider-utils';\nimport { VERSION } from './version';\n\nexport interface GatewayProvider extends ProviderV3 {\n  (modelId: GatewayModelId): LanguageModelV3;\n\n  /**\n   * Creates a model for text generation.\n   */\n  chat(modelId: GatewayModelId): LanguageModelV3;\n\n  /**\n   * Creates a model for text generation.\n   */\n  languageModel(modelId: GatewayModelId): LanguageModelV3;\n\n  /**\n   * Returns available providers and models for use with the remote provider.\n   */\n  getAvailableModels(): Promise<GatewayFetchMetadataResponse>;\n\n  /**\n   * Returns credit information for the authenticated user.\n   */\n  getCredits(): Promise<GatewayCreditsResponse>;\n\n  /**\n   * Returns a spend report with cost, token, and request count data,\n   * aggregated by the specified dimension.\n   */\n  getSpendReport(\n    params: GatewaySpendReportParams,\n  ): Promise<GatewaySpendReportResponse>;\n\n  /**\n   * Returns detailed information about a specific generation by its ID,\n   * including cost, token usage, latency, and provider details.\n   */\n  getGenerationInfo(\n    params: GatewayGenerationInfoParams,\n  ): Promise<GatewayGenerationInfo>;\n\n  /**\n   * Creates a model for generating text embeddings.\n   */\n  embedding(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n  /**\n   * Creates a model for generating text embeddings.\n   */\n  embeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n  /**\n   * @deprecated Use `embeddingModel` instead.\n   */\n  textEmbeddingModel(modelId: GatewayEmbeddingModelId): EmbeddingModelV3;\n\n  /**\n   * Creates a model for generating images.\n   */\n  image(modelId: GatewayImageModelId): ImageModelV3;\n\n  /**\n   * Creates a model for generating images.\n   */\n  imageModel(modelId: GatewayImageModelId): ImageModelV3;\n\n  /**\n   * Creates a model for generating videos.\n   */\n  video(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n  /**\n   * Creates a model for generating videos.\n   */\n  videoModel(modelId: GatewayVideoModelId): Experimental_VideoModelV3;\n\n  /**\n   * Creates a model for reranking documents.\n   */\n  reranking(modelId: GatewayRerankingModelId): RerankingModelV3;\n\n  /**\n   * Creates a model for reranking documents.\n   */\n  rerankingModel(modelId: GatewayRerankingModelId): RerankingModelV3;\n\n  /**\n   * Gateway-specific tools executed server-side.\n   */\n  tools: typeof gatewayTools;\n}\n\nexport interface GatewayProviderSettings {\n  /**\n   * The base URL prefix for API calls. Defaults to `https://ai-gateway.vercel.sh/v1/ai`.\n   */\n  baseURL?: string;\n\n  /**\n   * API key that is being sent using the `Authorization` header.\n   */\n  apiKey?: string;\n\n  /**\n   * Custom headers to include in the requests.\n   */\n  headers?: Record<string, string>;\n\n  /**\n   * Custom fetch implementation. You can use it as a middleware to intercept requests,\n   * or to provide a custom fetch implementation for e.g. testing.\n   */\n  fetch?: FetchFunction;\n\n  /**\n   * How frequently to refresh the metadata cache in milliseconds.\n   */\n  metadataCacheRefreshMillis?: number;\n\n  /**\n   * @internal For testing purposes only\n   */\n  _internal?: {\n    currentDate?: () => Date;\n  };\n}\n\nconst AI_GATEWAY_PROTOCOL_VERSION = '0.0.1';\n\n/**\n * Create a remote provider instance.\n */\nexport function createGatewayProvider(\n  options: GatewayProviderSettings = {},\n): GatewayProvider {\n  let pendingMetadata: Promise<GatewayFetchMetadataResponse> | null = null;\n  let metadataCache: GatewayFetchMetadataResponse | null = null;\n  const cacheRefreshMillis =\n    options.metadataCacheRefreshMillis ?? 1000 * 60 * 5;\n  let lastFetchTime = 0;\n\n  const baseURL =\n    withoutTrailingSlash(options.baseURL) ??\n    'https://ai-gateway.vercel.sh/v3/ai';\n\n  const getHeaders = async () => {\n    try {\n      const auth = await getGatewayAuthToken(options);\n      return withUserAgentSuffix(\n        {\n          Authorization: `Bearer ${auth.token}`,\n          'ai-gateway-protocol-version': AI_GATEWAY_PROTOCOL_VERSION,\n          [GATEWAY_AUTH_METHOD_HEADER]: auth.authMethod,\n          ...options.headers,\n        },\n        `ai-sdk/gateway/${VERSION}`,\n      );\n    } catch (error) {\n      throw GatewayAuthenticationError.createContextualError({\n        apiKeyProvided: false,\n        oidcTokenProvided: false,\n        statusCode: 401,\n        cause: error,\n      });\n    }\n  };\n\n  const createO11yHeaders = () => {\n    const deploymentId = loadOptionalSetting({\n      settingValue: undefined,\n      environmentVariableName: 'VERCEL_DEPLOYMENT_ID',\n    });\n    const environment = loadOptionalSetting({\n      settingValue: undefined,\n      environmentVariableName: 'VERCEL_ENV',\n    });\n    const region = loadOptionalSetting({\n      settingValue: undefined,\n      environmentVariableName: 'VERCEL_REGION',\n    });\n    const projectId = loadOptionalSetting({\n      settingValue: undefined,\n      environmentVariableName: 'VERCEL_PROJECT_ID',\n    });\n\n    return async () => {\n      const requestId = await getVercelRequestId();\n      return {\n        ...(deploymentId && { 'ai-o11y-deployment-id': deploymentId }),\n        ...(environment && { 'ai-o11y-environment': environment }),\n        ...(region && { 'ai-o11y-region': region }),\n        ...(requestId && { 'ai-o11y-request-id': requestId }),\n        ...(projectId && { 'ai-o11y-project-id': projectId }),\n      };\n    };\n  };\n\n  const createLanguageModel = (modelId: GatewayModelId) => {\n    return new GatewayLanguageModel(modelId, {\n      provider: 'gateway',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n      o11yHeaders: createO11yHeaders(),\n    });\n  };\n\n  const getAvailableModels = async () => {\n    const now = options._internal?.currentDate?.().getTime() ?? Date.now();\n    if (!pendingMetadata || now - lastFetchTime > cacheRefreshMillis) {\n      lastFetchTime = now;\n\n      pendingMetadata = new GatewayFetchMetadata({\n        baseURL,\n        headers: getHeaders,\n        fetch: options.fetch,\n      })\n        .getAvailableModels()\n        .then(metadata => {\n          metadataCache = metadata;\n          return metadata;\n        })\n        .catch(async (error: unknown) => {\n          throw await asGatewayError(\n            error,\n            await parseAuthMethod(await getHeaders()),\n          );\n        });\n    }\n\n    return metadataCache ? Promise.resolve(metadataCache) : pendingMetadata;\n  };\n\n  const getCredits = async () => {\n    return new GatewayFetchMetadata({\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n    })\n      .getCredits()\n      .catch(async (error: unknown) => {\n        throw await asGatewayError(\n          error,\n          await parseAuthMethod(await getHeaders()),\n        );\n      });\n  };\n\n  const getSpendReport = async (params: GatewaySpendReportParams) => {\n    return new GatewaySpendReport({\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n    })\n      .getSpendReport(params)\n      .catch(async (error: unknown) => {\n        throw await asGatewayError(\n          error,\n          await parseAuthMethod(await getHeaders()),\n        );\n      });\n  };\n\n  const getGenerationInfo = async (params: GatewayGenerationInfoParams) => {\n    return new GatewayGenerationInfoFetcher({\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n    })\n      .getGenerationInfo(params)\n      .catch(async (error: unknown) => {\n        throw await asGatewayError(\n          error,\n          await parseAuthMethod(await getHeaders()),\n        );\n      });\n  };\n\n  const provider = function (modelId: GatewayModelId) {\n    if (new.target) {\n      throw new Error(\n        'The Gateway Provider model function cannot be called with the new keyword.',\n      );\n    }\n\n    return createLanguageModel(modelId);\n  };\n\n  provider.specificationVersion = 'v3' as const;\n  provider.getAvailableModels = getAvailableModels;\n  provider.getCredits = getCredits;\n  provider.getSpendReport = getSpendReport;\n  provider.getGenerationInfo = getGenerationInfo;\n  provider.imageModel = (modelId: GatewayImageModelId) => {\n    return new GatewayImageModel(modelId, {\n      provider: 'gateway',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n      o11yHeaders: createO11yHeaders(),\n    });\n  };\n  provider.languageModel = createLanguageModel;\n  const createEmbeddingModel = (modelId: GatewayEmbeddingModelId) => {\n    return new GatewayEmbeddingModel(modelId, {\n      provider: 'gateway',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n      o11yHeaders: createO11yHeaders(),\n    });\n  };\n  provider.embeddingModel = createEmbeddingModel;\n  provider.textEmbeddingModel = createEmbeddingModel;\n  provider.videoModel = (modelId: GatewayVideoModelId) => {\n    return new GatewayVideoModel(modelId, {\n      provider: 'gateway',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n      o11yHeaders: createO11yHeaders(),\n    });\n  };\n  const createRerankingModel = (modelId: GatewayRerankingModelId) => {\n    return new GatewayRerankingModel(modelId, {\n      provider: 'gateway',\n      baseURL,\n      headers: getHeaders,\n      fetch: options.fetch,\n      o11yHeaders: createO11yHeaders(),\n    });\n  };\n  provider.rerankingModel = createRerankingModel;\n  provider.reranking = createRerankingModel;\n  provider.chat = provider.languageModel;\n  provider.embedding = provider.embeddingModel;\n  provider.image = provider.imageModel;\n  provider.video = provider.videoModel;\n  provider.tools = gatewayTools;\n  return provider;\n}\n\nexport const gateway = createGatewayProvider();\n\nexport async function getGatewayAuthToken(\n  options: GatewayProviderSettings,\n): Promise<{ token: string; authMethod: 'api-key' | 'oidc' }> {\n  const apiKey = loadOptionalSetting({\n    settingValue: options.apiKey,\n    environmentVariableName: 'AI_GATEWAY_API_KEY',\n  });\n\n  if (apiKey) {\n    return {\n      token: apiKey,\n      authMethod: 'api-key',\n    };\n  }\n\n  const oidcToken = await getVercelOidcToken();\n  return {\n    token: oidcToken,\n    authMethod: 'oidc',\n  };\n}\n","/*\n * Copyright The OpenTelemetry Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n *      https://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n// Split module-level variable definition into separate files to allow\n// tree-shaking on each api instance.\nimport { ContextAPI } from './api/context';\n/** Entrypoint for context API */\nexport const context = ContextAPI.getInstance();\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidArgumentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidArgumentError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  readonly parameter: string;\n  readonly value: unknown;\n\n  constructor({\n    parameter,\n    value,\n    message,\n  }: {\n    parameter: string;\n    value: unknown;\n    message: string;\n  }) {\n    super({\n      name,\n      message: `Invalid argument for parameter ${parameter}: ${message}`,\n    });\n\n    this.parameter = parameter;\n    this.value = value;\n  }\n\n  static isInstance(error: unknown): error is InvalidArgumentError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { FinishReason } from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../types/usage';\n\nconst name = 'AI_NoObjectGeneratedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * Thrown when no object could be generated. This can have several causes:\n *\n * - The model failed to generate a response.\n * - The model generated a response that could not be parsed.\n * - The model generated a response that could not be validated against the schema.\n *\n * The error contains the following properties:\n *\n * - `text`: The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n */\nexport class NoObjectGeneratedError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  /**\n   * The text that was generated by the model. This can be the raw text or the tool call text, depending on the model.\n   */\n  readonly text: string | undefined;\n\n  /**\n   * The response metadata.\n   */\n  readonly response: LanguageModelResponseMetadata | undefined;\n\n  /**\n   * The usage of the model.\n   */\n  readonly usage: LanguageModelUsage | undefined;\n\n  /**\n   * Reason why the model finished generating a response.\n   */\n  readonly finishReason: FinishReason | undefined;\n\n  constructor({\n    message = 'No object generated.',\n    cause,\n    text,\n    response,\n    usage,\n    finishReason,\n  }: {\n    message?: string;\n    cause?: Error;\n    text?: string;\n    response: LanguageModelResponseMetadata;\n    usage: LanguageModelUsage;\n    finishReason: FinishReason;\n  }) {\n    super({ name, message, cause });\n\n    this.text = text;\n    this.response = response;\n    this.usage = usage;\n    this.finishReason = finishReason;\n  }\n\n  static isInstance(error: unknown): error is NoObjectGeneratedError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\n/**\n * Error that is thrown when a model with an unsupported version is used.\n */\nexport class UnsupportedModelVersionError extends AISDKError {\n  readonly version: string;\n  readonly provider: string;\n  readonly modelId: string;\n\n  constructor(options: { version: string; provider: string; modelId: string }) {\n    super({\n      name: 'AI_UnsupportedModelVersionError',\n      message:\n        `Unsupported model version ${options.version} for provider \"${options.provider}\" and model \"${options.modelId}\". ` +\n        `AI SDK 5 only supports models that implement specification version \"v2\".`,\n    });\n\n    this.version = options.version;\n    this.provider = options.provider;\n    this.modelId = options.modelId;\n  }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_RetryError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport type RetryErrorReason =\n  | 'maxRetriesExceeded'\n  | 'errorNotRetryable'\n  | 'abort';\n\nexport class RetryError extends AISDKError {\n  private readonly [symbol] = true; // used in isInstance\n\n  // note: property order determines debugging output\n  readonly reason: RetryErrorReason;\n  readonly lastError: unknown;\n  readonly errors: Array<unknown>;\n\n  constructor({\n    message,\n    reason,\n    errors,\n  }: {\n    message: string;\n    reason: RetryErrorReason;\n    errors: Array<unknown>;\n  }) {\n    super({ name, message });\n\n    this.reason = reason;\n    this.errors = errors;\n\n    // separate our last error to make debugging via log easier:\n    this.lastError = errors[errors.length - 1];\n  }\n\n  static isInstance(error: unknown): error is RetryError {\n    return AISDKError.hasMarker(error, marker);\n  }\n}\n","import { Warning } from '../types';\n\n/**\n * A function for logging warnings.\n *\n * You can assign it to the `AI_SDK_LOG_WARNINGS` global variable to use it as the default warning logger.\n *\n * @example\n * ```ts\n * globalThis.AI_SDK_LOG_WARNINGS = (options) => {\n *   console.log('WARNINGS:', options.warnings, options.provider, options.model);\n * };\n * ```\n */\nexport type LogWarningsFunction = (options: {\n  /**\n   * The warnings returned by the model provider.\n   */\n  warnings: Warning[];\n\n  /**\n   * The provider id used for the call.\n   */\n  provider: string;\n\n  /**\n   * The model id used for the call.\n   */\n  model: string;\n}) => void;\n\n/**\n * Formats a warning object into a human-readable string with clear AI SDK branding.\n *\n * @param options - The options for formatting the warning.\n * @param options.warning - The warning to format.\n * @param options.provider - The provider id used for the call.\n * @param options.model - The model id used for the call.\n * @returns A formatted warning message string.\n */\nfunction formatWarning({\n  warning,\n  provider,\n  model,\n}: {\n  warning: Warning;\n  provider: string;\n  model: string;\n}): string {\n  const prefix = `AI SDK Warning (${provider} / ${model}):`;\n\n  switch (warning.type) {\n    case 'unsupported': {\n      let message = `${prefix} The feature \"${warning.feature}\" is not supported.`;\n      if (warning.details) {\n        message += ` ${warning.details}`;\n      }\n      return message;\n    }\n\n    case 'compatibility': {\n      let message = `${prefix} The feature \"${warning.feature}\" is used in a compatibility mode.`;\n      if (warning.details) {\n        message += ` ${warning.details}`;\n      }\n      return message;\n    }\n\n    case 'other': {\n      return `${prefix} ${warning.message}`;\n    }\n\n    default: {\n      // Fallback for any unknown warning types\n      return `${prefix} ${JSON.stringify(warning, null, 2)}`;\n    }\n  }\n}\n\nexport const FIRST_WARNING_INFO_MESSAGE =\n  'AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.';\n\nlet hasLoggedBefore = false;\n\n/**\n * Logs warnings to the console or uses a custom logger if configured.\n *\n * The behavior can be customized via the `AI_SDK_LOG_WARNINGS` global variable:\n * - If set to `false`, warnings are suppressed.\n * - If set to a function, that function is called with the warnings.\n * - Otherwise, warnings are logged to the console using `console.warn`.\n *\n * @param options - The options containing warnings and context.\n * @param options.warnings - The warnings to log.\n * @param options.provider - The provider id used for the call.\n * @param options.model - The model id used for the call.\n */\nexport const logWarnings: LogWarningsFunction = options => {\n  // if the warnings array is empty, do nothing\n  if (options.warnings.length === 0) {\n    return;\n  }\n\n  const logger = globalThis.AI_SDK_LOG_WARNINGS;\n\n  // if the logger is set to false, do nothing\n  if (logger === false) {\n    return;\n  }\n\n  // use the provided logger if it is a function\n  if (typeof logger === 'function') {\n    logger(options);\n    return;\n  }\n\n  // display information note on first call\n  if (!hasLoggedBefore) {\n    hasLoggedBefore = true;\n    console.info(FIRST_WARNING_INFO_MESSAGE);\n  }\n\n  // default behavior: log warnings to the console\n  for (const warning of options.warnings) {\n    console.warn(\n      formatWarning({\n        warning,\n        provider: options.provider,\n        model: options.model,\n      }),\n    );\n  }\n};\n\n/**\n * Resets the internal logging state. Used for testing purposes.\n */\nexport const resetLogWarningsState = () => {\n  hasLoggedBefore = false;\n};\n","import { logWarnings } from '../logger/log-warnings';\n\nexport function logV2CompatibilityWarning({\n  provider,\n  modelId,\n}: {\n  provider: string;\n  modelId: string;\n}): void {\n  logWarnings({\n    warnings: [\n      {\n        type: 'compatibility',\n        feature: 'specificationVersion',\n        details: `Using v2 specification compatibility mode. Some features may not be available.`,\n      },\n    ],\n    provider,\n    model: modelId,\n  });\n}\n","import { EmbeddingModelV2, EmbeddingModelV3 } from '@ai-sdk/provider';\nimport { logV2CompatibilityWarning } from '../util/log-v2-compatibility-warning';\n\nexport function asEmbeddingModelV3(\n  model: EmbeddingModelV2<string> | EmbeddingModelV3,\n): EmbeddingModelV3 {\n  if (model.specificationVersion === 'v3') {\n    return model;\n  }\n\n  logV2CompatibilityWarning({\n    provider: model.provider,\n    modelId: model.modelId,\n  });\n\n  // TODO this could break, we need to properly map v2 to v3\n  // and support all relevant v3 properties:\n  return new Proxy(model, {\n    get(target, prop: keyof EmbeddingModelV2<string>) {\n      if (prop === 'specificationVersion') return 'v3';\n      return target[prop];\n    },\n  }) as unknown as EmbeddingModelV3;\n}\n","import { gateway } from '@ai-sdk/gateway';\nimport {\n  EmbeddingModelV3,\n  Experimental_VideoModelV3,\n  ImageModelV3,\n  LanguageModelV3,\n  ProviderV3,\n  RerankingModelV3,\n  SpeechModelV3,\n  TranscriptionModelV3,\n} from '@ai-sdk/provider';\nimport { UnsupportedModelVersionError } from '../error';\nimport { EmbeddingModel } from '../types/embedding-model';\nimport { LanguageModel } from '../types/language-model';\nimport { SpeechModel } from '../types/speech-model';\nimport { TranscriptionModel } from '../types/transcription-model';\nimport { asEmbeddingModelV3 } from './as-embedding-model-v3';\nimport { asImageModelV3 } from './as-image-model-v3';\nimport { asLanguageModelV3 } from './as-language-model-v3';\nimport { asSpeechModelV3 } from './as-speech-model-v3';\nimport { asTranscriptionModelV3 } from './as-transcription-model-v3';\nimport { ImageModel } from '../types/image-model';\nimport { RerankingModel } from '../types/reranking-model';\nimport { VideoModel } from '../types/video-model';\n\nexport function resolveLanguageModel(model: LanguageModel): LanguageModelV3 {\n  if (typeof model !== 'string') {\n    if (\n      model.specificationVersion !== 'v3' &&\n      model.specificationVersion !== 'v2'\n    ) {\n      const unsupportedModel: any = model;\n      throw new UnsupportedModelVersionError({\n        version: unsupportedModel.specificationVersion,\n        provider: unsupportedModel.provider,\n        modelId: unsupportedModel.modelId,\n      });\n    }\n\n    return asLanguageModelV3(model);\n  }\n\n  return getGlobalProvider().languageModel(model);\n}\n\nexport function resolveEmbeddingModel(model: EmbeddingModel): EmbeddingModelV3 {\n  if (typeof model !== 'string') {\n    if (\n      model.specificationVersion !== 'v3' &&\n      model.specificationVersion !== 'v2'\n    ) {\n      const unsupportedModel: any = model;\n      throw new UnsupportedModelVersionError({\n        version: unsupportedModel.specificationVersion,\n        provider: unsupportedModel.provider,\n        modelId: unsupportedModel.modelId,\n      });\n    }\n\n    return asEmbeddingModelV3(model);\n  }\n\n  return getGlobalProvider().embeddingModel(model);\n}\n\nexport function resolveTranscriptionModel(\n  model: TranscriptionModel,\n): TranscriptionModelV3 | undefined {\n  if (typeof model !== 'string') {\n    if (\n      model.specificationVersion !== 'v3' &&\n      model.specificationVersion !== 'v2'\n    ) {\n      const unsupportedModel: any = model;\n      throw new UnsupportedModelVersionError({\n        version: unsupportedModel.specificationVersion,\n        provider: unsupportedModel.provider,\n        modelId: unsupportedModel.modelId,\n      });\n    }\n    return asTranscriptionModelV3(model);\n  }\n\n  return getGlobalProvider().transcriptionModel?.(model);\n}\n\nexport function resolveSpeechModel(\n  model: SpeechModel,\n): SpeechModelV3 | undefined {\n  if (typeof model !== 'string') {\n    if (\n      model.specificationVersion !== 'v3' &&\n      model.specificationVersion !== 'v2'\n    ) {\n      const unsupportedModel: any = model;\n      throw new UnsupportedModelVersionError({\n        version: unsupportedModel.specificationVersion,\n        provider: unsupportedModel.provider,\n        modelId: unsupportedModel.modelId,\n      });\n    }\n    return asSpeechModelV3(model);\n  }\n\n  return getGlobalProvider().speechModel?.(model);\n}\n\nexport function resolveImageModel(model: ImageModel): ImageModelV3 {\n  if (typeof model !== 'string') {\n    if (\n      model.specificationVersion !== 'v3' &&\n      model.specificationVersion !== 'v2'\n    ) {\n      const unsupportedModel: any = model;\n      throw new UnsupportedModelVersionError({\n        version: unsupportedModel.specificationVersion,\n        provider: unsupportedModel.provider,\n        modelId: unsupportedModel.modelId,\n      });\n    }\n\n    return asImageModelV3(model);\n  }\n\n  return getGlobalProvider().imageModel(model);\n}\n\nexport function resolveVideoModel(\n  model: VideoModel,\n): Experimental_VideoModelV3 {\n  if (typeof model === 'string') {\n    const provider = getGlobalProvider();\n    // TODO AI SDK v7\n    // @ts-expect-error - videoModel support is experimental\n    const videoModel = provider.videoModel;\n\n    if (!videoModel) {\n      throw new Error(\n        'The default provider does not support video models. ' +\n          'Please use a Experimental_VideoModelV3 object from a provider (e.g., vertex.video(\"model-id\")).',\n      );\n    }\n\n    return videoModel(model);\n  }\n\n  if (model.specificationVersion !== 'v3') {\n    const unsupportedModel: any = model;\n    throw new UnsupportedModelVersionError({\n      version: unsupportedModel.specificationVersion,\n      provider: unsupportedModel.provider,\n      modelId: unsupportedModel.modelId,\n    });\n  }\n\n  return model;\n}\n\nexport function resolveRerankingModel(model: RerankingModel): RerankingModelV3 {\n  if (typeof model === 'string') {\n    const provider = getGlobalProvider();\n    const rerankingModel = provider.rerankingModel;\n\n    if (!rerankingModel) {\n      throw new Error(\n        'The default provider does not support reranking models. ' +\n          'Please use a RerankingModel object from a provider (e.g., gateway.rerankingModel(\"model-id\")).',\n      );\n    }\n\n    return rerankingModel(model);\n  }\n\n  if (model.specificationVersion !== 'v3') {\n    const unsupportedModel: any = model;\n    throw new UnsupportedModelVersionError({\n      version: unsupportedModel.specificationVersion,\n      provider: unsupportedModel.provider,\n      modelId: unsupportedModel.modelId,\n    });\n  }\n\n  return model;\n}\n\nfunction getGlobalProvider(): ProviderV3 {\n  return globalThis.AI_SDK_DEFAULT_PROVIDER ?? gateway;\n}\n","/**\n * Timeout configuration for API calls. Can be specified as:\n * - A number representing milliseconds\n * - An object with `totalMs` property for the total timeout in milliseconds\n * - An object with `stepMs` property for the timeout of each step in milliseconds\n * - An object with `chunkMs` property for the timeout between stream chunks (streaming only)\n */\nexport type TimeoutConfiguration =\n  | number\n  | { totalMs?: number; stepMs?: number; chunkMs?: number };\n\n/**\n * Extracts the total timeout value in milliseconds from a TimeoutConfiguration.\n *\n * @param timeout - The timeout configuration.\n * @returns The total timeout in milliseconds, or undefined if no timeout is configured.\n */\nexport function getTotalTimeoutMs(\n  timeout: TimeoutConfiguration | undefined,\n): number | undefined {\n  if (timeout == null) {\n    return undefined;\n  }\n  if (typeof timeout === 'number') {\n    return timeout;\n  }\n  return timeout.totalMs;\n}\n\n/**\n * Extracts the step timeout value in milliseconds from a TimeoutConfiguration.\n *\n * @param timeout - The timeout configuration.\n * @returns The step timeout in milliseconds, or undefined if no step timeout is configured.\n */\nexport function getStepTimeoutMs(\n  timeout: TimeoutConfiguration | undefined,\n): number | undefined {\n  if (timeout == null || typeof timeout === 'number') {\n    return undefined;\n  }\n  return timeout.stepMs;\n}\n\n/**\n * Extracts the chunk timeout value in milliseconds from a TimeoutConfiguration.\n * This timeout is for streaming only - it aborts if no new chunk is received within the specified duration.\n *\n * @param timeout - The timeout configuration.\n * @returns The chunk timeout in milliseconds, or undefined if no chunk timeout is configured.\n */\nexport function getChunkTimeoutMs(\n  timeout: TimeoutConfiguration | undefined,\n): number | undefined {\n  if (timeout == null || typeof timeout === 'number') {\n    return undefined;\n  }\n  return timeout.chunkMs;\n}\n\nexport type CallSettings = {\n  /**\n   * Maximum number of tokens to generate.\n   */\n  maxOutputTokens?: number;\n\n  /**\n   * Temperature setting. The range depends on the provider and model.\n   *\n   * It is recommended to set either `temperature` or `topP`, but not both.\n   */\n  temperature?: number;\n\n  /**\n   * Nucleus sampling. This is a number between 0 and 1.\n   *\n   * E.g. 0.1 would mean that only tokens with the top 10% probability mass\n   * are considered.\n   *\n   * It is recommended to set either `temperature` or `topP`, but not both.\n   */\n  topP?: number;\n\n  /**\n   * Only sample from the top K options for each subsequent token.\n   *\n   * Used to remove \"long tail\" low probability responses.\n   * Recommended for advanced use cases only. You usually only need to use temperature.\n   */\n  topK?: number;\n\n  /**\n   * Presence penalty setting. It affects the likelihood of the model to\n   * repeat information that is already in the prompt.\n   *\n   * The presence penalty is a number between -1 (increase repetition)\n   * and 1 (maximum penalty, decrease repetition). 0 means no penalty.\n   */\n  presencePenalty?: number;\n\n  /**\n   * Frequency penalty setting. It affects the likelihood of the model\n   * to repeatedly use the same words or phrases.\n   *\n   * The frequency penalty is a number between -1 (increase repetition)\n   * and 1 (maximum penalty, decrease repetition). 0 means no penalty.\n   */\n  frequencyPenalty?: number;\n\n  /**\n   * Stop sequences.\n   * If set, the model will stop generating text when one of the stop sequences is generated.\n   * Providers may have limits on the number of stop sequences.\n   */\n  stopSequences?: string[];\n\n  /**\n   * The seed (integer) to use for random sampling. If set and supported\n   * by the model, calls will generate deterministic results.\n   */\n  seed?: number;\n\n  /**\n   * Maximum number of retries. Set to 0 to disable retries.\n   *\n   * @default 2\n   */\n  maxRetries?: number;\n\n  /**\n   * Abort signal.\n   */\n  abortSignal?: AbortSignal;\n\n  /**\n   * Timeout in milliseconds. The call will be aborted if it takes longer\n   * than the specified timeout. Can be used alongside abortSignal.\n   *\n   * Can be specified as a number (milliseconds) or as an object with `totalMs`.\n   */\n  timeout?: TimeoutConfiguration;\n\n  /**\n   * Additional HTTP headers to be sent with the request.\n   * Only applicable for HTTP-based providers.\n   */\n  headers?: Record<string, string | undefined>;\n};\n","declare const __PACKAGE_VERSION__: string | undefined;\nexport const VERSION: string =\n  typeof __PACKAGE_VERSION__ !== 'undefined'\n    ? __PACKAGE_VERSION__\n    : '0.0.0-test';\n","import { AISDKError, LanguageModelV3DataContent } from '@ai-sdk/provider';\nimport {\n  convertBase64ToUint8Array,\n  convertUint8ArrayToBase64,\n  DataContent,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { InvalidDataContentError } from './invalid-data-content-error';\nimport { splitDataUrl } from './split-data-url';\n\n/**\n * @internal\n */\nexport const dataContentSchema: z.ZodType<DataContent> = z.union([\n  z.string(),\n  z.instanceof(Uint8Array),\n  z.instanceof(ArrayBuffer),\n  z.custom<Buffer>(\n    // Buffer might not be available in some environments such as CloudFlare:\n    (value: unknown): value is Buffer =>\n      globalThis.Buffer?.isBuffer(value) ?? false,\n    { message: 'Must be a Buffer' },\n  ),\n]);\n\nexport function convertToLanguageModelV3DataContent(\n  content: DataContent | URL,\n): {\n  data: LanguageModelV3DataContent;\n  mediaType: string | undefined;\n} {\n  // Buffer & Uint8Array:\n  if (content instanceof Uint8Array) {\n    return { data: content, mediaType: undefined };\n  }\n\n  // ArrayBuffer needs conversion to Uint8Array (lightweight):\n  if (content instanceof ArrayBuffer) {\n    return { data: new Uint8Array(content), mediaType: undefined };\n  }\n\n  // Attempt to create a URL from the data. If it fails, we can assume the data\n  // is not a URL and likely some other sort of data.\n  if (typeof content === 'string') {\n    try {\n      content = new URL(content);\n    } catch (error) {\n      // ignored\n    }\n  }\n\n  // Extract data from data URL:\n  if (content instanceof URL && content.protocol === 'data:') {\n    const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(\n      content.toString(),\n    );\n\n    if (dataUrlMediaType == null || base64Content == null) {\n      throw new AISDKError({\n        name: 'InvalidDataContentError',\n        message: `Invalid data URL format in content ${content.toString()}`,\n      });\n    }\n\n    return { data: base64Content, mediaType: dataUrlMediaType };\n  }\n\n  return { data: content, mediaType: undefined };\n}\n\n/**\n * Converts data content to a base64-encoded string.\n *\n * @param content - Data content to convert.\n * @returns Base64-encoded string.\n */\nexport function convertDataContentToBase64String(content: DataContent): string {\n  if (typeof content === 'string') {\n    return content;\n  }\n\n  if (content instanceof ArrayBuffer) {\n    return convertUint8ArrayToBase64(new Uint8Array(content));\n  }\n\n  return convertUint8ArrayToBase64(content);\n}\n\n/**\n * Converts data content to a Uint8Array.\n *\n * @param content - Data content to convert.\n * @returns Uint8Array.\n */\nexport function convertDataContentToUint8Array(\n  content: DataContent,\n): Uint8Array {\n  if (content instanceof Uint8Array) {\n    return content;\n  }\n\n  if (typeof content === 'string') {\n    try {\n      return convertBase64ToUint8Array(content);\n    } catch (error) {\n      throw new InvalidDataContentError({\n        message:\n          'Invalid data content. Content string is not a base64-encoded media.',\n        content,\n        cause: error,\n      });\n    }\n  }\n\n  if (content instanceof ArrayBuffer) {\n    return new Uint8Array(content);\n  }\n\n  throw new InvalidDataContentError({ content });\n}\n\n/**\n * Converts a Uint8Array to a string of text.\n *\n * @param uint8Array - The Uint8Array to convert.\n * @returns The converted string.\n */\nexport function convertUint8ArrayToText(uint8Array: Uint8Array): string {\n  try {\n    return new TextDecoder().decode(uint8Array);\n  } catch (error) {\n    throw new Error('Error decoding Uint8Array to text');\n  }\n}\n","import { JSONValue as OriginalJSONValue } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\n\nexport const jsonValueSchema: z.ZodType<JSONValue> = z.lazy(() =>\n  z.union([\n    z.null(),\n    z.string(),\n    z.number(),\n    z.boolean(),\n    z.record(z.string(), jsonValueSchema.optional()),\n    z.array(jsonValueSchema),\n  ]),\n);\n\nexport type JSONValue = OriginalJSONValue;\n","import { SharedV3ProviderMetadata } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from './json-value';\n\n/**\n * Additional provider-specific metadata that is returned from the provider.\n *\n * This is needed to enable provider-specific functionality that can be\n * fully encapsulated in the provider.\n */\nexport type ProviderMetadata = SharedV3ProviderMetadata;\n\nexport const providerMetadataSchema: z.ZodType<ProviderMetadata> = z.record(\n  z.string(),\n  z.record(z.string(), jsonValueSchema.optional()),\n);\n","import {\n  FilePart,\n  ImagePart,\n  ProviderOptions,\n  ReasoningPart,\n  TextPart,\n  ToolApprovalRequest,\n  ToolApprovalResponse,\n  ToolResultOutput,\n  ToolResultPart,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { jsonValueSchema } from '../types/json-value';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport { dataContentSchema } from './data-content';\n\n/**\n * @internal\n */\nexport const textPartSchema: z.ZodType<TextPart> = z.object({\n  type: z.literal('text'),\n  text: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const imagePartSchema: z.ZodType<ImagePart> = z.object({\n  type: z.literal('image'),\n  image: z.union([dataContentSchema, z.instanceof(URL)]),\n  mediaType: z.string().optional(),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const filePartSchema: z.ZodType<FilePart> = z.object({\n  type: z.literal('file'),\n  data: z.union([dataContentSchema, z.instanceof(URL)]),\n  filename: z.string().optional(),\n  mediaType: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * @internal\n */\nexport const reasoningPartSchema: z.ZodType<ReasoningPart> = z.object({\n  type: z.literal('reasoning'),\n  text: z.string(),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\n/**\n * Tool call content part of a prompt. It contains a tool call (usually generated by the AI model).\n */\nexport interface ToolCallPart {\n  type: 'tool-call';\n\n  /**\n   * ID of the tool call. This ID is used to match the tool call with the tool result.\n   */\n  toolCallId: string;\n\n  /**\n   * Name of the tool that is being called.\n   */\n  toolName: string;\n\n  /**\n   * Arguments of the tool call. This is a JSON-serializable object that matches the tool's input schema.\n   */\n  input: unknown;\n\n  /**\n   * Additional provider-specific metadata. They are passed through\n   * to the provider from the AI SDK and enable provider-specific\n   * functionality that can be fully encapsulated in the provider.\n   */\n  providerOptions?: ProviderOptions;\n}\n\n/**\n * @internal\n */\nexport const toolCallPartSchema: z.ZodType<ToolCallPart> = z.object({\n  type: z.literal('tool-call'),\n  toolCallId: z.string(),\n  toolName: z.string(),\n  input: z.unknown(),\n  providerOptions: providerMetadataSchema.optional(),\n  providerExecuted: z.boolean().optional(),\n}) as z.ZodType<ToolCallPart>; // necessary bc input is optional on Zod type\n\n/**\n * @internal\n */\nexport const outputSchema: z.ZodType<ToolResultOutput> = z.discriminatedUnion(\n  'type',\n  [\n    z.object({\n      type: z.literal('text'),\n      value: z.string(),\n      providerOptions: providerMetadataSchema.optional(),\n    }),\n    z.object({\n      type: z.literal('json'),\n      value: jsonValueSchema,\n      providerOptions: providerMetadataSchema.optional(),\n    }),\n    z.object({\n      type: z.literal('execution-denied'),\n      reason: z.string().optional(),\n      providerOptions: providerMetadataSchema.optional(),\n    }),\n    z.object({\n      type: z.literal('error-text'),\n      value: z.string(),\n      providerOptions: providerMetadataSchema.optional(),\n    }),\n    z.object({\n      type: z.literal('error-json'),\n      value: jsonValueSchema,\n      providerOptions: providerMetadataSchema.optional(),\n    }),\n    z.object({\n      type: z.literal('content'),\n      value: z.array(\n        z.union([\n          z.object({\n            type: z.literal('text'),\n            text: z.string(),\n            providerOptions: providerMetadataSchema.optional(),\n          }),\n          z.object({\n            type: z.literal('media'),\n            data: z.string(),\n            mediaType: z.string(),\n          }),\n          z.object({\n            type: z.literal('file-data'),\n            data: z.string(),\n            mediaType: z.string(),\n            filename: z.string().optional(),\n            providerOptions: providerMetadataSchema.optional(),\n          }),\n          z.object({\n            type: z.literal('file-url'),\n            url: z.string(),\n            providerOptions: providerMetadataSchema.optional(),\n          }),\n          z.object({\n            type: z.literal('file-id'),\n            fileId: z.union([z.string(), z.record(z.string(), z.string())]),\n            providerOptions: providerMetadataSchema.optional(),\n          }),\n          z.object({\n            type: z.literal('image-data'),\n            data: z.string(),\n            mediaType: z.string(),\n            providerOptions: providerMetadataSchema.optional(),\n          }),\n          z.object({\n            type: z.literal('image-url'),\n            url: z.string(),\n            providerOptions: providerMetadataSchema.optional(),\n          }),\n          z.object({\n            type: z.literal('image-file-id'),\n            fileId: z.union([z.string(), z.record(z.string(), z.string())]),\n            providerOptions: providerMetadataSchema.optional(),\n          }),\n          z.object({\n            type: z.literal('custom'),\n            providerOptions: providerMetadataSchema.optional(),\n          }),\n        ]),\n      ),\n    }),\n  ],\n);\n\n/**\n * @internal\n */\nexport const toolResultPartSchema: z.ZodType<ToolResultPart> = z.object({\n  type: z.literal('tool-result'),\n  toolCallId: z.string(),\n  toolName: z.string(),\n  output: outputSchema,\n  providerOptions: providerMetadataSchema.optional(),\n}) as z.ZodType<ToolResultPart>; // necessary bc result is optional on Zod type\n\n/**\n * @internal\n */\nexport const toolApprovalRequestSchema: z.ZodType<ToolApprovalRequest> =\n  z.object({\n    type: z.literal('tool-approval-request'),\n    approvalId: z.string(),\n    toolCallId: z.string(),\n  });\n\n/**\n * @internal\n */\nexport const toolApprovalResponseSchema: z.ZodType<ToolApprovalResponse> =\n  z.object({\n    type: z.literal('tool-approval-response'),\n    approvalId: z.string(),\n    approved: z.boolean(),\n    reason: z.string().optional(),\n  });\n","import {\n  AssistantModelMessage,\n  ModelMessage,\n  SystemModelMessage,\n  ToolModelMessage,\n  UserModelMessage,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport {\n  filePartSchema,\n  imagePartSchema,\n  reasoningPartSchema,\n  textPartSchema,\n  toolApprovalRequestSchema,\n  toolCallPartSchema,\n  toolApprovalResponseSchema,\n  toolResultPartSchema,\n} from './content-part';\n\nexport const systemModelMessageSchema: z.ZodType<SystemModelMessage> = z.object(\n  {\n    role: z.literal('system'),\n    content: z.string(),\n    providerOptions: providerMetadataSchema.optional(),\n  },\n);\n\nexport const userModelMessageSchema: z.ZodType<UserModelMessage> = z.object({\n  role: z.literal('user'),\n  content: z.union([\n    z.string(),\n    z.array(z.union([textPartSchema, imagePartSchema, filePartSchema])),\n  ]),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\nexport const assistantModelMessageSchema: z.ZodType<AssistantModelMessage> =\n  z.object({\n    role: z.literal('assistant'),\n    content: z.union([\n      z.string(),\n      z.array(\n        z.union([\n          textPartSchema,\n          filePartSchema,\n          reasoningPartSchema,\n          toolCallPartSchema,\n          toolResultPartSchema,\n          toolApprovalRequestSchema,\n        ]),\n      ),\n    ]),\n    providerOptions: providerMetadataSchema.optional(),\n  });\n\nexport const toolModelMessageSchema: z.ZodType<ToolModelMessage> = z.object({\n  role: z.literal('tool'),\n  content: z.array(z.union([toolResultPartSchema, toolApprovalResponseSchema])),\n  providerOptions: providerMetadataSchema.optional(),\n});\n\nexport const modelMessageSchema: z.ZodType<ModelMessage> = z.union([\n  systemModelMessageSchema,\n  userModelMessageSchema,\n  assistantModelMessageSchema,\n  toolModelMessageSchema,\n]);\n","import { TelemetrySettings } from './telemetry-settings';\n\nexport function assembleOperationName({\n  operationId,\n  telemetry,\n}: {\n  operationId: string;\n  telemetry?: TelemetrySettings;\n}) {\n  return {\n    // standardized operation and resource name:\n    'operation.name': `${operationId}${\n      telemetry?.functionId != null ? ` ${telemetry.functionId}` : ''\n    }`,\n    'resource.name': telemetry?.functionId,\n\n    // detailed, AI SDK specific data:\n    'ai.operationId': operationId,\n    'ai.telemetry.functionId': telemetry?.functionId,\n  };\n}\n","import { Attributes, AttributeValue } from '@opentelemetry/api';\nimport { CallSettings, getTotalTimeoutMs } from '../prompt/call-settings';\nimport { TelemetrySettings } from './telemetry-settings';\n\nexport function getBaseTelemetryAttributes({\n  model,\n  settings,\n  telemetry,\n  headers,\n}: {\n  model: { modelId: string; provider: string };\n  settings: Omit<CallSettings, 'abortSignal' | 'headers' | 'temperature'>;\n  telemetry: TelemetrySettings | undefined;\n  headers: Record<string, string | undefined> | undefined;\n}): Attributes {\n  return {\n    'ai.model.provider': model.provider,\n    'ai.model.id': model.modelId,\n\n    // settings:\n    ...Object.entries(settings).reduce((attributes, [key, value]) => {\n      // Handle timeout specially since it can be a number or object\n      if (key === 'timeout') {\n        const totalTimeoutMs = getTotalTimeoutMs(\n          value as Parameters<typeof getTotalTimeoutMs>[0],\n        );\n        if (totalTimeoutMs != null) {\n          attributes[`ai.settings.${key}`] = totalTimeoutMs;\n        }\n      } else {\n        attributes[`ai.settings.${key}`] = value as AttributeValue;\n      }\n      return attributes;\n    }, {} as Attributes),\n\n    // add metadata as attributes:\n    ...Object.entries(telemetry?.metadata ?? {}).reduce(\n      (attributes, [key, value]) => {\n        attributes[`ai.telemetry.metadata.${key}`] = value;\n        return attributes;\n      },\n      {} as Attributes,\n    ),\n\n    // request headers\n    ...Object.entries(headers ?? {}).reduce((attributes, [key, value]) => {\n      if (value !== undefined) {\n        attributes[`ai.request.headers.${key}`] = value;\n      }\n      return attributes;\n    }, {} as Attributes),\n  };\n}\n","import { Span, SpanContext, Tracer } from '@opentelemetry/api';\n\n/**\n * Tracer implementation that does nothing (null object).\n */\nexport const noopTracer: Tracer = {\n  startSpan(): Span {\n    return noopSpan;\n  },\n\n  startActiveSpan<F extends (span: Span) => unknown>(\n    name: unknown,\n    arg1: unknown,\n    arg2?: unknown,\n    arg3?: F,\n  ): ReturnType<any> {\n    if (typeof arg1 === 'function') {\n      return arg1(noopSpan);\n    }\n    if (typeof arg2 === 'function') {\n      return arg2(noopSpan);\n    }\n    if (typeof arg3 === 'function') {\n      return arg3(noopSpan);\n    }\n  },\n};\n\nconst noopSpan: Span = {\n  spanContext() {\n    return noopSpanContext;\n  },\n  setAttribute() {\n    return this;\n  },\n  setAttributes() {\n    return this;\n  },\n  addEvent() {\n    return this;\n  },\n  addLink() {\n    return this;\n  },\n  addLinks() {\n    return this;\n  },\n  setStatus() {\n    return this;\n  },\n  updateName() {\n    return this;\n  },\n  end() {\n    return this;\n  },\n  isRecording() {\n    return false;\n  },\n  recordException() {\n    return this;\n  },\n};\n\nconst noopSpanContext: SpanContext = {\n  traceId: '',\n  spanId: '',\n  traceFlags: 0,\n};\n","import { Tracer, trace } from '@opentelemetry/api';\nimport { noopTracer } from './noop-tracer';\n\nexport function getTracer({\n  isEnabled = false,\n  tracer,\n}: {\n  isEnabled?: boolean;\n  tracer?: Tracer;\n} = {}): Tracer {\n  if (!isEnabled) {\n    return noopTracer;\n  }\n\n  if (tracer) {\n    return tracer;\n  }\n\n  return trace.getTracer('ai');\n}\n","import {\n  Attributes,\n  Span,\n  Tracer,\n  SpanStatusCode,\n  context,\n} from '@opentelemetry/api';\n\nexport async function recordSpan<T>({\n  name,\n  tracer,\n  attributes,\n  fn,\n  endWhenDone = true,\n}: {\n  name: string;\n  tracer: Tracer;\n  attributes: Attributes | PromiseLike<Attributes>;\n  fn: (span: Span) => Promise<T>;\n  endWhenDone?: boolean;\n}) {\n  return tracer.startActiveSpan(\n    name,\n    { attributes: await attributes },\n    async span => {\n      // Capture the current context to maintain it across async generator yields\n      const ctx = context.active();\n\n      try {\n        // Execute within the captured context to ensure async generators\n        // don't lose the active span when they yield\n        const result = await context.with(ctx, () => fn(span));\n\n        if (endWhenDone) {\n          span.end();\n        }\n\n        return result;\n      } catch (error) {\n        try {\n          recordErrorOnSpan(span, error);\n        } finally {\n          // always stop the span when there is an error:\n          span.end();\n        }\n\n        throw error;\n      }\n    },\n  );\n}\n\n/**\n * Record an error on a span. Sets the span status to error. If the error is\n * an instance of Error, an exception event with name, message, and stack\n * will also be recorded.\n *\n * @param span - The span to record the error on.\n * @param error - The error to record on the span.\n */\nexport function recordErrorOnSpan(span: Span, error: unknown) {\n  if (error instanceof Error) {\n    span.recordException({\n      name: error.name,\n      message: error.message,\n      stack: error.stack,\n    });\n    span.setStatus({\n      code: SpanStatusCode.ERROR,\n      message: error.message,\n    });\n  } else {\n    span.setStatus({ code: SpanStatusCode.ERROR });\n  }\n}\n","import type { Attributes, AttributeValue } from '@opentelemetry/api';\nimport type { TelemetrySettings } from './telemetry-settings';\n\ntype ResolvableAttributeValue = () =>\n  | AttributeValue\n  | PromiseLike<AttributeValue>\n  | undefined;\n\nexport async function selectTelemetryAttributes({\n  telemetry,\n  attributes,\n}: {\n  telemetry?: TelemetrySettings;\n  attributes: {\n    [attributeKey: string]:\n      | AttributeValue\n      | { input: ResolvableAttributeValue }\n      | { output: ResolvableAttributeValue }\n      | undefined;\n  };\n}): Promise<Attributes> {\n  // when telemetry is disabled, return an empty object to avoid serialization overhead:\n  if (telemetry?.isEnabled !== true) {\n    return {};\n  }\n\n  const resultAttributes: Attributes = {};\n\n  for (const [key, value] of Object.entries(attributes)) {\n    if (value == null) {\n      continue;\n    }\n\n    // input value, check if it should be recorded:\n    if (\n      typeof value === 'object' &&\n      'input' in value &&\n      typeof value.input === 'function'\n    ) {\n      // default to true:\n      if (telemetry?.recordInputs === false) {\n        continue;\n      }\n\n      const result = await value.input();\n\n      if (result != null) {\n        resultAttributes[key] = result;\n      }\n\n      continue;\n    }\n\n    // output value, check if it should be recorded:\n    if (\n      typeof value === 'object' &&\n      'output' in value &&\n      typeof value.output === 'function'\n    ) {\n      // default to true:\n      if (telemetry?.recordOutputs === false) {\n        continue;\n      }\n\n      const result = await value.output();\n\n      if (result != null) {\n        resultAttributes[key] = result;\n      }\n      continue;\n    }\n\n    // value is an attribute value already:\n    resultAttributes[key] = value as AttributeValue;\n  }\n\n  return resultAttributes;\n}\n","import { APICallError } from '@ai-sdk/provider';\nimport { delay, getErrorMessage, isAbortError } from '@ai-sdk/provider-utils';\nimport { RetryError } from './retry-error';\n\nexport type RetryFunction = <OUTPUT>(\n  fn: () => PromiseLike<OUTPUT>,\n) => PromiseLike<OUTPUT>;\n\nfunction getRetryDelayInMs({\n  error,\n  exponentialBackoffDelay,\n}: {\n  error: APICallError;\n  exponentialBackoffDelay: number;\n}): number {\n  const headers = error.responseHeaders;\n\n  if (!headers) return exponentialBackoffDelay;\n\n  let ms: number | undefined;\n\n  // retry-ms is more precise than retry-after and used by e.g. OpenAI\n  const retryAfterMs = headers['retry-after-ms'];\n  if (retryAfterMs) {\n    const timeoutMs = parseFloat(retryAfterMs);\n    if (!Number.isNaN(timeoutMs)) {\n      ms = timeoutMs;\n    }\n  }\n\n  // About the Retry-After header: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After\n  const retryAfter = headers['retry-after'];\n  if (retryAfter && ms === undefined) {\n    const timeoutSeconds = parseFloat(retryAfter);\n    if (!Number.isNaN(timeoutSeconds)) {\n      ms = timeoutSeconds * 1000;\n    } else {\n      ms = Date.parse(retryAfter) - Date.now();\n    }\n  }\n\n  // check that the delay is reasonable:\n  if (\n    ms != null &&\n    !Number.isNaN(ms) &&\n    0 <= ms &&\n    (ms < 60 * 1000 || ms < exponentialBackoffDelay)\n  ) {\n    return ms;\n  }\n\n  return exponentialBackoffDelay;\n}\n\n/**\n * The `retryWithExponentialBackoffRespectingRetryHeaders` strategy retries a failed API call with an exponential backoff,\n * while respecting rate limit headers (retry-after-ms and retry-after) if they are provided and reasonable (0-60 seconds).\n * You can configure the maximum number of retries, the initial delay, and the backoff factor.\n */\nexport const retryWithExponentialBackoffRespectingRetryHeaders =\n  ({\n    maxRetries = 2,\n    initialDelayInMs = 2000,\n    backoffFactor = 2,\n    abortSignal,\n  }: {\n    maxRetries?: number;\n    initialDelayInMs?: number;\n    backoffFactor?: number;\n    abortSignal?: AbortSignal;\n  } = {}): RetryFunction =>\n  async <OUTPUT>(f: () => PromiseLike<OUTPUT>) =>\n    _retryWithExponentialBackoff(f, {\n      maxRetries,\n      delayInMs: initialDelayInMs,\n      backoffFactor,\n      abortSignal,\n    });\n\nasync function _retryWithExponentialBackoff<OUTPUT>(\n  f: () => PromiseLike<OUTPUT>,\n  {\n    maxRetries,\n    delayInMs,\n    backoffFactor,\n    abortSignal,\n  }: {\n    maxRetries: number;\n    delayInMs: number;\n    backoffFactor: number;\n    abortSignal: AbortSignal | undefined;\n  },\n  errors: unknown[] = [],\n): Promise<OUTPUT> {\n  try {\n    return await f();\n  } catch (error) {\n    if (isAbortError(error)) {\n      throw error; // don't retry when the request was aborted\n    }\n\n    if (maxRetries === 0) {\n      throw error; // don't wrap the error when retries are disabled\n    }\n\n    const errorMessage = getErrorMessage(error);\n    const newErrors = [...errors, error];\n    const tryNumber = newErrors.length;\n\n    if (tryNumber > maxRetries) {\n      throw new RetryError({\n        message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,\n        reason: 'maxRetriesExceeded',\n        errors: newErrors,\n      });\n    }\n\n    if (\n      error instanceof Error &&\n      APICallError.isInstance(error) &&\n      error.isRetryable === true &&\n      tryNumber <= maxRetries\n    ) {\n      await delay(\n        getRetryDelayInMs({\n          error,\n          exponentialBackoffDelay: delayInMs,\n        }),\n        { abortSignal },\n      );\n\n      return _retryWithExponentialBackoff(\n        f,\n        {\n          maxRetries,\n          delayInMs: backoffFactor * delayInMs,\n          backoffFactor,\n          abortSignal,\n        },\n        newErrors,\n      );\n    }\n\n    if (tryNumber === 1) {\n      throw error; // don't wrap the error when a non-retryable error occurs on the first try\n    }\n\n    throw new RetryError({\n      message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,\n      reason: 'errorNotRetryable',\n      errors: newErrors,\n    });\n  }\n}\n","import { InvalidArgumentError } from '../error/invalid-argument-error';\nimport {\n  RetryFunction,\n  retryWithExponentialBackoffRespectingRetryHeaders,\n} from '../util/retry-with-exponential-backoff';\n\n/**\n * Validate and prepare retries.\n */\nexport function prepareRetries({\n  maxRetries,\n  abortSignal,\n}: {\n  maxRetries: number | undefined;\n  abortSignal: AbortSignal | undefined;\n}): {\n  maxRetries: number;\n  retry: RetryFunction;\n} {\n  if (maxRetries != null) {\n    if (!Number.isInteger(maxRetries)) {\n      throw new InvalidArgumentError({\n        parameter: 'maxRetries',\n        value: maxRetries,\n        message: 'maxRetries must be an integer',\n      });\n    }\n\n    if (maxRetries < 0) {\n      throw new InvalidArgumentError({\n        parameter: 'maxRetries',\n        value: maxRetries,\n        message: 'maxRetries must be >= 0',\n      });\n    }\n  }\n\n  const maxRetriesResult = maxRetries ?? 2;\n\n  return {\n    maxRetries: maxRetriesResult,\n    retry: retryWithExponentialBackoffRespectingRetryHeaders({\n      maxRetries: maxRetriesResult,\n      abortSignal,\n    }),\n  };\n}\n","import {\n  JSONValue,\n  LanguageModelV3CallOptions,\n  TypeValidationError,\n} from '@ai-sdk/provider';\nimport {\n  asSchema,\n  FlexibleSchema,\n  resolve,\n  safeParseJSON,\n  safeValidateTypes,\n} from '@ai-sdk/provider-utils';\nimport { NoObjectGeneratedError } from '../error/no-object-generated-error';\nimport { FinishReason } from '../types/language-model';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { LanguageModelUsage } from '../types/usage';\nimport { DeepPartial } from '../util/deep-partial';\nimport { parsePartialJson } from '../util/parse-partial-json';\nimport { EnrichedStreamPart } from './stream-text';\n\nexport interface Output<OUTPUT = any, PARTIAL = any, ELEMENT = any> {\n  /**\n   * The name of the output mode.\n   */\n  name: string;\n\n  /**\n   * The response format to use for the model.\n   */\n  responseFormat: PromiseLike<LanguageModelV3CallOptions['responseFormat']>;\n\n  /**\n   * Parses the complete output of the model.\n   */\n  parseCompleteOutput(\n    options: { text: string },\n    context: {\n      response: LanguageModelResponseMetadata;\n      usage: LanguageModelUsage;\n      finishReason: FinishReason;\n    },\n  ): Promise<OUTPUT>;\n\n  /**\n   * Parses the partial output of the model.\n   */\n  parsePartialOutput(options: {\n    text: string;\n  }): Promise<{ partial: PARTIAL } | undefined>;\n\n  /**\n   * Creates a stream transform that emits individual elements as they complete.\n   */\n  createElementStreamTransform():\n    | TransformStream<EnrichedStreamPart<any, PARTIAL>, ELEMENT>\n    | undefined;\n}\n\n/**\n * Output specification for text generation.\n * This is the default output mode that generates plain text.\n *\n * @returns An output specification for generating text.\n */\nexport const text = (): Output<string, string, never> => ({\n  name: 'text',\n  responseFormat: Promise.resolve({ type: 'text' }),\n\n  async parseCompleteOutput({ text }: { text: string }) {\n    return text;\n  },\n\n  async parsePartialOutput({ text }: { text: string }) {\n    return { partial: text };\n  },\n\n  createElementStreamTransform() {\n    return undefined;\n  },\n});\n\n/**\n * Output specification for typed object generation using schemas.\n * When the model generates a text response, it will return an object that matches the schema.\n *\n * @param schema - The schema of the object to generate.\n * @param name - Optional name of the output that should be generated. Used by some providers for additional LLM guidance, e.g. via tool or schema name.\n * @param description - Optional description of the output that should be generated. Used by some providers for additional LLM guidance, e.g. via tool or schema description.\n *\n * @returns An output specification for generating objects with the specified schema.\n */\nexport const object = <OBJECT>({\n  schema: inputSchema,\n  name,\n  description,\n}: {\n  schema: FlexibleSchema<OBJECT>;\n  /**\n   * Optional name of the output that should be generated.\n   * Used by some providers for additional LLM guidance, e.g. via tool or schema name.\n   */\n  name?: string;\n  /**\n   * Optional description of the output that should be generated.\n   * Used by some providers for additional LLM guidance, e.g. via tool or schema description.\n   */\n  description?: string;\n}): Output<OBJECT, DeepPartial<OBJECT>, never> => {\n  const schema = asSchema(inputSchema);\n\n  return {\n    name: 'object',\n\n    responseFormat: resolve(schema.jsonSchema).then(jsonSchema => ({\n      type: 'json' as const,\n      schema: jsonSchema,\n      ...(name != null && { name }),\n      ...(description != null && { description }),\n    })),\n\n    async parseCompleteOutput(\n      { text }: { text: string },\n      context: {\n        response: LanguageModelResponseMetadata;\n        usage: LanguageModelUsage;\n        finishReason: FinishReason;\n      },\n    ) {\n      const parseResult = await safeParseJSON({ text });\n\n      if (!parseResult.success) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: could not parse the response.',\n          cause: parseResult.error,\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      const validationResult = await safeValidateTypes({\n        value: parseResult.value,\n        schema,\n      });\n\n      if (!validationResult.success) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: response did not match schema.',\n          cause: validationResult.error,\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      return validationResult.value;\n    },\n\n    async parsePartialOutput({ text }: { text: string }) {\n      const result = await parsePartialJson(text);\n\n      switch (result.state) {\n        case 'failed-parse':\n        case 'undefined-input': {\n          return undefined;\n        }\n\n        case 'repaired-parse':\n        case 'successful-parse': {\n          return {\n            // Note: currently no validation of partial results:\n            partial: result.value as DeepPartial<OBJECT>,\n          };\n        }\n      }\n    },\n\n    createElementStreamTransform() {\n      return undefined;\n    },\n  };\n};\n\n/**\n * Output specification for array generation.\n * When the model generates a text response, it will return an array of elements.\n *\n * @param element - The schema of the array elements to generate.\n * @param name - Optional name of the output that should be generated. Used by some providers for additional LLM guidance, e.g. via tool or schema name.\n * @param description - Optional description of the output that should be generated. Used by some providers for additional LLM guidance, e.g. via tool or schema description.\n *\n * @returns An output specification for generating an array of elements.\n */\nexport const array = <ELEMENT>({\n  element: inputElementSchema,\n  name,\n  description,\n}: {\n  element: FlexibleSchema<ELEMENT>;\n  /**\n   * Optional name of the output that should be generated.\n   * Used by some providers for additional LLM guidance, e.g. via tool or schema name.\n   */\n  name?: string;\n  /**\n   * Optional description of the output that should be generated.\n   * Used by some providers for additional LLM guidance, e.g. via tool or schema description.\n   */\n  description?: string;\n}): Output<Array<ELEMENT>, Array<ELEMENT>, ELEMENT> => {\n  const elementSchema = asSchema(inputElementSchema);\n\n  return {\n    name: 'array',\n\n    // JSON schema that describes an array of elements:\n    responseFormat: resolve(elementSchema.jsonSchema).then(jsonSchema => {\n      // remove $schema from schema.jsonSchema:\n      const { $schema, ...itemSchema } = jsonSchema;\n\n      return {\n        type: 'json' as const,\n        schema: {\n          $schema: 'http://json-schema.org/draft-07/schema#',\n          type: 'object',\n          properties: {\n            elements: { type: 'array', items: itemSchema },\n          },\n          required: ['elements'],\n          additionalProperties: false,\n        },\n        ...(name != null && { name }),\n        ...(description != null && { description }),\n      };\n    }),\n\n    async parseCompleteOutput(\n      { text }: { text: string },\n      context: {\n        response: LanguageModelResponseMetadata;\n        usage: LanguageModelUsage;\n        finishReason: FinishReason;\n      },\n    ) {\n      const parseResult = await safeParseJSON({ text });\n\n      if (!parseResult.success) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: could not parse the response.',\n          cause: parseResult.error,\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      const outerValue = parseResult.value;\n\n      if (\n        outerValue == null ||\n        typeof outerValue !== 'object' ||\n        !('elements' in outerValue) ||\n        !Array.isArray(outerValue.elements)\n      ) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: response did not match schema.',\n          cause: new TypeValidationError({\n            value: outerValue,\n            cause: 'response must be an object with an elements array',\n          }),\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      for (const element of outerValue.elements) {\n        const validationResult = await safeValidateTypes({\n          value: element,\n          schema: elementSchema,\n        });\n\n        if (!validationResult.success) {\n          throw new NoObjectGeneratedError({\n            message: 'No object generated: response did not match schema.',\n            cause: validationResult.error,\n            text,\n            response: context.response,\n            usage: context.usage,\n            finishReason: context.finishReason,\n          });\n        }\n      }\n\n      return outerValue.elements as Array<ELEMENT>;\n    },\n\n    async parsePartialOutput({ text }: { text: string }) {\n      const result = await parsePartialJson(text);\n\n      switch (result.state) {\n        case 'failed-parse':\n        case 'undefined-input': {\n          return undefined;\n        }\n\n        case 'repaired-parse':\n        case 'successful-parse': {\n          const outerValue = result.value;\n\n          // no parsable elements array\n          if (\n            outerValue == null ||\n            typeof outerValue !== 'object' ||\n            !('elements' in outerValue) ||\n            !Array.isArray(outerValue.elements)\n          ) {\n            return undefined;\n          }\n\n          const rawElements =\n            result.state === 'repaired-parse' && outerValue.elements.length > 0\n              ? outerValue.elements.slice(0, -1)\n              : outerValue.elements;\n\n          const parsedElements: Array<ELEMENT> = [];\n          for (const rawElement of rawElements) {\n            const validationResult = await safeValidateTypes({\n              value: rawElement,\n              schema: elementSchema,\n            });\n\n            if (validationResult.success) {\n              parsedElements.push(validationResult.value);\n            }\n          }\n\n          return { partial: parsedElements };\n        }\n      }\n    },\n\n    createElementStreamTransform() {\n      let publishedElements = 0;\n\n      return new TransformStream<\n        EnrichedStreamPart<any, Array<ELEMENT>>,\n        ELEMENT\n      >({\n        transform({ partialOutput }, controller) {\n          if (partialOutput != null) {\n            // Only enqueue new elements that haven't been published yet\n            for (\n              ;\n              publishedElements < partialOutput.length;\n              publishedElements++\n            ) {\n              controller.enqueue(partialOutput[publishedElements]);\n            }\n          }\n        },\n      });\n    },\n  };\n};\n\n/**\n * Output specification for choice generation.\n * When the model generates a text response, it will return a one of the choice options.\n *\n * @param options - The available choices.\n * @param name - Optional name of the output that should be generated. Used by some providers for additional LLM guidance, e.g. via tool or schema name.\n * @param description - Optional description of the output that should be generated. Used by some providers for additional LLM guidance, e.g. via tool or schema description.\n *\n * @returns An output specification for generating a choice.\n */\nexport const choice = <CHOICE extends string>({\n  options: choiceOptions,\n  name,\n  description,\n}: {\n  options: Array<CHOICE>;\n  /**\n   * Optional name of the output that should be generated.\n   * Used by some providers for additional LLM guidance, e.g. via tool or schema name.\n   */\n  name?: string;\n  /**\n   * Optional description of the output that should be generated.\n   * Used by some providers for additional LLM guidance, e.g. via tool or schema description.\n   */\n  description?: string;\n}): Output<CHOICE, CHOICE, never> => {\n  return {\n    name: 'choice',\n\n    // JSON schema that describes an enumeration:\n    responseFormat: Promise.resolve({\n      type: 'json',\n      schema: {\n        $schema: 'http://json-schema.org/draft-07/schema#',\n        type: 'object',\n        properties: {\n          result: { type: 'string', enum: choiceOptions },\n        },\n        required: ['result'],\n        additionalProperties: false,\n      },\n      ...(name != null && { name }),\n      ...(description != null && { description }),\n    } as const),\n\n    async parseCompleteOutput(\n      { text }: { text: string },\n      context: {\n        response: LanguageModelResponseMetadata;\n        usage: LanguageModelUsage;\n        finishReason: FinishReason;\n      },\n    ) {\n      const parseResult = await safeParseJSON({ text });\n\n      if (!parseResult.success) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: could not parse the response.',\n          cause: parseResult.error,\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      const outerValue = parseResult.value;\n\n      if (\n        outerValue == null ||\n        typeof outerValue !== 'object' ||\n        !('result' in outerValue) ||\n        typeof outerValue.result !== 'string' ||\n        !choiceOptions.includes(outerValue.result as any)\n      ) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: response did not match schema.',\n          cause: new TypeValidationError({\n            value: outerValue,\n            cause: 'response must be an object that contains a choice value.',\n          }),\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      return outerValue.result as CHOICE;\n    },\n\n    async parsePartialOutput({ text }: { text: string }) {\n      const result = await parsePartialJson(text);\n\n      switch (result.state) {\n        case 'failed-parse':\n        case 'undefined-input': {\n          return undefined;\n        }\n\n        case 'repaired-parse':\n        case 'successful-parse': {\n          const outerValue = result.value;\n\n          if (\n            outerValue == null ||\n            typeof outerValue !== 'object' ||\n            !('result' in outerValue) ||\n            typeof outerValue.result !== 'string'\n          ) {\n            return undefined;\n          }\n\n          // list of potential matches.\n          const potentialMatches = choiceOptions.filter(choiceOption =>\n            choiceOption.startsWith(outerValue.result as string),\n          );\n\n          if (result.state === 'successful-parse') {\n            // successful parse: exact choice value\n            return potentialMatches.includes(outerValue.result as any)\n              ? { partial: outerValue.result as CHOICE }\n              : undefined;\n          } else {\n            // repaired parse: only return if not ambiguous\n            return potentialMatches.length === 1\n              ? { partial: potentialMatches[0] as CHOICE }\n              : undefined;\n          }\n        }\n      }\n    },\n\n    createElementStreamTransform() {\n      return undefined;\n    },\n  };\n};\n\n/**\n * Output specification for unstructured JSON generation.\n * When the model generates a text response, it will return a JSON object.\n *\n * @param name - Optional name of the output that should be generated. Used by some providers for additional LLM guidance, e.g. via tool or schema name.\n * @param description - Optional description of the output that should be generated. Used by some providers for additional LLM guidance, e.g. via tool or schema description.\n *\n * @returns An output specification for generating JSON.\n */\nexport const json = ({\n  name,\n  description,\n}: {\n  /**\n   * Optional name of the output that should be generated.\n   * Used by some providers for additional LLM guidance, e.g. via tool or schema name.\n   */\n  name?: string;\n  /**\n   * Optional description of the output that should be generated.\n   * Used by some providers for additional LLM guidance, e.g. via tool or schema description.\n   */\n  description?: string;\n} = {}): Output<JSONValue, JSONValue, never> => {\n  return {\n    name: 'json',\n\n    responseFormat: Promise.resolve({\n      type: 'json' as const,\n      ...(name != null && { name }),\n      ...(description != null && { description }),\n    }),\n\n    async parseCompleteOutput(\n      { text }: { text: string },\n      context: {\n        response: LanguageModelResponseMetadata;\n        usage: LanguageModelUsage;\n        finishReason: FinishReason;\n      },\n    ) {\n      const parseResult = await safeParseJSON({ text });\n\n      if (!parseResult.success) {\n        throw new NoObjectGeneratedError({\n          message: 'No object generated: could not parse the response.',\n          cause: parseResult.error,\n          text,\n          response: context.response,\n          usage: context.usage,\n          finishReason: context.finishReason,\n        });\n      }\n\n      return parseResult.value;\n    },\n\n    async parsePartialOutput({ text }: { text: string }) {\n      const result = await parsePartialJson(text);\n\n      switch (result.state) {\n        case 'failed-parse':\n        case 'undefined-input': {\n          return undefined;\n        }\n\n        case 'repaired-parse':\n        case 'successful-parse': {\n          return result.value === undefined\n            ? undefined\n            : { partial: result.value };\n        }\n      }\n    },\n\n    createElementStreamTransform() {\n      return undefined;\n    },\n  };\n};\n","type State =\n  | 'ROOT'\n  | 'FINISH'\n  | 'INSIDE_STRING'\n  | 'INSIDE_STRING_ESCAPE'\n  | 'INSIDE_LITERAL'\n  | 'INSIDE_NUMBER'\n  | 'INSIDE_OBJECT_START'\n  | 'INSIDE_OBJECT_KEY'\n  | 'INSIDE_OBJECT_AFTER_KEY'\n  | 'INSIDE_OBJECT_BEFORE_VALUE'\n  | 'INSIDE_OBJECT_AFTER_VALUE'\n  | 'INSIDE_OBJECT_AFTER_COMMA'\n  | 'INSIDE_ARRAY_START'\n  | 'INSIDE_ARRAY_AFTER_VALUE'\n  | 'INSIDE_ARRAY_AFTER_COMMA';\n\n// Implemented as a scanner with additional fixing\n// that performs a single linear time scan pass over the partial JSON.\n//\n// The states should ideally match relevant states from the JSON spec:\n// https://www.json.org/json-en.html\n//\n// Please note that invalid JSON is not considered/covered, because it\n// is assumed that the resulting JSON will be processed by a standard\n// JSON parser that will detect any invalid JSON.\nexport function fixJson(input: string): string {\n  const stack: State[] = ['ROOT'];\n  let lastValidIndex = -1;\n  let literalStart: number | null = null;\n\n  function processValueStart(char: string, i: number, swapState: State) {\n    {\n      switch (char) {\n        case '\"': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_STRING');\n          break;\n        }\n\n        case 'f':\n        case 't':\n        case 'n': {\n          lastValidIndex = i;\n          literalStart = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_LITERAL');\n          break;\n        }\n\n        case '-': {\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_NUMBER');\n          break;\n        }\n        case '0':\n        case '1':\n        case '2':\n        case '3':\n        case '4':\n        case '5':\n        case '6':\n        case '7':\n        case '8':\n        case '9': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_NUMBER');\n          break;\n        }\n\n        case '{': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_OBJECT_START');\n          break;\n        }\n\n        case '[': {\n          lastValidIndex = i;\n          stack.pop();\n          stack.push(swapState);\n          stack.push('INSIDE_ARRAY_START');\n          break;\n        }\n      }\n    }\n  }\n\n  function processAfterObjectValue(char: string, i: number) {\n    switch (char) {\n      case ',': {\n        stack.pop();\n        stack.push('INSIDE_OBJECT_AFTER_COMMA');\n        break;\n      }\n      case '}': {\n        lastValidIndex = i;\n        stack.pop();\n        break;\n      }\n    }\n  }\n\n  function processAfterArrayValue(char: string, i: number) {\n    switch (char) {\n      case ',': {\n        stack.pop();\n        stack.push('INSIDE_ARRAY_AFTER_COMMA');\n        break;\n      }\n      case ']': {\n        lastValidIndex = i;\n        stack.pop();\n        break;\n      }\n    }\n  }\n\n  for (let i = 0; i < input.length; i++) {\n    const char = input[i];\n    const currentState = stack[stack.length - 1];\n\n    switch (currentState) {\n      case 'ROOT':\n        processValueStart(char, i, 'FINISH');\n        break;\n\n      case 'INSIDE_OBJECT_START': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_KEY');\n            break;\n          }\n          case '}': {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_AFTER_COMMA': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_KEY');\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_KEY': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_AFTER_KEY');\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_AFTER_KEY': {\n        switch (char) {\n          case ':': {\n            stack.pop();\n            stack.push('INSIDE_OBJECT_BEFORE_VALUE');\n\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_OBJECT_BEFORE_VALUE': {\n        processValueStart(char, i, 'INSIDE_OBJECT_AFTER_VALUE');\n        break;\n      }\n\n      case 'INSIDE_OBJECT_AFTER_VALUE': {\n        processAfterObjectValue(char, i);\n        break;\n      }\n\n      case 'INSIDE_STRING': {\n        switch (char) {\n          case '\"': {\n            stack.pop();\n            lastValidIndex = i;\n            break;\n          }\n\n          case '\\\\': {\n            stack.push('INSIDE_STRING_ESCAPE');\n            break;\n          }\n\n          default: {\n            lastValidIndex = i;\n          }\n        }\n\n        break;\n      }\n\n      case 'INSIDE_ARRAY_START': {\n        switch (char) {\n          case ']': {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n\n          default: {\n            lastValidIndex = i;\n            processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n            break;\n          }\n        }\n        break;\n      }\n\n      case 'INSIDE_ARRAY_AFTER_VALUE': {\n        switch (char) {\n          case ',': {\n            stack.pop();\n            stack.push('INSIDE_ARRAY_AFTER_COMMA');\n            break;\n          }\n\n          case ']': {\n            lastValidIndex = i;\n            stack.pop();\n            break;\n          }\n\n          default: {\n            lastValidIndex = i;\n            break;\n          }\n        }\n\n        break;\n      }\n\n      case 'INSIDE_ARRAY_AFTER_COMMA': {\n        processValueStart(char, i, 'INSIDE_ARRAY_AFTER_VALUE');\n        break;\n      }\n\n      case 'INSIDE_STRING_ESCAPE': {\n        stack.pop();\n        lastValidIndex = i;\n\n        break;\n      }\n\n      case 'INSIDE_NUMBER': {\n        switch (char) {\n          case '0':\n          case '1':\n          case '2':\n          case '3':\n          case '4':\n          case '5':\n          case '6':\n          case '7':\n          case '8':\n          case '9': {\n            lastValidIndex = i;\n            break;\n          }\n\n          case 'e':\n          case 'E':\n          case '-':\n          case '.': {\n            break;\n          }\n\n          case ',': {\n            stack.pop();\n\n            if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n              processAfterArrayValue(char, i);\n            }\n\n            if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n              processAfterObjectValue(char, i);\n            }\n\n            break;\n          }\n\n          case '}': {\n            stack.pop();\n\n            if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n              processAfterObjectValue(char, i);\n            }\n\n            break;\n          }\n\n          case ']': {\n            stack.pop();\n\n            if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n              processAfterArrayValue(char, i);\n            }\n\n            break;\n          }\n\n          default: {\n            stack.pop();\n            break;\n          }\n        }\n\n        break;\n      }\n\n      case 'INSIDE_LITERAL': {\n        const partialLiteral = input.substring(literalStart!, i + 1);\n\n        if (\n          !'false'.startsWith(partialLiteral) &&\n          !'true'.startsWith(partialLiteral) &&\n          !'null'.startsWith(partialLiteral)\n        ) {\n          stack.pop();\n\n          if (stack[stack.length - 1] === 'INSIDE_OBJECT_AFTER_VALUE') {\n            processAfterObjectValue(char, i);\n          } else if (stack[stack.length - 1] === 'INSIDE_ARRAY_AFTER_VALUE') {\n            processAfterArrayValue(char, i);\n          }\n        } else {\n          lastValidIndex = i;\n        }\n\n        break;\n      }\n    }\n  }\n\n  let result = input.slice(0, lastValidIndex + 1);\n\n  for (let i = stack.length - 1; i >= 0; i--) {\n    const state = stack[i];\n\n    switch (state) {\n      case 'INSIDE_STRING': {\n        result += '\"';\n        break;\n      }\n\n      case 'INSIDE_OBJECT_KEY':\n      case 'INSIDE_OBJECT_AFTER_KEY':\n      case 'INSIDE_OBJECT_AFTER_COMMA':\n      case 'INSIDE_OBJECT_START':\n      case 'INSIDE_OBJECT_BEFORE_VALUE':\n      case 'INSIDE_OBJECT_AFTER_VALUE': {\n        result += '}';\n        break;\n      }\n\n      case 'INSIDE_ARRAY_START':\n      case 'INSIDE_ARRAY_AFTER_COMMA':\n      case 'INSIDE_ARRAY_AFTER_VALUE': {\n        result += ']';\n        break;\n      }\n\n      case 'INSIDE_LITERAL': {\n        const partialLiteral = input.substring(literalStart!, input.length);\n\n        if ('true'.startsWith(partialLiteral)) {\n          result += 'true'.slice(partialLiteral.length);\n        } else if ('false'.startsWith(partialLiteral)) {\n          result += 'false'.slice(partialLiteral.length);\n        } else if ('null'.startsWith(partialLiteral)) {\n          result += 'null'.slice(partialLiteral.length);\n        }\n      }\n    }\n  }\n\n  return result;\n}\n","import { JSONValue } from '@ai-sdk/provider';\nimport { safeParseJSON } from '@ai-sdk/provider-utils';\nimport { fixJson } from './fix-json';\n\nexport async function parsePartialJson(jsonText: string | undefined): Promise<{\n  value: JSONValue | undefined;\n  state:\n    | 'undefined-input'\n    | 'successful-parse'\n    | 'repaired-parse'\n    | 'failed-parse';\n}> {\n  if (jsonText === undefined) {\n    return { value: undefined, state: 'undefined-input' };\n  }\n\n  let result = await safeParseJSON({ text: jsonText });\n\n  if (result.success) {\n    return { value: result.value, state: 'successful-parse' };\n  }\n\n  result = await safeParseJSON({ text: fixJson(jsonText) });\n\n  if (result.success) {\n    return { value: result.value, state: 'repaired-parse' };\n  }\n\n  return { value: undefined, state: 'failed-parse' };\n}\n","import {\n  LanguageModelV3,\n  LanguageModelV3Content,\n  LanguageModelV3ToolCall,\n} from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  getErrorMessage,\n  IdGenerator,\n  ProviderOptions,\n  withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { Tracer } from '@opentelemetry/api';\nimport { NoOutputGeneratedError } from '../error';\nimport { notify } from '../util/notify';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { ModelMessage } from '../prompt';\nimport {\n  CallSettings,\n  getStepTimeoutMs,\n  getTotalTimeoutMs,\n  TimeoutConfiguration,\n} from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { createToolModelOutput } from '../prompt/create-tool-model-output';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareToolsAndToolChoice } from '../prompt/prepare-tools-and-tool-choice';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { ToolCallNotFoundForApprovalError } from '../error/tool-call-not-found-for-approval-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { getGlobalTelemetryIntegration } from '../telemetry/get-global-telemetry-integration';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport {\n  LanguageModel,\n  LanguageModelRequestMetadata,\n  ToolChoice,\n} from '../types';\nimport {\n  addLanguageModelUsage,\n  asLanguageModelUsage,\n  LanguageModelUsage,\n} from '../types/usage';\nimport { asArray } from '../util/as-array';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { mergeObjects } from '../util/merge-objects';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { VERSION } from '../version';\nimport type {\n  OnFinishEvent,\n  OnStartEvent,\n  OnStepFinishEvent,\n  OnStepStartEvent,\n  OnToolCallFinishEvent,\n  OnToolCallStartEvent,\n} from './callback-events';\nimport { collectToolApprovals } from './collect-tool-approvals';\nimport { ContentPart } from './content-part';\nimport { executeToolCall } from './execute-tool-call';\nimport { extractReasoningContent } from './extract-reasoning-content';\nimport { extractTextContent } from './extract-text-content';\nimport { GenerateTextResult } from './generate-text-result';\nimport { DefaultGeneratedFile } from './generated-file';\nimport { isApprovalNeeded } from './is-approval-needed';\nimport { Output, text } from './output';\nimport { InferCompleteOutput } from './output-utils';\nimport { parseToolCall } from './parse-tool-call';\nimport { PrepareStepFunction } from './prepare-step';\nimport { ResponseMessage } from './response-message';\nimport { DefaultStepResult, StepResult } from './step-result';\nimport {\n  isStopConditionMet,\n  stepCountIs,\n  StopCondition,\n} from './stop-condition';\nimport { toResponseMessages } from './to-response-messages';\nimport { ToolApprovalRequestOutput } from './tool-approval-request-output';\nimport { TypedToolCall } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair-function';\nimport { TypedToolError } from './tool-error';\nimport { ToolOutput } from './tool-output';\nimport { TypedToolResult } from './tool-result';\nimport { ToolSet } from './tool-set';\nimport { mergeAbortSignals } from '../util/merge-abort-signals';\n\nconst originalGenerateId = createIdGenerator({\n  prefix: 'aitxt',\n  size: 24,\n});\n\n/**\n * Include settings for generateText (requestBody and responseBody).\n */\ntype GenerateTextIncludeSettings = {\n  requestBody?: boolean;\n  responseBody?: boolean;\n};\n\n/**\n * Callback that is set using the `experimental_onStart` option.\n *\n * Called when the generateText operation begins, before any LLM calls.\n * Use this callback for logging, analytics, or initializing state at the\n * start of a generation.\n *\n * @param event - The event object containing generation configuration.\n */\nexport type GenerateTextOnStartCallback<\n  TOOLS extends ToolSet = ToolSet,\n  OUTPUT extends Output = Output,\n> = (\n  event: OnStartEvent<TOOLS, OUTPUT, GenerateTextIncludeSettings>,\n) => PromiseLike<void> | void;\n\n/**\n * Callback that is set using the `experimental_onStepStart` option.\n *\n * Called when a step (LLM call) begins, before the provider is called.\n * Each step represents a single LLM invocation. Multiple steps occur when\n * using tool calls (the model may be called multiple times in a loop).\n *\n * @param event - The event object containing step configuration.\n */\nexport type GenerateTextOnStepStartCallback<\n  TOOLS extends ToolSet = ToolSet,\n  OUTPUT extends Output = Output,\n> = (\n  event: OnStepStartEvent<TOOLS, OUTPUT, GenerateTextIncludeSettings>,\n) => PromiseLike<void> | void;\n\n/**\n * Callback that is set using the `experimental_onToolCallStart` option.\n *\n * Called when a tool execution begins, before the tool's `execute` function is invoked.\n * Use this for logging tool invocations, tracking tool usage, or pre-execution validation.\n *\n * @param event - The event object containing tool call information.\n */\nexport type GenerateTextOnToolCallStartCallback<\n  TOOLS extends ToolSet = ToolSet,\n> = (event: OnToolCallStartEvent<TOOLS>) => PromiseLike<void> | void;\n\n/**\n * Callback that is set using the `experimental_onToolCallFinish` option.\n *\n * Called when a tool execution completes, either successfully or with an error.\n * Use this for logging tool results, tracking execution time, or error handling.\n *\n * The event uses a discriminated union on the `success` field:\n * - When `success: true`: `output` contains the tool result, `error` is never present.\n * - When `success: false`: `error` contains the error, `output` is never present.\n *\n * @param event - The event object containing tool call result information.\n */\nexport type GenerateTextOnToolCallFinishCallback<\n  TOOLS extends ToolSet = ToolSet,\n> = (event: OnToolCallFinishEvent<TOOLS>) => PromiseLike<void> | void;\n\n/**\n * Callback that is set using the `onStepFinish` option.\n *\n * Called when a step (LLM call) completes. The event includes all step result\n * properties (text, tool calls, usage, etc.) along with additional metadata.\n *\n * @param stepResult - The result of the step.\n */\nexport type GenerateTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n  event: OnStepFinishEvent<TOOLS>,\n) => Promise<void> | void;\n\n/**\n * Callback that is set using the `onFinish` option.\n *\n * Called when the entire generation completes (all steps finished).\n * The event includes the final step's result properties along with\n * aggregated data from all steps.\n *\n * @param event - The final result along with aggregated step data.\n */\nexport type GenerateTextOnFinishCallback<TOOLS extends ToolSet> = (\n  event: OnFinishEvent<TOOLS>,\n) => PromiseLike<void> | void;\n\n/**\n * Generate a text and call tools for a given prompt using a language model.\n *\n * This function does not stream the output. If you want to stream the output, use `streamText` instead.\n *\n * @param model - The language model to use.\n *\n * @param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n * @param toolChoice - The tool choice strategy. Default: 'auto'.\n *\n * @param system - A system message that will be part of the prompt.\n * @param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n * @param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n *\n * @param maxOutputTokens - Maximum number of tokens to generate.\n * @param temperature - Temperature setting.\n * The value is passed through to the provider. The range depends on the provider and model.\n * It is recommended to set either `temperature` or `topP`, but not both.\n * @param topP - Nucleus sampling.\n * The value is passed through to the provider. The range depends on the provider and model.\n * It is recommended to set either `temperature` or `topP`, but not both.\n * @param topK - Only sample from the top K options for each subsequent token.\n * Used to remove \"long tail\" low probability responses.\n * Recommended for advanced use cases only. You usually only need to use temperature.\n * @param presencePenalty - Presence penalty setting.\n * It affects the likelihood of the model to repeat information that is already in the prompt.\n * The value is passed through to the provider. The range depends on the provider and model.\n * @param frequencyPenalty - Frequency penalty setting.\n * It affects the likelihood of the model to repeatedly use the same words or phrases.\n * The value is passed through to the provider. The range depends on the provider and model.\n * @param stopSequences - Stop sequences.\n * If set, the model will stop generating text when one of the stop sequences is generated.\n * @param seed - The seed (integer) to use for random sampling.\n * If set and supported by the model, calls will generate deterministic results.\n *\n * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n * @param abortSignal - An optional abort signal that can be used to cancel the call.\n * @param timeout - An optional timeout in milliseconds. The call will be aborted if it takes longer than the specified timeout.\n * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n *\n * @param experimental_context - User-defined context object that flows through the entire generation lifecycle.\n * @param experimental_onStart - Callback invoked when generation begins, before any LLM calls.\n * @param experimental_onStepStart - Callback invoked when each step begins, before the provider is called.\n * Receives step number, messages (in ModelMessage format), tools, and context.\n * @param experimental_onToolCallStart - Callback invoked before each tool execution begins.\n * Receives tool name, call ID, input, and context.\n * @param experimental_onToolCallFinish - Callback invoked after each tool execution completes.\n * Uses a discriminated union: check `success` to determine if `output` or `error` is present.\n * @param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n * @param onFinish - Callback that is called when all steps are finished and the response is complete.\n *\n * @returns\n * A result object that contains the generated text, the results of the tool calls, and additional information.\n */\nexport async function generateText<\n  TOOLS extends ToolSet,\n  OUTPUT extends Output = Output<string, string>,\n>({\n  model: modelArg,\n  tools,\n  toolChoice,\n  system,\n  prompt,\n  messages,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  timeout,\n  headers,\n  stopWhen = stepCountIs(1),\n  experimental_output,\n  output = experimental_output,\n  experimental_telemetry: telemetry,\n  providerOptions,\n  experimental_activeTools,\n  activeTools = experimental_activeTools,\n  experimental_prepareStep,\n  prepareStep = experimental_prepareStep,\n  experimental_repairToolCall: repairToolCall,\n  experimental_download: download,\n  experimental_context,\n  experimental_include: include,\n  _internal: { generateId = originalGenerateId } = {},\n  experimental_onStart: onStart,\n  experimental_onStepStart: onStepStart,\n  experimental_onToolCallStart: onToolCallStart,\n  experimental_onToolCallFinish: onToolCallFinish,\n  onStepFinish,\n  onFinish,\n  ...settings\n}: CallSettings &\n  Prompt & {\n    /**\n     * The language model to use.\n     */\n    model: LanguageModel;\n\n    /**\n     * The tools that the model can call. The model needs to support calling tools.\n     */\n    tools?: TOOLS;\n\n    /**\n     * The tool choice strategy. Default: 'auto'.\n     */\n    toolChoice?: ToolChoice<NoInfer<TOOLS>>;\n\n    /**\n     * Condition for stopping the generation when there are tool results in the last step.\n     * When the condition is an array, any of the conditions can be met to stop the generation.\n     *\n     * @default stepCountIs(1)\n     */\n    stopWhen?:\n      | StopCondition<NoInfer<TOOLS>>\n      | Array<StopCondition<NoInfer<TOOLS>>>;\n\n    /**\n     * Optional telemetry configuration (experimental).\n     */\n    experimental_telemetry?: TelemetrySettings;\n\n    /**\n     * Additional provider-specific options. They are passed through\n     * to the provider from the AI SDK and enable provider-specific\n     * functionality that can be fully encapsulated in the provider.\n     */\n    providerOptions?: ProviderOptions;\n\n    /**\n     * @deprecated Use `activeTools` instead.\n     */\n    experimental_activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n    /**\n     * Limits the tools that are available for the model to call without\n     * changing the tool call and result types in the result.\n     */\n    activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n    /**\n     * Optional specification for parsing structured outputs from the LLM response.\n     */\n    output?: OUTPUT;\n\n    /**\n     * Optional specification for parsing structured outputs from the LLM response.\n     *\n     * @deprecated Use `output` instead.\n     */\n    experimental_output?: OUTPUT;\n\n    /**\n     * Custom download function to use for URLs.\n     *\n     * By default, files are downloaded if the model does not support the URL for the given media type.\n     */\n    experimental_download?: DownloadFunction | undefined;\n\n    /**\n     * @deprecated Use `prepareStep` instead.\n     */\n    experimental_prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n    /**\n     * Optional function that you can use to provide different settings for a step.\n     */\n    prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n    /**\n     * A function that attempts to repair a tool call that failed to parse.\n     */\n    experimental_repairToolCall?: ToolCallRepairFunction<NoInfer<TOOLS>>;\n\n    /**\n     * Callback that is called when the generateText operation begins,\n     * before any LLM calls are made.\n     */\n    experimental_onStart?: GenerateTextOnStartCallback<NoInfer<TOOLS>, OUTPUT>;\n\n    /**\n     * Callback that is called when a step (LLM call) begins,\n     * before the provider is called.\n     */\n    experimental_onStepStart?: GenerateTextOnStepStartCallback<\n      NoInfer<TOOLS>,\n      OUTPUT\n    >;\n\n    /**\n     * Callback that is called right before a tool's execute function runs.\n     */\n    experimental_onToolCallStart?: GenerateTextOnToolCallStartCallback<\n      NoInfer<TOOLS>\n    >;\n\n    /**\n     * Callback that is called right after a tool's execute function completes (or errors).\n     */\n    experimental_onToolCallFinish?: GenerateTextOnToolCallFinishCallback<\n      NoInfer<TOOLS>\n    >;\n\n    /**\n     * Callback that is called when each step (LLM call) is finished, including intermediate steps.\n     */\n    onStepFinish?: GenerateTextOnStepFinishCallback<NoInfer<TOOLS>>;\n\n    /**\n     * Callback that is called when all steps are finished and the response is complete.\n     */\n    onFinish?: GenerateTextOnFinishCallback<NoInfer<TOOLS>>;\n\n    /**\n     * Context that is passed into tool execution.\n     *\n     * Experimental (can break in patch releases).\n     *\n     * @default undefined\n     */\n    experimental_context?: unknown;\n\n    /**\n     * Settings for controlling what data is included in step results.\n     * Disabling inclusion can help reduce memory usage when processing\n     * large payloads like images.\n     *\n     * By default, all data is included for backwards compatibility.\n     */\n    experimental_include?: {\n      /**\n       * Whether to retain the request body in step results.\n       * The request body can be large when sending images or files.\n       * @default true\n       */\n      requestBody?: boolean;\n\n      /**\n       * Whether to retain the response body in step results.\n       * @default true\n       */\n      responseBody?: boolean;\n    };\n\n    /**\n     * Internal. For test use only. May change without notice.\n     */\n    _internal?: {\n      generateId?: IdGenerator;\n    };\n  }): Promise<GenerateTextResult<TOOLS, OUTPUT>> {\n  const model = resolveLanguageModel(modelArg);\n  const createGlobalTelemetry = getGlobalTelemetryIntegration<TOOLS, OUTPUT>();\n  const stopConditions = asArray(stopWhen);\n\n  const totalTimeoutMs = getTotalTimeoutMs(timeout);\n  const stepTimeoutMs = getStepTimeoutMs(timeout);\n  const stepAbortController =\n    stepTimeoutMs != null ? new AbortController() : undefined;\n  const mergedAbortSignal = mergeAbortSignals(\n    abortSignal,\n    totalTimeoutMs != null ? AbortSignal.timeout(totalTimeoutMs) : undefined,\n    stepAbortController?.signal,\n  );\n\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal: mergedAbortSignal,\n  });\n\n  const callSettings = prepareCallSettings(settings);\n\n  const headersWithUserAgent = withUserAgentSuffix(\n    headers ?? {},\n    `ai/${VERSION}`,\n  );\n\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { ...callSettings, maxRetries },\n  });\n\n  const modelInfo = { provider: model.provider, modelId: model.modelId };\n\n  const initialPrompt = await standardizePrompt({\n    system,\n    prompt,\n    messages,\n  } as Prompt);\n\n  const globalTelemetry = createGlobalTelemetry(telemetry?.integrations);\n\n  await notify({\n    event: {\n      model: modelInfo,\n      system,\n      prompt,\n      messages,\n      tools,\n      toolChoice,\n      activeTools,\n      maxOutputTokens: callSettings.maxOutputTokens,\n      temperature: callSettings.temperature,\n      topP: callSettings.topP,\n      topK: callSettings.topK,\n      presencePenalty: callSettings.presencePenalty,\n      frequencyPenalty: callSettings.frequencyPenalty,\n      stopSequences: callSettings.stopSequences,\n      seed: callSettings.seed,\n      maxRetries,\n      timeout,\n      headers,\n      providerOptions,\n      stopWhen,\n      output,\n      abortSignal,\n      include,\n      functionId: telemetry?.functionId,\n      metadata: telemetry?.metadata as Record<string, unknown> | undefined,\n      experimental_context,\n    },\n    callbacks: [\n      onStart,\n      globalTelemetry.onStart as\n        | undefined\n        | GenerateTextOnStartCallback<TOOLS, OUTPUT>,\n    ],\n  });\n\n  const tracer = getTracer(telemetry);\n\n  try {\n    return await recordSpan({\n      name: 'ai.generateText',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: 'ai.generateText',\n            telemetry,\n          }),\n          ...baseTelemetryAttributes,\n          // model:\n          'ai.model.provider': model.provider,\n          'ai.model.id': model.modelId,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n        },\n      }),\n      tracer,\n      fn: async span => {\n        const initialMessages = initialPrompt.messages;\n        const responseMessages: Array<ResponseMessage> = [];\n\n        const { approvedToolApprovals, deniedToolApprovals } =\n          collectToolApprovals<TOOLS>({ messages: initialMessages });\n\n        const localApprovedToolApprovals = approvedToolApprovals.filter(\n          toolApproval => !toolApproval.toolCall.providerExecuted,\n        );\n\n        if (\n          deniedToolApprovals.length > 0 ||\n          localApprovedToolApprovals.length > 0\n        ) {\n          const toolOutputs = await executeTools({\n            toolCalls: localApprovedToolApprovals.map(\n              toolApproval => toolApproval.toolCall,\n            ),\n            tools: tools as TOOLS,\n            tracer,\n            telemetry,\n            messages: initialMessages,\n            abortSignal: mergedAbortSignal,\n            experimental_context,\n            stepNumber: 0,\n            model: modelInfo,\n            onToolCallStart: [\n              onToolCallStart,\n              globalTelemetry.onToolCallStart as\n                | undefined\n                | GenerateTextOnToolCallStartCallback<TOOLS>,\n            ],\n            onToolCallFinish: [\n              onToolCallFinish,\n              globalTelemetry.onToolCallFinish as\n                | undefined\n                | GenerateTextOnToolCallFinishCallback<TOOLS>,\n            ],\n          });\n\n          const toolContent: Array<any> = [];\n\n          // add regular tool results for approved tool calls:\n          for (const output of toolOutputs) {\n            const modelOutput = await createToolModelOutput({\n              toolCallId: output.toolCallId,\n              input: output.input,\n              tool: tools?.[output.toolName],\n              output:\n                output.type === 'tool-result' ? output.output : output.error,\n              errorMode: output.type === 'tool-error' ? 'text' : 'none',\n            });\n\n            toolContent.push({\n              type: 'tool-result' as const,\n              toolCallId: output.toolCallId,\n              toolName: output.toolName,\n              output: modelOutput,\n            });\n          }\n\n          // add execution denied tool results for all denied tool approvals:\n          for (const toolApproval of deniedToolApprovals) {\n            toolContent.push({\n              type: 'tool-result' as const,\n              toolCallId: toolApproval.toolCall.toolCallId,\n              toolName: toolApproval.toolCall.toolName,\n              output: {\n                type: 'execution-denied' as const,\n                reason: toolApproval.approvalResponse.reason,\n                // For provider-executed tools, include approvalId so provider can correlate\n                ...(toolApproval.toolCall.providerExecuted && {\n                  providerOptions: {\n                    openai: {\n                      approvalId: toolApproval.approvalResponse.approvalId,\n                    },\n                  },\n                }),\n              },\n            });\n          }\n\n          responseMessages.push({\n            role: 'tool',\n            content: toolContent,\n          });\n        }\n\n        const callSettings = prepareCallSettings(settings);\n\n        let currentModelResponse: Awaited<\n          ReturnType<LanguageModelV3['doGenerate']>\n        > & { response: { id: string; timestamp: Date; modelId: string } };\n        let clientToolCalls: Array<TypedToolCall<TOOLS>> = [];\n        let clientToolOutputs: Array<ToolOutput<TOOLS>> = [];\n        const steps: GenerateTextResult<TOOLS, OUTPUT>['steps'] = [];\n\n        // Track provider-executed tool calls that support deferred results\n        // (e.g., code_execution in programmatic tool calling scenarios).\n        // These tools may not return their results in the same turn as their call.\n        const pendingDeferredToolCalls = new Map<\n          string,\n          { toolName: string }\n        >();\n\n        do {\n          // Set up step timeout if configured\n          const stepTimeoutId =\n            stepTimeoutMs != null\n              ? setTimeout(() => stepAbortController!.abort(), stepTimeoutMs)\n              : undefined;\n\n          try {\n            const stepInputMessages = [...initialMessages, ...responseMessages];\n\n            const prepareStepResult = await prepareStep?.({\n              model,\n              steps,\n              stepNumber: steps.length,\n              messages: stepInputMessages,\n              experimental_context,\n            });\n\n            const stepModel = resolveLanguageModel(\n              prepareStepResult?.model ?? model,\n            );\n            const stepModelInfo = {\n              provider: stepModel.provider,\n              modelId: stepModel.modelId,\n            };\n\n            const promptMessages = await convertToLanguageModelPrompt({\n              prompt: {\n                system: prepareStepResult?.system ?? initialPrompt.system,\n                messages: prepareStepResult?.messages ?? stepInputMessages,\n              },\n              supportedUrls: await stepModel.supportedUrls,\n              download,\n            });\n\n            experimental_context =\n              prepareStepResult?.experimental_context ?? experimental_context;\n\n            const stepActiveTools =\n              prepareStepResult?.activeTools ?? activeTools;\n\n            const { toolChoice: stepToolChoice, tools: stepTools } =\n              await prepareToolsAndToolChoice({\n                tools,\n                toolChoice: prepareStepResult?.toolChoice ?? toolChoice,\n                activeTools: stepActiveTools,\n              });\n\n            const stepMessages =\n              prepareStepResult?.messages ?? stepInputMessages;\n\n            const stepSystem =\n              prepareStepResult?.system ?? initialPrompt.system;\n\n            const stepProviderOptions = mergeObjects(\n              providerOptions,\n              prepareStepResult?.providerOptions,\n            );\n\n            await notify({\n              event: {\n                stepNumber: steps.length,\n                model: stepModelInfo,\n                system: stepSystem,\n                messages: stepMessages,\n                tools,\n                toolChoice: stepToolChoice,\n                activeTools: stepActiveTools,\n                steps: [...steps],\n                providerOptions: stepProviderOptions,\n                timeout,\n                headers,\n                stopWhen,\n                output,\n                abortSignal,\n                include,\n                functionId: telemetry?.functionId,\n                metadata: telemetry?.metadata as\n                  | Record<string, unknown>\n                  | undefined,\n                experimental_context,\n              },\n              callbacks: [\n                onStepStart,\n                globalTelemetry.onStepStart as\n                  | undefined\n                  | GenerateTextOnStepStartCallback<TOOLS, OUTPUT>,\n              ],\n            });\n\n            currentModelResponse = await retry(() =>\n              recordSpan({\n                name: 'ai.generateText.doGenerate',\n                attributes: selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    ...assembleOperationName({\n                      operationId: 'ai.generateText.doGenerate',\n                      telemetry,\n                    }),\n                    ...baseTelemetryAttributes,\n                    // model:\n                    'ai.model.provider': stepModel.provider,\n                    'ai.model.id': stepModel.modelId,\n                    // prompt:\n                    'ai.prompt.messages': {\n                      input: () => stringifyForTelemetry(promptMessages),\n                    },\n                    'ai.prompt.tools': {\n                      // convert the language model level tools:\n                      input: () => stepTools?.map(tool => JSON.stringify(tool)),\n                    },\n                    'ai.prompt.toolChoice': {\n                      input: () =>\n                        stepToolChoice != null\n                          ? JSON.stringify(stepToolChoice)\n                          : undefined,\n                    },\n\n                    // standardized gen-ai llm span attributes:\n                    'gen_ai.system': stepModel.provider,\n                    'gen_ai.request.model': stepModel.modelId,\n                    'gen_ai.request.frequency_penalty':\n                      settings.frequencyPenalty,\n                    'gen_ai.request.max_tokens': settings.maxOutputTokens,\n                    'gen_ai.request.presence_penalty': settings.presencePenalty,\n                    'gen_ai.request.stop_sequences': settings.stopSequences,\n                    'gen_ai.request.temperature':\n                      settings.temperature ?? undefined,\n                    'gen_ai.request.top_k': settings.topK,\n                    'gen_ai.request.top_p': settings.topP,\n                  },\n                }),\n                tracer,\n                fn: async span => {\n                  const result = await stepModel.doGenerate({\n                    ...callSettings,\n                    tools: stepTools,\n                    toolChoice: stepToolChoice,\n                    responseFormat: await output?.responseFormat,\n                    prompt: promptMessages,\n                    providerOptions: stepProviderOptions,\n                    abortSignal: mergedAbortSignal,\n                    headers: headersWithUserAgent,\n                  });\n\n                  // Fill in default values:\n                  const responseData = {\n                    id: result.response?.id ?? generateId(),\n                    timestamp: result.response?.timestamp ?? new Date(),\n                    modelId: result.response?.modelId ?? stepModel.modelId,\n                    headers: result.response?.headers,\n                    body: result.response?.body,\n                  };\n                  const usage = asLanguageModelUsage(result.usage);\n\n                  // Add response information to the span:\n                  span.setAttributes(\n                    await selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        'ai.response.finishReason': result.finishReason.unified,\n                        'ai.response.text': {\n                          output: () => extractTextContent(result.content),\n                        },\n                        'ai.response.reasoning': {\n                          output: () => extractReasoningContent(result.content),\n                        },\n                        'ai.response.toolCalls': {\n                          output: () => {\n                            const toolCalls = asToolCalls(result.content);\n                            return toolCalls == null\n                              ? undefined\n                              : JSON.stringify(toolCalls);\n                          },\n                        },\n                        'ai.response.id': responseData.id,\n                        'ai.response.model': responseData.modelId,\n                        'ai.response.timestamp':\n                          responseData.timestamp.toISOString(),\n                        'ai.response.providerMetadata': JSON.stringify(\n                          result.providerMetadata,\n                        ),\n\n                        'ai.usage.inputTokens': result.usage.inputTokens.total,\n                        'ai.usage.inputTokenDetails.noCacheTokens':\n                          result.usage.inputTokens.noCache,\n                        'ai.usage.inputTokenDetails.cacheReadTokens':\n                          result.usage.inputTokens.cacheRead,\n                        'ai.usage.inputTokenDetails.cacheWriteTokens':\n                          result.usage.inputTokens.cacheWrite,\n                        'ai.usage.outputTokens':\n                          result.usage.outputTokens.total,\n                        'ai.usage.outputTokenDetails.textTokens':\n                          result.usage.outputTokens.text,\n                        'ai.usage.outputTokenDetails.reasoningTokens':\n                          result.usage.outputTokens.reasoning,\n                        'ai.usage.totalTokens': usage.totalTokens,\n                        'ai.usage.reasoningTokens':\n                          result.usage.outputTokens.reasoning,\n                        'ai.usage.cachedInputTokens':\n                          result.usage.inputTokens.cacheRead,\n\n                        // standardized gen-ai llm span attributes:\n                        'gen_ai.response.finish_reasons': [\n                          result.finishReason.unified,\n                        ],\n                        'gen_ai.response.id': responseData.id,\n                        'gen_ai.response.model': responseData.modelId,\n                        'gen_ai.usage.input_tokens':\n                          result.usage.inputTokens.total,\n                        'gen_ai.usage.output_tokens':\n                          result.usage.outputTokens.total,\n                      },\n                    }),\n                  );\n\n                  return { ...result, response: responseData };\n                },\n              }),\n            );\n\n            // parse tool calls:\n            const stepToolCalls: TypedToolCall<TOOLS>[] = await Promise.all(\n              currentModelResponse.content\n                .filter(\n                  (part): part is LanguageModelV3ToolCall =>\n                    part.type === 'tool-call',\n                )\n                .map(toolCall =>\n                  parseToolCall({\n                    toolCall,\n                    tools,\n                    repairToolCall,\n                    system,\n                    messages: stepInputMessages,\n                  }),\n                ),\n            );\n            const toolApprovalRequests: Record<\n              string,\n              ToolApprovalRequestOutput<TOOLS>\n            > = {};\n\n            // notify the tools that the tool calls are available:\n            for (const toolCall of stepToolCalls) {\n              if (toolCall.invalid) {\n                continue; // ignore invalid tool calls\n              }\n\n              const tool = tools?.[toolCall.toolName];\n\n              if (tool == null) {\n                // ignore tool calls for tools that are not available,\n                // e.g. provider-executed dynamic tools\n                continue;\n              }\n\n              if (tool?.onInputAvailable != null) {\n                await tool.onInputAvailable({\n                  input: toolCall.input,\n                  toolCallId: toolCall.toolCallId,\n                  messages: stepInputMessages,\n                  abortSignal: mergedAbortSignal,\n                  experimental_context,\n                });\n              }\n\n              if (\n                await isApprovalNeeded({\n                  tool,\n                  toolCall,\n                  messages: stepInputMessages,\n                  experimental_context,\n                })\n              ) {\n                toolApprovalRequests[toolCall.toolCallId] = {\n                  type: 'tool-approval-request',\n                  approvalId: generateId(),\n                  toolCall,\n                };\n              }\n            }\n\n            // insert error tool outputs for invalid tool calls:\n            // TODO AI SDK 6: invalid inputs should not require output parts\n            const invalidToolCalls = stepToolCalls.filter(\n              toolCall => toolCall.invalid && toolCall.dynamic,\n            );\n\n            clientToolOutputs = [];\n\n            for (const toolCall of invalidToolCalls) {\n              clientToolOutputs.push({\n                type: 'tool-error',\n                toolCallId: toolCall.toolCallId,\n                toolName: toolCall.toolName,\n                input: toolCall.input,\n                error: getErrorMessage(toolCall.error!),\n                dynamic: true,\n              });\n            }\n\n            // execute client tool calls:\n            clientToolCalls = stepToolCalls.filter(\n              toolCall => !toolCall.providerExecuted,\n            );\n\n            if (tools != null) {\n              clientToolOutputs.push(\n                ...(await executeTools({\n                  toolCalls: clientToolCalls.filter(\n                    toolCall =>\n                      !toolCall.invalid &&\n                      toolApprovalRequests[toolCall.toolCallId] == null,\n                  ),\n                  tools,\n                  tracer,\n                  telemetry,\n                  messages: stepInputMessages,\n                  abortSignal: mergedAbortSignal,\n                  experimental_context,\n                  stepNumber: steps.length,\n                  model: stepModelInfo,\n                  onToolCallStart: [\n                    onToolCallStart,\n                    globalTelemetry.onToolCallStart as\n                      | undefined\n                      | GenerateTextOnToolCallStartCallback<TOOLS>,\n                  ],\n                  onToolCallFinish: [\n                    onToolCallFinish,\n                    globalTelemetry.onToolCallFinish,\n                  ],\n                })),\n              );\n            }\n\n            // Track provider-executed tool calls that support deferred results.\n            // In programmatic tool calling, a server tool (e.g., code_execution) may\n            // trigger a client tool, and the server tool's result is deferred until\n            // the client tool's result is sent back.\n            for (const toolCall of stepToolCalls) {\n              if (!toolCall.providerExecuted) continue;\n              const tool = tools?.[toolCall.toolName];\n              if (tool?.type === 'provider' && tool.supportsDeferredResults) {\n                // Check if this tool call already has a result in the current response\n                const hasResultInResponse = currentModelResponse.content.some(\n                  part =>\n                    part.type === 'tool-result' &&\n                    part.toolCallId === toolCall.toolCallId,\n                );\n                if (!hasResultInResponse) {\n                  pendingDeferredToolCalls.set(toolCall.toolCallId, {\n                    toolName: toolCall.toolName,\n                  });\n                }\n              }\n            }\n\n            // Mark deferred tool calls as resolved when we receive their results\n            for (const part of currentModelResponse.content) {\n              if (part.type === 'tool-result') {\n                pendingDeferredToolCalls.delete(part.toolCallId);\n              }\n            }\n\n            // content:\n            const stepContent = asContent({\n              content: currentModelResponse.content,\n              toolCalls: stepToolCalls,\n              toolOutputs: clientToolOutputs,\n              toolApprovalRequests: Object.values(toolApprovalRequests),\n              tools,\n            });\n\n            // append to messages for potential next step:\n            responseMessages.push(\n              ...(await toResponseMessages({\n                content: stepContent,\n                tools,\n              })),\n            );\n\n            // Add step information (after response messages are updated):\n            // Conditionally include request.body and response.body based on include settings.\n            // Large payloads (e.g., base64-encoded images) can cause memory issues.\n            const stepRequest: LanguageModelRequestMetadata =\n              (include?.requestBody ?? true)\n                ? (currentModelResponse.request ?? {})\n                : { ...currentModelResponse.request, body: undefined };\n\n            const stepResponse = {\n              ...currentModelResponse.response,\n              // deep clone msgs to avoid mutating past messages in multi-step:\n              messages: structuredClone(responseMessages),\n              // Conditionally include response body:\n              body:\n                (include?.responseBody ?? true)\n                  ? currentModelResponse.response?.body\n                  : undefined,\n            };\n\n            const stepNumber = steps.length;\n\n            const currentStepResult: StepResult<TOOLS> = new DefaultStepResult({\n              stepNumber,\n              model: stepModelInfo,\n              functionId: telemetry?.functionId,\n              metadata: telemetry?.metadata as\n                | Record<string, unknown>\n                | undefined,\n              experimental_context,\n              content: stepContent,\n              finishReason: currentModelResponse.finishReason.unified,\n              rawFinishReason: currentModelResponse.finishReason.raw,\n              usage: asLanguageModelUsage(currentModelResponse.usage),\n              warnings: currentModelResponse.warnings,\n              providerMetadata: currentModelResponse.providerMetadata,\n              request: stepRequest,\n              response: stepResponse,\n            });\n\n            logWarnings({\n              warnings: currentModelResponse.warnings ?? [],\n              provider: stepModelInfo.provider,\n              model: stepModelInfo.modelId,\n            });\n\n            steps.push(currentStepResult);\n\n            await notify({\n              event: currentStepResult,\n              callbacks: [onStepFinish, globalTelemetry.onStepFinish],\n            });\n          } finally {\n            if (stepTimeoutId != null) {\n              clearTimeout(stepTimeoutId);\n            }\n          }\n        } while (\n          // Continue if:\n          // 1. There are client tool calls that have all been executed, OR\n          // 2. There are pending deferred results from provider-executed tools\n          ((clientToolCalls.length > 0 &&\n            clientToolOutputs.length === clientToolCalls.length) ||\n            pendingDeferredToolCalls.size > 0) &&\n          // continue until a stop condition is met:\n          !(await isStopConditionMet({ stopConditions, steps }))\n        );\n\n        // Add response information to the span:\n        span.setAttributes(\n          await selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              'ai.response.finishReason':\n                currentModelResponse.finishReason.unified,\n              'ai.response.text': {\n                output: () => extractTextContent(currentModelResponse.content),\n              },\n              'ai.response.reasoning': {\n                output: () =>\n                  extractReasoningContent(currentModelResponse.content),\n              },\n              'ai.response.toolCalls': {\n                output: () => {\n                  const toolCalls = asToolCalls(currentModelResponse.content);\n                  return toolCalls == null\n                    ? undefined\n                    : JSON.stringify(toolCalls);\n                },\n              },\n              'ai.response.providerMetadata': JSON.stringify(\n                currentModelResponse.providerMetadata,\n              ),\n            },\n          }),\n        );\n\n        const lastStep = steps[steps.length - 1];\n\n        const totalUsage = steps.reduce(\n          (totalUsage, step) => {\n            return addLanguageModelUsage(totalUsage, step.usage);\n          },\n          {\n            inputTokens: undefined,\n            outputTokens: undefined,\n            totalTokens: undefined,\n            reasoningTokens: undefined,\n            cachedInputTokens: undefined,\n          } as LanguageModelUsage,\n        );\n\n        span.setAttributes(\n          await selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              'ai.usage.inputTokens': totalUsage.inputTokens,\n              'ai.usage.inputTokenDetails.noCacheTokens':\n                totalUsage.inputTokenDetails?.noCacheTokens,\n              'ai.usage.inputTokenDetails.cacheReadTokens':\n                totalUsage.inputTokenDetails?.cacheReadTokens,\n              'ai.usage.inputTokenDetails.cacheWriteTokens':\n                totalUsage.inputTokenDetails?.cacheWriteTokens,\n              'ai.usage.outputTokens': totalUsage.outputTokens,\n              'ai.usage.outputTokenDetails.textTokens':\n                totalUsage.outputTokenDetails?.textTokens,\n              'ai.usage.outputTokenDetails.reasoningTokens':\n                totalUsage.outputTokenDetails?.reasoningTokens,\n              'ai.usage.totalTokens': totalUsage.totalTokens,\n              'ai.usage.reasoningTokens':\n                totalUsage.outputTokenDetails?.reasoningTokens,\n              'ai.usage.cachedInputTokens':\n                totalUsage.inputTokenDetails?.cacheReadTokens,\n            },\n          }),\n        );\n\n        await notify({\n          event: {\n            stepNumber: lastStep.stepNumber,\n            model: lastStep.model,\n            functionId: lastStep.functionId,\n            metadata: lastStep.metadata,\n            experimental_context: lastStep.experimental_context,\n            finishReason: lastStep.finishReason,\n            rawFinishReason: lastStep.rawFinishReason,\n            usage: lastStep.usage,\n            content: lastStep.content,\n            text: lastStep.text,\n            reasoningText: lastStep.reasoningText,\n            reasoning: lastStep.reasoning,\n            files: lastStep.files,\n            sources: lastStep.sources,\n            toolCalls: lastStep.toolCalls,\n            staticToolCalls: lastStep.staticToolCalls,\n            dynamicToolCalls: lastStep.dynamicToolCalls,\n            toolResults: lastStep.toolResults,\n            staticToolResults: lastStep.staticToolResults,\n            dynamicToolResults: lastStep.dynamicToolResults,\n            request: lastStep.request,\n            response: lastStep.response,\n            warnings: lastStep.warnings,\n            providerMetadata: lastStep.providerMetadata,\n            steps,\n            totalUsage,\n          },\n          callbacks: [\n            onFinish,\n            globalTelemetry.onFinish as\n              | undefined\n              | GenerateTextOnFinishCallback<TOOLS>,\n          ],\n        });\n\n        // parse output only if the last step was finished with \"stop\":\n        let resolvedOutput;\n        if (lastStep.finishReason === 'stop') {\n          const outputSpecification = output ?? text();\n          resolvedOutput = await outputSpecification.parseCompleteOutput(\n            { text: lastStep.text },\n            {\n              response: lastStep.response,\n              usage: lastStep.usage,\n              finishReason: lastStep.finishReason,\n            },\n          );\n        }\n\n        return new DefaultGenerateTextResult({\n          steps,\n          totalUsage,\n          output: resolvedOutput,\n        });\n      },\n    });\n  } catch (error) {\n    throw wrapGatewayError(error);\n  }\n}\n\nasync function executeTools<TOOLS extends ToolSet>({\n  toolCalls,\n  tools,\n  tracer,\n  telemetry,\n  messages,\n  abortSignal,\n  experimental_context,\n  stepNumber,\n  model,\n  onToolCallStart,\n  onToolCallFinish,\n}: {\n  toolCalls: Array<TypedToolCall<TOOLS>>;\n  tools: TOOLS;\n  tracer: Tracer;\n  telemetry: TelemetrySettings | undefined;\n  messages: ModelMessage[];\n  abortSignal: AbortSignal | undefined;\n  experimental_context: unknown;\n  stepNumber: number;\n  model: { provider: string; modelId: string };\n  onToolCallStart:\n    | GenerateTextOnToolCallStartCallback<TOOLS>\n    | Array<GenerateTextOnToolCallStartCallback<TOOLS> | undefined | null>\n    | undefined;\n  onToolCallFinish:\n    | GenerateTextOnToolCallFinishCallback<TOOLS>\n    | Array<GenerateTextOnToolCallFinishCallback<TOOLS> | undefined | null>\n    | undefined;\n}): Promise<Array<ToolOutput<TOOLS>>> {\n  const toolOutputs = await Promise.all(\n    toolCalls.map(async toolCall =>\n      executeToolCall({\n        toolCall,\n        tools,\n        tracer,\n        telemetry,\n        messages,\n        abortSignal,\n        experimental_context,\n        stepNumber,\n        model,\n        onToolCallStart,\n        onToolCallFinish,\n      }),\n    ),\n  );\n\n  return toolOutputs.filter(\n    (output): output is NonNullable<typeof output> => output != null,\n  );\n}\n\nclass DefaultGenerateTextResult<\n  TOOLS extends ToolSet,\n  OUTPUT extends Output,\n> implements GenerateTextResult<TOOLS, OUTPUT> {\n  readonly steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n  readonly totalUsage: LanguageModelUsage;\n  private readonly _output: InferCompleteOutput<OUTPUT> | undefined;\n\n  constructor(options: {\n    steps: GenerateTextResult<TOOLS, OUTPUT>['steps'];\n    output: InferCompleteOutput<OUTPUT> | undefined;\n    totalUsage: LanguageModelUsage;\n  }) {\n    this.steps = options.steps;\n    this._output = options.output;\n    this.totalUsage = options.totalUsage;\n  }\n\n  private get finalStep() {\n    return this.steps[this.steps.length - 1];\n  }\n\n  get content() {\n    return this.finalStep.content;\n  }\n\n  get text() {\n    return this.finalStep.text;\n  }\n\n  get files() {\n    return this.finalStep.files;\n  }\n\n  get reasoningText() {\n    return this.finalStep.reasoningText;\n  }\n\n  get reasoning() {\n    return this.finalStep.reasoning;\n  }\n\n  get toolCalls() {\n    return this.finalStep.toolCalls;\n  }\n\n  get staticToolCalls() {\n    return this.finalStep.staticToolCalls;\n  }\n\n  get dynamicToolCalls() {\n    return this.finalStep.dynamicToolCalls;\n  }\n\n  get toolResults() {\n    return this.finalStep.toolResults;\n  }\n\n  get staticToolResults() {\n    return this.finalStep.staticToolResults;\n  }\n\n  get dynamicToolResults() {\n    return this.finalStep.dynamicToolResults;\n  }\n\n  get sources() {\n    return this.finalStep.sources;\n  }\n\n  get finishReason() {\n    return this.finalStep.finishReason;\n  }\n\n  get rawFinishReason() {\n    return this.finalStep.rawFinishReason;\n  }\n\n  get warnings() {\n    return this.finalStep.warnings;\n  }\n\n  get providerMetadata() {\n    return this.finalStep.providerMetadata;\n  }\n\n  get response() {\n    return this.finalStep.response;\n  }\n\n  get request() {\n    return this.finalStep.request;\n  }\n\n  get usage() {\n    return this.finalStep.usage;\n  }\n\n  get experimental_output() {\n    return this.output;\n  }\n\n  get output() {\n    if (this._output == null) {\n      throw new NoOutputGeneratedError();\n    }\n\n    return this._output;\n  }\n}\n\nfunction asToolCalls(content: Array<LanguageModelV3Content>) {\n  const parts = content.filter(\n    (part): part is LanguageModelV3ToolCall => part.type === 'tool-call',\n  );\n\n  if (parts.length === 0) {\n    return undefined;\n  }\n\n  return parts.map(toolCall => ({\n    toolCallId: toolCall.toolCallId,\n    toolName: toolCall.toolName,\n    input: toolCall.input,\n  }));\n}\n\nfunction asContent<TOOLS extends ToolSet>({\n  content,\n  toolCalls,\n  toolOutputs,\n  toolApprovalRequests,\n  tools,\n}: {\n  content: Array<LanguageModelV3Content>;\n  toolCalls: Array<TypedToolCall<TOOLS>>;\n  toolOutputs: Array<ToolOutput<TOOLS>>;\n  toolApprovalRequests: Array<ToolApprovalRequestOutput<TOOLS>>;\n  tools: TOOLS | undefined;\n}): Array<ContentPart<TOOLS>> {\n  const contentParts: Array<ContentPart<TOOLS>> = [];\n\n  for (const part of content) {\n    switch (part.type) {\n      case 'text':\n      case 'reasoning':\n      case 'source':\n        contentParts.push(part);\n        break;\n\n      case 'file': {\n        contentParts.push({\n          type: 'file' as const,\n          file: new DefaultGeneratedFile(part),\n          ...(part.providerMetadata != null\n            ? { providerMetadata: part.providerMetadata }\n            : {}),\n        });\n        break;\n      }\n\n      case 'tool-call': {\n        contentParts.push(\n          toolCalls.find(toolCall => toolCall.toolCallId === part.toolCallId)!,\n        );\n        break;\n      }\n\n      case 'tool-result': {\n        const toolCall = toolCalls.find(\n          toolCall => toolCall.toolCallId === part.toolCallId,\n        );\n\n        // Handle deferred results for provider-executed tools (e.g., programmatic tool calling).\n        // When a server tool (like code_execution) triggers a client tool, the server tool's\n        // result may be deferred to a later turn. In this case, there's no matching tool-call\n        // in the current response.\n        if (toolCall == null) {\n          const tool = tools?.[part.toolName];\n          const supportsDeferredResults =\n            tool?.type === 'provider' && tool.supportsDeferredResults;\n\n          if (!supportsDeferredResults) {\n            throw new Error(`Tool call ${part.toolCallId} not found.`);\n          }\n\n          // Create tool result without tool call input (deferred result)\n          if (part.isError) {\n            contentParts.push({\n              type: 'tool-error' as const,\n              toolCallId: part.toolCallId,\n              toolName: part.toolName as keyof TOOLS & string,\n              input: undefined,\n              error: part.result,\n              providerExecuted: true,\n              dynamic: part.dynamic,\n              ...(part.providerMetadata != null\n                ? { providerMetadata: part.providerMetadata }\n                : {}),\n            } as TypedToolError<TOOLS>);\n          } else {\n            contentParts.push({\n              type: 'tool-result' as const,\n              toolCallId: part.toolCallId,\n              toolName: part.toolName as keyof TOOLS & string,\n              input: undefined,\n              output: part.result,\n              providerExecuted: true,\n              dynamic: part.dynamic,\n              ...(part.providerMetadata != null\n                ? { providerMetadata: part.providerMetadata }\n                : {}),\n            } as TypedToolResult<TOOLS>);\n          }\n          break;\n        }\n\n        if (part.isError) {\n          contentParts.push({\n            type: 'tool-error' as const,\n            toolCallId: part.toolCallId,\n            toolName: part.toolName as keyof TOOLS & string,\n            input: toolCall.input,\n            error: part.result,\n            providerExecuted: true,\n            dynamic: toolCall.dynamic,\n            ...(part.providerMetadata != null\n              ? { providerMetadata: part.providerMetadata }\n              : {}),\n          } as TypedToolError<TOOLS>);\n        } else {\n          contentParts.push({\n            type: 'tool-result' as const,\n            toolCallId: part.toolCallId,\n            toolName: part.toolName as keyof TOOLS & string,\n            input: toolCall.input,\n            output: part.result,\n            providerExecuted: true,\n            dynamic: toolCall.dynamic,\n            ...(part.providerMetadata != null\n              ? { providerMetadata: part.providerMetadata }\n              : {}),\n          } as TypedToolResult<TOOLS>);\n        }\n        break;\n      }\n\n      case 'tool-approval-request': {\n        const toolCall = toolCalls.find(\n          toolCall => toolCall.toolCallId === part.toolCallId,\n        );\n\n        if (toolCall == null) {\n          throw new ToolCallNotFoundForApprovalError({\n            toolCallId: part.toolCallId,\n            approvalId: part.approvalId,\n          });\n        }\n\n        contentParts.push({\n          type: 'tool-approval-request' as const,\n          approvalId: part.approvalId,\n          toolCall,\n        });\n        break;\n      }\n    }\n  }\n\n  return [...contentParts, ...toolOutputs, ...toolApprovalRequests];\n}\n","import {\n  getErrorMessage,\n  LanguageModelV3,\n  SharedV3Warning,\n  UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  DelayedPromise,\n  IdGenerator,\n  isAbortError,\n  ProviderOptions,\n  ToolContent,\n} from '@ai-sdk/provider-utils';\nimport { Span } from '@opentelemetry/api';\nimport { ServerResponse } from 'node:http';\nimport { NoOutputGeneratedError } from '../error';\nimport { notify } from '../util/notify';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport {\n  CallSettings,\n  getChunkTimeoutMs,\n  getStepTimeoutMs,\n  getTotalTimeoutMs,\n  TimeoutConfiguration,\n} from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { createToolModelOutput } from '../prompt/create-tool-model-output';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { prepareToolsAndToolChoice } from '../prompt/prepare-tools-and-tool-choice';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { getGlobalTelemetryIntegration } from '../telemetry/get-global-telemetry-integration';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { createTextStreamResponse } from '../text-stream/create-text-stream-response';\nimport { pipeTextStreamToResponse } from '../text-stream/pipe-text-stream-to-response';\nimport { LanguageModelRequestMetadata } from '../types';\nimport {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n  ToolChoice,\n} from '../types/language-model';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport {\n  addLanguageModelUsage,\n  createNullLanguageModelUsage,\n  LanguageModelUsage,\n} from '../types/usage';\nimport { UIMessage } from '../ui';\nimport { createUIMessageStreamResponse } from '../ui-message-stream/create-ui-message-stream-response';\nimport { getResponseUIMessageId } from '../ui-message-stream/get-response-ui-message-id';\nimport { handleUIMessageStreamFinish } from '../ui-message-stream/handle-ui-message-stream-finish';\nimport { pipeUIMessageStreamToResponse } from '../ui-message-stream/pipe-ui-message-stream-to-response';\nimport {\n  InferUIMessageChunk,\n  UIMessageChunk,\n} from '../ui-message-stream/ui-message-chunks';\nimport { UIMessageStreamResponseInit } from '../ui-message-stream/ui-message-stream-response-init';\nimport { InferUIMessageData, InferUIMessageMetadata } from '../ui/ui-messages';\nimport { asArray } from '../util/as-array';\nimport {\n  AsyncIterableStream,\n  createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { consumeStream } from '../util/consume-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { mergeAbortSignals } from '../util/merge-abort-signals';\nimport { mergeObjects } from '../util/merge-objects';\nimport { now as originalNow } from '../util/now';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { collectToolApprovals } from './collect-tool-approvals';\nimport type {\n  OnFinishEvent,\n  OnStartEvent,\n  OnStepFinishEvent,\n  OnStepStartEvent,\n  OnToolCallFinishEvent,\n  OnToolCallStartEvent,\n} from './callback-events';\nimport { ContentPart } from './content-part';\nimport { executeToolCall } from './execute-tool-call';\nimport { Output, text } from './output';\nimport {\n  InferCompleteOutput,\n  InferElementOutput,\n  InferPartialOutput,\n} from './output-utils';\nimport { PrepareStepFunction } from './prepare-step';\nimport { ResponseMessage } from './response-message';\nimport {\n  runToolsTransformation,\n  SingleRequestTextStreamPart,\n} from './run-tools-transformation';\nimport { DefaultStepResult, StepResult } from './step-result';\nimport {\n  isStopConditionMet,\n  stepCountIs,\n  StopCondition,\n} from './stop-condition';\nimport {\n  ConsumeStreamOptions,\n  StreamTextResult,\n  TextStreamPart,\n  UIMessageStreamOptions,\n} from './stream-text-result';\nimport { toResponseMessages } from './to-response-messages';\nimport { TypedToolCall } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair-function';\nimport { ToolOutput } from './tool-output';\nimport { StaticToolOutputDenied } from './tool-output-denied';\nimport { ToolSet } from './tool-set';\n\nconst originalGenerateId = createIdGenerator({\n  prefix: 'aitxt',\n  size: 24,\n});\n\n/**\n * A transformation that is applied to the stream.\n *\n * @param stopStream - A function that stops the source stream.\n * @param tools - The tools that are accessible to and can be called by the model. The model needs to support calling tools.\n */\nexport type StreamTextTransform<TOOLS extends ToolSet> = (options: {\n  tools: TOOLS; // for type inference\n  stopStream: () => void;\n}) => TransformStream<TextStreamPart<TOOLS>, TextStreamPart<TOOLS>>;\n\n/**\n * Callback that is set using the `onError` option.\n *\n * @param event - The event that is passed to the callback.\n */\nexport type StreamTextOnErrorCallback = (event: {\n  error: unknown;\n}) => PromiseLike<void> | void;\n\n/**\n * Callback that is set using the `onStepFinish` option.\n *\n * @param stepResult - The result of the step.\n */\nexport type StreamTextOnStepFinishCallback<TOOLS extends ToolSet> = (\n  event: OnStepFinishEvent<TOOLS>,\n) => PromiseLike<void> | void;\n\n/**\n * Callback that is set using the `onChunk` option.\n *\n * @param event - The event that is passed to the callback.\n */\nexport type StreamTextOnChunkCallback<TOOLS extends ToolSet> = (event: {\n  chunk: Extract<\n    TextStreamPart<TOOLS>,\n    {\n      type:\n        | 'text-delta'\n        | 'reasoning-delta'\n        | 'source'\n        | 'tool-call'\n        | 'tool-input-start'\n        | 'tool-input-delta'\n        | 'tool-result'\n        | 'raw';\n    }\n  >;\n}) => PromiseLike<void> | void;\n\n/**\n * Callback that is set using the `onFinish` option.\n *\n * @param event - The event that is passed to the callback.\n */\nexport type StreamTextOnFinishCallback<TOOLS extends ToolSet> = (\n  event: OnFinishEvent<TOOLS>,\n) => PromiseLike<void> | void;\n\n/**\n * Callback that is set using the `onAbort` option.\n *\n * @param event - The event that is passed to the callback.\n */\nexport type StreamTextOnAbortCallback<TOOLS extends ToolSet> = (event: {\n  /**\n   * Details for all previously finished steps.\n   */\n  readonly steps: StepResult<TOOLS>[];\n}) => PromiseLike<void> | void;\n\n/**\n * Include settings for streamText (requestBody only).\n */\ntype StreamTextIncludeSettings = { requestBody?: boolean };\n\n/**\n * Callback that is set using the `experimental_onStart` option.\n *\n * Called when the streamText operation begins, before any LLM calls.\n * Use this callback for logging, analytics, or initializing state at the\n * start of a generation.\n *\n * @param event - The event object containing generation configuration.\n */\nexport type StreamTextOnStartCallback<\n  TOOLS extends ToolSet = ToolSet,\n  OUTPUT extends Output = Output,\n> = (\n  event: OnStartEvent<TOOLS, OUTPUT, StreamTextIncludeSettings>,\n) => PromiseLike<void> | void;\n\n/**\n * Callback that is set using the `experimental_onStepStart` option.\n *\n * Called when a step (LLM call) begins, before the provider is called.\n * Each step represents a single LLM invocation. Multiple steps occur when\n * using tool calls (the model may be called multiple times in a loop).\n *\n * @param event - The event object containing step configuration.\n */\nexport type StreamTextOnStepStartCallback<\n  TOOLS extends ToolSet = ToolSet,\n  OUTPUT extends Output = Output,\n> = (\n  event: OnStepStartEvent<TOOLS, OUTPUT, StreamTextIncludeSettings>,\n) => PromiseLike<void> | void;\n\nexport type StreamTextOnToolCallStartCallback<TOOLS extends ToolSet = ToolSet> =\n  (event: OnToolCallStartEvent<TOOLS>) => PromiseLike<void> | void;\n\nexport type StreamTextOnToolCallFinishCallback<\n  TOOLS extends ToolSet = ToolSet,\n> = (event: OnToolCallFinishEvent<TOOLS>) => PromiseLike<void> | void;\n\n/**\n * Generate a text and call tools for a given prompt using a language model.\n *\n * This function streams the output. If you do not want to stream the output, use `generateText` instead.\n *\n * @param model - The language model to use.\n * @param tools - Tools that are accessible to and can be called by the model. The model needs to support calling tools.\n *\n * @param system - A system message that will be part of the prompt.\n * @param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n * @param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n *\n * @param maxOutputTokens - Maximum number of tokens to generate.\n * @param temperature - Temperature setting.\n * The value is passed through to the provider. The range depends on the provider and model.\n * It is recommended to set either `temperature` or `topP`, but not both.\n * @param topP - Nucleus sampling.\n * The value is passed through to the provider. The range depends on the provider and model.\n * It is recommended to set either `temperature` or `topP`, but not both.\n * @param topK - Only sample from the top K options for each subsequent token.\n * Used to remove \"long tail\" low probability responses.\n * Recommended for advanced use cases only. You usually only need to use temperature.\n * @param presencePenalty - Presence penalty setting.\n * It affects the likelihood of the model to repeat information that is already in the prompt.\n * The value is passed through to the provider. The range depends on the provider and model.\n * @param frequencyPenalty - Frequency penalty setting.\n * It affects the likelihood of the model to repeatedly use the same words or phrases.\n * The value is passed through to the provider. The range depends on the provider and model.\n * @param stopSequences - Stop sequences.\n * If set, the model will stop generating text when one of the stop sequences is generated.\n * @param seed - The seed (integer) to use for random sampling.\n * If set and supported by the model, calls will generate deterministic results.\n *\n * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n * @param abortSignal - An optional abort signal that can be used to cancel the call.\n * @param timeout - An optional timeout in milliseconds. The call will be aborted if it takes longer than the specified timeout.\n * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n *\n * @param onChunk - Callback that is called for each chunk of the stream. The stream processing will pause until the callback promise is resolved.\n * @param onError - Callback that is called when an error occurs during streaming. You can use it to log errors.\n * @param onStepFinish - Callback that is called when each step (LLM call) is finished, including intermediate steps.\n * @param onFinish - Callback that is called when all steps are finished and the response is complete.\n *\n * @returns\n * A result object for accessing different stream types and additional information.\n */\nexport function streamText<\n  TOOLS extends ToolSet,\n  OUTPUT extends Output = Output<string, string, never>,\n>({\n  model,\n  tools,\n  toolChoice,\n  system,\n  prompt,\n  messages,\n  maxRetries,\n  abortSignal,\n  timeout,\n  headers,\n  stopWhen = stepCountIs(1),\n  experimental_output,\n  output = experimental_output,\n  experimental_telemetry: telemetry,\n  prepareStep,\n  providerOptions,\n  experimental_activeTools,\n  activeTools = experimental_activeTools,\n  experimental_repairToolCall: repairToolCall,\n  experimental_transform: transform,\n  experimental_download: download,\n  includeRawChunks = false,\n  onChunk,\n  onError = ({ error }) => {\n    console.error(error);\n  },\n  onFinish,\n  onAbort,\n  onStepFinish,\n  experimental_onStart: onStart,\n  experimental_onStepStart: onStepStart,\n  experimental_onToolCallStart: onToolCallStart,\n  experimental_onToolCallFinish: onToolCallFinish,\n  experimental_context,\n  experimental_include: include,\n  _internal: { now = originalNow, generateId = originalGenerateId } = {},\n  ...settings\n}: CallSettings &\n  Prompt & {\n    /**\n     * The language model to use.\n     */\n    model: LanguageModel;\n\n    /**\n     * The tools that the model can call. The model needs to support calling tools.\n     */\n    tools?: TOOLS;\n\n    /**\n     * The tool choice strategy. Default: 'auto'.\n     */\n    toolChoice?: ToolChoice<TOOLS>;\n\n    /**\n     * Condition for stopping the generation when there are tool results in the last step.\n     * When the condition is an array, any of the conditions can be met to stop the generation.\n     *\n     * @default stepCountIs(1)\n     */\n    stopWhen?:\n      | StopCondition<NoInfer<TOOLS>>\n      | Array<StopCondition<NoInfer<TOOLS>>>;\n\n    /**\n     * Optional telemetry configuration (experimental).\n     */\n    experimental_telemetry?: TelemetrySettings;\n\n    /**\n     * Additional provider-specific options. They are passed through\n     * to the provider from the AI SDK and enable provider-specific\n     * functionality that can be fully encapsulated in the provider.\n     */\n    providerOptions?: ProviderOptions;\n\n    /**\n     * @deprecated Use `activeTools` instead.\n     */\n    experimental_activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n    /**\n     * Limits the tools that are available for the model to call without\n     * changing the tool call and result types in the result.\n     */\n    activeTools?: Array<keyof NoInfer<TOOLS>>;\n\n    /**\n     * Optional specification for parsing structured outputs from the LLM response.\n     */\n    output?: OUTPUT;\n\n    /**\n     * Optional specification for parsing structured outputs from the LLM response.\n     *\n     * @deprecated Use `output` instead.\n     */\n    experimental_output?: OUTPUT;\n\n    /**\n     * Optional function that you can use to provide different settings for a step.\n     *\n     * @param options - The options for the step.\n     * @param options.steps - The steps that have been executed so far.\n     * @param options.stepNumber - The number of the step that is being executed.\n     * @param options.model - The model that is being used.\n     *\n     * @returns An object that contains the settings for the step.\n     * If you return undefined (or for undefined settings), the settings from the outer level will be used.\n     */\n    prepareStep?: PrepareStepFunction<NoInfer<TOOLS>>;\n\n    /**\n     * A function that attempts to repair a tool call that failed to parse.\n     */\n    experimental_repairToolCall?: ToolCallRepairFunction<TOOLS>;\n\n    /**\n     * Optional stream transformations.\n     * They are applied in the order they are provided.\n     * The stream transformations must maintain the stream structure for streamText to work correctly.\n     */\n    experimental_transform?:\n      | StreamTextTransform<TOOLS>\n      | Array<StreamTextTransform<TOOLS>>;\n\n    /**\n     * Custom download function to use for URLs.\n     *\n     * By default, files are downloaded if the model does not support the URL for the given media type.\n     */\n    experimental_download?: DownloadFunction | undefined;\n\n    /**\n     * Whether to include raw chunks from the provider in the stream.\n     * When enabled, you will receive raw chunks with type 'raw' that contain the unprocessed data from the provider.\n     * This allows access to cutting-edge provider features not yet wrapped by the AI SDK.\n     * Defaults to false.\n     */\n    includeRawChunks?: boolean;\n\n    /**\n     * Callback that is called for each chunk of the stream.\n     * The stream processing will pause until the callback promise is resolved.\n     */\n    onChunk?: StreamTextOnChunkCallback<TOOLS>;\n\n    /**\n     * Callback that is invoked when an error occurs during streaming.\n     * You can use it to log errors.\n     * The stream processing will pause until the callback promise is resolved.\n     */\n    onError?: StreamTextOnErrorCallback;\n\n    /**\n     * Callback that is called when the LLM response and all request tool executions\n     * (for tools that have an `execute` function) are finished.\n     *\n     * The usage is the combined usage of all steps.\n     */\n    onFinish?: StreamTextOnFinishCallback<TOOLS>;\n\n    onAbort?: StreamTextOnAbortCallback<TOOLS>;\n\n    /**\n     * Callback that is called when each step (LLM call) is finished, including intermediate steps.\n     */\n    onStepFinish?: StreamTextOnStepFinishCallback<TOOLS>;\n\n    /**\n     * Callback that is called when the streamText operation begins,\n     * before any LLM calls are made.\n     */\n    experimental_onStart?: StreamTextOnStartCallback<NoInfer<TOOLS>, OUTPUT>;\n\n    /**\n     * Callback that is called when a step (LLM call) begins,\n     * before the provider is called.\n     */\n    experimental_onStepStart?: StreamTextOnStepStartCallback<\n      NoInfer<TOOLS>,\n      OUTPUT\n    >;\n\n    /**\n     * Callback that is called right before a tool's execute function runs.\n     */\n    experimental_onToolCallStart?: StreamTextOnToolCallStartCallback<\n      NoInfer<TOOLS>\n    >;\n\n    /**\n     * Callback that is called right after a tool's execute function completes (or errors).\n     */\n    experimental_onToolCallFinish?: StreamTextOnToolCallFinishCallback<\n      NoInfer<TOOLS>\n    >;\n\n    /**\n     * Context that is passed into tool execution.\n     *\n     * Experimental (can break in patch releases).\n     *\n     * @default undefined\n     */\n    experimental_context?: unknown;\n\n    /**\n     * Settings for controlling what data is included in step results.\n     * Disabling inclusion can help reduce memory usage when processing\n     * large payloads like images.\n     *\n     * By default, all data is included for backwards compatibility.\n     */\n    experimental_include?: {\n      /**\n       * Whether to retain the request body in step results.\n       * The request body can be large when sending images or files.\n       * @default true\n       */\n      requestBody?: boolean;\n    };\n\n    /**\n     * Internal. For test use only. May change without notice.\n     */\n    _internal?: {\n      now?: () => number;\n      generateId?: IdGenerator;\n    };\n  }): StreamTextResult<TOOLS, OUTPUT> {\n  const totalTimeoutMs = getTotalTimeoutMs(timeout);\n  const stepTimeoutMs = getStepTimeoutMs(timeout);\n  const chunkTimeoutMs = getChunkTimeoutMs(timeout);\n  const stepAbortController =\n    stepTimeoutMs != null ? new AbortController() : undefined;\n  const chunkAbortController =\n    chunkTimeoutMs != null ? new AbortController() : undefined;\n  return new DefaultStreamTextResult<TOOLS, OUTPUT>({\n    model: resolveLanguageModel(model),\n    telemetry,\n    headers,\n    settings,\n    maxRetries,\n    abortSignal: mergeAbortSignals(\n      abortSignal,\n      totalTimeoutMs != null ? AbortSignal.timeout(totalTimeoutMs) : undefined,\n      stepAbortController?.signal,\n      chunkAbortController?.signal,\n    ),\n    stepTimeoutMs,\n    stepAbortController,\n    chunkTimeoutMs,\n    chunkAbortController,\n    system,\n    prompt,\n    messages,\n    tools,\n    toolChoice,\n    transforms: asArray(transform),\n    activeTools,\n    repairToolCall,\n    stopConditions: asArray(stopWhen),\n    output,\n    providerOptions,\n    prepareStep,\n    includeRawChunks,\n    timeout,\n    stopWhen,\n    originalAbortSignal: abortSignal,\n    onChunk,\n    onError,\n    onFinish,\n    onAbort,\n    onStepFinish,\n    onStart,\n    onStepStart,\n    onToolCallStart,\n    onToolCallFinish,\n    now,\n    generateId,\n    experimental_context,\n    download,\n    include,\n  });\n}\n\nexport type EnrichedStreamPart<TOOLS extends ToolSet, PARTIAL_OUTPUT> = {\n  part: TextStreamPart<TOOLS>;\n  partialOutput: PARTIAL_OUTPUT | undefined;\n};\n\nfunction createOutputTransformStream<\n  TOOLS extends ToolSet,\n  OUTPUT extends Output,\n>(\n  output: OUTPUT,\n): TransformStream<\n  TextStreamPart<TOOLS>,\n  EnrichedStreamPart<TOOLS, InferPartialOutput<OUTPUT>>\n> {\n  let firstTextChunkId: string | undefined = undefined;\n  let text = '';\n  let textChunk = '';\n  let textProviderMetadata: ProviderMetadata | undefined = undefined;\n  let lastPublishedValue = '';\n\n  function publishTextChunk({\n    controller,\n    partialOutput = undefined,\n  }: {\n    controller: TransformStreamDefaultController<\n      EnrichedStreamPart<TOOLS, InferPartialOutput<OUTPUT>>\n    >;\n    partialOutput?: InferPartialOutput<OUTPUT>;\n  }) {\n    controller.enqueue({\n      part: {\n        type: 'text-delta',\n        id: firstTextChunkId!,\n        text: textChunk,\n        providerMetadata: textProviderMetadata,\n      },\n      partialOutput,\n    });\n    textChunk = '';\n  }\n\n  return new TransformStream<\n    TextStreamPart<TOOLS>,\n    EnrichedStreamPart<TOOLS, InferPartialOutput<OUTPUT>>\n  >({\n    async transform(chunk, controller) {\n      // ensure that we publish the last text chunk before the step finish:\n      if (chunk.type === 'finish-step' && textChunk.length > 0) {\n        publishTextChunk({ controller });\n      }\n\n      if (\n        chunk.type !== 'text-delta' &&\n        chunk.type !== 'text-start' &&\n        chunk.type !== 'text-end'\n      ) {\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n        return;\n      }\n\n      // we have to pick a text chunk which contains the json text\n      // since we are streaming, we have to pick the first text chunk\n      if (firstTextChunkId == null) {\n        firstTextChunkId = chunk.id;\n      } else if (chunk.id !== firstTextChunkId) {\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n        return;\n      }\n\n      if (chunk.type === 'text-start') {\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n        return;\n      }\n\n      if (chunk.type === 'text-end') {\n        if (textChunk.length > 0) {\n          publishTextChunk({ controller });\n        }\n        controller.enqueue({ part: chunk, partialOutput: undefined });\n        return;\n      }\n\n      text += chunk.text;\n      textChunk += chunk.text;\n      textProviderMetadata = chunk.providerMetadata ?? textProviderMetadata;\n\n      // only publish if partial json can be parsed:\n      const result = await output.parsePartialOutput({ text });\n\n      // null should be allowed (valid JSON value) but undefined should not:\n      if (result !== undefined) {\n        // only send new value if it has changed:\n        // For string partials (text output), compare directly to avoid unnecessary JSON.stringify overhead\n        const currentValue =\n          typeof result.partial === 'string'\n            ? result.partial\n            : JSON.stringify(result.partial);\n        if (currentValue !== lastPublishedValue) {\n          publishTextChunk({ controller, partialOutput: result.partial });\n          lastPublishedValue = currentValue;\n        }\n      }\n    },\n  });\n}\n\nclass DefaultStreamTextResult<\n  TOOLS extends ToolSet,\n  OUTPUT extends Output,\n> implements StreamTextResult<TOOLS, OUTPUT> {\n  private readonly _totalUsage = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, OUTPUT>['usage']>\n  >();\n  private readonly _finishReason = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, OUTPUT>['finishReason']>\n  >();\n  private readonly _rawFinishReason = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, OUTPUT>['rawFinishReason']>\n  >();\n  private readonly _steps = new DelayedPromise<\n    Awaited<StreamTextResult<TOOLS, OUTPUT>['steps']>\n  >();\n\n  private readonly addStream: (\n    stream: ReadableStream<TextStreamPart<TOOLS>>,\n  ) => void;\n\n  private readonly closeStream: () => void;\n\n  private baseStream: ReadableStream<\n    EnrichedStreamPart<TOOLS, InferPartialOutput<OUTPUT>>\n  >;\n\n  private outputSpecification: OUTPUT | undefined;\n\n  private includeRawChunks: boolean;\n\n  private tools: TOOLS | undefined;\n\n  constructor({\n    model,\n    telemetry,\n    headers,\n    settings,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    stepTimeoutMs,\n    stepAbortController,\n    chunkTimeoutMs,\n    chunkAbortController,\n    system,\n    prompt,\n    messages,\n    tools,\n    toolChoice,\n    transforms,\n    activeTools,\n    repairToolCall,\n    stopConditions,\n    output,\n    providerOptions,\n    prepareStep,\n    includeRawChunks,\n    now,\n    generateId,\n    timeout,\n    stopWhen,\n    originalAbortSignal,\n    onChunk,\n    onError,\n    onFinish,\n    onAbort,\n    onStepFinish,\n    onStart,\n    onStepStart,\n    onToolCallStart,\n    onToolCallFinish,\n    experimental_context,\n    download,\n    include,\n  }: {\n    model: LanguageModelV3;\n    telemetry: TelemetrySettings | undefined;\n    headers: Record<string, string | undefined> | undefined;\n    settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n    maxRetries: number | undefined;\n    abortSignal: AbortSignal | undefined;\n    stepTimeoutMs: number | undefined;\n    stepAbortController: AbortController | undefined;\n    chunkTimeoutMs: number | undefined;\n    chunkAbortController: AbortController | undefined;\n    system: Prompt['system'];\n    prompt: Prompt['prompt'];\n    messages: Prompt['messages'];\n    tools: TOOLS | undefined;\n    toolChoice: ToolChoice<TOOLS> | undefined;\n    transforms: Array<StreamTextTransform<TOOLS>>;\n    activeTools: Array<keyof TOOLS> | undefined;\n    repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;\n    stopConditions: Array<StopCondition<NoInfer<TOOLS>>>;\n    output: OUTPUT | undefined;\n    providerOptions: ProviderOptions | undefined;\n    prepareStep: PrepareStepFunction<NoInfer<TOOLS>> | undefined;\n    includeRawChunks: boolean;\n    now: () => number;\n    generateId: () => string;\n    timeout: TimeoutConfiguration | undefined;\n    stopWhen:\n      | StopCondition<NoInfer<TOOLS>>\n      | Array<StopCondition<NoInfer<TOOLS>>>\n      | undefined;\n    originalAbortSignal: AbortSignal | undefined;\n    experimental_context: unknown;\n    download: DownloadFunction | undefined;\n    include: { requestBody?: boolean } | undefined;\n\n    // callbacks:\n    onChunk: undefined | StreamTextOnChunkCallback<TOOLS>;\n    onError: StreamTextOnErrorCallback;\n    onFinish: undefined | StreamTextOnFinishCallback<TOOLS>;\n    onAbort: undefined | StreamTextOnAbortCallback<TOOLS>;\n    onStepFinish: undefined | StreamTextOnStepFinishCallback<TOOLS>;\n    onStart: undefined | StreamTextOnStartCallback<TOOLS, OUTPUT>;\n    onStepStart: undefined | StreamTextOnStepStartCallback<TOOLS, OUTPUT>;\n    onToolCallStart: undefined | StreamTextOnToolCallStartCallback<TOOLS>;\n    onToolCallFinish: undefined | StreamTextOnToolCallFinishCallback<TOOLS>;\n  }) {\n    this.outputSpecification = output;\n    this.includeRawChunks = includeRawChunks;\n    this.tools = tools;\n\n    const createGlobalTelemetry = getGlobalTelemetryIntegration<\n      TOOLS,\n      OUTPUT\n    >();\n    const globalTelemetry = createGlobalTelemetry(telemetry?.integrations);\n\n    // promise to ensure that the step has been fully processed by the event processor\n    // before a new step is started. This is required because the continuation condition\n    // needs the updated steps to determine if another step is needed.\n    let stepFinish!: DelayedPromise<void>;\n\n    let recordedContent: Array<ContentPart<TOOLS>> = [];\n    const recordedResponseMessages: Array<ResponseMessage> = [];\n    let recordedFinishReason: FinishReason | undefined = undefined;\n    let recordedRawFinishReason: string | undefined = undefined;\n    let recordedTotalUsage: LanguageModelUsage | undefined = undefined;\n    let recordedRequest: LanguageModelRequestMetadata = {};\n    let recordedWarnings: Array<CallWarning> = [];\n    const recordedSteps: StepResult<TOOLS>[] = [];\n\n    // Track provider-executed tool calls that support deferred results\n    // (e.g., code_execution in programmatic tool calling scenarios).\n    // These tools may not return their results in the same turn as their call.\n    const pendingDeferredToolCalls = new Map<string, { toolName: string }>();\n\n    let rootSpan!: Span;\n\n    let activeTextContent: Record<\n      string,\n      {\n        type: 'text';\n        text: string;\n        providerMetadata: ProviderMetadata | undefined;\n      }\n    > = {};\n\n    let activeReasoningContent: Record<\n      string,\n      {\n        type: 'reasoning';\n        text: string;\n        providerMetadata: ProviderMetadata | undefined;\n      }\n    > = {};\n\n    const eventProcessor = new TransformStream<\n      EnrichedStreamPart<TOOLS, InferPartialOutput<OUTPUT>>,\n      EnrichedStreamPart<TOOLS, InferPartialOutput<OUTPUT>>\n    >({\n      async transform(chunk, controller) {\n        controller.enqueue(chunk); // forward the chunk to the next stream\n\n        const { part } = chunk;\n\n        if (\n          part.type === 'text-delta' ||\n          part.type === 'reasoning-delta' ||\n          part.type === 'source' ||\n          part.type === 'tool-call' ||\n          part.type === 'tool-result' ||\n          part.type === 'tool-input-start' ||\n          part.type === 'tool-input-delta' ||\n          part.type === 'raw'\n        ) {\n          await onChunk?.({ chunk: part });\n        }\n\n        if (part.type === 'error') {\n          await onError({ error: wrapGatewayError(part.error) });\n        }\n\n        if (part.type === 'text-start') {\n          activeTextContent[part.id] = {\n            type: 'text',\n            text: '',\n            providerMetadata: part.providerMetadata,\n          };\n\n          recordedContent.push(activeTextContent[part.id]);\n        }\n\n        if (part.type === 'text-delta') {\n          const activeText = activeTextContent[part.id];\n\n          if (activeText == null) {\n            controller.enqueue({\n              part: {\n                type: 'error',\n                error: `text part ${part.id} not found`,\n              },\n              partialOutput: undefined,\n            });\n            return;\n          }\n\n          activeText.text += part.text;\n          activeText.providerMetadata =\n            part.providerMetadata ?? activeText.providerMetadata;\n        }\n\n        if (part.type === 'text-end') {\n          const activeText = activeTextContent[part.id];\n\n          if (activeText == null) {\n            controller.enqueue({\n              part: {\n                type: 'error',\n                error: `text part ${part.id} not found`,\n              },\n              partialOutput: undefined,\n            });\n            return;\n          }\n\n          activeText.providerMetadata =\n            part.providerMetadata ?? activeText.providerMetadata;\n\n          delete activeTextContent[part.id];\n        }\n\n        if (part.type === 'reasoning-start') {\n          activeReasoningContent[part.id] = {\n            type: 'reasoning',\n            text: '',\n            providerMetadata: part.providerMetadata,\n          };\n\n          recordedContent.push(activeReasoningContent[part.id]);\n        }\n\n        if (part.type === 'reasoning-delta') {\n          const activeReasoning = activeReasoningContent[part.id];\n\n          if (activeReasoning == null) {\n            controller.enqueue({\n              part: {\n                type: 'error',\n                error: `reasoning part ${part.id} not found`,\n              },\n              partialOutput: undefined,\n            });\n            return;\n          }\n\n          activeReasoning.text += part.text;\n          activeReasoning.providerMetadata =\n            part.providerMetadata ?? activeReasoning.providerMetadata;\n        }\n\n        if (part.type === 'reasoning-end') {\n          const activeReasoning = activeReasoningContent[part.id];\n\n          if (activeReasoning == null) {\n            controller.enqueue({\n              part: {\n                type: 'error',\n                error: `reasoning part ${part.id} not found`,\n              },\n              partialOutput: undefined,\n            });\n            return;\n          }\n\n          activeReasoning.providerMetadata =\n            part.providerMetadata ?? activeReasoning.providerMetadata;\n\n          delete activeReasoningContent[part.id];\n        }\n\n        if (part.type === 'file') {\n          recordedContent.push({\n            type: 'file',\n            file: part.file,\n            ...(part.providerMetadata != null\n              ? { providerMetadata: part.providerMetadata }\n              : {}),\n          });\n        }\n\n        if (part.type === 'source') {\n          recordedContent.push(part);\n        }\n\n        if (part.type === 'tool-call') {\n          recordedContent.push(part);\n        }\n\n        if (part.type === 'tool-result' && !part.preliminary) {\n          recordedContent.push(part);\n        }\n\n        if (part.type === 'tool-approval-request') {\n          recordedContent.push(part);\n        }\n\n        if (part.type === 'tool-error') {\n          recordedContent.push(part);\n        }\n\n        if (part.type === 'start-step') {\n          // reset the recorded data when a new step starts:\n          recordedContent = [];\n          activeReasoningContent = {};\n          activeTextContent = {};\n\n          recordedRequest = part.request;\n          recordedWarnings = part.warnings;\n        }\n\n        if (part.type === 'finish-step') {\n          const stepMessages = await toResponseMessages({\n            content: recordedContent,\n            tools,\n          });\n\n          // Add step information (after response messages are updated):\n          const currentStepResult: StepResult<TOOLS> = new DefaultStepResult({\n            stepNumber: recordedSteps.length,\n            model: modelInfo,\n            ...callbackTelemetryProps,\n            experimental_context,\n            content: recordedContent,\n            finishReason: part.finishReason,\n            rawFinishReason: part.rawFinishReason,\n            usage: part.usage,\n            warnings: recordedWarnings,\n            request: recordedRequest,\n            response: {\n              ...part.response,\n              messages: [...recordedResponseMessages, ...stepMessages],\n            },\n            providerMetadata: part.providerMetadata,\n          });\n\n          await notify({\n            event: currentStepResult,\n            callbacks: [onStepFinish, globalTelemetry.onStepFinish],\n          });\n\n          logWarnings({\n            warnings: recordedWarnings,\n            provider: modelInfo.provider,\n            model: modelInfo.modelId,\n          });\n\n          recordedSteps.push(currentStepResult);\n\n          recordedResponseMessages.push(...stepMessages);\n\n          // resolve the promise to signal that the step has been fully processed\n          // by the event processor:\n          stepFinish.resolve();\n        }\n\n        if (part.type === 'finish') {\n          recordedTotalUsage = part.totalUsage;\n          recordedFinishReason = part.finishReason;\n          recordedRawFinishReason = part.rawFinishReason;\n        }\n      },\n\n      async flush(controller) {\n        try {\n          if (recordedSteps.length === 0) {\n            const error = abortSignal?.aborted\n              ? abortSignal.reason\n              : new NoOutputGeneratedError({\n                  message: 'No output generated. Check the stream for errors.',\n                });\n\n            self._finishReason.reject(error);\n            self._rawFinishReason.reject(error);\n            self._totalUsage.reject(error);\n            self._steps.reject(error);\n\n            return; // no steps recorded (e.g. in error scenario)\n          }\n\n          // derived:\n          const finishReason = recordedFinishReason ?? 'other';\n          const totalUsage =\n            recordedTotalUsage ?? createNullLanguageModelUsage();\n\n          // from finish:\n          self._finishReason.resolve(finishReason);\n          self._rawFinishReason.resolve(recordedRawFinishReason);\n          self._totalUsage.resolve(totalUsage);\n\n          // aggregate results:\n          self._steps.resolve(recordedSteps);\n\n          // call onFinish callback:\n          const finalStep = recordedSteps[recordedSteps.length - 1];\n\n          await notify({\n            event: {\n              stepNumber: finalStep.stepNumber,\n              model: finalStep.model,\n              functionId: finalStep.functionId,\n              metadata: finalStep.metadata,\n              experimental_context: finalStep.experimental_context,\n              finishReason: finalStep.finishReason,\n              rawFinishReason: finalStep.rawFinishReason,\n              totalUsage,\n              usage: finalStep.usage,\n              content: finalStep.content,\n              text: finalStep.text,\n              reasoningText: finalStep.reasoningText,\n              reasoning: finalStep.reasoning,\n              files: finalStep.files,\n              sources: finalStep.sources,\n              toolCalls: finalStep.toolCalls,\n              staticToolCalls: finalStep.staticToolCalls,\n              dynamicToolCalls: finalStep.dynamicToolCalls,\n              toolResults: finalStep.toolResults,\n              staticToolResults: finalStep.staticToolResults,\n              dynamicToolResults: finalStep.dynamicToolResults,\n              request: finalStep.request,\n              response: finalStep.response,\n              warnings: finalStep.warnings,\n              providerMetadata: finalStep.providerMetadata,\n              steps: recordedSteps,\n            },\n            callbacks: [\n              onFinish,\n              globalTelemetry.onFinish as\n                | undefined\n                | StreamTextOnFinishCallback<TOOLS>,\n            ],\n          });\n\n          // Add response information to the root span:\n          rootSpan.setAttributes(\n            await selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                'ai.response.finishReason': finishReason,\n                'ai.response.text': { output: () => finalStep.text },\n                'ai.response.reasoning': {\n                  output: () => finalStep.reasoningText,\n                },\n                'ai.response.toolCalls': {\n                  output: () =>\n                    finalStep.toolCalls?.length\n                      ? JSON.stringify(finalStep.toolCalls)\n                      : undefined,\n                },\n                'ai.response.providerMetadata': JSON.stringify(\n                  finalStep.providerMetadata,\n                ),\n                'ai.usage.inputTokens': totalUsage.inputTokens,\n                'ai.usage.inputTokenDetails.noCacheTokens':\n                  totalUsage.inputTokenDetails?.noCacheTokens,\n                'ai.usage.inputTokenDetails.cacheReadTokens':\n                  totalUsage.inputTokenDetails?.cacheReadTokens,\n                'ai.usage.inputTokenDetails.cacheWriteTokens':\n                  totalUsage.inputTokenDetails?.cacheWriteTokens,\n                'ai.usage.outputTokens': totalUsage.outputTokens,\n                'ai.usage.outputTokenDetails.textTokens':\n                  totalUsage.outputTokenDetails?.textTokens,\n                'ai.usage.outputTokenDetails.reasoningTokens':\n                  totalUsage.outputTokenDetails?.reasoningTokens,\n                'ai.usage.totalTokens': totalUsage.totalTokens,\n                'ai.usage.reasoningTokens':\n                  totalUsage.outputTokenDetails?.reasoningTokens,\n                'ai.usage.cachedInputTokens':\n                  totalUsage.inputTokenDetails?.cacheReadTokens,\n              },\n            }),\n          );\n        } catch (error) {\n          controller.error(error);\n        } finally {\n          rootSpan.end();\n        }\n      },\n    });\n\n    // initialize the stitchable stream and the transformed stream:\n    const stitchableStream = createStitchableStream<TextStreamPart<TOOLS>>();\n    this.addStream = stitchableStream.addStream;\n    this.closeStream = stitchableStream.close;\n\n    // resilient stream that handles abort signals and errors:\n    const reader = stitchableStream.stream.getReader();\n    let stream = new ReadableStream<TextStreamPart<TOOLS>>({\n      async start(controller) {\n        // send start event:\n        controller.enqueue({ type: 'start' });\n      },\n\n      async pull(controller) {\n        // abort handling:\n        function abort() {\n          onAbort?.({ steps: recordedSteps });\n          controller.enqueue({\n            type: 'abort',\n            // The `reason` is usually of type DOMException, but it can also be of any type,\n            // so we use getErrorMessage for serialization because it is already designed to accept values of the unknown type.\n            // See: https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\n            ...(abortSignal?.reason !== undefined\n              ? { reason: getErrorMessage(abortSignal.reason) }\n              : {}),\n          });\n          controller.close();\n        }\n\n        try {\n          const { done, value } = await reader.read();\n\n          if (done) {\n            controller.close();\n            return;\n          }\n\n          if (abortSignal?.aborted) {\n            abort();\n            return;\n          }\n\n          controller.enqueue(value);\n        } catch (error) {\n          if (isAbortError(error) && abortSignal?.aborted) {\n            abort();\n          } else {\n            controller.error(error);\n          }\n        }\n      },\n\n      cancel(reason) {\n        return stitchableStream.stream.cancel(reason);\n      },\n    });\n\n    // transform the stream before output parsing\n    // to enable replacement of stream segments:\n    for (const transform of transforms) {\n      stream = stream.pipeThrough(\n        transform({\n          tools: tools as TOOLS,\n          stopStream() {\n            stitchableStream.terminate();\n          },\n        }),\n      );\n    }\n\n    this.baseStream = stream\n      .pipeThrough(createOutputTransformStream(output ?? text()))\n      .pipeThrough(eventProcessor);\n\n    const { maxRetries, retry } = prepareRetries({\n      maxRetries: maxRetriesArg,\n      abortSignal,\n    });\n\n    const tracer = getTracer(telemetry);\n\n    const callSettings = prepareCallSettings(settings);\n\n    const baseTelemetryAttributes = getBaseTelemetryAttributes({\n      model,\n      telemetry,\n      headers,\n      settings: { ...callSettings, maxRetries },\n    });\n\n    const self = this;\n\n    const modelInfo = { provider: model.provider, modelId: model.modelId };\n    const callbackTelemetryProps = {\n      functionId: telemetry?.functionId,\n      metadata: telemetry?.metadata as Record<string, unknown> | undefined,\n    };\n\n    recordSpan({\n      name: 'ai.streamText',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({ operationId: 'ai.streamText', telemetry }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n        },\n      }),\n      tracer,\n      endWhenDone: false,\n      fn: async rootSpanArg => {\n        rootSpan = rootSpanArg;\n\n        const initialPrompt = await standardizePrompt({\n          system,\n          prompt,\n          messages,\n        } as Prompt);\n\n        await notify({\n          event: {\n            model: modelInfo,\n            system,\n            prompt,\n            messages,\n            tools,\n            toolChoice,\n            activeTools,\n            maxOutputTokens: callSettings.maxOutputTokens,\n            temperature: callSettings.temperature,\n            topP: callSettings.topP,\n            topK: callSettings.topK,\n            presencePenalty: callSettings.presencePenalty,\n            frequencyPenalty: callSettings.frequencyPenalty,\n            stopSequences: callSettings.stopSequences,\n            seed: callSettings.seed,\n            maxRetries,\n            timeout,\n            headers,\n            providerOptions,\n            stopWhen,\n            output,\n            abortSignal: originalAbortSignal,\n            include,\n            ...callbackTelemetryProps,\n            experimental_context,\n          },\n          callbacks: [\n            onStart,\n            globalTelemetry.onStart as\n              | undefined\n              | StreamTextOnStartCallback<TOOLS, OUTPUT>,\n          ],\n        });\n\n        const initialMessages = initialPrompt.messages;\n        const initialResponseMessages: Array<ResponseMessage> = [];\n\n        const { approvedToolApprovals, deniedToolApprovals } =\n          collectToolApprovals<TOOLS>({ messages: initialMessages });\n\n        // initial tool execution step stream\n        if (\n          deniedToolApprovals.length > 0 ||\n          approvedToolApprovals.length > 0\n        ) {\n          const localApprovedToolApprovals = approvedToolApprovals.filter(\n            toolApproval => !toolApproval.toolCall.providerExecuted,\n          );\n          const localDeniedToolApprovals = deniedToolApprovals.filter(\n            toolApproval => !toolApproval.toolCall.providerExecuted,\n          );\n\n          const deniedProviderExecutedToolApprovals =\n            deniedToolApprovals.filter(\n              toolApproval => toolApproval.toolCall.providerExecuted,\n            );\n\n          let toolExecutionStepStreamController:\n            | ReadableStreamDefaultController<TextStreamPart<TOOLS>>\n            | undefined;\n          const toolExecutionStepStream = new ReadableStream<\n            TextStreamPart<TOOLS>\n          >({\n            start(controller) {\n              toolExecutionStepStreamController = controller;\n            },\n          });\n\n          self.addStream(toolExecutionStepStream);\n\n          try {\n            for (const toolApproval of [\n              ...localDeniedToolApprovals,\n              ...deniedProviderExecutedToolApprovals,\n            ]) {\n              toolExecutionStepStreamController?.enqueue({\n                type: 'tool-output-denied',\n                toolCallId: toolApproval.toolCall.toolCallId,\n                toolName: toolApproval.toolCall.toolName,\n              } as StaticToolOutputDenied<TOOLS>);\n            }\n\n            const toolOutputs: Array<ToolOutput<TOOLS>> = [];\n\n            await Promise.all(\n              localApprovedToolApprovals.map(async toolApproval => {\n                const result = await executeToolCall({\n                  toolCall: toolApproval.toolCall,\n                  tools,\n                  tracer,\n                  telemetry,\n                  messages: initialMessages,\n                  abortSignal,\n                  experimental_context,\n                  stepNumber: recordedSteps.length,\n                  model: modelInfo,\n                  onToolCallStart: [\n                    onToolCallStart,\n                    globalTelemetry.onToolCallStart as\n                      | undefined\n                      | StreamTextOnToolCallStartCallback<TOOLS>,\n                  ],\n                  onToolCallFinish: [\n                    onToolCallFinish,\n                    globalTelemetry.onToolCallFinish,\n                  ],\n                  onPreliminaryToolResult: result => {\n                    toolExecutionStepStreamController?.enqueue(result);\n                  },\n                });\n\n                if (result != null) {\n                  toolExecutionStepStreamController?.enqueue(result);\n                  toolOutputs.push(result);\n                }\n              }),\n            );\n\n            // Local tool results (approved + denied) are sent as tool results:\n            if (toolOutputs.length > 0 || localDeniedToolApprovals.length > 0) {\n              const localToolContent: ToolContent = [];\n\n              // add regular tool results for approved tool calls:\n              for (const output of toolOutputs) {\n                localToolContent.push({\n                  type: 'tool-result' as const,\n                  toolCallId: output.toolCallId,\n                  toolName: output.toolName,\n                  output: await createToolModelOutput({\n                    toolCallId: output.toolCallId,\n                    input: output.input,\n                    tool: tools?.[output.toolName],\n                    output:\n                      output.type === 'tool-result'\n                        ? output.output\n                        : output.error,\n                    errorMode: output.type === 'tool-error' ? 'text' : 'none',\n                  }),\n                });\n              }\n\n              // add execution denied tool results for denied local tool approvals:\n              for (const toolApproval of localDeniedToolApprovals) {\n                localToolContent.push({\n                  type: 'tool-result' as const,\n                  toolCallId: toolApproval.toolCall.toolCallId,\n                  toolName: toolApproval.toolCall.toolName,\n                  output: {\n                    type: 'execution-denied' as const,\n                    reason: toolApproval.approvalResponse.reason,\n                  },\n                });\n              }\n\n              initialResponseMessages.push({\n                role: 'tool',\n                content: localToolContent,\n              });\n            }\n          } finally {\n            toolExecutionStepStreamController?.close();\n          }\n        }\n\n        recordedResponseMessages.push(...initialResponseMessages);\n\n        async function streamStep({\n          currentStep,\n          responseMessages,\n          usage,\n        }: {\n          currentStep: number;\n          responseMessages: Array<ResponseMessage>;\n          usage: LanguageModelUsage;\n        }) {\n          const includeRawChunks = self.includeRawChunks;\n\n          // Set up step timeout if configured\n          const stepTimeoutId =\n            stepTimeoutMs != null\n              ? setTimeout(() => stepAbortController!.abort(), stepTimeoutMs)\n              : undefined;\n\n          // Set up chunk timeout tracking (will be reset on each chunk)\n          let chunkTimeoutId: ReturnType<typeof setTimeout> | undefined =\n            undefined;\n\n          function resetChunkTimeout() {\n            if (chunkTimeoutMs != null) {\n              if (chunkTimeoutId != null) {\n                clearTimeout(chunkTimeoutId);\n              }\n              chunkTimeoutId = setTimeout(\n                () => chunkAbortController!.abort(),\n                chunkTimeoutMs,\n              );\n            }\n          }\n\n          function clearChunkTimeout() {\n            if (chunkTimeoutId != null) {\n              clearTimeout(chunkTimeoutId);\n              chunkTimeoutId = undefined;\n            }\n          }\n\n          function clearStepTimeout() {\n            if (stepTimeoutId != null) {\n              clearTimeout(stepTimeoutId);\n            }\n          }\n\n          try {\n            stepFinish = new DelayedPromise<void>();\n\n            const stepInputMessages = [...initialMessages, ...responseMessages];\n\n            const prepareStepResult = await prepareStep?.({\n              model,\n              steps: recordedSteps,\n              stepNumber: recordedSteps.length,\n              messages: stepInputMessages,\n              experimental_context,\n            });\n\n            const stepModel = resolveLanguageModel(\n              prepareStepResult?.model ?? model,\n            );\n            const stepModelInfo = {\n              provider: stepModel.provider,\n              modelId: stepModel.modelId,\n            };\n\n            const promptMessages = await convertToLanguageModelPrompt({\n              prompt: {\n                system: prepareStepResult?.system ?? initialPrompt.system,\n                messages: prepareStepResult?.messages ?? stepInputMessages,\n              },\n              supportedUrls: await stepModel.supportedUrls,\n              download,\n            });\n\n            const stepActiveTools =\n              prepareStepResult?.activeTools ?? activeTools;\n\n            const { toolChoice: stepToolChoice, tools: stepTools } =\n              await prepareToolsAndToolChoice({\n                tools,\n                toolChoice: prepareStepResult?.toolChoice ?? toolChoice,\n                activeTools: stepActiveTools,\n              });\n\n            experimental_context =\n              prepareStepResult?.experimental_context ?? experimental_context;\n\n            const stepMessages =\n              prepareStepResult?.messages ?? stepInputMessages;\n\n            const stepSystem =\n              prepareStepResult?.system ?? initialPrompt.system;\n\n            const stepProviderOptions = mergeObjects(\n              providerOptions,\n              prepareStepResult?.providerOptions,\n            );\n\n            await notify({\n              event: {\n                stepNumber: recordedSteps.length,\n                model: stepModelInfo,\n                system: stepSystem,\n                messages: stepMessages,\n                tools,\n                toolChoice: stepToolChoice,\n                activeTools: stepActiveTools,\n                steps: [...recordedSteps],\n                providerOptions: stepProviderOptions,\n                timeout,\n                headers,\n                stopWhen,\n                output,\n                abortSignal: originalAbortSignal,\n                include,\n                ...callbackTelemetryProps,\n                experimental_context,\n              },\n              callbacks: [\n                onStepStart,\n                globalTelemetry.onStepStart as\n                  | undefined\n                  | StreamTextOnStepStartCallback<TOOLS, OUTPUT>,\n              ],\n            });\n\n            const {\n              result: { stream, response, request },\n              doStreamSpan,\n              startTimestampMs,\n            } = await retry(() =>\n              recordSpan({\n                name: 'ai.streamText.doStream',\n                attributes: selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    ...assembleOperationName({\n                      operationId: 'ai.streamText.doStream',\n                      telemetry,\n                    }),\n                    ...baseTelemetryAttributes,\n                    // model:\n                    'ai.model.provider': stepModel.provider,\n                    'ai.model.id': stepModel.modelId,\n                    // prompt:\n                    'ai.prompt.messages': {\n                      input: () => stringifyForTelemetry(promptMessages),\n                    },\n                    'ai.prompt.tools': {\n                      // convert the language model level tools:\n                      input: () => stepTools?.map(tool => JSON.stringify(tool)),\n                    },\n                    'ai.prompt.toolChoice': {\n                      input: () =>\n                        stepToolChoice != null\n                          ? JSON.stringify(stepToolChoice)\n                          : undefined,\n                    },\n\n                    // standardized gen-ai llm span attributes:\n                    'gen_ai.system': stepModel.provider,\n                    'gen_ai.request.model': stepModel.modelId,\n                    'gen_ai.request.frequency_penalty':\n                      callSettings.frequencyPenalty,\n                    'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n                    'gen_ai.request.presence_penalty':\n                      callSettings.presencePenalty,\n                    'gen_ai.request.stop_sequences': callSettings.stopSequences,\n                    'gen_ai.request.temperature': callSettings.temperature,\n                    'gen_ai.request.top_k': callSettings.topK,\n                    'gen_ai.request.top_p': callSettings.topP,\n                  },\n                }),\n                tracer,\n                endWhenDone: false,\n                fn: async doStreamSpan => ({\n                  startTimestampMs: now(), // get before the call\n                  doStreamSpan,\n                  result: await stepModel.doStream({\n                    ...callSettings,\n                    tools: stepTools,\n                    toolChoice: stepToolChoice,\n                    responseFormat: await output?.responseFormat,\n                    prompt: promptMessages,\n                    providerOptions: stepProviderOptions,\n                    abortSignal,\n                    headers,\n                    includeRawChunks,\n                  }),\n                }),\n              }),\n            );\n\n            const streamWithToolResults = runToolsTransformation({\n              tools,\n              generatorStream: stream,\n              tracer,\n              telemetry,\n              system,\n              messages: stepInputMessages,\n              repairToolCall,\n              abortSignal,\n              experimental_context,\n              generateId,\n              stepNumber: recordedSteps.length,\n              model: stepModelInfo,\n              onToolCallStart: [\n                onToolCallStart,\n                globalTelemetry.onToolCallStart as\n                  | undefined\n                  | StreamTextOnToolCallStartCallback<TOOLS>,\n              ],\n              onToolCallFinish: [\n                onToolCallFinish,\n                globalTelemetry.onToolCallFinish,\n              ],\n            });\n\n            // Conditionally include request.body based on include settings.\n            // Large payloads (e.g., base64-encoded images) can cause memory issues.\n            const stepRequest: LanguageModelRequestMetadata =\n              (include?.requestBody ?? true)\n                ? (request ?? {})\n                : { ...request, body: undefined };\n            const stepToolCalls: TypedToolCall<TOOLS>[] = [];\n            const stepToolOutputs: ToolOutput<TOOLS>[] = [];\n            let warnings: SharedV3Warning[] | undefined;\n\n            const activeToolCallToolNames: Record<string, string> = {};\n\n            let stepFinishReason: FinishReason = 'other';\n            let stepRawFinishReason: string | undefined = undefined;\n\n            let stepUsage: LanguageModelUsage = createNullLanguageModelUsage();\n            let stepProviderMetadata: ProviderMetadata | undefined;\n            let stepFirstChunk = true;\n            let stepResponse: { id: string; timestamp: Date; modelId: string } =\n              {\n                id: generateId(),\n                timestamp: new Date(),\n                modelId: modelInfo.modelId,\n              };\n\n            // raw text as it comes from the provider. recorded for telemetry.\n            let activeText = '';\n\n            self.addStream(\n              streamWithToolResults.pipeThrough(\n                new TransformStream<\n                  SingleRequestTextStreamPart<TOOLS>,\n                  TextStreamPart<TOOLS>\n                >({\n                  async transform(chunk, controller): Promise<void> {\n                    resetChunkTimeout();\n\n                    if (chunk.type === 'stream-start') {\n                      warnings = chunk.warnings;\n                      return; // stream start chunks are sent immediately and do not count as first chunk\n                    }\n\n                    if (stepFirstChunk) {\n                      // Telemetry for first chunk:\n                      const msToFirstChunk = now() - startTimestampMs;\n\n                      stepFirstChunk = false;\n\n                      doStreamSpan.addEvent('ai.stream.firstChunk', {\n                        'ai.response.msToFirstChunk': msToFirstChunk,\n                      });\n\n                      doStreamSpan.setAttributes({\n                        'ai.response.msToFirstChunk': msToFirstChunk,\n                      });\n\n                      // Step start:\n                      controller.enqueue({\n                        type: 'start-step',\n                        request: stepRequest,\n                        warnings: warnings ?? [],\n                      });\n                    }\n\n                    const chunkType = chunk.type;\n                    switch (chunkType) {\n                      case 'tool-approval-request':\n                      case 'text-start':\n                      case 'text-end': {\n                        controller.enqueue(chunk);\n                        break;\n                      }\n\n                      case 'text-delta': {\n                        if (chunk.delta.length > 0) {\n                          controller.enqueue({\n                            type: 'text-delta',\n                            id: chunk.id,\n                            text: chunk.delta,\n                            providerMetadata: chunk.providerMetadata,\n                          });\n                          activeText += chunk.delta;\n                        }\n                        break;\n                      }\n\n                      case 'reasoning-start':\n                      case 'reasoning-end': {\n                        controller.enqueue(chunk);\n                        break;\n                      }\n\n                      case 'reasoning-delta': {\n                        controller.enqueue({\n                          type: 'reasoning-delta',\n                          id: chunk.id,\n                          text: chunk.delta,\n                          providerMetadata: chunk.providerMetadata,\n                        });\n                        break;\n                      }\n\n                      case 'tool-call': {\n                        controller.enqueue(chunk);\n                        // store tool calls for onFinish callback and toolCalls promise:\n                        stepToolCalls.push(chunk);\n                        break;\n                      }\n\n                      case 'tool-result': {\n                        controller.enqueue(chunk);\n\n                        if (!chunk.preliminary) {\n                          stepToolOutputs.push(chunk);\n                        }\n\n                        break;\n                      }\n\n                      case 'tool-error': {\n                        controller.enqueue(chunk);\n                        stepToolOutputs.push(chunk);\n                        break;\n                      }\n\n                      case 'response-metadata': {\n                        stepResponse = {\n                          id: chunk.id ?? stepResponse.id,\n                          timestamp: chunk.timestamp ?? stepResponse.timestamp,\n                          modelId: chunk.modelId ?? stepResponse.modelId,\n                        };\n                        break;\n                      }\n\n                      case 'finish': {\n                        // Note: tool executions might not be finished yet when the finish event is emitted.\n                        // store usage and finish reason for promises and onFinish callback:\n                        stepUsage = chunk.usage;\n                        stepFinishReason = chunk.finishReason;\n                        stepRawFinishReason = chunk.rawFinishReason;\n                        stepProviderMetadata = chunk.providerMetadata;\n\n                        // Telemetry for finish event timing\n                        // (since tool executions can take longer and distort calculations)\n                        const msToFinish = now() - startTimestampMs;\n                        doStreamSpan.addEvent('ai.stream.finish');\n                        doStreamSpan.setAttributes({\n                          'ai.response.msToFinish': msToFinish,\n                          'ai.response.avgOutputTokensPerSecond':\n                            (1000 * (stepUsage.outputTokens ?? 0)) / msToFinish,\n                        });\n\n                        break;\n                      }\n\n                      case 'file': {\n                        controller.enqueue(chunk);\n                        break;\n                      }\n\n                      case 'source': {\n                        controller.enqueue(chunk);\n                        break;\n                      }\n\n                      case 'tool-input-start': {\n                        activeToolCallToolNames[chunk.id] = chunk.toolName;\n\n                        const tool = tools?.[chunk.toolName];\n                        if (tool?.onInputStart != null) {\n                          await tool.onInputStart({\n                            toolCallId: chunk.id,\n                            messages: stepInputMessages,\n                            abortSignal,\n                            experimental_context,\n                          });\n                        }\n\n                        controller.enqueue({\n                          ...chunk,\n                          dynamic: chunk.dynamic ?? tool?.type === 'dynamic',\n                          title: tool?.title,\n                        });\n                        break;\n                      }\n\n                      case 'tool-input-end': {\n                        delete activeToolCallToolNames[chunk.id];\n                        controller.enqueue(chunk);\n                        break;\n                      }\n\n                      case 'tool-input-delta': {\n                        const toolName = activeToolCallToolNames[chunk.id];\n                        const tool = tools?.[toolName];\n\n                        if (tool?.onInputDelta != null) {\n                          await tool.onInputDelta({\n                            inputTextDelta: chunk.delta,\n                            toolCallId: chunk.id,\n                            messages: stepInputMessages,\n                            abortSignal,\n                            experimental_context,\n                          });\n                        }\n\n                        controller.enqueue(chunk);\n                        break;\n                      }\n\n                      case 'error': {\n                        controller.enqueue(chunk);\n                        stepFinishReason = 'error';\n                        break;\n                      }\n\n                      case 'raw': {\n                        if (includeRawChunks) {\n                          controller.enqueue(chunk);\n                        }\n                        break;\n                      }\n\n                      default: {\n                        const exhaustiveCheck: never = chunkType;\n                        throw new Error(\n                          `Unknown chunk type: ${exhaustiveCheck}`,\n                        );\n                      }\n                    }\n                  },\n\n                  // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n                  async flush(controller) {\n                    const stepToolCallsJson =\n                      stepToolCalls.length > 0\n                        ? JSON.stringify(stepToolCalls)\n                        : undefined;\n\n                    // record telemetry attributes that don't depend on transforms:\n                    try {\n                      doStreamSpan.setAttributes(\n                        await selectTelemetryAttributes({\n                          telemetry,\n                          attributes: {\n                            'ai.response.finishReason': stepFinishReason,\n                            'ai.response.toolCalls': {\n                              output: () => stepToolCallsJson,\n                            },\n                            'ai.response.id': stepResponse.id,\n                            'ai.response.model': stepResponse.modelId,\n                            'ai.response.timestamp':\n                              stepResponse.timestamp.toISOString(),\n                            'ai.usage.inputTokens': stepUsage.inputTokens,\n                            'ai.usage.inputTokenDetails.noCacheTokens':\n                              stepUsage.inputTokenDetails?.noCacheTokens,\n                            'ai.usage.inputTokenDetails.cacheReadTokens':\n                              stepUsage.inputTokenDetails?.cacheReadTokens,\n                            'ai.usage.inputTokenDetails.cacheWriteTokens':\n                              stepUsage.inputTokenDetails?.cacheWriteTokens,\n                            'ai.usage.outputTokens': stepUsage.outputTokens,\n                            'ai.usage.outputTokenDetails.textTokens':\n                              stepUsage.outputTokenDetails?.textTokens,\n                            'ai.usage.outputTokenDetails.reasoningTokens':\n                              stepUsage.outputTokenDetails?.reasoningTokens,\n                            'ai.usage.totalTokens': stepUsage.totalTokens,\n                            'ai.usage.reasoningTokens':\n                              stepUsage.outputTokenDetails?.reasoningTokens,\n                            'ai.usage.cachedInputTokens':\n                              stepUsage.inputTokenDetails?.cacheReadTokens,\n\n                            // standardized gen-ai llm span attributes:\n                            'gen_ai.response.finish_reasons': [\n                              stepFinishReason,\n                            ],\n                            'gen_ai.response.id': stepResponse.id,\n                            'gen_ai.response.model': stepResponse.modelId,\n                            'gen_ai.usage.input_tokens': stepUsage.inputTokens,\n                            'gen_ai.usage.output_tokens':\n                              stepUsage.outputTokens,\n                          },\n                        }),\n                      );\n                    } catch (error) {\n                      // ignore error setting telemetry attributes\n                    }\n\n                    controller.enqueue({\n                      type: 'finish-step',\n                      finishReason: stepFinishReason,\n                      rawFinishReason: stepRawFinishReason,\n                      usage: stepUsage,\n                      providerMetadata: stepProviderMetadata,\n                      response: {\n                        ...stepResponse,\n                        headers: response?.headers,\n                      },\n                    });\n\n                    const combinedUsage = addLanguageModelUsage(\n                      usage,\n                      stepUsage,\n                    );\n\n                    // wait for the step to be fully processed by the event processor\n                    // to ensure that the recorded steps are complete:\n                    await stepFinish.promise;\n\n                    // set transform-dependent attributes after the step has been\n                    // fully processed (post-transform) by the event processor:\n                    const processedStep =\n                      recordedSteps[recordedSteps.length - 1];\n                    try {\n                      doStreamSpan.setAttributes(\n                        await selectTelemetryAttributes({\n                          telemetry,\n                          attributes: {\n                            'ai.response.text': {\n                              output: () => processedStep.text,\n                            },\n                            'ai.response.reasoning': {\n                              output: () => processedStep.reasoningText,\n                            },\n                            'ai.response.providerMetadata': JSON.stringify(\n                              processedStep.providerMetadata,\n                            ),\n                          },\n                        }),\n                      );\n                    } catch (error) {\n                      // ignore error setting telemetry attributes\n                    } finally {\n                      doStreamSpan.end();\n                    }\n\n                    const clientToolCalls = stepToolCalls.filter(\n                      toolCall => toolCall.providerExecuted !== true,\n                    );\n                    const clientToolOutputs = stepToolOutputs.filter(\n                      toolOutput => toolOutput.providerExecuted !== true,\n                    );\n\n                    // Track provider-executed tool calls that support deferred results.\n                    // In programmatic tool calling, a server tool (e.g., code_execution) may\n                    // trigger a client tool, and the server tool's result is deferred until\n                    // the client tool's result is sent back.\n                    for (const toolCall of stepToolCalls) {\n                      if (toolCall.providerExecuted !== true) continue;\n                      const tool = tools?.[toolCall.toolName];\n                      if (\n                        tool?.type === 'provider' &&\n                        tool.supportsDeferredResults\n                      ) {\n                        // Check if this tool call already has a result in the current step\n                        const hasResultInStep = stepToolOutputs.some(\n                          output =>\n                            (output.type === 'tool-result' ||\n                              output.type === 'tool-error') &&\n                            output.toolCallId === toolCall.toolCallId,\n                        );\n                        if (!hasResultInStep) {\n                          pendingDeferredToolCalls.set(toolCall.toolCallId, {\n                            toolName: toolCall.toolName,\n                          });\n                        }\n                      }\n                    }\n\n                    // Mark deferred tool calls as resolved when we receive their results\n                    for (const output of stepToolOutputs) {\n                      if (\n                        output.type === 'tool-result' ||\n                        output.type === 'tool-error'\n                      ) {\n                        pendingDeferredToolCalls.delete(output.toolCallId);\n                      }\n                    }\n\n                    // Clear the step and chunk timeouts before the next step is started\n                    clearStepTimeout();\n                    clearChunkTimeout();\n\n                    if (\n                      // Continue if:\n                      // 1. There are client tool calls that have all been executed, OR\n                      // 2. There are pending deferred results from provider-executed tools\n                      ((clientToolCalls.length > 0 &&\n                        clientToolOutputs.length === clientToolCalls.length) ||\n                        pendingDeferredToolCalls.size > 0) &&\n                      // continue until a stop condition is met:\n                      !(await isStopConditionMet({\n                        stopConditions,\n                        steps: recordedSteps,\n                      }))\n                    ) {\n                      // append to messages for the next step:\n                      responseMessages.push(\n                        ...(await toResponseMessages({\n                          content:\n                            // use transformed content to create the messages for the next step:\n                            recordedSteps[recordedSteps.length - 1].content,\n                          tools,\n                        })),\n                      );\n\n                      try {\n                        await streamStep({\n                          currentStep: currentStep + 1,\n                          responseMessages,\n                          usage: combinedUsage,\n                        });\n                      } catch (error) {\n                        controller.enqueue({\n                          type: 'error',\n                          error,\n                        });\n\n                        self.closeStream();\n                      }\n                    } else {\n                      controller.enqueue({\n                        type: 'finish',\n                        finishReason: stepFinishReason,\n                        rawFinishReason: stepRawFinishReason,\n                        totalUsage: combinedUsage,\n                      });\n\n                      self.closeStream(); // close the stitchable stream\n                    }\n                  },\n                }),\n              ),\n            );\n          } finally {\n            clearStepTimeout();\n            clearChunkTimeout();\n          }\n        }\n\n        // add the initial stream to the stitchable stream\n        await streamStep({\n          currentStep: 0,\n          responseMessages: initialResponseMessages,\n          usage: createNullLanguageModelUsage(),\n        });\n      },\n    }).catch(error => {\n      // add an error stream part and close the streams:\n      self.addStream(\n        new ReadableStream({\n          start(controller) {\n            controller.enqueue({ type: 'error', error });\n            controller.close();\n          },\n        }),\n      );\n      self.closeStream();\n    });\n  }\n\n  get steps() {\n    // when any of the promises are accessed, the stream is consumed\n    // so it resolves without needing to consume the stream separately\n    this.consumeStream();\n\n    return this._steps.promise;\n  }\n\n  private get finalStep() {\n    return this.steps.then(steps => steps[steps.length - 1]);\n  }\n\n  get content() {\n    return this.finalStep.then(step => step.content);\n  }\n\n  get warnings() {\n    return this.finalStep.then(step => step.warnings);\n  }\n\n  get providerMetadata() {\n    return this.finalStep.then(step => step.providerMetadata);\n  }\n\n  get text() {\n    return this.finalStep.then(step => step.text);\n  }\n\n  get reasoningText() {\n    return this.finalStep.then(step => step.reasoningText);\n  }\n\n  get reasoning() {\n    return this.finalStep.then(step => step.reasoning);\n  }\n\n  get sources() {\n    return this.finalStep.then(step => step.sources);\n  }\n\n  get files() {\n    return this.finalStep.then(step => step.files);\n  }\n\n  get toolCalls() {\n    return this.finalStep.then(step => step.toolCalls);\n  }\n\n  get staticToolCalls() {\n    return this.finalStep.then(step => step.staticToolCalls);\n  }\n\n  get dynamicToolCalls() {\n    return this.finalStep.then(step => step.dynamicToolCalls);\n  }\n\n  get toolResults() {\n    return this.finalStep.then(step => step.toolResults);\n  }\n\n  get staticToolResults() {\n    return this.finalStep.then(step => step.staticToolResults);\n  }\n\n  get dynamicToolResults() {\n    return this.finalStep.then(step => step.dynamicToolResults);\n  }\n\n  get usage() {\n    return this.finalStep.then(step => step.usage);\n  }\n\n  get request() {\n    return this.finalStep.then(step => step.request);\n  }\n\n  get response() {\n    return this.finalStep.then(step => step.response);\n  }\n\n  get totalUsage() {\n    // when any of the promises are accessed, the stream is consumed\n    // so it resolves without needing to consume the stream separately\n    this.consumeStream();\n\n    return this._totalUsage.promise;\n  }\n\n  get finishReason() {\n    // when any of the promises are accessed, the stream is consumed\n    // so it resolves without needing to consume the stream separately\n    this.consumeStream();\n\n    return this._finishReason.promise;\n  }\n\n  get rawFinishReason() {\n    // when any of the promises are accessed, the stream is consumed\n    // so it resolves without needing to consume the stream separately\n    this.consumeStream();\n\n    return this._rawFinishReason.promise;\n  }\n\n  /**\n   * Split out a new stream from the original stream.\n   * The original stream is replaced to allow for further splitting,\n   * since we do not know how many times the stream will be split.\n   *\n   * Note: this leads to buffering the stream content on the server.\n   * However, the LLM results are expected to be small enough to not cause issues.\n   */\n  private teeStream() {\n    const [stream1, stream2] = this.baseStream.tee();\n    this.baseStream = stream2;\n    return stream1;\n  }\n\n  get textStream(): AsyncIterableStream<string> {\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream<\n          EnrichedStreamPart<TOOLS, InferPartialOutput<OUTPUT>>,\n          string\n        >({\n          transform({ part }, controller) {\n            if (part.type === 'text-delta') {\n              controller.enqueue(part.text);\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get fullStream(): AsyncIterableStream<TextStreamPart<TOOLS>> {\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream<\n          EnrichedStreamPart<TOOLS, InferPartialOutput<OUTPUT>>,\n          TextStreamPart<TOOLS>\n        >({\n          transform({ part }, controller) {\n            controller.enqueue(part);\n          },\n        }),\n      ),\n    );\n  }\n\n  async consumeStream(options?: ConsumeStreamOptions): Promise<void> {\n    try {\n      await consumeStream({\n        stream: this.fullStream,\n        onError: options?.onError,\n      });\n    } catch (error) {\n      options?.onError?.(error);\n    }\n  }\n\n  get experimental_partialOutputStream(): AsyncIterableStream<\n    InferPartialOutput<OUTPUT>\n  > {\n    return this.partialOutputStream;\n  }\n\n  get partialOutputStream(): AsyncIterableStream<InferPartialOutput<OUTPUT>> {\n    return createAsyncIterableStream(\n      this.teeStream().pipeThrough(\n        new TransformStream<\n          EnrichedStreamPart<TOOLS, InferPartialOutput<OUTPUT>>,\n          InferPartialOutput<OUTPUT>\n        >({\n          transform({ partialOutput }, controller) {\n            if (partialOutput != null) {\n              controller.enqueue(partialOutput);\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get elementStream(): AsyncIterableStream<InferElementOutput<OUTPUT>> {\n    const transform = this.outputSpecification?.createElementStreamTransform();\n\n    if (transform == null) {\n      throw new UnsupportedFunctionalityError({\n        functionality: `element streams in ${this.outputSpecification?.name ?? 'text'} mode`,\n      });\n    }\n\n    return createAsyncIterableStream(this.teeStream().pipeThrough(transform));\n  }\n\n  get output(): Promise<InferCompleteOutput<OUTPUT>> {\n    return this.finalStep.then(step => {\n      const output = this.outputSpecification ?? text();\n      return output.parseCompleteOutput(\n        { text: step.text },\n        {\n          response: step.response,\n          usage: step.usage,\n          finishReason: step.finishReason,\n        },\n      );\n    });\n  }\n\n  toUIMessageStream<UI_MESSAGE extends UIMessage>({\n    originalMessages,\n    generateMessageId,\n    onFinish,\n    messageMetadata,\n    sendReasoning = true,\n    sendSources = false,\n    sendStart = true,\n    sendFinish = true,\n    onError = getErrorMessage,\n  }: UIMessageStreamOptions<UI_MESSAGE> = {}): AsyncIterableStream<\n    InferUIMessageChunk<UI_MESSAGE>\n  > {\n    const responseMessageId =\n      generateMessageId != null\n        ? getResponseUIMessageId({\n            originalMessages,\n            responseMessageId: generateMessageId,\n          })\n        : undefined;\n\n    // TODO simplify once dynamic is no longer needed for invalid tool inputs\n    const isDynamic = (part: { toolName: string; dynamic?: boolean }) => {\n      const tool = this.tools?.[part.toolName];\n\n      // provider-executed, dynamic tools are not listed in the tools object\n      if (tool == null) {\n        return part.dynamic;\n      }\n\n      return tool?.type === 'dynamic' ? true : undefined;\n    };\n\n    const baseStream = this.fullStream.pipeThrough(\n      new TransformStream<\n        TextStreamPart<TOOLS>,\n        UIMessageChunk<\n          InferUIMessageMetadata<UI_MESSAGE>,\n          InferUIMessageData<UI_MESSAGE>\n        >\n      >({\n        transform: async (part, controller) => {\n          const messageMetadataValue = messageMetadata?.({ part });\n\n          const partType = part.type;\n          switch (partType) {\n            case 'text-start': {\n              controller.enqueue({\n                type: 'text-start',\n                id: part.id,\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n              });\n              break;\n            }\n\n            case 'text-delta': {\n              controller.enqueue({\n                type: 'text-delta',\n                id: part.id,\n                delta: part.text,\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n              });\n              break;\n            }\n\n            case 'text-end': {\n              controller.enqueue({\n                type: 'text-end',\n                id: part.id,\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n              });\n              break;\n            }\n\n            case 'reasoning-start':\n            case 'reasoning-end': {\n              if (sendReasoning) {\n                controller.enqueue({\n                  type: partType,\n                  id: part.id,\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                });\n              }\n              break;\n            }\n\n            case 'reasoning-delta': {\n              if (sendReasoning) {\n                controller.enqueue({\n                  type: 'reasoning-delta',\n                  id: part.id,\n                  delta: part.text,\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                });\n              }\n              break;\n            }\n\n            case 'file': {\n              controller.enqueue({\n                type: 'file',\n                mediaType: part.file.mediaType,\n                url: `data:${part.file.mediaType};base64,${part.file.base64}`,\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n              });\n              break;\n            }\n\n            case 'source': {\n              if (sendSources && part.sourceType === 'url') {\n                controller.enqueue({\n                  type: 'source-url',\n                  sourceId: part.id,\n                  url: part.url,\n                  title: part.title,\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                });\n              }\n\n              if (sendSources && part.sourceType === 'document') {\n                controller.enqueue({\n                  type: 'source-document',\n                  sourceId: part.id,\n                  mediaType: part.mediaType,\n                  title: part.title,\n                  filename: part.filename,\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                });\n              }\n              break;\n            }\n\n            case 'tool-input-start': {\n              const dynamic = isDynamic(part);\n\n              controller.enqueue({\n                type: 'tool-input-start',\n                toolCallId: part.id,\n                toolName: part.toolName,\n                ...(part.providerExecuted != null\n                  ? { providerExecuted: part.providerExecuted }\n                  : {}),\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n                ...(dynamic != null ? { dynamic } : {}),\n                ...(part.title != null ? { title: part.title } : {}),\n              });\n              break;\n            }\n\n            case 'tool-input-delta': {\n              controller.enqueue({\n                type: 'tool-input-delta',\n                toolCallId: part.id,\n                inputTextDelta: part.delta,\n              });\n              break;\n            }\n\n            case 'tool-call': {\n              const dynamic = isDynamic(part);\n\n              if (part.invalid) {\n                controller.enqueue({\n                  type: 'tool-input-error',\n                  toolCallId: part.toolCallId,\n                  toolName: part.toolName,\n                  input: part.input,\n                  ...(part.providerExecuted != null\n                    ? { providerExecuted: part.providerExecuted }\n                    : {}),\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                  ...(dynamic != null ? { dynamic } : {}),\n                  errorText: onError(part.error),\n                  ...(part.title != null ? { title: part.title } : {}),\n                });\n              } else {\n                controller.enqueue({\n                  type: 'tool-input-available',\n                  toolCallId: part.toolCallId,\n                  toolName: part.toolName,\n                  input: part.input,\n                  ...(part.providerExecuted != null\n                    ? { providerExecuted: part.providerExecuted }\n                    : {}),\n                  ...(part.providerMetadata != null\n                    ? { providerMetadata: part.providerMetadata }\n                    : {}),\n                  ...(dynamic != null ? { dynamic } : {}),\n                  ...(part.title != null ? { title: part.title } : {}),\n                });\n              }\n\n              break;\n            }\n\n            case 'tool-approval-request': {\n              controller.enqueue({\n                type: 'tool-approval-request',\n                approvalId: part.approvalId,\n                toolCallId: part.toolCall.toolCallId,\n              });\n              break;\n            }\n\n            case 'tool-result': {\n              const dynamic = isDynamic(part);\n\n              controller.enqueue({\n                type: 'tool-output-available',\n                toolCallId: part.toolCallId,\n                output: part.output,\n                ...(part.providerExecuted != null\n                  ? { providerExecuted: part.providerExecuted }\n                  : {}),\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n                ...(part.preliminary != null\n                  ? { preliminary: part.preliminary }\n                  : {}),\n                ...(dynamic != null ? { dynamic } : {}),\n              });\n              break;\n            }\n\n            case 'tool-error': {\n              const dynamic = isDynamic(part);\n\n              controller.enqueue({\n                type: 'tool-output-error',\n                toolCallId: part.toolCallId,\n                errorText: part.providerExecuted\n                  ? typeof part.error === 'string'\n                    ? part.error\n                    : JSON.stringify(part.error)\n                  : onError(part.error),\n                ...(part.providerExecuted != null\n                  ? { providerExecuted: part.providerExecuted }\n                  : {}),\n                ...(part.providerMetadata != null\n                  ? { providerMetadata: part.providerMetadata }\n                  : {}),\n                ...(dynamic != null ? { dynamic } : {}),\n              });\n              break;\n            }\n\n            case 'tool-output-denied': {\n              controller.enqueue({\n                type: 'tool-output-denied',\n                toolCallId: part.toolCallId,\n              });\n              break;\n            }\n\n            case 'error': {\n              controller.enqueue({\n                type: 'error',\n                errorText: onError(part.error),\n              });\n              break;\n            }\n\n            case 'start-step': {\n              controller.enqueue({ type: 'start-step' });\n              break;\n            }\n\n            case 'finish-step': {\n              controller.enqueue({ type: 'finish-step' });\n              break;\n            }\n\n            case 'start': {\n              if (sendStart) {\n                controller.enqueue({\n                  type: 'start',\n                  ...(messageMetadataValue != null\n                    ? { messageMetadata: messageMetadataValue }\n                    : {}),\n                  ...(responseMessageId != null\n                    ? { messageId: responseMessageId }\n                    : {}),\n                });\n              }\n              break;\n            }\n\n            case 'finish': {\n              if (sendFinish) {\n                controller.enqueue({\n                  type: 'finish',\n                  finishReason: part.finishReason,\n                  ...(messageMetadataValue != null\n                    ? { messageMetadata: messageMetadataValue }\n                    : {}),\n                });\n              }\n              break;\n            }\n\n            case 'abort': {\n              controller.enqueue(part);\n              break;\n            }\n\n            case 'tool-input-end': {\n              break;\n            }\n\n            case 'raw': {\n              // Raw chunks are not included in UI message streams\n              // as they contain provider-specific data for developer use\n              break;\n            }\n\n            default: {\n              const exhaustiveCheck: never = partType;\n              throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n            }\n          }\n\n          // start and finish events already have metadata\n          // so we only need to send metadata for other parts\n          if (\n            messageMetadataValue != null &&\n            partType !== 'start' &&\n            partType !== 'finish'\n          ) {\n            controller.enqueue({\n              type: 'message-metadata',\n              messageMetadata: messageMetadataValue,\n            });\n          }\n        },\n      }),\n    );\n\n    return createAsyncIterableStream(\n      handleUIMessageStreamFinish<UI_MESSAGE>({\n        stream: baseStream,\n        messageId: responseMessageId ?? generateMessageId?.(),\n        originalMessages,\n        onFinish,\n        onError,\n      }),\n    );\n  }\n\n  pipeUIMessageStreamToResponse<UI_MESSAGE extends UIMessage>(\n    response: ServerResponse,\n    {\n      originalMessages,\n      generateMessageId,\n      onFinish,\n      messageMetadata,\n      sendReasoning,\n      sendSources,\n      sendFinish,\n      sendStart,\n      onError,\n      ...init\n    }: UIMessageStreamResponseInit & UIMessageStreamOptions<UI_MESSAGE> = {},\n  ) {\n    pipeUIMessageStreamToResponse({\n      response,\n      stream: this.toUIMessageStream({\n        originalMessages,\n        generateMessageId,\n        onFinish,\n        messageMetadata,\n        sendReasoning,\n        sendSources,\n        sendFinish,\n        sendStart,\n        onError,\n      }),\n      ...init,\n    });\n  }\n\n  pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n    pipeTextStreamToResponse({\n      response,\n      textStream: this.textStream,\n      ...init,\n    });\n  }\n\n  toUIMessageStreamResponse<UI_MESSAGE extends UIMessage>({\n    originalMessages,\n    generateMessageId,\n    onFinish,\n    messageMetadata,\n    sendReasoning,\n    sendSources,\n    sendFinish,\n    sendStart,\n    onError,\n    ...init\n  }: UIMessageStreamResponseInit &\n    UIMessageStreamOptions<UI_MESSAGE> = {}): Response {\n    return createUIMessageStreamResponse({\n      stream: this.toUIMessageStream({\n        originalMessages,\n        generateMessageId,\n        onFinish,\n        messageMetadata,\n        sendReasoning,\n        sendSources,\n        sendFinish,\n        sendStart,\n        onError,\n      }),\n      ...init,\n    });\n  }\n\n  toTextStreamResponse(init?: ResponseInit): Response {\n    return createTextStreamResponse({\n      textStream: this.textStream,\n      ...init,\n    });\n  }\n}\n","/**\n * Splits an array into chunks of a specified size.\n *\n * @template T - The type of elements in the array.\n * @param {T[]} array - The array to split.\n * @param {number} chunkSize - The size of each chunk.\n * @returns {T[][]} - A new array containing the chunks.\n */\nexport function splitArray<T>(array: T[], chunkSize: number): T[][] {\n  if (chunkSize <= 0) {\n    throw new Error('chunkSize must be greater than 0');\n  }\n\n  const result = [];\n  for (let i = 0; i < array.length; i += chunkSize) {\n    result.push(array.slice(i, i + chunkSize));\n  }\n\n  return result;\n}\n","import { ProviderOptions, withUserAgentSuffix } from '@ai-sdk/provider-utils';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveEmbeddingModel } from '../model/resolve-model';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { Embedding, EmbeddingModel, ProviderMetadata } from '../types';\nimport { Warning } from '../types/warning';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { splitArray } from '../util/split-array';\nimport { EmbedManyResult } from './embed-many-result';\nimport { VERSION } from '../version';\n\n/**\n * Embed several values using an embedding model. The type of the value is defined\n * by the embedding model.\n *\n * `embedMany` automatically splits large requests into smaller chunks if the model\n * has a limit on how many embeddings can be generated in a single call.\n *\n * @param model - The embedding model to use.\n * @param values - The values that should be embedded.\n *\n * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n * @param abortSignal - An optional abort signal that can be used to cancel the call.\n * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n *\n * @param maxParallelCalls - Maximum number of concurrent requests. Default: Infinity.\n *\n * @param experimental_telemetry - Optional telemetry configuration (experimental).\n *\n * @param providerOptions - Additional provider-specific options. They are passed through\n * to the provider from the AI SDK and enable provider-specific\n * functionality that can be fully encapsulated in the provider.\n *\n * @returns A result object that contains the embeddings, the value, and additional information.\n */\nexport async function embedMany({\n  model: modelArg,\n  values,\n  maxParallelCalls = Infinity,\n  maxRetries: maxRetriesArg,\n  abortSignal,\n  headers,\n  providerOptions,\n  experimental_telemetry: telemetry,\n}: {\n  /**\n   * The embedding model to use.\n   */\n  model: EmbeddingModel;\n\n  /**\n   * The values that should be embedded.\n   */\n  values: Array<string>;\n\n  /**\n   * Maximum number of retries per embedding model call. Set to 0 to disable retries.\n   *\n   * @default 2\n   */\n  maxRetries?: number;\n\n  /**\n   * Abort signal.\n   */\n  abortSignal?: AbortSignal;\n\n  /**\n   * Additional headers to include in the request.\n   * Only applicable for HTTP-based providers.\n   */\n  headers?: Record<string, string>;\n\n  /**\n   * Optional telemetry configuration (experimental).\n   */\n  experimental_telemetry?: TelemetrySettings;\n\n  /**\n   * Additional provider-specific options. They are passed through\n   * to the provider from the AI SDK and enable provider-specific\n   * functionality that can be fully encapsulated in the provider.\n   */\n  providerOptions?: ProviderOptions;\n\n  /**\n   * Maximum number of concurrent requests.\n   *\n   * @default Infinity\n   */\n  maxParallelCalls?: number;\n}): Promise<EmbedManyResult> {\n  const model = resolveEmbeddingModel(modelArg);\n\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal,\n  });\n\n  const headersWithUserAgent = withUserAgentSuffix(\n    headers ?? {},\n    `ai/${VERSION}`,\n  );\n\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { maxRetries },\n  });\n\n  const tracer = getTracer(telemetry);\n\n  return recordSpan({\n    name: 'ai.embedMany',\n    attributes: selectTelemetryAttributes({\n      telemetry,\n      attributes: {\n        ...assembleOperationName({ operationId: 'ai.embedMany', telemetry }),\n        ...baseTelemetryAttributes,\n        // specific settings that only make sense on the outer level:\n        'ai.values': {\n          input: () => values.map(value => JSON.stringify(value)),\n        },\n      },\n    }),\n    tracer,\n    fn: async span => {\n      const [maxEmbeddingsPerCall, supportsParallelCalls] = await Promise.all([\n        model.maxEmbeddingsPerCall,\n        model.supportsParallelCalls,\n      ]);\n\n      // the model has not specified limits on\n      // how many embeddings can be generated in a single call\n      if (maxEmbeddingsPerCall == null || maxEmbeddingsPerCall === Infinity) {\n        const { embeddings, usage, warnings, response, providerMetadata } =\n          await retry(() => {\n            // nested spans to align with the embedMany telemetry data:\n            return recordSpan({\n              name: 'ai.embedMany.doEmbed',\n              attributes: selectTelemetryAttributes({\n                telemetry,\n                attributes: {\n                  ...assembleOperationName({\n                    operationId: 'ai.embedMany.doEmbed',\n                    telemetry,\n                  }),\n                  ...baseTelemetryAttributes,\n                  // specific settings that only make sense on the outer level:\n                  'ai.values': {\n                    input: () => values.map(value => JSON.stringify(value)),\n                  },\n                },\n              }),\n              tracer,\n              fn: async doEmbedSpan => {\n                const modelResponse = await model.doEmbed({\n                  values,\n                  abortSignal,\n                  headers: headersWithUserAgent,\n                  providerOptions,\n                });\n\n                const embeddings = modelResponse.embeddings;\n                const usage = modelResponse.usage ?? { tokens: NaN };\n\n                doEmbedSpan.setAttributes(\n                  await selectTelemetryAttributes({\n                    telemetry,\n                    attributes: {\n                      'ai.embeddings': {\n                        output: () =>\n                          embeddings.map(embedding =>\n                            JSON.stringify(embedding),\n                          ),\n                      },\n                      'ai.usage.tokens': usage.tokens,\n                    },\n                  }),\n                );\n\n                return {\n                  embeddings,\n                  usage,\n                  warnings: modelResponse.warnings,\n                  providerMetadata: modelResponse.providerMetadata,\n                  response: modelResponse.response,\n                };\n              },\n            });\n          });\n\n        span.setAttributes(\n          await selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              'ai.embeddings': {\n                output: () =>\n                  embeddings.map(embedding => JSON.stringify(embedding)),\n              },\n              'ai.usage.tokens': usage.tokens,\n            },\n          }),\n        );\n\n        logWarnings({\n          warnings,\n          provider: model.provider,\n          model: model.modelId,\n        });\n\n        return new DefaultEmbedManyResult({\n          values,\n          embeddings,\n          usage,\n          warnings,\n          providerMetadata,\n          responses: [response],\n        });\n      }\n\n      // split the values into chunks that are small enough for the model:\n      const valueChunks = splitArray(values, maxEmbeddingsPerCall);\n\n      // serially embed the chunks:\n      const embeddings: Array<Embedding> = [];\n      const warnings: Array<Warning> = [];\n      const responses: Array<\n        | {\n            headers?: Record<string, string>;\n            body?: unknown;\n          }\n        | undefined\n      > = [];\n      let tokens = 0;\n      let providerMetadata: ProviderMetadata | undefined;\n\n      const parallelChunks = splitArray(\n        valueChunks,\n        supportsParallelCalls ? maxParallelCalls : 1,\n      );\n\n      for (const parallelChunk of parallelChunks) {\n        const results = await Promise.all(\n          parallelChunk.map(chunk => {\n            return retry(() => {\n              // nested spans to align with the embedMany telemetry data:\n              return recordSpan({\n                name: 'ai.embedMany.doEmbed',\n                attributes: selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    ...assembleOperationName({\n                      operationId: 'ai.embedMany.doEmbed',\n                      telemetry,\n                    }),\n                    ...baseTelemetryAttributes,\n                    // specific settings that only make sense on the outer level:\n                    'ai.values': {\n                      input: () => chunk.map(value => JSON.stringify(value)),\n                    },\n                  },\n                }),\n                tracer,\n                fn: async doEmbedSpan => {\n                  const modelResponse = await model.doEmbed({\n                    values: chunk,\n                    abortSignal,\n                    headers: headersWithUserAgent,\n                    providerOptions,\n                  });\n\n                  const embeddings = modelResponse.embeddings;\n                  const usage = modelResponse.usage ?? { tokens: NaN };\n\n                  doEmbedSpan.setAttributes(\n                    await selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        'ai.embeddings': {\n                          output: () =>\n                            embeddings.map(embedding =>\n                              JSON.stringify(embedding),\n                            ),\n                        },\n                        'ai.usage.tokens': usage.tokens,\n                      },\n                    }),\n                  );\n\n                  return {\n                    embeddings,\n                    usage,\n                    warnings: modelResponse.warnings,\n                    providerMetadata: modelResponse.providerMetadata,\n                    response: modelResponse.response,\n                  };\n                },\n              });\n            });\n          }),\n        );\n\n        for (const result of results) {\n          embeddings.push(...result.embeddings);\n          warnings.push(...result.warnings);\n          responses.push(result.response);\n          tokens += result.usage.tokens;\n          if (result.providerMetadata) {\n            if (!providerMetadata) {\n              providerMetadata = { ...result.providerMetadata };\n            } else {\n              for (const [providerName, metadata] of Object.entries(\n                result.providerMetadata,\n              )) {\n                providerMetadata[providerName] = {\n                  ...(providerMetadata[providerName] ?? {}),\n                  ...metadata,\n                };\n              }\n            }\n          }\n        }\n      }\n\n      span.setAttributes(\n        await selectTelemetryAttributes({\n          telemetry,\n          attributes: {\n            'ai.embeddings': {\n              output: () =>\n                embeddings.map(embedding => JSON.stringify(embedding)),\n            },\n            'ai.usage.tokens': tokens,\n          },\n        }),\n      );\n\n      logWarnings({\n        warnings,\n        provider: model.provider,\n        model: model.modelId,\n      });\n\n      return new DefaultEmbedManyResult({\n        values,\n        embeddings,\n        usage: { tokens },\n        warnings,\n        providerMetadata: providerMetadata,\n        responses,\n      });\n    },\n  });\n}\n\nclass DefaultEmbedManyResult implements EmbedManyResult {\n  readonly values: EmbedManyResult['values'];\n  readonly embeddings: EmbedManyResult['embeddings'];\n  readonly usage: EmbedManyResult['usage'];\n  readonly warnings: EmbedManyResult['warnings'];\n  readonly providerMetadata: EmbedManyResult['providerMetadata'];\n  readonly responses: EmbedManyResult['responses'];\n\n  constructor(options: {\n    values: EmbedManyResult['values'];\n    embeddings: EmbedManyResult['embeddings'];\n    usage: EmbedManyResult['usage'];\n    warnings: EmbedManyResult['warnings'];\n    providerMetadata?: EmbedManyResult['providerMetadata'];\n    responses?: EmbedManyResult['responses'];\n  }) {\n    this.values = options.values;\n    this.embeddings = options.embeddings;\n    this.usage = options.usage;\n    this.warnings = options.warnings;\n    this.providerMetadata = options.providerMetadata;\n    this.responses = options.responses;\n  }\n}\n","import { JSONValue } from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  FlexibleSchema,\n  InferSchema,\n  ProviderOptions,\n  withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport { NoObjectGeneratedError } from '../error/no-object-generated-error';\nimport { extractReasoningContent } from '../generate-text/extract-reasoning-content';\nimport { extractTextContent } from '../generate-text/extract-text-content';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n} from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport { asLanguageModelUsage, LanguageModelUsage } from '../types/usage';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { prepareHeaders } from '../util/prepare-headers';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { VERSION } from '../version';\nimport { GenerateObjectResult } from './generate-object-result';\nimport { getOutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport { RepairTextFunction } from './repair-text';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\n * Generate a structured, typed object for a given prompt and schema using a language model.\n *\n * This function does not stream the output. If you want to stream the output, use `streamObject` instead.\n *\n * @param model - The language model to use.\n *\n * @param system - A system message that will be part of the prompt.\n * @param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n * @param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n *\n * @param maxOutputTokens - Maximum number of tokens to generate.\n * @param temperature - Temperature setting.\n * The value is passed through to the provider. The range depends on the provider and model.\n * It is recommended to set either `temperature` or `topP`, but not both.\n * @param topP - Nucleus sampling.\n * The value is passed through to the provider. The range depends on the provider and model.\n * It is recommended to set either `temperature` or `topP`, but not both.\n * @param topK - Only sample from the top K options for each subsequent token.\n * Used to remove \"long tail\" low probability responses.\n * Recommended for advanced use cases only. You usually only need to use temperature.\n * @param presencePenalty - Presence penalty setting.\n * It affects the likelihood of the model to repeat information that is already in the prompt.\n * The value is passed through to the provider. The range depends on the provider and model.\n * @param frequencyPenalty - Frequency penalty setting.\n * It affects the likelihood of the model to repeatedly use the same words or phrases.\n * The value is passed through to the provider. The range depends on the provider and model.\n * @param stopSequences - Stop sequences.\n * If set, the model will stop generating text when one of the stop sequences is generated.\n * @param seed - The seed (integer) to use for random sampling.\n * If set and supported by the model, calls will generate deterministic results.\n *\n * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n * @param abortSignal - An optional abort signal that can be used to cancel the call.\n * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n *\n * @param schema - The schema of the object that the model should generate.\n * @param schemaName - Optional name of the output that should be generated.\n * Used by some providers for additional LLM guidance, e.g.\n * via tool or schema name.\n * @param schemaDescription - Optional description of the output that should be generated.\n * Used by some providers for additional LLM guidance, e.g.\n * via tool or schema description.\n *\n * @param output - The type of the output.\n *\n * - 'object': The output is an object.\n * - 'array': The output is an array.\n * - 'enum': The output is an enum.\n * - 'no-schema': The output is not a schema.\n *\n * @param experimental_repairText - A function that attempts to repair the raw output of the model\n * to enable JSON parsing.\n *\n * @param experimental_telemetry - Optional telemetry configuration (experimental).\n *\n * @param providerOptions - Additional provider-specific options. They are passed through\n * to the provider from the AI SDK and enable provider-specific\n * functionality that can be fully encapsulated in the provider.\n *\n * @returns\n * A result object that contains the generated object, the finish reason, the token usage, and additional information.\n *\n * @deprecated Use `generateText` with an `output` setting instead.\n */\nexport async function generateObject<\n  SCHEMA extends FlexibleSchema<unknown> = FlexibleSchema<JSONValue>,\n  OUTPUT extends 'object' | 'array' | 'enum' | 'no-schema' =\n    InferSchema<SCHEMA> extends string ? 'enum' : 'object',\n  RESULT = OUTPUT extends 'array'\n    ? Array<InferSchema<SCHEMA>>\n    : InferSchema<SCHEMA>,\n>(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt &\n    (OUTPUT extends 'enum'\n      ? {\n          /**\n           * The enum values that the model should use.\n           */\n          enum: Array<RESULT>;\n          output: 'enum';\n        }\n      : OUTPUT extends 'no-schema'\n        ? {}\n        : {\n            /**\n             * The schema of the object that the model should generate.\n             */\n            schema: SCHEMA;\n\n            /**\n             * Optional name of the output that should be generated.\n             * Used by some providers for additional LLM guidance, e.g.\n             * via tool or schema name.\n             */\n            schemaName?: string;\n\n            /**\n             * Optional description of the output that should be generated.\n             * Used by some providers for additional LLM guidance, e.g.\n             * via tool or schema description.\n             */\n            schemaDescription?: string;\n          }) & {\n      output?: OUTPUT;\n\n      /**\n       * The language model to use.\n       */\n      model: LanguageModel;\n      /**\n       * A function that attempts to repair the raw output of the model\n       * to enable JSON parsing.\n       */\n      experimental_repairText?: RepairTextFunction;\n\n      /**\n       * Optional telemetry configuration (experimental).\n       */\n\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\n       * Custom download function to use for URLs.\n       *\n       * By default, files are downloaded if the model does not support the URL for the given media type.\n       */\n      experimental_download?: DownloadFunction | undefined;\n\n      /**\n       * Additional provider-specific options. They are passed through\n       * to the provider from the AI SDK and enable provider-specific\n       * functionality that can be fully encapsulated in the provider.\n       */\n      providerOptions?: ProviderOptions;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n      };\n    },\n): Promise<GenerateObjectResult<RESULT>> {\n  const {\n    model: modelArg,\n    output = 'object',\n    system,\n    prompt,\n    messages,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    headers,\n    experimental_repairText: repairText,\n    experimental_telemetry: telemetry,\n    experimental_download: download,\n    providerOptions,\n    _internal: {\n      generateId = originalGenerateId,\n      currentDate = () => new Date(),\n    } = {},\n    ...settings\n  } = options;\n\n  const model = resolveLanguageModel(modelArg);\n\n  const enumValues = 'enum' in options ? options.enum : undefined;\n  const {\n    schema: inputSchema,\n    schemaDescription,\n    schemaName,\n  } = 'schema' in options ? options : {};\n\n  validateObjectGenerationInput({\n    output,\n    schema: inputSchema,\n    schemaName,\n    schemaDescription,\n    enumValues,\n  });\n\n  const { maxRetries, retry } = prepareRetries({\n    maxRetries: maxRetriesArg,\n    abortSignal,\n  });\n\n  const outputStrategy = getOutputStrategy({\n    output,\n    schema: inputSchema,\n    enumValues,\n  });\n\n  const callSettings = prepareCallSettings(settings);\n\n  const headersWithUserAgent = withUserAgentSuffix(\n    headers ?? {},\n    `ai/${VERSION}`,\n  );\n\n  const baseTelemetryAttributes = getBaseTelemetryAttributes({\n    model,\n    telemetry,\n    headers: headersWithUserAgent,\n    settings: { ...callSettings, maxRetries },\n  });\n\n  const tracer = getTracer(telemetry);\n  const jsonSchema = await outputStrategy.jsonSchema();\n\n  try {\n    return await recordSpan({\n      name: 'ai.generateObject',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: 'ai.generateObject',\n            telemetry,\n          }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n          'ai.schema':\n            jsonSchema != null\n              ? { input: () => JSON.stringify(jsonSchema) }\n              : undefined,\n          'ai.schema.name': schemaName,\n          'ai.schema.description': schemaDescription,\n          'ai.settings.output': outputStrategy.type,\n        },\n      }),\n      tracer,\n      fn: async span => {\n        let result: string;\n        let finishReason: FinishReason;\n        let usage: LanguageModelUsage;\n        let warnings: CallWarning[] | undefined;\n        let response: LanguageModelResponseMetadata;\n        let request: LanguageModelRequestMetadata;\n        let resultProviderMetadata: ProviderMetadata | undefined;\n        let reasoning: string | undefined;\n\n        const standardizedPrompt = await standardizePrompt({\n          system,\n          prompt,\n          messages,\n        } as Prompt);\n\n        const promptMessages = await convertToLanguageModelPrompt({\n          prompt: standardizedPrompt,\n          supportedUrls: await model.supportedUrls,\n          download,\n        });\n\n        const generateResult = await retry(() =>\n          recordSpan({\n            name: 'ai.generateObject.doGenerate',\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: 'ai.generateObject.doGenerate',\n                  telemetry,\n                }),\n                ...baseTelemetryAttributes,\n                'ai.prompt.messages': {\n                  input: () => stringifyForTelemetry(promptMessages),\n                },\n\n                // standardized gen-ai llm span attributes:\n                'gen_ai.system': model.provider,\n                'gen_ai.request.model': model.modelId,\n                'gen_ai.request.frequency_penalty':\n                  callSettings.frequencyPenalty,\n                'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n                'gen_ai.request.presence_penalty': callSettings.presencePenalty,\n                'gen_ai.request.temperature': callSettings.temperature,\n                'gen_ai.request.top_k': callSettings.topK,\n                'gen_ai.request.top_p': callSettings.topP,\n              },\n            }),\n            tracer,\n            fn: async span => {\n              const result = await model.doGenerate({\n                responseFormat: {\n                  type: 'json',\n                  schema: jsonSchema,\n                  name: schemaName,\n                  description: schemaDescription,\n                },\n                ...prepareCallSettings(settings),\n                prompt: promptMessages,\n                providerOptions,\n                abortSignal,\n                headers: headersWithUserAgent,\n              });\n\n              const responseData = {\n                id: result.response?.id ?? generateId(),\n                timestamp: result.response?.timestamp ?? currentDate(),\n                modelId: result.response?.modelId ?? model.modelId,\n                headers: result.response?.headers,\n                body: result.response?.body,\n              };\n\n              const text = extractTextContent(result.content);\n              const reasoning = extractReasoningContent(result.content);\n\n              if (text === undefined) {\n                throw new NoObjectGeneratedError({\n                  message:\n                    'No object generated: the model did not return a response.',\n                  response: responseData,\n                  usage: asLanguageModelUsage(result.usage),\n                  finishReason: result.finishReason.unified,\n                });\n              }\n\n              // Add response information to the span:\n              span.setAttributes(\n                await selectTelemetryAttributes({\n                  telemetry,\n                  attributes: {\n                    'ai.response.finishReason': result.finishReason.unified,\n                    'ai.response.object': { output: () => text },\n                    'ai.response.id': responseData.id,\n                    'ai.response.model': responseData.modelId,\n                    'ai.response.timestamp':\n                      responseData.timestamp.toISOString(),\n                    'ai.response.providerMetadata': JSON.stringify(\n                      result.providerMetadata,\n                    ),\n\n                    // TODO rename telemetry attributes to inputTokens and outputTokens\n                    'ai.usage.promptTokens': result.usage.inputTokens.total,\n                    'ai.usage.completionTokens':\n                      result.usage.outputTokens.total,\n\n                    // standardized gen-ai llm span attributes:\n                    'gen_ai.response.finish_reasons': [\n                      result.finishReason.unified,\n                    ],\n                    'gen_ai.response.id': responseData.id,\n                    'gen_ai.response.model': responseData.modelId,\n                    'gen_ai.usage.input_tokens': result.usage.inputTokens.total,\n                    'gen_ai.usage.output_tokens':\n                      result.usage.outputTokens.total,\n                  },\n                }),\n              );\n\n              return {\n                ...result,\n                objectText: text,\n                reasoning,\n                responseData,\n              };\n            },\n          }),\n        );\n\n        result = generateResult.objectText;\n        finishReason = generateResult.finishReason.unified;\n        usage = asLanguageModelUsage(generateResult.usage);\n        warnings = generateResult.warnings;\n        resultProviderMetadata = generateResult.providerMetadata;\n        request = generateResult.request ?? {};\n        response = generateResult.responseData;\n        reasoning = generateResult.reasoning;\n\n        logWarnings({\n          warnings,\n          provider: model.provider,\n          model: model.modelId,\n        });\n\n        const object = await parseAndValidateObjectResultWithRepair(\n          result,\n          outputStrategy,\n          repairText,\n          {\n            response,\n            usage,\n            finishReason,\n          },\n        );\n\n        // Add response information to the span:\n        span.setAttributes(\n          await selectTelemetryAttributes({\n            telemetry,\n            attributes: {\n              'ai.response.finishReason': finishReason,\n              'ai.response.object': {\n                output: () => JSON.stringify(object),\n              },\n              'ai.response.providerMetadata': JSON.stringify(\n                resultProviderMetadata,\n              ),\n\n              // TODO rename telemetry attributes to inputTokens and outputTokens\n              'ai.usage.promptTokens': usage.inputTokens,\n              'ai.usage.completionTokens': usage.outputTokens,\n            },\n          }),\n        );\n\n        return new DefaultGenerateObjectResult({\n          object,\n          reasoning,\n          finishReason,\n          usage,\n          warnings,\n          request,\n          response,\n          providerMetadata: resultProviderMetadata,\n        });\n      },\n    });\n  } catch (error) {\n    throw wrapGatewayError(error);\n  }\n}\n\nclass DefaultGenerateObjectResult<T> implements GenerateObjectResult<T> {\n  readonly object: GenerateObjectResult<T>['object'];\n  readonly finishReason: GenerateObjectResult<T>['finishReason'];\n  readonly usage: GenerateObjectResult<T>['usage'];\n  readonly warnings: GenerateObjectResult<T>['warnings'];\n  readonly providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n  readonly response: GenerateObjectResult<T>['response'];\n  readonly request: GenerateObjectResult<T>['request'];\n  readonly reasoning: GenerateObjectResult<T>['reasoning'];\n\n  constructor(options: {\n    object: GenerateObjectResult<T>['object'];\n    finishReason: GenerateObjectResult<T>['finishReason'];\n    usage: GenerateObjectResult<T>['usage'];\n    warnings: GenerateObjectResult<T>['warnings'];\n    providerMetadata: GenerateObjectResult<T>['providerMetadata'];\n    response: GenerateObjectResult<T>['response'];\n    request: GenerateObjectResult<T>['request'];\n    reasoning: GenerateObjectResult<T>['reasoning'];\n  }) {\n    this.object = options.object;\n    this.finishReason = options.finishReason;\n    this.usage = options.usage;\n    this.warnings = options.warnings;\n    this.providerMetadata = options.providerMetadata;\n    this.response = options.response;\n    this.request = options.request;\n    this.reasoning = options.reasoning;\n  }\n\n  toJsonResponse(init?: ResponseInit): Response {\n    return new Response(JSON.stringify(this.object), {\n      status: init?.status ?? 200,\n      headers: prepareHeaders(init?.headers, {\n        'content-type': 'application/json; charset=utf-8',\n      }),\n    });\n  }\n}\n","import {\n  JSONValue,\n  LanguageModelV3FinishReason,\n  LanguageModelV3StreamPart,\n  LanguageModelV3Usage,\n  SharedV3ProviderMetadata,\n  SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  DelayedPromise,\n  FlexibleSchema,\n  ProviderOptions,\n  type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport { ServerResponse } from 'http';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport { Prompt } from '../prompt/prompt';\nimport { standardizePrompt } from '../prompt/standardize-prompt';\nimport { wrapGatewayError } from '../prompt/wrap-gateway-error';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { getBaseTelemetryAttributes } from '../telemetry/get-base-telemetry-attributes';\nimport { getTracer } from '../telemetry/get-tracer';\nimport { recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { stringifyForTelemetry } from '../telemetry/stringify-for-telemetry';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport { createTextStreamResponse } from '../text-stream/create-text-stream-response';\nimport { pipeTextStreamToResponse } from '../text-stream/pipe-text-stream-to-response';\nimport {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n} from '../types/language-model';\nimport { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport { ProviderMetadata } from '../types/provider-metadata';\nimport {\n  asLanguageModelUsage,\n  createNullLanguageModelUsage,\n  LanguageModelUsage,\n} from '../types/usage';\nimport { DeepPartial, isDeepEqualData, parsePartialJson } from '../util';\nimport {\n  AsyncIterableStream,\n  createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport { DownloadFunction } from '../util/download/download-function';\nimport { now as originalNow } from '../util/now';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { getOutputStrategy, OutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport { RepairTextFunction } from './repair-text';\nimport { ObjectStreamPart, StreamObjectResult } from './stream-object-result';\nimport { validateObjectGenerationInput } from './validate-object-generation-input';\n\nconst originalGenerateId = createIdGenerator({ prefix: 'aiobj', size: 24 });\n\n/**\n * Callback that is set using the `onError` option.\n *\n * @param event - The event that is passed to the callback.\n */\nexport type StreamObjectOnErrorCallback = (event: {\n  error: unknown;\n}) => Promise<void> | void;\n\n/**\n * Callback that is set using the `onFinish` option.\n *\n * @param event - The event that is passed to the callback.\n */\nexport type StreamObjectOnFinishCallback<RESULT> = (event: {\n  /**\n   * The token usage of the generated response.\n   */\n  usage: LanguageModelUsage;\n\n  /**\n   * The generated object. Can be undefined if the final object does not match the schema.\n   */\n  object: RESULT | undefined;\n\n  /**\n   * Optional error object. This is e.g. a TypeValidationError when the final object does not match the schema.\n   */\n  error: unknown | undefined;\n\n  /**\n   * Response metadata.\n   */\n  response: LanguageModelResponseMetadata;\n\n  /**\n   * Warnings from the model provider (e.g. unsupported settings).\n   */\n  warnings?: CallWarning[];\n\n  /**\n   * Additional provider-specific metadata. They are passed through\n   * to the provider from the AI SDK and enable provider-specific\n   * functionality that can be fully encapsulated in the provider.\n   */\n  providerMetadata: ProviderMetadata | undefined;\n}) => Promise<void> | void;\n\n/**\n * Generate a structured, typed object for a given prompt and schema using a language model.\n *\n * This function streams the output. If you do not want to stream the output, use `generateObject` instead.\n *\n * @param model - The language model to use.\n *\n * @param system - A system message that will be part of the prompt.\n * @param prompt - A simple text prompt. You can either use `prompt` or `messages` but not both.\n * @param messages - A list of messages. You can either use `prompt` or `messages` but not both.\n *\n * @param maxOutputTokens - Maximum number of tokens to generate.\n * @param temperature - Temperature setting.\n * The value is passed through to the provider. The range depends on the provider and model.\n * It is recommended to set either `temperature` or `topP`, but not both.\n * @param topP - Nucleus sampling.\n * The value is passed through to the provider. The range depends on the provider and model.\n * It is recommended to set either `temperature` or `topP`, but not both.\n * @param topK - Only sample from the top K options for each subsequent token.\n * Used to remove \"long tail\" low probability responses.\n * Recommended for advanced use cases only. You usually only need to use temperature.\n * @param presencePenalty - Presence penalty setting.\n * It affects the likelihood of the model to repeat information that is already in the prompt.\n * The value is passed through to the provider. The range depends on the provider and model.\n * @param frequencyPenalty - Frequency penalty setting.\n * It affects the likelihood of the model to repeatedly use the same words or phrases.\n * The value is passed through to the provider. The range depends on the provider and model.\n * @param stopSequences - Stop sequences.\n * If set, the model will stop generating text when one of the stop sequences is generated.\n * @param seed - The seed (integer) to use for random sampling.\n * If set and supported by the model, calls will generate deterministic results.\n *\n * @param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n * @param abortSignal - An optional abort signal that can be used to cancel the call.\n * @param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n *\n * @param schema - The schema of the object that the model should generate.\n * @param schemaName - Optional name of the output that should be generated.\n * Used by some providers for additional LLM guidance, e.g.\n * via tool or schema name.\n * @param schemaDescription - Optional description of the output that should be generated.\n * Used by some providers for additional LLM guidance, e.g.\n * via tool or schema description.\n *\n * @param output - The type of the output.\n *\n * - 'object': The output is an object.\n * - 'array': The output is an array.\n * - 'enum': The output is an enum.\n * - 'no-schema': The output is not a schema.\n *\n * @param experimental_telemetry - Optional telemetry configuration (experimental).\n *\n * @param providerOptions - Additional provider-specific options. They are passed through\n * to the provider from the AI SDK and enable provider-specific\n * functionality that can be fully encapsulated in the provider.\n *\n * @returns\n * A result object for accessing the partial object stream and additional information.\n *\n * @deprecated Use `streamText` with an `output` setting instead.\n */\nexport function streamObject<\n  SCHEMA extends FlexibleSchema<unknown> = FlexibleSchema<JSONValue>,\n  OUTPUT extends 'object' | 'array' | 'enum' | 'no-schema' =\n    InferSchema<SCHEMA> extends string ? 'enum' : 'object',\n  RESULT = OUTPUT extends 'array'\n    ? Array<InferSchema<SCHEMA>>\n    : InferSchema<SCHEMA>,\n>(\n  options: Omit<CallSettings, 'stopSequences'> &\n    Prompt &\n    (OUTPUT extends 'enum'\n      ? {\n          /**\n           * The enum values that the model should use.\n           */\n          enum: Array<RESULT>;\n          output: 'enum';\n        }\n      : OUTPUT extends 'no-schema'\n        ? {}\n        : {\n            /**\n             * The schema of the object that the model should generate.\n             */\n            schema: SCHEMA;\n\n            /**\n             * Optional name of the output that should be generated.\n             * Used by some providers for additional LLM guidance, e.g.\n             * via tool or schema name.\n             */\n            schemaName?: string;\n\n            /**\n             * Optional description of the output that should be generated.\n             * Used by some providers for additional LLM guidance, e.g.\n             * via tool or schema description.\n             */\n            schemaDescription?: string;\n          }) & {\n      output?: OUTPUT;\n\n      /**\n       * The language model to use.\n       */\n      model: LanguageModel;\n\n      /**\n       * A function that attempts to repair the raw output of the model\n       * to enable JSON parsing.\n       */\n      experimental_repairText?: RepairTextFunction;\n\n      /**\n       * Optional telemetry configuration (experimental).\n       */\n\n      experimental_telemetry?: TelemetrySettings;\n\n      /**\n       * Custom download function to use for URLs.\n       *\n       * By default, files are downloaded if the model does not support the URL for the given media type.\n       */\n      experimental_download?: DownloadFunction | undefined;\n\n      /**\n       * Additional provider-specific options. They are passed through\n       * to the provider from the AI SDK and enable provider-specific\n       * functionality that can be fully encapsulated in the provider.\n       */\n      providerOptions?: ProviderOptions;\n\n      /**\n       * Callback that is invoked when an error occurs during streaming.\n       * You can use it to log errors.\n       * The stream processing will pause until the callback promise is resolved.\n       */\n      onError?: StreamObjectOnErrorCallback;\n\n      /**\n       * Callback that is called when the LLM response and the final object validation are finished.\n       */\n      onFinish?: StreamObjectOnFinishCallback<RESULT>;\n\n      /**\n       * Internal. For test use only. May change without notice.\n       */\n      _internal?: {\n        generateId?: () => string;\n        currentDate?: () => Date;\n        now?: () => number;\n      };\n    },\n): StreamObjectResult<\n  OUTPUT extends 'enum'\n    ? string\n    : OUTPUT extends 'array'\n      ? RESULT\n      : DeepPartial<RESULT>,\n  OUTPUT extends 'array' ? RESULT : RESULT,\n  OUTPUT extends 'array'\n    ? RESULT extends Array<infer U>\n      ? AsyncIterableStream<U>\n      : never\n    : never\n> {\n  const {\n    model,\n    output = 'object',\n    system,\n    prompt,\n    messages,\n    maxRetries,\n    abortSignal,\n    headers,\n    experimental_repairText: repairText,\n    experimental_telemetry: telemetry,\n    experimental_download: download,\n    providerOptions,\n    onError = ({ error }: { error: unknown }) => {\n      console.error(error);\n    },\n    onFinish,\n    _internal: {\n      generateId = originalGenerateId,\n      currentDate = () => new Date(),\n      now = originalNow,\n    } = {},\n    ...settings\n  } = options;\n\n  const enumValues =\n    'enum' in options && options.enum ? options.enum : undefined;\n\n  const {\n    schema: inputSchema,\n    schemaDescription,\n    schemaName,\n  } = 'schema' in options ? options : {};\n\n  validateObjectGenerationInput({\n    output,\n    schema: inputSchema,\n    schemaName,\n    schemaDescription,\n    enumValues,\n  });\n\n  const outputStrategy = getOutputStrategy({\n    output,\n    schema: inputSchema,\n    enumValues,\n  });\n\n  return new DefaultStreamObjectResult({\n    model,\n    telemetry,\n    headers,\n    settings,\n    maxRetries,\n    abortSignal,\n    outputStrategy,\n    system,\n    prompt,\n    messages,\n    schemaName,\n    schemaDescription,\n    providerOptions,\n    repairText,\n    onError,\n    onFinish,\n    download,\n    generateId,\n    currentDate,\n    now,\n  });\n}\n\nclass DefaultStreamObjectResult<\n  PARTIAL,\n  RESULT,\n  ELEMENT_STREAM,\n> implements StreamObjectResult<PARTIAL, RESULT, ELEMENT_STREAM> {\n  private readonly _object = new DelayedPromise<RESULT>();\n  private readonly _usage = new DelayedPromise<LanguageModelUsage>();\n  private readonly _providerMetadata = new DelayedPromise<\n    ProviderMetadata | undefined\n  >();\n  private readonly _warnings = new DelayedPromise<CallWarning[] | undefined>();\n  private readonly _request =\n    new DelayedPromise<LanguageModelRequestMetadata>();\n  private readonly _response =\n    new DelayedPromise<LanguageModelResponseMetadata>();\n  private readonly _finishReason = new DelayedPromise<FinishReason>();\n\n  private readonly baseStream: ReadableStream<ObjectStreamPart<PARTIAL>>;\n\n  private readonly outputStrategy: OutputStrategy<\n    PARTIAL,\n    RESULT,\n    ELEMENT_STREAM\n  >;\n\n  constructor({\n    model: modelArg,\n    headers,\n    telemetry,\n    settings,\n    maxRetries: maxRetriesArg,\n    abortSignal,\n    outputStrategy,\n    system,\n    prompt,\n    messages,\n    schemaName,\n    schemaDescription,\n    providerOptions,\n    repairText,\n    onError,\n    onFinish,\n    download,\n    generateId,\n    currentDate,\n    now,\n  }: {\n    model: LanguageModel;\n    telemetry: TelemetrySettings | undefined;\n    headers: Record<string, string | undefined> | undefined;\n    settings: Omit<CallSettings, 'abortSignal' | 'headers'>;\n    maxRetries: number | undefined;\n    abortSignal: AbortSignal | undefined;\n    outputStrategy: OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM>;\n    system: Prompt['system'];\n    prompt: Prompt['prompt'];\n    messages: Prompt['messages'];\n    schemaName: string | undefined;\n    schemaDescription: string | undefined;\n    providerOptions: ProviderOptions | undefined;\n    repairText: RepairTextFunction | undefined;\n    onError: StreamObjectOnErrorCallback;\n    onFinish: StreamObjectOnFinishCallback<RESULT> | undefined;\n    download: DownloadFunction | undefined;\n    generateId: () => string;\n    currentDate: () => Date;\n    now: () => number;\n  }) {\n    const model = resolveLanguageModel(modelArg);\n\n    const { maxRetries, retry } = prepareRetries({\n      maxRetries: maxRetriesArg,\n      abortSignal,\n    });\n\n    const callSettings = prepareCallSettings(settings);\n\n    const baseTelemetryAttributes = getBaseTelemetryAttributes({\n      model,\n      telemetry,\n      headers,\n      settings: { ...callSettings, maxRetries },\n    });\n\n    const tracer = getTracer(telemetry);\n    const self = this;\n\n    const stitchableStream =\n      createStitchableStream<ObjectStreamPart<PARTIAL>>();\n\n    const eventProcessor = new TransformStream<\n      ObjectStreamPart<PARTIAL>,\n      ObjectStreamPart<PARTIAL>\n    >({\n      transform(chunk, controller) {\n        controller.enqueue(chunk);\n\n        if (chunk.type === 'error') {\n          onError({ error: wrapGatewayError(chunk.error) });\n        }\n      },\n    });\n\n    this.baseStream = stitchableStream.stream.pipeThrough(eventProcessor);\n\n    recordSpan({\n      name: 'ai.streamObject',\n      attributes: selectTelemetryAttributes({\n        telemetry,\n        attributes: {\n          ...assembleOperationName({\n            operationId: 'ai.streamObject',\n            telemetry,\n          }),\n          ...baseTelemetryAttributes,\n          // specific settings that only make sense on the outer level:\n          'ai.prompt': {\n            input: () => JSON.stringify({ system, prompt, messages }),\n          },\n          'ai.schema': {\n            input: async () =>\n              JSON.stringify(await outputStrategy.jsonSchema()),\n          },\n          'ai.schema.name': schemaName,\n          'ai.schema.description': schemaDescription,\n          'ai.settings.output': outputStrategy.type,\n        },\n      }),\n      tracer,\n      endWhenDone: false,\n      fn: async rootSpan => {\n        const standardizedPrompt = await standardizePrompt({\n          system,\n          prompt,\n          messages,\n        } as Prompt);\n\n        const callOptions = {\n          responseFormat: {\n            type: 'json' as const,\n            schema: await outputStrategy.jsonSchema(),\n            name: schemaName,\n            description: schemaDescription,\n          },\n          ...prepareCallSettings(settings),\n          prompt: await convertToLanguageModelPrompt({\n            prompt: standardizedPrompt,\n            supportedUrls: await model.supportedUrls,\n            download,\n          }),\n          providerOptions,\n          abortSignal,\n          headers,\n          includeRawChunks: false,\n        };\n\n        const transformer: Transformer<\n          LanguageModelV3StreamPart,\n          ObjectStreamInputPart\n        > = {\n          transform: (chunk, controller) => {\n            switch (chunk.type) {\n              case 'text-delta':\n                controller.enqueue(chunk.delta);\n                break;\n              case 'response-metadata':\n              case 'finish':\n              case 'error':\n              case 'stream-start':\n                controller.enqueue(chunk);\n                break;\n            }\n          },\n        };\n\n        const {\n          result: { stream, response, request },\n          doStreamSpan,\n          startTimestampMs,\n        } = await retry(() =>\n          recordSpan({\n            name: 'ai.streamObject.doStream',\n            attributes: selectTelemetryAttributes({\n              telemetry,\n              attributes: {\n                ...assembleOperationName({\n                  operationId: 'ai.streamObject.doStream',\n                  telemetry,\n                }),\n                ...baseTelemetryAttributes,\n                'ai.prompt.messages': {\n                  input: () => stringifyForTelemetry(callOptions.prompt),\n                },\n\n                // standardized gen-ai llm span attributes:\n                'gen_ai.system': model.provider,\n                'gen_ai.request.model': model.modelId,\n                'gen_ai.request.frequency_penalty':\n                  callSettings.frequencyPenalty,\n                'gen_ai.request.max_tokens': callSettings.maxOutputTokens,\n                'gen_ai.request.presence_penalty': callSettings.presencePenalty,\n                'gen_ai.request.temperature': callSettings.temperature,\n                'gen_ai.request.top_k': callSettings.topK,\n                'gen_ai.request.top_p': callSettings.topP,\n              },\n            }),\n            tracer,\n            endWhenDone: false,\n            fn: async doStreamSpan => ({\n              startTimestampMs: now(),\n              doStreamSpan,\n              result: await model.doStream(callOptions),\n            }),\n          }),\n        );\n\n        self._request.resolve(request ?? {});\n\n        // store information for onFinish callback:\n        let warnings: SharedV3Warning[] | undefined;\n        let usage: LanguageModelUsage = createNullLanguageModelUsage();\n        let finishReason: FinishReason | undefined;\n        let providerMetadata: ProviderMetadata | undefined;\n        let object: RESULT | undefined;\n        let error: unknown | undefined;\n\n        // pipe chunks through a transformation stream that extracts metadata:\n        let accumulatedText = '';\n        let textDelta = '';\n        let fullResponse: {\n          id: string;\n          timestamp: Date;\n          modelId: string;\n        } = {\n          id: generateId(),\n          timestamp: currentDate(),\n          modelId: model.modelId,\n        };\n\n        // Keep track of raw parse result before type validation, since e.g. Zod might\n        // change the object by mapping properties.\n        let latestObjectJson: JSONValue | undefined = undefined;\n        let latestObject: PARTIAL | undefined = undefined;\n        let isFirstChunk = true;\n        let isFirstDelta = true;\n\n        const transformedStream = stream\n          .pipeThrough(new TransformStream(transformer))\n          .pipeThrough(\n            new TransformStream<\n              string | ObjectStreamInputPart,\n              ObjectStreamPart<PARTIAL>\n            >({\n              async transform(chunk, controller): Promise<void> {\n                if (\n                  typeof chunk === 'object' &&\n                  chunk.type === 'stream-start'\n                ) {\n                  warnings = chunk.warnings;\n                  return; // stream start chunks are sent immediately and do not count as first chunk\n                }\n\n                // Telemetry event for first chunk:\n                if (isFirstChunk) {\n                  const msToFirstChunk = now() - startTimestampMs;\n\n                  isFirstChunk = false;\n\n                  doStreamSpan.addEvent('ai.stream.firstChunk', {\n                    'ai.stream.msToFirstChunk': msToFirstChunk,\n                  });\n\n                  doStreamSpan.setAttributes({\n                    'ai.stream.msToFirstChunk': msToFirstChunk,\n                  });\n                }\n\n                // process partial text chunks\n                if (typeof chunk === 'string') {\n                  accumulatedText += chunk;\n                  textDelta += chunk;\n\n                  const { value: currentObjectJson, state: parseState } =\n                    await parsePartialJson(accumulatedText);\n\n                  if (\n                    currentObjectJson !== undefined &&\n                    !isDeepEqualData(latestObjectJson, currentObjectJson)\n                  ) {\n                    const validationResult =\n                      await outputStrategy.validatePartialResult({\n                        value: currentObjectJson,\n                        textDelta,\n                        latestObject,\n                        isFirstDelta,\n                        isFinalDelta: parseState === 'successful-parse',\n                      });\n\n                    if (\n                      validationResult.success &&\n                      !isDeepEqualData(\n                        latestObject,\n                        validationResult.value.partial,\n                      )\n                    ) {\n                      // inside inner check to correctly parse the final element in array mode:\n                      latestObjectJson = currentObjectJson;\n                      latestObject = validationResult.value.partial;\n\n                      controller.enqueue({\n                        type: 'object',\n                        object: latestObject,\n                      });\n\n                      controller.enqueue({\n                        type: 'text-delta',\n                        textDelta: validationResult.value.textDelta,\n                      });\n\n                      textDelta = '';\n                      isFirstDelta = false;\n                    }\n                  }\n\n                  return;\n                }\n\n                switch (chunk.type) {\n                  case 'response-metadata': {\n                    fullResponse = {\n                      id: chunk.id ?? fullResponse.id,\n                      timestamp: chunk.timestamp ?? fullResponse.timestamp,\n                      modelId: chunk.modelId ?? fullResponse.modelId,\n                    };\n                    break;\n                  }\n\n                  case 'finish': {\n                    // send final text delta:\n                    if (textDelta !== '') {\n                      controller.enqueue({ type: 'text-delta', textDelta });\n                    }\n\n                    // store finish reason for telemetry:\n                    finishReason = chunk.finishReason.unified;\n\n                    // store usage and metadata for promises and onFinish callback:\n                    usage = asLanguageModelUsage(chunk.usage);\n                    providerMetadata = chunk.providerMetadata;\n\n                    controller.enqueue({\n                      ...chunk,\n                      finishReason: chunk.finishReason.unified,\n                      usage,\n                      response: fullResponse,\n                    });\n\n                    // log warnings:\n                    logWarnings({\n                      warnings: warnings ?? [],\n                      provider: model.provider,\n                      model: model.modelId,\n                    });\n\n                    // resolve promises that can be resolved now:\n                    self._usage.resolve(usage);\n                    self._providerMetadata.resolve(providerMetadata);\n                    self._warnings.resolve(warnings);\n                    self._response.resolve({\n                      ...fullResponse,\n                      headers: response?.headers,\n                    });\n                    self._finishReason.resolve(finishReason ?? 'other');\n\n                    try {\n                      object = await parseAndValidateObjectResultWithRepair(\n                        accumulatedText,\n                        outputStrategy,\n                        repairText,\n                        {\n                          response: fullResponse,\n                          usage,\n                          finishReason,\n                        },\n                      );\n                      self._object.resolve(object);\n                    } catch (e) {\n                      error = e;\n                      self._object.reject(e);\n                    }\n                    break;\n                  }\n\n                  default: {\n                    controller.enqueue(chunk);\n                    break;\n                  }\n                }\n              },\n\n              // invoke onFinish callback and resolve toolResults promise when the stream is about to close:\n              async flush(controller) {\n                try {\n                  const finalUsage = usage ?? {\n                    promptTokens: NaN,\n                    completionTokens: NaN,\n                    totalTokens: NaN,\n                  };\n\n                  doStreamSpan.setAttributes(\n                    await selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        'ai.response.finishReason': finishReason,\n                        'ai.response.object': {\n                          output: () => JSON.stringify(object),\n                        },\n                        'ai.response.id': fullResponse.id,\n                        'ai.response.model': fullResponse.modelId,\n                        'ai.response.timestamp':\n                          fullResponse.timestamp.toISOString(),\n                        'ai.response.providerMetadata':\n                          JSON.stringify(providerMetadata),\n\n                        'ai.usage.inputTokens': finalUsage.inputTokens,\n                        'ai.usage.outputTokens': finalUsage.outputTokens,\n                        'ai.usage.totalTokens': finalUsage.totalTokens,\n                        'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n                        'ai.usage.cachedInputTokens':\n                          finalUsage.cachedInputTokens,\n\n                        // standardized gen-ai llm span attributes:\n                        'gen_ai.response.finish_reasons': [finishReason],\n                        'gen_ai.response.id': fullResponse.id,\n                        'gen_ai.response.model': fullResponse.modelId,\n                        'gen_ai.usage.input_tokens': finalUsage.inputTokens,\n                        'gen_ai.usage.output_tokens': finalUsage.outputTokens,\n                      },\n                    }),\n                  );\n\n                  // finish doStreamSpan before other operations for correct timing:\n                  doStreamSpan.end();\n\n                  // Add response information to the root span:\n                  rootSpan.setAttributes(\n                    await selectTelemetryAttributes({\n                      telemetry,\n                      attributes: {\n                        'ai.usage.inputTokens': finalUsage.inputTokens,\n                        'ai.usage.outputTokens': finalUsage.outputTokens,\n                        'ai.usage.totalTokens': finalUsage.totalTokens,\n                        'ai.usage.reasoningTokens': finalUsage.reasoningTokens,\n                        'ai.usage.cachedInputTokens':\n                          finalUsage.cachedInputTokens,\n                        'ai.response.object': {\n                          output: () => JSON.stringify(object),\n                        },\n                        'ai.response.providerMetadata':\n                          JSON.stringify(providerMetadata),\n                      },\n                    }),\n                  );\n\n                  // call onFinish callback:\n                  await onFinish?.({\n                    usage: finalUsage,\n                    object,\n                    error,\n                    response: {\n                      ...fullResponse,\n                      headers: response?.headers,\n                    },\n                    warnings,\n                    providerMetadata,\n                  });\n                } catch (error) {\n                  controller.enqueue({ type: 'error', error });\n                } finally {\n                  rootSpan.end();\n                }\n              },\n            }),\n          );\n\n        stitchableStream.addStream(transformedStream);\n      },\n    })\n      .catch(error => {\n        // add an empty stream with an error to break the stream:\n        stitchableStream.addStream(\n          new ReadableStream({\n            start(controller) {\n              controller.enqueue({ type: 'error', error });\n              controller.close();\n            },\n          }),\n        );\n      })\n      .finally(() => {\n        stitchableStream.close();\n      });\n\n    this.outputStrategy = outputStrategy;\n  }\n\n  get object() {\n    return this._object.promise;\n  }\n\n  get usage() {\n    return this._usage.promise;\n  }\n\n  get providerMetadata() {\n    return this._providerMetadata.promise;\n  }\n\n  get warnings() {\n    return this._warnings.promise;\n  }\n\n  get request() {\n    return this._request.promise;\n  }\n\n  get response() {\n    return this._response.promise;\n  }\n\n  get finishReason() {\n    return this._finishReason.promise;\n  }\n\n  get partialObjectStream(): AsyncIterableStream<PARTIAL> {\n    return createAsyncIterableStream(\n      this.baseStream.pipeThrough(\n        new TransformStream<ObjectStreamPart<PARTIAL>, PARTIAL>({\n          transform(chunk, controller) {\n            switch (chunk.type) {\n              case 'object':\n                controller.enqueue(chunk.object);\n                break;\n\n              case 'text-delta':\n              case 'finish':\n              case 'error': // suppress error (use onError instead)\n                break;\n\n              default: {\n                const _exhaustiveCheck: never = chunk;\n                throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n              }\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get elementStream(): ELEMENT_STREAM {\n    return this.outputStrategy.createElementStream(this.baseStream);\n  }\n\n  get textStream(): AsyncIterableStream<string> {\n    return createAsyncIterableStream(\n      this.baseStream.pipeThrough(\n        new TransformStream<ObjectStreamPart<PARTIAL>, string>({\n          transform(chunk, controller) {\n            switch (chunk.type) {\n              case 'text-delta':\n                controller.enqueue(chunk.textDelta);\n                break;\n\n              case 'object':\n              case 'finish':\n              case 'error': // suppress error (use onError instead)\n                break;\n\n              default: {\n                const _exhaustiveCheck: never = chunk;\n                throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n              }\n            }\n          },\n        }),\n      ),\n    );\n  }\n\n  get fullStream(): AsyncIterableStream<ObjectStreamPart<PARTIAL>> {\n    return createAsyncIterableStream(this.baseStream);\n  }\n\n  pipeTextStreamToResponse(response: ServerResponse, init?: ResponseInit) {\n    pipeTextStreamToResponse({\n      response,\n      textStream: this.textStream,\n      ...init,\n    });\n  }\n\n  toTextStreamResponse(init?: ResponseInit): Response {\n    return createTextStreamResponse({\n      textStream: this.textStream,\n      ...init,\n    });\n  }\n}\n\nexport type ObjectStreamInputPart =\n  | string\n  | {\n      type: 'stream-start';\n      warnings: SharedV3Warning[];\n    }\n  | {\n      type: 'error';\n      error: unknown;\n    }\n  | {\n      type: 'response-metadata';\n      id?: string;\n      timestamp?: Date;\n      modelId?: string;\n    }\n  | {\n      type: 'finish';\n      finishReason: LanguageModelV3FinishReason;\n      usage: LanguageModelV3Usage;\n      providerMetadata?: SharedV3ProviderMetadata;\n    };\n","import type { MastraDBMessage } from '@mastra/core/agent';\nimport type { MemoryConfigInternal } from '@mastra/core/memory';\nimport { createTool } from '@mastra/core/tools';\nimport { estimateTokenCount } from 'tokenx';\nimport { z } from 'zod';\n\nimport {\n  formatToolResultForObserver,\n  resolveToolResultValue,\n  truncateStringByTokens,\n} from '../processors/observational-memory/tool-result-helpers';\n\nexport type RecallDetail = 'low' | 'high';\n\nfunction getMessageParts(msg: MastraDBMessage): any[] {\n  if (typeof msg.content === 'string') return [];\n  if (Array.isArray(msg.content)) return msg.content;\n  const parts = msg.content?.parts;\n  return Array.isArray(parts) ? parts : [];\n}\n\n/** Returns true if a message has at least one non-data part with visible content. */\nfunction hasVisibleParts(msg: MastraDBMessage): boolean {\n  if (typeof msg.content === 'string') return (msg.content as string).length > 0;\n  const parts = getMessageParts(msg);\n  if (parts.length === 0) return Boolean(msg.content?.content);\n  return parts.some((p: { type?: string }) => !p.type?.startsWith('data-'));\n}\n\ntype RecallThread = {\n  id: string;\n  title?: string;\n  resourceId: string;\n  createdAt: Date;\n  updatedAt: Date;\n};\n\ntype RecallSearchResult = {\n  threadId: string;\n  score: number;\n  groupId?: string;\n  range?: string;\n  text?: string;\n  observedAt?: Date;\n};\n\ntype RecallMemory = {\n  getMemoryStore: () => Promise<{\n    listMessagesById: (args: { messageIds: string[] }) => Promise<{ messages: MastraDBMessage[] }>;\n  }>;\n  recall: (args: {\n    threadId: string;\n    resourceId?: string;\n    page: number;\n    perPage: number | false;\n    orderBy?: { field: 'createdAt'; direction: 'ASC' | 'DESC' };\n    filter?: {\n      dateRange?: {\n        start?: Date;\n        end?: Date;\n        startExclusive?: boolean;\n        endExclusive?: boolean;\n      };\n    };\n  }) => Promise<{\n    messages: MastraDBMessage[];\n    total: number;\n    page: number;\n    perPage: number | false;\n    hasMore: boolean;\n  }>;\n  listThreads: (args: {\n    perPage?: number | false;\n    page?: number;\n    orderBy?: { field: string; direction: 'ASC' | 'DESC' };\n    filter?: { resourceId?: string; metadata?: Record<string, unknown> };\n  }) => Promise<{ threads: RecallThread[]; total: number; hasMore: boolean; page: number }>;\n  searchMessages?: (args: {\n    query: string;\n    resourceId: string;\n    topK?: number;\n    filter?: {\n      threadId?: string;\n      observedAfter?: Date;\n      observedBefore?: Date;\n    };\n  }) => Promise<{ results: RecallSearchResult[] }>;\n  getThreadById?: (args: { threadId: string }) => Promise<RecallThread | null>;\n};\n\nfunction parseRangeFormat(cursor: string): { startId: string; endId: string } | null {\n  // Comma-separated merged ranges: \"id1:id2,id3:id4\"\n  if (cursor.includes(',')) {\n    const parts = cursor\n      .split(',')\n      .map(p => p.trim())\n      .filter(Boolean);\n    if (parts.length >= 1) {\n      const first = parts[0]!;\n      const last = parts[parts.length - 1]!;\n      const firstColon = first.indexOf(':');\n      const lastColon = last.indexOf(':');\n      return {\n        startId: firstColon > 0 ? first.slice(0, firstColon) : first,\n        endId: lastColon > 0 ? last.slice(lastColon + 1) : last,\n      };\n    }\n  }\n\n  // Colon-delimited range: \"startId:endId\"\n  const colonIndex = cursor.indexOf(':');\n  if (colonIndex > 0 && colonIndex < cursor.length - 1) {\n    return { startId: cursor.slice(0, colonIndex), endId: cursor.slice(colonIndex + 1) };\n  }\n\n  return null;\n}\n\nasync function resolveCursorMessage(\n  memory: RecallMemory,\n  cursor: string,\n  access?: { resourceId?: string; threadScope?: string; enforceThreadScope?: boolean },\n): Promise<MastraDBMessage | { hint: string; startId: string; endId: string }> {\n  const normalized = cursor.trim();\n\n  if (!normalized) {\n    throw new Error('Cursor is required');\n  }\n\n  const rangeIds = parseRangeFormat(normalized);\n  if (rangeIds) {\n    return {\n      hint: `The cursor \"${cursor}\" looks like a range. Use one of the individual message IDs as the cursor instead: start=\"${rangeIds.startId}\" or end=\"${rangeIds.endId}\".`,\n      ...rangeIds,\n    };\n  }\n\n  const memoryStore = await memory.getMemoryStore();\n  const result = await memoryStore.listMessagesById({ messageIds: [normalized] });\n  let message = result.messages.find(message => message.id === normalized) ?? null;\n\n  if (!message) {\n    message = await resolveCursorMessageByRecall(memory, normalized, access);\n  }\n\n  if (!message) {\n    throw new Error(`Could not resolve cursor message: ${cursor}`);\n  }\n\n  // Verify the cursor message belongs to the current resource\n  if (access?.resourceId && message.resourceId !== access.resourceId) {\n    throw new Error(`Could not resolve cursor message: ${cursor}`);\n  }\n\n  // In strict thread scope, verify the cursor belongs to the current thread\n  if (access?.enforceThreadScope && access.threadScope && message.threadId !== access.threadScope) {\n    throw new Error(`Could not resolve cursor message: ${cursor}`);\n  }\n\n  return message;\n}\n\nasync function resolveCursorMessageByRecall(\n  memory: RecallMemory,\n  cursor: string,\n  access?: { resourceId?: string; threadScope?: string; enforceThreadScope?: boolean },\n): Promise<MastraDBMessage | null> {\n  if (access?.enforceThreadScope && access.threadScope) {\n    const result = await memory.recall({\n      threadId: access.threadScope,\n      resourceId: access.resourceId,\n      page: 0,\n      perPage: false,\n    });\n\n    return result.messages.find(message => message.id === cursor) ?? null;\n  }\n\n  if (!access?.resourceId) {\n    return null;\n  }\n\n  const threads = await memory.listThreads({\n    page: 0,\n    perPage: 100,\n    orderBy: { field: 'updatedAt', direction: 'DESC' },\n    filter: { resourceId: access.resourceId },\n  });\n\n  for (const thread of threads.threads) {\n    const result = await memory.recall({\n      threadId: thread.id,\n      resourceId: access.resourceId,\n      page: 0,\n      perPage: false,\n    });\n    const message = result.messages.find(message => message.id === cursor);\n    if (message) {\n      return message;\n    }\n  }\n\n  return null;\n}\n\n// ── Thread listing ──────────────────────────────────────────────────\n\nexport async function listThreadsForResource({\n  memory,\n  resourceId,\n  currentThreadId,\n  page = 0,\n  limit = 20,\n  before,\n  after,\n}: {\n  memory: RecallMemory;\n  resourceId: string;\n  currentThreadId: string;\n  page?: number;\n  limit?: number;\n  before?: string;\n  after?: string;\n}): Promise<{\n  threads: string;\n  count: number;\n  page: number;\n  hasMore: boolean;\n}> {\n  if (!resourceId) {\n    throw new Error('Resource ID is required to list threads');\n  }\n\n  const MAX_LIMIT = 50;\n  const normalizedLimit = Math.min(Math.max(limit, 1), MAX_LIMIT);\n\n  const hasDateFilter = !!(before || after);\n  const beforeDate = before ? new Date(before) : null;\n  const afterDate = after ? new Date(after) : null;\n\n  // When date filtering, fetch all threads and filter client-side\n  // (storage layer doesn't support date range on threads)\n  const result = await memory.listThreads({\n    filter: { resourceId },\n    page: hasDateFilter ? 0 : page,\n    perPage: hasDateFilter ? false : normalizedLimit,\n    orderBy: { field: 'updatedAt', direction: 'DESC' },\n  });\n\n  let threads = result.threads;\n\n  if (beforeDate) {\n    threads = threads.filter(t => t.createdAt < beforeDate);\n  }\n  if (afterDate) {\n    threads = threads.filter(t => t.createdAt > afterDate);\n  }\n\n  // Apply client-side pagination when date-filtered\n  let hasMore: boolean;\n  if (hasDateFilter) {\n    const offset = page * normalizedLimit;\n    hasMore = offset + normalizedLimit < threads.length;\n    threads = threads.slice(offset, offset + normalizedLimit);\n  } else {\n    hasMore = result.hasMore;\n  }\n\n  if (threads.length === 0) {\n    return {\n      threads: 'No threads found matching the criteria.',\n      count: 0,\n      page,\n      hasMore: false,\n    };\n  }\n\n  const lines: string[] = [];\n  for (const thread of threads) {\n    const isCurrent = thread.id === currentThreadId;\n    const title = thread.title || '(untitled)';\n    const updated = formatTimestamp(thread.updatedAt);\n    const created = formatTimestamp(thread.createdAt);\n    const marker = isCurrent ? ' ← current' : '';\n    lines.push(`- **${title}**${marker}`);\n    lines.push(`  id: ${thread.id}`);\n    lines.push(`  updated: ${updated} | created: ${created}`);\n  }\n\n  return {\n    threads: lines.join('\\n'),\n    count: threads.length,\n    page,\n    hasMore,\n  };\n}\n\n// ── Cross-thread search ─────────────────────────────────────────────\n\nexport async function searchMessagesForResource({\n  memory,\n  resourceId,\n  currentThreadId,\n  query,\n  topK = 10,\n  maxTokens = DEFAULT_MAX_RESULT_TOKENS,\n  before,\n  after,\n  threadScope,\n}: {\n  memory: RecallMemory;\n  resourceId: string;\n  currentThreadId?: string;\n  query: string;\n  topK?: number;\n  maxTokens?: number;\n  before?: string;\n  after?: string;\n  /** When set, restrict search results to only this thread */\n  threadScope?: string;\n}): Promise<{\n  results: string;\n  count: number;\n}> {\n  if (!memory.searchMessages) {\n    return {\n      results:\n        'Search is not configured. Enable it with `retrieval: { vector: true }` and configure a vector store and embedder on your Memory instance.',\n      count: 0,\n    };\n  }\n\n  const MAX_TOPK = 20;\n  const clampedTopK = Math.min(Math.max(topK, 1), MAX_TOPK);\n  const effectiveTopK = threadScope || before || after ? Math.max(clampedTopK * 3, clampedTopK + 10) : clampedTopK;\n  const searchTopK = Math.min(MAX_TOPK, effectiveTopK);\n\n  const beforeDate = before ? new Date(before) : undefined;\n  const afterDate = after ? new Date(after) : undefined;\n\n  const { results } = await memory.searchMessages({\n    query,\n    resourceId,\n    topK: searchTopK,\n    filter: {\n      ...(threadScope ? { threadId: threadScope } : {}),\n      ...(afterDate ? { observedAfter: afterDate } : {}),\n      ...(beforeDate ? { observedBefore: beforeDate } : {}),\n    },\n  });\n\n  if (results.length === 0) {\n    return {\n      results: 'No matching messages found.',\n      count: 0,\n    };\n  }\n\n  const threadIds = [...new Set(results.map(r => r.threadId))];\n  const threadMap = new Map<string, RecallThread>();\n  if (memory.getThreadById) {\n    await Promise.all(\n      threadIds.map(async id => {\n        const thread = await memory.getThreadById!({ threadId: id });\n        if (thread) threadMap.set(id, thread);\n      }),\n    );\n  }\n\n  const filteredMatches = results.filter(match => {\n    if (threadScope && match.threadId !== threadScope) return false;\n    if (beforeDate && match.observedAt && match.observedAt >= beforeDate) return false;\n    if (afterDate && match.observedAt && match.observedAt <= afterDate) return false;\n    return true;\n  });\n\n  if (filteredMatches.length === 0) {\n    return { results: 'No matching messages found.', count: 0 };\n  }\n\n  const limitedMatches = filteredMatches.slice(0, clampedTopK);\n\n  const sections = limitedMatches.map(match => {\n    const thread = threadMap.get(match.threadId);\n    const title = thread?.title || '(untitled)';\n    const isCurrentThread = match.threadId === currentThreadId;\n    const generationLabel = isCurrentThread ? 'Current thread memory' : 'Older memory from another thread';\n    const generationDetail = isCurrentThread\n      ? 'This result came from the current thread.'\n      : 'This result came from an older memory generation in another thread.';\n    const threadLine = `- thread: ${match.threadId}${thread ? ` (${title})` : ''}`;\n    const sourceLine = match.range\n      ? `- source: raw messages from ID ${match.range.split(':')[0] ?? '(unknown)'} through ID ${match.range.split(':')[1] ?? '(unknown)'}`\n      : '- source: raw message range unavailable';\n    const updatedLine = thread ? `- thread updated: ${formatTimestamp(thread.updatedAt)}` : undefined;\n    const groupLine = match.groupId ? `- observation group: ${match.groupId}` : undefined;\n    const scoreLine = `- score: ${match.score.toFixed(2)}`;\n    const body = (match.text || '').trim() || '_Observation text unavailable._';\n\n    return [\n      `### ${generationLabel}`,\n      '',\n      generationDetail,\n      threadLine,\n      sourceLine,\n      updatedLine,\n      groupLine,\n      scoreLine,\n      '',\n      '```text',\n      body,\n      '```',\n    ]\n      .filter(Boolean)\n      .join('\\n');\n  });\n\n  const assembled = sections.join('\\n\\n');\n  const { text: limited } = truncateByTokens(assembled, maxTokens);\n\n  return {\n    results: limited,\n    count: limitedMatches.length,\n  };\n}\n\n// ── Per-part formatting ─────────────────────────────────────────────\n\nconst LOW_DETAIL_PART_TOKENS = 30;\nconst AUTO_EXPAND_TEXT_TOKENS = 100;\nconst AUTO_EXPAND_TOOL_TOKENS = 20;\nconst HIGH_DETAIL_TOOL_RESULT_TOKENS = 4000;\nconst DEFAULT_MAX_RESULT_TOKENS = 2000;\n\nfunction formatTimestamp(date: Date): string {\n  return date\n    .toISOString()\n    .replace('T', ' ')\n    .replace(/\\.\\d{3}Z$/, 'Z');\n}\n\ninterface FormattedPart {\n  messageId: string;\n  partIndex: number;\n  role: string;\n  type: string;\n  text: string;\n  /** Full untruncated text — used for auto-expand when token budget allows */\n  fullText: string;\n  toolName?: string;\n}\n\nfunction truncateByTokens(text: string, maxTokens: number, hint?: string): { text: string; wasTruncated: boolean } {\n  if (estimateTokenCount(text) <= maxTokens) return { text, wasTruncated: false };\n  // Truncate content to maxTokens, then append hint outside the budget\n  const truncated = truncateStringByTokens(text, maxTokens);\n  const suffix = hint ? ` [${hint} for more]` : '';\n  return { text: truncated + suffix, wasTruncated: true };\n}\n\nfunction lowDetailPartLimit(type: string): number {\n  if (type === 'text') return AUTO_EXPAND_TEXT_TOKENS;\n  if (type === 'tool-result' || type === 'tool-call') return AUTO_EXPAND_TOOL_TOKENS;\n  return LOW_DETAIL_PART_TOKENS;\n}\n\nfunction makePart(\n  msg: MastraDBMessage,\n  partIndex: number,\n  type: string,\n  fullText: string,\n  detail: RecallDetail,\n  toolName?: string,\n): FormattedPart {\n  if (detail === 'high') {\n    return { messageId: msg.id, partIndex, role: msg.role, type, text: fullText, fullText, toolName };\n  }\n  const hint = `recall cursor=\"${msg.id}\" partIndex=${partIndex} detail=\"high\"`;\n  const { text } = truncateByTokens(fullText, lowDetailPartLimit(type), hint);\n  return { messageId: msg.id, partIndex, role: msg.role, type, text, fullText, toolName };\n}\n\nfunction formatMessageParts(msg: MastraDBMessage, detail: RecallDetail): FormattedPart[] {\n  const parts: FormattedPart[] = [];\n\n  if (typeof msg.content === 'string') {\n    parts.push(makePart(msg, 0, 'text', msg.content, detail));\n    return parts;\n  }\n\n  const messageParts = getMessageParts(msg);\n  if (messageParts.length > 0) {\n    for (let i = 0; i < messageParts.length; i++) {\n      const part = messageParts[i]!;\n      const partType = (part as { type?: string }).type;\n\n      if (partType === 'text') {\n        const text = (part as { text?: string }).text;\n        if (text) {\n          parts.push(makePart(msg, i, 'text', text, detail));\n        }\n      } else if (partType === 'tool-invocation') {\n        const inv = (part as any).toolInvocation;\n        if (inv?.toolName) {\n          const hasArgs = inv.args != null;\n          if (inv.state !== 'partial-call' && hasArgs) {\n            const argsStr = detail === 'low' ? '' : `\\n${JSON.stringify(inv.args, null, 2)}`;\n            const fullText = `[Tool Call: ${inv.toolName}]${argsStr}`;\n            parts.push({\n              messageId: msg.id,\n              partIndex: i,\n              role: msg.role,\n              type: 'tool-call',\n              text: fullText,\n              fullText,\n              toolName: inv.toolName,\n            });\n          }\n\n          if (inv.state === 'result') {\n            const { value: resultValue } = resolveToolResultValue(\n              part as { providerMetadata?: Record<string, any> },\n              inv.result,\n            );\n            const resultStr = formatToolResultForObserver(resultValue, { maxTokens: HIGH_DETAIL_TOOL_RESULT_TOKENS });\n            const fullText = `[Tool Result: ${inv.toolName}]\\n${resultStr}`;\n            parts.push(makePart(msg, i, 'tool-result', fullText, detail, inv.toolName));\n          }\n        }\n      } else if (partType === 'tool-call') {\n        const toolName = (part as any).toolName;\n        if (toolName) {\n          const rawArgs = (part as any).input ?? (part as any).args;\n          const argsStr =\n            detail === 'low' || rawArgs == null\n              ? ''\n              : `\\n${typeof rawArgs === 'string' ? rawArgs : JSON.stringify(rawArgs, null, 2)}`;\n          const fullText = `[Tool Call: ${toolName}]${argsStr}`;\n          parts.push({\n            messageId: msg.id,\n            partIndex: i,\n            role: msg.role,\n            type: 'tool-call',\n            text: fullText,\n            fullText,\n            toolName,\n          });\n        }\n      } else if (partType === 'tool-result') {\n        const toolName = (part as any).toolName;\n        if (toolName) {\n          const rawResult = (part as any).output ?? (part as any).result;\n          const resultStr = formatToolResultForObserver(rawResult, { maxTokens: HIGH_DETAIL_TOOL_RESULT_TOKENS });\n          const fullText = `[Tool Result: ${toolName}]\\n${resultStr}`;\n          parts.push(makePart(msg, i, 'tool-result', fullText, detail, toolName));\n        }\n      } else if (partType === 'reasoning') {\n        const reasoning = (part as { reasoning?: string; text?: string }).reasoning ?? (part as { text?: string }).text;\n        if (reasoning) {\n          parts.push(makePart(msg, i, 'reasoning', reasoning, detail));\n        }\n      } else if (partType === 'image' || partType === 'file') {\n        const filename = (part as any).filename;\n        const label = filename ? `: ${filename}` : '';\n        const fullText = `[${partType === 'image' ? 'Image' : 'File'}${label}]`;\n        parts.push({ messageId: msg.id, partIndex: i, role: msg.role, type: partType, text: fullText, fullText });\n      } else if (partType?.startsWith('data-')) {\n        // skip data parts — these are internal OM markers (buffering, observation, etc.)\n      } else if (partType) {\n        const fullText = `[${partType}]`;\n        parts.push({ messageId: msg.id, partIndex: i, role: msg.role, type: partType, text: fullText, fullText });\n      }\n    }\n  } else if (msg.content?.content) {\n    parts.push(makePart(msg, 0, 'text', msg.content.content, detail));\n  }\n\n  return parts;\n}\n\nfunction buildRenderedText(parts: FormattedPart[], timestamps: Map<string, Date>): string {\n  let currentMessageId = '';\n  const lines: string[] = [];\n\n  for (const part of parts) {\n    if (part.messageId !== currentMessageId) {\n      currentMessageId = part.messageId;\n      const ts = timestamps.get(part.messageId);\n      const tsStr = ts ? ` (${formatTimestamp(ts)})` : '';\n      if (lines.length > 0) lines.push(''); // blank line between messages\n      lines.push(`**${part.role}${tsStr}** [${part.messageId}]:`);\n    }\n\n    const indexLabel = `[p${part.partIndex}]`;\n    lines.push(`  ${indexLabel} ${part.text}`);\n  }\n\n  return lines.join('\\n');\n}\n\nasync function getNextVisibleMessage({\n  memory,\n  threadId,\n  resourceId,\n  after,\n}: {\n  memory: RecallMemory;\n  threadId: string;\n  resourceId?: string;\n  after: Date;\n}): Promise<MastraDBMessage | null> {\n  const result = await memory.recall({\n    threadId,\n    resourceId,\n    page: 0,\n    perPage: 50,\n    orderBy: { field: 'createdAt', direction: 'ASC' },\n    filter: {\n      dateRange: {\n        start: after,\n        startExclusive: true,\n      },\n    },\n  });\n\n  return result.messages.find(hasVisibleParts) ?? null;\n}\n\nconst MAX_EXPAND_USER_TEXT_TOKENS = 200;\nconst MAX_EXPAND_OTHER_TOKENS = 50;\n\nfunction expandLimit(part: FormattedPart): number {\n  if (part.role === 'user' && part.type === 'text') return MAX_EXPAND_USER_TEXT_TOKENS;\n  return MAX_EXPAND_OTHER_TOKENS;\n}\n\nfunction expandPriority(part: FormattedPart): number {\n  // Lower number = higher priority for expansion\n  if (part.role === 'user' && part.type === 'text') return 0;\n  if (part.type === 'text' || part.type === 'reasoning') return 1;\n  if (part.type === 'tool-result') return 2;\n  if (part.type === 'tool-call') return 3;\n  return 4;\n}\n\nfunction renderFormattedParts(\n  parts: FormattedPart[],\n  timestamps: Map<string, Date>,\n  options: { detail: RecallDetail; maxTokens: number },\n): { text: string; truncated: boolean; tokenOffset: number } {\n  // Step 1: render with per-part truncated text\n  const text = buildRenderedText(parts, timestamps);\n  let totalTokens = estimateTokenCount(text);\n\n  if (totalTokens > options.maxTokens) {\n    // Already over budget even with truncated text — hard-truncate\n    const truncated = truncateStringByTokens(text, options.maxTokens);\n    return { text: truncated, truncated: true, tokenOffset: totalTokens - options.maxTokens };\n  }\n\n  // Step 2: we're under budget — try expanding truncated parts with leftover room.\n  // Find parts where text !== fullText (i.e., they were truncated).\n  const truncatedIndices = parts\n    .map((p, i) => ({ part: p, index: i }))\n    .filter(({ part }) => part.text !== part.fullText)\n    .sort((a, b) => expandPriority(a.part) - expandPriority(b.part));\n\n  if (truncatedIndices.length === 0) {\n    return { text, truncated: false, tokenOffset: 0 };\n  }\n\n  let remaining = options.maxTokens - totalTokens;\n\n  for (const { part, index } of truncatedIndices) {\n    if (remaining <= 0) break;\n\n    const maxTokens = expandLimit(part);\n    const fullTokens = estimateTokenCount(part.fullText);\n    const currentTokens = estimateTokenCount(part.text);\n    // Cap at the expand limit for this part type\n    const targetTokens = Math.min(fullTokens, maxTokens);\n    const delta = targetTokens - currentTokens;\n\n    if (delta <= 0) continue; // already at or above expand limit\n\n    if (delta <= remaining && targetTokens >= fullTokens) {\n      // Full text fits within both expand limit and remaining budget\n      parts[index] = { ...part, text: part.fullText };\n      remaining -= delta;\n    } else {\n      // Partial expand — cap at expand limit or remaining budget, whichever is smaller\n      const expandedLimit = Math.min(currentTokens + remaining, maxTokens);\n      const hint = `recall cursor=\"${part.messageId}\" partIndex=${part.partIndex} detail=\"high\"`;\n      const { text: expanded } = truncateByTokens(part.fullText, expandedLimit, hint);\n      const expandedDelta = estimateTokenCount(expanded) - currentTokens;\n      parts[index] = { ...part, text: expanded };\n      remaining -= expandedDelta;\n    }\n  }\n\n  // Step 3: re-render with expanded parts\n  const expanded = buildRenderedText(parts, timestamps);\n  const expandedTokens = estimateTokenCount(expanded);\n\n  if (expandedTokens <= options.maxTokens) {\n    return { text: expanded, truncated: false, tokenOffset: 0 };\n  }\n\n  // Safety net: if token estimates drifted, hard-truncate\n  const hardTruncated = truncateStringByTokens(expanded, options.maxTokens);\n  return { text: hardTruncated, truncated: true, tokenOffset: expandedTokens - options.maxTokens };\n}\n\n// ── Single-part fetch ────────────────────────────────────────────────\n\nexport async function recallPart({\n  memory,\n  threadId,\n  resourceId,\n  cursor,\n  partIndex,\n  threadScope,\n  maxTokens = DEFAULT_MAX_RESULT_TOKENS,\n}: {\n  memory: RecallMemory;\n  threadId: string;\n  resourceId?: string;\n  cursor: string;\n  partIndex: number;\n  threadScope?: string;\n  maxTokens?: number;\n}): Promise<{ text: string; messageId: string; partIndex: number; role: string; type: string; truncated: boolean }> {\n  if (!memory || typeof memory.getMemoryStore !== 'function') {\n    throw new Error('Memory instance is required for recall');\n  }\n\n  if (!threadId) {\n    throw new Error('Thread ID is required for recall');\n  }\n\n  const resolved = await resolveCursorMessage(memory, cursor, {\n    resourceId,\n    threadScope,\n    enforceThreadScope: false,\n  });\n\n  if ('hint' in resolved) {\n    throw new Error(resolved.hint);\n  }\n\n  const allParts = formatMessageParts(resolved, 'high');\n\n  if (allParts.length === 0) {\n    throw new Error(\n      `Message ${cursor} has no visible content (it may be an internal system message). Try a neighboring message ID instead.`,\n    );\n  }\n\n  const target = [...allParts].reverse().find(p => p.partIndex === partIndex);\n\n  if (!target) {\n    const availableIndices = allParts.map(p => p.partIndex).join(', ');\n    const highestVisiblePartIndex = Math.max(...allParts.map(p => p.partIndex));\n\n    if (partIndex > highestVisiblePartIndex) {\n      const nextMessage = await getNextVisibleMessage({\n        memory,\n        threadId,\n        resourceId,\n        after: resolved.createdAt,\n      });\n\n      if (nextMessage) {\n        const nextParts = formatMessageParts(nextMessage, 'high');\n        const firstNextPart = nextParts[0];\n\n        if (firstNextPart) {\n          const fallbackNote = `Part index ${partIndex} not found in message ${cursor}; showing partIndex ${firstNextPart.partIndex} from next message ${firstNextPart.messageId}.\\n\\n`;\n          const fallbackText = `${fallbackNote}${firstNextPart.text}`;\n          const truncatedText = truncateStringByTokens(fallbackText, maxTokens);\n          const wasTruncated = truncatedText !== fallbackText;\n\n          return {\n            text: truncatedText,\n            messageId: firstNextPart.messageId,\n            partIndex: firstNextPart.partIndex,\n            role: firstNextPart.role,\n            type: firstNextPart.type,\n            truncated: wasTruncated,\n          };\n        }\n      }\n    }\n\n    throw new Error(`Part index ${partIndex} not found in message ${cursor}. Available indices: ${availableIndices}`);\n  }\n\n  const truncatedText = truncateStringByTokens(target.text, maxTokens);\n  const wasTruncated = truncatedText !== target.text;\n\n  return {\n    text: truncatedText,\n    messageId: target.messageId,\n    partIndex: target.partIndex,\n    role: target.role,\n    type: target.type,\n    truncated: wasTruncated,\n  };\n}\n\n// ── Paged recall ─────────────────────────────────────────────────────\n\nexport interface RecallResult {\n  messages: string;\n  count: number;\n  cursor: string;\n  page: number;\n  limit: number;\n  detail: RecallDetail;\n  hasNextPage: boolean;\n  hasPrevPage: boolean;\n  truncated: boolean;\n  tokenOffset: number;\n}\n\nexport async function recallMessages({\n  memory,\n  threadId,\n  resourceId,\n  cursor,\n  page = 1,\n  limit = 20,\n  detail = 'low',\n  partType,\n  toolName,\n  threadScope,\n  maxTokens = DEFAULT_MAX_RESULT_TOKENS,\n}: {\n  memory: RecallMemory;\n  threadId: string;\n  resourceId?: string;\n  cursor: string;\n  page?: number;\n  limit?: number;\n  detail?: RecallDetail;\n  partType?: 'text' | 'tool-call' | 'tool-result' | 'reasoning' | 'image' | 'file';\n  toolName?: string;\n  threadScope?: string;\n  maxTokens?: number;\n}): Promise<RecallResult> {\n  if (!memory) {\n    throw new Error('Memory instance is required for recall');\n  }\n\n  if (!threadId) {\n    throw new Error('Thread ID is required for recall');\n  }\n\n  if (typeof memory.getMemoryStore !== 'function') {\n    throw new Error('recall requires a Memory instance with storage access');\n  }\n\n  const MAX_PAGE = 50;\n  const MAX_LIMIT = 20;\n  const rawPage = page === 0 ? 1 : page;\n  const normalizedPage = Math.max(Math.min(rawPage, MAX_PAGE), -MAX_PAGE);\n  const normalizedLimit = Math.min(limit, MAX_LIMIT);\n\n  const resolved = await resolveCursorMessage(memory, cursor, {\n    resourceId,\n    threadScope,\n    enforceThreadScope: false,\n  });\n\n  if ('hint' in resolved) {\n    return {\n      messages: resolved.hint,\n      count: 0,\n      cursor,\n      page: normalizedPage,\n      limit: normalizedLimit,\n      detail,\n      hasNextPage: false,\n      hasPrevPage: false,\n      truncated: false,\n      tokenOffset: 0,\n    };\n  }\n\n  const anchor = resolved;\n  const crossThreadId = anchor.threadId && anchor.threadId !== threadId ? anchor.threadId : undefined;\n\n  if (crossThreadId && threadScope) {\n    return {\n      messages: `Cursor does not belong to the active thread. Expected thread \"${threadId}\" but cursor \"${cursor}\" belongs to \"${anchor.threadId}\". Pass threadId=\"${anchor.threadId}\" to browse that thread, or omit threadId and use this cursor directly in resource scope.`,\n      count: 0,\n      cursor,\n      page: normalizedPage,\n      limit: normalizedLimit,\n      detail,\n      hasNextPage: false,\n      hasPrevPage: false,\n      truncated: false,\n      tokenOffset: 0,\n    };\n  }\n\n  const resolvedThreadId = crossThreadId ?? threadId;\n  if (!resolvedThreadId) {\n    throw new Error('Thread ID is required for recall');\n  }\n\n  const isForward = normalizedPage > 0;\n  const pageIndex = Math.max(Math.abs(normalizedPage), 1) - 1;\n  const skip = pageIndex * normalizedLimit;\n\n  // Fetch skip + limit + 1 to detect whether another page exists beyond this one\n  const fetchCount = skip + normalizedLimit + 1;\n\n  const result = await memory.recall({\n    threadId: resolvedThreadId,\n    resourceId,\n    page: 0,\n    perPage: fetchCount,\n    orderBy: { field: 'createdAt', direction: isForward ? 'ASC' : 'DESC' },\n    filter: {\n      dateRange: isForward\n        ? {\n            start: anchor.createdAt,\n            startExclusive: true,\n          }\n        : {\n            end: anchor.createdAt,\n            endExclusive: true,\n          },\n    },\n  });\n\n  // Filter out messages with only internal data-* parts so they don't consume page slots.\n  const visibleMessages = result.messages.filter(hasVisibleParts);\n\n  // Memory.recall() always returns messages sorted chronologically (ASC) via MessageList.\n  // For forward pagination: take from the start of the ASC array (oldest first after cursor).\n  // For backward pagination: take from the END of the ASC array (closest to cursor).\n  //   DESC query ensures the DB returns the N messages closest to cursor, but MessageList\n  //   re-sorts them to ASC. So we slice from the end to get the right page window.\n  const total = visibleMessages.length;\n  const hasMore = total > skip + normalizedLimit;\n  let messages: typeof visibleMessages;\n  if (isForward) {\n    messages = visibleMessages.slice(skip, skip + normalizedLimit);\n  } else {\n    // For backward: closest-to-cursor messages are at the end of the ASC-sorted array.\n    // Page -1 (skip=0): last `limit` items; page -2 (skip=limit): next `limit` from end; etc.\n    const endIdx = Math.max(total - skip, 0);\n    const startIdx = Math.max(endIdx - normalizedLimit, 0);\n    messages = visibleMessages.slice(startIdx, endIdx);\n  }\n\n  // Compute pagination flags\n  const hasNextPage = isForward ? hasMore : pageIndex > 0;\n  const hasPrevPage = isForward ? pageIndex > 0 : hasMore;\n\n  // Format parts from returned messages\n  let allParts: FormattedPart[] = [];\n  const timestamps = new Map<string, Date>();\n  for (const msg of messages) {\n    timestamps.set(msg.id, msg.createdAt);\n    allParts.push(...formatMessageParts(msg, detail));\n  }\n\n  if (toolName) {\n    allParts = allParts.filter(p => (p.type === 'tool-call' || p.type === 'tool-result') && p.toolName === toolName);\n  }\n\n  if (partType) {\n    allParts = allParts.filter(p => p.type === partType);\n  }\n\n  // High detail: clamp to 1 message and 1 part to avoid token blowup\n  if (detail === 'high' && allParts.length > 0) {\n    const firstPart = allParts[0]!;\n    const sameMsgParts = allParts.filter(p => p.messageId === firstPart.messageId);\n    const otherMsgParts = allParts.filter(p => p.messageId !== firstPart.messageId);\n\n    const rendered = renderFormattedParts([firstPart], timestamps, { detail, maxTokens });\n\n    let text = rendered.text;\n\n    // Build continuation hints\n    const hints: string[] = [];\n    if (sameMsgParts.length > 1) {\n      const nextPart = sameMsgParts[1]!;\n      hints.push(`next part: partIndex=${nextPart.partIndex} on cursor=\"${firstPart.messageId}\"`);\n    }\n    if (otherMsgParts.length > 0) {\n      const next = otherMsgParts[0]!;\n      hints.push(`next message: partIndex=${next.partIndex} on cursor=\"${next.messageId}\"`);\n    } else if (hasNextPage) {\n      hints.push(`more messages available on page ${normalizedPage + 1}`);\n    }\n\n    if (hints.length > 0) {\n      text += `\\n\\nHigh detail returns 1 part at a time. To continue: ${hints.join(', or ')}.`;\n    }\n\n    return {\n      messages: text,\n      count: 1,\n      cursor,\n      page: normalizedPage,\n      limit: normalizedLimit,\n      detail,\n      hasNextPage: otherMsgParts.length > 0 || hasNextPage,\n      hasPrevPage,\n      truncated: rendered.truncated,\n      tokenOffset: rendered.tokenOffset,\n    };\n  }\n\n  const rendered = renderFormattedParts(allParts, timestamps, { detail, maxTokens });\n  const emptyMessage =\n    allParts.length === 0\n      ? partType || toolName\n        ? '(no message parts matched the current filters)'\n        : '(no visible message parts found for this page)'\n      : '(no messages found)';\n\n  return {\n    messages: rendered.text || emptyMessage,\n    count: messages.length,\n    cursor,\n    page: normalizedPage,\n    limit: normalizedLimit,\n    detail,\n    hasNextPage,\n    hasPrevPage,\n    truncated: rendered.truncated,\n    tokenOffset: rendered.tokenOffset,\n  };\n}\n\n// ── Thread browsing (no cursor) ─────────────────────────────────────\n\nexport async function recallThreadFromStart({\n  memory,\n  threadId,\n  resourceId,\n  page = 1,\n  limit = 20,\n  detail = 'low',\n  partType,\n  toolName,\n  anchor = 'start',\n  maxTokens = DEFAULT_MAX_RESULT_TOKENS,\n}: {\n  memory: RecallMemory;\n  threadId: string;\n  resourceId?: string;\n  page?: number;\n  limit?: number;\n  detail?: RecallDetail;\n  partType?: 'text' | 'tool-call' | 'tool-result' | 'reasoning' | 'image' | 'file';\n  toolName?: string;\n  anchor?: 'start' | 'end';\n  maxTokens?: number;\n}): Promise<RecallResult> {\n  if (!memory) {\n    throw new Error('Memory instance is required for recall');\n  }\n  if (!threadId) {\n    throw new Error('Thread ID is required for recall');\n  }\n\n  // Verify the thread belongs to the current resource\n  if (resourceId && memory.getThreadById) {\n    const thread = await memory.getThreadById({ threadId });\n    if (!thread || thread.resourceId !== resourceId) {\n      throw new Error('Thread not found');\n    }\n  }\n\n  const MAX_PAGE = 50;\n  const MAX_LIMIT = 20;\n  const normalizedPage = Math.max(Math.min(page, MAX_PAGE), 1);\n  const normalizedLimit = Math.min(Math.max(limit, 1), MAX_LIMIT);\n  const pageIndex = normalizedPage - 1;\n  const fetchCount = pageIndex * normalizedLimit + normalizedLimit + 1;\n\n  const result = await memory.recall({\n    threadId,\n    resourceId,\n    page: 0,\n    perPage: fetchCount,\n    orderBy: { field: 'createdAt', direction: anchor === 'end' ? 'DESC' : 'ASC' },\n  });\n\n  const visibleMessages =\n    anchor === 'end'\n      ? result.messages.slice(0, fetchCount).filter(hasVisibleParts).reverse()\n      : result.messages.slice(0, fetchCount).filter(hasVisibleParts);\n  const skip = pageIndex * normalizedLimit;\n  const messages = visibleMessages.slice(skip, skip + normalizedLimit);\n  const hasExtraMessage = visibleMessages.length > skip + messages.length;\n  const hasNextPage = messages.length > 0 ? (anchor === 'end' ? pageIndex > 0 : hasExtraMessage) : false;\n  const hasPrevPage = messages.length > 0 ? (anchor === 'end' ? hasExtraMessage : pageIndex > 0) : pageIndex > 0;\n\n  let allParts: FormattedPart[] = [];\n  const timestamps = new Map<string, Date>();\n  for (const msg of messages) {\n    timestamps.set(msg.id, msg.createdAt);\n    allParts.push(...formatMessageParts(msg, detail));\n  }\n\n  if (toolName) {\n    allParts = allParts.filter(p => (p.type === 'tool-call' || p.type === 'tool-result') && p.toolName === toolName);\n  }\n\n  if (partType) {\n    allParts = allParts.filter(p => p.type === partType);\n  }\n\n  const rendered = renderFormattedParts(allParts, timestamps, { detail, maxTokens });\n  const emptyMessage =\n    messages.length === 0\n      ? pageIndex > 0\n        ? `(no messages found on page ${normalizedPage} for this thread)`\n        : '(no messages in this thread)'\n      : partType || toolName\n        ? '(no message parts matched the current filters)'\n        : '(no messages found)';\n\n  return {\n    messages: rendered.text || emptyMessage,\n    count: messages.length,\n    cursor: messages[0]?.id || '',\n    page: normalizedPage,\n    limit: normalizedLimit,\n    detail,\n    hasNextPage,\n    hasPrevPage,\n    truncated: rendered.truncated,\n    tokenOffset: rendered.tokenOffset,\n  };\n}\n\nexport const recallTool = (\n  _memoryConfig?: MemoryConfigInternal,\n  options?: { retrievalScope?: 'thread' | 'resource' },\n) => {\n  const retrievalScope = options?.retrievalScope ?? 'thread';\n  const isResourceScope = retrievalScope === 'resource';\n\n  const description = isResourceScope\n    ? 'Browse conversation history. Use mode=\"threads\" to list all threads for the current user. Use mode=\"messages\" (default) to browse messages in the current thread or pass threadId to browse another thread in the active resource. When mode=\"messages\" has no cursor or threadId, it defaults to the current thread and says so at the top of the result. If you pass only a cursor, it must belong to the current thread. Use mode=\"search\" to find messages by content across all threads.'\n    : 'Browse conversation history in the current thread. Use mode=\"messages\" (default) to page through messages near a cursor. Use mode=\"search\" to find messages by content in this thread. Use mode=\"threads\" to get the current thread\\'s ID and title.';\n\n  return createTool({\n    id: 'recall',\n    description,\n    inputSchema: z.object({\n      ...(isResourceScope\n        ? {\n            mode: z\n              .enum(['messages', 'threads', 'search'])\n              .optional()\n              .describe(\n                'What to retrieve. \"messages\" (default) pages through message history. \"threads\" lists all threads for the current user. \"search\" finds messages by semantic similarity across all threads.',\n              ),\n            threadId: z\n              .string()\n              .min(1)\n              .optional()\n              .describe(\n                'Browse a different thread, or use \"current\" for the active thread. Use mode=\"threads\" first to discover thread IDs.',\n              ),\n            before: z\n              .string()\n              .optional()\n              .describe(\n                'For mode=\"threads\": only show threads created before this date. ISO 8601 or natural date string (e.g. \"2026-03-15\", \"2026-03-10T00:00:00Z\").',\n              ),\n            after: z\n              .string()\n              .optional()\n              .describe(\n                'For mode=\"threads\": only show threads created after this date. ISO 8601 or natural date string (e.g. \"2026-03-01\", \"2026-03-10T00:00:00Z\").',\n              ),\n          }\n        : {\n            mode: z\n              .enum(['messages', 'threads', 'search'])\n              .optional()\n              .describe(\n                'What to retrieve. \"messages\" (default) pages through message history. \"threads\" returns info about the current thread. \"search\" finds messages by semantic similarity in this thread.',\n              ),\n          }),\n      query: z\n        .string()\n        .min(1)\n        .optional()\n        .describe('Search query for mode=\"search\". Finds messages semantically similar to this text.'),\n      cursor: z\n        .string()\n        .min(1)\n        .optional()\n        .describe(\n          'A message ID to use as the pagination cursor. For mode=\"messages\", omit both cursor and threadId to browse the current thread. If only cursor is provided, it must belong to the current thread. Extract it from the start or end of an observation group range.',\n        ),\n      anchor: z\n        .enum(['start', 'end'])\n        .optional()\n        .describe(\n          'For mode=\"messages\" without a cursor, page from the start (oldest-first) or end (newest-first) of the thread. Defaults to \"start\".',\n        ),\n      page: z\n        .number()\n        .int()\n        .min(-50)\n        .max(50)\n        .optional()\n        .describe(\n          'Pagination offset. For messages: positive pages move forward from cursor, negative move backward. For threads: page number (0-indexed). 0 is treated as 1 for messages.',\n        ),\n      limit: z\n        .number()\n        .int()\n        .positive()\n        .max(20)\n        .optional()\n        .describe('Maximum number of items to return per page. Defaults to 20.'),\n      detail: z\n        .enum(['low', 'high'])\n        .optional()\n        .describe(\n          'Detail level for messages. \"low\" (default) returns truncated text and tool names. \"high\" returns full content with tool args/results.',\n        ),\n      partType: z\n        .enum(['text', 'tool-call', 'tool-result', 'reasoning', 'image', 'file'])\n        .optional()\n        .describe('Filter results to only include parts of this type. Only applies to mode=\"messages\".'),\n      toolName: z\n        .string()\n        .min(1)\n        .optional()\n        .describe(\n          'Filter results to only include tool-call and tool-result parts matching this tool name. Only applies to mode=\"messages\".',\n        ),\n      partIndex: z\n        .number()\n        .int()\n        .min(0)\n        .optional()\n        .describe(\n          'Fetch a single part from the cursor message by its positional index. When provided, returns only that part at high detail. Indices are shown as [p0], [p1], etc. in recall results.',\n        ),\n    }),\n    execute: async (\n      {\n        mode,\n        query,\n        cursor,\n        threadId: explicitThreadId,\n        anchor,\n        page,\n        limit,\n        detail,\n        partType,\n        toolName,\n        partIndex,\n        before,\n        after,\n      }: {\n        mode?: 'messages' | 'threads' | 'search';\n        query?: string;\n        cursor?: string;\n        threadId?: string;\n        anchor?: 'start' | 'end';\n        page?: number;\n        limit?: number;\n        detail?: RecallDetail;\n        partType?: 'text' | 'tool-call' | 'tool-result' | 'reasoning' | 'image' | 'file';\n        toolName?: string;\n        partIndex?: number;\n        before?: string;\n        after?: string;\n      },\n      context,\n    ) => {\n      const memory = (context as any)?.memory as RecallMemory | undefined;\n      const currentThreadId = context?.agent?.threadId;\n      const resourceId = context?.agent?.resourceId;\n      const resolvedExplicitThreadId = explicitThreadId === 'current' ? currentThreadId : explicitThreadId;\n\n      if (!memory) {\n        throw new Error('Memory instance is required for recall');\n      }\n\n      if (explicitThreadId === 'current' && !currentThreadId) {\n        throw new Error('Could not resolve current thread.');\n      }\n\n      // Search mode\n      if (mode === 'search') {\n        if (!query) {\n          throw new Error('query is required for mode=\"search\"');\n        }\n        if (!resourceId) {\n          throw new Error('Resource ID is required for recall');\n        }\n        return searchMessagesForResource({\n          memory,\n          resourceId,\n          currentThreadId: currentThreadId || undefined,\n          query,\n          topK: limit ?? 10,\n          before,\n          after,\n          threadScope: !isResourceScope ? currentThreadId || undefined : resolvedExplicitThreadId || undefined,\n        });\n      }\n\n      // Thread listing mode\n      if (mode === 'threads') {\n        const requestedCurrentThread = explicitThreadId === 'current';\n\n        // Thread scope: return current thread info only\n        if (!isResourceScope || requestedCurrentThread) {\n          if (!currentThreadId || !memory.getThreadById) {\n            return { error: 'Could not resolve current thread.' };\n          }\n          const thread = await memory.getThreadById({ threadId: currentThreadId });\n          if (!thread) {\n            return { error: 'Could not resolve current thread.' };\n          }\n          if (isResourceScope && resourceId && thread.resourceId !== resourceId) {\n            throw new Error('Thread does not belong to the active resource');\n          }\n          return {\n            threads: `- **${thread.title || '(untitled)'}** ← current\\n  id: ${thread.id}\\n  updated: ${formatTimestamp(thread.updatedAt)} | created: ${formatTimestamp(thread.createdAt)}`,\n            count: 1,\n            page: 0,\n            hasMore: false,\n          };\n        }\n        if (!resourceId) {\n          throw new Error('Resource ID is required for recall');\n        }\n        return listThreadsForResource({\n          memory,\n          resourceId,\n          currentThreadId: currentThreadId || '',\n          page: page ?? 0,\n          limit: limit ?? 20,\n          before,\n          after,\n        });\n      }\n\n      const usedDefaultThreadId = isResourceScope && !explicitThreadId && !cursor && Boolean(currentThreadId);\n      const defaultThreadNote = usedDefaultThreadId\n        ? `threadId wasn't passed so used default ${currentThreadId}.\\n\\n`\n        : '';\n      const effectiveThreadId = explicitThreadId || (usedDefaultThreadId ? 'current' : undefined);\n      const resolvedThreadId = effectiveThreadId === 'current' ? currentThreadId : effectiveThreadId;\n      const hasExplicitThreadId = typeof resolvedThreadId === 'string' && resolvedThreadId.length > 0;\n      const hasCursor = typeof cursor === 'string' && cursor.length > 0;\n\n      if (!hasExplicitThreadId && !hasCursor) {\n        throw new Error('Either cursor or threadId is required for mode=\"messages\"');\n      }\n\n      let targetThreadId: string | undefined;\n      let threadScope: string | undefined;\n\n      if (!isResourceScope) {\n        targetThreadId = currentThreadId;\n        threadScope = currentThreadId || undefined;\n      } else if (hasExplicitThreadId) {\n        if (!resourceId) {\n          throw new Error('Resource ID is required for recall');\n        }\n        if (!memory.getThreadById) {\n          throw new Error('Memory instance cannot verify thread access for recall');\n        }\n\n        const thread = await memory.getThreadById({ threadId: resolvedThreadId! });\n        if (!thread || thread.resourceId !== resourceId) {\n          throw new Error('Thread does not belong to the active resource');\n        }\n\n        targetThreadId = thread.id;\n        threadScope = thread.id;\n      } else {\n        targetThreadId = currentThreadId;\n        threadScope = currentThreadId || undefined;\n      }\n\n      if (hasCursor && !hasExplicitThreadId && !currentThreadId) {\n        if (!isResourceScope) {\n          throw new Error('Current thread is required when browsing by cursor');\n        }\n\n        const resolved = await resolveCursorMessage(memory, cursor!, { resourceId });\n        if ('hint' in resolved) {\n          return {\n            messages: resolved.hint,\n            count: 0,\n            cursor: cursor!,\n            page: page ?? 1,\n            limit: Math.min(limit ?? 20, 20),\n            detail: detail ?? 'low',\n            hasNextPage: false,\n            hasPrevPage: false,\n            truncated: false,\n            tokenOffset: 0,\n          };\n        }\n\n        targetThreadId = resolved.threadId;\n      }\n\n      if (!targetThreadId) {\n        throw new Error('Thread ID is required for recall');\n      }\n\n      // No cursor — read from the start of the thread\n      if (!cursor) {\n        const result = await recallThreadFromStart({\n          memory,\n          threadId: targetThreadId,\n          resourceId: isResourceScope ? resourceId : undefined,\n          page: page ?? 1,\n          limit: limit ?? 20,\n          detail: detail ?? 'low',\n          partType,\n          toolName,\n          anchor: anchor ?? 'start',\n        });\n\n        if (defaultThreadNote) {\n          return { ...result, messages: `${defaultThreadNote}${result.messages}` };\n        }\n\n        return result;\n      }\n\n      // Single-part fetch mode\n      if (partIndex !== undefined && partIndex !== null) {\n        return recallPart({\n          memory,\n          threadId: targetThreadId,\n          resourceId: isResourceScope ? resourceId : undefined,\n          cursor,\n          partIndex,\n          threadScope,\n        });\n      }\n\n      return recallMessages({\n        memory,\n        threadId: targetThreadId,\n        resourceId: isResourceScope ? resourceId : undefined,\n        cursor,\n        page,\n        limit,\n        detail: detail ?? 'low',\n        partType,\n        toolName,\n        threadScope,\n      });\n    },\n  });\n};\n","import type { MemoryConfigInternal } from '@mastra/core/memory';\nimport { isStandardSchemaWithJSON, toStandardSchema } from '@mastra/core/schema';\nimport type { PublicSchema, StandardSchemaWithJSON } from '@mastra/core/schema';\nimport { createTool } from '@mastra/core/tools';\nimport { standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport { z } from 'zod';\n\n/**\n * Deep merges two objects, with special handling for null values (delete) and arrays (replace).\n * - Object properties are recursively merged\n * - null values in the update will delete the corresponding property\n * - Arrays are replaced entirely (not merged element-by-element)\n * - Primitive values are overwritten\n */\nexport function deepMergeWorkingMemory(\n  existing: Record<string, unknown> | null | undefined,\n  update: Record<string, unknown> | null | undefined,\n): Record<string, unknown> {\n  // Handle null/undefined/empty updates - preserve existing or return empty object\n  if (!update || typeof update !== 'object' || Object.keys(update).length === 0) {\n    return existing && typeof existing === 'object' ? { ...existing } : {};\n  }\n\n  if (!existing || typeof existing !== 'object') {\n    return update;\n  }\n\n  const result: Record<string, unknown> = { ...existing };\n\n  for (const key of Object.keys(update)) {\n    const updateValue = update[key];\n    const existingValue = result[key];\n\n    // null means delete the property\n    if (updateValue === null) {\n      delete result[key];\n    }\n    // Arrays are replaced entirely (too complex to diff/merge arrays of objects)\n    else if (Array.isArray(updateValue)) {\n      result[key] = updateValue;\n    }\n    // Recursively merge nested objects\n    else if (\n      typeof updateValue === 'object' &&\n      updateValue !== null &&\n      typeof existingValue === 'object' &&\n      existingValue !== null &&\n      !Array.isArray(existingValue)\n    ) {\n      result[key] = deepMergeWorkingMemory(\n        existingValue as Record<string, unknown>,\n        updateValue as Record<string, unknown>,\n      );\n    }\n    // Primitive values or new properties: just set them\n    else {\n      result[key] = updateValue;\n    }\n  }\n\n  return result;\n}\n\nfunction stripNullsFromOptional(value: unknown, schema: Record<string, unknown>): unknown {\n  if (Array.isArray(value)) {\n    const itemSchema = (schema.items as Record<string, unknown>) ?? {};\n    return value.map(item => stripNullsFromOptional(item, itemSchema));\n  }\n\n  if (typeof value === 'object' && value !== null) {\n    const properties = (schema.properties as Record<string, Record<string, unknown>>) ?? {};\n    const required = (schema.required as string[]) ?? [];\n    const result: Record<string, unknown> = {};\n\n    for (const [key, propertyValue] of Object.entries(value as Record<string, unknown>)) {\n      if (propertyValue === null && !required.includes(key)) {\n        continue;\n      }\n\n      result[key] = stripNullsFromOptional(propertyValue, properties[key] ?? {});\n    }\n\n    return result;\n  }\n\n  return value;\n}\n\nexport const updateWorkingMemoryTool = (memoryConfig?: MemoryConfigInternal) => {\n  const schema = memoryConfig?.workingMemory?.schema;\n\n  // Default input schema for markdown-based working memory\n  let inputSchema: PublicSchema<{ memory: any }> = z.object({\n    memory: z\n      .string()\n      .describe(`The Markdown formatted working memory content to store. This MUST be a string. Never pass an object.`),\n  });\n\n  if (schema) {\n    // Convert the schema to StandardSchemaWithJSON first\n    const standardSchema: StandardSchemaWithJSON = isStandardSchemaWithJSON(schema) ? schema : toStandardSchema(schema);\n\n    // Get JSON schema using .output() since this describes the structure the LLM should produce,\n    // then convert to Zod for runtime validation of the tool's inputSchema\n    const jsonSchema = standardSchemaToJSONSchema(standardSchema, { io: 'input' });\n    delete jsonSchema.$schema;\n\n    const wrappedSchema = toStandardSchema<{ memory: any }>({\n      $schema: 'http://json-schema.org/draft-07/schema#',\n      type: 'object',\n      description: 'The JSON formatted working memory content to store.',\n      properties: {\n        memory: jsonSchema,\n      },\n      required: ['memory'],\n    });\n\n    inputSchema = {\n      '~standard': {\n        version: 1,\n        vendor: 'mastra',\n        validate: (value: unknown) => {\n          const wrappedResult = wrappedSchema['~standard'].validate(value);\n\n          if (wrappedResult instanceof Promise) {\n            return wrappedResult.then(result => {\n              if (!('issues' in result) || !result.issues) {\n                return result;\n              }\n\n              if (!value || typeof value !== 'object' || Array.isArray(value) || 'memory' in value) {\n                return result;\n              }\n\n              return wrappedSchema['~standard'].validate({\n                memory: stripNullsFromOptional(value, jsonSchema as Record<string, unknown>),\n              });\n            });\n          }\n\n          if (!('issues' in wrappedResult) || !wrappedResult.issues) {\n            return wrappedResult;\n          }\n\n          // Older models, especially AI SDK v4 / LanguageModel v1, sometimes return the\n          // inner memory object without the required top-level `memory` wrapper.\n          if (!value || typeof value !== 'object' || Array.isArray(value) || 'memory' in value) {\n            return wrappedResult;\n          }\n\n          return wrappedSchema['~standard'].validate({\n            memory: stripNullsFromOptional(value, jsonSchema as Record<string, unknown>),\n          });\n        },\n        jsonSchema: {\n          input: props => wrappedSchema['~standard'].jsonSchema.input(props),\n          output: props => wrappedSchema['~standard'].jsonSchema.output(props),\n        },\n      },\n    } as StandardSchemaWithJSON<{ memory: any }>;\n  }\n\n  // For schema-based working memory, we use merge semantics\n  // For template-based (Markdown), we use replace semantics (existing behavior)\n  const usesMergeSemantics = Boolean(schema);\n\n  const description = schema\n    ? `Update the working memory with new information. Data is merged with existing memory - only include fields you want to add or update. To preserve existing data, omit the field entirely. Arrays are replaced entirely when provided, so pass the complete array or omit it to keep the existing values.`\n    : `Update the working memory with new information. Any data not included will be overwritten. Always pass data as string to the memory field. Never pass an object.`;\n\n  return createTool({\n    id: 'update-working-memory',\n    description,\n    inputSchema,\n    execute: async (inputData: { memory: any }, context) => {\n      const threadId = context?.agent?.threadId;\n      const resourceId = context?.agent?.resourceId;\n\n      // Memory can be accessed via context.memory (when agent is part of Mastra instance)\n      // or context.memory (when agent is standalone with memory passed directly)\n      const memory = (context as any)?.memory;\n\n      if (!memory) {\n        throw new Error('Memory instance is required for working memory updates');\n      }\n\n      const scope = memoryConfig?.workingMemory?.scope || 'resource';\n      if (scope === 'thread' && !threadId) {\n        throw new Error('Thread ID is required for thread-scoped working memory updates');\n      }\n      if (scope === 'resource' && !resourceId) {\n        throw new Error('Resource ID is required for resource-scoped working memory updates');\n      }\n\n      if (threadId) {\n        let thread = await memory.getThreadById({ threadId });\n\n        if (!thread) {\n          thread = await memory.createThread({\n            threadId,\n            resourceId,\n            memoryConfig,\n          });\n        }\n\n        if (thread.resourceId && resourceId && thread.resourceId !== resourceId) {\n          throw new Error(`Thread with id ${threadId} resourceId does not match the current resourceId ${resourceId}`);\n        }\n      }\n\n      let workingMemory: string;\n\n      if (usesMergeSemantics) {\n        // Schema-based: fetch existing, merge, save\n        const existingRaw = await memory.getWorkingMemory({\n          threadId,\n          resourceId,\n          memoryConfig,\n        });\n\n        let existingData: Record<string, unknown> | null = null;\n        if (existingRaw) {\n          try {\n            existingData = typeof existingRaw === 'string' ? JSON.parse(existingRaw) : existingRaw;\n          } catch {\n            // If existing data is not valid JSON, start fresh\n            existingData = null;\n          }\n        }\n\n        // Handle case where LLM passes empty object or no memory field\n        const memoryInput = inputData.memory;\n        if (memoryInput === undefined || memoryInput === null) {\n          // No data to update - return existing data unchanged\n          return { success: true, message: 'No memory data provided, existing memory unchanged.' };\n        }\n\n        let newData: unknown;\n        if (typeof memoryInput === 'string') {\n          try {\n            newData = JSON.parse(memoryInput);\n          } catch (parseError) {\n            const errorMessage = parseError instanceof Error ? parseError.message : String(parseError);\n            throw new Error(\n              `Failed to parse working memory input as JSON: ${errorMessage}. ` +\n                `Raw input: ${memoryInput.length > 500 ? memoryInput.slice(0, 500) + '...' : memoryInput}`,\n            );\n          }\n        } else {\n          newData = memoryInput;\n        }\n\n        const mergedData = deepMergeWorkingMemory(existingData, newData as Record<string, unknown>);\n        workingMemory = JSON.stringify(mergedData);\n      } else {\n        // Template-based (Markdown): use existing replace semantics\n        const memoryInput = inputData.memory;\n        workingMemory = typeof memoryInput === 'string' ? memoryInput : JSON.stringify(memoryInput);\n\n        // Validate that we're not replacing good data with an empty template\n        // This prevents accidental data loss when the LLM returns just the template\n        const existingRaw = await memory.getWorkingMemory({\n          threadId,\n          resourceId,\n          memoryConfig,\n        });\n\n        if (existingRaw) {\n          const template = await memory.getWorkingMemoryTemplate({ memoryConfig });\n          if (template?.content) {\n            // Normalize whitespace for comparison\n            const normalizedNew = workingMemory.replace(/\\s+/g, ' ').trim();\n            const normalizedTemplate = template.content.replace(/\\s+/g, ' ').trim();\n            const normalizedExisting = existingRaw.replace(/\\s+/g, ' ').trim();\n\n            // If the new content is essentially the empty template and we have meaningful existing data\n            if (normalizedNew === normalizedTemplate && normalizedExisting !== normalizedTemplate) {\n              return {\n                success: false,\n                message:\n                  'Attempted to replace existing working memory with empty template. Update skipped to prevent data loss.',\n              };\n            }\n          }\n        }\n      }\n\n      // Use the updateWorkingMemory method which handles both thread and resource scope\n      await memory.updateWorkingMemory({\n        threadId,\n        resourceId,\n        workingMemory,\n        memoryConfig,\n      });\n\n      return { success: true };\n    },\n  });\n};\n\nexport const __experimental_updateWorkingMemoryToolVNext = (config: MemoryConfigInternal) => {\n  return createTool({\n    id: 'update-working-memory',\n    description: 'Update the working memory with new information.',\n    inputSchema: z.object({\n      newMemory: z\n        .string()\n        .optional()\n        .describe(\n          `The ${config.workingMemory?.schema ? 'JSON' : 'Markdown'} formatted working memory content to store`,\n        ),\n      searchString: z\n        .string()\n        .optional()\n        .describe(\n          \"The working memory string to find. Will be replaced with the newMemory string. If this is omitted or doesn't exist, the newMemory string will be appended to the end of your working memory. Replacing single lines at a time is encouraged for greater accuracy. If updateReason is not 'append-new-memory', this search string must be provided or the tool call will be rejected.\",\n        ),\n      updateReason: z\n        .enum(['append-new-memory', 'clarify-existing-memory', 'replace-irrelevant-memory'])\n        .optional()\n        .describe(\n          \"The reason you're updating working memory. Passing any value other than 'append-new-memory' requires a searchString to be provided. Defaults to append-new-memory\",\n        ),\n    }),\n    execute: async (\n      inputData: {\n        newMemory?: string;\n        searchString?: string;\n        updateReason?: 'append-new-memory' | 'clarify-existing-memory' | 'replace-irrelevant-memory';\n      },\n      context,\n    ) => {\n      const threadId = context?.agent?.threadId;\n      const resourceId = context?.agent?.resourceId;\n\n      // Memory can be accessed via context.memory (when agent is part of Mastra instance)\n      // or context.memory (when agent is standalone with memory passed directly)\n      const memory = (context as any)?.memory;\n\n      if (!memory) {\n        throw new Error('Memory instance is required for working memory updates');\n      }\n\n      const scope = config.workingMemory?.scope || 'resource';\n      if (scope === 'thread' && !threadId) {\n        throw new Error('Thread ID is required for thread-scoped working memory updates');\n      }\n      if (scope === 'resource' && !resourceId) {\n        throw new Error('Resource ID is required for resource-scoped working memory updates');\n      }\n\n      if (threadId) {\n        let thread = await memory.getThreadById({ threadId });\n\n        if (!thread) {\n          thread = await memory.createThread({\n            threadId,\n            resourceId,\n            memoryConfig: config,\n          });\n        }\n\n        if (thread.resourceId && resourceId && thread.resourceId !== resourceId) {\n          throw new Error(`Thread with id ${threadId} resourceId does not match the current resourceId ${resourceId}`);\n        }\n      }\n\n      const workingMemory = inputData.newMemory || '';\n      if (!inputData.updateReason) inputData.updateReason = `append-new-memory`;\n\n      if (\n        inputData.searchString &&\n        config.workingMemory?.scope === `resource` &&\n        inputData.updateReason === `replace-irrelevant-memory`\n      ) {\n        // don't allow replacements due to something not being relevant to the current conversation\n        // if there's no searchString, then we will append.\n        inputData.searchString = undefined;\n      }\n\n      if (inputData.updateReason === `append-new-memory` && inputData.searchString) {\n        // do not find/replace when append-new-memory is selected\n        // some models get confused and pass a search string even when they don't want to replace it.\n        // TODO: maybe they're trying to add new info after the search string?\n        inputData.searchString = undefined;\n      }\n\n      if (inputData.updateReason !== `append-new-memory` && !inputData.searchString) {\n        return {\n          success: false,\n          reason: `updateReason was ${inputData.updateReason} but no searchString was provided. Unable to replace undefined with \"${inputData.newMemory}\"`,\n        };\n      }\n\n      // Use the new updateWorkingMemory method which handles both thread and resource scope\n      const result = await memory!.__experimental_updateWorkingMemoryVNext({\n        threadId,\n        resourceId,\n        workingMemory: workingMemory,\n        searchString: inputData.searchString,\n        memoryConfig: config,\n      });\n\n      if (result) {\n        return result;\n      }\n\n      return { success: true };\n    },\n  });\n};\n","import { embedMany } from '@internal/ai-sdk-v4';\nimport type { TextPart } from '@internal/ai-sdk-v4';\nimport { embedMany as embedManyV5 } from '@internal/ai-sdk-v5';\nimport { embedMany as embedManyV6 } from '@internal/ai-v6';\nimport { MessageList } from '@mastra/core/agent';\nimport type { MastraDBMessage } from '@mastra/core/agent';\n\nimport { coreFeatures } from '@mastra/core/features';\nimport { MastraMemory } from '@mastra/core/memory';\nimport type {\n  MemoryConfigInternal,\n  SharedMemoryConfig,\n  StorageThreadType,\n  WorkingMemoryTemplate,\n  MessageDeleteInput,\n  ObservationalMemoryOptions,\n  MemoryConfig,\n} from '@mastra/core/memory';\nimport { SpanType, EntityType } from '@mastra/core/observability';\nimport type { ObservabilityContext, MemoryOperationAttributes } from '@mastra/core/observability';\nimport type {\n  InputProcessor,\n  InputProcessorOrWorkflow,\n  OutputProcessor,\n  OutputProcessorOrWorkflow,\n} from '@mastra/core/processors';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type {\n  StorageListThreadsInput,\n  StorageListThreadsOutput,\n  StorageListMessagesInput,\n  MemoryStorage,\n  StorageCloneThreadInput,\n  StorageCloneThreadOutput,\n  ThreadCloneMetadata,\n  ObservationalMemoryRecord,\n  BufferedObservationChunk,\n} from '@mastra/core/storage';\nimport type { ToolAction } from '@mastra/core/tools';\nimport { generateEmptyFromSchema } from '@mastra/core/utils';\nimport type { VectorFilter } from '@mastra/core/vector';\nimport { isStandardSchemaWithJSON, toStandardSchema } from '@mastra/schema-compat/schema';\nimport { Mutex } from 'async-mutex';\nimport type { JSONSchema7 } from 'json-schema';\nimport xxhash from 'xxhash-wasm';\nimport type { ObservationalMemory, ObservationalMemoryConfig } from './processors/observational-memory';\nimport { recallTool } from './tools/om-tools';\nimport {\n  updateWorkingMemoryTool,\n  __experimental_updateWorkingMemoryToolVNext,\n  deepMergeWorkingMemory,\n} from './tools/working-memory';\n\nexport {\n  ModelByInputTokens,\n  type ModelByInputTokensConfig,\n} from './processors/observational-memory/model-by-input-tokens';\n\n/**\n * Normalize a `boolean | object` observational memory config.\n * Returns the options object if enabled, undefined if disabled.\n * Inlined here to avoid importing runtime exports that don't exist on older @mastra/core versions.\n */\ntype MemoryObservationalMemoryOptions = Omit<ObservationalMemoryOptions, 'model' | 'observation' | 'reflection'> & {\n  model?: ObservationalMemoryConfig['model'];\n  observation?: ObservationalMemoryConfig['observation'];\n  reflection?: ObservationalMemoryConfig['reflection'];\n  activateAfterIdle?: ObservationalMemoryConfig['activateAfterIdle'];\n  activateOnProviderChange?: ObservationalMemoryConfig['activateOnProviderChange'];\n  temporalMarkers?: boolean;\n};\n\ntype MemoryOptions = Omit<MemoryConfigInternal, 'observationalMemory'> & {\n  observationalMemory?: boolean | MemoryObservationalMemoryOptions;\n};\n\ntype MemoryConstructorConfig = Omit<SharedMemoryConfig, 'options'> & {\n  options?: MemoryOptions;\n};\n\ntype RuntimeMemoryConfig = Omit<MemoryConfig, 'observationalMemory'> & {\n  observationalMemory?: boolean | MemoryObservationalMemoryOptions;\n};\n\ntype NormalizedObservationalMemoryConfig = MemoryObservationalMemoryOptions & {\n  retrieval?: boolean | { vector?: boolean; scope?: 'thread' | 'resource' };\n};\n\n/*\n * Compatibility note: the working-memory and system-reminder helpers below are\n * intentionally copied from @mastra/core instead of imported from\n * @mastra/core/memory. @mastra/memory's peer range permits older core versions\n * that do not export these newer helper names, and importing them can crash a\n * published memory build during ESM instantiation before user code runs.\n *\n * Until v2 can tighten the peer contract, keep these copies manually in sync\n * with packages/core/src/memory/working-memory-utils.ts and\n * packages/core/src/memory/system-reminders.ts. Those source files also carry\n * compatibility notes that point back here.\n */\nconst WORKING_MEMORY_START_TAG = '<working_memory>';\nconst WORKING_MEMORY_END_TAG = '</working_memory>';\nconst LEGACY_SYSTEM_REMINDER_METADATA_KEY = 'dynamicAgentsMdReminder';\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n\nexport function extractWorkingMemoryTags(text: string): string[] | null {\n  const results: string[] = [];\n  let pos = 0;\n\n  while (pos < text.length) {\n    const start = text.indexOf(WORKING_MEMORY_START_TAG, pos);\n    if (start === -1) break;\n\n    const end = text.indexOf(WORKING_MEMORY_END_TAG, start + WORKING_MEMORY_START_TAG.length);\n    if (end === -1) break;\n\n    results.push(text.substring(start, end + WORKING_MEMORY_END_TAG.length));\n    pos = end + WORKING_MEMORY_END_TAG.length;\n  }\n\n  return results.length > 0 ? results : null;\n}\n\nexport function removeWorkingMemoryTags(text: string): string {\n  let result = '';\n  let pos = 0;\n\n  while (pos < text.length) {\n    const start = text.indexOf(WORKING_MEMORY_START_TAG, pos);\n    if (start === -1) {\n      result += text.substring(pos);\n      break;\n    }\n\n    result += text.substring(pos, start);\n\n    const end = text.indexOf(WORKING_MEMORY_END_TAG, start + WORKING_MEMORY_START_TAG.length);\n    if (end === -1) {\n      result += text.substring(start);\n      break;\n    }\n\n    pos = end + WORKING_MEMORY_END_TAG.length;\n  }\n\n  return result;\n}\n\nexport function extractWorkingMemoryContent(text: string): string | null {\n  const start = text.indexOf(WORKING_MEMORY_START_TAG);\n  if (start === -1) return null;\n\n  const contentStart = start + WORKING_MEMORY_START_TAG.length;\n  const end = text.indexOf(WORKING_MEMORY_END_TAG, contentStart);\n  if (end === -1) return null;\n\n  return text.substring(contentStart, end);\n}\n\nfunction isSystemReminderMessage(message: MastraDBMessage): boolean {\n  if (message.role !== 'user' || !isRecord(message.content)) {\n    return false;\n  }\n\n  const metadata = message.content.metadata;\n  if (isRecord(metadata) && (isRecord(metadata.systemReminder) || LEGACY_SYSTEM_REMINDER_METADATA_KEY in metadata)) {\n    return true;\n  }\n\n  const firstTextPart = message.content.parts.find(part => part.type === 'text');\n  return typeof firstTextPart?.text === 'string' && firstTextPart.text.startsWith('<system-reminder');\n}\n\nfunction filterSystemReminderMessages(\n  messages: MastraDBMessage[],\n  includeSystemReminders?: boolean,\n): MastraDBMessage[] {\n  if (includeSystemReminders) {\n    return messages;\n  }\n\n  return messages.filter(message => !isSystemReminderMessage(message));\n}\n\nfunction normalizeObservationalMemoryConfig(\n  config: boolean | MemoryObservationalMemoryOptions | undefined,\n): NormalizedObservationalMemoryConfig | undefined {\n  if (config === true) return { model: 'google/gemini-2.5-flash' };\n  if (config === false || config === undefined) return undefined;\n  if (typeof config === 'object' && config.enabled === false) return undefined;\n  return config as NormalizedObservationalMemoryConfig;\n}\n\n// Re-export for testing purposes\nexport { deepMergeWorkingMemory };\n\n// Average characters per token based on OpenAI's tokenization\nconst CHARS_PER_TOKEN = 4;\n\nconst DEFAULT_MESSAGE_RANGE = { before: 1, after: 1 } as const;\nconst DEFAULT_TOP_K = 4;\nconst VECTOR_DELETE_BATCH_SIZE = 100;\n\n/**\n * Concrete implementation of MastraMemory that adds support for thread configuration\n * and message injection.\n */\nexport class Memory extends MastraMemory {\n  private _omEngine: Promise<ObservationalMemory | null> | undefined;\n\n  /** The shared ObservationalMemory engine. Lazily created on first access. */\n  get omEngine(): Promise<ObservationalMemory | null> {\n    if (!this._omEngine) {\n      this._omEngine = this._initOMEngine();\n    }\n    return this._omEngine;\n  }\n\n  constructor(config: MemoryConstructorConfig = {}) {\n    super({ name: 'Memory', ...config } as { name: string } & SharedMemoryConfig);\n\n    const mergedConfig = this.getMergedThreadConfig({\n      workingMemory: config.options?.workingMemory || {\n        // these defaults are now set inside @mastra/core/memory in getMergedThreadConfig.\n        // In a future release we can remove it from this block - for now if we remove it\n        // and someone bumps @mastra/memory without bumping @mastra/core the defaults wouldn't exist yet\n        enabled: false,\n        template: this.defaultWorkingMemoryTemplate,\n      },\n      observationalMemory: config.options?.observationalMemory as ObservationalMemoryOptions | boolean | undefined,\n    });\n    this.threadConfig = mergedConfig;\n\n    // Validate retrieval vector config at construction time\n    const omConfig = normalizeObservationalMemoryConfig(mergedConfig.observationalMemory);\n    if (omConfig?.retrieval && typeof omConfig.retrieval === 'object' && omConfig.retrieval.vector) {\n      if (!this.vector) {\n        throw new Error(\n          '`retrieval: { vector: true }` requires a vector store. Pass a `vector` option to your Memory instance.',\n        );\n      }\n      if (!this.embedder) {\n        throw new Error(\n          '`retrieval: { vector: true }` requires an embedder. Pass an `embedder` option to your Memory instance.',\n        );\n      }\n    }\n  }\n\n  /**\n   * Gets the memory storage domain, throwing if not available.\n   */\n  protected async getMemoryStore(): Promise<MemoryStorage> {\n    const store = await this.storage.getStore('memory');\n    if (!store) {\n      throw new Error(`Memory storage domain is not available on ${this.storage.constructor.name}`);\n    }\n    return store;\n  }\n\n  async listMessagesByResourceId(args: {\n    resourceId: string;\n    perPage?: number | false;\n    page?: number;\n    orderBy?: { field?: 'createdAt'; direction?: 'ASC' | 'DESC' };\n    filter?: {\n      dateRange?: {\n        start?: Date;\n        end?: Date;\n        startExclusive?: boolean;\n        endExclusive?: boolean;\n      };\n    };\n    include?: Array<{\n      id: string;\n      threadId?: string;\n      withPreviousMessages?: number;\n      withNextMessages?: number;\n    }>;\n  }): Promise<{ messages: MastraDBMessage[]; total: number; page: number; perPage: number | false; hasMore: boolean }> {\n    const memoryStore = await this.getMemoryStore();\n    return memoryStore.listMessagesByResourceId(args);\n  }\n\n  protected async validateThreadIsOwnedByResource(threadId: string, resourceId: string, config: MemoryConfigInternal) {\n    const resourceScope =\n      (typeof config?.semanticRecall === 'object' && config?.semanticRecall?.scope !== `thread`) ||\n      config.semanticRecall === true;\n\n    const thread = await this.getThreadById({ threadId });\n\n    // For resource-scoped semantic recall, we don't need to validate that the specific thread exists\n    // because we're searching across all threads for the resource\n    if (!thread && !resourceScope) {\n      throw new Error(`No thread found with id ${threadId}`);\n    }\n\n    // If thread exists, validate it belongs to the correct resource\n    if (thread && thread.resourceId !== resourceId) {\n      throw new Error(\n        `Thread with id ${threadId} is for resource with id ${thread.resourceId} but resource ${resourceId} was queried.`,\n      );\n    }\n  }\n\n  private createMemorySpan(\n    operationType: MemoryOperationAttributes['operationType'],\n    observabilityContext?: Partial<ObservabilityContext>,\n    input?: any,\n    attributes?: Partial<MemoryOperationAttributes>,\n  ) {\n    const currentSpan = observabilityContext?.tracingContext?.currentSpan;\n    if (!currentSpan) return undefined;\n    return currentSpan.createChildSpan({\n      type: SpanType.MEMORY_OPERATION,\n      name: `memory: ${operationType}`,\n      entityType: EntityType.MEMORY,\n      entityName: 'Memory',\n      input,\n      attributes: { operationType, ...attributes },\n    });\n  }\n\n  async recall(\n    args: StorageListMessagesInput & {\n      threadConfig?: MemoryConfigInternal;\n      vectorSearchString?: string;\n      includeSystemReminders?: boolean;\n      threadId: string;\n      observabilityContext?: Partial<ObservabilityContext>;\n    },\n  ): Promise<{\n    messages: MastraDBMessage[];\n    usage?: { tokens: number };\n    total: number;\n    page: number;\n    perPage: number | false;\n    hasMore: boolean;\n  }> {\n    const {\n      threadId,\n      resourceId,\n      perPage: perPageArg,\n      page,\n      orderBy,\n      threadConfig,\n      vectorSearchString,\n      includeSystemReminders,\n      filter,\n    } = args;\n    const config = this.getMergedThreadConfig(threadConfig || {});\n    const semanticRecallEnabled = Boolean(config.semanticRecall);\n\n    const span = this.createMemorySpan(\n      'recall',\n      args.observabilityContext,\n      { threadId, resourceId, vectorSearchString },\n      {\n        semanticRecallEnabled,\n        lastMessages: config.lastMessages,\n      },\n    );\n\n    try {\n      if (resourceId) await this.validateThreadIsOwnedByResource(threadId, resourceId, config);\n\n      // Use perPage from args if provided, otherwise use threadConfig.lastMessages\n      const perPage = perPageArg !== undefined ? perPageArg : config.lastMessages;\n\n      // lastMessages: false means \"disable conversation history entirely\".\n      // When the resolved perPage is false from config (not an explicit caller override),\n      // return empty messages. This prevents recall() from treating false as \"no limit\"\n      // and returning ALL messages when the user intended to disable history.\n      const historyDisabledByConfig = config.lastMessages === false && perPageArg === undefined;\n\n      // When limiting messages (perPage !== false) without explicit orderBy, we need to:\n      // 1. Query DESC to get the NEWEST messages (not oldest)\n      // 2. Reverse results to restore chronological order for the LLM\n      // Without this fix, \"lastMessages: 64\" returns the OLDEST 64 messages, not the last 64.\n      const shouldGetNewestAndReverse = !orderBy && perPage !== false;\n      const effectiveOrderBy = shouldGetNewestAndReverse\n        ? { field: 'createdAt' as const, direction: 'DESC' as const }\n        : orderBy;\n\n      const vectorResults: {\n        id: string;\n        score: number;\n        metadata?: Record<string, any>;\n        vector?: number[];\n      }[] = [];\n\n      // Log memory recall parameters, excluding potentially large schema objects\n      this.logger.debug('Memory recall', {\n        threadId,\n        perPage,\n        page,\n        orderBy: effectiveOrderBy,\n        hasWorkingMemorySchema: Boolean(config.workingMemory?.schema),\n        workingMemoryEnabled: config.workingMemory?.enabled,\n        semanticRecallEnabled,\n        historyDisabledByConfig,\n      });\n\n      const defaultRange = DEFAULT_MESSAGE_RANGE;\n      const defaultTopK = DEFAULT_TOP_K;\n\n      const vectorConfig =\n        typeof config?.semanticRecall === `boolean`\n          ? {\n              topK: defaultTopK,\n              messageRange: defaultRange,\n            }\n          : {\n              topK: config?.semanticRecall?.topK ?? defaultTopK,\n              messageRange: config?.semanticRecall?.messageRange ?? defaultRange,\n            };\n\n      const resourceScope =\n        (typeof config?.semanticRecall === 'object' && config?.semanticRecall?.scope !== `thread`) ||\n        config.semanticRecall === true;\n\n      // Guard: If resource-scoped semantic recall is enabled but no resourceId is provided, throw an error\n      if (resourceScope && !resourceId && config?.semanticRecall && vectorSearchString) {\n        throw new Error(\n          `Memory error: Resource-scoped semantic recall is enabled but no resourceId was provided. ` +\n            `Either provide a resourceId or explicitly set semanticRecall.scope to 'thread'.`,\n        );\n      }\n\n      let usage: { tokens: number } | undefined;\n\n      // If history is disabled and there's no semantic recall to perform, return empty immediately\n      if (historyDisabledByConfig && (!config.semanticRecall || !vectorSearchString || !this.vector)) {\n        const result = {\n          messages: [],\n          usage: undefined,\n          total: 0,\n          page: page ?? 0,\n          perPage: 0,\n          hasMore: false,\n        };\n        span?.end({ output: { success: true }, attributes: { messageCount: 0 } });\n        return result;\n      }\n\n      if (config?.semanticRecall && vectorSearchString && this.vector) {\n        const result = await this.embedMessageContent(vectorSearchString!);\n        usage = result.usage;\n        const { embeddings, dimension } = result;\n        const { indexName } = await this.createEmbeddingIndex(dimension, config);\n\n        await Promise.all(\n          embeddings.map(async embedding => {\n            if (typeof this.vector === `undefined`) {\n              throw new Error(\n                `Tried to query vector index ${indexName} but this Memory instance doesn't have an attached vector db.`,\n              );\n            }\n\n            vectorResults.push(\n              ...(await this.vector.query({\n                indexName,\n                queryVector: embedding,\n                topK: vectorConfig.topK,\n                filter: resourceScope\n                  ? {\n                      resource_id: resourceId,\n                    }\n                  : {\n                      thread_id: threadId,\n                    },\n              })),\n            );\n          }),\n        );\n      }\n\n      // Get raw messages from storage\n      const memoryStore = await this.getMemoryStore();\n\n      // When history is disabled by config, use perPage: 0 so only semantic recall\n      // include results are returned (not the full message history)\n      const effectivePerPage = historyDisabledByConfig ? 0 : perPage;\n\n      const paginatedResult = await memoryStore.listMessages({\n        threadId,\n        resourceId,\n        perPage: effectivePerPage,\n        page,\n        orderBy: effectiveOrderBy,\n        filter,\n        ...(vectorResults?.length\n          ? {\n              include: vectorResults.map(r => ({\n                id: r.metadata?.message_id,\n                threadId: r.metadata?.thread_id,\n                withNextMessages:\n                  typeof vectorConfig.messageRange === 'number'\n                    ? vectorConfig.messageRange\n                    : vectorConfig.messageRange.after,\n                withPreviousMessages:\n                  typeof vectorConfig.messageRange === 'number'\n                    ? vectorConfig.messageRange\n                    : vectorConfig.messageRange.before,\n              })),\n            }\n          : {}),\n      });\n      // Reverse to restore chronological order if we queried DESC to get newest messages\n      const rawMessages = shouldGetNewestAndReverse ? paginatedResult.messages.reverse() : paginatedResult.messages;\n\n      const list = new MessageList({ threadId, resourceId }).add(rawMessages, 'memory');\n\n      // Always return mastra-db format (V2)\n      const messages = filterSystemReminderMessages(list.get.all.db(), includeSystemReminders);\n\n      const { total, page: resultPage, perPage: resultPerPage, hasMore } = paginatedResult;\n      const recallResult = { messages, usage, total, page: resultPage, perPage: resultPerPage, hasMore };\n\n      span?.end({\n        output: { success: true },\n        attributes: {\n          messageCount: messages.length,\n          embeddingTokens: usage?.tokens,\n          vectorResultCount: vectorResults.length,\n        },\n      });\n\n      return recallResult;\n    } catch (error) {\n      span?.error({ error: error as Error, endSpan: true });\n      throw error;\n    }\n  }\n\n  async getThreadById({ threadId }: { threadId: string }): Promise<StorageThreadType | null> {\n    const memoryStore = await this.getMemoryStore();\n    return memoryStore.getThreadById({ threadId });\n  }\n\n  async listThreads(args: StorageListThreadsInput): Promise<StorageListThreadsOutput> {\n    const memoryStore = await this.getMemoryStore();\n    return memoryStore.listThreads(args);\n  }\n\n  private async handleWorkingMemoryFromMetadata({\n    workingMemory,\n    resourceId,\n    memoryConfig,\n  }: {\n    workingMemory: string;\n    resourceId: string;\n    memoryConfig?: MemoryConfigInternal;\n  }): Promise<void> {\n    const config = this.getMergedThreadConfig(memoryConfig || {});\n\n    if (config.workingMemory?.enabled) {\n      const scope = config.workingMemory.scope || 'resource';\n\n      // For resource scope, update the resource's working memory\n      if (scope === 'resource' && resourceId) {\n        const memoryStore = await this.getMemoryStore();\n        await memoryStore.updateResource({\n          resourceId,\n          workingMemory,\n        });\n      }\n      // For thread scope, the metadata is already saved with the thread\n    }\n  }\n\n  async saveThread({\n    thread,\n    memoryConfig,\n  }: {\n    thread: StorageThreadType;\n    memoryConfig?: MemoryConfigInternal;\n  }): Promise<StorageThreadType> {\n    const memoryStore = await this.getMemoryStore();\n    const savedThread = await memoryStore.saveThread({ thread });\n\n    // Check if metadata contains workingMemory and working memory is enabled\n    if (thread.metadata?.workingMemory && typeof thread.metadata.workingMemory === 'string' && thread.resourceId) {\n      await this.handleWorkingMemoryFromMetadata({\n        workingMemory: thread.metadata.workingMemory,\n        resourceId: thread.resourceId,\n        memoryConfig,\n      });\n    }\n\n    return savedThread;\n  }\n\n  async updateThread({\n    id,\n    title,\n    metadata,\n    memoryConfig,\n  }: {\n    id: string;\n    title: string;\n    metadata: Record<string, unknown>;\n    memoryConfig?: MemoryConfigInternal;\n  }): Promise<StorageThreadType> {\n    const memoryStore = await this.getMemoryStore();\n    const updatedThread = await memoryStore.updateThread({\n      id,\n      title,\n      metadata,\n    });\n\n    // Check if metadata contains workingMemory and working memory is enabled\n    if (metadata?.workingMemory && typeof metadata.workingMemory === 'string' && updatedThread.resourceId) {\n      await this.handleWorkingMemoryFromMetadata({\n        workingMemory: metadata.workingMemory as string,\n        resourceId: updatedThread.resourceId,\n        memoryConfig,\n      });\n    }\n\n    return updatedThread;\n  }\n\n  async deleteThread(threadId: string): Promise<void> {\n    const memoryStore = await this.getMemoryStore();\n    await memoryStore.deleteThread({ threadId });\n    if (this.vector) {\n      void this.deleteThreadVectors(threadId);\n    }\n  }\n\n  /**\n   * Lists all vector indexes that match the memory messages prefix.\n   * Handles separator differences across vector store backends (e.g. '_' vs '-').\n   */\n  private async getMemoryVectorIndexes(): Promise<string[]> {\n    if (!this.vector) return [];\n    const separator = this.vector.indexSeparator ?? '_';\n    const prefix = `memory${separator}messages`;\n    const indexes = await this.vector.listIndexes();\n    return indexes.filter(name => name.startsWith(prefix));\n  }\n\n  /**\n   * Deletes all vector embeddings associated with a thread.\n   * This is called internally by deleteThread to clean up orphaned vectors.\n   *\n   * @param threadId - The ID of the thread whose vectors should be deleted\n   */\n  private async deleteThreadVectors(threadId: string): Promise<void> {\n    try {\n      const memoryIndexes = await this.getMemoryVectorIndexes();\n\n      await Promise.all(\n        memoryIndexes.map(async (indexName: string) => {\n          try {\n            await this.vector!.deleteVectors({\n              indexName,\n              filter: { thread_id: threadId },\n            });\n          } catch {\n            this.logger.debug('Failed to delete vectors for thread, skipping', { threadId, indexName });\n          }\n        }),\n      );\n    } catch {\n      this.logger.debug('Failed to clean up vectors for thread', { threadId });\n    }\n  }\n\n  async updateWorkingMemory({\n    threadId,\n    resourceId,\n    workingMemory,\n    memoryConfig,\n    observabilityContext,\n  }: {\n    threadId: string;\n    resourceId?: string;\n    workingMemory: string;\n    memoryConfig?: MemoryConfigInternal;\n    observabilityContext?: Partial<ObservabilityContext>;\n  }): Promise<void> {\n    const config = this.getMergedThreadConfig(memoryConfig || {});\n\n    if (!config.workingMemory?.enabled) {\n      throw new Error('Working memory is not enabled for this memory instance');\n    }\n\n    const span = this.createMemorySpan(\n      'update',\n      observabilityContext,\n      { threadId, resourceId },\n      {\n        workingMemoryEnabled: true,\n      },\n    );\n\n    try {\n      const scope = config.workingMemory.scope || 'resource';\n\n      // Guard: If resource-scoped working memory is enabled but no resourceId is provided, throw an error\n      if (scope === 'resource' && !resourceId) {\n        throw new Error(\n          `Memory error: Resource-scoped working memory is enabled but no resourceId was provided. ` +\n            `Either provide a resourceId or explicitly set workingMemory.scope to 'thread'.`,\n        );\n      }\n\n      // Use mutex to prevent race conditions when multiple concurrent calls update the same resource/thread\n      const mutexKey = scope === 'resource' ? `resource-${resourceId}` : `thread-${threadId}`;\n      const mutex = this.updateWorkingMemoryMutexes.has(mutexKey)\n        ? this.updateWorkingMemoryMutexes.get(mutexKey)!\n        : new Mutex();\n      this.updateWorkingMemoryMutexes.set(mutexKey, mutex);\n      const release = await mutex.acquire();\n\n      try {\n        const memoryStore = await this.getMemoryStore();\n        if (scope === 'resource' && resourceId) {\n          await memoryStore.updateResource({\n            resourceId,\n            workingMemory,\n          });\n        } else {\n          const thread = await this.getThreadById({ threadId });\n          if (!thread) {\n            throw new Error(`Thread ${threadId} not found`);\n          }\n\n          await memoryStore.updateThread({\n            id: threadId,\n            title: thread.title || '',\n            metadata: {\n              ...thread.metadata,\n              workingMemory,\n            },\n          });\n        }\n      } finally {\n        release();\n      }\n\n      span?.end({ output: { success: true } });\n    } catch (error) {\n      span?.error({ error: error as Error, endSpan: true });\n      throw error;\n    }\n  }\n\n  private updateWorkingMemoryMutexes = new Map<string, Mutex>();\n  /**\n   * @warning experimental! can be removed or changed at any time\n   */\n  async __experimental_updateWorkingMemoryVNext({\n    threadId,\n    resourceId,\n    workingMemory,\n    searchString,\n    memoryConfig,\n  }: {\n    threadId: string;\n    resourceId?: string;\n    workingMemory: string;\n    searchString?: string;\n    memoryConfig?: MemoryConfigInternal;\n  }): Promise<{ success: boolean; reason: string }> {\n    const config = this.getMergedThreadConfig(memoryConfig || {});\n\n    if (!config.workingMemory?.enabled) {\n      throw new Error('Working memory is not enabled for this memory instance');\n    }\n\n    // If the agent calls the update working memory tool multiple times simultaneously\n    // each call could overwrite the other call\n    // so get an in memory mutex to make sure this.getWorkingMemory() returns up to date data each time\n    const mutexKey =\n      memoryConfig?.workingMemory?.scope === `resource` ? `resource-${resourceId}` : `thread-${threadId}`;\n    const mutex = this.updateWorkingMemoryMutexes.has(mutexKey)\n      ? this.updateWorkingMemoryMutexes.get(mutexKey)!\n      : new Mutex();\n    this.updateWorkingMemoryMutexes.set(mutexKey, mutex);\n    const release = await mutex.acquire();\n\n    try {\n      const existingWorkingMemory = (await this.getWorkingMemory({ threadId, resourceId, memoryConfig })) || '';\n      const template = await this.getWorkingMemoryTemplate({ memoryConfig });\n\n      let reason = '';\n\n      const templateContent = typeof template?.content === 'string' ? template.content : null;\n\n      // Normalize content for comparison (handles whitespace variations)\n      // This catches template duplicates even when LLM returns slightly different whitespace\n      const normalizeForComparison = (str: string) => str.replace(/\\s+/g, ' ').trim();\n      const normalizedNewMemory = normalizeForComparison(workingMemory);\n      const normalizedTemplate = templateContent ? normalizeForComparison(templateContent) : '';\n\n      if (existingWorkingMemory) {\n        if (searchString && existingWorkingMemory?.includes(searchString)) {\n          workingMemory = existingWorkingMemory.replace(searchString, workingMemory);\n          reason = `found and replaced searchString with newMemory`;\n        } else if (\n          existingWorkingMemory.includes(workingMemory) ||\n          templateContent?.trim() === workingMemory.trim() ||\n          // Also check normalized versions to catch template variations with different whitespace\n          normalizedNewMemory === normalizedTemplate\n        ) {\n          return {\n            success: false,\n            reason: `attempted to insert duplicate data into working memory. this entry was skipped`,\n          };\n        } else {\n          // Before appending, check if the new content is essentially the empty template\n          // This prevents template duplication when the LLM sends the template again\n          if (normalizedNewMemory === normalizedTemplate) {\n            return {\n              success: false,\n              reason: `attempted to append empty template to working memory. this entry was skipped`,\n            };\n          }\n\n          if (searchString) {\n            reason = `attempted to replace working memory string that doesn't exist. Appending to working memory instead.`;\n          } else {\n            reason = `appended newMemory to end of working memory`;\n          }\n\n          workingMemory =\n            existingWorkingMemory +\n            `\n${workingMemory}`;\n        }\n      } else if (workingMemory === templateContent || normalizedNewMemory === normalizedTemplate) {\n        return {\n          success: false,\n          reason: `try again when you have data to add. newMemory was equal to the working memory template`,\n        };\n      } else {\n        reason = `started new working memory`;\n      }\n\n      // Remove empty template insertions which models sometimes duplicate\n      // Use both exact and normalized matching to catch variations\n      if (templateContent) {\n        workingMemory = workingMemory.replaceAll(templateContent, '');\n        // Also try to remove template with normalized line endings\n        const templateWithUnixLineEndings = templateContent.replace(/\\r\\n/g, '\\n');\n        const templateWithWindowsLineEndings = templateContent.replace(/\\n/g, '\\r\\n');\n        workingMemory = workingMemory.replaceAll(templateWithUnixLineEndings, '');\n        workingMemory = workingMemory.replaceAll(templateWithWindowsLineEndings, '');\n      }\n\n      const scope = config.workingMemory.scope || 'resource';\n\n      // Guard: If resource-scoped working memory is enabled but no resourceId is provided, throw an error\n      if (scope === 'resource' && !resourceId) {\n        throw new Error(\n          `Memory error: Resource-scoped working memory is enabled but no resourceId was provided. ` +\n            `Either provide a resourceId or explicitly set workingMemory.scope to 'thread'.`,\n        );\n      }\n\n      const memoryStore = await this.getMemoryStore();\n      if (scope === 'resource' && resourceId) {\n        // Update working memory in resource table\n        await memoryStore.updateResource({\n          resourceId,\n          workingMemory,\n        });\n\n        if (reason) {\n          return { success: true, reason };\n        }\n      } else {\n        // Update working memory in thread metadata (existing behavior)\n        const thread = await this.getThreadById({ threadId });\n        if (!thread) {\n          throw new Error(`Thread ${threadId} not found`);\n        }\n\n        await memoryStore.updateThread({\n          id: threadId,\n          title: thread.title || '',\n          metadata: {\n            ...thread.metadata,\n            workingMemory,\n          },\n        });\n      }\n\n      return { success: true, reason };\n    } catch (e) {\n      this.logger.error(e instanceof Error ? e.stack || e.message : JSON.stringify(e));\n      return { success: false, reason: 'Tool error.' };\n    } finally {\n      release();\n    }\n  }\n\n  protected chunkText(text: string, tokenSize = 4096) {\n    // Convert token size to character size with some buffer\n    const charSize = tokenSize * CHARS_PER_TOKEN;\n    const chunks: string[] = [];\n    let currentChunk = '';\n\n    // Split text into words to avoid breaking words\n    const words = text.split(/\\s+/);\n\n    for (const word of words) {\n      // Add space before word unless it's the first word in the chunk\n      const wordWithSpace = currentChunk ? ' ' + word : word;\n\n      // If adding this word would exceed the chunk size, start a new chunk\n      if (currentChunk.length + wordWithSpace.length > charSize) {\n        chunks.push(currentChunk);\n        currentChunk = word;\n      } else {\n        currentChunk += wordWithSpace;\n      }\n    }\n\n    // Add the final chunk if not empty\n    if (currentChunk) {\n      chunks.push(currentChunk);\n    }\n\n    return chunks;\n  }\n\n  private hasher = xxhash();\n\n  // embedding is computationally expensive so cache content -> embeddings/chunks\n  private embeddingCache = new Map<\n    number,\n    {\n      chunks: string[];\n      embeddings: Awaited<ReturnType<typeof embedMany>>['embeddings'];\n      usage?: { tokens: number };\n      dimension: number | undefined;\n    }\n  >();\n  private firstEmbed: Promise<any> | undefined;\n  protected async embedMessageContent(content: string) {\n    // use fast xxhash for lower memory usage. if we cache by content string we will store all messages in memory for the life of the process\n    const key = (await this.hasher).h32(content);\n    const cached = this.embeddingCache.get(key);\n    if (cached) {\n      this.logger.debug('Embedding cache hit', { contentHash: key, chunks: cached.chunks.length });\n      return cached;\n    }\n    const chunks = this.chunkText(content);\n\n    if (typeof this.embedder === `undefined`) {\n      throw new Error(`Tried to embed message content but this Memory instance doesn't have an attached embedder.`);\n    }\n    // for fastembed multiple initial calls to embed will fail if the model hasn't been downloaded yet.\n    const isFastEmbed = this.embedder.provider === `fastembed`;\n    if (isFastEmbed && this.firstEmbed instanceof Promise) {\n      // so wait for the first one\n      await this.firstEmbed;\n    }\n\n    let embedFn: typeof embedMany | typeof embedManyV5 | typeof embedManyV6;\n    const specVersion = this.embedder.specificationVersion;\n\n    switch (specVersion) {\n      case 'v3':\n        embedFn = embedManyV6;\n        break;\n      case 'v2':\n        embedFn = embedManyV5;\n        break;\n      default:\n        embedFn = embedMany;\n        break;\n    }\n\n    const promise = embedFn({\n      values: chunks,\n      maxRetries: 3,\n      // @ts-expect-error - embedder type mismatch\n      model: this.embedder,\n      ...(this.embedderOptions || {}),\n    });\n\n    if (isFastEmbed && !this.firstEmbed) this.firstEmbed = promise;\n    const { embeddings, usage } = await promise;\n\n    const result = {\n      embeddings,\n      chunks,\n      usage,\n      dimension: embeddings[0]?.length,\n    };\n    this.embeddingCache.set(key, result);\n    return result;\n  }\n\n  async saveMessages({\n    messages,\n    memoryConfig,\n    observabilityContext,\n  }: {\n    messages: MastraDBMessage[];\n    memoryConfig?: MemoryConfig | undefined;\n    observabilityContext?: Partial<ObservabilityContext>;\n  }): Promise<{ messages: MastraDBMessage[]; usage?: { tokens: number } }> {\n    const span = this.createMemorySpan('save', observabilityContext, undefined, {\n      messageCount: messages.length,\n    });\n\n    try {\n      // Then strip working memory tags from all messages\n      const updatedMessages = messages\n        .map(m => {\n          return this.updateMessageToHideWorkingMemoryV2(m);\n        })\n        .filter((m): m is MastraDBMessage => Boolean(m));\n\n      const config = this.getMergedThreadConfig(memoryConfig);\n\n      // Convert messages to MastraDBMessage format if needed\n      const dbMessages = new MessageList({\n        generateMessageId: () => this.generateId(),\n      })\n        .add(updatedMessages, 'memory')\n        .get.all.db();\n\n      const memoryStore = await this.getMemoryStore();\n      const result = await memoryStore.saveMessages({\n        messages: dbMessages,\n      });\n\n      let totalTokens = 0;\n\n      if (this.vector && config.semanticRecall) {\n        // Collect all embeddings first (embedding is CPU-bound, doesn't use pool connections)\n        const embeddingData: Array<{\n          embeddings: number[][];\n          metadata: Array<{ message_id: string; thread_id: string | undefined; resource_id: string | undefined }>;\n        }> = [];\n        let dimension: number | undefined;\n\n        // Process embeddings concurrently - this doesn't use DB connections\n        await Promise.all(\n          updatedMessages.map(async message => {\n            let textForEmbedding: string | null = null;\n\n            if (\n              message.content.content &&\n              typeof message.content.content === 'string' &&\n              message.content.content.trim() !== ''\n            ) {\n              textForEmbedding = message.content.content;\n            } else if (message.content.parts && message.content.parts.length > 0) {\n              // Extract text from all text parts, concatenate\n              const joined = message.content.parts\n                .filter(part => part.type === 'text')\n                .map(part => (part as TextPart).text)\n                .join(' ')\n                .trim();\n              if (joined) textForEmbedding = joined;\n            }\n\n            if (!textForEmbedding) return;\n\n            const result = await this.embedMessageContent(textForEmbedding);\n            dimension = result.dimension;\n            if (result.usage?.tokens) {\n              totalTokens += result.usage.tokens;\n            }\n\n            embeddingData.push({\n              embeddings: result.embeddings,\n              metadata: result.chunks.map(() => ({\n                message_id: message.id,\n                thread_id: message.threadId,\n                resource_id: message.resourceId,\n              })),\n            });\n          }),\n        );\n\n        // Batch all vectors into a single upsert call to avoid pool exhaustion\n        if (embeddingData.length > 0 && dimension !== undefined) {\n          if (typeof this.vector === `undefined`) {\n            throw new Error(`Tried to upsert embeddings but this Memory instance doesn't have an attached vector db.`);\n          }\n\n          const { indexName } = await this.createEmbeddingIndex(dimension, config);\n\n          // Flatten all embeddings and metadata into single arrays\n          const allVectors: number[][] = [];\n          const allMetadata: Array<{\n            message_id: string;\n            thread_id: string | undefined;\n            resource_id: string | undefined;\n          }> = [];\n\n          for (const data of embeddingData) {\n            allVectors.push(...data.embeddings);\n            allMetadata.push(...data.metadata);\n          }\n\n          await this.vector.upsert({\n            indexName,\n            vectors: allVectors,\n            metadata: allMetadata,\n          });\n        }\n      }\n\n      const saveResult = { ...result, usage: totalTokens > 0 ? { tokens: totalTokens } : undefined };\n\n      span?.end({\n        output: { success: true },\n        attributes: {\n          messageCount: dbMessages.length,\n          embeddingTokens: saveResult.usage?.tokens,\n          semanticRecallEnabled: Boolean(config.semanticRecall),\n        },\n      });\n\n      return saveResult;\n    } catch (error) {\n      span?.error({ error: error as Error, endSpan: true });\n      throw error;\n    }\n  }\n\n  protected updateMessageToHideWorkingMemoryV2(message: MastraDBMessage): MastraDBMessage | null {\n    const newMessage = { ...message };\n    // Only spread content if it's a proper V2 object to avoid corrupting non-object content\n    if (message.content && typeof message.content === 'object' && !Array.isArray(message.content)) {\n      newMessage.content = { ...message.content };\n    }\n\n    if (typeof newMessage.content?.content === 'string' && newMessage.content.content.length > 0) {\n      newMessage.content.content = removeWorkingMemoryTags(newMessage.content.content).trim();\n    }\n\n    if (Array.isArray(newMessage.content?.parts)) {\n      newMessage.content.parts = newMessage.content.parts\n        .filter(part => {\n          if (part?.type === 'tool-invocation') {\n            return part.toolInvocation?.toolName !== 'updateWorkingMemory';\n          }\n          return true;\n        })\n        .map(part => {\n          if (part?.type === 'text') {\n            const text = typeof part.text === 'string' ? part.text : '';\n            return {\n              ...part,\n              text: removeWorkingMemoryTags(text).trim(),\n            };\n          }\n          return part;\n        });\n\n      // If all parts were filtered out (e.g., only contained updateWorkingMemory tool calls),\n      // only skip the message when it also has no text content left.\n      if (newMessage.content.parts.length === 0) {\n        const hasContentText =\n          typeof newMessage.content.content === 'string' && newMessage.content.content.trim().length > 0;\n\n        if (!hasContentText) {\n          return null;\n        }\n      }\n    }\n\n    return newMessage;\n  }\n\n  protected parseWorkingMemory(text: string): string | null {\n    if (!this.threadConfig.workingMemory?.enabled) return null;\n\n    const content = extractWorkingMemoryContent(text);\n    return content?.trim() ?? null;\n  }\n\n  public async getWorkingMemory({\n    threadId,\n    resourceId,\n    memoryConfig,\n  }: {\n    threadId: string;\n    resourceId?: string;\n    memoryConfig?: MemoryConfigInternal;\n  }): Promise<string | null> {\n    const config = this.getMergedThreadConfig(memoryConfig || {});\n    if (!config.workingMemory?.enabled) {\n      return null;\n    }\n\n    const scope = config.workingMemory.scope || 'resource';\n    let workingMemoryData: string | null = null;\n\n    // Guard: If resource-scoped working memory is enabled but no resourceId is provided, throw an error\n    if (scope === 'resource' && !resourceId) {\n      throw new Error(\n        `Memory error: Resource-scoped working memory is enabled but no resourceId was provided. ` +\n          `Either provide a resourceId or explicitly set workingMemory.scope to 'thread'.`,\n      );\n    }\n\n    if (scope === 'resource' && resourceId) {\n      // Get working memory from resource table\n      const memoryStore = await this.getMemoryStore();\n      const resource = await memoryStore.getResourceById({ resourceId });\n      workingMemoryData = resource?.workingMemory || null;\n    } else {\n      // Get working memory from thread metadata (default behavior)\n      const thread = await this.getThreadById({ threadId });\n      workingMemoryData = thread?.metadata?.workingMemory as string;\n    }\n\n    if (!workingMemoryData) {\n      return null;\n    }\n\n    return workingMemoryData;\n  }\n\n  /**\n   * Gets the working memory template for the current memory configuration.\n   * Supports both ZodObject and JSONSchema7 schemas.\n   *\n   * @param memoryConfig - The memory configuration containing the working memory settings\n   * @returns The working memory template with format and content, or null if working memory is disabled\n   */\n  public async getWorkingMemoryTemplate({\n    memoryConfig,\n  }: {\n    memoryConfig?: MemoryConfigInternal;\n  }): Promise<WorkingMemoryTemplate | null> {\n    const config = this.getMergedThreadConfig(memoryConfig);\n\n    if (!config.workingMemory?.enabled) {\n      return null;\n    }\n\n    // Get thread from storage\n    if (config.workingMemory?.schema) {\n      try {\n        const schema = config.workingMemory.schema;\n        let convertedSchema: JSONSchema7;\n\n        // Convert any PublicSchema to StandardSchemaWithJSON, then extract JSON Schema\n        if (isStandardSchemaWithJSON(schema)) {\n          convertedSchema = schema['~standard'].jsonSchema.output({ target: 'draft-07' }) as JSONSchema7;\n        } else {\n          // Convert to standard schema first, then get JSON Schema\n          const standardSchema = toStandardSchema(schema);\n          convertedSchema = standardSchema['~standard'].jsonSchema.output({ target: 'draft-07' }) as JSONSchema7;\n        }\n\n        return { format: 'json', content: JSON.stringify(convertedSchema) };\n      } catch (error) {\n        this.logger.error('Error converting schema', error);\n        throw error;\n      }\n    }\n\n    // Return working memory from metadata\n    const memory = config.workingMemory.template || this.defaultWorkingMemoryTemplate;\n    return { format: 'markdown', content: memory.trim() };\n  }\n\n  public async getSystemMessage({\n    threadId,\n    resourceId,\n    memoryConfig,\n  }: {\n    threadId: string;\n    resourceId?: string;\n    memoryConfig?: MemoryConfigInternal;\n  }): Promise<string | null> {\n    const config = this.getMergedThreadConfig(memoryConfig);\n    if (!config.workingMemory?.enabled) {\n      return null;\n    }\n\n    const workingMemoryTemplate = await this.getWorkingMemoryTemplate({ memoryConfig });\n    const workingMemoryData = await this.getWorkingMemory({ threadId, resourceId, memoryConfig: config });\n\n    if (!workingMemoryTemplate) {\n      return null;\n    }\n\n    // In readOnly mode, provide context without tool instructions\n    if (config?.readOnly) {\n      return this.getReadOnlyWorkingMemoryInstruction({\n        template: workingMemoryTemplate,\n        data: workingMemoryData,\n      });\n    }\n\n    return this.isVNextWorkingMemoryConfig(memoryConfig)\n      ? this.__experimental_getWorkingMemoryToolInstructionVNext({\n          template: workingMemoryTemplate,\n          data: workingMemoryData,\n        })\n      : this.getWorkingMemoryToolInstruction({\n          template: workingMemoryTemplate,\n          data: workingMemoryData,\n        });\n  }\n\n  /**\n   * Get everything needed for an LLM call in one shot.\n   *\n   * Assembles the system message (observations + working memory), loads\n   * unobserved messages from storage, and returns them ready to use.\n   *\n   * @example\n   * ```ts\n   * const ctx = await memory.getContext({ threadId });\n   * const result = await generateText({\n   *   model: openai('gpt-4o'),\n   *   system: ctx.systemMessage,\n   *   messages: ctx.messages.map(toAiSdkMessage),\n   * });\n   * ```\n   */\n  public async getContext(opts: {\n    threadId: string;\n    resourceId?: string;\n    memoryConfig?: MemoryConfigInternal;\n  }): Promise<{\n    /** Fully-formed system message (observations + instructions + working memory), or undefined if none. */\n    systemMessage: string | undefined;\n    /** Messages for the LLM — unobserved messages if OM is active, or recent messages from history. */\n    messages: MastraDBMessage[];\n    /** Whether observations exist for this thread. */\n    hasObservations: boolean;\n    /** The OM record, if OM is active. */\n    omRecord: ObservationalMemoryRecord | null;\n    /** The om-continuation reminder message, if OM has observations. Caller decides where to place it. */\n    continuationMessage: MastraDBMessage | undefined;\n    /** Formatted context blocks from other threads (resource scope only). */\n    otherThreadsContext: string | undefined;\n  }> {\n    const { threadId, resourceId, memoryConfig } = opts;\n    const config = this.getMergedThreadConfig(memoryConfig);\n    const memoryStore = await this.getMemoryStore();\n\n    // Build system message parts\n    const systemParts: string[] = [];\n\n    // 1. OM observations system message\n    let hasObservations = false;\n    let omRecord: ObservationalMemoryRecord | null = null;\n    let continuationMessage: MastraDBMessage | undefined;\n    let otherThreadsContext: string | undefined;\n\n    const omEngine = await this.omEngine;\n    if (omEngine) {\n      omRecord = await omEngine.getRecord(threadId, resourceId);\n      if (omRecord?.activeObservations) {\n        hasObservations = true;\n\n        // For resource scope, load other threads' unobserved context\n        if (omEngine.scope === 'resource' && resourceId) {\n          otherThreadsContext = await omEngine.getOtherThreadsContext(resourceId, threadId);\n        }\n\n        const obsSystemMessage = await omEngine.buildContextSystemMessage({\n          threadId,\n          resourceId,\n          record: omRecord,\n          unobservedContextBlocks: otherThreadsContext,\n        });\n        if (obsSystemMessage) {\n          systemParts.push(obsSystemMessage);\n        }\n\n        // Build the continuation reminder message\n        const { OBSERVATION_CONTINUATION_HINT } = await import('./processors/observational-memory/constants');\n        continuationMessage = {\n          id: 'om-continuation',\n          role: 'user' as const,\n          createdAt: new Date(0),\n          content: {\n            format: 2 as const,\n            parts: [\n              {\n                type: 'text' as const,\n                text: `<system-reminder>${OBSERVATION_CONTINUATION_HINT}</system-reminder>`,\n              },\n            ],\n          },\n          threadId,\n          resourceId,\n        };\n      }\n    }\n\n    // 2. Working memory system message\n    const workingMemoryMessage = await this.getSystemMessage({ threadId, resourceId, memoryConfig: config });\n    if (workingMemoryMessage) {\n      systemParts.push(workingMemoryMessage);\n    }\n\n    // 3. Load messages — unobserved if OM is active, or recent N\n    let messages: MastraDBMessage[];\n    if (omEngine && omRecord) {\n      // OM is active: load unobserved messages.\n      // When lastObservedAt exists, load only messages after the boundary.\n      // When lastObservedAt is NULL (no observations yet), load ALL messages\n      // so the threshold check can fire on the full context.\n      const dateFilter = omRecord.lastObservedAt\n        ? { dateRange: { start: new Date(new Date(omRecord.lastObservedAt).getTime() + 1) } }\n        : undefined;\n\n      if (omEngine.scope === 'resource' && resourceId) {\n        const result = await memoryStore.listMessagesByResourceId({\n          resourceId,\n          orderBy: { field: 'createdAt', direction: 'ASC' },\n          perPage: false,\n          filter: dateFilter,\n        });\n        messages = result.messages;\n      } else {\n        const result = await memoryStore.listMessages({\n          threadId,\n          orderBy: { field: 'createdAt', direction: 'ASC' },\n          perPage: false,\n          filter: dateFilter,\n        });\n        messages = result.messages;\n      }\n    } else {\n      // No OM: load recent messages\n      const lastMessages = config.lastMessages;\n      if (lastMessages === false) {\n        messages = [];\n      } else {\n        const result = await memoryStore.listMessages({\n          threadId,\n          resourceId,\n          orderBy: { field: 'createdAt', direction: 'DESC' },\n          perPage: typeof lastMessages === 'number' ? lastMessages : undefined,\n        });\n        messages = result.messages.reverse(); // DESC → chronological order\n      }\n    }\n\n    return {\n      systemMessage: systemParts.length > 0 ? systemParts.join('\\n\\n') : undefined,\n      messages,\n      hasObservations,\n      omRecord,\n      continuationMessage,\n      otherThreadsContext,\n    };\n  }\n\n  /**\n   * Raw message upsert — persist messages to storage without embedding or working memory processing.\n   * Used by the processor to save sealed messages before firing a background buffer operation.\n   */\n  async persistMessages(messages: MastraDBMessage[]): Promise<void> {\n    if (messages.length === 0) return;\n    const memoryStore = await this.getMemoryStore();\n    await memoryStore.saveMessages({ messages });\n  }\n\n  /**\n   * One-time initialization of the shared ObservationalMemory engine.\n   * Called lazily by the `omEngine` getter on first access.\n   */\n  private async _initOMEngine(): Promise<ObservationalMemory | null> {\n    const omConfig = normalizeObservationalMemoryConfig(this.threadConfig.observationalMemory);\n    if (!omConfig) return null;\n\n    const memoryStore = await this.storage.getStore('memory');\n    if (!memoryStore || !memoryStore.supportsObservationalMemory) return null;\n\n    const coreSupportsOM = coreFeatures.has('observationalMemory');\n    if (!coreSupportsOM) {\n      throw new Error(\n        'Observational memory is enabled but the installed version of @mastra/core does not support it. ' +\n          'Please upgrade @mastra/core to a version that includes observational memory support.',\n      );\n    }\n\n    if (omConfig.observation?.bufferTokens !== false && !coreFeatures.has('asyncBuffering')) {\n      throw new Error(\n        'Observational memory async buffering is enabled by default but the installed version of @mastra/core does not support it. ' +\n          'Either upgrade @mastra/core, @mastra/memory, and your storage adapter (@mastra/libsql, @mastra/pg, or @mastra/mongodb) to the latest version, ' +\n          'or explicitly disable async buffering by setting `observation: { bufferTokens: false }` in your observationalMemory config.',\n      );\n    }\n\n    if (!coreFeatures.has('request-response-id-rotation')) {\n      throw new Error(\n        'Observational memory requires @mastra/core support for request-response-id-rotation. Please bump @mastra/core to a newer version.',\n      );\n    }\n\n    const { ObservationalMemory: OMClass } = await import('./processors/observational-memory');\n\n    const onIndexObservations = this.hasRetrievalSearch(omConfig.retrieval)\n      ? async (observation: {\n          text: string;\n          groupId: string;\n          range: string;\n          threadId: string;\n          resourceId: string;\n          observedAt?: Date;\n        }) => {\n          await this.indexObservation(observation);\n        }\n      : undefined;\n\n    return new OMClass({\n      storage: memoryStore,\n      scope: omConfig.scope,\n      retrieval: omConfig.retrieval,\n      activateAfterIdle: omConfig.activateAfterIdle,\n      activateOnProviderChange: omConfig.activateOnProviderChange,\n      shareTokenBudget: omConfig.shareTokenBudget,\n      model: omConfig.model,\n      onIndexObservations,\n      observation: omConfig.observation\n        ? {\n            model: omConfig.observation.model,\n            messageTokens: omConfig.observation.messageTokens,\n            modelSettings: omConfig.observation.modelSettings,\n            maxTokensPerBatch: omConfig.observation.maxTokensPerBatch,\n            providerOptions: omConfig.observation.providerOptions,\n            bufferTokens: omConfig.observation.bufferTokens,\n            bufferActivation: omConfig.observation.bufferActivation,\n            blockAfter: omConfig.observation.blockAfter,\n            previousObserverTokens: omConfig.observation.previousObserverTokens,\n            instruction: omConfig.observation.instruction,\n            threadTitle: omConfig.observation.threadTitle,\n          }\n        : undefined,\n      reflection: omConfig.reflection\n        ? {\n            model: omConfig.reflection.model,\n            observationTokens: omConfig.reflection.observationTokens,\n            modelSettings: omConfig.reflection.modelSettings,\n            providerOptions: omConfig.reflection.providerOptions,\n            bufferActivation: omConfig.reflection.bufferActivation,\n            blockAfter: omConfig.reflection.blockAfter,\n            instruction: omConfig.reflection.instruction,\n          }\n        : undefined,\n    });\n  }\n\n  public defaultWorkingMemoryTemplate = `\n# User Information\n- **First Name**: \n- **Last Name**: \n- **Location**: \n- **Occupation**: \n- **Interests**: \n- **Goals**: \n- **Events**: \n- **Facts**: \n- **Projects**: \n`;\n\n  protected getWorkingMemoryToolInstruction({\n    template,\n    data,\n  }: {\n    template: WorkingMemoryTemplate;\n    data: string | null;\n  }) {\n    const emptyWorkingMemoryTemplateObject =\n      template.format === 'json' ? generateEmptyFromSchema(template.content) : null;\n    const hasEmptyWorkingMemoryTemplateObject =\n      emptyWorkingMemoryTemplateObject && Object.keys(emptyWorkingMemoryTemplateObject).length > 0;\n\n    return `WORKING_MEMORY_SYSTEM_INSTRUCTION:\nStore and update any conversation-relevant information by calling the updateWorkingMemory tool. If information might be referenced again - store it!\n\nGuidelines:\n1. Store anything that could be useful later in the conversation\n2. Update proactively when information changes, no matter how small\n3. Use ${template.format === 'json' ? 'JSON' : 'Markdown'} format for all data\n4. Act naturally - don't mention this system to users. Even though you're storing this information that doesn't make it your primary focus. Do not ask them generally for \"information about yourself\"\n${\n  template.format !== 'json'\n    ? `5. IMPORTANT: When calling updateWorkingMemory, the only valid parameter is the memory field. DO NOT pass an object.\n6. IMPORTANT: ALWAYS pass the data you want to store in the memory field as a string. DO NOT pass an object.\n7. IMPORTANT: Data must only be sent as a string no matter which format is used.`\n    : ''\n}\n\n\n${\n  template.format !== 'json'\n    ? `<working_memory_template>\n${template.content}\n</working_memory_template>`\n    : ''\n}\n\n${hasEmptyWorkingMemoryTemplateObject ? 'When working with json data, the object format below represents the template:' : ''}\n${hasEmptyWorkingMemoryTemplateObject ? JSON.stringify(emptyWorkingMemoryTemplateObject) : ''}\n\n<working_memory_data>\n${data}\n</working_memory_data>\n\nNotes:\n- Update memory whenever referenced information changes\n- If you're unsure whether to store something, store it (eg if the user tells you information about themselves, call updateWorkingMemory immediately to update it)\n- This system is here so that you can maintain the conversation when your context window is very short. Update your working memory because you may need it to maintain the conversation without the full conversation history\n- Do not remove empty sections - you must include the empty sections along with the ones you're filling in\n- REMEMBER: the way you update your working memory is by calling the updateWorkingMemory tool with the entire ${template.format === 'json' ? 'JSON' : 'Markdown'} content. The system will store it for you. The user will not see it.\n- IMPORTANT: You MUST call updateWorkingMemory in every response to a prompt where you received relevant information.\n- IMPORTANT: Preserve the ${template.format === 'json' ? 'JSON' : 'Markdown'} formatting structure above while updating the content.`;\n  }\n\n  protected __experimental_getWorkingMemoryToolInstructionVNext({\n    template,\n    data,\n  }: {\n    template: WorkingMemoryTemplate;\n    data: string | null;\n  }) {\n    return `WORKING_MEMORY_SYSTEM_INSTRUCTION:\nStore and update any conversation-relevant information by calling the updateWorkingMemory tool.\n\nGuidelines:\n1. Store anything that could be useful later in the conversation\n2. Update proactively when information changes, no matter how small\n3. Use ${template.format === 'json' ? 'JSON' : 'Markdown'} format for all data\n4. Act naturally - don't mention this system to users. Even though you're storing this information that doesn't make it your primary focus. Do not ask them generally for \"information about yourself\"\n5. If your memory has not changed, you do not need to call the updateWorkingMemory tool. By default it will persist and be available for you in future interactions\n6. Information not being relevant to the current conversation is not a valid reason to replace or remove working memory information. Your working memory spans across multiple conversations and may be needed again later, even if it's not currently relevant.\n\n<working_memory_template>\n${template.content}\n</working_memory_template>\n\n<working_memory_data>\n${data}\n</working_memory_data>\n\nNotes:\n- Update memory whenever referenced information changes\n${\n  template.content !== this.defaultWorkingMemoryTemplate\n    ? `- Only store information if it's in the working memory template, do not store other information unless the user asks you to remember it, as that non-template information may be irrelevant`\n    : `- If you're unsure whether to store something, store it (eg if the user tells you information about themselves, call updateWorkingMemory immediately to update it)\n`\n}\n- This system is here so that you can maintain the conversation when your context window is very short. Update your working memory because you may need it to maintain the conversation without the full conversation history\n- REMEMBER: the way you update your working memory is by calling the updateWorkingMemory tool with the ${template.format === 'json' ? 'JSON' : 'Markdown'} content. The system will store it for you. The user will not see it.\n- IMPORTANT: You MUST call updateWorkingMemory in every response to a prompt where you received relevant information if that information is not already stored.\n- IMPORTANT: Preserve the ${template.format === 'json' ? 'JSON' : 'Markdown'} formatting structure above while updating the content.\n`;\n  }\n\n  /**\n   * Generate read-only working memory instructions.\n   * This provides the working memory context without any tool update instructions.\n   * Used when memory is in readOnly mode.\n   */\n  protected getReadOnlyWorkingMemoryInstruction({ data }: { template: WorkingMemoryTemplate; data: string | null }) {\n    return `WORKING_MEMORY_SYSTEM_INSTRUCTION (READ-ONLY):\nThe following is your working memory - persistent information about the user and conversation collected over previous interactions. This data is provided for context to help you maintain continuity.\n\n<working_memory_data>\n${data || 'No working memory data available.'}\n</working_memory_data>\n\nGuidelines:\n1. Use this information to provide personalized and contextually relevant responses\n2. Act naturally - don't mention this system to users. This information should inform your responses without being explicitly referenced\n3. This memory is read-only in the current session - you cannot update it\n\nNotes:\n- This system is here so that you can maintain the conversation when your context window is very short\n- The user will not see the working memory data directly`;\n  }\n\n  private isVNextWorkingMemoryConfig(config?: MemoryConfig): boolean {\n    if (!config?.workingMemory) return false;\n\n    const isMDWorkingMemory =\n      !(`schema` in config.workingMemory) &&\n      (typeof config.workingMemory.template === `string` || config.workingMemory.template) &&\n      config.workingMemory;\n\n    return Boolean(isMDWorkingMemory && isMDWorkingMemory.version === `vnext`);\n  }\n\n  private getObservationEmbeddingIndexName(dimensions?: number): string {\n    const defaultDimensions = 384;\n    const usedDimensions = dimensions ?? defaultDimensions;\n    const separator = this.vector?.indexSeparator ?? '_';\n    return `memory${separator}observations${separator}${usedDimensions}`;\n  }\n\n  private async createObservationEmbeddingIndex(dimensions?: number): Promise<{ indexName: string }> {\n    const defaultDimensions = 384;\n    const usedDimensions = dimensions ?? defaultDimensions;\n    const indexName = this.getObservationEmbeddingIndexName(dimensions);\n\n    if (typeof this.vector === `undefined`) {\n      throw new Error(\n        `Tried to create observation embedding index but no vector db is attached to this Memory instance.`,\n      );\n    }\n\n    await this.vector.createIndex({\n      indexName,\n      dimension: usedDimensions,\n    } as any);\n\n    return { indexName };\n  }\n\n  /**\n   * Search observation groups across threads by semantic similarity.\n   * Requires a vector store and embedder to be configured.\n   */\n  public async searchMessages({\n    query,\n    resourceId,\n    topK = 10,\n    filter,\n  }: {\n    query: string;\n    resourceId: string;\n    topK?: number;\n    filter?: {\n      threadId?: string;\n      observedAfter?: Date;\n      observedBefore?: Date;\n    };\n  }): Promise<{\n    results: Array<{\n      threadId: string;\n      score: number;\n      groupId?: string;\n      range?: string;\n      text?: string;\n      observedAt?: Date;\n    }>;\n  }> {\n    if (!this.vector) {\n      throw new Error('searchMessages requires a vector store. Configure vector and embedder on your Memory instance.');\n    }\n\n    const { embeddings, dimension } = await this.embedMessageContent(query);\n    const { indexName } = await this.createObservationEmbeddingIndex(dimension);\n\n    const vectorFilter: VectorFilter = { resource_id: resourceId };\n    if (filter?.threadId) {\n      vectorFilter.thread_id = filter.threadId;\n    }\n    if (filter?.observedAfter || filter?.observedBefore) {\n      vectorFilter.observed_at = {\n        ...(filter.observedAfter ? { $gt: filter.observedAfter.toISOString() } : {}),\n        ...(filter.observedBefore ? { $lt: filter.observedBefore.toISOString() } : {}),\n      };\n    }\n\n    const queryResults: Array<{\n      threadId: string;\n      score: number;\n      groupId?: string;\n      range?: string;\n      text?: string;\n      observedAt?: Date;\n    }> = [];\n\n    await Promise.all(\n      embeddings.map(async embedding => {\n        const results = await this.vector!.query({\n          indexName,\n          queryVector: embedding,\n          topK,\n          filter: vectorFilter,\n        });\n        for (const r of results) {\n          if (!r.metadata?.thread_id) {\n            continue;\n          }\n\n          const groupId = typeof r.metadata.group_id === 'string' ? r.metadata.group_id : undefined;\n          if (!groupId) {\n            continue;\n          }\n\n          queryResults.push({\n            threadId: r.metadata.thread_id,\n            score: r.score,\n            groupId,\n            range: typeof r.metadata.range === 'string' ? r.metadata.range : undefined,\n            text: typeof r.metadata.text === 'string' ? r.metadata.text : undefined,\n            observedAt:\n              typeof r.metadata.observed_at === 'string' || r.metadata.observed_at instanceof Date\n                ? new Date(r.metadata.observed_at)\n                : undefined,\n          });\n        }\n      }),\n    );\n\n    const bestByGroup = new Map<string, (typeof queryResults)[0]>();\n    for (const result of queryResults) {\n      if (!result.groupId) {\n        continue;\n      }\n\n      const existing = bestByGroup.get(result.groupId);\n      if (!existing || result.score > existing.score) {\n        bestByGroup.set(result.groupId, result);\n      }\n    }\n\n    const results = [...bestByGroup.values()].sort((a, b) => b.score - a.score);\n\n    return { results };\n  }\n\n  /**\n   * Index a single observation group into the observation vector store.\n   */\n  public async indexObservation({\n    text,\n    groupId,\n    range,\n    threadId,\n    resourceId,\n    observedAt,\n  }: {\n    text: string;\n    groupId: string;\n    range: string;\n    threadId: string;\n    resourceId: string;\n    observedAt?: Date;\n  }): Promise<void> {\n    if (!this.vector || !this.embedder) return;\n\n    const embedResult = await this.embedMessageContent(text);\n    if (embedResult.embeddings.length === 0 || embedResult.dimension === undefined) {\n      return;\n    }\n\n    const { indexName } = await this.createObservationEmbeddingIndex(embedResult.dimension);\n\n    await this.vector.upsert({\n      indexName,\n      vectors: embedResult.embeddings,\n      metadata: embedResult.chunks.map(chunk => ({\n        group_id: groupId,\n        range,\n        thread_id: threadId,\n        resource_id: resourceId,\n        observed_at: observedAt?.toISOString(),\n        text: chunk,\n      })),\n    });\n  }\n\n  /**\n   * Update per-record observational memory config overrides for a thread.\n   * The provided config is deep-merged, so you only need to specify fields you want to change.\n   *\n   * @example\n   * ```ts\n   * await memory.updateObservationalMemoryConfig({\n   *   threadId: 'thread-1',\n   *   config: {\n   *     observation: { messageTokens: 2000 },\n   *     reflection: { observationTokens: 8000 },\n   *   },\n   * });\n   * ```\n   */\n  public async updateObservationalMemoryConfig({\n    threadId,\n    resourceId,\n    config,\n  }: {\n    threadId: string;\n    resourceId?: string;\n    config: Record<string, unknown>;\n  }): Promise<void> {\n    const omEngine = await this.omEngine;\n    if (!omEngine) {\n      throw new Error('Observational memory is not enabled');\n    }\n    await omEngine.updateRecordConfig(threadId, resourceId, config);\n  }\n\n  /**\n   * Index a list of messages directly (without querying storage).\n   * Used by observe-time indexing to vectorize newly-observed messages.\n   */\n  private async indexMessagesList(messages: MastraDBMessage[]): Promise<void> {\n    if (!this.vector || !this.embedder) return;\n\n    const embeddingData: Array<{\n      embeddings: number[][];\n      metadata: Array<{ message_id: string; thread_id: string | undefined; resource_id: string | undefined }>;\n    }> = [];\n    let dimension: number | undefined;\n\n    await Promise.all(\n      messages.map(async message => {\n        let textForEmbedding: string | null = null;\n\n        if (\n          message.content.content &&\n          typeof message.content.content === 'string' &&\n          message.content.content.trim() !== ''\n        ) {\n          textForEmbedding = message.content.content;\n        } else if (message.content.parts && message.content.parts.length > 0) {\n          const joined = message.content.parts\n            .filter((part: any) => part.type === 'text')\n            .map((part: any) => part.text)\n            .join(' ')\n            .trim();\n          if (joined) textForEmbedding = joined;\n        }\n\n        if (!textForEmbedding) return;\n\n        const embedResult = await this.embedMessageContent(textForEmbedding);\n        dimension = embedResult.dimension;\n\n        embeddingData.push({\n          embeddings: embedResult.embeddings,\n          metadata: embedResult.chunks.map(() => ({\n            message_id: message.id,\n            thread_id: message.threadId,\n            resource_id: message.resourceId,\n          })),\n        });\n      }),\n    );\n\n    if (embeddingData.length > 0 && dimension !== undefined) {\n      const { indexName } = await this.createEmbeddingIndex(dimension);\n\n      const allVectors: number[][] = [];\n      const allMetadata: Array<{\n        message_id: string;\n        thread_id: string | undefined;\n        resource_id: string | undefined;\n      }> = [];\n\n      for (const data of embeddingData) {\n        allVectors.push(...data.embeddings);\n        allMetadata.push(...data.metadata);\n      }\n\n      await this.vector.upsert({\n        indexName,\n        vectors: allVectors,\n        metadata: allMetadata,\n      });\n    }\n  }\n\n  /**\n   * Check whether retrieval search (vector-based) is enabled.\n   * Returns true when `retrieval: { vector: true }` and Memory has vector + embedder configured.\n   */\n  hasRetrievalSearch(retrieval: ObservationalMemoryOptions['retrieval']): boolean {\n    if (!retrieval || retrieval === true) return false;\n    return !!retrieval.vector && !!this.vector && !!this.embedder;\n  }\n\n  public listTools(config?: MemoryConfigInternal): Record<string, ToolAction<any, any, any>> {\n    const mergedConfig = this.getMergedThreadConfig(config);\n    const tools: Record<string, ToolAction<any, any, any>> = {};\n\n    if (mergedConfig.workingMemory?.enabled && !mergedConfig.readOnly) {\n      tools.updateWorkingMemory = this.isVNextWorkingMemoryConfig(mergedConfig)\n        ? __experimental_updateWorkingMemoryToolVNext(mergedConfig)\n        : updateWorkingMemoryTool(mergedConfig);\n    }\n\n    const omConfig = normalizeObservationalMemoryConfig(mergedConfig.observationalMemory);\n    if (omConfig?.retrieval) {\n      const retrievalScope =\n        typeof omConfig.retrieval === 'object' ? (omConfig.retrieval.scope ?? 'resource') : 'resource';\n      tools.recall = recallTool(mergedConfig, { retrievalScope });\n    }\n\n    return tools;\n  }\n\n  /**\n   * Updates a list of messages and syncs the vector database for semantic recall.\n   * When message content is updated, the corresponding vector embeddings are also updated\n   * to ensure semantic recall stays in sync with the message content.\n   *\n   * @param messages - The list of messages to update (must include id, can include partial content)\n   * @param memoryConfig - Optional memory configuration to determine if semantic recall is enabled\n   * @returns The list of updated messages\n   */\n  public async updateMessages({\n    messages,\n    memoryConfig,\n  }: {\n    messages: (Partial<MastraDBMessage> & { id: string })[];\n    memoryConfig?: MemoryConfigInternal;\n  }): Promise<MastraDBMessage[]> {\n    if (messages.length === 0) return [];\n\n    const memoryStore = await this.getMemoryStore();\n    const config = this.getMergedThreadConfig(memoryConfig);\n\n    // Update vector database if semantic recall is enabled and any messages have content updates\n    if (this.vector && config.semanticRecall) {\n      const messagesWithContent = messages.filter(m => m.content !== undefined);\n\n      if (messagesWithContent.length > 0) {\n        // Get existing messages to obtain threadId and resourceId for vector metadata\n        const existingMessagesResult = await memoryStore.listMessagesById({\n          messageIds: messagesWithContent.map(m => m.id),\n        });\n        const existingMessagesMap = new Map(existingMessagesResult.messages.map(m => [m.id, m]));\n\n        // Collect embeddings for messages with new text content\n        const embeddingData: Array<{\n          embeddings: number[][];\n          metadata: Array<{ message_id: string; thread_id: string | undefined; resource_id: string | undefined }>;\n        }> = [];\n        let dimension: number | undefined;\n\n        // Track which messages will have new embeddings vs cleared content\n        const messageIdsWithNewEmbeddings = new Set<string>();\n        const messageIdsWithClearedContent = new Set<string>();\n\n        // Prepare new embeddings and track which messages need vector operations\n        await Promise.all(\n          messagesWithContent.map(async message => {\n            const existingMessage = existingMessagesMap.get(message.id);\n            if (!existingMessage) return;\n\n            // Extract text from the new content\n            let textForEmbedding: string | null = null;\n            const content = message.content;\n\n            if (content) {\n              if (\n                'content' in content &&\n                content.content &&\n                typeof content.content === 'string' &&\n                content.content.trim() !== ''\n              ) {\n                textForEmbedding = content.content;\n              } else if (\n                'parts' in content &&\n                content.parts &&\n                Array.isArray(content.parts) &&\n                content.parts.length > 0\n              ) {\n                // Extract text from all text parts, concatenate\n                const joined = (content.parts as any[])\n                  .filter(part => part?.type === 'text')\n                  .map(part => (part as TextPart).text)\n                  .join(' ')\n                  .trim();\n                if (joined) textForEmbedding = joined;\n              }\n            }\n\n            // If there's new text content, embed it\n            if (textForEmbedding) {\n              const result = await this.embedMessageContent(textForEmbedding);\n              dimension = result.dimension;\n\n              embeddingData.push({\n                embeddings: result.embeddings,\n                metadata: result.chunks.map(() => ({\n                  message_id: message.id,\n                  thread_id: existingMessage.threadId,\n                  resource_id: existingMessage.resourceId,\n                })),\n              });\n              messageIdsWithNewEmbeddings.add(message.id);\n            } else {\n              // Content is empty or has no text - mark for vector deletion only\n              messageIdsWithClearedContent.add(message.id);\n            }\n          }),\n        );\n\n        // Delete old vectors from all existing memory indexes for messages that need it:\n        // - Messages with cleared content: vectors must be removed (no new embeddings will replace them)\n        // - Messages with new embeddings: old vectors must be removed before upserting (may be in different indexes if embedding model changed)\n        const messageIdsNeedingDeletion = new Set([...messageIdsWithClearedContent, ...messageIdsWithNewEmbeddings]);\n\n        if (messageIdsNeedingDeletion.size > 0) {\n          try {\n            const memoryIndexes = await this.getMemoryVectorIndexes();\n            const idsToDelete = [...messageIdsNeedingDeletion];\n\n            await Promise.all(\n              memoryIndexes.map(async indexName => {\n                for (let i = 0; i < idsToDelete.length; i += VECTOR_DELETE_BATCH_SIZE) {\n                  const batch = idsToDelete.slice(i, i + VECTOR_DELETE_BATCH_SIZE);\n                  try {\n                    await this.vector!.deleteVectors({\n                      indexName,\n                      filter: { message_id: { $in: batch } },\n                    });\n                  } catch {\n                    this.logger.debug('Failed to delete vector batch, skipping', { indexName, batchOffset: i });\n                  }\n                }\n              }),\n            );\n          } catch {\n            this.logger.debug('Failed to clean up old vectors during message update');\n          }\n        }\n\n        // Upsert new embeddings if any\n        if (embeddingData.length > 0 && dimension !== undefined) {\n          const { indexName } = await this.createEmbeddingIndex(dimension, config);\n\n          // Flatten all embeddings and metadata into single arrays\n          const allVectors: number[][] = [];\n          const allMetadata: Array<{\n            message_id: string;\n            thread_id: string | undefined;\n            resource_id: string | undefined;\n          }> = [];\n\n          for (const data of embeddingData) {\n            allVectors.push(...data.embeddings);\n            allMetadata.push(...data.metadata);\n          }\n\n          await this.vector.upsert({\n            indexName,\n            vectors: allVectors,\n            metadata: allMetadata,\n          });\n        }\n      }\n    }\n\n    return memoryStore.updateMessages({ messages });\n  }\n\n  /**\n   * Deletes one or more messages\n   * @param input - Must be an array containing either:\n   *   - Message ID strings\n   *   - Message objects with 'id' properties\n   * @returns Promise that resolves when all messages are deleted\n   */\n  public async deleteMessages(\n    input: MessageDeleteInput,\n    observabilityContext?: Partial<ObservabilityContext>,\n  ): Promise<void> {\n    // Normalize input to messageIds before creating span to avoid leaking full message objects into traces\n    let messageIds: string[];\n\n    if (!Array.isArray(input)) {\n      throw new Error('Invalid input: must be an array of message IDs or message objects');\n    }\n\n    if (input.length === 0) {\n      return;\n    }\n\n    messageIds = input.map(item => {\n      if (typeof item === 'string') {\n        return item;\n      } else if (item && typeof item === 'object' && 'id' in item) {\n        return item.id;\n      } else {\n        throw new Error('Invalid input: array items must be strings or objects with an id property');\n      }\n    });\n\n    const invalidIds = messageIds.filter(id => !id || typeof id !== 'string');\n    if (invalidIds.length > 0) {\n      throw new Error('All message IDs must be non-empty strings');\n    }\n\n    const span = this.createMemorySpan('delete', observabilityContext, undefined, {\n      messageCount: messageIds.length,\n    });\n\n    try {\n      const memoryStore = await this.getMemoryStore();\n\n      await memoryStore.deleteMessages(messageIds);\n      if (this.vector) {\n        void this.deleteMessageVectors(messageIds);\n      }\n\n      span?.end({ output: { success: true }, attributes: { messageCount: messageIds.length } });\n    } catch (error) {\n      span?.error({ error: error as Error, endSpan: true });\n      throw error;\n    }\n  }\n\n  /**\n   * Deletes vector embeddings for specific messages.\n   * This is called internally by deleteMessages to clean up orphaned vectors.\n   *\n   * @param messageIds - The IDs of the messages whose vectors should be deleted\n   */\n  private async deleteMessageVectors(messageIds: string[]): Promise<void> {\n    try {\n      const memoryIndexes = await this.getMemoryVectorIndexes();\n\n      await Promise.all(\n        memoryIndexes.map(async (indexName: string) => {\n          for (let i = 0; i < messageIds.length; i += VECTOR_DELETE_BATCH_SIZE) {\n            const batch = messageIds.slice(i, i + VECTOR_DELETE_BATCH_SIZE);\n            try {\n              await this.vector!.deleteVectors({\n                indexName,\n                filter: { message_id: { $in: batch } },\n              });\n            } catch {\n              this.logger.debug('Failed to delete vector batch, skipping', { indexName, batchOffset: i });\n            }\n          }\n        }),\n      );\n    } catch {\n      this.logger.debug('Failed to clean up vectors for deleted messages');\n    }\n  }\n\n  /**\n   * Clone a thread and its messages to create a new independent thread.\n   * The cloned thread will have metadata tracking its source.\n   *\n   * If semantic recall is enabled, the cloned messages will also be embedded\n   * and added to the vector store for semantic search.\n   *\n   * @param args - Clone configuration options\n   * @param args.sourceThreadId - ID of the thread to clone\n   * @param args.newThreadId - ID for the new cloned thread (if not provided, a random UUID will be generated)\n   * @param args.resourceId - Resource ID for the new thread (defaults to source thread's resourceId)\n   * @param args.title - Title for the new cloned thread\n   * @param args.metadata - Additional metadata to merge with clone metadata\n   * @param args.options - Options for filtering which messages to include\n   * @param args.options.messageLimit - Maximum number of messages to copy (from most recent)\n   * @param args.options.messageFilter - Filter messages by date range or specific IDs\n   * @param memoryConfig - Optional memory configuration override\n   * @returns The newly created thread and the cloned messages\n   *\n   * @example\n   * ```typescript\n   * // Clone entire thread\n   * const { thread, clonedMessages } = await memory.cloneThread({\n   *   sourceThreadId: 'thread-123',\n   * });\n   *\n   * // Clone with custom ID\n   * const { thread, clonedMessages } = await memory.cloneThread({\n   *   sourceThreadId: 'thread-123',\n   *   newThreadId: 'my-custom-thread-id',\n   * });\n   *\n   * // Clone with message limit\n   * const { thread, clonedMessages } = await memory.cloneThread({\n   *   sourceThreadId: 'thread-123',\n   *   title: 'My cloned conversation',\n   *   options: {\n   *     messageLimit: 10, // Only clone last 10 messages\n   *   },\n   * });\n   *\n   * // Clone with date filter\n   * const { thread, clonedMessages } = await memory.cloneThread({\n   *   sourceThreadId: 'thread-123',\n   *   options: {\n   *     messageFilter: {\n   *       startDate: new Date('2024-01-01'),\n   *       endDate: new Date('2024-06-01'),\n   *     },\n   *   },\n   * });\n   * ```\n   */\n  public async cloneThread(\n    args: StorageCloneThreadInput,\n    memoryConfig?: MemoryConfigInternal,\n  ): Promise<StorageCloneThreadOutput> {\n    const memoryStore = await this.getMemoryStore();\n    const result = await memoryStore.cloneThread(args);\n    const config = this.getMergedThreadConfig(memoryConfig);\n\n    // Fetch source thread once for working memory and OM cloning\n    const sourceThread = await this.getThreadById({ threadId: args.sourceThreadId });\n    const sourceResourceId = sourceThread?.resourceId;\n\n    // Copy working memory from source thread to cloned thread.\n    // Thread-scoped: always copy since each thread has its own working memory.\n    // Resource-scoped: only copy when the clone uses a different resourceId (same resourceId shares memory naturally).\n    if (config.workingMemory?.enabled) {\n      const scope = config.workingMemory.scope || 'resource';\n      const shouldCopy =\n        scope === 'thread' || (scope === 'resource' && args.resourceId && args.resourceId !== sourceResourceId);\n\n      if (shouldCopy) {\n        const sourceWm = await this.getWorkingMemory({\n          threadId: args.sourceThreadId,\n          resourceId: sourceResourceId,\n          memoryConfig,\n        });\n        if (sourceWm) {\n          await this.updateWorkingMemory({\n            threadId: result.thread.id,\n            resourceId: result.thread.resourceId,\n            workingMemory: sourceWm,\n            memoryConfig,\n          });\n        }\n      }\n    }\n\n    // Clone observational memory if supported.\n    // Thread-scoped: always clone since each thread has its own OM.\n    // Resource-scoped: only clone when the resourceId changes (same resourceId shares OM naturally).\n    if (memoryStore.supportsObservationalMemory && sourceResourceId) {\n      try {\n        await this.cloneObservationalMemory(memoryStore, args.sourceThreadId, sourceResourceId, result);\n      } catch (error) {\n        // Rollback the already-persisted clone to avoid orphaned threads\n        try {\n          await memoryStore.deleteThread({ threadId: result.thread.id });\n        } catch (rollbackError) {\n          this.logger.error('Failed to rollback cloned thread after OM clone failure', rollbackError);\n        }\n        throw error;\n      }\n    }\n\n    // Embed cloned messages only after OM cloning succeeds, so rollback doesn't leave orphan vectors\n    if (this.vector && config.semanticRecall && result.clonedMessages.length > 0) {\n      await this.embedClonedMessages(result.clonedMessages, config);\n    }\n\n    return result;\n  }\n\n  /**\n   * Clone observational memory records when cloning a thread.\n   * Thread-scoped: always cloned to the new thread.\n   * Resource-scoped: cloned only when the resourceId changes (same resourceId shares OM naturally).\n   * All stored message/thread IDs are remapped to the cloned IDs.\n   */\n  private async cloneObservationalMemory(\n    memoryStore: MemoryStorage,\n    sourceThreadId: string,\n    sourceResourceId: string,\n    result: StorageCloneThreadOutput,\n  ): Promise<void> {\n    // Look up OM for thread-scoped first (threadId + resourceId), then resource-scoped (null + resourceId)\n    let sourceOM = await memoryStore.getObservationalMemory(sourceThreadId, sourceResourceId);\n    if (!sourceOM) {\n      sourceOM = await memoryStore.getObservationalMemory(null, sourceResourceId);\n    }\n    if (!sourceOM) return;\n\n    const clonedThreadId = result.thread.id;\n    const clonedResourceId = result.thread.resourceId;\n    const resourceChanged = clonedResourceId !== sourceResourceId;\n\n    // Resource-scoped OM with same resourceId: shared naturally, no clone needed\n    if (sourceOM.scope === 'resource' && !resourceChanged) return;\n\n    // Build source → clone message ID map\n    const messageIdMap = result.messageIdMap ?? {};\n    const hasher = await this.hasher;\n\n    const cloned = this.remapObservationalMemoryRecord(sourceOM, {\n      newThreadId: sourceOM.scope === 'thread' ? clonedThreadId : null,\n      newResourceId: clonedResourceId,\n      messageIdMap,\n      sourceThreadId: resourceChanged ? sourceThreadId : undefined,\n      clonedThreadId: resourceChanged ? clonedThreadId : undefined,\n      hasher: resourceChanged ? hasher : undefined,\n    });\n    const now = new Date();\n    cloned.id = crypto.randomUUID();\n    cloned.createdAt = now;\n    cloned.updatedAt = now;\n    await memoryStore.insertObservationalMemoryRecord(cloned);\n  }\n\n  /**\n   * Create a remapped copy of an OM record with new thread/message IDs.\n   */\n  private remapObservationalMemoryRecord(\n    record: ObservationalMemoryRecord,\n    opts: {\n      newThreadId: string | null;\n      newResourceId: string;\n      messageIdMap: Record<string, string>;\n      sourceThreadId?: string;\n      clonedThreadId?: string;\n      hasher?: Awaited<ReturnType<typeof xxhash>>;\n    },\n  ): ObservationalMemoryRecord {\n    const { newThreadId, newResourceId, messageIdMap, sourceThreadId, clonedThreadId, hasher } = opts;\n    const cloned: ObservationalMemoryRecord = { ...record };\n\n    cloned.threadId = newThreadId;\n    cloned.resourceId = newResourceId;\n\n    // Remap observedMessageIds — drop any IDs not present in the clone's message set\n    if (Array.isArray(cloned.observedMessageIds)) {\n      cloned.observedMessageIds = cloned.observedMessageIds\n        .map(id => messageIdMap[id])\n        .filter((id): id is string => Boolean(id));\n    } else {\n      cloned.observedMessageIds = undefined;\n    }\n\n    // Remap deprecated bufferedMessageIds\n    if (Array.isArray(cloned.bufferedMessageIds)) {\n      cloned.bufferedMessageIds = cloned.bufferedMessageIds\n        .map(id => messageIdMap[id])\n        .filter((id): id is string => Boolean(id));\n    } else {\n      cloned.bufferedMessageIds = undefined;\n    }\n\n    // Remap bufferedObservationChunks\n    if (Array.isArray(cloned.bufferedObservationChunks)) {\n      cloned.bufferedObservationChunks = cloned.bufferedObservationChunks.map(\n        (chunk: BufferedObservationChunk): BufferedObservationChunk => ({\n          ...chunk,\n          messageIds: Array.isArray(chunk.messageIds)\n            ? chunk.messageIds.map((id: string) => messageIdMap[id]).filter((id): id is string => Boolean(id))\n            : [],\n        }),\n      );\n    } else {\n      cloned.bufferedObservationChunks = undefined;\n    }\n\n    // For resource-scoped OM cloned to a new resource, remap thread tags in text fields\n    if (sourceThreadId && clonedThreadId && hasher) {\n      const sourceObscured = hasher.h32ToString(sourceThreadId);\n      const clonedObscured = hasher.h32ToString(clonedThreadId);\n\n      if (sourceObscured !== clonedObscured) {\n        const replaceThreadTags = (text: string | undefined): string | undefined => {\n          if (!text) return text;\n          return text.replaceAll(`<thread id=\"${sourceObscured}\">`, `<thread id=\"${clonedObscured}\">`);\n        };\n\n        cloned.activeObservations = replaceThreadTags(cloned.activeObservations) ?? '';\n        cloned.bufferedReflection = replaceThreadTags(cloned.bufferedReflection);\n\n        if (cloned.bufferedObservationChunks) {\n          cloned.bufferedObservationChunks = cloned.bufferedObservationChunks.map(\n            (chunk: BufferedObservationChunk): BufferedObservationChunk => ({\n              ...chunk,\n              observations: replaceThreadTags(chunk.observations) ?? chunk.observations,\n            }),\n          );\n        }\n      }\n    }\n\n    // Reset transient state flags\n    cloned.isObserving = false;\n    cloned.isReflecting = false;\n    cloned.isBufferingObservation = false;\n    cloned.isBufferingReflection = false;\n\n    return cloned;\n  }\n\n  /**\n   * Embed cloned messages for semantic recall.\n   * This is similar to the embedding logic in saveMessages but operates on already-saved messages.\n   */\n  private async embedClonedMessages(messages: MastraDBMessage[], config: MemoryConfigInternal): Promise<void> {\n    if (!this.vector || !this.embedder) {\n      return;\n    }\n\n    const embeddingData: Array<{\n      embeddings: number[][];\n      metadata: Array<{ message_id: string; thread_id: string | undefined; resource_id: string | undefined }>;\n    }> = [];\n    let dimension: number | undefined;\n\n    // Process embeddings concurrently\n    await Promise.all(\n      messages.map(async message => {\n        let textForEmbedding: string | null = null;\n\n        if (\n          message.content?.content &&\n          typeof message.content.content === 'string' &&\n          message.content.content.trim() !== ''\n        ) {\n          textForEmbedding = message.content.content;\n        } else if (message.content?.parts && message.content.parts.length > 0) {\n          // Extract text from all text parts, concatenate\n          const joined = message.content.parts\n            .filter((part: { type: string }) => part.type === 'text')\n            .map((part: { type: string; text?: string }) => (part as { type: string; text: string }).text)\n            .join(' ')\n            .trim();\n          if (joined) textForEmbedding = joined;\n        }\n\n        if (!textForEmbedding) return;\n\n        const result = await this.embedMessageContent(textForEmbedding);\n        dimension = result.dimension;\n\n        embeddingData.push({\n          embeddings: result.embeddings,\n          metadata: result.chunks.map(() => ({\n            message_id: message.id,\n            thread_id: message.threadId,\n            resource_id: message.resourceId,\n          })),\n        });\n      }),\n    );\n\n    // Batch all vectors into a single upsert call\n    if (embeddingData.length > 0 && dimension !== undefined) {\n      const { indexName } = await this.createEmbeddingIndex(dimension, config);\n\n      // Flatten all embeddings and metadata into single arrays\n      const allVectors: number[][] = [];\n      const allMetadata: Array<{\n        message_id: string;\n        thread_id: string | undefined;\n        resource_id: string | undefined;\n      }> = [];\n\n      for (const data of embeddingData) {\n        allVectors.push(...data.embeddings);\n        allMetadata.push(...data.metadata);\n      }\n\n      await this.vector.upsert({\n        indexName,\n        vectors: allVectors,\n        metadata: allMetadata,\n      });\n    }\n  }\n\n  /**\n   * Get the clone metadata from a thread if it was cloned from another thread.\n   *\n   * @param thread - The thread to check\n   * @returns The clone metadata if the thread is a clone, null otherwise\n   *\n   * @example\n   * ```typescript\n   * const thread = await memory.getThreadById({ threadId: 'thread-123' });\n   * const cloneInfo = memory.getCloneMetadata(thread);\n   * if (cloneInfo) {\n   *   console.log(`This thread was cloned from ${cloneInfo.sourceThreadId}`);\n   * }\n   * ```\n   */\n  public getCloneMetadata(thread: StorageThreadType | null): ThreadCloneMetadata | null {\n    if (!thread?.metadata?.clone) {\n      return null;\n    }\n    return thread.metadata.clone as ThreadCloneMetadata;\n  }\n\n  /**\n   * Check if a thread is a clone of another thread.\n   *\n   * @param thread - The thread to check\n   * @returns True if the thread is a clone, false otherwise\n   *\n   * @example\n   * ```typescript\n   * const thread = await memory.getThreadById({ threadId: 'thread-123' });\n   * if (memory.isClone(thread)) {\n   *   console.log('This is a cloned thread');\n   * }\n   * ```\n   */\n  public isClone(thread: StorageThreadType | null): boolean {\n    return this.getCloneMetadata(thread) !== null;\n  }\n\n  /**\n   * Get the source thread that a cloned thread was created from.\n   *\n   * @param threadId - ID of the cloned thread\n   * @returns The source thread if found, null if the thread is not a clone or source doesn't exist\n   *\n   * @example\n   * ```typescript\n   * const sourceThread = await memory.getSourceThread('cloned-thread-123');\n   * if (sourceThread) {\n   *   console.log(`Original thread: ${sourceThread.title}`);\n   * }\n   * ```\n   */\n  public async getSourceThread(threadId: string): Promise<StorageThreadType | null> {\n    const thread = await this.getThreadById({ threadId });\n    const cloneMetadata = this.getCloneMetadata(thread);\n\n    if (!cloneMetadata) {\n      return null;\n    }\n\n    return this.getThreadById({ threadId: cloneMetadata.sourceThreadId });\n  }\n\n  /**\n   * List all threads that were cloned from a specific source thread.\n   *\n   * @param sourceThreadId - ID of the source thread\n   * @param resourceId - Optional resource ID to filter by\n   * @returns Array of threads that are clones of the source thread\n   *\n   * @example\n   * ```typescript\n   * const clones = await memory.listClones('original-thread-123', 'user-456');\n   * console.log(`Found ${clones.length} clones of this thread`);\n   * ```\n   */\n  public async listClones(sourceThreadId: string, resourceId?: string): Promise<StorageThreadType[]> {\n    // If resourceId is provided, use it to scope the search\n    // Otherwise, get the source thread's resourceId\n    let targetResourceId = resourceId;\n\n    if (!targetResourceId) {\n      const sourceThread = await this.getThreadById({ threadId: sourceThreadId });\n      if (!sourceThread) {\n        return [];\n      }\n      targetResourceId = sourceThread.resourceId;\n    }\n\n    // List all threads for the resource and filter for clones\n    const { threads } = await this.listThreads({\n      filter: { resourceId: targetResourceId },\n      perPage: false, // Get all threads\n    });\n\n    return threads.filter(thread => {\n      const cloneMetadata = this.getCloneMetadata(thread);\n      return cloneMetadata?.sourceThreadId === sourceThreadId;\n    });\n  }\n\n  /**\n   * Get the clone history chain for a thread (all ancestors back to the original).\n   *\n   * @param threadId - ID of the thread to get history for\n   * @returns Array of threads from oldest ancestor to the given thread (inclusive)\n   *\n   * @example\n   * ```typescript\n   * const history = await memory.getCloneHistory('deeply-cloned-thread');\n   * // Returns: [originalThread, firstClone, secondClone, deeplyClonedThread]\n   * ```\n   */\n  public async getCloneHistory(threadId: string): Promise<StorageThreadType[]> {\n    const history: StorageThreadType[] = [];\n    let currentThreadId: string | null = threadId;\n\n    while (currentThreadId) {\n      const thread = await this.getThreadById({ threadId: currentThreadId });\n      if (!thread) {\n        break;\n      }\n\n      history.unshift(thread); // Add to beginning to maintain order from oldest to newest\n\n      const cloneMetadata = this.getCloneMetadata(thread);\n      currentThreadId = cloneMetadata?.sourceThreadId ?? null;\n    }\n\n    return history;\n  }\n\n  /**\n   * Get input processors for this memory instance.\n   * Extends the base implementation to add ObservationalMemory processor when configured.\n   *\n   * @param configuredProcessors - Processors already configured by the user (for deduplication)\n   * @param context - Request context for runtime configuration\n   * @returns Array of input processors configured for this memory instance\n   */\n  async getInputProcessors(\n    configuredProcessors: InputProcessorOrWorkflow[] = [],\n    context?: RequestContext,\n  ): Promise<InputProcessor[]> {\n    // Get base processors from parent class\n    const processors = await super.getInputProcessors(configuredProcessors, context);\n\n    const om = await this.createOMProcessor(configuredProcessors, context);\n    if (om) {\n      processors.push(om);\n    }\n\n    return processors;\n  }\n\n  /**\n   * Extends the base implementation to add ObservationalMemory as an output processor.\n   * OM needs processOutputResult to save messages at the end of the agent turn,\n   * even when the observation threshold was never reached during the loop.\n   */\n  async getOutputProcessors(\n    configuredProcessors: OutputProcessorOrWorkflow[] = [],\n    context?: RequestContext,\n  ): Promise<OutputProcessor[]> {\n    const processors = await super.getOutputProcessors(configuredProcessors, context);\n\n    const om = await this.createOMProcessor(configuredProcessors, context);\n    if (om) {\n      processors.push(om as unknown as OutputProcessor);\n    }\n\n    return processors;\n  }\n\n  /**\n   * Creates an ObservationalMemory processor wrapping the shared engine.\n   * Returns null if OM is not configured, not supported, or already present\n   * in the user's configured processors.\n   */\n  private async createOMProcessor(\n    configuredProcessors: (InputProcessorOrWorkflow | OutputProcessorOrWorkflow)[] = [],\n    context?: RequestContext,\n  ): Promise<InputProcessor | null> {\n    const hasObservationalMemory = configuredProcessors.some(\n      p => !('workflow' in p) && p.id === 'observational-memory',\n    );\n    if (hasObservationalMemory) return null;\n\n    const runtimeMemory = context?.get('MastraMemory') as { memoryConfig?: RuntimeMemoryConfig } | undefined;\n    const runtimeObservationalMemory = normalizeObservationalMemoryConfig(\n      runtimeMemory?.memoryConfig?.observationalMemory,\n    );\n    const threadConfig = runtimeObservationalMemory\n      ? this.getMergedThreadConfig({\n          ...runtimeMemory?.memoryConfig,\n          observationalMemory: runtimeObservationalMemory,\n        } as MemoryConfigInternal)\n      : this.threadConfig;\n\n    const effectiveConfig = normalizeObservationalMemoryConfig(threadConfig.observationalMemory);\n    if (!effectiveConfig) return null;\n\n    const engine = await this.omEngine;\n    if (!engine) return null;\n\n    const { ObservationalMemoryProcessor } = await import('./processors/observational-memory');\n    return new ObservationalMemoryProcessor(engine, this, {\n      temporalMarkers: effectiveConfig.temporalMarkers,\n    });\n  }\n}\n\n// Re-export memory processors from @mastra/core for backward compatibility\nexport { SemanticRecall, WorkingMemory, MessageHistory } from '@mastra/core/processors';\n\n// Re-export clone-related types for convenience\nexport type { StorageCloneThreadInput, StorageCloneThreadOutput, ThreadCloneMetadata } from '@mastra/core/storage';\n\n// Observational Memory utilities\nexport { getObservationsAsOf } from './processors/observational-memory';\n"]}