{"version":3,"sources":["../src/processors/observational-memory/activation-ttl.ts","../src/processors/observational-memory/debug.ts","../src/processors/observational-memory/operation-registry.ts","../src/processors/observational-memory/buffering-coordinator.ts","../src/processors/observational-memory/extractor.ts","../src/processors/observational-memory/built-in-extractors.ts","../src/processors/observational-memory/model-context.ts","../src/processors/observational-memory/date-utils.ts","../src/processors/observational-memory/extracted-values.ts","../src/processors/observational-memory/markers.ts","../src/processors/observational-memory/message-utils.ts","../src/processors/observational-memory/model-by-input-tokens.ts","../src/processors/observational-memory/observation-groups.ts","../src/processors/observational-memory/thresholds.ts","../src/processors/observational-memory/observation-strategies/base.ts","../src/processors/observational-memory/observation-strategies/sync.ts","../src/processors/observational-memory/observation-strategies/async-buffer.ts","../src/processors/observational-memory/observation-strategies/resource-scoped.ts","../src/processors/observational-memory/observation-strategies/index.ts","../src/processors/observational-memory/observation-turn/load-memory-context.ts","../src/processors/observational-memory/observation-turn/step.ts","../src/processors/observational-memory/observation-turn/turn.ts","../src/processors/observational-memory/anchor-ids.ts","../src/processors/observational-memory/string-utils.ts","../src/processors/observational-memory/tool-result-helpers.ts","../src/processors/observational-memory/observer-agent.ts","../src/processors/observational-memory/extraction-runner.ts","../src/processors/observational-memory/internal-request-context.ts","../src/processors/observational-memory/retry.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/secure-json-parse/2.7.0/1f65efb0c6ff2d0f745ac6dfe22202b559993ceecd896afead5fc2c075b2d349/node_modules/secure-json-parse/index.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/1.1.3/7d8eaddb7973e5820d04ac18a887c85cc63f173732e3c66432ceefbff819b4ac/node_modules/@ai-sdk/provider/src/errors/ai-sdk-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/1.1.3/7d8eaddb7973e5820d04ac18a887c85cc63f173732e3c66432ceefbff819b4ac/node_modules/@ai-sdk/provider/src/errors/api-call-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/1.1.3/7d8eaddb7973e5820d04ac18a887c85cc63f173732e3c66432ceefbff819b4ac/node_modules/@ai-sdk/provider/src/errors/get-error-message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/1.1.3/7d8eaddb7973e5820d04ac18a887c85cc63f173732e3c66432ceefbff819b4ac/node_modules/@ai-sdk/provider/src/errors/invalid-argument-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/1.1.3/7d8eaddb7973e5820d04ac18a887c85cc63f173732e3c66432ceefbff819b4ac/node_modules/@ai-sdk/provider/src/errors/json-parse-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/1.1.3/7d8eaddb7973e5820d04ac18a887c85cc63f173732e3c66432ceefbff819b4ac/node_modules/@ai-sdk/provider/src/errors/type-validation-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/nanoid/3.3.12/d3cc005612b7a8092b0a69165d914c0ba90a6688b989e338761a671f4e42c3ea/node_modules/nanoid/non-secure/index.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/2.2.8/5d01f07c1135cda39361d88ef78836678671b589ef7570e018de43f4760e595c/node_modules/@ai-sdk/provider-utils/src/parse-json.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/2.2.8/5d01f07c1135cda39361d88ef78836678671b589ef7570e018de43f4760e595c/node_modules/@ai-sdk/provider-utils/src/convert-async-iterator-to-readable-stream.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/2.2.8/5d01f07c1135cda39361d88ef78836678671b589ef7570e018de43f4760e595c/node_modules/@ai-sdk/provider-utils/src/delay.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/2.2.8/5d01f07c1135cda39361d88ef78836678671b589ef7570e018de43f4760e595c/node_modules/@ai-sdk/provider-utils/src/generate-id.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/2.2.8/5d01f07c1135cda39361d88ef78836678671b589ef7570e018de43f4760e595c/node_modules/@ai-sdk/provider-utils/src/get-error-message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/2.2.8/5d01f07c1135cda39361d88ef78836678671b589ef7570e018de43f4760e595c/node_modules/@ai-sdk/provider-utils/src/is-abort-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/2.2.8/5d01f07c1135cda39361d88ef78836678671b589ef7570e018de43f4760e595c/node_modules/@ai-sdk/provider-utils/src/validator.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/2.2.8/5d01f07c1135cda39361d88ef78836678671b589ef7570e018de43f4760e595c/node_modules/@ai-sdk/provider-utils/src/validate-types.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/Options.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/Refs.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/errorMessages.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/any.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/array.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/date.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/default.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/record.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/map.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/never.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/null.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/union.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/number.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/object.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/set.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/selectParser.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/parseDef.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/zod-to-json-schema/3.25.1/337cb207c66d48e6fa61936b69e8322163cd8ec62973d6a7f5e682eec382f4e2/node_modules/zod-to-json-schema/dist/esm/index.js","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/ui-utils/1.2.11/f374dccd3a16a287df45222b3686b58f3578b106d81ff3ec04cd7f23acbeda34/node_modules/@ai-sdk/ui-utils/src/fix-json.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/ui-utils/1.2.11/f374dccd3a16a287df45222b3686b58f3578b106d81ff3ec04cd7f23acbeda34/node_modules/@ai-sdk/ui-utils/src/parse-partial-json.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/ui-utils/1.2.11/f374dccd3a16a287df45222b3686b58f3578b106d81ff3ec04cd7f23acbeda34/node_modules/@ai-sdk/ui-utils/src/data-stream-parts.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/ui-utils/1.2.11/f374dccd3a16a287df45222b3686b58f3578b106d81ff3ec04cd7f23acbeda34/node_modules/@ai-sdk/ui-utils/src/zod-schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/ui-utils/1.2.11/f374dccd3a16a287df45222b3686b58f3578b106d81ff3ec04cd7f23acbeda34/node_modules/@ai-sdk/ui-utils/src/schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/platform/node/globalThis.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/version.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/internal/semver.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/internal/global-utils.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/diag/types.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/api/diag.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/context/context.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/context/NoopContextManager.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/api/context.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/trace_flags.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/context-utils.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/NoopTracer.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace/status.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/api/trace.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/trace-api.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/util/prepare-response-headers.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/errors/unsupported-model-version-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/errors/invalid-argument-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/util/retry-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/util/retry-with-exponential-backoff.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/prompt/prepare-retries.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/telemetry/assemble-operation-name.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/telemetry/get-base-telemetry-attributes.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/telemetry/noop-tracer.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/telemetry/get-tracer.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/telemetry/record-span.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/telemetry/select-telemetry-attributes.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/util/split-array.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/embed/embed-many.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/errors/no-object-generated-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/prompt/data-content.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/types/json-value.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/types/provider-metadata.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/prompt/tool-result-content.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/prompt/content-part.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/prompt/message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/generate-object/inject-json-instruction.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/generate-object/generate-object.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/generate-object/stream-object.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/generate-text/generate-text.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/generate-text/output.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/util/merge-streams.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/generate-text/stream-text.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/tool/mcp/types.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/core/tool/mcp/json-rpc-message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/streams/langchain-adapter.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/streams/stream-callbacks.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/4.3.19/df6196f76425ef057f060dd3acec36b109ea79cf3497eb218972ae68bfee3f98/node_modules/ai/streams/llamaindex-adapter.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/2.0.3/baf9ca0bc6c1e850f5a9c142d47d3731e6921106a5f2b12483df7e7922a48657/node_modules/@ai-sdk/provider/src/errors/ai-sdk-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/2.0.3/baf9ca0bc6c1e850f5a9c142d47d3731e6921106a5f2b12483df7e7922a48657/node_modules/@ai-sdk/provider/src/errors/api-call-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/2.0.3/baf9ca0bc6c1e850f5a9c142d47d3731e6921106a5f2b12483df7e7922a48657/node_modules/@ai-sdk/provider/src/errors/empty-response-body-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/2.0.3/baf9ca0bc6c1e850f5a9c142d47d3731e6921106a5f2b12483df7e7922a48657/node_modules/@ai-sdk/provider/src/errors/get-error-message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/2.0.3/baf9ca0bc6c1e850f5a9c142d47d3731e6921106a5f2b12483df7e7922a48657/node_modules/@ai-sdk/provider/src/errors/invalid-argument-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/2.0.3/baf9ca0bc6c1e850f5a9c142d47d3731e6921106a5f2b12483df7e7922a48657/node_modules/@ai-sdk/provider/src/errors/json-parse-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/2.0.3/baf9ca0bc6c1e850f5a9c142d47d3731e6921106a5f2b12483df7e7922a48657/node_modules/@ai-sdk/provider/src/errors/type-validation-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/eventsource-parser/3.0.8/353c45c343d0acc1586e9cb9ff7be48ebf30a434bf7b8c9762d411b79278d167/node_modules/eventsource-parser/src/errors.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/eventsource-parser/3.0.8/353c45c343d0acc1586e9cb9ff7be48ebf30a434bf7b8c9762d411b79278d167/node_modules/eventsource-parser/src/parse.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/eventsource-parser/3.0.8/353c45c343d0acc1586e9cb9ff7be48ebf30a434bf7b8c9762d411b79278d167/node_modules/eventsource-parser/src/stream.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/combine-headers.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/delay.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/extract-response-headers.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/generate-id.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/get-error-message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/is-abort-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/handle-fetch-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/get-runtime-environment-user-agent.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/normalize-headers.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/with-user-agent-suffix.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/version.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/get-from-api.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/load-optional-setting.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/secure-json-parse.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/validator.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/validate-types.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/parse-json.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/parse-json-event-stream.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/post-to-api.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/types/tool.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/provider-defined-tool-factory.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/resolve.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/response-handler.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/add-additional-properties-to-json-schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/options.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/any.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/array.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/bigint.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/boolean.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/branded.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/catch.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/date.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/default.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/effects.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/enum.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/intersection.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/literal.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/string.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/record.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/map.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/native-enum.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/never.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/null.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/union.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/nullable.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/number.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/object.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/optional.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/pipeline.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/promise.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/set.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/tuple.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/undefined.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/unknown.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parsers/readonly.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/select-parser.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/get-relative-path.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/parse-def.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/refs.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/zod-to-json-schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-to-json-schema/index.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/zod-schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/as-schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/3.0.25/1326c3d2dbd795915eb0af7970cb3e40a2eb89b117a85aff593226ea6e507947/node_modules/@ai-sdk/provider-utils/src/without-trailing-slash.ts","../../_vendored/oidc-stub.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/gateway-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/gateway-authentication-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/gateway-invalid-request-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/gateway-rate-limit-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/gateway-model-not-found-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/gateway-internal-server-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/gateway-response-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/create-gateway-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/extract-api-call-response.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/gateway-timeout-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/as-gateway-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/errors/parse-auth-method.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/gateway-model-entry.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/gateway-fetch-metadata.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/gateway-spend-report.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/gateway-generation-info.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/gateway-language-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/gateway-embedding-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/gateway-image-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/tool/parallel-search.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/tool/perplexity-search.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/gateway-tools.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/vercel-environment.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/version.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/2.0.88/e1ec18cbf188435eebbd2e6dadc5815dee5fade32409a8fa81f4b33949a87c9e/node_modules/@ai-sdk/gateway/src/gateway-provider.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/error/invalid-argument-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/error/no-object-generated-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/error/unsupported-model-version-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/util/retry-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/model/resolve-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/version.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/prompt/data-content.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/types/json-value.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/types/provider-metadata.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/prompt/content-part.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/prompt/message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/telemetry/assemble-operation-name.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/telemetry/get-base-telemetry-attributes.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/telemetry/noop-tracer.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/telemetry/get-tracer.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/telemetry/record-span.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/telemetry/select-telemetry-attributes.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/util/retry-with-exponential-backoff.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/util/prepare-retries.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/generate-text/generate-text.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/util/fix-json.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/util/parse-partial-json.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/generate-text/stream-text.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/util/split-array.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/embed/embed-many.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/generate-object/generate-object.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/generate-object/stream-object.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/5.0.186/dd33dafa02469da2acf49d1c8ea3489c17b472c6b220798c2dead9a0b362598c/node_modules/ai/src/generate-text/output.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/3.0.10/0a7346fe2d918129694b7a3854f60556297703876a7eb06af86e8f8dfed8a65f/node_modules/@ai-sdk/provider/src/errors/ai-sdk-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/3.0.10/0a7346fe2d918129694b7a3854f60556297703876a7eb06af86e8f8dfed8a65f/node_modules/@ai-sdk/provider/src/errors/api-call-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/3.0.10/0a7346fe2d918129694b7a3854f60556297703876a7eb06af86e8f8dfed8a65f/node_modules/@ai-sdk/provider/src/errors/empty-response-body-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/3.0.10/0a7346fe2d918129694b7a3854f60556297703876a7eb06af86e8f8dfed8a65f/node_modules/@ai-sdk/provider/src/errors/get-error-message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/3.0.10/0a7346fe2d918129694b7a3854f60556297703876a7eb06af86e8f8dfed8a65f/node_modules/@ai-sdk/provider/src/errors/invalid-argument-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/3.0.10/0a7346fe2d918129694b7a3854f60556297703876a7eb06af86e8f8dfed8a65f/node_modules/@ai-sdk/provider/src/errors/json-parse-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider/3.0.10/0a7346fe2d918129694b7a3854f60556297703876a7eb06af86e8f8dfed8a65f/node_modules/@ai-sdk/provider/src/errors/type-validation-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/combine-headers.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/delay.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/extract-response-headers.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/uint8-utils.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/generate-id.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/get-error-message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/is-abort-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/handle-fetch-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/get-runtime-environment-user-agent.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/normalize-headers.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/with-user-agent-suffix.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/version.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/get-from-api.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/load-optional-setting.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/secure-json-parse.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/add-additional-properties-to-json-schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/options.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/any.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/array.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/bigint.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/boolean.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/branded.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/catch.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/date.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/default.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/effects.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/enum.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/intersection.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/literal.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/string.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/record.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/map.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/native-enum.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/never.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/null.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/union.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/nullable.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/number.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/object.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/optional.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/pipeline.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/promise.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/set.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/tuple.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/undefined.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/unknown.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parsers/readonly.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/select-parser.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/get-relative-path.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/parse-def.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/refs.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/to-json-schema/zod3-to-json-schema/zod3-to-json-schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/schema.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/validate-types.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/parse-json.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/parse-json-event-stream.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/post-to-api.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/types/tool.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/provider-tool-factory.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/resolve.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/response-handler.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/provider-utils/4.0.27/8fc6a0e0ec47dbbe757bd2f31febb1f5793bde1fb82dd7502ad7bdca74847565/node_modules/@ai-sdk/provider-utils/src/without-trailing-slash.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/gateway-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/gateway-authentication-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/gateway-invalid-request-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/gateway-rate-limit-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/gateway-model-not-found-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/gateway-internal-server-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/gateway-response-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/create-gateway-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/extract-api-call-response.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/gateway-timeout-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/as-gateway-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/errors/parse-auth-method.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-model-entry.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-fetch-metadata.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-spend-report.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-generation-info.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-language-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-embedding-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-image-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-video-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-reranking-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/tool/parallel-search.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/tool/perplexity-search.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-tools.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/vercel-environment.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/version.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@ai-sdk/gateway/3.0.112/ee6fd7033799dc1080c1b88fcd8352e09c9a867fa4b85cb3757c85fb2ffeee40/node_modules/@ai-sdk/gateway/src/gateway-provider.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@opentelemetry/api/1.9.0/ee469078ed078052a7533b2805abc7686d72155c80f67e8929d9d1ae6c630f05/node_modules/@opentelemetry/api/src/context-api.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/error/invalid-argument-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/error/no-object-generated-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/error/unsupported-model-version-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/util/retry-error.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/logger/log-warnings.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/util/log-v2-compatibility-warning.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/model/as-embedding-model-v3.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/model/resolve-model.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/prompt/call-settings.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/version.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/prompt/data-content.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/types/json-value.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/types/provider-metadata.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/prompt/content-part.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/prompt/message.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/telemetry/assemble-operation-name.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/telemetry/get-base-telemetry-attributes.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/telemetry/noop-tracer.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/telemetry/get-tracer.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/telemetry/record-span.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/telemetry/select-telemetry-attributes.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/util/retry-with-exponential-backoff.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/util/prepare-retries.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/generate-text/output.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/util/fix-json.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/util/parse-partial-json.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/generate-text/generate-text.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/ui-message-stream/ui-message-chunks.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/generate-text/stream-text.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/ui/validate-ui-messages.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/util/split-array.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/embed/embed-many.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/generate-object/generate-object.ts","../../../../../../setup-pnpm/node_modules/.bin/store/v11/links/@/ai/6.0.177/849a472421cbf4688024bd2b34c4c3abb4127a393a49d0c450fc312c2f1f1265/node_modules/ai/src/generate-object/stream-object.ts","../src/processors/observational-memory/working-memory-extractor.ts","../src/tools/om-tools.ts","../src/tools/working-memory.ts","../src/index.ts","../src/processors/observational-memory/temporary-memory.ts","../src/processors/observational-memory/tracing.ts","../src/processors/observational-memory/observer-runner.ts","../src/processors/observational-memory/reflector-agent.ts","../src/processors/observational-memory/reflector-runner.ts","../src/processors/observational-memory/repro-capture.ts","../src/processors/observational-memory/token-counter.ts","../src/processors/observational-memory/observational-memory.ts","../src/processors/observational-memory/temporal-markers.ts","../src/processors/observational-memory/processor.ts","../src/processors/observational-memory/observation-utils.ts"],"names":["join","appendFileSync","resolve","name","z","context","randomBytes","xxhash","marker","boundary","getThreadOMMetadata","setThreadOMMetadata","OBSERVATIONAL_MEMORY_DEFAULTS","text","estimateTokenCount","filter","getStringExtractedValue","window","object","coreFeatures","requestContext","MASTRA_THREAD_ID_KEY","RequestContext","isRecord","isAbortError","visit","delay","suspectProtoRx","suspectConstructorRx","_parse","_AISDKError","symbol","_a","_TypeValidationError","getErrorMessage","zodSchema","validator","SecureJSON","ZodFirstPartyTypeKind","types","x","base","jsonSchema","schema","textStreamPart","errorStreamPart","isCompatible","_b","DiagComponentLogger","DiagLogLevel","DiagAPI","__spreadArray","__read","BaseContext","NoopContextManager","API_NAME","ContextAPI","TraceFlags","NonRecordingSpan","NoopTracer","ProxyTracer","NoopTracerProvider","ProxyTracerProvider","SpanStatusCode","TraceAPI","InvalidArgumentError","AISDKError","attributes","array","embeddings","usage","createIdGenerator","asSchema","parsePartialJson","safeParseJSON","safeValidateTypes","result","formatDataStreamPart","mergeIntoDataStream","toDataStream","toDataStreamResponse","toDataStreamInternal","APICallError","JSONParseError","TypeValidationError","trailing","value","line","VERSION","fetch","validatorSymbol","isValidator","asValidator","standardSchema","getOriginalFetch","tool","outputSchema","schemaSymbol","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","getRelativePath","get$ref","addMeta","getRefs","zodToJsonSchema","z42","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","LF","CR","SPACE","noop","createParser","isDataPrefix","isEventPrefix","EventSourceParserStream","createAbortError","extractResponseHeaders","btoa","convertUint8ArrayToBase64","FETCH_FAILED_ERROR_MESSAGES","handleFetchError","getRuntimeEnvironmentUserAgent","normalizeHeaders","loadOptionalSetting","secureJsonParse","addAdditionalPropertiesToJsonSchema","zod3Schema","zod4Schema","z43","isZod4Schema","validateTypes","parseJSON","parseJsonEventStream","postToApi","createEventSourceResponseHandler","withoutTrailingSlash","getContext","getVercelOidcToken","GatewayError","_GatewayError","GatewayAuthenticationError","_GatewayAuthenticationError","GatewayInvalidRequestError","GatewayRateLimitError","modelNotFoundParamSchema","GatewayModelNotFoundError","GatewayInternalServerError","GatewayResponseError","createGatewayErrorFromResponse","gatewayErrorResponseSchema","extractApiCallResponse","GatewayTimeoutError","_GatewayTimeoutError","isTimeoutError","asGatewayError","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","memory","parseMemoryRequestContext","message","expanded","truncatedText","wasTruncated","rendered","createTool","isStandardSchemaWithJSON","toStandardSchema","standardSchemaToJSONSchema","MastraMemory","SpanType","EntityType","MessageList","Mutex","LRUCache","OBSERVATION_CONTINUATION_HINT","generateEmptyFromSchema","results","ObservationalMemoryProcessor","WORKING_MEMORY_STATE_PROCESSOR_ID","WorkingMemoryStateProcessor","randomUUID","InMemoryStore","getOrCreateSpan","createObservabilityContext","agent","Agent","modelSupportsAttachments","inspect","mkdirSync","writeFileSync","createHash","imageSize","AsyncLocalStorage","localTokens","formatModelContext","getCurrentModel","MessageHistory","resolved","resolveModelConfig","OBSERVATION_CONTEXT_PROMPT","OBSERVATION_CONTEXT_INSTRUCTIONS","OBSERVATION_RETRIEVAL_INSTRUCTIONS"],"mappings":"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","file":"chunk-3JX4RMDN.cjs","sourcesContent":["import type { ObservationModelContext, ResolvedActivationTTL } from './types';\n\nconst MINUTE = 60_000;\nconst HOUR = 60 * MINUTE;\n\nconst SHORT_TTL = 5 * MINUTE;\nconst OPENAI_EXTENDED_TTL = HOUR;\nconst GEMINI_TTL = 24 * HOUR;\nconst DEEPSEEK_TTL = HOUR;\nconst GROQ_TTL = 2 * HOUR;\n\nfunction normalize(value?: string): string {\n  return value?.toLowerCase() ?? '';\n}\n\nfunction isOpenAIShortTtlModel(modelId: string): boolean {\n  return /^gpt-4/.test(modelId) || /^gpt-5(?:$|-|\\.([1-4])(?:$|-))/.test(modelId);\n}\n\nfunction getOpenAIPromptCacheRetention(\n  providerOptions?: ObservationModelContext['providerOptions'],\n): string | undefined {\n  const openaiOptions = providerOptions?.openai as { promptCacheRetention?: unknown } | undefined;\n  return typeof openaiOptions?.promptCacheRetention === 'string'\n    ? openaiOptions.promptCacheRetention.toLowerCase()\n    : undefined;\n}\n\nexport function resolveActivationTTL(\n  activateAfterIdle: ResolvedActivationTTL | undefined,\n  modelContext?: ObservationModelContext,\n): number | undefined {\n  if (activateAfterIdle !== 'auto') {\n    return activateAfterIdle;\n  }\n\n  return resolveAutoActivationTTL(modelContext);\n}\n\nexport function resolveAutoActivationTTL(modelContext?: ObservationModelContext): number {\n  const provider = normalize(modelContext?.provider);\n  const modelId = normalize(modelContext?.modelId);\n\n  if (provider.includes('openai')) {\n    const promptCacheRetention = getOpenAIPromptCacheRetention(modelContext?.providerOptions);\n    if (promptCacheRetention === '24h') return OPENAI_EXTENDED_TTL;\n    if (promptCacheRetention === 'in_memory') return SHORT_TTL;\n    return isOpenAIShortTtlModel(modelId) ? SHORT_TTL : OPENAI_EXTENDED_TTL;\n  }\n\n  if (provider.includes('google') || provider.includes('gemini')) return GEMINI_TTL;\n  if (provider.includes('deepseek')) return DEEPSEEK_TTL;\n  if (provider.includes('groq')) return GROQ_TTL;\n  if (provider.includes('anthropic')) return SHORT_TTL;\n  if (provider.includes('xai') || provider.includes('grok')) return SHORT_TTL;\n  if (provider.includes('openrouter')) return SHORT_TTL;\n\n  return SHORT_TTL;\n}\n","import { appendFileSync } from 'node:fs';\nimport { join } from 'node:path';\n\nconst OM_DEBUG_LOG = process.env.OM_DEBUG ? join(process.cwd(), 'om-debug.log') : null;\n\nexport function omDebug(msg: string) {\n  if (!OM_DEBUG_LOG) return;\n  try {\n    appendFileSync(OM_DEBUG_LOG, `[${new Date().toLocaleString()}] ${msg}\\n`);\n  } catch {\n    // ignore write errors\n  }\n}\n\nexport function omError(msg: string, err?: unknown) {\n  const errStr = err instanceof Error ? (err.stack ?? err.message) : err !== undefined ? String(err) : '';\n  const full = errStr ? `${msg}: ${errStr}` : msg;\n  omDebug(`[OM:ERROR] ${full}`);\n}\n\nomDebug(`[OM:process-start] OM module loaded, pid=${process.pid}`);\n\n// Wrap console.error so any unexpected errors also land in the debug log\nif (OM_DEBUG_LOG) {\n  const _origConsoleError = console.error;\n  console.error = (...args: unknown[]) => {\n    omDebug(\n      `[console.error] ${args\n        .map(a => {\n          if (a instanceof Error) return a.stack ?? a.message;\n          if (typeof a === 'object' && a !== null) {\n            try {\n              return JSON.stringify(a);\n            } catch {\n              return String(a);\n            }\n          }\n          return String(a);\n        })\n        .join(' ')}`,\n    );\n    _origConsoleError.apply(console, args);\n  };\n}\n","/**\n * Process-level operation registry for Observational Memory.\n *\n * Tracks which operations (reflecting, observing, buffering) are actively running\n * in THIS process. Used to detect stale DB flags left by crashed processes.\n *\n * Key format: `${recordId}:${operationType}`\n */\n\nexport type OmOperationName = 'reflecting' | 'observing' | 'bufferingObservation' | 'bufferingReflection';\n\nconst activeOps = new Map<string, number>();\n\nexport function opKey(recordId: string, op: OmOperationName): string {\n  return `${recordId}:${op}`;\n}\n\nexport function registerOp(recordId: string, op: OmOperationName): void {\n  const key = opKey(recordId, op);\n  activeOps.set(key, (activeOps.get(key) ?? 0) + 1);\n}\n\nexport function unregisterOp(recordId: string, op: OmOperationName): void {\n  const key = opKey(recordId, op);\n  const count = activeOps.get(key);\n  if (!count) return;\n  if (count <= 1) {\n    activeOps.delete(key);\n  } else {\n    activeOps.set(key, count - 1);\n  }\n}\n\nexport function isOpActiveInProcess(recordId: string, op: OmOperationName): boolean {\n  return (activeOps.get(opKey(recordId, op)) ?? 0) > 0;\n}\n","import type { ObservationalMemoryRecord } from '@mastra/core/storage';\n\nimport { omDebug } from './debug';\nimport { isOpActiveInProcess } from './operation-registry';\nimport type { ResolvedObservationConfig, ResolvedReflectionConfig } from './types';\n\n/**\n * Manages the static buffering state machine for async observation and reflection.\n *\n * Static maps are shared across all ObservationalMemory instances in a process.\n * This is critical because multiple OM instances are created per agent loop step,\n * and they need to share knowledge of in-flight operations.\n */\nexport class BufferingCoordinator {\n  private readonly observationConfig: ResolvedObservationConfig;\n  private readonly reflectionConfig: ResolvedReflectionConfig;\n  private readonly scope: 'thread' | 'resource';\n\n  /**\n   * Track in-flight async buffering operations per resource/thread.\n   * Key format: \"obs:{lockKey}\" or \"refl:{lockKey}\"\n   * Value: Promise that resolves when buffering completes\n   */\n  static asyncBufferingOps = new Map<string, Promise<void>>();\n\n  /**\n   * Track the last token boundary at which we started buffering.\n   * Key format: \"obs:{lockKey}\" or \"refl:{lockKey}\"\n   */\n  static lastBufferedBoundary = new Map<string, number>();\n\n  /**\n   * Track the timestamp cursor for buffered messages.\n   * Key format: \"obs:{lockKey}\"\n   */\n  static lastBufferedAtTime = new Map<string, Date>();\n\n  /**\n   * Tracks cycleId for in-flight buffered reflections.\n   * Key format: \"refl:{lockKey}\"\n   */\n  static reflectionBufferCycleIds = new Map<string, string>();\n\n  constructor(opts: {\n    observationConfig: ResolvedObservationConfig;\n    reflectionConfig: ResolvedReflectionConfig;\n    scope: 'thread' | 'resource';\n  }) {\n    this.observationConfig = opts.observationConfig;\n    this.reflectionConfig = opts.reflectionConfig;\n    this.scope = opts.scope;\n  }\n\n  getLockKey(threadId: string | null | undefined, resourceId: string | null | undefined): string {\n    if (this.scope === 'resource' && resourceId) {\n      return `resource:${resourceId}`;\n    }\n    return `thread:${threadId ?? 'unknown'}`;\n  }\n\n  isAsyncObservationEnabled(): boolean {\n    return this.observationConfig.bufferTokens !== undefined && this.observationConfig.bufferTokens > 0;\n  }\n\n  isAsyncReflectionEnabled(): boolean {\n    return this.reflectionConfig.bufferActivation !== undefined && this.reflectionConfig.bufferActivation > 0;\n  }\n\n  getObservationBufferKey(lockKey: string): string {\n    return `obs:${lockKey}`;\n  }\n\n  getReflectionBufferKey(lockKey: string): string {\n    return `refl:${lockKey}`;\n  }\n\n  isAsyncBufferingInProgress(bufferKey: string): boolean {\n    return BufferingCoordinator.asyncBufferingOps.has(bufferKey);\n  }\n\n  /**\n   * Clean up static maps for a thread/resource to prevent memory leaks.\n   */\n  cleanupStaticMaps(threadId: string, resourceId?: string | null, activatedMessageIds?: string[]): void {\n    const lockKey = this.getLockKey(threadId, resourceId);\n    const obsBufKey = this.getObservationBufferKey(lockKey);\n    const reflBufKey = this.getReflectionBufferKey(lockKey);\n\n    if (activatedMessageIds) {\n      // Partial cleanup after activation: clear stale boundary/time state for\n      // the observation buffer key so the next buffer cycle isn't suppressed.\n      BufferingCoordinator.lastBufferedBoundary.delete(obsBufKey);\n      BufferingCoordinator.lastBufferedAtTime.delete(obsBufKey);\n    } else {\n      // Full cleanup: remove all static state for this thread\n      BufferingCoordinator.lastBufferedAtTime.delete(obsBufKey);\n      BufferingCoordinator.lastBufferedBoundary.delete(obsBufKey);\n      BufferingCoordinator.lastBufferedBoundary.delete(reflBufKey);\n      BufferingCoordinator.asyncBufferingOps.delete(obsBufKey);\n      BufferingCoordinator.asyncBufferingOps.delete(reflBufKey);\n      BufferingCoordinator.reflectionBufferCycleIds.delete(reflBufKey);\n    }\n  }\n\n  /**\n   * Check if we've crossed a new bufferTokens interval boundary for async observation.\n   */\n  shouldTriggerAsyncObservation(\n    currentTokens: number,\n    lockKey: string,\n    record: ObservationalMemoryRecord,\n    storage?: { setBufferingObservationFlag(id: string, flag: boolean): Promise<void> },\n    messageTokensThreshold?: number,\n  ): boolean {\n    if (!this.isAsyncObservationEnabled()) return false;\n\n    if (record.isBufferingObservation) {\n      if (isOpActiveInProcess(record.id, 'bufferingObservation')) return false;\n      omDebug(`[OM:shouldTriggerAsyncObs] isBufferingObservation=true but stale, clearing`);\n      storage?.setBufferingObservationFlag(record.id, false)?.catch(() => {});\n    }\n\n    const bufferKey = this.getObservationBufferKey(lockKey);\n    if (this.isAsyncBufferingInProgress(bufferKey)) return false;\n\n    const bufferTokens = this.observationConfig.bufferTokens!;\n    const dbBoundary = record.lastBufferedAtTokens ?? 0;\n    const memBoundary = BufferingCoordinator.lastBufferedBoundary.get(bufferKey) ?? 0;\n    const lastBoundary = Math.max(dbBoundary, memBoundary);\n\n    const rampPoint = messageTokensThreshold ? messageTokensThreshold - bufferTokens * 1.1 : Infinity;\n    const effectiveBufferTokens = currentTokens >= rampPoint ? bufferTokens / 2 : bufferTokens;\n\n    const currentInterval = Math.floor(currentTokens / effectiveBufferTokens);\n    const lastInterval = Math.floor(lastBoundary / effectiveBufferTokens);\n\n    const shouldTrigger = currentInterval > lastInterval;\n\n    omDebug(\n      `[OM:shouldTriggerAsyncObs] tokens=${currentTokens}, bufferTokens=${bufferTokens}, effectiveBufferTokens=${effectiveBufferTokens}, rampPoint=${rampPoint}, currentInterval=${currentInterval}, lastInterval=${lastInterval}, lastBoundary=${lastBoundary} (db=${dbBoundary}, mem=${memBoundary}), shouldTrigger=${shouldTrigger}`,\n    );\n\n    return shouldTrigger;\n  }\n\n  /**\n   * Await any in-flight async buffering operations for a given thread/resource.\n   */\n  static async awaitBuffering(\n    threadId: string | null | undefined,\n    resourceId: string | null | undefined,\n    scope: 'thread' | 'resource',\n    timeoutMs = 30000,\n  ): Promise<void> {\n    const lockKey = scope === 'resource' && resourceId ? `resource:${resourceId}` : `thread:${threadId ?? 'unknown'}`;\n    const obsKey = `obs:${lockKey}`;\n    const reflKey = `refl:${lockKey}`;\n\n    const promises: Promise<void>[] = [];\n    const obsOp = BufferingCoordinator.asyncBufferingOps.get(obsKey);\n    if (obsOp) promises.push(obsOp);\n    const reflOp = BufferingCoordinator.asyncBufferingOps.get(reflKey);\n    if (reflOp) promises.push(reflOp);\n\n    if (promises.length === 0) {\n      return;\n    }\n\n    let timeoutId: ReturnType<typeof setTimeout> | undefined;\n    try {\n      await Promise.race([\n        Promise.allSettled(promises).then(() => undefined),\n        new Promise<void>(resolve => {\n          timeoutId = setTimeout(resolve, timeoutMs);\n        }),\n      ]);\n    } finally {\n      if (timeoutId !== undefined) {\n        clearTimeout(timeoutId);\n      }\n    }\n  }\n}\n","import type { ProcessorContext } from '@mastra/core/processors';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { z } from 'zod';\n\nimport type { Memory } from '../..';\n\ntype ExtractorMode = 'inline' | 'structured';\nexport type ExtractorSource = 'observer' | 'reflector';\n\nexport interface ExtractorRuntimeContext {\n  source: ExtractorSource;\n  threadId?: string;\n  resourceId?: string;\n  mainAgent?: ProcessorContext['agent'];\n  memory?: Memory;\n  requestContext?: RequestContext;\n}\n\nexport interface ExtractorOnExtractedContext<T = unknown> extends ExtractorRuntimeContext {\n  extractor: Extractor<T>;\n  threadId: string;\n  previous?: T;\n  current: T;\n  sendSignal?: ProcessorContext['sendSignal'];\n}\n\ntype MaybePromise<T> = T | Promise<T>;\ntype ExtractorConfigValue<TValue> = TValue | ((context: ExtractorRuntimeContext) => MaybePromise<TValue>);\n\nexport interface ExtractorConfig<T = unknown> {\n  /** Human-readable extractor name. Converted to a stable kebab-case slug for XML tags and metadata keys. */\n  name: string;\n  /** Instructions describing what this extractor should return. */\n  instructions: ExtractorConfigValue<string>;\n  /** Zod schema used for structured extraction. Omit to extract an inline string value from the observer/reflector output. */\n  schema?: ExtractorConfigValue<z.ZodType<T> | undefined>;\n  /** Whether the previous extraction should be shown to the extractor prompt. Defaults to true. */\n  includePreviousExtraction?: boolean;\n  /** Dot-separated OM metadata path for persistence. Defaults to `extracted.<slug>`. Set false to skip OM metadata persistence. */\n  metadataKeyPath?: string | false;\n  /** Optional lifecycle hook invoked after a value is parsed and before it is persisted. */\n  onExtracted?: (context: ExtractorOnExtractedContext<T>) => Promise<T | void | undefined> | T | void | undefined;\n}\n\nconst BUILT_IN_SLUGS = new Set(['current-task', 'suggested-response', 'thread-title']);\n\nconst EXTRACTED_VALUES_TAG = 'extracted-values';\n\nconst RESERVED_XML_TAGS = new Set([\n  'observations',\n  'observation',\n  EXTRACTED_VALUES_TAG,\n  'thread',\n  'message',\n  'messages',\n  'conversation',\n  'history',\n  'system',\n  'user',\n  'assistant',\n  'tool',\n  ...BUILT_IN_SLUGS,\n]);\n\nexport const BUILT_IN_EXTRACTOR_SLUGS = [...BUILT_IN_SLUGS] as const;\nexport type BuiltInExtractorSlug = (typeof BUILT_IN_EXTRACTOR_SLUGS)[number];\n\nexport function isBuiltInExtractorSlug(slug: string): slug is BuiltInExtractorSlug {\n  return BUILT_IN_SLUGS.has(slug);\n}\n\nexport function slugifyExtractorName(name: string): string {\n  let normalized = '';\n  let previousWasSeparator = false;\n\n  for (const char of name.trim().toLowerCase()) {\n    const code = char.charCodeAt(0);\n    const isLetter = code >= 97 && code <= 122;\n    const isNumber = code >= 48 && code <= 57;\n    if (isLetter || isNumber) {\n      normalized += char;\n      previousWasSeparator = false;\n      continue;\n    }\n    if (char === \"'\" || char === '\"' || char === '`') {\n      continue;\n    }\n    if (!previousWasSeparator && normalized.length > 0) {\n      normalized += '-';\n      previousWasSeparator = true;\n    }\n  }\n\n  return normalized.endsWith('-') ? normalized.slice(0, -1) : normalized;\n}\n\nfunction assertValidSlug(slug: string, name: string): void {\n  if (!slug) {\n    throw new Error(`Extractor name \"${name}\" must produce a non-empty slug.`);\n  }\n  const first = slug.charCodeAt(0);\n  const last = slug.charCodeAt(slug.length - 1);\n  const startsWithLetter = first >= 97 && first <= 122;\n  const endsWithLetterOrNumber = (last >= 97 && last <= 122) || (last >= 48 && last <= 57);\n  const hasOnlySlugCharacters = [...slug].every(char => {\n    const code = char.charCodeAt(0);\n    return (code >= 97 && code <= 122) || (code >= 48 && code <= 57) || char === '-';\n  });\n  if (!startsWithLetter || !endsWithLetterOrNumber || !hasOnlySlugCharacters) {\n    throw new Error(`Extractor name \"${name}\" produced invalid slug \"${slug}\".`);\n  }\n}\n\nexport class Extractor<T = unknown> {\n  readonly name: string;\n  readonly slug: string;\n  readonly instructions: string;\n  readonly schema: z.ZodType<T>;\n  readonly mode: ExtractorMode;\n  readonly includePreviousExtraction: boolean;\n  readonly metadataKeyPath: string | false;\n  readonly onExtracted?: ExtractorConfig<T>['onExtracted'];\n  /** @internal */\n  readonly internal: boolean;\n  private readonly instructionsConfig: ExtractorConfigValue<string>;\n  private readonly schemaConfig?: ExtractorConfigValue<z.ZodType<T> | undefined>;\n\n  constructor(config: ExtractorConfig<T>, internal = false) {\n    const name = config.name.trim();\n    const instructions = typeof config.instructions === 'string' ? config.instructions.trim() : undefined;\n    const slug = slugifyExtractorName(name);\n\n    if (!name) {\n      throw new Error('Extractor name is required.');\n    }\n    if (instructions !== undefined && !instructions) {\n      throw new Error(`Extractor \"${name}\" must include instructions.`);\n    }\n    assertValidSlug(slug, name);\n    if (!internal && RESERVED_XML_TAGS.has(slug)) {\n      throw new Error(`Extractor slug \"${slug}\" is reserved by Observational Memory.`);\n    }\n\n    this.name = name;\n    this.slug = slug;\n    this.instructionsConfig = config.instructions;\n    this.schemaConfig = config.schema;\n    this.instructions = instructions ?? '';\n    this.schema = (typeof config.schema === 'function' ? z.string() : (config.schema ?? z.string())) as z.ZodType<T>;\n    this.mode = internal || !config.schema ? 'inline' : 'structured';\n    this.includePreviousExtraction = config.includePreviousExtraction ?? true;\n    this.metadataKeyPath = config.metadataKeyPath ?? `extracted.${slug}`;\n    this.onExtracted = config.onExtracted;\n    this.internal = internal;\n  }\n\n  async resolve(context: ExtractorRuntimeContext): Promise<Extractor<T>> {\n    const instructions =\n      typeof this.instructionsConfig === 'function'\n        ? (await this.instructionsConfig(context)).trim()\n        : this.instructionsConfig.trim();\n    if (!instructions) {\n      throw new Error(`Extractor \"${this.name}\" must include instructions.`);\n    }\n\n    const schema = typeof this.schemaConfig === 'function' ? await this.schemaConfig(context) : this.schemaConfig;\n    return new Extractor(\n      {\n        name: this.name,\n        instructions,\n        ...(schema ? { schema } : {}),\n        includePreviousExtraction: this.includePreviousExtraction,\n        metadataKeyPath: this.metadataKeyPath,\n        onExtracted: this.onExtracted,\n      },\n      this.internal,\n    );\n  }\n}\n\nexport async function resolveExtractors(\n  extractors: readonly Extractor<any>[],\n  context: ExtractorRuntimeContext,\n): Promise<Extractor<any>[]> {\n  return Promise.all(extractors.map(extractor => extractor.resolve(context)));\n}\n\nexport function validateExtractorList(extractors: readonly Extractor<any>[]): Extractor<any>[] {\n  const seen = new Map<string, string>();\n  for (const extractor of extractors) {\n    assertValidSlug(extractor.slug, extractor.name);\n    if (!extractor.internal && RESERVED_XML_TAGS.has(extractor.slug)) {\n      throw new Error(`Extractor slug \"${extractor.slug}\" is reserved by Observational Memory.`);\n    }\n    const previous = seen.get(extractor.slug);\n    if (previous) {\n      throw new Error(`Duplicate extractor slug \"${extractor.slug}\" from \"${previous}\" and \"${extractor.name}\".`);\n    }\n    seen.set(extractor.slug, extractor.name);\n  }\n  return [...extractors];\n}\n\nfunction isJsonLike(value: string): boolean {\n  return /^(?:[\\[{\"-]|\\d|true\\b|false\\b|null\\b)/.test(value.trim());\n}\n\nfunction candidateValues(raw: string): unknown[] {\n  const trimmed = raw.trim();\n  const candidates: unknown[] = [];\n  const add = (value: unknown) => {\n    if (!candidates.some(candidate => Object.is(candidate, value))) {\n      candidates.push(value);\n    }\n  };\n\n  if (isJsonLike(trimmed)) {\n    try {\n      add(JSON.parse(trimmed));\n    } catch {\n      // The value may intentionally be a plain string that starts with a JSON-like character.\n    }\n  }\n\n  add(trimmed);\n\n  if (!isJsonLike(trimmed)) {\n    try {\n      add(JSON.parse(trimmed));\n    } catch {\n      // Plain strings are valid extractor values.\n    }\n  }\n\n  return candidates;\n}\n\nexport function parseExtractorValue<T>(extractor: Extractor<T>, raw: string): T {\n  const failures: string[] = [];\n  for (const candidate of candidateValues(raw)) {\n    const parsed = extractor.schema.safeParse(candidate);\n    if (parsed.success) {\n      return parsed.data;\n    }\n    failures.push(parsed.error.message);\n  }\n  throw new Error(`Extractor \"${extractor.slug}\" output did not match its schema: ${failures[0] ?? 'invalid value'}`);\n}\n\nexport interface ParsedExtractedValues {\n  values: Record<string, unknown>;\n  failures: Array<{ slug: string; error: string }>;\n}\n\nfunction parseExtractedValuesObject(raw: string): Record<string, unknown> | undefined {\n  const trimmed = raw.trim();\n  if (!trimmed || trimmed.startsWith('Write only the extracted values JSON object here.')) {\n    return undefined;\n  }\n\n  const parsed = JSON.parse(trimmed) as unknown;\n  if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n    throw new Error(`${EXTRACTED_VALUES_TAG} must contain a JSON object.`);\n  }\n  return parsed as Record<string, unknown>;\n}\n\nexport function parseExtractedValues(output: string, extractors: readonly Extractor<any>[]): ParsedExtractedValues {\n  const values: Record<string, unknown> = {};\n  const failures: Array<{ slug: string; error: string }> = [];\n  const inlineExtractors = extractors.filter(extractor => extractor.mode === 'inline');\n\n  const regex = new RegExp(`<${EXTRACTED_VALUES_TAG}>([\\\\s\\\\S]*?)<\\\\/${EXTRACTED_VALUES_TAG}>`, 'gi');\n  const matches = [...output.matchAll(regex)];\n  for (const match of matches) {\n    try {\n      const extractedValues = parseExtractedValuesObject(match[1] ?? '');\n      if (!extractedValues) {\n        continue;\n      }\n\n      for (const extractor of inlineExtractors) {\n        if (!Object.prototype.hasOwnProperty.call(extractedValues, extractor.slug)) {\n          continue;\n        }\n        const rawValue = extractedValues[extractor.slug];\n        if (rawValue === undefined || rawValue === null || rawValue === '') {\n          continue;\n        }\n        const parsed = extractor.schema.safeParse(rawValue);\n        if (parsed.success) {\n          values[extractor.slug] = parsed.data;\n        } else {\n          failures.push({ slug: extractor.slug, error: parsed.error.message });\n        }\n      }\n    } catch (error) {\n      failures.push({ slug: EXTRACTED_VALUES_TAG, error: error instanceof Error ? error.message : String(error) });\n    }\n  }\n\n  for (const extractor of inlineExtractors) {\n    if (Object.prototype.hasOwnProperty.call(values, extractor.slug)) {\n      continue;\n    }\n    const tagRegex = new RegExp(`<${extractor.slug}>([\\\\s\\\\S]*?)<\\\\/${extractor.slug}>`, 'gi');\n    const tagMatch = [...output.matchAll(tagRegex)].at(-1);\n    const rawValue = tagMatch?.[1]?.trim();\n    if (!rawValue) {\n      continue;\n    }\n    try {\n      values[extractor.slug] = parseExtractorValue(extractor, rawValue);\n    } catch (error) {\n      failures.push({ slug: extractor.slug, error: error instanceof Error ? error.message : String(error) });\n    }\n  }\n\n  return { values, failures };\n}\n\nexport function stripExtractorSections(output: string, extractors: readonly Extractor<any>[]): string {\n  const inlineExtractors = extractors.filter(extractor => extractor.mode === 'inline');\n  let stripped = output.replace(\n    new RegExp(`[ \\\\t]*<${EXTRACTED_VALUES_TAG}>[\\\\s\\\\S]*?<\\\\/${EXTRACTED_VALUES_TAG}>\\\\s*`, 'gi'),\n    '',\n  );\n  for (const extractor of inlineExtractors) {\n    stripped = stripped.replace(new RegExp(`[ \\\\t]*<${extractor.slug}>[\\\\s\\\\S]*?<\\\\/${extractor.slug}>\\\\s*`, 'gi'), '');\n  }\n  return stripped;\n}\n\nexport function buildExtractorOutputSections(extractors: readonly Extractor<any>[]): string {\n  const inlineExtractors = extractors.filter(extractor => extractor.mode === 'inline');\n  if (inlineExtractors.length === 0) {\n    return '';\n  }\n\n  const sections = inlineExtractors\n    .map(\n      extractor => `<${extractor.slug}>\n${extractor.instructions}\nInclude this section when the observations contain relevant information for <${extractor.slug}>. Write only that information inside the tag.\n</${extractor.slug}>`,\n    )\n    .join('\\n\\n');\n\n  return `Additional optional XML sections:\\nIf the observations include information relevant to any of these tags, output that tag after <observations> and include the relevant information.\\n${sections}`;\n}\n\nfunction renderPriorValue(value: unknown): string {\n  return typeof value === 'string' ? value : JSON.stringify(value);\n}\n\nexport function buildExtractorPriorLines(\n  extractors: readonly Extractor<any>[],\n  priorExtractedValues?: Record<string, unknown>,\n): string[] {\n  if (!priorExtractedValues) {\n    return [];\n  }\n\n  const lines: string[] = [];\n  for (const extractor of extractors) {\n    if (!extractor.includePreviousExtraction) {\n      continue;\n    }\n    const value = priorExtractedValues[extractor.slug];\n    if (value === undefined || value === null || value === '') {\n      continue;\n    }\n    lines.push(`<${extractor.slug}>\\n${renderPriorValue(value)}\\n</${extractor.slug}>`);\n  }\n  return lines;\n}\n","import { z } from 'zod';\n\nimport { Extractor, validateExtractorList } from './extractor';\nimport type { ObservationConfig, ReflectionConfig, ResolvedObservationConfig } from './types';\n\nconst currentTaskInstructions = `State the current task(s) explicitly. Can be single or multiple:\n- Primary: What the agent is currently working on\n- Secondary: Other pending tasks (mark as \"waiting for user\" if appropriate)\n\nIf the agent started doing something without user approval, note that it's off-task.`;\n\nconst suggestedResponseInstructions = `Hint for the agent's immediate next message. Examples:\n- \"I've updated the navigation model. Let me walk you through the changes...\"\n- \"The assistant should wait for the user to respond before continuing.\"\n- Call the view tool on src/example.ts to continue debugging.`;\n\nconst threadTitleInstructions = `A short, noun-phrase title for this conversation (2-5 words). Examples:\n- \"Auth bug fix\" — not \"Fixing the auth bug\"\n- \"Dark mode toggle\" — not \"User wants dark mode toggle added\"\n- \"Deployment pipeline setup\" — not \"Setting up deployment pipeline for project\"\nOnly update when the topic meaningfully changes.`;\n\nexport function createCurrentTaskExtractor(): Extractor<string> {\n  return new Extractor(\n    {\n      name: 'current-task',\n      instructions: currentTaskInstructions,\n      schema: z.string(),\n      metadataKeyPath: 'currentTask',\n    },\n    true,\n  );\n}\n\nexport function createSuggestedResponseExtractor(): Extractor<string> {\n  return new Extractor(\n    {\n      name: 'suggested-response',\n      instructions: suggestedResponseInstructions,\n      schema: z.string(),\n      metadataKeyPath: 'suggestedResponse',\n    },\n    true,\n  );\n}\n\nexport function createThreadTitleExtractor(): Extractor<string> {\n  return new Extractor(\n    {\n      name: 'thread-title',\n      instructions: threadTitleInstructions,\n      schema: z.string(),\n      metadataKeyPath: 'threadTitle',\n    },\n    true,\n  );\n}\n\ninterface ComposeExtractorOptions {\n  includeContinuationHints?: boolean;\n  includeThreadTitle?: boolean;\n  userExtractors?: readonly Extractor<any>[];\n}\n\nexport function composeExtractors(options: ComposeExtractorOptions): Extractor<any>[] {\n  const extractors: Extractor<any>[] = [];\n  if (options.includeContinuationHints) {\n    extractors.push(createCurrentTaskExtractor(), createSuggestedResponseExtractor());\n  }\n  if (options.includeThreadTitle) {\n    extractors.push(createThreadTitleExtractor());\n  }\n  extractors.push(...(options.userExtractors ?? []));\n  return validateExtractorList(extractors);\n}\n\nexport function composeObservationExtractors(\n  config: Pick<ResolvedObservationConfig, 'threadTitle'> & Pick<ObservationConfig, 'extract'>,\n): Extractor[] {\n  return composeExtractors({\n    includeContinuationHints: true,\n    includeThreadTitle: config.threadTitle,\n    userExtractors: config.extract,\n  });\n}\n\nexport function composeReflectionExtractors(config: Pick<ReflectionConfig, 'extract'>): Extractor[] {\n  return composeExtractors({\n    includeContinuationHints: true,\n    userExtractors: config.extract,\n  });\n}\n","/**\n * Compare a model string derived from past messages against the current actor\n * model. Persisted messages from older code paths may carry a bare `modelId`\n * (no `provider/` prefix) while the current actor usually formats as\n * `provider/modelId`. If either side is bare, fall back to comparing just the\n * `modelId` part so a missing provider in history doesn't trigger a spurious\n * provider change. Provider subnamespaces are compared by their base provider\n * (`openai.responses` and `openai` both compare as `openai`) so transport-level\n * provider attribution differences don't trigger provider-change activation.\n */\nfunction parseComparableModelContext(model: string): { provider?: string; modelId: string } {\n  const slashIndex = model.indexOf('/');\n  if (slashIndex === -1) return { modelId: model };\n\n  return {\n    provider: model.slice(0, slashIndex).split('.')[0],\n    modelId: model.slice(slashIndex + 1),\n  };\n}\n\nexport function didProviderChange(actorModel?: string, lastModel?: string): boolean {\n  if (actorModel === undefined || lastModel === undefined) return false;\n\n  const actorContext = parseComparableModelContext(actorModel);\n  const lastContext = parseComparableModelContext(lastModel);\n\n  if (actorContext.modelId !== lastContext.modelId) return true;\n\n  if (actorContext.provider && lastContext.provider) {\n    return actorContext.provider !== lastContext.provider;\n  }\n\n  return false;\n}\n","import type { MastraDBMessage } from '@mastra/core/agent';\n\n/**\n * Date/time utility functions for Observational Memory.\n * Pure functions for formatting relative timestamps and annotating observations.\n */\n\n/**\n * Format a relative time string like \"5 days ago\", \"2 weeks ago\", \"today\", etc.\n */\nexport function formatRelativeTime(date: Date, currentDate: Date): string {\n  const diffMs = currentDate.getTime() - date.getTime();\n  const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n  if (diffDays < 0) {\n    const futureDays = Math.abs(diffDays);\n    if (futureDays === 1) return 'tomorrow';\n    if (futureDays < 7) return `in ${futureDays} days`;\n    if (futureDays < 14) return 'in 1 week';\n    if (futureDays < 30) return `in ${Math.floor(futureDays / 7)} weeks`;\n    if (futureDays < 60) return 'in 1 month';\n    if (futureDays < 365) return `in ${Math.floor(futureDays / 30)} months`;\n    const years = Math.floor(futureDays / 365);\n    return `in ${years} year${years > 1 ? 's' : ''}`;\n  }\n\n  if (diffDays === 0) return 'today';\n  if (diffDays === 1) return 'yesterday';\n  if (diffDays < 7) return `${diffDays} days ago`;\n  if (diffDays < 14) return '1 week ago';\n  if (diffDays < 30) return `${Math.floor(diffDays / 7)} weeks ago`;\n  if (diffDays < 60) return '1 month ago';\n  if (diffDays < 365) return `${Math.floor(diffDays / 30)} months ago`;\n  return `${Math.floor(diffDays / 365)} year${Math.floor(diffDays / 365) > 1 ? 's' : ''} ago`;\n}\n\n/**\n * Format the gap between two dates as a human-readable string.\n * Returns null for consecutive days (no gap marker needed).\n */\nexport function formatGapBetweenDates(prevDate: Date, currDate: Date): string | null {\n  const diffMs = currDate.getTime() - prevDate.getTime();\n  const diffDays = Math.floor(diffMs / (1000 * 60 * 60 * 24));\n\n  if (diffDays <= 1) {\n    return null; // No gap marker for consecutive days\n  } else if (diffDays < 7) {\n    return `[${diffDays} days later]`;\n  } else if (diffDays < 14) {\n    return `[1 week later]`;\n  } else if (diffDays < 30) {\n    const weeks = Math.floor(diffDays / 7);\n    return `[${weeks} weeks later]`;\n  } else if (diffDays < 60) {\n    return `[1 month later]`;\n  } else {\n    const months = Math.floor(diffDays / 30);\n    return `[${months} months later]`;\n  }\n}\n\n/**\n * Parses a date string like \"May 30, 2023\", \"May 27-28, 2023\", \"late April 2023\", etc.\n * Returns the parsed Date or null if unparseable.\n */\nexport function parseDateFromContent(dateContent: string): Date | null {\n  let targetDate: Date | null = null;\n\n  // Try simple date format first: \"May 30, 2023\"\n  const simpleDateMatch = dateContent.match(/([A-Z][a-z]+)\\s+(\\d{1,2}),?\\s+(\\d{4})/);\n  if (simpleDateMatch) {\n    const parsed = new Date(`${simpleDateMatch[1]} ${simpleDateMatch[2]}, ${simpleDateMatch[3]}`);\n    if (!isNaN(parsed.getTime())) {\n      targetDate = parsed;\n    }\n  }\n\n  // Try range format: \"May 27-28, 2023\" - use first date\n  if (!targetDate) {\n    const rangeMatch = dateContent.match(/([A-Z][a-z]+)\\s+(\\d{1,2})-\\d{1,2},?\\s+(\\d{4})/);\n    if (rangeMatch) {\n      const parsed = new Date(`${rangeMatch[1]} ${rangeMatch[2]}, ${rangeMatch[3]}`);\n      if (!isNaN(parsed.getTime())) {\n        targetDate = parsed;\n      }\n    }\n  }\n\n  // Try \"late/early/mid Month Year\" format\n  if (!targetDate) {\n    const vagueMatch = dateContent.match(\n      /(late|early|mid)[- ]?(?:to[- ]?(?:late|early|mid)[- ]?)?([A-Z][a-z]+)\\s+(\\d{4})/i,\n    );\n    if (vagueMatch) {\n      const month = vagueMatch[2];\n      const year = vagueMatch[3];\n      const modifier = vagueMatch[1]!.toLowerCase();\n      let day = 15; // default to middle\n      if (modifier === 'early') day = 7;\n      if (modifier === 'late') day = 23;\n      const parsed = new Date(`${month} ${day}, ${year}`);\n      if (!isNaN(parsed.getTime())) {\n        targetDate = parsed;\n      }\n    }\n  }\n\n  // Try \"Month to Month Year\" format (cross-month range)\n  if (!targetDate) {\n    const crossMonthMatch = dateContent.match(/([A-Z][a-z]+)\\s+to\\s+(?:early\\s+)?([A-Z][a-z]+)\\s+(\\d{4})/i);\n    if (crossMonthMatch) {\n      // Use the middle of the range - approximate with second month\n      const parsed = new Date(`${crossMonthMatch[2]} 1, ${crossMonthMatch[3]}`);\n      if (!isNaN(parsed.getTime())) {\n        targetDate = parsed;\n      }\n    }\n  }\n\n  return targetDate;\n}\n\n/**\n * Detects if an observation line indicates future intent (will do, plans to, looking forward to, etc.)\n */\nexport function isFutureIntentObservation(line: string): boolean {\n  const futureIntentPatterns = [\n    /\\bwill\\s+(?:be\\s+)?(?:\\w+ing|\\w+)\\b/i,\n    /\\bplans?\\s+to\\b/i,\n    /\\bplanning\\s+to\\b/i,\n    /\\blooking\\s+forward\\s+to\\b/i,\n    /\\bgoing\\s+to\\b/i,\n    /\\bintends?\\s+to\\b/i,\n    /\\bwants?\\s+to\\b/i,\n    /\\bneeds?\\s+to\\b/i,\n    /\\babout\\s+to\\b/i,\n  ];\n  return futureIntentPatterns.some(pattern => pattern.test(line));\n}\n\n/**\n * Expand inline estimated dates with relative time.\n * Matches patterns like \"(estimated May 27-28, 2023)\" or \"(meaning May 30, 2023)\"\n * and expands them to \"(meaning May 30, 2023 - which was 3 weeks ago)\"\n */\nexport function expandInlineEstimatedDates(observations: string, currentDate: Date): string {\n  // Match patterns like:\n  // (estimated May 27-28, 2023)\n  // (meaning May 30, 2023)\n  // (estimated late April to early May 2023)\n  // (estimated mid-to-late May 2023)\n  // These should now be at the END of observation lines\n  const inlineDateRegex = /\\((estimated|meaning)\\s+([^)]+\\d{4})\\)/gi;\n\n  return observations.replace(inlineDateRegex, (match, prefix: string, dateContent: string, offset: number) => {\n    const targetDate = parseDateFromContent(dateContent);\n\n    if (targetDate) {\n      const relative = formatRelativeTime(targetDate, currentDate);\n\n      // Check if this is a future-intent observation that's now in the past\n      // We need to look at the text BEFORE this match to determine intent\n      const lineStart = observations.lastIndexOf('\\n', offset) + 1;\n      const lineBeforeDate = observations.slice(lineStart, offset);\n\n      const isPastDate = targetDate < currentDate;\n      const isFutureIntent = isFutureIntentObservation(lineBeforeDate);\n\n      if (isPastDate && isFutureIntent) {\n        // This was a planned action that should have happened by now\n        return `(${prefix} ${dateContent} - ${relative}, likely already happened)`;\n      }\n\n      return `(${prefix} ${dateContent} - ${relative})`;\n    }\n\n    // Couldn't parse, return original\n    return match;\n  });\n}\n\n/**\n * Add relative time annotations to observations.\n * Transforms \"Date: May 15, 2023\" headers to \"Date: May 15, 2023 (5 days ago)\"\n * and expands inline estimated dates with relative time context.\n */\nexport function addRelativeTimeToObservations(observations: string, currentDate: Date): string {\n  // First, expand inline estimated dates with relative time\n  const withInlineDates = expandInlineEstimatedDates(observations, currentDate);\n\n  // Match date headers like \"Date: May 15, 2023\" or \"Date: January 1, 2024\"\n  const dateHeaderRegex = /^(Date:\\s*)([A-Z][a-z]+ \\d{1,2}, \\d{4})$/gm;\n\n  // First pass: collect all dates in order\n  const dates: { index: number; date: Date; match: string; prefix: string; dateStr: string }[] = [];\n  let regexMatch: RegExpExecArray | null;\n  while ((regexMatch = dateHeaderRegex.exec(withInlineDates)) !== null) {\n    const dateStr = regexMatch[2]!;\n    const parsed = new Date(dateStr);\n    if (!isNaN(parsed.getTime())) {\n      dates.push({\n        index: regexMatch.index,\n        date: parsed,\n        match: regexMatch[0],\n        prefix: regexMatch[1]!,\n        dateStr,\n      });\n    }\n  }\n\n  // If no dates found, return the inline-expanded version\n  if (dates.length === 0) {\n    return withInlineDates;\n  }\n\n  // Second pass: build result with relative times and gap markers\n  let result = '';\n  let lastIndex = 0;\n\n  for (let i = 0; i < dates.length; i++) {\n    const curr = dates[i]!;\n    const prev = i > 0 ? dates[i - 1]! : null;\n\n    // Add text before this date header\n    result += withInlineDates.slice(lastIndex, curr.index);\n\n    // Add gap marker if there's a significant gap from previous date\n    if (prev) {\n      const gap = formatGapBetweenDates(prev.date, curr.date);\n      if (gap) {\n        result += `\\n${gap}\\n\\n`;\n      }\n    }\n\n    // Add the date header with relative time\n    const relative = formatRelativeTime(curr.date, currentDate);\n    result += `${curr.prefix}${curr.dateStr} (${relative})`;\n\n    lastIndex = curr.index + curr.match.length;\n  }\n\n  // Add remaining text after last date header\n  result += withInlineDates.slice(lastIndex);\n\n  return result;\n}\n\nexport const MIN_TEMPORAL_GAP_MS = 10 * 60 * 1000;\n\nexport function formatTemporalGap(diffMs: number): string | null {\n  if (diffMs < MIN_TEMPORAL_GAP_MS) return null;\n\n  const minute = 60 * 1000;\n  const hour = 60 * minute;\n  const day = 24 * hour;\n  const week = 7 * day;\n  const month = 30 * day;\n  const year = 365 * day;\n\n  const formatUnit = (value: number, unit: string) => `${value} ${unit}${value === 1 ? '' : 's'}`;\n\n  if (diffMs < hour) {\n    const minutes = Math.max(1, Math.round(diffMs / minute));\n    return `${formatUnit(minutes, 'minute')} later`;\n  }\n\n  const formatTwoUnits = (primaryMs: number, primaryUnit: string, secondaryMs: number, secondaryUnit: string) => {\n    const primary = Math.floor(diffMs / primaryMs);\n    const remainder = diffMs - primary * primaryMs;\n    const secondary = Math.floor(remainder / secondaryMs);\n    const parts = [formatUnit(primary, primaryUnit)];\n\n    if (secondary > 0) {\n      parts.push(formatUnit(secondary, secondaryUnit));\n    }\n\n    return `${parts.join(' ')} later`;\n  };\n\n  if (diffMs < day) {\n    return formatTwoUnits(hour, 'hour', minute, 'minute');\n  }\n\n  if (diffMs < week) {\n    return formatTwoUnits(day, 'day', hour, 'hour');\n  }\n\n  if (diffMs < month) {\n    return formatTwoUnits(week, 'week', day, 'day');\n  }\n\n  if (diffMs < year) {\n    return formatTwoUnits(month, 'month', week, 'week');\n  }\n\n  return formatTwoUnits(year, 'year', month, 'month');\n}\n\nexport function formatTemporalTimestamp(date: Date): string {\n  return date.toLocaleString('en-US', {\n    year: 'numeric',\n    month: '2-digit',\n    day: '2-digit',\n    hour: 'numeric',\n    minute: '2-digit',\n    hour12: true,\n    timeZoneName: 'short',\n  });\n}\n\nexport function getMessagePartTimestamp(msg: MastraDBMessage, position: 'first' | 'last'): number {\n  const timestamps = msg.content?.parts\n    ?.map(part => ('createdAt' in part ? part.createdAt : undefined))\n    .filter((timestamp): timestamp is number => typeof timestamp === 'number');\n\n  if (timestamps && timestamps.length > 0) {\n    const index = position === 'first' ? 0 : timestamps.length - 1;\n    const timestamp = timestamps[index];\n    if (timestamp !== undefined) return timestamp;\n  }\n\n  return new Date(msg.createdAt).getTime();\n}\n\nexport function isTemporalGapMarker(msg: MastraDBMessage): boolean {\n  return msg.id.startsWith('__temporal_');\n}\n","import type { ProcessorContext } from '@mastra/core/processors';\nimport type { RequestContext } from '@mastra/core/request-context';\n\nimport type { Memory } from '../..';\nimport type { BuiltInExtractorSlug, Extractor, ExtractorSource } from './extractor';\nimport { BUILT_IN_EXTRACTOR_SLUGS, isBuiltInExtractorSlug } from './extractor';\n\nexport interface ExtractedValueMetadata {\n  currentTask?: string;\n  suggestedResponse?: string;\n  threadTitle?: string;\n  extracted?: Record<string, unknown>;\n}\n\nexport interface ExtractionFailure {\n  slug: string;\n  error: string;\n}\n\nexport interface ExtractedBuiltInValues {\n  currentTask?: string;\n  suggestedContinuation?: string;\n  threadTitle?: string;\n}\n\ntype BuiltInMetadataField = Exclude<keyof ExtractedValueMetadata, 'extracted'>;\ntype ExtractedBuiltInField = keyof ExtractedBuiltInValues;\n\nconst BUILT_IN_METADATA_FIELDS: Record<\n  BuiltInExtractorSlug,\n  { metadataField: BuiltInMetadataField; builtInField: ExtractedBuiltInField }\n> = {\n  'current-task': { metadataField: 'currentTask', builtInField: 'currentTask' },\n  'suggested-response': { metadataField: 'suggestedResponse', builtInField: 'suggestedContinuation' },\n  'thread-title': { metadataField: 'threadTitle', builtInField: 'threadTitle' },\n};\n\nfunction isPresentExtractedValue(value: unknown): boolean {\n  return value !== undefined && value !== null && value !== '';\n}\n\nexport function normalizeExtractedValues(values?: Record<string, unknown>): Record<string, unknown> | undefined {\n  if (!values) {\n    return undefined;\n  }\n\n  const normalized = Object.fromEntries(Object.entries(values).filter(([, value]) => isPresentExtractedValue(value)));\n  return Object.keys(normalized).length > 0 ? normalized : undefined;\n}\n\nexport function mergeExtractedValues(\n  ...valueSets: Array<Record<string, unknown> | undefined>\n): Record<string, unknown> | undefined {\n  const merged: Record<string, unknown> = {};\n  for (const values of valueSets) {\n    const normalized = normalizeExtractedValues(values);\n    if (normalized) {\n      Object.assign(merged, normalized);\n    }\n  }\n  return Object.keys(merged).length > 0 ? merged : undefined;\n}\n\nexport function mergeExtractionFailures(\n  ...failureSets: Array<ExtractionFailure[] | undefined>\n): ExtractionFailure[] | undefined {\n  const failures = failureSets.flatMap(set => set ?? []);\n  return failures.length > 0 ? failures : undefined;\n}\n\nconst UNSAFE_METADATA_PATH_SEGMENTS = new Set(['__proto__', 'constructor', 'prototype']);\n\nfunction getMetadataPathSegments(keyPath: string | false): string[] | undefined {\n  if (keyPath === false) {\n    return undefined;\n  }\n\n  const segments = keyPath.split('.').filter(Boolean);\n  if (segments.some(segment => UNSAFE_METADATA_PATH_SEGMENTS.has(segment))) {\n    throw new Error(`Extractor metadataKeyPath \"${keyPath}\" contains an unsafe path segment.`);\n  }\n  return segments.length > 0 ? segments : undefined;\n}\n\nfunction getValueAtPath(metadata: ExtractedValueMetadata | undefined, keyPath: string | false): unknown {\n  if (!metadata) {\n    return undefined;\n  }\n\n  const segments = getMetadataPathSegments(keyPath);\n  if (!segments) {\n    return undefined;\n  }\n\n  let current: unknown = metadata;\n  for (const segment of segments) {\n    if (!current || typeof current !== 'object' || Array.isArray(current)) {\n      return undefined;\n    }\n    current = (current as Record<string, unknown>)[segment];\n  }\n  return current;\n}\n\nfunction setValueAtPath(metadata: ExtractedValueMetadata, keyPath: string | false, value: unknown): void {\n  if (!isPresentExtractedValue(value)) {\n    return;\n  }\n\n  const segments = getMetadataPathSegments(keyPath);\n  if (!segments) {\n    return;\n  }\n\n  let current = metadata as Record<string, unknown>;\n  for (const segment of segments.slice(0, -1)) {\n    const next = current[segment];\n    if (!next || typeof next !== 'object' || Array.isArray(next)) {\n      current[segment] = {};\n    }\n    current = current[segment] as Record<string, unknown>;\n  }\n  current[segments[segments.length - 1]!] = value;\n}\n\nfunction readBuiltInMetadataValues(metadata: ExtractedValueMetadata): Partial<Record<BuiltInExtractorSlug, unknown>> {\n  const values: Partial<Record<BuiltInExtractorSlug, unknown>> = {};\n  for (const slug of BUILT_IN_EXTRACTOR_SLUGS) {\n    const { metadataField } = BUILT_IN_METADATA_FIELDS[slug]!;\n    values[slug] = metadata[metadataField];\n  }\n  return values;\n}\n\nexport function getPriorExtractedValues(\n  metadata?: ExtractedValueMetadata,\n  extractors?: readonly Extractor<any>[],\n): Record<string, unknown> | undefined {\n  if (!metadata) {\n    return undefined;\n  }\n\n  if (!extractors) {\n    return mergeExtractedValues(readBuiltInMetadataValues(metadata), metadata.extracted);\n  }\n\n  const values: Record<string, unknown> = {};\n  for (const extractor of extractors) {\n    const value = getValueAtPath(metadata, extractor.metadataKeyPath);\n    if (isPresentExtractedValue(value)) {\n      values[extractor.slug] = value;\n    }\n  }\n  return normalizeExtractedValues(values);\n}\n\nfunction renderExtractedValue(value: unknown): string {\n  return typeof value === 'string' ? value : JSON.stringify(value);\n}\n\nexport function buildExtractedValueContextSections(\n  extractors: readonly Extractor<any>[],\n  values?: Record<string, unknown>,\n): string[] {\n  const normalized = normalizeExtractedValues(values);\n  if (!normalized) {\n    return [];\n  }\n\n  const injectableSlugs = new Set(\n    extractors\n      .filter(extractor => !isBuiltInExtractorSlug(extractor.slug) && extractor.includePreviousExtraction)\n      .map(extractor => extractor.slug),\n  );\n\n  return Object.entries(normalized)\n    .filter(([slug]) => injectableSlugs.has(slug))\n    .map(([slug, value]) => `<${slug}>\\n${renderExtractedValue(value)}\\n</${slug}>`);\n}\n\nfunction getStringExtractedValue(values: Record<string, unknown> | undefined, slug: string): string | undefined {\n  const value = values?.[slug];\n  return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nexport function getBuiltInExtractedValues(values?: Record<string, unknown>): ExtractedBuiltInValues {\n  const builtIns: ExtractedBuiltInValues = {};\n  for (const slug of BUILT_IN_EXTRACTOR_SLUGS) {\n    const { builtInField } = BUILT_IN_METADATA_FIELDS[slug]!;\n    builtIns[builtInField] = getStringExtractedValue(values, slug);\n  }\n  return builtIns;\n}\n\nexport function filterUserExtractedValues(\n  values?: Record<string, unknown>,\n  extractors?: readonly Extractor<any>[],\n): Record<string, unknown> | undefined {\n  const normalized = normalizeExtractedValues(values);\n  if (!normalized) {\n    return undefined;\n  }\n\n  const userValues = Object.fromEntries(\n    Object.entries(normalized).filter(([slug]) => {\n      const extractor = extractors?.find(candidate => candidate.slug === slug);\n      return extractor\n        ? extractor.metadataKeyPath !== false && extractor.metadataKeyPath.startsWith('extracted.')\n        : !isBuiltInExtractorSlug(slug);\n    }),\n  );\n  return Object.keys(userValues).length > 0 ? userValues : undefined;\n}\n\nexport function buildThreadMetadataFromExtractedValues(\n  extractors: readonly Extractor<any>[],\n  values?: Record<string, unknown>,\n): ExtractedValueMetadata {\n  const metadata: ExtractedValueMetadata = {};\n  const normalized = normalizeExtractedValues(values);\n  if (!normalized) {\n    return metadata;\n  }\n\n  for (const extractor of extractors) {\n    if (!Object.prototype.hasOwnProperty.call(normalized, extractor.slug)) {\n      continue;\n    }\n    setValueAtPath(metadata, extractor.metadataKeyPath, normalized[extractor.slug]);\n  }\n  return metadata;\n}\n\nexport async function applyExtractorHooks(opts: {\n  source: ExtractorSource;\n  extractors: readonly Extractor<any>[];\n  values?: Record<string, unknown>;\n  failures?: ExtractionFailure[];\n  previousValues?: Record<string, unknown>;\n  threadId: string;\n  resourceId?: string;\n  mainAgent?: ProcessorContext['agent'];\n  memory?: Memory;\n  sendSignal?: ProcessorContext['sendSignal'];\n  requestContext?: RequestContext;\n}): Promise<{ values?: Record<string, unknown>; failures?: ExtractionFailure[] }> {\n  const values = normalizeExtractedValues(opts.values) ?? {};\n  const failures: ExtractionFailure[] = [...(opts.failures ?? [])];\n\n  for (const extractor of opts.extractors) {\n    if (!Object.prototype.hasOwnProperty.call(values, extractor.slug)) {\n      continue;\n    }\n\n    const current = values[extractor.slug];\n    if (!isPresentExtractedValue(current)) {\n      delete values[extractor.slug];\n      continue;\n    }\n\n    if (!extractor.onExtracted || extractor.internal) {\n      continue;\n    }\n\n    try {\n      const hookValue = await extractor.onExtracted({\n        source: opts.source,\n        extractor,\n        threadId: opts.threadId,\n        resourceId: opts.resourceId,\n        previous: opts.previousValues?.[extractor.slug],\n        current,\n        mainAgent: opts.mainAgent,\n        memory: opts.memory,\n        sendSignal: opts.sendSignal,\n        requestContext: opts.requestContext,\n      });\n      if (hookValue === undefined) {\n        // Undefined means the hook did not replace the extracted value.\n        continue;\n      }\n      const parsed = extractor.schema.safeParse(hookValue);\n      if (parsed.success) {\n        values[extractor.slug] = parsed.data;\n      } else {\n        delete values[extractor.slug];\n        failures.push({ slug: extractor.slug, error: parsed.error.message });\n      }\n    } catch (error) {\n      delete values[extractor.slug];\n      failures.push({ slug: extractor.slug, error: error instanceof Error ? error.message : String(error) });\n    }\n  }\n\n  return {\n    values: normalizeExtractedValues(values),\n    failures: mergeExtractionFailures(failures),\n  };\n}\n","import type {\n  DataOmActivationPart,\n  DataOmBufferingEndPart,\n  DataOmBufferingFailedPart,\n  DataOmBufferingStartPart,\n  DataOmObservationEndPart,\n  DataOmObservationFailedPart,\n  DataOmObservationStartPart,\n  DataOmThreadUpdatePart,\n  ObservationMarkerConfig,\n  OmOperationType,\n} from './types';\n\n/**\n * Create a start marker for when observation begins.\n */\nexport function createObservationStartMarker(params: {\n  cycleId: string;\n  operationType: 'observation' | 'reflection';\n  tokensToObserve: number;\n  recordId: string;\n  threadId: string;\n  threadIds: string[];\n  config: ObservationMarkerConfig;\n}): DataOmObservationStartPart {\n  return {\n    type: 'data-om-observation-start',\n    data: {\n      cycleId: params.cycleId,\n      operationType: params.operationType,\n      startedAt: new Date().toISOString(),\n      tokensToObserve: params.tokensToObserve,\n      recordId: params.recordId,\n      threadId: params.threadId,\n      threadIds: params.threadIds,\n      config: params.config,\n    },\n  };\n}\n\n/**\n * Create an end marker for when observation completes successfully.\n */\nexport function createObservationEndMarker(params: {\n  cycleId: string;\n  operationType: 'observation' | 'reflection';\n  startedAt: string;\n  tokensObserved: number;\n  observationTokens: number;\n  observations?: string;\n  currentTask?: string;\n  suggestedResponse?: string;\n  extractedValues?: Record<string, unknown>;\n  extractionFailures?: Array<{ slug: string; error: string }>;\n  recordId: string;\n  threadId: string;\n}): DataOmObservationEndPart {\n  const completedAt = new Date().toISOString();\n  const durationMs = new Date(completedAt).getTime() - new Date(params.startedAt).getTime();\n\n  return {\n    type: 'data-om-observation-end',\n    data: {\n      cycleId: params.cycleId,\n      operationType: params.operationType,\n      completedAt,\n      durationMs,\n      tokensObserved: params.tokensObserved,\n      observationTokens: params.observationTokens,\n      observations: params.observations,\n      currentTask: params.currentTask,\n      suggestedResponse: params.suggestedResponse,\n      extractedValues: params.extractedValues,\n      extractionFailures: params.extractionFailures,\n      recordId: params.recordId,\n      threadId: params.threadId,\n    },\n  };\n}\n\n/**\n * Create a failed marker for when observation fails.\n */\nexport function createObservationFailedMarker(params: {\n  cycleId: string;\n  operationType: 'observation' | 'reflection';\n  startedAt: string;\n  tokensAttempted: number;\n  error: string;\n  recordId: string;\n  threadId: string;\n}): DataOmObservationFailedPart {\n  const failedAt = new Date().toISOString();\n  const durationMs = new Date(failedAt).getTime() - new Date(params.startedAt).getTime();\n\n  return {\n    type: 'data-om-observation-failed',\n    data: {\n      cycleId: params.cycleId,\n      operationType: params.operationType,\n      failedAt,\n      durationMs,\n      tokensAttempted: params.tokensAttempted,\n      error: params.error,\n      recordId: params.recordId,\n      threadId: params.threadId,\n    },\n  };\n}\n\n/**\n * Create a start marker for when async buffering begins.\n */\nexport function createBufferingStartMarker(params: {\n  cycleId: string;\n  operationType: OmOperationType;\n  tokensToBuffer: number;\n  recordId: string;\n  threadId: string;\n  threadIds: string[];\n  config: ObservationMarkerConfig;\n}): DataOmBufferingStartPart {\n  return {\n    type: 'data-om-buffering-start',\n    data: {\n      cycleId: params.cycleId,\n      operationType: params.operationType,\n      startedAt: new Date().toISOString(),\n      tokensToBuffer: params.tokensToBuffer,\n      recordId: params.recordId,\n      threadId: params.threadId,\n      threadIds: params.threadIds,\n      config: params.config,\n    },\n  };\n}\n\n/**\n * Create an end marker for when async buffering completes successfully.\n */\nexport function createBufferingEndMarker(params: {\n  cycleId: string;\n  operationType: OmOperationType;\n  startedAt: string;\n  tokensBuffered: number;\n  bufferedTokens: number;\n  recordId: string;\n  threadId: string;\n  observations?: string;\n  extractedValues?: Record<string, unknown>;\n  extractionFailures?: Array<{ slug: string; error: string }>;\n}): DataOmBufferingEndPart {\n  const completedAt = new Date().toISOString();\n  const durationMs = new Date(completedAt).getTime() - new Date(params.startedAt).getTime();\n\n  return {\n    type: 'data-om-buffering-end',\n    data: {\n      cycleId: params.cycleId,\n      operationType: params.operationType,\n      completedAt,\n      durationMs,\n      tokensBuffered: params.tokensBuffered,\n      bufferedTokens: params.bufferedTokens,\n      recordId: params.recordId,\n      threadId: params.threadId,\n      observations: params.observations,\n      extractedValues: params.extractedValues,\n      extractionFailures: params.extractionFailures,\n    },\n  };\n}\n\n/**\n * Create a failed marker for when async buffering fails.\n */\nexport function createBufferingFailedMarker(params: {\n  cycleId: string;\n  operationType: OmOperationType;\n  startedAt: string;\n  tokensAttempted: number;\n  error: string;\n  recordId: string;\n  threadId: string;\n}): DataOmBufferingFailedPart {\n  const failedAt = new Date().toISOString();\n  const durationMs = new Date(failedAt).getTime() - new Date(params.startedAt).getTime();\n\n  return {\n    type: 'data-om-buffering-failed',\n    data: {\n      cycleId: params.cycleId,\n      operationType: params.operationType,\n      failedAt,\n      durationMs,\n      tokensAttempted: params.tokensAttempted,\n      error: params.error,\n      recordId: params.recordId,\n      threadId: params.threadId,\n    },\n  };\n}\n\n/**\n * Create an activation marker for when buffered observations are activated.\n */\nexport function createActivationMarker(params: {\n  cycleId: string;\n  operationType: OmOperationType;\n  chunksActivated: number;\n  tokensActivated: number;\n  observationTokens: number;\n  messagesActivated: number;\n  recordId: string;\n  threadId: string;\n  generationCount: number;\n  observations?: string;\n  triggeredBy?: 'threshold' | 'ttl' | 'provider_change';\n  lastActivityAt?: number;\n  ttlExpiredMs?: number;\n  previousModel?: string;\n  currentModel?: string;\n  config: ObservationMarkerConfig;\n}): DataOmActivationPart {\n  return {\n    type: 'data-om-activation',\n    data: {\n      cycleId: params.cycleId,\n      operationType: params.operationType,\n      activatedAt: new Date().toISOString(),\n      chunksActivated: params.chunksActivated,\n      tokensActivated: params.tokensActivated,\n      observationTokens: params.observationTokens,\n      messagesActivated: params.messagesActivated,\n      recordId: params.recordId,\n      threadId: params.threadId,\n      generationCount: params.generationCount,\n      config: params.config,\n      observations: params.observations,\n      triggeredBy: params.triggeredBy,\n      lastActivityAt: params.lastActivityAt,\n      ttlExpiredMs: params.ttlExpiredMs,\n      previousModel: params.previousModel,\n      currentModel: params.currentModel,\n    },\n  };\n}\n\n/**\n * Create a thread update marker when the observer suggests a new thread title.\n */\nexport function createThreadUpdateMarker(params: {\n  cycleId: string;\n  threadId: string;\n  oldTitle?: string;\n  newTitle: string;\n}): DataOmThreadUpdatePart {\n  return {\n    type: 'data-om-thread-update',\n    data: {\n      cycleId: params.cycleId,\n      threadId: params.threadId,\n      oldTitle: params.oldTitle,\n      newTitle: params.newTitle,\n      timestamp: new Date().toISOString(),\n    },\n  };\n}\n","import type { MastraDBMessage, MessageList } from '@mastra/core/agent';\nimport type { BufferedObservationChunk, ObservationalMemoryRecord } from '@mastra/core/storage';\n\n/**\n * Find the index of the last completed observation boundary (end marker) in a message's parts.\n * Returns -1 if no completed observation is found.\n */\nexport function findLastCompletedObservationBoundary(message: MastraDBMessage): number {\n  const parts = message.content?.parts;\n  if (!parts || !Array.isArray(parts)) return -1;\n\n  // Search from the end to find the most recent end marker\n  for (let i = parts.length - 1; i >= 0; i--) {\n    const part = parts[i] as { type?: string };\n    if (part?.type === 'data-om-observation-end') {\n      return i;\n    }\n  }\n  return -1;\n}\n\n/**\n * Get unobserved parts from a message.\n * If the message has a completed observation (start + end), only return parts after the end.\n * If observation is in progress (start without end), include parts before the start.\n * Otherwise, return all parts.\n */\nexport function getUnobservedParts(message: MastraDBMessage): MastraDBMessage['content']['parts'] {\n  const parts = message.content?.parts;\n  if (!parts || !Array.isArray(parts)) return [];\n\n  const endMarkerIndex = findLastCompletedObservationBoundary(message);\n  if (endMarkerIndex === -1) {\n    // No completed observation - all parts are unobserved\n    // (This includes the case where observation is in progress)\n    return parts.filter(p => {\n      const part = p as { type?: string };\n      // Exclude start markers that are in progress\n      return part?.type !== 'data-om-observation-start';\n    });\n  }\n\n  // Return only parts after the end marker (excluding start/end/failed markers)\n  return parts.slice(endMarkerIndex + 1).filter(p => {\n    const part = p as { type?: string };\n    return !part?.type?.startsWith('data-om-observation-');\n  });\n}\n\n/**\n * Check if a message has any unobserved parts.\n */\nexport function hasUnobservedParts(message: MastraDBMessage): boolean {\n  return getUnobservedParts(message).length > 0;\n}\n\n/**\n * Compute a cursor pointing at the latest message by createdAt.\n * Used to derive a stable observation boundary for replay pruning.\n */\nexport function getLastObservedMessageCursor(\n  messages: MastraDBMessage[],\n): { createdAt: string; id: string } | undefined {\n  let latest: MastraDBMessage | undefined;\n  for (const msg of messages) {\n    if (!msg?.id || !msg.createdAt) continue;\n    if (!latest || new Date(msg.createdAt).getTime() > new Date(latest.createdAt!).getTime()) {\n      latest = msg;\n    }\n  }\n  return latest ? { createdAt: new Date(latest.createdAt!).toISOString(), id: latest.id } : undefined;\n}\n\n/**\n * Check if a message is at or before a cursor (by createdAt then id).\n */\nexport function isMessageAtOrBeforeCursor(msg: MastraDBMessage, cursor: { createdAt: string; id: string }): boolean {\n  if (!msg.createdAt) return false;\n  const msgIso = new Date(msg.createdAt).toISOString();\n  if (msgIso < cursor.createdAt) return true;\n  if (msgIso === cursor.createdAt && msg.id === cursor.id) return true;\n  return false;\n}\n\n/**\n * Safely extract buffered observation chunks from a record.\n * Handles both array and JSON-string formats, returning empty array if malformed.\n */\n/**\n * Filter out already-observed messages from the in-memory context.\n * Uses marker-boundary pruning (preferred) or record-based fallback.\n *\n * The `fallbackCursor` is optional — callers that need it should resolve it\n * from thread metadata before calling this function.\n */\nexport function filterObservedMessages(opts: {\n  messageList: MessageList;\n  record?: ObservationalMemoryRecord;\n  useMarkerBoundaryPruning?: boolean;\n  fallbackCursor?: { createdAt: string; id: string };\n  preserveMessageIds?: Set<string>;\n}): void {\n  const { messageList, record } = opts;\n  const allMessages = messageList.get.all.db();\n  const useMarkerBoundaryPruning = opts.useMarkerBoundaryPruning ?? true;\n  const preserveMessageIds = opts.preserveMessageIds ?? new Set<string>();\n\n  let markerMessageIndex = -1;\n  let markerMessage: MastraDBMessage | null = null;\n\n  for (let i = allMessages.length - 1; i >= 0; i--) {\n    const msg = allMessages[i];\n    if (!msg) continue;\n    if (findLastCompletedObservationBoundary(msg) !== -1) {\n      markerMessageIndex = i;\n      markerMessage = msg;\n      break;\n    }\n  }\n\n  if (useMarkerBoundaryPruning && markerMessage && markerMessageIndex !== -1) {\n    const messagesToRemove: string[] = [];\n    for (let i = 0; i < markerMessageIndex; i++) {\n      const msg = allMessages[i];\n      if (msg?.id && msg.id !== 'om-continuation' && !preserveMessageIds.has(msg.id)) {\n        messagesToRemove.push(msg.id);\n      }\n    }\n\n    if (messagesToRemove.length > 0) {\n      messageList.removeByIds(messagesToRemove);\n    }\n\n    const unobserved = getUnobservedParts(markerMessage);\n    if (unobserved.length === 0) {\n      if (markerMessage.id) messageList.removeByIds([markerMessage.id]);\n    } else if (unobserved.length < (markerMessage.content?.parts?.length ?? 0)) {\n      markerMessage.content.parts = unobserved;\n    }\n  } else if (record) {\n    const observedIds = new Set<string>(Array.isArray(record.observedMessageIds) ? record.observedMessageIds : []);\n\n    const derivedCursor =\n      opts.fallbackCursor ??\n      getLastObservedMessageCursor(allMessages.filter(msg => !!msg?.id && observedIds.has(msg.id) && !!msg.createdAt));\n    const lastObservedAt = record.lastObservedAt;\n    const messagesToRemove: string[] = [];\n\n    for (const msg of allMessages) {\n      if (!msg?.id || msg.id === 'om-continuation' || preserveMessageIds.has(msg.id)) continue;\n\n      if (observedIds.has(msg.id)) {\n        messagesToRemove.push(msg.id);\n        continue;\n      }\n\n      if (derivedCursor && isMessageAtOrBeforeCursor(msg, derivedCursor)) {\n        messagesToRemove.push(msg.id);\n        continue;\n      }\n\n      if (lastObservedAt && msg.createdAt) {\n        const msgDate = new Date(msg.createdAt);\n        if (msgDate <= lastObservedAt) {\n          messagesToRemove.push(msg.id);\n        }\n      }\n    }\n\n    if (messagesToRemove.length > 0) {\n      messageList.removeByIds(messagesToRemove);\n    }\n  }\n}\n\nexport function getBufferedChunks(record: ObservationalMemoryRecord | null | undefined): BufferedObservationChunk[] {\n  if (!record?.bufferedObservationChunks) return [];\n  if (Array.isArray(record.bufferedObservationChunks)) return record.bufferedObservationChunks;\n  if (typeof record.bufferedObservationChunks === 'string') {\n    try {\n      const parsed = JSON.parse(record.bufferedObservationChunks);\n      return Array.isArray(parsed) ? parsed : [];\n    } catch {\n      return [];\n    }\n  }\n  return [];\n}\n\n/**\n * Sort threads by their oldest unobserved message.\n * Returns thread IDs in order from oldest to most recent.\n */\n/**\n * Combine active and buffered observations for the buffering observer context.\n */\nexport function combineObservationsForBuffering(\n  activeObservations: string | undefined,\n  bufferedObservations: string | undefined,\n): string | undefined {\n  if (!activeObservations && !bufferedObservations) return undefined;\n  if (!activeObservations) return bufferedObservations;\n  if (!bufferedObservations) return activeObservations;\n  return `${activeObservations}\\n\\n--- BUFFERED (pending activation) ---\\n\\n${bufferedObservations}`;\n}\n\nexport function sortThreadsByOldestMessage(messagesByThread: Map<string, MastraDBMessage[]>): string[] {\n  return Array.from(messagesByThread.entries())\n    .map(([threadId, messages]) => ({\n      threadId,\n      oldestTimestamp: Math.min(...messages.map(m => (m.createdAt ? new Date(m.createdAt).getTime() : Date.now()))),\n    }))\n    .sort((a, b) => a.oldestTimestamp - b.oldestTimestamp)\n    .map(t => t.threadId);\n}\n\n/**\n * Strip any thread tags that the Observer might have added.\n * Thread attribution is handled externally by the system, not by the Observer.\n */\nexport function stripThreadTags(observations: string): string {\n  // Match <thread ...> and </thread> via a single bounded pattern. Using\n  // a \\b word boundary after \"thread\" prevents the engine from starting\n  // a hot path at every \"<thread...\" position in the input, which is how\n  // the polynomial worst case materialises on attacker-crafted strings.\n  return observations.replace(/<\\/?thread\\b[^>]{0,1024}>/gi, '').trim();\n}\n","import type { AgentConfig } from '@mastra/core/agent';\nimport type { MastraModelConfig } from '@mastra/core/llm';\n\ntype TieredModelTarget = MastraModelConfig;\n\nexport interface ModelByInputTokensConfig {\n  upTo: Record<number, TieredModelTarget>;\n}\n\nfunction isTieredModelTarget(model: unknown): model is TieredModelTarget {\n  if (typeof model === 'string') {\n    return true;\n  }\n\n  if (!model || typeof model !== 'object') {\n    return false;\n  }\n\n  return (\n    'modelId' in model ||\n    'id' in model ||\n    'providerId' in model ||\n    'provider' in model ||\n    ('doGenerate' in model && 'doStream' in model)\n  );\n}\n\nfunction normalizeThresholds(config: ModelByInputTokensConfig) {\n  const entries = Object.entries(config.upTo);\n\n  if (entries.length === 0) {\n    throw new Error('ModelByInputTokens requires at least one threshold in \"upTo\"');\n  }\n\n  for (const [limitStr, model] of entries) {\n    const limit = Number(limitStr);\n    if (!Number.isFinite(limit) || limit <= 0) {\n      throw new Error(`ModelByInputTokens threshold keys must be positive numbers. Got: ${limitStr}`);\n    }\n\n    if (!isTieredModelTarget(model)) {\n      throw new Error(`ModelByInputTokens requires a valid model target for threshold ${limitStr}`);\n    }\n  }\n\n  return entries.map(([limitStr, model]) => ({ limit: Number(limitStr), model })).sort((a, b) => a.limit - b.limit);\n}\n\nexport class ModelByInputTokens {\n  private readonly thresholds: Array<{ limit: number; model: AgentConfig['model'] }>;\n\n  constructor(config: ModelByInputTokensConfig) {\n    this.thresholds = normalizeThresholds(config);\n  }\n\n  resolve(inputTokens: number): AgentConfig['model'] {\n    for (const { limit, model } of this.thresholds) {\n      if (inputTokens <= limit) {\n        return model;\n      }\n    }\n\n    const maxLimit = this.thresholds[this.thresholds.length - 1]!.limit;\n    throw new Error(\n      `ModelByInputTokens: input token count (${inputTokens}) exceeds the largest configured threshold (${maxLimit}). ` +\n        `Please configure a higher threshold or use a larger model.`,\n    );\n  }\n\n  getThresholds(): number[] {\n    return this.thresholds.map(t => t.limit);\n  }\n}\n","import { randomBytes } from 'node:crypto';\n\nexport interface ObservationGroup {\n  id: string;\n  range: string;\n  content: string;\n  kind?: string;\n}\n\ninterface ReflectionObservationGroupSection {\n  heading: string;\n  body: string;\n}\n\nconst OBSERVATION_GROUP_PATTERN = /<observation-group\\s([^>]*)>([\\s\\S]*?)<\\/observation-group>/g;\nconst ATTRIBUTE_PATTERN = /([\\w][\\w-]*)=\"([^\"]*)\"/g;\nconst REFLECTION_GROUP_SPLIT_PATTERN = /^##\\s+Group\\s+/m;\n\nfunction parseObservationGroupAttributes(attributeString: string): Record<string, string> {\n  const attributes: Record<string, string> = {};\n\n  for (const match of attributeString.matchAll(ATTRIBUTE_PATTERN)) {\n    const [, key, value] = match;\n    if (key && value !== undefined) {\n      attributes[key] = value;\n    }\n  }\n\n  return attributes;\n}\n\nfunction parseReflectionObservationGroupSections(content: string): ReflectionObservationGroupSection[] {\n  const normalizedContent = content.trim();\n  if (!normalizedContent || !REFLECTION_GROUP_SPLIT_PATTERN.test(normalizedContent)) {\n    return [];\n  }\n\n  return normalizedContent\n    .split(REFLECTION_GROUP_SPLIT_PATTERN)\n    .map(section => section.trim())\n    .filter(Boolean)\n    .map(section => {\n      const newlineIndex = section.indexOf('\\n');\n      const heading = (newlineIndex >= 0 ? section.slice(0, newlineIndex) : section).trim();\n      const body = (newlineIndex >= 0 ? section.slice(newlineIndex + 1) : '').trim();\n\n      return {\n        heading,\n        body: stripReflectionGroupMetadata(body),\n      };\n    });\n}\n\nfunction stripReflectionGroupMetadata(body: string): string {\n  return body.replace(/^_range:\\s*`[^`]*`_\\s*\\n?/m, '').trim();\n}\n\nexport function generateAnchorId(): string {\n  return randomBytes(8).toString('hex');\n}\n\nexport function wrapInObservationGroup(\n  observations: string,\n  range: string,\n  id = generateAnchorId(),\n  _sourceGroupIds?: string[],\n  kind?: string,\n): string {\n  const content = observations.trim();\n  const kindAttr = kind ? ` kind=\"${kind}\"` : '';\n  return `<observation-group id=\"${id}\" range=\"${range}\"${kindAttr}>\\n${content}\\n</observation-group>`;\n}\n\nexport function parseObservationGroups(observations: string): ObservationGroup[] {\n  if (!observations) {\n    return [];\n  }\n\n  const groups: ObservationGroup[] = [];\n  let match: RegExpExecArray | null;\n\n  while ((match = OBSERVATION_GROUP_PATTERN.exec(observations)) !== null) {\n    const attributes = parseObservationGroupAttributes(match[1] ?? '');\n    const id = attributes.id;\n    const range = attributes.range;\n\n    if (!id || !range) {\n      continue;\n    }\n\n    groups.push({\n      id,\n      range,\n      kind: attributes.kind,\n      content: match[2]!.trim(),\n    });\n  }\n\n  return groups;\n}\n\nexport function stripObservationGroups(observations: string): string {\n  if (!observations) {\n    return observations;\n  }\n\n  return observations\n    .replace(OBSERVATION_GROUP_PATTERN, (_match, _attributes, content: string) => content.trim())\n    .replace(/\\n{3,}/g, '\\n\\n')\n    .trim();\n}\n\nfunction getRangeSegments(range: string): string[] {\n  return range\n    .split(',')\n    .map(segment => segment.trim())\n    .filter(Boolean);\n}\n\nexport function combineObservationGroupRanges(groups: ObservationGroup[]): string {\n  const segments = groups.flatMap(group => getRangeSegments(group.range));\n  if (segments.length === 0) {\n    return '';\n  }\n\n  const firstSegment = segments[0];\n  const lastSegment = segments[segments.length - 1];\n  const firstStart = firstSegment?.split(':')[0]?.trim();\n  const lastEnd = lastSegment?.split(':').at(-1)?.trim();\n\n  if (firstStart && lastEnd) {\n    return `${firstStart}:${lastEnd}`;\n  }\n\n  return Array.from(new Set(segments)).join(',');\n}\n\nexport function renderObservationGroupsForReflection(observations: string): string | null {\n  const groups = parseObservationGroups(observations);\n  if (groups.length === 0) {\n    return null;\n  }\n\n  // Walk the string positionally: keep ungrouped text in place, replace each\n  // <observation-group> tag with the rendered ## Group heading.\n  const groupsByContent = new Map(groups.map(g => [g.content.trim(), g]));\n  const result = observations.replace(OBSERVATION_GROUP_PATTERN, (_match, _attrs: string, content: string) => {\n    const group = groupsByContent.get(content.trim());\n    if (!group) return content.trim();\n    return `## Group \\`${group.id}\\`\\n_range: \\`${group.range}\\`_\\n\\n${group.content}`;\n  });\n\n  return result.replace(/\\n{3,}/g, '\\n\\n').trim();\n}\n\nfunction getCanonicalGroupId(sectionHeading: string, fallbackIndex: number): string {\n  const match = sectionHeading.match(/`([^`]+)`/);\n  return match?.[1]?.trim() || `derived-group-${fallbackIndex + 1}`;\n}\n\nexport function deriveObservationGroupProvenance(content: string, groups: ObservationGroup[]): ObservationGroup[] {\n  const sections = parseReflectionObservationGroupSections(content);\n  if (sections.length === 0 || groups.length === 0) {\n    return [];\n  }\n\n  return sections.map((section, index) => {\n    const bodyLines = new Set(\n      section.body\n        .split('\\n')\n        .map(line => line.trim())\n        .filter(Boolean),\n    );\n\n    const matchingGroups = groups.filter(group => {\n      const groupLines = group.content\n        .split('\\n')\n        .map(line => line.trim())\n        .filter(Boolean);\n      return groupLines.some(line => bodyLines.has(line));\n    });\n\n    const fallbackGroup = groups[Math.min(index, groups.length - 1)];\n    const resolvedGroups = matchingGroups.length > 0 ? matchingGroups : fallbackGroup ? [fallbackGroup] : [];\n    const canonicalGroupId = getCanonicalGroupId(section.heading, index);\n\n    return {\n      id: canonicalGroupId,\n      range: combineObservationGroupRanges(resolvedGroups),\n      kind: 'reflection',\n      content: section.body,\n    };\n  });\n}\n\nexport function reconcileObservationGroupsFromReflection(content: string, sourceObservations: string): string | null {\n  const sourceGroups = parseObservationGroups(sourceObservations);\n  if (sourceGroups.length === 0) {\n    return null;\n  }\n\n  const normalizedContent = content.trim();\n  if (!normalizedContent) {\n    return '';\n  }\n\n  const derivedGroups = deriveObservationGroupProvenance(normalizedContent, sourceGroups);\n  if (derivedGroups.length > 0) {\n    return derivedGroups\n      .map(group => wrapInObservationGroup(group.content, group.range, group.id, undefined, group.kind))\n      .join('\\n\\n');\n  }\n\n  return wrapInObservationGroup(\n    normalizedContent,\n    combineObservationGroupRanges(sourceGroups),\n    generateAnchorId(),\n    undefined,\n    'reflection',\n  );\n}\n","import type { BufferedObservationChunk } from '@mastra/core/storage';\n\nimport type { ThresholdRange } from './types';\n\n/**\n * Get the maximum value from a threshold (simple number or range).\n */\nexport function getMaxThreshold(threshold: number | ThresholdRange): number {\n  if (typeof threshold === 'number') {\n    return threshold;\n  }\n  return threshold.max;\n}\n\n/**\n * Calculate dynamic threshold based on observation space.\n * When shareTokenBudget is enabled, the message threshold can expand\n * into unused observation space, up to the total context budget.\n *\n * Total budget = messageTokens + observationTokens\n * Effective threshold = totalBudget - currentObservationTokens\n *\n * Example with 30k:40k thresholds (70k total):\n * - 0 observations → messages can use ~70k\n * - 10k observations → messages can use ~60k\n * - 40k observations → messages back to ~30k\n */\nexport function calculateDynamicThreshold(\n  threshold: number | ThresholdRange,\n  currentObservationTokens: number,\n): number {\n  // If not using adaptive threshold (simple number), return as-is\n  if (typeof threshold === 'number') {\n    return threshold;\n  }\n\n  // Adaptive threshold: use remaining space in total budget\n  // Total budget is stored as threshold.max (base + reflection threshold)\n  // Base threshold is stored as threshold.min\n  const totalBudget = threshold.max;\n  const baseThreshold = threshold.min;\n\n  // Effective threshold = total budget minus current observations\n  // But never go below the base threshold\n  const effectiveThreshold = Math.max(totalBudget - currentObservationTokens, baseThreshold);\n\n  return Math.round(effectiveThreshold);\n}\n\n/**\n * Resolve bufferTokens config value.\n * Values in (0, 1) are treated as ratios of the message threshold.\n * e.g. bufferTokens: 0.25 with messageTokens: 20_000 → 5_000\n */\nexport function resolveBufferTokens(\n  bufferTokens: number | false | undefined,\n  messageTokens: number | ThresholdRange,\n): number | undefined {\n  if (bufferTokens === false) return undefined;\n  if (bufferTokens === undefined) return undefined;\n  if (bufferTokens > 0 && bufferTokens < 1) {\n    return Math.round(getMaxThreshold(messageTokens) * bufferTokens);\n  }\n  return bufferTokens;\n}\n\n/**\n * Resolve blockAfter config value.\n * Values in [1, 100) are treated as multipliers of the threshold.\n * e.g. blockAfter: 1.5 with messageTokens: 20_000 → 30_000\n * Values >= 100 are treated as absolute token counts.\n * Defaults to 1.2 (120% of threshold) when async buffering is enabled but blockAfter is omitted.\n */\nexport function resolveBlockAfter(\n  blockAfter: number | undefined,\n  messageTokens: number | ThresholdRange,\n): number | undefined {\n  if (blockAfter === undefined) return undefined;\n  // Values between 1 (inclusive) and 100 (exclusive) are treated as multipliers of the threshold.\n  // e.g. blockAfter: 1.5 means 1.5x the threshold. blockAfter: 1 means exactly at threshold.\n  // Values >= 100 are treated as absolute token counts.\n  if (blockAfter >= 1 && blockAfter < 100) {\n    return Math.round(getMaxThreshold(messageTokens) * blockAfter);\n  }\n  return blockAfter;\n}\n\n/**\n * Convert bufferActivation to an absolute retention floor (tokens to keep after activation).\n * When bufferActivation >= 1000, it's an absolute retention target.\n * Otherwise it's a ratio: retentionFloor = threshold * (1 - ratio).\n */\nexport function resolveRetentionFloor(bufferActivation: number, messageTokensThreshold: number): number {\n  if (bufferActivation >= 1000) return bufferActivation;\n  const ratio = Math.max(0, Math.min(1, bufferActivation));\n  return messageTokensThreshold * (1 - ratio);\n}\n\n/**\n * Convert bufferActivation to the equivalent ratio (0-1) for the storage layer.\n * When bufferActivation >= 1000, it's an absolute retention target, so we compute\n * the equivalent ratio: 1 - (bufferActivation / threshold).\n */\nexport function resolveActivationRatio(bufferActivation: number, messageTokensThreshold: number): number {\n  if (bufferActivation >= 1000) {\n    return Math.max(0, Math.min(1, 1 - bufferActivation / messageTokensThreshold));\n  }\n  return Math.max(0, Math.min(1, bufferActivation));\n}\n\n/**\n * Calculate the projected message tokens that would be removed if activation happened now.\n * This replicates the chunk boundary logic in swapBufferedToActive without actually activating.\n */\nexport function calculateProjectedMessageRemoval(\n  chunks: BufferedObservationChunk[],\n  bufferActivation: number,\n  messageTokensThreshold: number,\n  currentPendingTokens: number,\n): number {\n  if (chunks.length === 0) return 0;\n\n  const retentionFloor = resolveRetentionFloor(bufferActivation, messageTokensThreshold);\n  const targetMessageTokens = Math.max(0, currentPendingTokens - retentionFloor);\n\n  // Already within retention floor — no removal needed\n  if (targetMessageTokens === 0) return 0;\n\n  // Find the closest chunk boundary to the target, biased over (prefer removing\n  // slightly more than the target so remaining context lands at or below retentionFloor).\n  // Track both best-over and best-under boundaries so we can fall back to under\n  // if the over boundary would overshoot by too much.\n  let cumulativeMessageTokens = 0;\n  let bestOverBoundary = 0;\n  let bestOverTokens = 0;\n  let bestUnderBoundary = 0;\n  let bestUnderTokens = 0;\n\n  for (let i = 0; i < chunks.length; i++) {\n    cumulativeMessageTokens += chunks[i]!.messageTokens ?? 0;\n    const boundary = i + 1;\n\n    if (cumulativeMessageTokens >= targetMessageTokens) {\n      // Over or equal — track the closest (lowest) over boundary\n      if (bestOverBoundary === 0 || cumulativeMessageTokens < bestOverTokens) {\n        bestOverBoundary = boundary;\n        bestOverTokens = cumulativeMessageTokens;\n      }\n    } else {\n      // Under — track the closest (highest) under boundary\n      if (cumulativeMessageTokens > bestUnderTokens) {\n        bestUnderBoundary = boundary;\n        bestUnderTokens = cumulativeMessageTokens;\n      }\n    }\n  }\n\n  // Safeguard: if the over boundary would eat into more than 95% of the\n  // retention floor, fall back to the best under boundary instead.\n  // This prevents edge cases where a large chunk overshoots dramatically.\n  // Additionally, never bias over if it would leave fewer than the smaller of\n  // 1000 tokens or the retention floor — at that level the agent may lose\n  // all meaningful context.\n  const maxOvershoot = retentionFloor * 0.95;\n  const overshoot = bestOverTokens - targetMessageTokens;\n  const remainingAfterOver = currentPendingTokens - bestOverTokens;\n  const remainingAfterUnder = currentPendingTokens - bestUnderTokens;\n  // When activationRatio ≈ 1.0, retentionFloor is 0 and minRemaining becomes 0 — intentional for \"activate everything\" configs.\n  const minRemaining = Math.min(1000, retentionFloor);\n\n  let bestBoundaryMessageTokens: number;\n\n  if (bestOverBoundary > 0 && overshoot <= maxOvershoot && remainingAfterOver >= minRemaining) {\n    bestBoundaryMessageTokens = bestOverTokens;\n  } else if (bestUnderBoundary > 0 && remainingAfterUnder >= minRemaining) {\n    bestBoundaryMessageTokens = bestUnderTokens;\n  } else if (bestOverBoundary > 0) {\n    // All boundaries are over and exceed the safeguard — still activate\n    // the closest over boundary (better than nothing)\n    bestBoundaryMessageTokens = bestOverTokens;\n  } else {\n    return chunks[0]?.messageTokens ?? 0;\n  }\n\n  return bestBoundaryMessageTokens;\n}\n","import type { MastraDBMessage, MessageList } from '@mastra/core/agent';\nimport type { MessageHistory } from '@mastra/core/processors';\nimport type { MemoryStorage } from '@mastra/core/storage';\nimport xxhash from 'xxhash-wasm';\n\nimport type { Memory } from '../../..';\nimport { omDebug, omError } from '../debug';\nimport { stripThreadTags } from '../message-utils';\nimport { parseObservationGroups, wrapInObservationGroup } from '../observation-groups';\nimport type { ObserverRunner } from '../observer-runner';\nimport type { ReflectorRunner } from '../reflector-runner';\nimport { getMaxThreshold } from '../thresholds';\nimport type { TokenCounter } from '../token-counter';\nimport type {\n  ObservationDebugEvent,\n  ObservationMarkerConfig,\n  ResolvedObservationConfig,\n  ResolvedReflectionConfig,\n} from '../types';\n\nimport type { ObservationRunOpts, ObservationRunResult, ObserverOutput, ProcessedObservation } from './types';\n\n/** Module-level xxhash singleton — loaded once, shared across all strategy instances. */\nconst hasherPromise = xxhash();\n\n/**\n * Dependencies injected into observation strategies.\n * Built by the factory in index.ts from the ObservationalMemory instance.\n */\nexport interface StrategyDeps {\n  storage: MemoryStorage;\n  memory?: Memory;\n  messageHistory: MessageHistory;\n  tokenCounter: TokenCounter;\n  observationConfig: ResolvedObservationConfig;\n  reflectionConfig: ResolvedReflectionConfig;\n  scope: 'thread' | 'resource';\n  retrieval: boolean;\n  observer: ObserverRunner;\n  reflector: ReflectorRunner;\n  observedMessageIds: Set<string>;\n  obscureThreadIds: boolean;\n  onIndexObservations?: (observation: {\n    text: string;\n    groupId: string;\n    range: string;\n    threadId: string;\n    resourceId: string;\n    observedAt?: Date;\n  }) => Promise<void>;\n  emitDebugEvent: (event: ObservationDebugEvent) => void;\n}\n\n/**\n * Abstract base class for observation strategies.\n *\n * Each strategy implements the phases of the observation lifecycle\n * (prepare → observe → process → persist) while the base class handles\n * the shared orchestration (lock guard, marker emission, reflection, error handling).\n */\nexport abstract class ObservationStrategy {\n  protected readonly storage: MemoryStorage;\n  protected readonly messageHistory: MessageHistory;\n  protected readonly tokenCounter: TokenCounter;\n  protected readonly observationConfig: ResolvedObservationConfig;\n  protected readonly reflectionConfig: ResolvedReflectionConfig;\n  protected readonly scope: 'thread' | 'resource';\n  protected readonly retrieval: boolean;\n\n  /** Select the right strategy based on scope and mode. Wired up by index.ts. */\n  static create: (om: unknown, opts: ObservationRunOpts) => ObservationStrategy;\n\n  constructor(\n    protected readonly deps: StrategyDeps,\n    protected readonly opts: ObservationRunOpts,\n  ) {\n    this.storage = deps.storage;\n    this.messageHistory = deps.messageHistory;\n    this.tokenCounter = deps.tokenCounter;\n    this.observationConfig = deps.observationConfig;\n    this.reflectionConfig = deps.reflectionConfig;\n    this.scope = deps.scope;\n    this.retrieval = deps.retrieval;\n  }\n\n  /**\n   * Run the full observation lifecycle.\n   * @returns Result with `observed` flag and optional `usage` from the observer LLM call.\n   * @throws On sync/resource-scoped observer failure after failed markers (same as pre–Option-A contract).\n   */\n  async run(): Promise<ObservationRunResult> {\n    const { record, threadId, abortSignal, writer, reflectionHooks, requestContext } = this.opts;\n    const cycleId = this.generateCycleId();\n\n    try {\n      if (this.needsLock) {\n        const fresh = await this.storage.getObservationalMemory(record.threadId, record.resourceId);\n        if (fresh?.lastObservedAt && record.lastObservedAt && fresh.lastObservedAt > record.lastObservedAt) {\n          return { observed: false };\n        }\n      }\n\n      const { messages, existingObservations } = await this.prepare();\n      await this.emitStartMarkers(cycleId);\n      const output = await this.observe(existingObservations, messages);\n      const processed = await this.process(output, existingObservations);\n      await this.persist(processed);\n      await this.emitEndMarkers(cycleId, processed);\n\n      if (this.needsReflection) {\n        await this.deps.reflector.maybeReflect({\n          record: { ...record, activeObservations: processed.observations },\n          observationTokens: processed.observationTokens,\n          threadId,\n          writer,\n          abortSignal,\n          mainAgent: this.opts.agent,\n          sendSignal: this.opts.sendSignal,\n          reflectionHooks,\n          requestContext,\n          observabilityContext: this.opts.observabilityContext,\n        });\n      }\n\n      return { observed: true, usage: output.usage, providerMetadata: output.providerMetadata };\n    } catch (error) {\n      await this.emitFailedMarkers(cycleId, error);\n\n      if (!this.rethrowOnFailure) {\n        const failedMarkerForStorage = {\n          type: 'data-om-observation-failed',\n          data: {\n            cycleId,\n            operationType: 'observation',\n            startedAt: new Date().toISOString(),\n            error: error instanceof Error ? error.message : String(error),\n            recordId: record.id,\n            threadId,\n          },\n        };\n        await this.persistMarkerToStorage(failedMarkerForStorage, threadId, this.opts.resourceId).catch(() => {});\n        if (abortSignal?.aborted) throw error;\n        omError('[OM] Observation failed', error);\n        return { observed: false };\n      }\n\n      // Sync + resource-scoped: same contract as pre-#14453 — rethrow after failed markers.\n      omError('[OM] Observation failed', error);\n      throw error;\n    }\n  }\n\n  // ── Shared helpers ──────────────────────────────────────────\n\n  protected generateCycleId(): string {\n    return crypto.randomUUID();\n  }\n\n  protected async streamMarker(marker: { type: string; data: unknown }): Promise<void> {\n    if (this.opts.writer) {\n      // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n      await this.opts.writer.custom({ ...marker, transient: true }).catch(() => {});\n    }\n\n    const markerThreadId = (marker.data as { threadId?: string } | undefined)?.threadId ?? this.opts.threadId;\n    await this.persistMarkerToStorage(marker, markerThreadId, this.opts.resourceId);\n  }\n\n  protected getObservationMarkerConfig(): ObservationMarkerConfig {\n    return {\n      messageTokens: getMaxThreshold(this.observationConfig.messageTokens),\n      observationTokens: getMaxThreshold(this.reflectionConfig.observationTokens),\n      scope: this.scope,\n    };\n  }\n\n  protected getMaxMessageTimestamp(messages: MastraDBMessage[]): Date {\n    let maxTime = 0;\n    for (const msg of messages) {\n      if (msg.createdAt) {\n        const msgTime = new Date(msg.createdAt).getTime();\n        if (msgTime > maxTime) {\n          maxTime = msgTime;\n        }\n      }\n    }\n    return maxTime > 0 ? new Date(maxTime) : new Date();\n  }\n\n  // ── Observation formatting ──────────────────────────────────\n\n  /**\n   * Wrap observations in a thread attribution tag.\n   * In resource scope, thread IDs can be obscured via xxhash.\n   */\n  protected async wrapWithThreadTag(threadId: string, observations: string, messageRange?: string): Promise<string> {\n    const cleanObservations = stripThreadTags(observations);\n    const groupedObservations =\n      this.retrieval && messageRange ? wrapInObservationGroup(cleanObservations, messageRange) : cleanObservations;\n    let displayId = threadId;\n    if (this.deps.obscureThreadIds) {\n      const hasher = await hasherPromise;\n      displayId = hasher.h32ToString(threadId);\n    }\n    return `<thread id=\"${displayId}\">\\n${groupedObservations}\\n</thread>`;\n  }\n\n  /**\n   * Create a message boundary delimiter with an ISO 8601 date.\n   * Used to separate observation chunks for cache stability.\n   */\n  protected static createMessageBoundary(date: Date): string {\n    return `\\n\\n--- message boundary (${date.toISOString()}) ---\\n\\n`;\n  }\n\n  /**\n   * Wrap raw observations — in resource scope, wraps with thread tag and merges;\n   * in thread scope, simply appends with a message boundary delimiter.\n   */\n  protected wrapObservations(\n    rawObservations: string,\n    existingObservations: string,\n    threadId: string,\n    lastObservedAt?: Date,\n    messageRange?: string,\n  ): Promise<string> | string {\n    if (this.scope === 'resource') {\n      return (async () => {\n        const threadSection = await this.wrapWithThreadTag(threadId, rawObservations, messageRange);\n        return this.replaceOrAppendThreadSection(existingObservations, threadId, threadSection, lastObservedAt);\n      })();\n    }\n    const grouped =\n      this.retrieval && messageRange ? wrapInObservationGroup(rawObservations, messageRange) : rawObservations;\n    if (!existingObservations) return grouped;\n    const boundary = lastObservedAt ? ObservationStrategy.createMessageBoundary(lastObservedAt) : '\\n\\n';\n    return `${existingObservations}${boundary}${grouped}`;\n  }\n\n  protected replaceOrAppendThreadSection(\n    existingObservations: string,\n    _threadId: string,\n    newThreadSection: string,\n    lastObservedAt?: Date,\n  ): string {\n    if (!existingObservations) {\n      return newThreadSection;\n    }\n\n    const threadIdMatch = newThreadSection.match(/<thread id=\"([^\"]+)\">/);\n    const dateMatch = newThreadSection.match(/Date:\\s*([A-Za-z]+\\s+\\d+,\\s+\\d+)/);\n\n    if (!threadIdMatch || !dateMatch) {\n      const boundary = lastObservedAt ? ObservationStrategy.createMessageBoundary(lastObservedAt) : '\\n\\n';\n      return `${existingObservations}${boundary}${newThreadSection}`;\n    }\n\n    const newThreadId = threadIdMatch[1]!;\n    const newDate = dateMatch[1]!;\n\n    const threadOpen = `<thread id=\"${newThreadId}\">`;\n    const threadClose = '</thread>';\n    const startIdx = existingObservations.indexOf(threadOpen);\n    let existingSection: string | null = null;\n    let existingSectionStart = -1;\n    let existingSectionEnd = -1;\n\n    if (startIdx !== -1) {\n      const closeIdx = existingObservations.indexOf(threadClose, startIdx);\n      if (closeIdx !== -1) {\n        existingSectionEnd = closeIdx + threadClose.length;\n        existingSectionStart = startIdx;\n        const section = existingObservations.slice(startIdx, existingSectionEnd);\n        if (section.includes(`Date: ${newDate}`) || section.includes(`Date:${newDate}`)) {\n          existingSection = section;\n        }\n      }\n    }\n\n    if (existingSection) {\n      const dateLineEnd = newThreadSection.indexOf('\\n', newThreadSection.indexOf('Date:'));\n      const newCloseIdx = newThreadSection.lastIndexOf(threadClose);\n      if (dateLineEnd !== -1 && newCloseIdx !== -1) {\n        const newObsContent = newThreadSection.slice(dateLineEnd + 1, newCloseIdx).trim();\n        if (newObsContent) {\n          const withoutClose = existingSection.slice(0, existingSection.length - threadClose.length).trimEnd();\n          const merged = `${withoutClose}\\n${newObsContent}\\n${threadClose}`;\n          return (\n            existingObservations.slice(0, existingSectionStart) +\n            merged +\n            existingObservations.slice(existingSectionEnd)\n          );\n        }\n      }\n    }\n\n    const boundary = lastObservedAt ? ObservationStrategy.createMessageBoundary(lastObservedAt) : '\\n\\n';\n    return `${existingObservations}${boundary}${newThreadSection}`;\n  }\n\n  protected async indexObservationGroups(\n    observations: string,\n    threadId: string,\n    resourceId?: string,\n    observedAt?: Date,\n  ): Promise<void> {\n    if (!resourceId || !this.deps.onIndexObservations) {\n      return;\n    }\n\n    const groups = parseObservationGroups(observations);\n    if (groups.length === 0) {\n      return;\n    }\n\n    await Promise.all(\n      groups.map(group =>\n        this.deps.onIndexObservations!({\n          text: group.content,\n          groupId: group.id,\n          range: group.range,\n          threadId,\n          resourceId,\n          observedAt,\n        }),\n      ),\n    );\n  }\n\n  // ── Marker persistence ──────────────────────────────────────\n\n  /**\n   * Persist a marker to the last assistant message in storage.\n   * Fetches messages directly from the DB so it works even when\n   * no MessageList is available (e.g. async buffering ops).\n   */\n  protected async persistMarkerToStorage(\n    marker: { type: string; data: unknown },\n    threadId: string,\n    resourceId?: string,\n  ): Promise<void> {\n    try {\n      const result = await this.storage.listMessages({\n        threadId,\n        perPage: 20,\n        orderBy: { field: 'createdAt', direction: 'DESC' },\n      });\n      const messages = result?.messages ?? [];\n      for (const msg of messages) {\n        if (msg?.role === 'assistant' && msg.content?.parts && Array.isArray(msg.content.parts)) {\n          const markerData = marker.data as { cycleId?: string } | undefined;\n          const alreadyPresent =\n            markerData?.cycleId &&\n            msg.content.parts.some((p: any) => p?.type === marker.type && p?.data?.cycleId === markerData.cycleId);\n          if (!alreadyPresent) {\n            msg.content.parts.push(marker as any);\n          }\n          await this.messageHistory.persistMessages({\n            messages: [msg],\n            threadId,\n            resourceId,\n          });\n          return;\n        }\n      }\n    } catch (e) {\n      omDebug(`[OM:persistMarkerToStorage] failed to save marker to DB: ${e}`);\n    }\n  }\n\n  /**\n   * Persist a marker part on the last assistant message in a MessageList\n   * AND save the updated message to the DB.\n   */\n  protected async persistMarkerToMessage(\n    marker: { type: string; data: unknown },\n    messageList: MessageList | undefined,\n    threadId: string,\n    resourceId?: string,\n  ): Promise<void> {\n    if (!messageList) return;\n    const allMsgs = messageList.get.all.db();\n    for (let i = allMsgs.length - 1; i >= 0; i--) {\n      const msg = allMsgs[i];\n      if (msg?.role === 'assistant' && msg.content?.parts && Array.isArray(msg.content.parts)) {\n        const markerData = marker.data as { cycleId?: string } | undefined;\n        const alreadyPresent =\n          markerData?.cycleId &&\n          msg.content.parts.some((p: any) => p?.type === marker.type && p?.data?.cycleId === markerData.cycleId);\n        if (!alreadyPresent) {\n          msg.content.parts.push(marker as any);\n        }\n        try {\n          await this.messageHistory.persistMessages({\n            messages: [msg],\n            threadId,\n            resourceId,\n          });\n        } catch (e) {\n          omDebug(`[OM:persistMarker] failed to save marker to DB: ${e}`);\n        }\n        return;\n      }\n    }\n  }\n\n  // ── Abstract phase methods ──────────────────────────────────\n\n  abstract get needsLock(): boolean;\n  abstract get needsReflection(): boolean;\n  abstract get rethrowOnFailure(): boolean;\n  abstract prepare(): Promise<{ messages: MastraDBMessage[]; existingObservations: string }>;\n  abstract observe(existingObservations: string, messages: MastraDBMessage[]): Promise<ObserverOutput>;\n  abstract process(output: ObserverOutput, existingObservations: string): Promise<ProcessedObservation>;\n  abstract persist(processed: ProcessedObservation): Promise<void>;\n  abstract emitStartMarkers(cycleId: string): Promise<void>;\n  abstract emitEndMarkers(cycleId: string, processed: ProcessedObservation): Promise<void>;\n  abstract emitFailedMarkers(cycleId: string, error: unknown): Promise<void>;\n}\n","import type { MastraDBMessage } from '@mastra/core/agent';\nimport { getThreadOMMetadata, setThreadOMMetadata } from '@mastra/core/memory';\n\nimport { omDebug } from '../debug';\nimport {\n  applyExtractorHooks,\n  buildThreadMetadataFromExtractedValues,\n  getPriorExtractedValues,\n} from '../extracted-values';\nimport {\n  createObservationEndMarker,\n  createObservationFailedMarker,\n  createObservationStartMarker,\n  createThreadUpdateMarker,\n} from '../markers';\nimport { getLastObservedMessageCursor } from '../message-utils';\n\nimport { buildMessageRange } from '../observational-memory';\nimport { ObservationStrategy } from './base';\nimport type { StrategyDeps } from './base';\nimport type { ObservationRunOpts, ObserverOutput, ProcessedObservation } from './types';\n\nexport class SyncObservationStrategy extends ObservationStrategy {\n  private readonly startedAt = new Date().toISOString();\n  private readonly lastMessage: MastraDBMessage | undefined;\n  private cycleId?: string;\n  private tokensToObserve = 0;\n  private observerResult!: ObserverOutput;\n  private priorExtractedValues?: Record<string, unknown>;\n\n  constructor(deps: StrategyDeps, opts: ObservationRunOpts) {\n    super(deps, opts);\n    this.lastMessage = opts.messages[opts.messages.length - 1];\n  }\n\n  get needsLock() {\n    return true;\n  }\n  get needsReflection() {\n    return true;\n  }\n  get rethrowOnFailure() {\n    return true;\n  }\n\n  async prepare() {\n    const { record, threadId, messages } = this.opts;\n\n    this.deps.emitDebugEvent({\n      type: 'observation_triggered',\n      timestamp: new Date(),\n      threadId,\n      resourceId: record.resourceId ?? '',\n      previousObservations: record.activeObservations,\n      messages: messages.map(m => ({\n        role: m.role,\n        content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),\n      })),\n    });\n\n    const bufferActivation = this.observationConfig.bufferActivation;\n    if (bufferActivation && bufferActivation < 1 && messages.length >= 1) {\n      const newestMsg = messages[messages.length - 1];\n      if (newestMsg?.content?.parts?.length) {\n        // Set message-level sealed flag (same pattern as OM.sealMessagesForBuffering on main)\n        if (!newestMsg.content.metadata) {\n          newestMsg.content.metadata = {};\n        }\n        const metadata = newestMsg.content.metadata as { mastra?: { sealed?: boolean } };\n        if (!metadata.mastra) {\n          metadata.mastra = {};\n        }\n        metadata.mastra.sealed = true;\n        omDebug(\n          `[OM:sync-obs] sealed newest message (${newestMsg.role}, ${newestMsg.content.parts.length} parts) for ratio-aware observation`,\n        );\n      }\n    }\n\n    this.tokensToObserve = await this.tokenCounter.countMessagesAsync(messages);\n\n    const freshRecord = await this.storage.getObservationalMemory(record.threadId, record.resourceId);\n    const existingObservations = freshRecord?.activeObservations ?? record.activeObservations ?? '';\n    return { messages, existingObservations };\n  }\n\n  async emitStartMarkers(cycleId: string) {\n    this.cycleId = cycleId;\n    if (this.lastMessage?.id) {\n      const startMarker = createObservationStartMarker({\n        cycleId,\n        operationType: 'observation',\n        tokensToObserve: this.tokensToObserve,\n        recordId: this.opts.record.id,\n        threadId: this.opts.threadId,\n        threadIds: [this.opts.threadId],\n        config: this.getObservationMarkerConfig(),\n      });\n      await this.streamMarker(startMarker);\n    }\n  }\n\n  async observe(existingObservations: string, messages: MastraDBMessage[]) {\n    // Fetch prior thread metadata for observer prompt continuity\n    const thread = await this.storage.getThreadById({ threadId: this.opts.threadId });\n    const omMeta = thread ? getThreadOMMetadata(thread.metadata) : undefined;\n    this.priorExtractedValues = getPriorExtractedValues(omMeta, this.observationConfig.extractors);\n\n    const result = await this.deps.observer.call(existingObservations, messages, this.opts.abortSignal, {\n      requestContext: this.opts.requestContext,\n      observabilityContext: this.opts.observabilityContext,\n      priorCurrentTask: omMeta?.currentTask,\n      priorSuggestedResponse: omMeta?.suggestedResponse,\n      priorThreadTitle: omMeta?.threadTitle,\n      priorExtractedValues: this.priorExtractedValues,\n      resourceId: this.opts.resourceId,\n      mainAgent: this.opts.agent,\n    });\n    const hookedValues = await applyExtractorHooks({\n      source: 'observer',\n      extractors: result.extractors ?? this.observationConfig.extractors,\n      values: result.extractedValues,\n      failures: result.extractionFailures,\n      previousValues: this.priorExtractedValues,\n      threadId: this.opts.threadId,\n      resourceId: this.opts.resourceId,\n      mainAgent: this.opts.agent,\n      memory: this.deps.memory,\n      sendSignal: this.opts.sendSignal,\n      requestContext: this.opts.requestContext,\n    });\n    const output = {\n      ...result,\n      extractedValues: hookedValues.values,\n      extractionFailures: hookedValues.failures,\n    };\n    this.observerResult = output;\n    return output;\n  }\n\n  async process(output: ObserverOutput, existingObservations: string): Promise<ProcessedObservation> {\n    const { record, threadId, messages } = this.opts;\n\n    const lastObservedAt = this.getMaxMessageTimestamp(messages);\n    const messageRange = this.retrieval ? buildMessageRange(messages) : undefined;\n    const newObservations = await this.wrapObservations(\n      output.observations,\n      existingObservations,\n      threadId,\n      lastObservedAt,\n      messageRange,\n    );\n    const observationTokens = this.tokenCounter.countObservations(newObservations);\n    const cycleObservationTokens = this.tokenCounter.countObservations(output.observations);\n\n    const newMessageIds = messages.map(m => m.id);\n    const existingIds = record.observedMessageIds ?? [];\n    const observedMessageIds = [...new Set([...(Array.isArray(existingIds) ? existingIds : []), ...newMessageIds])];\n\n    this.deps.emitDebugEvent({\n      type: 'observation_complete',\n      timestamp: new Date(),\n      threadId,\n      resourceId: record.resourceId ?? '',\n      observations: newObservations,\n      rawObserverOutput: output.observations,\n      previousObservations: record.activeObservations,\n      messages: messages.map(m => ({\n        role: m.role,\n        content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),\n      })),\n      usage: output.usage,\n    });\n\n    return {\n      observations: newObservations,\n      observationTokens,\n      cycleObservationTokens,\n      observedMessageIds,\n      lastObservedAt,\n      suggestedContinuation: output.suggestedContinuation,\n      currentTask: output.currentTask,\n      threadTitle: output.threadTitle,\n      extractedValues: output.extractedValues,\n      extractionFailures: output.extractionFailures,\n      extractors: output.extractors,\n    };\n  }\n\n  async persist(processed: ProcessedObservation) {\n    const { record, threadId, resourceId, messages } = this.opts;\n\n    const thread = await this.storage.getThreadById({ threadId });\n    let threadUpdateMarker: ReturnType<typeof createThreadUpdateMarker> | undefined;\n\n    if (thread) {\n      const oldTitle = thread.title?.trim();\n      const newTitle = processed.threadTitle?.trim();\n      const shouldUpdateThreadTitle = !!newTitle && newTitle.length >= 3 && newTitle !== oldTitle;\n      const previousOmMetadata = getThreadOMMetadata(thread.metadata);\n      const metadataUpdate = buildThreadMetadataFromExtractedValues(\n        processed.extractors ?? this.observationConfig.extractors,\n        processed.extractedValues,\n      );\n      const newMetadata = setThreadOMMetadata(thread.metadata, {\n        suggestedResponse: metadataUpdate.suggestedResponse ?? processed.suggestedContinuation,\n        currentTask: metadataUpdate.currentTask ?? processed.currentTask,\n        threadTitle: metadataUpdate.threadTitle ?? processed.threadTitle,\n        extracted: {\n          ...(previousOmMetadata?.extracted ?? {}),\n          ...(metadataUpdate.extracted ?? {}),\n        },\n        lastObservedMessageCursor: getLastObservedMessageCursor(messages),\n      });\n      await this.storage.updateThread({\n        id: threadId,\n        title: shouldUpdateThreadTitle ? newTitle : (thread.title ?? ''),\n        metadata: newMetadata,\n      });\n\n      if (shouldUpdateThreadTitle) {\n        threadUpdateMarker = createThreadUpdateMarker({\n          cycleId: this.cycleId ?? crypto.randomUUID(),\n          threadId,\n          oldTitle,\n          newTitle,\n        });\n      }\n    }\n\n    if (threadUpdateMarker) {\n      await this.streamMarker(threadUpdateMarker);\n    }\n\n    await this.storage.updateActiveObservations({\n      id: record.id,\n      observations: processed.observations,\n      tokenCount: processed.observationTokens,\n      lastObservedAt: processed.lastObservedAt,\n      observedMessageIds: processed.observedMessageIds,\n    });\n\n    await this.indexObservationGroups(processed.observations, threadId, resourceId, processed.lastObservedAt);\n  }\n\n  async emitEndMarkers(cycleId: string, processed: ProcessedObservation) {\n    const actualTokensObserved = await this.tokenCounter.countMessagesAsync(this.opts.messages);\n    if (this.lastMessage?.id) {\n      const endMarker = createObservationEndMarker({\n        cycleId,\n        operationType: 'observation',\n        startedAt: this.startedAt,\n        tokensObserved: actualTokensObserved,\n        observationTokens: processed.cycleObservationTokens,\n        observations: this.observerResult.observations,\n        currentTask: this.observerResult.currentTask,\n        suggestedResponse: this.observerResult.suggestedContinuation,\n        extractedValues: this.observerResult.extractedValues,\n        extractionFailures: this.observerResult.extractionFailures,\n        recordId: this.opts.record.id,\n        threadId: this.opts.threadId,\n      });\n      await this.streamMarker(endMarker);\n    }\n  }\n\n  async emitFailedMarkers(cycleId: string, error: unknown) {\n    if (this.lastMessage?.id) {\n      const failedMarker = createObservationFailedMarker({\n        cycleId,\n        operationType: 'observation',\n        startedAt: this.startedAt,\n        tokensAttempted: this.tokensToObserve,\n        error: error instanceof Error ? error.message : String(error),\n        recordId: this.opts.record.id,\n        threadId: this.opts.threadId,\n      });\n      await this.streamMarker(failedMarker);\n    }\n  }\n}\n","import type { MastraDBMessage } from '@mastra/core/agent';\nimport { getThreadOMMetadata, setThreadOMMetadata } from '@mastra/core/memory';\n\nimport { omDebug } from '../debug';\nimport {\n  applyExtractorHooks,\n  buildThreadMetadataFromExtractedValues,\n  getPriorExtractedValues,\n} from '../extracted-values';\nimport { createBufferingEndMarker, createBufferingFailedMarker, createThreadUpdateMarker } from '../markers';\nimport { getBufferedChunks, combineObservationsForBuffering } from '../message-utils';\n\nimport { wrapInObservationGroup } from '../observation-groups';\nimport { buildMessageRange } from '../observational-memory';\nimport { ObservationStrategy } from './base';\nimport type { StrategyDeps } from './base';\nimport type { ObservationRunOpts, ObserverOutput, ProcessedObservation } from './types';\n\nexport class AsyncBufferObservationStrategy extends ObservationStrategy {\n  private readonly startedAt: string;\n  private readonly cycleId: string;\n  private priorExtractedValues?: Record<string, unknown>;\n\n  constructor(deps: StrategyDeps, opts: ObservationRunOpts) {\n    super(deps, opts);\n    this.cycleId = opts.cycleId!;\n    this.startedAt = opts.startedAt ?? new Date().toISOString();\n  }\n\n  get needsLock() {\n    return false;\n  }\n  get needsReflection() {\n    return false;\n  }\n  get rethrowOnFailure() {\n    return false;\n  }\n\n  protected override generateCycleId(): string {\n    return this.cycleId;\n  }\n\n  async prepare() {\n    const { record, messages } = this.opts;\n    const bufferedChunks = getBufferedChunks(record);\n    const bufferedChunksText = bufferedChunks.map(c => c.observations).join('\\n\\n');\n    const existingObservations = combineObservationsForBuffering(record.activeObservations, bufferedChunksText) ?? '';\n    return { messages, existingObservations };\n  }\n\n  async emitStartMarkers(_cycleId: string) {\n    // START marker already emitted by the launch chain before strategy runs\n  }\n\n  async observe(existingObservations: string, messages: MastraDBMessage[]) {\n    const thread = await this.storage.getThreadById({ threadId: this.opts.threadId });\n    const omMeta = thread ? getThreadOMMetadata(thread.metadata) : undefined;\n    this.priorExtractedValues = getPriorExtractedValues(omMeta, this.observationConfig.extractors);\n\n    const result = await this.deps.observer.call(existingObservations, messages, undefined, {\n      skipContinuationHints: true,\n      requestContext: this.opts.requestContext,\n      observabilityContext: this.opts.observabilityContext,\n      priorExtractedValues: this.priorExtractedValues,\n      resourceId: this.opts.resourceId,\n      mainAgent: this.opts.agent,\n    });\n    const hookedValues = await applyExtractorHooks({\n      source: 'observer',\n      extractors: result.extractors ?? this.observationConfig.extractors,\n      values: result.extractedValues,\n      failures: result.extractionFailures,\n      previousValues: this.priorExtractedValues,\n      threadId: this.opts.threadId,\n      resourceId: this.opts.resourceId,\n      mainAgent: this.opts.agent,\n      memory: this.deps.memory,\n      sendSignal: this.opts.sendSignal,\n      requestContext: this.opts.requestContext,\n    });\n    return {\n      ...result,\n      extractedValues: hookedValues.values,\n      extractionFailures: hookedValues.failures,\n    };\n  }\n\n  async process(output: ObserverOutput, _existingObservations: string): Promise<ProcessedObservation> {\n    const { threadId, messages } = this.opts;\n\n    if (!output.observations) {\n      omDebug(`[OM:asyncBuffer] empty observations returned, skipping buffer storage`);\n      return {\n        observations: '',\n        observationTokens: 0,\n        cycleObservationTokens: 0,\n        observedMessageIds: [],\n        lastObservedAt: new Date(),\n      };\n    }\n\n    const messageRange = this.retrieval ? buildMessageRange(messages) : undefined;\n    let newObservations: string;\n    if (this.scope === 'resource') {\n      newObservations = await this.wrapWithThreadTag(threadId, output.observations, messageRange);\n    } else {\n      newObservations =\n        this.retrieval && messageRange\n          ? wrapInObservationGroup(output.observations, messageRange)\n          : output.observations;\n    }\n\n    const observationTokens = this.tokenCounter.countObservations(newObservations);\n    const messageIds = messages.map(m => m.id);\n    const maxTs = this.getMaxMessageTimestamp(messages);\n    const lastObservedAt = new Date(maxTs.getTime() + 1);\n\n    return {\n      observations: newObservations,\n      observationTokens,\n      cycleObservationTokens: observationTokens,\n      observedMessageIds: messageIds,\n      lastObservedAt,\n      suggestedContinuation: output.suggestedContinuation,\n      currentTask: output.currentTask,\n      threadTitle: output.threadTitle,\n      extractedValues: output.extractedValues,\n      extractionFailures: output.extractionFailures,\n      extractors: output.extractors,\n    };\n  }\n\n  async persist(processed: ProcessedObservation) {\n    if (!processed.observations) return;\n\n    const { record, threadId, resourceId, messages } = this.opts;\n    const messageTokens = await this.tokenCounter.countMessagesAsync(messages);\n    await this.storage.updateBufferedObservations({\n      id: record.id,\n      chunk: {\n        cycleId: this.cycleId,\n        observations: processed.observations,\n        tokenCount: processed.observationTokens,\n        messageIds: processed.observedMessageIds,\n        messageTokens,\n        lastObservedAt: processed.lastObservedAt,\n        suggestedContinuation: processed.suggestedContinuation,\n        currentTask: processed.currentTask,\n        threadTitle: processed.threadTitle,\n        extractedValues: processed.extractedValues,\n        extractionFailures: processed.extractionFailures,\n      },\n      lastBufferedAtTime: processed.lastObservedAt,\n    });\n\n    await this.indexObservationGroups(processed.observations, threadId, resourceId, processed.lastObservedAt);\n\n    // Persist extracted values immediately; buffered observation activation is unrelated to extractor state.\n    const newTitle = processed.threadTitle?.trim();\n    const hasValidThreadTitle = !!newTitle && newTitle.length >= 3;\n    if (hasValidThreadTitle || processed.extractedValues) {\n      const thread = await this.storage.getThreadById({ threadId });\n      if (thread) {\n        const oldTitle = thread.title?.trim();\n        const shouldUpdateThreadTitle = hasValidThreadTitle && newTitle !== oldTitle;\n        const previousOmMetadata = getThreadOMMetadata(thread.metadata);\n        const metadataUpdate = buildThreadMetadataFromExtractedValues(\n          processed.extractors ?? this.observationConfig.extractors,\n          processed.extractedValues,\n        );\n        const newMetadata = setThreadOMMetadata(thread.metadata, {\n          ...(hasValidThreadTitle || metadataUpdate.threadTitle\n            ? { threadTitle: metadataUpdate.threadTitle ?? processed.threadTitle }\n            : {}),\n          extracted: {\n            ...(previousOmMetadata?.extracted ?? {}),\n            ...(metadataUpdate.extracted ?? {}),\n          },\n        });\n        await this.storage.updateThread({\n          id: threadId,\n          title: shouldUpdateThreadTitle ? newTitle : (thread.title ?? ''),\n          metadata: newMetadata,\n        });\n\n        if (shouldUpdateThreadTitle) {\n          const marker = createThreadUpdateMarker({\n            cycleId: this.cycleId,\n            threadId,\n            oldTitle,\n            newTitle,\n          });\n          await this.streamMarker(marker);\n        }\n      }\n    }\n  }\n\n  async emitEndMarkers(_cycleId: string, processed: ProcessedObservation) {\n    if (!processed.observations) return;\n\n    const { record, threadId, messages } = this.opts;\n    const tokensBuffered = await this.tokenCounter.countMessagesAsync(messages);\n    const updatedRecord = await this.storage.getObservationalMemory(record.threadId, record.resourceId);\n    const updatedChunks = getBufferedChunks(updatedRecord);\n    const totalBufferedTokens =\n      updatedChunks.reduce((sum, c) => sum + (c.tokenCount ?? 0), 0) || processed.observationTokens;\n\n    const endMarker = createBufferingEndMarker({\n      cycleId: this.cycleId,\n      operationType: 'observation',\n      startedAt: this.startedAt,\n      tokensBuffered,\n      bufferedTokens: totalBufferedTokens,\n      recordId: record.id,\n      threadId,\n      observations: processed.observations,\n      extractedValues: processed.extractedValues,\n      extractionFailures: processed.extractionFailures,\n    });\n    if (this.opts.writer) {\n      // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n      void this.opts.writer.custom({ ...endMarker, transient: true }).catch(() => {});\n    }\n    await this.persistMarkerToStorage(endMarker, threadId, record.resourceId ?? undefined);\n  }\n\n  async emitFailedMarkers(_cycleId: string, error: unknown) {\n    const { record, threadId, messages } = this.opts;\n    const tokensAttempted = await this.tokenCounter.countMessagesAsync(messages);\n    const failedMarker = createBufferingFailedMarker({\n      cycleId: this.cycleId,\n      operationType: 'observation',\n      startedAt: this.startedAt,\n      tokensAttempted,\n      error: error instanceof Error ? error.message : String(error),\n      recordId: record.id,\n      threadId,\n    });\n    if (this.opts.writer) {\n      // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n      void this.opts.writer.custom({ ...failedMarker, transient: true }).catch(() => {});\n    }\n    await this.persistMarkerToStorage(failedMarker, threadId, record.resourceId ?? undefined);\n  }\n}\n","import type { MastraDBMessage } from '@mastra/core/agent';\nimport { getThreadOMMetadata, setThreadOMMetadata } from '@mastra/core/memory';\nimport type { ThreadOMMetadata } from '@mastra/core/memory';\nimport type { ProviderMetadata } from '@mastra/core/stream';\n\nimport { OBSERVATIONAL_MEMORY_DEFAULTS } from '../constants';\nimport {\n  applyExtractorHooks,\n  buildThreadMetadataFromExtractedValues,\n  getPriorExtractedValues,\n} from '../extracted-values';\nimport type { Extractor } from '../extractor';\nimport {\n  createObservationEndMarker,\n  createObservationFailedMarker,\n  createObservationStartMarker,\n  createThreadUpdateMarker,\n} from '../markers';\nimport { getLastObservedMessageCursor, sortThreadsByOldestMessage } from '../message-utils';\nimport { buildMessageRange } from '../observational-memory';\nimport { getMaxThreshold } from '../thresholds';\n\nimport { ObservationStrategy } from './base';\nimport type { StrategyDeps } from './base';\nimport type { ObservationRunOpts, ObserverOutput, ProcessedObservation } from './types';\n\nexport class ResourceScopedObservationStrategy extends ObservationStrategy {\n  private readonly startedAt = new Date().toISOString();\n  private cycleId?: string;\n  private readonly resourceId: string;\n\n  private threadsWithMessages = new Map<string, MastraDBMessage[]>();\n  private threadTokensToObserve = new Map<string, number>();\n  private threadTokenCounts = new Map<string, number>();\n  private threadOrder: string[] = [];\n  private messagesByThread = new Map<string, MastraDBMessage[]>();\n  private multiThreadResults = new Map<\n    string,\n    {\n      observations: string;\n      currentTask?: string;\n      suggestedContinuation?: string;\n      threadTitle?: string;\n      extractedValues?: Record<string, unknown>;\n      extractionFailures?: Array<{ slug: string; error: string }>;\n      extractors?: readonly Extractor<any>[];\n    }\n  >();\n  private totalBatchUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n  private lastBatchProviderMetadata: ProviderMetadata | undefined;\n  private observationResults: Array<{\n    threadId: string;\n    threadMessages: MastraDBMessage[];\n    result: {\n      observations: string;\n      currentTask?: string;\n      suggestedContinuation?: string;\n      threadTitle?: string;\n      extractedValues?: Record<string, unknown>;\n      extractionFailures?: Array<{ slug: string; error: string }>;\n      extractors?: readonly Extractor<any>[];\n    };\n  }> = [];\n  private priorMetadataByThread = new Map<string, ThreadOMMetadata>();\n\n  constructor(deps: StrategyDeps, opts: ObservationRunOpts) {\n    super(deps, opts);\n    this.resourceId = opts.resourceId!;\n  }\n\n  get needsLock() {\n    return true;\n  }\n  get needsReflection() {\n    return true;\n  }\n  get rethrowOnFailure() {\n    return true;\n  }\n\n  async prepare() {\n    const { record, threadId: currentThreadId, messages: currentThreadMessages } = this.opts;\n\n    const { threads: allThreads } = await this.storage.listThreads({ filter: { resourceId: this.resourceId } });\n    const threadMetadataMap = new Map<string, { lastObservedAt?: string }>();\n\n    for (const thread of allThreads) {\n      const omMetadata = getThreadOMMetadata(thread.metadata);\n      threadMetadataMap.set(thread.id, { lastObservedAt: omMetadata?.lastObservedAt });\n      if (omMetadata) {\n        this.priorMetadataByThread.set(thread.id, omMetadata);\n      }\n    }\n\n    for (const thread of allThreads) {\n      const threadLastObservedAt = threadMetadataMap.get(thread.id)?.lastObservedAt;\n      const startDate = threadLastObservedAt ? new Date(new Date(threadLastObservedAt).getTime() + 1) : undefined;\n\n      const result = await this.storage.listMessages({\n        threadId: thread.id,\n        perPage: false,\n        orderBy: { field: 'createdAt', direction: 'ASC' },\n        filter: startDate ? { dateRange: { start: startDate } } : undefined,\n      });\n\n      const messages = result.messages.filter(msg => msg.role !== 'system');\n      if (messages.length > 0) {\n        this.messagesByThread.set(thread.id, messages);\n      }\n    }\n\n    if (currentThreadMessages.length > 0) {\n      const existingCurrentThreadMsgs = this.messagesByThread.get(currentThreadId) ?? [];\n      const messageMap = new Map<string, MastraDBMessage>();\n\n      for (const msg of existingCurrentThreadMsgs) {\n        if (msg.id) messageMap.set(msg.id, msg);\n      }\n      for (const msg of currentThreadMessages) {\n        if (msg.id) messageMap.set(msg.id, msg);\n      }\n\n      this.messagesByThread.set(currentThreadId, Array.from(messageMap.values()));\n    }\n\n    for (const [tid, msgs] of this.messagesByThread) {\n      const filtered = msgs.filter(m => !this.deps.observedMessageIds.has(m.id));\n      if (filtered.length > 0) {\n        this.messagesByThread.set(tid, filtered);\n      } else {\n        this.messagesByThread.delete(tid);\n      }\n    }\n\n    let totalMessages = 0;\n    for (const msgs of this.messagesByThread.values()) {\n      totalMessages += msgs.length;\n    }\n\n    if (totalMessages === 0) {\n      return { messages: [] as MastraDBMessage[], existingObservations: '' };\n    }\n\n    const threshold = getMaxThreshold(this.observationConfig.messageTokens);\n\n    for (const [threadId, msgs] of this.messagesByThread) {\n      const tokens = await this.tokenCounter.countMessagesAsync(msgs);\n      this.threadTokenCounts.set(threadId, tokens);\n    }\n\n    const threadsBySize = Array.from(this.messagesByThread.keys()).sort((a, b) => {\n      return (this.threadTokenCounts.get(b) ?? 0) - (this.threadTokenCounts.get(a) ?? 0);\n    });\n\n    let accumulatedTokens = 0;\n    const threadsToObserve: string[] = [];\n\n    for (const threadId of threadsBySize) {\n      const threadTokens = this.threadTokenCounts.get(threadId) ?? 0;\n      if (accumulatedTokens >= threshold) break;\n      threadsToObserve.push(threadId);\n      accumulatedTokens += threadTokens;\n    }\n\n    if (threadsToObserve.length === 0) {\n      return { messages: [] as MastraDBMessage[], existingObservations: '' };\n    }\n\n    this.threadOrder = sortThreadsByOldestMessage(\n      new Map(threadsToObserve.map(tid => [tid, this.messagesByThread.get(tid) ?? []])),\n    );\n\n    for (const threadId of this.threadOrder) {\n      const msgs = this.messagesByThread.get(threadId);\n      if (msgs && msgs.length > 0) {\n        this.threadsWithMessages.set(threadId, msgs);\n      }\n    }\n\n    this.deps.emitDebugEvent({\n      type: 'observation_triggered',\n      timestamp: new Date(),\n      threadId: this.threadOrder.join(','),\n      resourceId: this.resourceId,\n      previousObservations: record.activeObservations,\n      messages: Array.from(this.threadsWithMessages.values())\n        .flat()\n        .map(m => ({\n          role: m.role,\n          content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),\n        })),\n    });\n\n    const freshRecord = await this.storage.getObservationalMemory(null, this.resourceId);\n    const existingObservations = freshRecord?.activeObservations ?? record.activeObservations ?? '';\n\n    const allMessages = Array.from(this.threadsWithMessages.values()).flat();\n    return { messages: allMessages, existingObservations };\n  }\n\n  async emitStartMarkers(cycleId: string) {\n    this.cycleId = cycleId;\n    const allThreadIds = Array.from(this.threadsWithMessages.keys());\n\n    for (const [threadId, msgs] of this.threadsWithMessages) {\n      const lastMessage = msgs[msgs.length - 1];\n      const tokensToObserve = await this.tokenCounter.countMessagesAsync(msgs);\n      this.threadTokensToObserve.set(threadId, tokensToObserve);\n\n      if (lastMessage?.id) {\n        const startMarker = createObservationStartMarker({\n          cycleId,\n          operationType: 'observation',\n          tokensToObserve,\n          recordId: this.opts.record.id,\n          threadId,\n          threadIds: allThreadIds,\n          config: this.getObservationMarkerConfig(),\n        });\n        await this.streamMarker(startMarker);\n      }\n    }\n  }\n\n  async observe(_existingObservations: string, _messages: MastraDBMessage[]) {\n    const maxTokensPerBatch =\n      this.observationConfig.maxTokensPerBatch ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.maxTokensPerBatch;\n    const orderedThreadIds = this.threadOrder.filter(tid => this.threadsWithMessages.has(tid));\n\n    const batches: Array<{ threadIds: string[]; threadMap: Map<string, MastraDBMessage[]> }> = [];\n    let currentBatch: { threadIds: string[]; threadMap: Map<string, MastraDBMessage[]> } = {\n      threadIds: [],\n      threadMap: new Map(),\n    };\n    let currentBatchTokens = 0;\n\n    for (const threadId of orderedThreadIds) {\n      const msgs = this.threadsWithMessages.get(threadId)!;\n      const threadTokens = this.threadTokenCounts.get(threadId) ?? 0;\n\n      if (currentBatchTokens + threadTokens > maxTokensPerBatch && currentBatch.threadIds.length > 0) {\n        batches.push(currentBatch);\n        currentBatch = { threadIds: [], threadMap: new Map() };\n        currentBatchTokens = 0;\n      }\n\n      currentBatch.threadIds.push(threadId);\n      currentBatch.threadMap.set(threadId, msgs);\n      currentBatchTokens += threadTokens;\n    }\n\n    if (currentBatch.threadIds.length > 0) {\n      batches.push(currentBatch);\n    }\n\n    const batchResults = await Promise.all(\n      batches.map(async batch => {\n        return this.deps.observer.callMultiThread(\n          _existingObservations,\n          batch.threadMap,\n          batch.threadIds,\n          this.opts.abortSignal,\n          this.opts.requestContext,\n          this.priorMetadataByThread,\n          this.opts.observabilityContext,\n        );\n      }),\n    );\n\n    for (const batchResult of batchResults) {\n      for (const [threadId, result] of batchResult.results) {\n        this.multiThreadResults.set(threadId, result);\n      }\n      if (batchResult.usage) {\n        this.totalBatchUsage.inputTokens += batchResult.usage.inputTokens ?? 0;\n        this.totalBatchUsage.outputTokens += batchResult.usage.outputTokens ?? 0;\n        this.totalBatchUsage.totalTokens += batchResult.usage.totalTokens ?? 0;\n      }\n      if (batchResult.providerMetadata) {\n        this.lastBatchProviderMetadata = batchResult.providerMetadata;\n      }\n    }\n\n    return {\n      observations: '',\n      usage: this.totalBatchUsage.totalTokens > 0 ? this.totalBatchUsage : undefined,\n      providerMetadata: this.lastBatchProviderMetadata,\n    };\n  }\n\n  async process(_output: ObserverOutput, existingObservations: string): Promise<ProcessedObservation> {\n    const { record } = this.opts;\n\n    this.observationResults = [];\n    for (const threadId of this.threadOrder) {\n      const threadMessages = this.messagesByThread.get(threadId) ?? [];\n      if (threadMessages.length === 0) continue;\n\n      const result = this.multiThreadResults.get(threadId);\n      if (!result) continue;\n\n      const previousValues = getPriorExtractedValues(\n        this.priorMetadataByThread.get(threadId),\n        this.observationConfig.extractors,\n      );\n      const hookedValues = await applyExtractorHooks({\n        source: 'observer',\n        extractors: result.extractors ?? this.observationConfig.extractors,\n        values: result.extractedValues,\n        failures: result.extractionFailures,\n        previousValues,\n        threadId,\n        resourceId: this.resourceId,\n        mainAgent: this.opts.agent,\n        memory: this.deps.memory,\n        sendSignal: this.opts.sendSignal,\n        requestContext: this.opts.requestContext,\n      });\n      this.observationResults.push({\n        threadId,\n        threadMessages,\n        result: {\n          ...result,\n          extractedValues: hookedValues.values,\n          extractionFailures: hookedValues.failures,\n        },\n      });\n    }\n\n    let currentObservations = existingObservations;\n    let cycleObservationTokens = 0;\n    const threadMetadataUpdates: ProcessedObservation['threadMetadataUpdates'] = [];\n\n    for (const obsResult of this.observationResults) {\n      const { threadId, threadMessages, result } = obsResult;\n\n      cycleObservationTokens += this.tokenCounter.countObservations(result.observations);\n\n      const messageRange = this.retrieval ? buildMessageRange(threadMessages) : undefined;\n      const threadSection = await this.wrapWithThreadTag(threadId, result.observations, messageRange);\n      const threadLastObservedAt = this.getMaxMessageTimestamp(threadMessages);\n      currentObservations = this.replaceOrAppendThreadSection(\n        currentObservations,\n        threadId,\n        threadSection,\n        threadLastObservedAt,\n      );\n      threadMetadataUpdates!.push({\n        threadId,\n        lastObservedAt: threadLastObservedAt.toISOString(),\n        suggestedResponse: result.suggestedContinuation,\n        currentTask: result.currentTask,\n        threadTitle: result.threadTitle,\n        extracted: result.extractedValues,\n        extractionFailures: result.extractionFailures,\n        extractors: result.extractors,\n        lastObservedMessageCursor: getLastObservedMessageCursor(threadMessages),\n      });\n\n      const isFirstThread = this.observationResults.indexOf(obsResult) === 0;\n      this.deps.emitDebugEvent({\n        type: 'observation_complete',\n        timestamp: new Date(),\n        threadId,\n        resourceId: this.resourceId,\n        observations: threadSection,\n        rawObserverOutput: result.observations,\n        previousObservations: record.activeObservations,\n        messages: threadMessages.map(m => ({\n          role: m.role,\n          content: typeof m.content === 'string' ? m.content : JSON.stringify(m.content),\n        })),\n        usage: isFirstThread && this.totalBatchUsage.totalTokens > 0 ? this.totalBatchUsage : undefined,\n      });\n    }\n\n    const observedMessages = this.observationResults.flatMap(r => r.threadMessages);\n    const lastObservedAt = this.getMaxMessageTimestamp(observedMessages);\n    const newMessageIds = observedMessages.map(m => m.id);\n    const existingIds = record.observedMessageIds ?? [];\n    const observedMessageIds = [...new Set([...existingIds, ...newMessageIds])];\n    const observationTokens = this.tokenCounter.countObservations(currentObservations);\n\n    return {\n      observations: currentObservations,\n      observationTokens,\n      cycleObservationTokens,\n      observedMessageIds,\n      lastObservedAt,\n      threadMetadataUpdates,\n    };\n  }\n\n  async persist(processed: ProcessedObservation) {\n    const { record, resourceId } = this.opts;\n    const threadUpdateMarkers: Array<ReturnType<typeof createThreadUpdateMarker>> = [];\n\n    if (processed.threadMetadataUpdates) {\n      for (const update of processed.threadMetadataUpdates) {\n        const thread = await this.storage.getThreadById({ threadId: update.threadId });\n        if (thread) {\n          const oldTitle = thread.title?.trim();\n          const newTitle = update.threadTitle?.trim();\n          const shouldUpdateThreadTitle = !!newTitle && newTitle.length >= 3 && newTitle !== oldTitle;\n          const previousOmMetadata = getThreadOMMetadata(thread.metadata);\n          const metadataUpdate = buildThreadMetadataFromExtractedValues(\n            update.extractors ?? this.observationConfig.extractors,\n            update.extracted,\n          );\n          const newMetadata = setThreadOMMetadata(thread.metadata, {\n            lastObservedAt: update.lastObservedAt,\n            suggestedResponse: metadataUpdate.suggestedResponse ?? update.suggestedResponse,\n            currentTask: metadataUpdate.currentTask ?? update.currentTask,\n            threadTitle: metadataUpdate.threadTitle ?? update.threadTitle,\n            extracted: {\n              ...(previousOmMetadata?.extracted ?? {}),\n              ...(metadataUpdate.extracted ?? {}),\n            },\n            lastObservedMessageCursor: update.lastObservedMessageCursor,\n          });\n          await this.storage.updateThread({\n            id: update.threadId,\n            title: shouldUpdateThreadTitle ? newTitle : (thread.title ?? ''),\n            metadata: newMetadata,\n          });\n\n          if (shouldUpdateThreadTitle) {\n            threadUpdateMarkers.push(\n              createThreadUpdateMarker({\n                cycleId: this.cycleId ?? crypto.randomUUID(),\n                threadId: update.threadId,\n                oldTitle,\n                newTitle,\n              }),\n            );\n          }\n        }\n      }\n    }\n\n    for (const marker of threadUpdateMarkers) {\n      await this.streamMarker(marker);\n    }\n\n    await this.storage.updateActiveObservations({\n      id: record.id,\n      observations: processed.observations,\n      tokenCount: processed.observationTokens,\n      lastObservedAt: processed.lastObservedAt,\n      observedMessageIds: processed.observedMessageIds,\n    });\n\n    if (resourceId) {\n      await Promise.all(\n        this.observationResults.map(({ threadId, threadMessages, result }) =>\n          this.indexObservationGroups(\n            result.observations,\n            threadId,\n            resourceId,\n            this.getMaxMessageTimestamp(threadMessages),\n          ),\n        ),\n      );\n    }\n  }\n\n  async emitEndMarkers(cycleId: string, processed: ProcessedObservation) {\n    for (const obsResult of this.observationResults) {\n      const { threadId, threadMessages, result } = obsResult;\n      const lastMessage = threadMessages[threadMessages.length - 1];\n      if (lastMessage?.id) {\n        const tokensObserved =\n          this.threadTokensToObserve.get(threadId) ?? (await this.tokenCounter.countMessagesAsync(threadMessages));\n        const endMarker = createObservationEndMarker({\n          cycleId,\n          operationType: 'observation',\n          startedAt: this.startedAt,\n          tokensObserved,\n          observationTokens: processed.cycleObservationTokens,\n          observations: result.observations,\n          currentTask: result.currentTask,\n          suggestedResponse: result.suggestedContinuation,\n          extractedValues: result.extractedValues,\n          extractionFailures: result.extractionFailures,\n          recordId: this.opts.record.id,\n          threadId,\n        });\n        await this.streamMarker(endMarker);\n      }\n    }\n  }\n\n  async emitFailedMarkers(cycleId: string, error: unknown) {\n    for (const [threadId, msgs] of this.threadsWithMessages) {\n      const lastMessage = msgs[msgs.length - 1];\n      if (lastMessage?.id) {\n        const tokensAttempted = this.threadTokensToObserve.get(threadId) ?? 0;\n        const failedMarker = createObservationFailedMarker({\n          cycleId,\n          operationType: 'observation',\n          startedAt: this.startedAt,\n          tokensAttempted,\n          error: error instanceof Error ? error.message : String(error),\n          recordId: this.opts.record.id,\n          threadId,\n        });\n        await this.streamMarker(failedMarker);\n      }\n    }\n  }\n}\n","export { ObservationStrategy } from './base';\nexport type { StrategyDeps } from './base';\nexport type { ObservationRunOpts, ObserverOutput, ProcessedObservation } from './types';\n\n// Re-export concrete classes for direct access if needed\nexport { SyncObservationStrategy } from './sync';\nexport { AsyncBufferObservationStrategy } from './async-buffer';\nexport { ResourceScopedObservationStrategy } from './resource-scoped';\n\n// Wire up the static factory on the base class\nimport type { ObservationalMemory } from '../observational-memory';\nimport { AsyncBufferObservationStrategy } from './async-buffer';\nimport { ObservationStrategy } from './base';\nimport type { StrategyDeps } from './base';\nimport { ResourceScopedObservationStrategy } from './resource-scoped';\nimport { SyncObservationStrategy } from './sync';\nimport type { ObservationRunOpts } from './types';\n\nObservationStrategy.create = ((om: ObservationalMemory, opts: ObservationRunOpts): ObservationStrategy => {\n  const deps: StrategyDeps = {\n    storage: om.getStorage(),\n    memory: om.getMemory(),\n    messageHistory: om.getMessageHistory(),\n    tokenCounter: om.getTokenCounter(),\n    observationConfig: om.getObservationConfig(),\n    reflectionConfig: om.getReflectionConfig(),\n    scope: om.scope,\n    retrieval: om.retrieval,\n    observer: om.observer,\n    reflector: om.reflector,\n    observedMessageIds: om.observedMessageIds,\n    obscureThreadIds: om.getObscureThreadIds(),\n    onIndexObservations: om.onIndexObservations,\n    emitDebugEvent: e => om.emitDebugEvent(e),\n  };\n\n  if (opts.cycleId) return new AsyncBufferObservationStrategy(deps, opts);\n  if (deps.scope === 'resource' && opts.resourceId) return new ResourceScopedObservationStrategy(deps, opts);\n  return new SyncObservationStrategy(deps, opts);\n}) as (om: unknown, opts: ObservationRunOpts) => ObservationStrategy;\n","import type { MessageList } from '@mastra/core/agent';\n\nimport type { MemoryContextProvider } from '../processor';\n\nexport async function loadMemoryContextMessages({\n  memory,\n  messageList,\n  threadId,\n  resourceId,\n}: {\n  memory: MemoryContextProvider;\n  messageList: MessageList;\n  threadId: string;\n  resourceId?: string;\n}): Promise<Awaited<ReturnType<MemoryContextProvider['getContext']>>> {\n  const ctx = await memory.getContext({ threadId, resourceId });\n\n  for (const msg of ctx.messages) {\n    if (msg.role !== 'system') {\n      messageList.add(msg, 'memory');\n    }\n  }\n\n  return ctx;\n}\n","import { getThreadOMMetadata } from '@mastra/core/memory';\n\nimport { omDebug } from '../debug';\nimport { filterObservedMessages } from '../message-utils';\nimport { getLastActivityFromMessages, getLatestStepParts } from '../observational-memory';\nimport { resolveRetentionFloor } from '../thresholds';\n\nimport type { ObservationTurn } from './turn';\nimport type { StepContext } from './types';\n\n/**\n * Represents a single step in the agentic loop within an observation turn.\n *\n * Created via `turn.step(stepNumber)`. Call `prepare()` before the agent generates.\n * The previous step's output is finalized automatically when the next step is created\n * or when `turn.end()` is called.\n */\nexport class ObservationStep {\n  private _prepared = false;\n  private _context?: StepContext;\n\n  constructor(\n    private readonly turn: ObservationTurn,\n    readonly stepNumber: number,\n  ) {}\n\n  /** Whether this step has been prepared. */\n  get prepared() {\n    return this._prepared;\n  }\n\n  /** Step context from prepare(). Throws if prepare() hasn't been called. */\n  get context(): StepContext {\n    if (!this._context) throw new Error('Step not prepared yet — call prepare() first');\n    return this._context;\n  }\n\n  /**\n   * Prepare this step for agent generation.\n   *\n   * For step 0: activates buffered chunks, checks reflection, builds system message, filters observed.\n   * For step > 0: checks thresholds, triggers buffer/observe, saves previous messages,\n   * builds system message, filters observed.\n   */\n  async prepare(): Promise<StepContext> {\n    if (this._prepared) throw new Error(`Step ${this.stepNumber} already prepared`);\n\n    const { threadId, resourceId, messageList } = this.turn;\n    // Cast to any for internal access to private OM methods (Turn/Step are internal consumers)\n    const om = this.turn.om;\n    let activated = false;\n    let observed = false;\n    let buffered = false;\n    let reflected = false;\n    let didThresholdCleanup = false;\n    let observerExchange: StepContext['observerExchange'];\n\n    // ── Step 0: Activate buffered chunks ──────────────────────\n    if (this.stepNumber === 0) {\n      const step0Messages = messageList.get.all.db();\n      const activation = await om.activate({\n        threadId,\n        resourceId,\n        checkThreshold: true,\n        messages: step0Messages,\n        currentModel: this.turn.actorModelContext,\n        writer: this.turn.writer,\n        messageList,\n      });\n\n      if (activation.activated) {\n        activated = true;\n        if (activation.activatedMessageIds?.length) {\n          messageList.removeByIds(activation.activatedMessageIds);\n        }\n        await om.resetBufferingState({\n          threadId,\n          resourceId,\n          recordId: activation.record.id,\n        });\n        await this.turn.refreshRecord();\n      }\n\n      // Check if reflection is needed (whether or not activation happened).\n      // maybeReflect handles both sync (above full threshold) and async buffered\n      // reflection (above bufferActivation point but below full threshold).\n      const record = this.turn.record;\n      const preReflectGeneration = record.generationCount;\n      const obsTokens = record.observationTokenCount ?? 0;\n      await om.reflector.maybeReflect({\n        record,\n        observationTokens: obsTokens,\n        threadId,\n        writer: this.turn.writer,\n        messageList,\n        currentModel: this.turn.actorModelContext,\n        requestContext: this.turn.requestContext,\n        observabilityContext: this.turn.observabilityContext,\n        lastActivityAt: getLastActivityFromMessages(messageList.get.all.db()),\n      });\n      await this.turn.refreshRecord();\n      if (this.turn.record.generationCount > preReflectGeneration) {\n        reflected = true;\n      }\n    }\n\n    // ── Check for incomplete tool calls ────────────────────────\n    // Provider-executed tools (e.g. Anthropic web_search) may still be in state:'call'\n    // while the agent loop continues. We must not observe/buffer until they complete.\n    const allMsgsForToolCheck = messageList.get.all.db();\n    const lastMessage = allMsgsForToolCheck[allMsgsForToolCheck.length - 1];\n    const pendingStepMessages = [...messageList.get.input.db(), ...messageList.get.response.db()];\n    const latestStepParts = [\n      ...getLatestStepParts(lastMessage?.content?.parts ?? []),\n      ...pendingStepMessages.flatMap(msg => getLatestStepParts(msg.content?.parts ?? [])),\n    ];\n    const hasIncompleteToolCalls = latestStepParts.some(\n      part => part?.type === 'tool-invocation' && (part as any).toolInvocation?.state === 'call',\n    );\n    omDebug(\n      `[OM:deferred-check] hasIncompleteToolCalls=${hasIncompleteToolCalls}, latestStepPartsCount=${latestStepParts.length}`,\n    );\n\n    // ── Check thresholds + buffer trigger (all steps) ──────────\n    let statusSnapshot = await om.getStatus({\n      threadId,\n      resourceId,\n      messages: messageList.get.all.db(),\n    });\n\n    // Trigger buffering if interval boundary crossed (fire-and-forget, all steps)\n    if (statusSnapshot.shouldBuffer && !hasIncompleteToolCalls) {\n      const allMessages = messageList.get.all.db();\n      const unobservedMessages = om.getUnobservedMessages(allMessages, statusSnapshot.record);\n\n      // Seal, rotate, and persist candidates SYNCHRONOUSLY before the fire-and-forget\n      // buffer call. The beforeBuffer callback inside buffer() only runs deep in its\n      // async chain (after multiple awaits). Meanwhile, the step > 0 save below drains\n      // response messages synchronously. If sealing/rotation happens after that drain,\n      // the sealed messages get re-added as memory (unsealed) and all new content keeps\n      // appending to the same assistant message — producing the \"mega-message\" bug.\n      const candidates = om.getUnobservedMessages(unobservedMessages, statusSnapshot.record, {\n        excludeBuffered: true,\n      });\n      if (candidates.length > 0) {\n        om.sealMessagesForBuffering(candidates);\n\n        try {\n          await this.turn.hooks?.onBufferChunkSealed?.();\n        } catch (error) {\n          omDebug(\n            `[OM:buffer] onBufferChunkSealed hook failed: ${error instanceof Error ? error.message : String(error)}`,\n          );\n        }\n\n        if (this.turn.memory) {\n          await this.turn.memory.persistMessages(candidates);\n        }\n\n        // Once a buffered chunk has been sealed and persisted, it should no longer\n        // remain in the live response/input buckets. Move the exact same messages\n        // into memory so later step-save drains don't pull them back out and grow\n        // them again under the old response id.\n        messageList.removeByIds(candidates.map(msg => msg.id));\n        for (const msg of candidates) {\n          messageList.add(msg, 'memory');\n        }\n      }\n\n      void om\n        .buffer({\n          threadId,\n          resourceId,\n          messages: unobservedMessages,\n          pendingTokens: statusSnapshot.pendingTokens,\n          record: statusSnapshot.record,\n          writer: this.turn.writer,\n          requestContext: this.turn.requestContext,\n          observabilityContext: this.turn.observabilityContext,\n        })\n        .catch((err: Error) => {\n          omDebug(`[OM:buffer] fire-and-forget buffer failed: ${err?.message}`);\n        });\n      buffered = true;\n    }\n\n    // ── Step > 0: Save messages + threshold observation ──────\n    if (this.stepNumber > 0) {\n      // Save messages from previous step\n      const newInput = messageList.clear.input.db();\n      const newOutput = messageList.clear.response.db();\n      const messagesToSave = [...newInput, ...newOutput];\n      if (messagesToSave.length > 0) {\n        await om.persistMessages(messagesToSave, threadId, resourceId);\n        for (const msg of messagesToSave) {\n          messageList.add(msg, 'memory');\n        }\n      }\n\n      // Threshold observation (step > 0 only, skip if tool calls pending)\n      if (statusSnapshot.shouldObserve && !hasIncompleteToolCalls) {\n        const preObsGeneration = this.turn.record.generationCount;\n        const obsResult = await this.runThresholdObservation();\n        observerExchange = obsResult.observerExchange;\n        if (obsResult.succeeded) {\n          observed = true;\n          didThresholdCleanup = true;\n\n          // Cleanup after observation\n          const observedIds = obsResult.activatedMessageIds ?? obsResult.record.observedMessageIds ?? [];\n          const minRemaining = resolveRetentionFloor(\n            om.getObservationConfig().bufferActivation ?? 1,\n            statusSnapshot.threshold,\n          );\n\n          await om.cleanupMessages({\n            threadId,\n            resourceId,\n            messages: messageList,\n            observedMessageIds: observedIds,\n            retentionFloor: minRemaining,\n          });\n\n          if (statusSnapshot.asyncObservationEnabled) {\n            await om.resetBufferingState({\n              threadId,\n              resourceId,\n              recordId: obsResult.record.id,\n              activatedMessageIds: obsResult.activatedMessageIds,\n            });\n          }\n\n          await this.turn.refreshRecord();\n          if (this.turn.record.generationCount > preObsGeneration) {\n            reflected = true;\n          }\n        }\n      }\n\n      // Re-fetch status after observation/cleanup for the snapshot\n      statusSnapshot = await om.getStatus({\n        threadId,\n        resourceId,\n        messages: messageList.get.all.db(),\n      });\n    }\n\n    // ── Refresh cross-thread context (resource scope) ──────────\n    const otherThreadsContext = await this.turn.refreshOtherThreadsContext();\n\n    // ── Build system messages (one per cache-stable chunk) ────\n    const systemMessage = await om.buildContextSystemMessages({\n      threadId,\n      resourceId,\n      record: this.turn.record,\n      unobservedContextBlocks: otherThreadsContext,\n    });\n\n    // ── Filter observed messages ──────────────────────────────\n    if (!didThresholdCleanup) {\n      const fallbackCursor = this.turn.record.threadId\n        ? getThreadOMMetadata((await om.getStorage().getThreadById({ threadId: this.turn.record.threadId }))?.metadata)\n            ?.lastObservedMessageCursor\n        : undefined;\n\n      const pendingMessageIds = new Set(\n        [...messageList.get.input.db(), ...messageList.get.response.db()].map(msg => msg.id).filter(Boolean),\n      );\n\n      filterObservedMessages({\n        messageList,\n        record: this.turn.record,\n        useMarkerBoundaryPruning: this.stepNumber === 0,\n        fallbackCursor,\n        preserveMessageIds: pendingMessageIds,\n      });\n    }\n\n    this._context = {\n      systemMessage,\n      observerExchange,\n      activated,\n      observed,\n      buffered,\n      reflected,\n      status: {\n        pendingTokens: statusSnapshot.pendingTokens,\n        threshold: statusSnapshot.threshold,\n        effectiveObservationTokensThreshold: statusSnapshot.effectiveObservationTokensThreshold,\n        shouldObserve: statusSnapshot.shouldObserve,\n        shouldBuffer: statusSnapshot.shouldBuffer,\n        shouldReflect: statusSnapshot.shouldReflect,\n        canActivate: statusSnapshot.canActivate,\n      },\n    };\n    this._prepared = true;\n    return this._context;\n  }\n\n  /**\n   * Run the full threshold observation pipeline:\n   * waitForBuffering → re-check → activate → reflect → blockAfter gate → observe\n   */\n  private async runThresholdObservation(): Promise<{\n    succeeded: boolean;\n    record: any;\n    activatedMessageIds?: string[];\n    observerExchange?: StepContext['observerExchange'];\n  }> {\n    const { threadId, resourceId, messageList } = this.turn;\n    const om = this.turn.om;\n\n    // Wait for any in-flight buffering to settle\n    await om.waitForBuffering(threadId, resourceId);\n\n    // Re-check status with fresh state\n    const freshStatus = await om.getStatus({\n      threadId,\n      resourceId,\n      messages: messageList.get.all.db(),\n    });\n\n    if (!freshStatus.shouldObserve) {\n      return { succeeded: false, record: freshStatus.record };\n    }\n\n    // Try activation first if buffered chunks exist\n    if (freshStatus.canActivate) {\n      const activation = await om.activate({\n        threadId,\n        resourceId,\n        messages: messageList.get.all.db(),\n        currentModel: this.turn.actorModelContext,\n        writer: this.turn.writer,\n        messageList,\n      });\n\n      if (activation.activated) {\n        // Check reflection after activation — use maybeReflect so that a\n        // completed buffered reflection is activated instantly instead of\n        // running a redundant sync reflection from scratch.\n        const postActivationRecord = activation.record;\n        await om.reflector.maybeReflect({\n          record: postActivationRecord,\n          observationTokens: postActivationRecord.observationTokenCount ?? 0,\n          threadId,\n          writer: this.turn.writer,\n          messageList,\n          currentModel: this.turn.actorModelContext,\n          requestContext: this.turn.requestContext,\n          observabilityContext: this.turn.observabilityContext,\n          lastActivityAt: getLastActivityFromMessages(messageList.get.all.db()),\n        });\n\n        return {\n          succeeded: true,\n          record: activation.record,\n          activatedMessageIds: activation.activatedMessageIds,\n        };\n      }\n    }\n\n    // Sync observation — we've waited for buffering and tried activation,\n    // if we're still above threshold we must observe synchronously.\n    const obsResult = await om.observe({\n      threadId,\n      resourceId,\n      messages: messageList.get.all.db(),\n      requestContext: this.turn.requestContext,\n      writer: this.turn.writer,\n      observabilityContext: this.turn.observabilityContext,\n    });\n\n    if (obsResult.observed) {\n      const observedMessageIds = new Set(obsResult.record.observedMessageIds ?? []);\n      const liveMessages = messageList.get.all.db();\n      let latestObservedIndex = -1;\n\n      for (let i = liveMessages.length - 1; i >= 0; i--) {\n        const message = liveMessages[i];\n        if (message && observedMessageIds.has(message.id)) {\n          latestObservedIndex = i;\n          break;\n        }\n      }\n\n      const messageToSeal = latestObservedIndex >= 0 ? liveMessages[latestObservedIndex] : undefined;\n      const messagesToSeal = messageToSeal ? [messageToSeal] : [];\n      om.sealMessagesForBuffering(messagesToSeal);\n\n      try {\n        await this.turn.hooks?.onSyncObservationComplete?.();\n      } catch (error) {\n        omDebug(\n          `[OM:observe] onSyncObservationComplete hook failed: ${error instanceof Error ? error.message : String(error)}`,\n        );\n      }\n\n      if (messagesToSeal.length > 0) {\n        await om.persistMessages(messagesToSeal, threadId, resourceId);\n      }\n    }\n\n    return {\n      succeeded: obsResult.observed,\n      record: obsResult.record,\n      observerExchange: om.observer.lastExchange,\n    };\n  }\n}\n","import type { MessageList } from '@mastra/core/agent';\nimport type { ObservabilityContext } from '@mastra/core/observability';\nimport type { ProcessorContext, ProcessorStreamWriter } from '@mastra/core/processors';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { ObservationalMemoryRecord } from '@mastra/core/storage';\n\nimport { omDebug } from '../debug';\nimport type { ObservationalMemory } from '../observational-memory';\nimport type { MemoryContextProvider } from '../processor';\nimport type { ObservationModelContext } from '../types';\n\nimport { loadMemoryContextMessages } from './load-memory-context';\nimport { ObservationStep } from './step';\nimport type { ObservationTurnHooks, TurnContext, TurnResult } from './types';\n\n/**\n * Represents a single turn in the agent conversation — one user message → agent response cycle.\n *\n * The turn manages record caching, context loading, and step lifecycle.\n * Create via `om.beginTurn(...)`, then call `start()` to load context,\n * `step(n)` to create steps, and `end()` to finalize.\n *\n * @example\n * ```ts\n * const turn = om.beginTurn({ threadId, resourceId, messageList });\n * await turn.start(memory);\n *\n * const step0 = turn.step(0);\n * const ctx = await step0.prepare();\n * // ... agent generates ...\n *\n * const step1 = turn.step(1);  // finalizes step 0\n * const ctx1 = await step1.prepare();\n * // ... agent generates ...\n *\n * await turn.end();  // finalizes last step, cleanup\n * ```\n */\nexport class ObservationTurn {\n  private _record?: ObservationalMemoryRecord;\n  private _context?: TurnContext;\n  private _currentStep?: ObservationStep;\n  private _started = false;\n  private _ended = false;\n\n  /** Generation count at turn start — used to detect if reflection happened during the turn. */\n  private _generationCountAtStart = -1;\n\n  /** Memory context provider — set via start(). Used by steps for beforeBuffer persistence. */\n  memory?: MemoryContextProvider;\n\n  /** Optional stream writer for emitting markers. */\n  writer?: ProcessorStreamWriter;\n\n  /** Optional request context for observation calls. */\n  requestContext?: RequestContext;\n\n  /** Optional observability context for nested OM spans. */\n  observabilityContext?: ObservabilityContext;\n\n  /** Optional agent that owns this processor turn. */\n  agent?: ProcessorContext['agent'];\n\n  /** Optional signal sender for processor-originated notifications. */\n  sendSignal?: (\n    signal: Parameters<NonNullable<ProcessorContext['sendSignal']>>[0],\n  ) => ReturnType<NonNullable<ProcessorContext['sendSignal']>>;\n\n  /** Current actor model for this step. Updated by the processor before prepare(). */\n  actorModelContext?: ObservationModelContext;\n\n  /** Processor-provided hooks for turn/step lifecycle integration. */\n  readonly hooks: ObservationTurnHooks;\n\n  constructor(opts: {\n    om: ObservationalMemory;\n    threadId: string;\n    resourceId?: string;\n    messageList: MessageList;\n    agent?: ProcessorContext['agent'];\n    sendSignal?: ProcessorContext['sendSignal'];\n    requestContext?: RequestContext;\n    observabilityContext?: ObservabilityContext;\n    hooks?: ObservationTurnHooks;\n  }) {\n    this.om = opts.om;\n    this.threadId = opts.threadId;\n    this.resourceId = opts.resourceId;\n    this.messageList = opts.messageList;\n    this.agent = opts.agent;\n    this.sendSignal = opts.sendSignal;\n    this.requestContext = opts.requestContext;\n    this.observabilityContext = opts.observabilityContext;\n    this.hooks = opts.hooks ?? {};\n  }\n\n  readonly om: ObservationalMemory;\n  readonly threadId: string;\n  readonly resourceId: string | undefined;\n  readonly messageList: MessageList;\n\n  /** The current cached record. Refreshed after mutations (activate/observe/reflect). */\n  get record(): ObservationalMemoryRecord {\n    if (!this._record) throw new Error('Turn not started — call start() first');\n    return this._record;\n  }\n\n  /** The context loaded during start(). */\n  get context(): TurnContext {\n    if (!this._context) throw new Error('Turn not started — call start() first');\n    return this._context;\n  }\n\n  /** The current step, if one exists. */\n  get currentStep(): ObservationStep | undefined {\n    return this._currentStep;\n  }\n\n  addHooks(hooks?: ObservationTurnHooks): void {\n    if (!hooks) return;\n    Object.assign(this.hooks, hooks);\n  }\n\n  /**\n   * Load context and cache the record. Call once at the start of the turn.\n   *\n   * If a MemoryContextProvider is passed, loads historical messages and adds\n   * them to the MessageList. Without a provider, only fetches/caches the record.\n   */\n  async start(memory?: MemoryContextProvider): Promise<TurnContext> {\n    if (this._started) throw new Error('Turn already started');\n    this._started = true;\n\n    this._record = await this.om.getOrCreateRecord(this.threadId, this.resourceId);\n    this._generationCountAtStart = this._record.generationCount;\n    this.memory = memory;\n\n    if (memory) {\n      const ctx = await loadMemoryContextMessages({\n        memory,\n        messageList: this.messageList,\n        threadId: this.threadId,\n        resourceId: this.resourceId,\n      });\n\n      this._context = {\n        messages: ctx.messages,\n        systemMessage: ctx.systemMessage,\n        continuation: ctx.continuationMessage,\n        otherThreadsContext: ctx.otherThreadsContext,\n        record: this._record,\n      };\n    } else {\n      this._context = {\n        messages: [],\n        systemMessage: undefined,\n        continuation: undefined,\n        otherThreadsContext: undefined,\n        record: this._record,\n      };\n    }\n\n    return this._context;\n  }\n\n  /**\n   * Create a step handle. If a previous step exists, it is finalized\n   * (its output messages will be saved at the start of the new step's prepare()).\n   */\n  step(stepNumber: number): ObservationStep {\n    if (!this._started) throw new Error('Turn not started — call start() first');\n    if (this._ended) throw new Error('Turn already ended');\n\n    this._currentStep = new ObservationStep(this, stepNumber);\n    return this._currentStep;\n  }\n\n  /**\n   * Finalize the turn: save any remaining messages and return the current cached record.\n   *\n   * When async observation buffering is enabled and there are unobserved messages,\n   * a background buffer operation is kicked off so that observations are computed\n   * proactively while the agent is idle, rather than waiting for the next turn.\n   * The returned record does not wait for that background buffering pass to finish.\n   */\n  async end(): Promise<TurnResult> {\n    if (this._ended) throw new Error('Turn already ended');\n    this._ended = true;\n\n    // Save any unsaved messages from the last step\n    const unsavedInput = this.messageList.get.input.db();\n    const unsavedOutput = this.messageList.get.response.db();\n    const unsavedMessages = [...unsavedInput, ...unsavedOutput];\n    if (unsavedMessages.length > 0) {\n      await this.om.persistMessages(unsavedMessages, this.threadId, this.resourceId);\n    }\n\n    // When the agent goes idle, start buffering any unobserved messages in the background.\n    // This ensures messages accumulated during the turn are observed proactively\n    // rather than waiting for the next turn's step.prepare() to trigger buffering.\n    const asyncObservationEnabled = this.om.buffering.isAsyncObservationEnabled();\n    const bufferOnIdle = this.om.getObservationConfig().bufferOnIdle;\n    if (asyncObservationEnabled && bufferOnIdle) {\n      const allMessages = this.messageList.get.all.db();\n      const record = this._record!;\n      const unobservedMessages = this.om.getUnobservedMessages(allMessages, record);\n      if (unobservedMessages.length > 0) {\n        void this.om\n          .buffer({\n            threadId: this.threadId,\n            resourceId: this.resourceId,\n            messages: unobservedMessages,\n            record,\n            writer: this.writer,\n            agent: this.agent,\n            sendSignal: this.sendSignal,\n            requestContext: this.requestContext,\n            currentModel: this.actorModelContext,\n            observabilityContext: this.observabilityContext,\n            skipMinimumTokenCheck: true,\n          })\n          .catch((err: Error) => {\n            omDebug(`[OM:turn.end] idle buffer failed: ${err?.message}`);\n          });\n      }\n    }\n\n    return { record: this._record! };\n  }\n\n  /**\n   * Refresh the cached record from storage. Called internally after mutations.\n   * @internal\n   */\n  async refreshRecord(): Promise<void> {\n    this._record = await this.om.getOrCreateRecord(this.threadId, this.resourceId);\n  }\n\n  /**\n   * Refresh cross-thread context for resource scope. Called per-step.\n   * @internal\n   */\n  async refreshOtherThreadsContext(): Promise<string | undefined> {\n    if (this.om.scope === 'resource' && this.resourceId) {\n      const otherThreadsContext = await this.om.getOtherThreadsContext(this.resourceId!, this.threadId);\n      if (this._context) {\n        this._context.otherThreadsContext = otherThreadsContext;\n      }\n      return otherThreadsContext;\n    }\n    return this._context?.otherThreadsContext;\n  }\n}\n","const ANCHOR_ID_PATTERN = /^\\[(O\\d+(?:-N\\d+)?)\\]\\s*/;\nconst OBSERVATION_DATE_HEADER_PATTERN = /^\\s*Date:\\s+/;\nconst XML_TAG_PATTERN = /^\\s*<\\/?[a-z][^>]*>\\s*$/i;\nconst MARKDOWN_GROUP_HEADING_PATTERN = /^\\s*##\\s+Group\\s+`[^`]+`\\s*$/;\nconst MARKDOWN_GROUP_METADATA_PATTERN = /^\\s*_range:\\s*`[^`]*`_\\s*$/;\n\nfunction buildEphemeralAnchorId(topLevelCounter: number, nestedCounter: number): string {\n  return nestedCounter === 0 ? `O${topLevelCounter}` : `O${topLevelCounter}-N${nestedCounter}`;\n}\n\nexport function parseAnchorId(line: string): string | null {\n  const match = line.match(ANCHOR_ID_PATTERN);\n  return match?.[1] ?? null;\n}\n\nfunction shouldAnchorLine(line: string): boolean {\n  const trimmed = line.trim();\n\n  if (!trimmed) {\n    return false;\n  }\n\n  if (parseAnchorId(trimmed)) {\n    return false;\n  }\n\n  if (OBSERVATION_DATE_HEADER_PATTERN.test(trimmed)) {\n    return false;\n  }\n\n  if (XML_TAG_PATTERN.test(trimmed)) {\n    return false;\n  }\n\n  if (MARKDOWN_GROUP_HEADING_PATTERN.test(trimmed) || MARKDOWN_GROUP_METADATA_PATTERN.test(trimmed)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction getIndentationDepth(line: string): number {\n  const leadingWhitespace = line.match(/^\\s*/)?.[0] ?? '';\n  return Math.floor(leadingWhitespace.replace(/\\t/g, '  ').length / 2);\n}\n\nexport function injectAnchorIds(observations: string): string {\n  if (!observations) {\n    return observations;\n  }\n\n  const lines = observations.split('\\n');\n  let topLevelCounter = 0;\n  let nestedCounter = 0;\n  let changed = false;\n\n  for (let i = 0; i < lines.length; i++) {\n    const line = lines[i]!;\n\n    if (!shouldAnchorLine(line)) {\n      continue;\n    }\n\n    const indentationDepth = getIndentationDepth(line);\n    if (indentationDepth === 0) {\n      topLevelCounter += 1;\n      nestedCounter = 0;\n    } else {\n      if (topLevelCounter === 0) {\n        topLevelCounter = 1;\n      }\n      nestedCounter += 1;\n    }\n\n    const anchorId = buildEphemeralAnchorId(topLevelCounter, nestedCounter);\n    const leadingWhitespace = line.match(/^\\s*/)?.[0] ?? '';\n    lines[i] = `${leadingWhitespace}[${anchorId}] ${line.slice(leadingWhitespace.length)}`;\n    changed = true;\n  }\n\n  return changed ? lines.join('\\n') : observations;\n}\n\nexport function stripEphemeralAnchorIds(observations: string): string {\n  if (!observations) {\n    return observations;\n  }\n\n  return observations.replace(/(^|\\n)([^\\S\\n]*)\\[(O\\d+(?:-N\\d+)?)\\][^\\S\\n]*/g, '$1$2');\n}\n","/**\n * Slice a string up to `end` UTF-16 code units without splitting a surrogate\n * pair. If `end` would land immediately after a lone high surrogate\n * (U+D800..U+DBFF), the slice backs off by one code unit so the pair is\n * dropped as a whole.\n *\n * Lone UTF-16 surrogates are rejected by strict JSON parsers (e.g. Anthropic's\n * with `no low surrogate in string`), so any truncation of observer-facing\n * text that could cut an emoji/astral codepoint in half must go through this\n * helper.\n */\nexport function safeSlice(str: string, end: number): string {\n  if (end <= 0) return '';\n  if (end >= str.length) return str;\n  const code = str.charCodeAt(end - 1);\n  const safeEnd = code >= 0xd800 && code <= 0xdbff ? end - 1 : end;\n  return str.slice(0, safeEnd);\n}\n","import { estimateTokenCount } from 'tokenx';\n\nimport { safeSlice } from './string-utils';\n\nconst ENCRYPTED_CONTENT_KEY = 'encryptedContent';\nconst ENCRYPTED_CONTENT_REDACTION_THRESHOLD = 256;\n\nexport const DEFAULT_OBSERVER_TOOL_RESULT_MAX_TOKENS = 10_000;\n\nfunction isObjectLike(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n\nfunction sanitizeToolResultValue(value: unknown, seen: WeakMap<object, unknown> = new WeakMap()): unknown {\n  if (!isObjectLike(value)) {\n    return value;\n  }\n\n  if (seen.has(value)) {\n    return seen.get(value);\n  }\n\n  if (Array.isArray(value)) {\n    const sanitizedArray: unknown[] = [];\n    seen.set(value, sanitizedArray);\n    for (const item of value) {\n      sanitizedArray.push(sanitizeToolResultValue(item, seen));\n    }\n    return sanitizedArray;\n  }\n\n  const sanitizedObject: Record<string, unknown> = {};\n  seen.set(value, sanitizedObject);\n\n  for (const [key, entry] of Object.entries(value)) {\n    if (\n      key === ENCRYPTED_CONTENT_KEY &&\n      typeof entry === 'string' &&\n      entry.length > ENCRYPTED_CONTENT_REDACTION_THRESHOLD\n    ) {\n      sanitizedObject[key] = `[stripped encryptedContent: ${entry.length} characters]`;\n      continue;\n    }\n\n    sanitizedObject[key] = sanitizeToolResultValue(entry, seen);\n  }\n\n  return sanitizedObject;\n}\n\nfunction stringifyToolResult(value: unknown): string {\n  if (typeof value === 'string') {\n    return value;\n  }\n\n  const sanitized = sanitizeToolResultValue(value);\n  try {\n    return JSON.stringify(sanitized, null, 2);\n  } catch {\n    return String(sanitized);\n  }\n}\n\nexport function resolveToolResultValue(\n  part: { providerMetadata?: Record<string, any> } | undefined,\n  invocationResult: unknown,\n): {\n  value: unknown;\n  usingStoredModelOutput: boolean;\n} {\n  const mastraMetadata = part?.providerMetadata?.mastra;\n  if (mastraMetadata && typeof mastraMetadata === 'object' && 'modelOutput' in mastraMetadata) {\n    return {\n      value: (mastraMetadata as Record<string, unknown>).modelOutput,\n      usingStoredModelOutput: true,\n    };\n  }\n\n  return {\n    value: invocationResult,\n    usingStoredModelOutput: false,\n  };\n}\n\nexport function truncateStringByTokens(text: string, maxTokens: number): string {\n  if (!text || maxTokens <= 0) {\n    return '';\n  }\n\n  const totalTokens = estimateTokenCount(text);\n  if (totalTokens <= maxTokens) {\n    return text;\n  }\n\n  const buildCandidate = (sliceEnd: number) => {\n    const visible = safeSlice(text, sliceEnd);\n    return `${visible}\\n... [truncated ~${totalTokens - estimateTokenCount(visible)} tokens]`;\n  };\n\n  let low = 0;\n  let high = text.length;\n  let best = buildCandidate(0);\n\n  while (low <= high) {\n    const mid = Math.floor((low + high) / 2);\n    const candidate = buildCandidate(mid);\n    const candidateTokens = estimateTokenCount(candidate);\n\n    if (candidateTokens <= maxTokens) {\n      best = candidate;\n      low = mid + 1;\n    } else {\n      high = mid - 1;\n    }\n  }\n\n  return best;\n}\n\nexport function formatToolResultForObserver(\n  value: unknown,\n  options?: {\n    maxTokens?: number;\n  },\n): string {\n  const serialized = stringifyToolResult(value);\n  const maxTokens = options?.maxTokens ?? DEFAULT_OBSERVER_TOOL_RESULT_MAX_TOKENS;\n  return truncateStringByTokens(serialized, maxTokens);\n}\n","import type { MastraDBMessage } from '@mastra/core/agent';\nimport type { CoreMessage } from '@mastra/core/llm';\n\nimport { stripEphemeralAnchorIds } from './anchor-ids';\nimport { isTemporalGapMarker } from './date-utils';\nimport type { Extractor } from './extractor';\nimport {\n  buildExtractorOutputSections,\n  buildExtractorPriorLines,\n  parseExtractedValues,\n  stripExtractorSections,\n} from './extractor';\nimport { safeSlice } from './string-utils';\nimport {\n  DEFAULT_OBSERVER_TOOL_RESULT_MAX_TOKENS,\n  formatToolResultForObserver,\n  resolveToolResultValue,\n} from './tool-result-helpers';\n\n/**\n * Filter controlling which attachment parts (image/file) are forwarded to\n * the Observer model alongside their placeholder text lines.\n *\n * - `true` (or undefined): forward all attachments\n * - `false`: drop all attachments; placeholders still appear in text\n * - `string[]`: allowlist of mimeType patterns. Each entry is matched against\n *   the part's mimeType (case-insensitive), supporting exact matches\n *   (`application/pdf`), wildcard subtypes (`image/\\*`), and bare `*` for all.\n *   Empty array drops everything.\n */\nexport type ObserverAttachmentFilter = boolean | string[];\n\ntype ObserverFormatOptions = {\n  maxPartLength?: number;\n  maxToolResultTokens?: number;\n  attachmentFilter?: ObserverAttachmentFilter;\n};\n\n/**\n * The core extraction instructions for the Observer.\n * This is exported so the Reflector can understand how observations were created.\n */\nexport const OBSERVER_EXTRACTION_INSTRUCTIONS = `CRITICAL: DISTINGUISH USER ASSERTIONS FROM QUESTIONS\n\nWhen the user TELLS you something about themselves, mark it as an assertion:\n- \"I have two kids\" → 🔴 (14:30) User stated has two kids\n- \"I work at Acme Corp\" → 🔴 (14:31) User stated works at Acme Corp\n- \"I graduated in 2019\" → 🔴 (14:32) User stated graduated in 2019\n\nWhen the user ASKS about something, mark it as a question/request:\n- \"Can you help me with X?\" → 🔴 (15:00) User asked help with X\n- \"What's the best way to do Y?\" → 🔴 (15:01) User asked best way to do Y\n\nDistinguish between QUESTIONS and STATEMENTS OF INTENT:\n- \"Can you recommend...\" → Question (extract as \"User asked...\")\n- \"I'm looking forward to [doing X]\" → Statement of intent (extract as \"User stated they will [do X] (include estimated/actual date if mentioned)\")\n- \"I need to [do X]\" → Statement of intent (extract as \"User stated they need to [do X] (again, add date if mentioned)\")\n\nSTATE CHANGES AND UPDATES:\nWhen a user indicates they are changing something, frame it as a state change that supersedes previous information:\n- \"I'm going to start doing X instead of Y\" → \"User will start doing X (changing from Y)\"\n- \"I'm switching from A to B\" → \"User is switching from A to B\"\n- \"I moved my stuff to the new place\" → \"User moved their stuff to the new place (no longer at previous location)\"\n\nIf the new state contradicts or updates previous information, make that explicit:\n- BAD: \"User plans to use the new method\"\n- GOOD: \"User will use the new method (replacing the old approach)\"\n\nThis helps distinguish current state from outdated information.\n\nUSER ASSERTIONS ARE AUTHORITATIVE. The user is the source of truth about their own life.\nIf a user previously stated something and later asks a question about the same topic,\nthe assertion is the answer - the question doesn't invalidate what they already told you.\n\nTEMPORAL ANCHORING:\nEach observation has TWO potential timestamps:\n\n1. BEGINNING: The time the statement was made (from the message timestamp) - ALWAYS include this\n2. END: The time being REFERENCED, if different from when it was said - ONLY when there's a relative time reference\n\nONLY add \"(meaning DATE)\" or \"(estimated DATE)\" at the END when you can provide an ACTUAL DATE:\n- Past: \"last week\", \"yesterday\", \"a few days ago\", \"last month\", \"in March\"\n- Future: \"this weekend\", \"tomorrow\", \"next week\"\n\nDO NOT add end dates for:\n- Present-moment statements with no time reference\n- Vague references like \"recently\", \"a while ago\", \"lately\", \"soon\" - these cannot be converted to actual dates\n\nFORMAT:\n- With time reference: (TIME) [observation]. (meaning/estimated DATE)\n- Without time reference: (TIME) [observation].\n\nGOOD: (09:15) User's friend had a birthday party in March. (meaning March 20XX)\n      ^ References a past event - add the referenced date at the end\n\nGOOD: (09:15) User will visit their parents this weekend. (meaning June 17-18, 20XX)\n      ^ References a future event - add the referenced date at the end\n\nGOOD: (09:15) User prefers hiking in the mountains.\n      ^ Present-moment preference, no time reference - NO end date needed\n\nGOOD: (09:15) User is considering adopting a dog.\n      ^ Present-moment thought, no time reference - NO end date needed\n\nBAD: (09:15) User prefers hiking in the mountains. (meaning June 15, 20XX - today)\n     ^ No time reference in the statement - don't repeat the message timestamp at the end\n\nIMPORTANT: If an observation contains MULTIPLE events, split them into SEPARATE observation lines.\nEACH split observation MUST have its own date at the end - even if they share the same time context.\n\nExamples (assume message is from June 15, 20XX):\n\nBAD: User will visit their parents this weekend (meaning June 17-18, 20XX) and go to the dentist tomorrow.\nGOOD (split into two observations, each with its date):\n  User will visit their parents this weekend. (meaning June 17-18, 20XX)\n  User will go to the dentist tomorrow. (meaning June 16, 20XX)\n\nBAD: User needs to clean the garage this weekend and is looking forward to setting up a new workbench.\nGOOD (split, BOTH get the same date since they're related):\n  User needs to clean the garage this weekend. (meaning June 17-18, 20XX)\n  User will set up a new workbench this weekend. (meaning June 17-18, 20XX)\n\nBAD: User was given a gift by their friend (estimated late May 20XX) last month.\nGOOD: (09:15) User was given a gift by their friend last month. (estimated late May 20XX)\n      ^ Message time at START, relative date reference at END - never in the middle\n\nBAD: User started a new job recently and will move to a new apartment next week.\nGOOD (split):\n  User started a new job recently.\n  User will move to a new apartment next week. (meaning June 21-27, 20XX)\n  ^ \"recently\" is too vague for a date - omit the end date. \"next week\" can be calculated.\n\nALWAYS put the date at the END in parentheses - this is critical for temporal reasoning.\nWhen splitting related events that share the same time context, EACH observation must have the date.\n\nPRESERVE UNUSUAL PHRASING:\nWhen the user uses unexpected or non-standard terminology, quote their exact words.\n\nBAD: User exercised.\nGOOD: User stated they did a \"movement session\" (their term for exercise).\n\nUSE PRECISE ACTION VERBS:\nReplace vague verbs like \"getting\", \"got\", \"have\" with specific action verbs that clarify the nature of the action.\nIf the assistant confirms or clarifies the user's action, use the assistant's more precise language.\n\nBAD: User is getting X.\nGOOD: User subscribed to X. (if context confirms recurring delivery)\nGOOD: User purchased X. (if context confirms one-time acquisition)\n\nBAD: User got something.\nGOOD: User purchased / received / was given something. (be specific)\n\nCommon clarifications:\n- \"getting\" something regularly → \"subscribed to\" or \"enrolled in\"\n- \"getting\" something once → \"purchased\" or \"acquired\"\n- \"got\" → \"purchased\", \"received as gift\", \"was given\", \"picked up\"\n- \"signed up\" → \"enrolled in\", \"registered for\", \"subscribed to\"\n- \"stopped getting\" → \"canceled\", \"unsubscribed from\", \"discontinued\"\n\nWhen the assistant interprets or confirms the user's vague language, prefer the assistant's precise terminology.\n\nPRESERVING DETAILS IN ASSISTANT-GENERATED CONTENT:\n\nWhen the assistant provides lists, recommendations, or creative content that the user explicitly requested,\npreserve the DISTINGUISHING DETAILS that make each item unique and queryable later.\n\n1. RECOMMENDATION LISTS - Preserve the key attribute that distinguishes each item:\n   BAD: Assistant recommended 5 hotels in the city.\n   GOOD: Assistant recommended hotels: Hotel A (near the train station), Hotel B (budget-friendly), \n         Hotel C (has rooftop pool), Hotel D (pet-friendly), Hotel E (historic building).\n   \n   BAD: Assistant listed 3 online stores for craft supplies.\n   GOOD: Assistant listed craft stores: Store A (based in Germany, ships worldwide), \n         Store B (specializes in vintage fabrics), Store C (offers bulk discounts).\n\n2. NAMES, HANDLES, AND IDENTIFIERS - Always preserve specific identifiers:\n   BAD: Assistant provided social media accounts for several photographers.\n   GOOD: Assistant provided photographer accounts: @photographer_one (portraits), \n         @photographer_two (landscapes), @photographer_three (nature).\n   \n   BAD: Assistant listed some authors to check out.\n   GOOD: Assistant recommended authors: Jane Smith (mystery novels), \n         Bob Johnson (science fiction), Maria Garcia (historical romance).\n\n3. CREATIVE CONTENT - Preserve structure and key sequences:\n   BAD: Assistant wrote a poem with multiple verses.\n   GOOD: Assistant wrote a 3-verse poem. Verse 1 theme: loss. Verse 2 theme: hope. \n         Verse 3 theme: renewal. Refrain: \"The light returns.\"\n   \n   BAD: User shared their lucky numbers from a fortune cookie.\n   GOOD: User's fortune cookie lucky numbers: 7, 14, 23, 38, 42, 49.\n\n4. TECHNICAL/NUMERICAL RESULTS - Preserve specific values:\n   BAD: Assistant explained the performance improvements from the optimization.\n   GOOD: Assistant explained the optimization achieved 43.7% faster load times \n         and reduced memory usage from 2.8GB to 940MB.\n   \n   BAD: Assistant provided statistics about the dataset.\n   GOOD: Assistant provided dataset stats: 7,342 samples, 89.6% accuracy, \n         23ms average inference time.\n\n5. QUANTITIES AND COUNTS - Always preserve how many of each item:\n   BAD: Assistant listed items with details but no quantities.\n   GOOD: Assistant listed items: Item A (4 units, size large), Item B (2 units, size small).\n   \n   When listing items with attributes, always include the COUNT first before other details.\n\n6. ROLE/PARTICIPATION STATEMENTS - When user mentions their role at an event:\n   BAD: User attended the company event.\n   GOOD: User was a presenter at the company event.\n   \n   BAD: User went to the fundraiser.\n   GOOD: User volunteered at the fundraiser (helped with registration).\n   \n   Always capture specific roles: presenter, organizer, volunteer, team lead, \n   coordinator, participant, contributor, helper, etc.\n\nCONVERSATION CONTEXT:\n- What the user is working on or asking about\n- Previous topics and their outcomes\n- What user understands or needs clarification on\n- Specific requirements or constraints mentioned\n- Contents of assistant learnings and summaries\n- Answers to users questions including full context to remember detailed summaries and explanations\n- Assistant explanations, especially complex ones. observe the fine details so that the assistant does not forget what they explained\n- Relevant code snippets\n- User preferences (like favourites, dislikes, preferences, etc)\n- Any specifically formatted text or ascii that would need to be reproduced or referenced in later interactions (preserve these verbatim in memory)\n- Sequences, units, measurements, and any kind of specific relevant data\n- Any blocks of any text which the user and assistant are iteratively collaborating back and forth on should be preserved verbatim\n- When who/what/where/when is mentioned, note that in the observation. Example: if the user received went on a trip with someone, observe who that someone was, where the trip was, when it happened, and what happened, not just that the user went on the trip.\n- For any described entity (like a person, place, thing, etc), preserve the attributes that would help identify or describe the specific entity later: location (\"near X\"), specialty (\"focuses on Y\"), unique feature (\"has Z\"), relationship (\"owned by W\"), or other details. The entity's name is important, but so are any additional details that distinguish it. If there are a list of entities, preserve these details for each of them.\n\nUSER MESSAGE CAPTURE:\n- Short and medium-length user messages should be captured nearly verbatim in your own words.\n- For very long user messages, summarize but quote key phrases that carry specific intent or meaning.\n- This is critical for continuity: when the conversation window shrinks, the observations are the only record of what the user said.\n\nAVOIDING REPETITIVE OBSERVATIONS:\n- Do NOT repeat the same observation across multiple turns if there is no new information.\n- When the agent performs repeated similar actions (e.g., browsing files, running the same tool type multiple times), group them into a single parent observation with sub-bullets for each new result.\n\nExample — BAD (repetitive):\n* 🟡 (14:30) Agent used view tool on src/auth.ts\n* 🟡 (14:31) Agent used view tool on src/users.ts\n* 🟡 (14:32) Agent used view tool on src/routes.ts\n\nExample — GOOD (grouped):\n* 🟡 (14:30) Agent browsed source files for auth flow\n  * -> viewed src/auth.ts — found token validation logic\n  * -> viewed src/users.ts — found user lookup by email\n  * -> viewed src/routes.ts — found middleware chain\n\nOnly add a new observation for a repeated action if the NEW result changes the picture.\n\nACTIONABLE INSIGHTS:\n- What worked well in explanations\n- What needs follow-up or clarification\n- User's stated goals or next steps (note if the user tells you not to do a next step, or asks for something specific, other next steps besides the users request should be marked as \"waiting for user\", unless the user explicitly says to continue all next steps)\n\nCOMPLETION TRACKING:\nCompletion observations are not just summaries. They are explicit memory signals to the assistant that a task, question, or subtask has been resolved.\nWithout clear completion markers, the assistant may forget that work is already finished and may repeat, reopen, or continue an already-completed task.\n\nUse ✅ to answer: \"What exactly is now done?\"\nChoose completion observations that help the assistant know what is finished and should not be reworked unless new information appears.\n\nUse ✅ when:\n- The user explicitly confirms something worked or was answered (\"thanks, that fixed it\", \"got it\", \"perfect\")\n- The assistant provided a definitive, complete answer to a factual question and the user moved on\n- A multi-step task reached its stated goal\n- The user acknowledged receipt of requested information\n- A concrete subtask, fix, deliverable, or implementation step became complete during ongoing work\n\nDo NOT use ✅ when:\n- The assistant merely responded — the user might follow up with corrections\n- The topic is paused but not resolved (\"I'll try that later\")\n- The user's reaction is ambiguous\n\nFORMAT:\nAs a sub-bullet under the related observation group:\n* 🔴 (14:30) User asked how to configure auth middleware\n  * -> Agent explained JWT setup with code example\n  * ✅ User confirmed auth is working\n\nOr as a standalone observation when closing out a broader task:\n* ✅ (14:45) Auth configuration task completed — user confirmed middleware is working\n\nCompletion observations should be terse but specific about WHAT was completed.\nPrefer concrete resolved outcomes over abstract workflow status so the assistant remembers what is already done.`;\n\n/**\n * The output format instructions for the Observer.\n * This is exported so the Reflector can use the same format.\n */\n\n/**\n * Base output format for Observer (without patterns section)\n */\nexport const OBSERVER_OUTPUT_FORMAT_BASE = buildObserverOutputFormat();\n\nexport function buildObserverOutputFormat(extractors: readonly Extractor<any>[] = []): string {\n  const extractorSections = buildExtractorOutputSections(extractors);\n  const legacyContinuationSections =\n    extractors.length === 0\n      ? `\n<current-task>\nState the current task(s) explicitly:\n- Primary: What the agent is currently working on\n- Secondary: Other pending tasks (mark as \"waiting for user\" if appropriate)\n</current-task>\n\n<suggested-response>\nHint for the agent's immediate next message. Examples:\n- \"I've updated the navigation model. Let me walk you through the changes...\"\n- \"The assistant should wait for the user to respond before continuing.\"\n- Call the view tool on src/example.ts to continue debugging.\n</suggested-response>`\n      : '';\n  return `Use priority levels:\n- 🔴 High: explicit user facts, preferences, unresolved goals, critical context\n- 🟡 Medium: project details, learned information, tool results\n- 🟢 Low: minor details, uncertain observations\n- ✅ Completed: concrete task finished, question answered, issue resolved, goal achieved, or subtask completed in a way that helps the assistant know it is done\n\nGroup related observations (like tool sequences) by indenting:\n* 🔴 (14:33) Agent debugging auth issue\n  * -> ran git status, found 3 modified files\n  * -> viewed auth.ts:45-60, found missing null check\n  * -> applied fix, tests now pass\n  * ✅ Tests passing, auth issue resolved\n\nGroup observations by date, then list each with 24-hour time.\n\n<observations>\nDate: Dec 4, 2025\n* 🔴 (14:30) User prefers direct answers\n* 🔴 (14:31) Working on feature X\n* 🟡 (14:32) User might prefer dark mode\n\nDate: Dec 5, 2025\n* 🔴 (09:15) Continued work on feature X\n</observations>\n\n${extractorSections || legacyContinuationSections}`;\n}\n\n/**\n * The guidelines for the Observer.\n * This is exported so the Reflector can reference them.\n */\nexport const OBSERVER_GUIDELINES = `- Be specific enough for the assistant to act on\n- Good: \"User prefers short, direct answers without lengthy explanations\"\n- Bad: \"User stated a preference\" (too vague)\n- Add 1 to 5 observations per exchange\n- Use terse language to save tokens. Sentences should be dense without unnecessary words\n- Do not add repetitive observations that have already been observed. Group repeated similar actions (tool calls, file browsing) under a single parent with sub-bullets for new results\n- If the agent calls tools, observe what was called, why, and what was learned\n- When observing files with line numbers, include the line number if useful\n- If the agent provides a detailed response, observe the contents so it could be repeated\n- Make sure you start each observation with a priority emoji (🔴, 🟡, 🟢) or a completion marker (✅)\n- Capture the user's words closely — short/medium messages near-verbatim, long messages summarized with key quotes. User confirmations or explicit resolved outcomes should be ✅ when they clearly signal something is done; unresolved or critical user facts remain 🔴\n- Treat ✅ as a memory signal that tells the assistant something is finished and should not be repeated unless new information changes it\n- Make completion observations answer \"What exactly is now done?\"\n- Prefer concrete resolved outcomes over meta-level workflow or bookkeeping updates\n- When multiple concrete things were completed, capture the concrete completed work rather than collapsing it into a vague progress summary\n- Observe WHAT the agent did and WHAT it means\n- If the user provides detailed messages or code snippets, observe all important details`;\n\n/**\n * Build the complete observer system prompt.\n * @param multiThread - Whether this is for multi-thread batched observation (default: false)\n * @param instruction - Optional custom instructions to append to the prompt\n */\nexport function buildObserverSystemPrompt(\n  multiThread: boolean = false,\n  instruction?: string,\n  includeThreadTitle: boolean = false,\n  extractors: readonly Extractor<any>[] = [],\n): string {\n  const outputFormat = buildObserverOutputFormat(extractors);\n  const multiThreadTitleInstruction = includeThreadTitle\n    ? ` Each thread's observations, current-task, suggested-response, and thread-title should be nested inside a <thread id=\"...\"> block within <observations>.`\n    : ` Each thread's observations, current-task, and suggested-response should be nested inside a <thread id=\"...\"> block within <observations>.`;\n  const multiThreadTitleExample = includeThreadTitle\n    ? `\n<thread-title>Feature X implementation</thread-title>`\n    : '';\n  const multiThreadSecondTitleExample = includeThreadTitle\n    ? `\n<thread-title>Deployment setup</thread-title>`\n    : '';\n\n  if (multiThread) {\n    return `You are the memory consciousness of an AI assistant. Your observations will be the ONLY information the assistant has about past interactions with this user.\n\nExtract observations that will help the assistant remember:\n\n${OBSERVER_EXTRACTION_INSTRUCTIONS}\n\n=== MULTI-THREAD INPUT ===\n\nYou will receive messages from MULTIPLE conversation threads, each wrapped in <thread id=\"...\"> tags.\nProcess each thread separately and output observations for each thread.\n\n=== OUTPUT FORMAT ===\n\nYour output MUST use XML tags to structure the response.${multiThreadTitleInstruction}\n\nUse this observation format inside each thread block:\n\n${outputFormat}\n\nFor multi-thread output, wrap each thread's observations like this:\n\n<observations>\n<thread id=\"thread_id_1\">\nDate: Dec 4, 2025\n* 🔴 (14:30) User prefers direct answers\n* 🔴 (14:31) Working on feature X\n\n<current-task>\nWhat the agent is currently working on in this thread\n</current-task>\n\n<suggested-response>\nHint for the agent's next message in this thread\n</suggested-response>${multiThreadTitleExample}\n</thread>\n\n<thread id=\"thread_id_2\">\nDate: Dec 5, 2025\n* 🔴 (09:15) User asked about deployment\n\n<current-task>\nCurrent task for this thread\n</current-task>\n\n<suggested-response>\nSuggested response for this thread\n</suggested-response>${multiThreadSecondTitleExample}\n</thread>\n</observations>\n\n=== GUIDELINES ===\n\n${OBSERVER_GUIDELINES}\n\nRemember: These observations are the assistant's ONLY memory. Make them count.\n\nUser messages are extremely important. If the user asks a question or gives a new task, make it clear in <current-task> that this is the priority.${instruction ? `\\n\\n=== CUSTOM INSTRUCTIONS ===\\n\\n${instruction}` : ''}`;\n  }\n\n  return `You are the memory consciousness of an AI assistant. Your observations will be the ONLY information the assistant has about past interactions with this user.\n\nExtract observations that will help the assistant remember:\n\n${OBSERVER_EXTRACTION_INSTRUCTIONS}\n\n=== OUTPUT FORMAT ===\n\nYour output MUST use XML tags to structure the response. This allows the system to properly parse and manage memory over time.\n\n${outputFormat}\n\n=== GUIDELINES ===\n\n${OBSERVER_GUIDELINES}\n\n=== IMPORTANT: THREAD ATTRIBUTION ===\n\nDo NOT add thread identifiers, thread IDs, or <thread> tags to your observations.\nThread attribution is handled externally by the system.\nSimply output your observations without any thread-related markup.\n\nRemember: These observations are the assistant's ONLY memory. Make them count.\n\nUser messages are extremely important. If the user asks a question or gives a new task, make it clear in <current-task> that this is the priority. If the assistant needs to respond to the user, indicate in <suggested-response> that it should pause for user reply before continuing other tasks.${instruction ? `\\n\\n=== CUSTOM INSTRUCTIONS ===\\n\\n${instruction}` : ''}`;\n}\n\n/**\n * Observer Agent System Prompt (default - for backwards compatibility)\n *\n * This prompt instructs the Observer to extract observations from message history.\n * The observations become the agent's \"subconscious memory\" - the ONLY information\n * the main agent will have about past interactions.\n */\nexport const OBSERVER_SYSTEM_PROMPT = buildObserverSystemPrompt();\n\n/**\n * Result from the Observer agent\n */\nexport interface ObserverResult {\n  /** The extracted observations in markdown format */\n  observations: string;\n\n  /** The current task extracted from observations (for thread metadata) */\n  currentTask?: string;\n\n  /** Suggested continuation message for the Actor */\n  suggestedContinuation?: string;\n\n  /** The suggested thread title (short/concise, for thread metadata) */\n  threadTitle?: string;\n\n  /** Extracted values keyed by extractor slug */\n  extractedValues?: Record<string, unknown>;\n\n  /** Extractor failures keyed by extractor slug */\n  extractionFailures?: Array<{ slug: string; error: string }>;\n\n  /** Raw output from the model (for debugging) */\n  rawOutput?: string;\n\n  /** True if the output was detected as degenerate (repetition loop) and should be discarded/retried */\n  degenerate?: boolean;\n}\n\n/**\n * Format messages for the Observer's input.\n * Includes timestamps for temporal context.\n */\ntype ObserverAttachmentPart =\n  | {\n      type: 'image';\n      image: unknown;\n      mimeType?: string;\n      filename?: string;\n      providerOptions?: unknown;\n      providerMetadata?: unknown;\n      experimental_providerMetadata?: unknown;\n    }\n  | {\n      type: 'file';\n      data: unknown;\n      mimeType?: string;\n      filename?: string;\n      providerOptions?: unknown;\n      providerMetadata?: unknown;\n      experimental_providerMetadata?: unknown;\n    };\n\ntype ObserverInputAttachmentPart =\n  | {\n      type: 'image';\n      image: unknown;\n      mimeType?: string;\n      providerOptions?: unknown;\n      providerMetadata?: unknown;\n      experimental_providerMetadata?: unknown;\n    }\n  | {\n      type: 'file';\n      data: unknown;\n      mimeType?: string;\n      filename?: string;\n      providerOptions?: unknown;\n      providerMetadata?: unknown;\n      experimental_providerMetadata?: unknown;\n    };\n\ninterface ObserverFormattedLine {\n  date: string;\n  time: string;\n  title: string;\n  body: string;\n}\n\ninterface ObserverFormattedMessage {\n  lines: ObserverFormattedLine[];\n  attachments: ObserverInputAttachmentPart[];\n}\n\ninterface ObserverAttachmentCounter {\n  nextImageId: number;\n  nextFileId: number;\n}\n\ninterface ObserverFormattingContext {\n  previousDate?: string;\n  previousTime?: string;\n}\n\ninterface ObserverFormattedOutput {\n  text: string;\n  context: ObserverFormattingContext;\n}\n\nconst OBSERVER_IMAGE_FILE_EXTENSIONS = new Set([\n  'png',\n  'jpg',\n  'jpeg',\n  'webp',\n  'gif',\n  'bmp',\n  'tiff',\n  'tif',\n  'heic',\n  'heif',\n  'avif',\n]);\n\nfunction formatObserverDate(createdAt?: Date): string {\n  return createdAt\n    ? `${createdAt.toLocaleDateString('en-US', {\n        month: 'short',\n      })} ${createdAt.getDate()} ${createdAt.getFullYear()}`\n    : '';\n}\n\nfunction formatObserverTime(createdAt?: Date): string {\n  return createdAt\n    ? createdAt.toLocaleTimeString('en-US', {\n        hour: 'numeric',\n        minute: '2-digit',\n        hour12: true,\n      })\n    : '';\n}\n\nfunction getObserverPathExtension(value: string): string | undefined {\n  const normalized = value.split('#', 1)[0]?.split('?', 1)[0] ?? value;\n  const match = normalized.match(/\\.([a-z0-9]+)$/i);\n  return match?.[1]?.toLowerCase();\n}\n\nfunction hasObserverImageFilenameExtension(filename: unknown): boolean {\n  return typeof filename === 'string' && OBSERVER_IMAGE_FILE_EXTENSIONS.has(getObserverPathExtension(filename) ?? '');\n}\n\nfunction isImageLikeObserverFilePart(part: ObserverAttachmentPart): boolean {\n  if (part.type !== 'file') {\n    return false;\n  }\n\n  if (typeof part.mimeType === 'string' && part.mimeType.toLowerCase().startsWith('image/')) {\n    return true;\n  }\n\n  if (typeof part.data === 'string' && part.data.startsWith('data:image/')) {\n    return true;\n  }\n\n  if (part.data instanceof URL && hasObserverImageFilenameExtension(part.data.pathname)) {\n    return true;\n  }\n\n  if (typeof part.data === 'string') {\n    try {\n      const url = new URL(part.data);\n      if ((url.protocol === 'http:' || url.protocol === 'https:') && hasObserverImageFilenameExtension(url.pathname)) {\n        return true;\n      }\n    } catch {\n      // ignore invalid URL string\n    }\n  }\n\n  return hasObserverImageFilenameExtension(part.filename);\n}\n\nfunction resolveObserverAttachmentMimeType(part: ObserverAttachmentPart): string {\n  if (typeof part.mimeType === 'string' && part.mimeType.length > 0) {\n    return part.mimeType.toLowerCase();\n  }\n  if (part.type === 'image') {\n    return 'image/*';\n  }\n  if (isImageLikeObserverFilePart(part)) {\n    return 'image/*';\n  }\n  return 'application/octet-stream';\n}\n\nfunction matchObserverMimePattern(mimeType: string, pattern: string): boolean {\n  const normalized = pattern.trim().toLowerCase();\n  if (!normalized) return false;\n  if (normalized === '*' || normalized === '*/*') return true;\n  if (normalized.endsWith('/*')) {\n    const prefix = normalized.slice(0, normalized.length - 1); // keep trailing '/'\n    return mimeType.startsWith(prefix);\n  }\n  return mimeType === normalized;\n}\n\nfunction shouldIncludeObserverAttachment(\n  part: ObserverAttachmentPart,\n  filter: ObserverAttachmentFilter | undefined,\n): boolean {\n  if (filter === undefined || filter === true) return true;\n  if (filter === false) return false;\n  if (!Array.isArray(filter) || filter.length === 0) return false;\n  const mimeType = resolveObserverAttachmentMimeType(part);\n  return filter.some(pattern => matchObserverMimePattern(mimeType, pattern));\n}\n\nfunction toObserverInputAttachmentPart(part: ObserverAttachmentPart): ObserverInputAttachmentPart {\n  if (part.type === 'image') {\n    return {\n      type: 'image',\n      image: part.image,\n      mimeType: part.mimeType,\n      providerOptions: part.providerOptions,\n      providerMetadata: part.providerMetadata,\n      experimental_providerMetadata: part.experimental_providerMetadata,\n    };\n  }\n\n  if (isImageLikeObserverFilePart(part)) {\n    return {\n      type: 'image',\n      image: part.data,\n      mimeType: part.mimeType,\n      providerOptions: part.providerOptions,\n      providerMetadata: part.providerMetadata,\n      experimental_providerMetadata: part.experimental_providerMetadata,\n    };\n  }\n\n  return {\n    type: 'file',\n    data: part.data,\n    mimeType: part.mimeType,\n    filename: part.filename,\n    providerOptions: part.providerOptions,\n    providerMetadata: part.providerMetadata,\n    experimental_providerMetadata: part.experimental_providerMetadata,\n  };\n}\n\nfunction resolveObserverAttachmentLabel(part: ObserverAttachmentPart): string | undefined {\n  if (part.filename?.trim()) {\n    return part.filename.trim();\n  }\n\n  const asset = part.type === 'image' ? part.image : part.data;\n  if (typeof asset !== 'string' || asset.startsWith('data:')) {\n    return part.mimeType;\n  }\n\n  try {\n    const url = new URL(asset);\n    const basename = url.pathname.split('/').filter(Boolean).pop();\n    return basename ? decodeURIComponent(basename) : part.mimeType;\n  } catch {\n    return part.mimeType;\n  }\n}\n\nfunction formatObserverAttachmentPlaceholder(part: ObserverAttachmentPart, counter: ObserverAttachmentCounter): string {\n  const attachmentType = part.type === 'image' || isImageLikeObserverFilePart(part) ? 'Image' : 'File';\n  const attachmentId = attachmentType === 'Image' ? counter.nextImageId++ : counter.nextFileId++;\n  const label = resolveObserverAttachmentLabel(part);\n  return label ? `[${attachmentType} #${attachmentId}: ${label}]` : `[${attachmentType} #${attachmentId}]`;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return !!value && typeof value === 'object';\n}\n\nfunction mapToolResultBlockToAttachment(block: unknown): ObserverAttachmentPart | undefined {\n  if (!isRecord(block) || typeof block.type !== 'string') {\n    return undefined;\n  }\n\n  const mediaType = typeof block.mediaType === 'string' ? block.mediaType : undefined;\n  const filename = typeof block.filename === 'string' ? block.filename : undefined;\n\n  switch (block.type) {\n    case 'image-data': {\n      const data = block.data;\n      if (typeof data !== 'string') return undefined;\n      const image = mediaType ? `data:${mediaType};base64,${data}` : data;\n      return { type: 'image', image, mimeType: mediaType };\n    }\n\n    case 'image-url': {\n      const url = block.url;\n      if (typeof url !== 'string') return undefined;\n      return { type: 'image', image: url, mimeType: mediaType };\n    }\n\n    case 'media': {\n      const data = block.data;\n      if (typeof data !== 'string' || !mediaType) return undefined;\n      const dataUri = `data:${mediaType};base64,${data}`;\n      if (mediaType.toLowerCase().startsWith('image/')) {\n        return { type: 'image', image: dataUri, mimeType: mediaType };\n      }\n      return { type: 'file', data: dataUri, mimeType: mediaType };\n    }\n\n    case 'file-data': {\n      const data = block.data;\n      if (typeof data !== 'string') return undefined;\n      const dataUri = mediaType ? `data:${mediaType};base64,${data}` : data;\n      return { type: 'file', data: dataUri, mimeType: mediaType, filename };\n    }\n\n    case 'file-url': {\n      const url = block.url;\n      if (typeof url !== 'string') return undefined;\n      return { type: 'file', data: url, mimeType: mediaType, filename };\n    }\n\n    default:\n      return undefined;\n  }\n}\n\nfunction extractToolResultAttachments(\n  result: unknown,\n  counter: ObserverAttachmentCounter,\n  attachmentFilter?: ObserverAttachmentFilter,\n): { resultWithoutAttachments: unknown; attachments: ObserverInputAttachmentPart[] } {\n  if (!isRecord(result) || result.type !== 'content' || !Array.isArray(result.value)) {\n    return { resultWithoutAttachments: result, attachments: [] };\n  }\n\n  const record = result;\n\n  const attachments: ObserverInputAttachmentPart[] = [];\n  let hadAttachmentBlocks = false;\n  const newValue = (record.value as unknown[]).map(block => {\n    const attachment = mapToolResultBlockToAttachment(block);\n    if (!attachment) {\n      return block;\n    }\n    hadAttachmentBlocks = true;\n\n    if (shouldIncludeObserverAttachment(attachment, attachmentFilter)) {\n      attachments.push(toObserverInputAttachmentPart(attachment));\n    }\n    const placeholder = formatObserverAttachmentPlaceholder(attachment, counter);\n    return { type: isRecord(block) ? block.type : undefined, placeholder };\n  });\n\n  if (!hadAttachmentBlocks) {\n    return { resultWithoutAttachments: result, attachments };\n  }\n\n  return { resultWithoutAttachments: { ...record, value: newValue }, attachments };\n}\n\nfunction formatObserverPartLine(title: string, body: string, time: string, previousTime?: string): string {\n  const timeLabel = time && time !== previousTime ? `(${time})` : '';\n\n  if (!title) {\n    return timeLabel ? `${timeLabel}: ${body}` : body;\n  }\n\n  return `${title}${timeLabel ? ` ${timeLabel}` : ''}: ${body}`;\n}\n\nfunction normalizeObserverCreatedAt(createdAt: unknown): Date | undefined {\n  if (createdAt instanceof Date) {\n    // Invalid Date objects still satisfy `instanceof Date`, so reject them explicitly.\n    if (Number.isNaN(createdAt.getTime())) {\n      return undefined;\n    }\n    return createdAt;\n  }\n\n  if (typeof createdAt === 'number' || typeof createdAt === 'string') {\n    const date = new Date(createdAt);\n    if (Number.isNaN(date.getTime())) {\n      return undefined;\n    }\n    return date;\n  }\n\n  return undefined;\n}\n\nfunction formatObserverLines(\n  lines: ObserverFormattedLine[],\n  context: ObserverFormattingContext = {},\n): ObserverFormattedOutput {\n  const output: string[] = [];\n  let previousDate = context.previousDate;\n  let previousTime = context.previousTime;\n\n  for (const line of lines) {\n    if (line.date && line.date !== previousDate) {\n      output.push(`${line.date}:`);\n      previousDate = line.date;\n      previousTime = undefined;\n    }\n\n    output.push(formatObserverPartLine(line.title, line.body, line.time, previousTime));\n    previousTime = line.time || previousTime;\n  }\n\n  return {\n    text: output.join('\\n'),\n    context: { previousDate, previousTime },\n  };\n}\n\nfunction getTemporalGapMarkerText(msg: MastraDBMessage): string | undefined {\n  const metadata =\n    typeof msg.content === 'object' && msg.content && 'metadata' in msg.content\n      ? (msg.content.metadata as { gapText?: unknown; reminderType?: unknown; systemReminder?: unknown })\n      : undefined;\n\n  if (metadata?.reminderType === 'temporal-gap' && typeof metadata.gapText === 'string') {\n    return metadata.gapText;\n  }\n\n  if (\n    typeof metadata?.systemReminder === 'object' &&\n    metadata.systemReminder &&\n    'type' in metadata.systemReminder &&\n    metadata.systemReminder.type === 'temporal-gap' &&\n    'gapText' in metadata.systemReminder &&\n    typeof metadata.systemReminder.gapText === 'string'\n  ) {\n    return metadata.systemReminder.gapText;\n  }\n\n  return undefined;\n}\n\nfunction formatObserverMessage(\n  msg: MastraDBMessage,\n  counter: ObserverAttachmentCounter,\n  options?: ObserverFormatOptions,\n): ObserverFormattedMessage {\n  const maxLen = options?.maxPartLength;\n  const maxToolResultTokens = options?.maxToolResultTokens ?? DEFAULT_OBSERVER_TOOL_RESULT_MAX_TOKENS;\n  const attachmentFilter = options?.attachmentFilter;\n  const role = msg.role.charAt(0).toUpperCase() + msg.role.slice(1);\n  const attachments: ObserverInputAttachmentPart[] = [];\n  const messageCreatedAt = normalizeObserverCreatedAt(msg.createdAt);\n\n  let lines: ObserverFormattedLine[] = [];\n\n  const temporalGapText = isTemporalGapMarker(msg) ? getTemporalGapMarkerText(msg) : undefined;\n\n  const pushLine = (title: string, body: string, createdAt?: unknown) => {\n    if (!body) {\n      return;\n    }\n\n    const normalizedCreatedAt = normalizeObserverCreatedAt(createdAt) ?? messageCreatedAt;\n    lines.push({\n      date: formatObserverDate(normalizedCreatedAt),\n      time: formatObserverTime(normalizedCreatedAt),\n      title,\n      body,\n    });\n  };\n\n  if (temporalGapText) {\n    pushLine('', temporalGapText, messageCreatedAt);\n  } else if (typeof msg.content === 'string') {\n    pushLine(role, maybeTruncate(msg.content, maxLen), messageCreatedAt);\n  } else if (msg.content?.parts && Array.isArray(msg.content.parts) && msg.content.parts.length > 0) {\n    msg.content.parts.forEach(part => {\n      const partCreatedAt = normalizeObserverCreatedAt((part as { createdAt?: unknown }).createdAt) ?? messageCreatedAt;\n\n      if (part.type === 'text') {\n        pushLine(role, maybeTruncate(part.text, maxLen), partCreatedAt);\n        return;\n      }\n\n      if (part.type === 'tool-invocation') {\n        const inv = part.toolInvocation;\n        if (inv.state === 'result') {\n          const { value: resultForObserver } = resolveToolResultValue(\n            part as { providerMetadata?: Record<string, any> },\n            inv.result,\n          );\n          const { resultWithoutAttachments, attachments: extractedAttachments } = extractToolResultAttachments(\n            resultForObserver,\n            counter,\n            attachmentFilter,\n          );\n          if (extractedAttachments.length > 0) {\n            attachments.push(...extractedAttachments);\n          }\n          pushLine(\n            `Tool Result ${inv.toolName}`,\n            maybeTruncate(\n              formatToolResultForObserver(resultWithoutAttachments, { maxTokens: maxToolResultTokens }),\n              maxLen,\n            ),\n            partCreatedAt,\n          );\n          return;\n        }\n\n        pushLine(`Tool Call ${inv.toolName}`, maybeTruncate(JSON.stringify(inv.args, null, 2), maxLen), partCreatedAt);\n        return;\n      }\n\n      const partType = (part as { type?: string }).type;\n      if (partType === 'reasoning') {\n        const reasoning = (part as { reasoning?: string }).reasoning;\n        if (!reasoning) {\n          return;\n        }\n        pushLine('Reasoning', maybeTruncate(reasoning, maxLen), partCreatedAt);\n        return;\n      }\n\n      if (partType === 'image' || partType === 'file') {\n        const attachment = part as ObserverAttachmentPart;\n        if (shouldIncludeObserverAttachment(attachment, attachmentFilter)) {\n          const inputAttachment = toObserverInputAttachmentPart(attachment);\n          if (inputAttachment) {\n            attachments.push(inputAttachment);\n          }\n        }\n        pushLine(\n          partType === 'image' ? 'Image' : 'File',\n          formatObserverAttachmentPlaceholder(attachment, counter),\n          partCreatedAt,\n        );\n      }\n    });\n  } else if (msg.content?.content) {\n    pushLine(role, maybeTruncate(msg.content.content, maxLen), messageCreatedAt);\n  }\n\n  if (lines.length === 0 && attachments.length === 0) {\n    return { lines: [], attachments };\n  }\n\n  return {\n    lines,\n    attachments,\n  };\n}\n\nexport function formatMessagesForObserver(messages: MastraDBMessage[], options?: ObserverFormatOptions): string {\n  const counter = { nextImageId: 1, nextFileId: 1 };\n  const sections: string[] = [];\n  let context: ObserverFormattingContext = {};\n\n  for (const message of messages) {\n    const formatted = formatObserverMessage(message, counter, options);\n    if (formatted.lines.length === 0) {\n      continue;\n    }\n\n    const rendered = formatObserverLines(formatted.lines, context);\n    if (!rendered.text) {\n      continue;\n    }\n\n    sections.push(rendered.text);\n    context = rendered.context;\n  }\n\n  return sections.join('\\n');\n}\n\nfunction appendFormattedObserverMessage(\n  content: any[],\n  formatted: ObserverFormattedMessage,\n  context: ObserverFormattingContext,\n): ObserverFormattingContext {\n  const rendered = formatObserverLines(formatted.lines, context);\n  if (rendered.text) {\n    content.push({ type: 'text', text: rendered.text });\n  }\n  content.push(...formatted.attachments);\n  return rendered.context;\n}\n\nexport function buildObserverHistoryMessage(messages: MastraDBMessage[], options?: ObserverFormatOptions): CoreMessage {\n  const counter = { nextImageId: 1, nextFileId: 1 };\n  const content: any[] = [{ type: 'text', text: '## New Message History to Observe\\n\\n' }];\n\n  let context: ObserverFormattingContext = {};\n  messages.forEach(message => {\n    const formatted = formatObserverMessage(message, counter, options);\n    if (formatted.lines.length === 0 && formatted.attachments.length === 0) return;\n    context = appendFormattedObserverMessage(content, formatted, context);\n  });\n\n  return {\n    role: 'user',\n    content,\n  } as CoreMessage;\n}\n\n/** Truncate a string to maxLen characters, appending a note if truncated. */\nfunction maybeTruncate(str: string, maxLen?: number): string {\n  if (!maxLen || str.length <= maxLen) return str;\n  const truncated = safeSlice(str, maxLen);\n  const remaining = str.length - truncated.length;\n  return `${truncated}\\n... [truncated ${remaining} characters]`;\n}\n\n/**\n * Format messages from multiple threads for batched observation.\n * Each thread's messages are wrapped in a <thread id=\"...\"> block.\n */\nexport function formatMultiThreadMessagesForObserver(\n  messagesByThread: Map<string, MastraDBMessage[]>,\n  threadOrder: string[],\n  options?: ObserverFormatOptions,\n): string {\n  const sections: string[] = [];\n\n  for (const threadId of threadOrder) {\n    const messages = messagesByThread.get(threadId);\n    if (!messages || messages.length === 0) continue;\n\n    const formattedMessages = formatMessagesForObserver(messages, options);\n    sections.push(`<thread id=\"${threadId}\">\\n${formattedMessages}\\n</thread>`);\n  }\n\n  return sections.join('\\n\\n');\n}\n\nexport function buildMultiThreadObserverHistoryMessage(\n  messagesByThread: Map<string, MastraDBMessage[]>,\n  threadOrder: string[],\n  options?: ObserverFormatOptions,\n): CoreMessage {\n  const counter = { nextImageId: 1, nextFileId: 1 };\n  const content: any[] = [\n    {\n      type: 'text',\n      text: `## New Message History to Observe\\n\\nThe following messages are from ${threadOrder.length} different conversation threads. Each thread is wrapped in a <thread id=\"...\"> tag.\\n\\n`,\n    },\n  ];\n\n  threadOrder.forEach((threadId, threadIndex) => {\n    const messages = messagesByThread.get(threadId);\n    if (!messages || messages.length === 0) return;\n\n    const threadContent: any[] = [];\n    let context: ObserverFormattingContext = {};\n    let hasVisibleContent = false;\n    messages.forEach(message => {\n      const formatted = formatObserverMessage(message, counter, options);\n      if (formatted.lines.length === 0 && formatted.attachments.length === 0) return;\n      context = appendFormattedObserverMessage(threadContent, formatted, context);\n      hasVisibleContent = true;\n    });\n\n    if (!hasVisibleContent) return;\n\n    content.push({ type: 'text', text: `<thread id=\"${threadId}\">\\n` });\n    content.push(...threadContent);\n    content.push({ type: 'text', text: '\\n</thread>' });\n    if (threadIndex < threadOrder.length - 1) {\n      content.push({ type: 'text', text: '\\n\\n' });\n    }\n  });\n\n  return {\n    role: 'user',\n    content,\n  } as CoreMessage;\n}\n\nexport function buildMultiThreadObserverTaskPrompt(\n  existingObservations: string | undefined,\n  threadOrder?: string[],\n  priorMetadataByThread?: Map<\n    string,\n    { currentTask?: string; suggestedResponse?: string; threadTitle?: string; extracted?: Record<string, unknown> }\n  >,\n  wasTruncated?: boolean,\n  includeThreadTitle?: boolean,\n  extractors: readonly Extractor<any>[] = [],\n): string {\n  let prompt = '';\n\n  if (existingObservations) {\n    prompt += `## Previous Observations\\n\\n${existingObservations}\\n\\n---\\n\\n`;\n    prompt +=\n      'Do not repeat these existing observations. Your new observations will be appended to the existing observations.\\n\\n';\n  }\n\n  const hasTruncatedObservations = wasTruncated ?? false;\n  const threadMetadataLines = threadOrder\n    ?.map(threadId => {\n      const metadata = priorMetadataByThread?.get(threadId);\n      const extractorPriorLines = buildExtractorPriorLines(extractors, metadata?.extracted);\n      const hasRelevantMetadata =\n        metadata?.currentTask ||\n        metadata?.suggestedResponse ||\n        (includeThreadTitle && metadata?.threadTitle) ||\n        extractorPriorLines.length > 0;\n      if (!hasRelevantMetadata || !metadata) {\n        return '';\n      }\n\n      const lines = [`- thread ${threadId}`];\n      if (metadata.currentTask) {\n        lines.push(`  - prior current-task: ${metadata.currentTask}`);\n      }\n      if (metadata.suggestedResponse) {\n        lines.push(`  - prior suggested-response: ${metadata.suggestedResponse}`);\n      }\n      if (includeThreadTitle && metadata.threadTitle) {\n        lines.push(`  - prior thread-title: ${metadata.threadTitle}`);\n      }\n      for (const priorLine of extractorPriorLines) {\n        lines.push(`  - prior ${priorLine.replace(/\\n/g, '\\n    ')}`);\n      }\n      return lines.join('\\n');\n    })\n    .filter(Boolean)\n    .join('\\n');\n\n  if (threadMetadataLines) {\n    prompt += `## Prior Thread Metadata\\n\\n${threadMetadataLines}\\n\\n`;\n    if (hasTruncatedObservations) {\n      prompt += `Previous observations were truncated for context budget reasons.\\n`;\n      prompt += `The main agent still has full memory context outside this observer window.\\n`;\n    }\n    const titleHint = includeThreadTitle ? ', and thread-title' : '';\n    prompt += `Use each thread's prior current-task, suggested-response${titleHint} as continuity hints, then update them based on that thread's new messages.\\n\\n---\\n\\n`;\n  }\n\n  prompt += `## Your Task\\n\\n`;\n  const titleInstruction = includeThreadTitle ? ', and thread-title' : '';\n  prompt += `Extract new observations from each thread. Output your observations grouped by thread using <thread id=\"...\"> tags inside your <observations> block. Each thread block should contain that thread's observations, current-task, suggested-response${titleInstruction}.\\n\\n`;\n  prompt += `Example output format:\\n`;\n  prompt += `<observations>\\n`;\n  prompt += `<thread id=\"thread1\">\\n`;\n  prompt += `Date: Dec 4, 2025\\n`;\n  prompt += `* 🔴 (14:30) User prefers direct answers\\n`;\n  prompt += `<current-task>Working on feature X</current-task>\\n`;\n  prompt += `<suggested-response>Continue with the implementation</suggested-response>\\n`;\n  if (includeThreadTitle) prompt += `<thread-title>Feature X implementation</thread-title>\\n`;\n  prompt += `</thread>\\n`;\n  prompt += `<thread id=\"thread2\">\\n`;\n  prompt += `Date: Dec 5, 2025\\n`;\n  prompt += `* 🔴 (09:15) User asked about deployment\\n`;\n  prompt += `<current-task>Discussing deployment options</current-task>\\n`;\n  prompt += `<suggested-response>Explain the deployment process</suggested-response>\\n`;\n  if (includeThreadTitle) prompt += `<thread-title>Deployment setup</thread-title>\\n`;\n  prompt += `</thread>\\n`;\n  prompt += `</observations>`;\n\n  return prompt;\n}\n\n/**\n * Build the prompt for multi-thread batched observation.\n */\nexport function buildMultiThreadObserverPrompt(\n  existingObservations: string | undefined,\n  messagesByThread: Map<string, MastraDBMessage[]>,\n  threadOrder: string[],\n  priorMetadataByThread?: Map<\n    string,\n    { currentTask?: string; suggestedResponse?: string; threadTitle?: string; extracted?: Record<string, unknown> }\n  >,\n  wasTruncated?: boolean,\n  options?: ObserverFormatOptions,\n  includeThreadTitle?: boolean,\n  extractors: readonly Extractor<any>[] = [],\n): string {\n  const formattedMessages = formatMultiThreadMessagesForObserver(messagesByThread, threadOrder, options);\n  return `## New Message History to Observe\\n\\nThe following messages are from ${threadOrder.length} different conversation threads. Each thread is wrapped in a <thread id=\"...\"> tag.\\n\\n${formattedMessages}\\n\\n---\\n\\n${buildMultiThreadObserverTaskPrompt(existingObservations, threadOrder, priorMetadataByThread, wasTruncated, includeThreadTitle, extractors)}`;\n}\n\n/**\n * Result from parsing multi-thread Observer output\n */\nexport interface MultiThreadObserverResult {\n  /** Results per thread */\n  threads: Map<string, ObserverResult>;\n  /** Raw output from the model (for debugging) */\n  rawOutput: string;\n  /** True if the output was detected as degenerate (repetition loop) and should be discarded/retried */\n  degenerate?: boolean;\n}\n\n/**\n * Parse multi-thread Observer output to extract per-thread results.\n */\nexport function parseMultiThreadObserverOutput(\n  output: string,\n  extractors: readonly Extractor<any>[] = [],\n): MultiThreadObserverResult {\n  const threads = new Map<string, ObserverResult>();\n\n  // Check for degenerate repetition on the whole output\n  if (detectDegenerateRepetition(output)) {\n    return { threads, rawOutput: output, degenerate: true };\n  }\n\n  // Extract the <observations> block first\n  const observationsMatch = output.match(/^[ \\t]*<observations>([\\s\\S]*?)^[ \\t]*<\\/observations>/im);\n  const observationsContent = observationsMatch?.[1] ?? output;\n\n  // Find all <thread id=\"...\">...</thread> blocks within observations\n  const threadRegex = /<thread\\s+id=\"([^\"]+)\">([\\s\\S]*?)<\\/thread>/gi;\n  let match;\n\n  while ((match = threadRegex.exec(observationsContent)) !== null) {\n    const threadId = match[1];\n    const threadContent = match[2];\n    if (!threadId || !threadContent) continue;\n\n    const inlineExtractors = extractors.filter(extractor => extractor.mode === 'inline');\n    const parsedExtractedValues = parseExtractedValues(threadContent, inlineExtractors);\n\n    // Parse this thread's content for observations, current-task, suggested-response\n    // Extract observations (everything except current-task and suggested-response)\n    let observations = stripExtractorSections(threadContent, inlineExtractors);\n\n    // Extract and remove current-task\n    let currentTask: string | undefined;\n    const currentTaskMatch = threadContent.match(/<current-task>([\\s\\S]*?)<\\/current-task>/i);\n    if (currentTaskMatch?.[1]) {\n      currentTask = currentTaskMatch[1].trim();\n      observations = observations.replace(/<current-task>[\\s\\S]*?<\\/current-task>/i, '');\n    }\n\n    // Extract and remove suggested-response\n    let suggestedContinuation: string | undefined;\n    const suggestedMatch = threadContent.match(/<suggested-response>([\\s\\S]*?)<\\/suggested-response>/i);\n    if (suggestedMatch?.[1]) {\n      suggestedContinuation = suggestedMatch[1].trim();\n      observations = observations.replace(/<suggested-response>[\\s\\S]*?<\\/suggested-response>/i, '');\n    }\n\n    // Extract and remove thread-title\n    let threadTitle: string | undefined;\n    const threadTitleMatch = threadContent.match(/<thread-title>([\\s\\S]*?)<\\/thread-title>/i);\n    if (threadTitleMatch?.[1]) {\n      threadTitle = threadTitleMatch[1].trim();\n      observations = observations.replace(/<thread-title>[\\s\\S]*?<\\/thread-title>/i, '');\n    }\n\n    // Clean up observations and apply line truncation\n    observations = sanitizeObservationLines(observations.trim());\n\n    threads.set(threadId, {\n      observations,\n      currentTask: currentTask || getStringExtractedValue(parsedExtractedValues.values, 'current-task'),\n      suggestedContinuation:\n        suggestedContinuation || getStringExtractedValue(parsedExtractedValues.values, 'suggested-response'),\n      threadTitle: threadTitle || getStringExtractedValue(parsedExtractedValues.values, 'thread-title'),\n      extractedValues: parsedExtractedValues.values,\n      extractionFailures: parsedExtractedValues.failures,\n      rawOutput: threadContent,\n    });\n  }\n\n  // If no thread blocks found, the caller will need to handle this case\n  // (e.g., by falling back to single-thread parsing)\n\n  return {\n    threads,\n    rawOutput: output,\n  };\n}\n\nexport function buildObserverTaskPrompt(\n  existingObservations: string | undefined,\n  options?: {\n    skipContinuationHints?: boolean;\n    priorCurrentTask?: string;\n    priorSuggestedResponse?: string;\n    priorThreadTitle?: string;\n    wasTruncated?: boolean;\n    includeThreadTitle?: boolean;\n    extractors?: readonly Extractor<any>[];\n    priorExtractedValues?: Record<string, unknown>;\n  },\n): string {\n  let prompt = '';\n\n  if (existingObservations) {\n    prompt += `## Previous Observations\\n\\n${existingObservations}\\n\\n---\\n\\n`;\n    prompt +=\n      'Do not repeat these existing observations. Your new observations will be appended to the existing observations.\\n\\n';\n  }\n\n  const hasTruncatedObservations = options?.wasTruncated ?? false;\n  const priorMetadataLines: string[] = [];\n  if (options?.priorCurrentTask) {\n    priorMetadataLines.push(`- prior current-task: ${options.priorCurrentTask}`);\n  }\n  if (options?.priorSuggestedResponse) {\n    priorMetadataLines.push(`- prior suggested-response: ${options.priorSuggestedResponse}`);\n  }\n  if (options?.includeThreadTitle && options?.priorThreadTitle) {\n    priorMetadataLines.push(`- prior thread-title: ${options.priorThreadTitle}`);\n  }\n  priorMetadataLines.push(...buildExtractorPriorLines(options?.extractors ?? [], options?.priorExtractedValues));\n\n  if (priorMetadataLines.length > 0) {\n    prompt += `## Prior Thread Metadata\\n\\n${priorMetadataLines.join('\\n')}\\n\\n`;\n    if (hasTruncatedObservations) {\n      prompt += `Previous observations were truncated for context budget reasons.\\n`;\n      prompt += `The main agent still has full memory context outside this observer window.\\n`;\n    }\n    const titleHint = options?.includeThreadTitle ? ', and thread-title' : '';\n    prompt += `Use the prior current-task, suggested-response${titleHint} as continuity hints, then update them based on the new messages.\\n\\n---\\n\\n`;\n  }\n\n  prompt += `## Your Task\\n\\n`;\n  prompt += `Extract new observations from the message history above. Do not repeat observations that are already in the previous observations. Add your new observations in the format specified in your instructions.`;\n\n  if (options?.skipContinuationHints) {\n    prompt += `\\n\\nOutput <observations> every time.`;\n  }\n\n  return prompt;\n}\n\n/**\n * Build the full prompt for the Observer agent.\n * Includes emphasis on the most recent user message for priority handling.\n */\nexport function buildObserverPrompt(\n  existingObservations: string | undefined,\n  messagesToObserve: MastraDBMessage[],\n  options?: {\n    skipContinuationHints?: boolean;\n    priorCurrentTask?: string;\n    priorSuggestedResponse?: string;\n    priorThreadTitle?: string;\n    wasTruncated?: boolean;\n    includeThreadTitle?: boolean;\n    extractors?: readonly Extractor<any>[];\n    priorExtractedValues?: Record<string, unknown>;\n  },\n): string {\n  const formattedMessages = formatMessagesForObserver(messagesToObserve);\n  return `## New Message History to Observe\\n\\n${formattedMessages}\\n\\n---\\n\\n${buildObserverTaskPrompt(existingObservations, options)}`;\n}\n\n/**\n * Parse the Observer's output to extract observations, current task, and suggested response.\n * Uses XML tag parsing for structured extraction.\n */\nfunction getStringExtractedValue(values: Record<string, unknown>, slug: string): string | undefined {\n  const value = values[slug];\n  return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nexport function parseObserverOutput(output: string, extractors: readonly Extractor<any>[] = []): ObserverResult {\n  // Check for degenerate repetition before parsing (operates on raw output)\n  if (detectDegenerateRepetition(output)) {\n    return {\n      observations: '',\n      rawOutput: output,\n      degenerate: true,\n    };\n  }\n\n  const inlineExtractors = extractors.filter(extractor => extractor.mode === 'inline');\n  const parsedExtractedValues = parseExtractedValues(output, inlineExtractors);\n  const strippedOutput = stripExtractorSections(output, inlineExtractors);\n  const parsed = parseMemorySectionXml(strippedOutput);\n\n  // Return observations WITHOUT current-task/suggested-response tags\n  // Those are stored separately in thread metadata and injected dynamically\n  const observations = sanitizeObservationLines(parsed.observations || '');\n\n  return {\n    observations,\n    currentTask: parsed.currentTask || getStringExtractedValue(parsedExtractedValues.values, 'current-task'),\n    suggestedContinuation:\n      parsed.suggestedResponse || getStringExtractedValue(parsedExtractedValues.values, 'suggested-response'),\n    threadTitle: parsed.threadTitle || getStringExtractedValue(parsedExtractedValues.values, 'thread-title'),\n    extractedValues: parsedExtractedValues.values,\n    extractionFailures: parsedExtractedValues.failures,\n    rawOutput: output,\n  };\n}\n\n/**\n * Parsed result from XML memory section\n */\ninterface ParsedMemorySection {\n  observations: string;\n  currentTask: string;\n  suggestedResponse: string;\n  threadTitle: string;\n}\n\n/**\n * Parse XML tags from observer/reflector output.\n * Extracts content from <observations>, <current-task>, and <suggested-response> tags.\n */\nexport function parseMemorySectionXml(content: string): ParsedMemorySection {\n  const result: ParsedMemorySection = {\n    observations: '',\n    currentTask: '',\n    suggestedResponse: '',\n    threadTitle: '',\n  };\n\n  // Extract <observations> content (supports multiple blocks)\n  // Tags must be at the start of a line (with optional leading whitespace) to avoid\n  // capturing inline mentions like \"User discussed <observations> tags\"\n  const observationsRegex = /^[ \\t]*<observations>([\\s\\S]*?)^[ \\t]*<\\/observations>/gim;\n  const observationsMatches = [...content.matchAll(observationsRegex)];\n  if (observationsMatches.length > 0) {\n    result.observations = observationsMatches\n      .map(m => m[1]?.trim() ?? '')\n      .filter(Boolean)\n      .join('\\n');\n  } else {\n    // Fallback: if no XML tags, extract list items from raw content\n    // This handles cases where the LLM doesn't follow the XML format exactly\n    result.observations = extractListItemsOnly(content);\n  }\n\n  // Extract <current-task> content (first match only)\n  // Tags must be at the start of a line to avoid capturing inline mentions\n  const currentTaskMatch = content.match(/^[ \\t]*<current-task>([\\s\\S]*?)^[ \\t]*<\\/current-task>/im);\n  if (currentTaskMatch?.[1]) {\n    result.currentTask = currentTaskMatch[1].trim();\n  }\n\n  // Extract <suggested-response> content (first match only)\n  // Tags must be at the start of a line to avoid capturing inline mentions\n  const suggestedResponseMatch = content.match(/^[ \\t]*<suggested-response>([\\s\\S]*?)^[ \\t]*<\\/suggested-response>/im);\n  if (suggestedResponseMatch?.[1]) {\n    result.suggestedResponse = suggestedResponseMatch[1].trim();\n  }\n\n  // Extract <thread-title> content (first match only)\n  // Opening tag must be at the start of a line; closing tag can be on the same line\n  // (titles are short, so LLMs typically output them on a single line)\n  const threadTitleMatch = content.match(/^[ \\t]*<thread-title>([\\s\\S]*?)<\\/thread-title>/im);\n  if (threadTitleMatch?.[1]) {\n    result.threadTitle = threadTitleMatch[1].trim();\n  }\n\n  return result;\n}\n\n/**\n * Fallback: Extract only list items from content when XML tags are missing.\n * Preserves nested list items (indented with spaces/tabs).\n */\nfunction extractListItemsOnly(content: string): string {\n  const lines = content.split('\\n');\n  const listLines: string[] = [];\n\n  for (const line of lines) {\n    // Match lines that start with list markers (-, *, or numbered)\n    // Allow leading whitespace for nested items\n    if (/^\\s*[-*]\\s/.test(line) || /^\\s*\\d+\\.\\s/.test(line)) {\n      listLines.push(line);\n    }\n  }\n\n  return listLines.join('\\n').trim();\n}\n\n/**\n * Maximum length (in characters) for a single observation line.\n * Lines exceeding this are truncated with an ellipsis marker.\n * This guards against LLM degeneration that produces enormous single-line outputs.\n */\nconst MAX_OBSERVATION_LINE_CHARS = 10_000;\n\n/**\n * Truncate individual observation lines that exceed the maximum length.\n */\nexport function sanitizeObservationLines(observations: string): string {\n  if (!observations) return observations;\n  const lines = observations.split('\\n');\n  let changed = false;\n  for (let i = 0; i < lines.length; i++) {\n    if (lines[i]!.length > MAX_OBSERVATION_LINE_CHARS) {\n      lines[i] = safeSlice(lines[i]!, MAX_OBSERVATION_LINE_CHARS) + ' … [truncated]';\n      changed = true;\n    }\n  }\n  return changed ? lines.join('\\n') : observations;\n}\n\n/**\n * Detect degenerate repetition in observer/reflector output.\n * Returns true if the text contains suspicious levels of repeated content,\n * which indicates an LLM repeat-penalty bug (e.g., Gemini Flash looping).\n *\n * Strategy: sample sequential chunks of the text and check if a high\n * proportion are near-identical to previous chunks.\n */\nexport function detectDegenerateRepetition(text: string): boolean {\n  if (!text || text.length < 2000) return false;\n\n  // Strategy 1: Check for repeated long substrings by sampling fixed-size windows.\n  // If the same ~200-char window appears many times, it's degenerate.\n  const windowSize = 200;\n  const step = Math.max(1, Math.floor(text.length / 50)); // sample ~50 windows\n  const seen = new Map<string, number>();\n  let duplicateWindows = 0;\n  let totalWindows = 0;\n\n  for (let i = 0; i + windowSize <= text.length; i += step) {\n    const window = text.slice(i, i + windowSize);\n    totalWindows++;\n    const count = (seen.get(window) ?? 0) + 1;\n    seen.set(window, count);\n    if (count > 1) duplicateWindows++;\n  }\n\n  // If more than 40% of sampled windows are duplicates, it's degenerate\n  if (totalWindows > 5 && duplicateWindows / totalWindows > 0.4) {\n    return true;\n  }\n\n  // Strategy 2: Check for extremely long lines (a single line with 50k+ chars\n  // is almost certainly degenerate enumeration)\n  const lines = text.split('\\n');\n  for (const line of lines) {\n    if (line.length > 50_000) return true;\n  }\n\n  return false;\n}\n\n/**\n * Check if observations contain a Current Task section.\n * Supports both XML format and legacy markdown format.\n */\nexport function hasCurrentTaskSection(observations: string): boolean {\n  // Check for XML format first\n  if (/<current-task>/i.test(observations)) {\n    return true;\n  }\n\n  // Legacy markdown patterns\n  const currentTaskPatterns = [\n    /\\*\\*Current Task:?\\*\\*/i,\n    /^Current Task:/im,\n    /\\*\\*Current Task\\*\\*:/i,\n    /## Current Task/i,\n  ];\n\n  return currentTaskPatterns.some(pattern => pattern.test(observations));\n}\n\n/**\n * Extract the Current Task content from observations.\n */\nexport function extractCurrentTask(observations: string): string | null {\n  const openTag = '<current-task>';\n  const closeTag = '</current-task>';\n  const startIdx = observations.toLowerCase().indexOf(openTag);\n  if (startIdx === -1) return null;\n  const contentStart = startIdx + openTag.length;\n  const endIdx = observations.toLowerCase().indexOf(closeTag, contentStart);\n  if (endIdx === -1) return null;\n  const content = observations.slice(contentStart, endIdx).trim();\n  return content || null;\n}\n\n/**\n * Optimize observations for token efficiency before presenting to the Actor.\n *\n * This removes:\n * - Non-critical emojis (🟡 and 🟢, keeping only 🔴)\n * - Semantic tags [label, label]\n * - Arrow indicators (->)\n * - Extra whitespace\n *\n * The full format is preserved in storage for analysis.\n */\nexport function optimizeObservationsForContext(observations: string): string {\n  let optimized = stripEphemeralAnchorIds(observations);\n\n  // Remove 🟡 and 🟢 emojis (keep 🔴 for critical items)\n  optimized = optimized.replace(/🟡\\s*/g, '');\n  optimized = optimized.replace(/🟢\\s*/g, '');\n\n  // Remove semantic tags like [label, label] but keep collapsed markers like [72 items collapsed - ID: b1fa]\n  optimized = optimized.replace(/\\[(?![\\d\\s]*items collapsed)[^\\]]+\\]/g, '');\n\n  // Remove arrow indicators\n  optimized = optimized.replace(/\\s*->\\s*/g, ' ');\n\n  // Clean up multiple spaces\n  optimized = optimized.replace(/  +/g, ' ');\n\n  // Clean up multiple newlines\n  optimized = optimized.replace(/\\n{3,}/g, '\\n\\n');\n\n  return optimized.trim();\n}\n","import type { Agent, AgentMemoryOption } from '@mastra/core/agent';\nimport { coreFeatures } from '@mastra/core/features';\nimport type { ObservabilityContext } from '@mastra/core/observability';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport { z } from 'zod';\n\nimport type { Extractor, ExtractorSource } from './extractor';\nimport { buildExtractorPriorLines } from './extractor';\n\nexport interface StructuredExtractionResult {\n  values: Record<string, unknown>;\n  failures: Array<{ slug: string; error: string }>;\n}\n\nfunction isAbortError(error: unknown, abortSignal?: AbortSignal): boolean {\n  return (\n    abortSignal?.aborted === true ||\n    (error instanceof DOMException && error.name === 'AbortError') ||\n    (error instanceof Error && error.name === 'AbortError')\n  );\n}\n\nexport async function extractStructuredValues(opts: {\n  agent: Agent<any, any, any, any>;\n  source: ExtractorSource;\n  extractors?: readonly Extractor<any>[];\n  memory?: AgentMemoryOption;\n  priorExtractedValues?: Record<string, unknown>;\n  requestContext?: RequestContext;\n  observabilityContext?: ObservabilityContext;\n  abortSignal?: AbortSignal;\n}): Promise<StructuredExtractionResult> {\n  const structuredExtractors = (opts.extractors ?? []).filter(extractor => extractor.mode === 'structured');\n  if (structuredExtractors.length === 0) {\n    return { values: {}, failures: [] };\n  }\n\n  const schema = z.object(\n    Object.fromEntries(structuredExtractors.map(extractor => [extractor.slug, extractor.schema.optional()])) as Record<\n      string,\n      z.ZodTypeAny\n    >,\n  );\n  const priorLines = buildExtractorPriorLines(structuredExtractors, opts.priorExtractedValues);\n  const extractorInstructions = structuredExtractors\n    .map(extractor => `- ${extractor.slug}: ${extractor.instructions}`)\n    .join('\\n');\n  const subject = opts.source === 'reflector' ? 'reflection' : 'observations';\n  const prompt = `Extract structured data from the ${subject} you made.\n\nReturn only the configured structured output object. Do not write observations, XML, markdown, or explanatory text.\nOmit any property that is not supported by the ${subject} you made and the conversation context.\nIf a prior value is still applicable and carry-forward is enabled, return that prior value.\n\n## Extractors\n\n${extractorInstructions}${priorLines.length > 0 ? `\\n\\n## Prior Extracted Values\\n\\n${priorLines.join('\\n\\n')}` : ''}`;\n\n  const values: Record<string, unknown> = {};\n  const failures: Array<{ slug: string; error: string }> = [];\n\n  const generateWithStructuredOutput = async (jsonPromptInjection?: boolean | 'system' | 'inline') => {\n    const output = await opts.agent.generate(prompt, {\n      structuredOutput: { schema, ...(jsonPromptInjection ? { jsonPromptInjection } : {}) },\n      ...(opts.memory ? { memory: opts.memory } : {}),\n      ...(opts.abortSignal ? { abortSignal: opts.abortSignal } : {}),\n      ...(opts.requestContext ? { requestContext: opts.requestContext } : {}),\n      ...opts.observabilityContext,\n    });\n\n    if (output.object === undefined) {\n      throw new Error('structuredOutput object is undefined');\n    }\n\n    return output.object;\n  };\n\n  let object: Record<string, unknown>;\n  try {\n    object = await generateWithStructuredOutput();\n  } catch (error) {\n    if (isAbortError(error, opts.abortSignal)) {\n      throw error;\n    }\n\n    try {\n      const fallbackJsonPromptInjection = coreFeatures.has('json-prompt-injection:inline') ? 'inline' : true;\n      object = await generateWithStructuredOutput(fallbackJsonPromptInjection);\n    } catch (fallbackError) {\n      if (isAbortError(fallbackError, opts.abortSignal)) {\n        throw fallbackError;\n      }\n\n      const message = fallbackError instanceof Error ? fallbackError.message : String(fallbackError);\n      return {\n        values,\n        failures: structuredExtractors.map(extractor => ({ slug: extractor.slug, error: message })),\n      };\n    }\n  }\n\n  for (const extractor of structuredExtractors) {\n    const value = (object as Record<string, unknown>)[extractor.slug];\n    if (value === undefined || value === null || value === '') {\n      continue;\n    }\n    const parsed = extractor.schema.safeParse(value);\n    if (parsed.success) {\n      values[extractor.slug] = parsed.data;\n    } else {\n      failures.push({ slug: extractor.slug, error: parsed.error.message });\n    }\n  }\n\n  return { values, failures };\n}\n","import { MASTRA_THREAD_ID_KEY, RequestContext } from '@mastra/core/request-context';\n\n/**\n * OM observer/reflector agents are implementation-detail agents invoked from\n * inside a parent agent run. They should keep request-scoped values such as\n * auth, versions, routing hints, and resource id, but they must not present as\n * another run on the parent thread or core's cross-agent thread wait can block\n * on the parent run that is waiting for OM to complete.\n */\nexport function withOmInternalThreadId(\n  requestContext: RequestContext | undefined,\n  omAgentId: string,\n): RequestContext | undefined {\n  if (!requestContext) return undefined;\n\n  const parentThreadId = requestContext.get(MASTRA_THREAD_ID_KEY);\n  if (typeof parentThreadId !== 'string' || !parentThreadId) return requestContext;\n\n  const internalRequestContext = new RequestContext(requestContext.entries());\n  internalRequestContext.set(MASTRA_THREAD_ID_KEY, `${parentThreadId}-${omAgentId}`);\n  return internalRequestContext;\n}\n","import { omDebug } from './debug';\n\n/**\n * Retry knobs for the internal OM transport-error retry wrapper.\n * Exported as a mutable object so tests can shrink the backoff schedule\n * without changing public API.\n *\n * With the defaults the per-retry pre-jitter backoff schedule is:\n *   1s, 2s, 4s, 8s, 16s, 32s, 64s, 120s (cap)\n * giving 8 retries / 9 total attempts and ~247s (~4 minutes) of waiting\n * before the final attempt fails. Designed to ride out short provider /\n * network blips without holding the actor turn for much longer than that.\n *\n * @internal\n */\nexport const RETRY_CONFIG = {\n  /** Maximum number of retry *attempts* (total tries = maxRetries + 1). */\n  maxRetries: 8,\n  /** Initial backoff delay in milliseconds. */\n  initialDelayMs: 1_000,\n  /** Multiplier applied to the delay after each failed attempt. */\n  backoffFactor: 2,\n  /** Cap on per-attempt delay (ms). */\n  maxDelayMs: 120_000,\n  /** Random jitter as a fraction of the computed delay (e.g. 0.2 = ±20%). */\n  jitter: 0.2,\n};\n\nconst TRANSIENT_MESSAGE_SUBSTRINGS = [\n  'terminated',\n  'fetch failed',\n  'econnreset',\n  'econnrefused',\n  'enotfound',\n  'eai_again',\n  'socket hang up',\n  'network error',\n  'request timed out',\n  'request timeout',\n  'connection reset',\n  'connection closed',\n];\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null;\n}\n\nfunction isAbortError(error: unknown): boolean {\n  if (!isRecord(error)) return false;\n  if (error.name === 'AbortError') return true;\n  // DOMException-style abort\n  if (typeof error.code === 'string' && error.code === 'ABORT_ERR') return true;\n  return false;\n}\n\nfunction hasTransientMessage(value: unknown): boolean {\n  if (!isRecord(value)) return false;\n  const message = typeof value.message === 'string' ? value.message.toLowerCase() : '';\n  if (message && TRANSIENT_MESSAGE_SUBSTRINGS.some(sub => message.includes(sub))) return true;\n  if (typeof value.code === 'string' && value.code.toUpperCase().startsWith('UND_ERR_')) return true;\n  return false;\n}\n\nfunction hasRetryableHttpStatus(value: unknown): boolean {\n  if (!isRecord(value)) return false;\n  const status = typeof value.statusCode === 'number' ? value.statusCode : undefined;\n  if (status === undefined) return false;\n  if (status === 408 || status === 425 || status === 429) return true;\n  if (status >= 500 && status <= 599) return true;\n  return false;\n}\n\nfunction hasIsRetryableFlag(value: unknown): boolean {\n  if (!isRecord(value)) return false;\n  return value.isRetryable === true;\n}\n\n/**\n * Returns true when the given error looks like a transient transport-class\n * failure that's worth retrying — undici `terminated`, `fetch failed`,\n * `UND_ERR_*` codes, AI SDK `APICallError` with `isRetryable: true`, and\n * common HTTP 408/425/429/5xx statuses. Walks the `error.cause` chain so\n * wrapper errors don't hide the real failure.\n *\n * Never retries on user-initiated aborts.\n *\n * @internal\n */\nexport function isTransientLLMError(error: unknown): boolean {\n  if (isAbortError(error)) return false;\n\n  const visited = new WeakSet<object>();\n\n  function visit(candidate: unknown): boolean {\n    if (isRecord(candidate)) {\n      if (visited.has(candidate)) return false;\n      visited.add(candidate);\n    }\n\n    if (hasTransientMessage(candidate)) return true;\n    if (hasRetryableHttpStatus(candidate)) return true;\n    if (hasIsRetryableFlag(candidate)) return true;\n\n    if (isRecord(candidate)) {\n      if (visit(candidate.cause)) return true;\n      // Some libraries wrap the original error under `.error` instead of `.cause`.\n      if (visit(candidate.error)) return true;\n    }\n\n    return false;\n  }\n\n  return visit(error);\n}\n\n/**\n * Compute the backoff delay (ms) for the Nth retry (0-indexed).\n *\n * Exponential growth (`initialDelayMs * backoffFactor^attempt`) capped at\n * `maxDelayMs`, then nudged by ±`jitter` (fractional). Exported for unit\n * tests that lock the schedule against drift.\n *\n * @internal\n */\nexport function computeDelay(attempt: number): number {\n  const base = RETRY_CONFIG.initialDelayMs * Math.pow(RETRY_CONFIG.backoffFactor, attempt);\n  const capped = Math.min(base, RETRY_CONFIG.maxDelayMs);\n  if (RETRY_CONFIG.jitter <= 0) return capped;\n  const jitterRange = capped * RETRY_CONFIG.jitter;\n  // Symmetric jitter in [-jitterRange, +jitterRange].\n  const offset = (Math.random() * 2 - 1) * jitterRange;\n  return Math.max(0, Math.round(capped + offset));\n}\n\nfunction sleep(ms: number, abortSignal?: AbortSignal): Promise<void> {\n  if (ms <= 0) return Promise.resolve();\n  return new Promise<void>((resolve, reject) => {\n    if (abortSignal?.aborted) {\n      reject(new Error('The operation was aborted.'));\n      return;\n    }\n    const timer = setTimeout(() => {\n      abortSignal?.removeEventListener('abort', onAbort);\n      resolve();\n    }, ms);\n    const onAbort = () => {\n      clearTimeout(timer);\n      abortSignal?.removeEventListener('abort', onAbort);\n      reject(new Error('The operation was aborted.'));\n    };\n    abortSignal?.addEventListener('abort', onAbort, { once: true });\n  });\n}\n\nexport interface WithRetryOptions {\n  /** Short label used in debug logs (e.g. 'observer', 'reflector'). */\n  label: string;\n  /** Optional abort signal — cancels both in-flight attempts and backoff waits. */\n  abortSignal?: AbortSignal;\n}\n\n/**\n * Run `fn` with retries on transient transport-class errors.\n *\n * Non-transient errors (auth, validation, schema, etc.) are rethrown\n * immediately. User-initiated aborts are rethrown without delay.\n *\n * @internal\n */\nexport async function withRetry<T>(fn: () => Promise<T>, opts: WithRetryOptions): Promise<T> {\n  const { label, abortSignal } = opts;\n  let attempt = 0;\n  // total tries = maxRetries + 1 (the initial attempt isn't a \"retry\")\n  while (true) {\n    if (abortSignal?.aborted) {\n      throw new Error('The operation was aborted.');\n    }\n    try {\n      return await fn();\n    } catch (error) {\n      if (isAbortError(error) || abortSignal?.aborted) throw error;\n      if (attempt >= RETRY_CONFIG.maxRetries || !isTransientLLMError(error)) {\n        if (attempt > 0) {\n          omDebug(\n            `[OM:retry:${label}] giving up after ${attempt} retry/retries: ${\n              error instanceof Error ? error.message : String(error)\n            }`,\n          );\n        }\n        throw error;\n      }\n      const delay = computeDelay(attempt);\n      attempt++;\n      omDebug(\n        `[OM:retry:${label}] transient error on attempt ${attempt}, retrying in ${delay}ms: ${\n          error instanceof Error ? error.message : String(error)\n        }`,\n      );\n      await sleep(delay, abortSignal);\n    }\n  }\n}\n","'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// ASCII codes used in the hot parsing paths.\nconst LF = 10\nconst CR = 13\nconst SPACE = 32\n\n// oxlint-disable-next-line 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  // Trailing bytes from prior `feed()` calls that did not yet form a complete line.\n  // Stored as an array of fragments and only joined when a line terminator arrives.\n  // Concatenating per-feed (`prefix + chunk`) is O(N²) when a single SSE line spans\n  // many chunks (e.g. a large `data:` payload streamed in tiny slices, or an MCP-style\n  // server that emits one giant content block). Buffering as fragments + joining once\n  // makes the same workload linear.\n  const pendingFragments: string[] = []\n\n  let isFirstChunk = true\n  let id: string | undefined\n  let data = ''\n  let dataLines = 0\n  let eventType: string | undefined\n\n  /**\n   * Feeds a chunk of the SSE stream to the parser. Any trailing bytes that do\n   * not yet form a complete line are held back and prepended to the next chunk,\n   * so callers can pass arbitrary slices of the stream without worrying about\n   * line boundaries.\n   *\n   * Per the SSE spec, a UTF-8 BOM (0xEF 0xBB 0xBF) at the start of the very\n   * first chunk is stripped before parsing.\n   *\n   * @see https://html.spec.whatwg.org/multipage/server-sent-events.html#parsing-an-event-stream\n   */\n  function feed(chunk: string) {\n    if (isFirstChunk) {\n      isFirstChunk = false\n      // Match and strip UTF-8 BOM from the start of the stream, if present.\n      // (Per the spec, this is only valid at the very start of the stream)\n      if (\n        chunk.charCodeAt(0) === 0xef &&\n        chunk.charCodeAt(1) === 0xbb &&\n        chunk.charCodeAt(2) === 0xbf\n      ) {\n        chunk = chunk.slice(3)\n      }\n    }\n\n    // Hot path: no buffered prefix from a prior partial line. Hand the chunk\n    // straight to `processLines`, exactly like the original implementation.\n    // Zero new work in the common case (every chunk ends with `\\n\\n`).\n    if (pendingFragments.length === 0) {\n      const trailing = processLines(chunk)\n      if (trailing !== '') pendingFragments.push(trailing)\n      return\n    }\n\n    // We have a buffered prefix. If this chunk also has no terminator, append\n    // to the buffer without concatenating — that's the O(N²) trap we're\n    // avoiding (large single `data:` payload split across many tiny chunks).\n    if (chunk.indexOf('\\n') === -1 && chunk.indexOf('\\r') === -1) {\n      pendingFragments.push(chunk)\n      return\n    }\n\n    // Terminator arrived. Join the accumulated fragments + this chunk once,\n    // process, and buffer any new trailing partial line.\n    pendingFragments.push(chunk)\n    const input = pendingFragments.join('')\n    pendingFragments.length = 0\n    const trailing = processLines(input)\n    if (trailing !== '') pendingFragments.push(trailing)\n  }\n\n  /**\n   * Splits `chunk` into SSE lines and dispatches each to the appropriate handler.\n   * Returns any trailing bytes that did not terminate with a line break, so the\n   * caller can prepend them to the next chunk.\n   *\n   * The SSE spec permits three line terminators: `\\n`, `\\r`, and `\\r\\n`. Real-world\n   * streams almost always use plain `\\n`, so we take a fast path when no `\\r` is\n   * present in the chunk. The slow path is spec-correct but does more work per line.\n   */\n  function processLines(chunk: string): string {\n    let searchIndex = 0\n\n    // Fast path: LF-only chunk (the common case for typical SSE servers).\n    // We can scan forward with a single `indexOf('\\n')` per line and inline\n    // the hot-path branches for `data:` and `event:` without the CR bookkeeping\n    // the slow path needs.\n    if (chunk.indexOf('\\r') === -1) {\n      let lfIndex = chunk.indexOf('\\n', searchIndex)\n      while (lfIndex !== -1) {\n        // Blank line: end-of-event marker. Dispatch the accumulated event (if any)\n        // and reset the buffered fields. This is hoisted out of `parseLine` because\n        // it's the single most common line shape after `data:` lines.\n        if (searchIndex === lfIndex) {\n          if (dataLines > 0) {\n            onEvent({id, event: eventType, data})\n          }\n          id = undefined\n          data = ''\n          dataLines = 0\n          eventType = undefined\n          searchIndex = lfIndex + 1\n          lfIndex = chunk.indexOf('\\n', searchIndex)\n          continue\n        }\n        const firstCharCode = chunk.charCodeAt(searchIndex)\n        if (isDataPrefix(chunk, searchIndex, firstCharCode)) {\n          // `data:` line — append the value to the event's data buffer.\n          // 'data:'.length === 5, 'data: '.length === 6\n          const valueStart =\n            chunk.charCodeAt(searchIndex + 5) === SPACE ? searchIndex + 6 : searchIndex + 5\n          const value = chunk.slice(valueStart, lfIndex)\n          // Fast path within a fast path: if this is the first data line AND the\n          // next char is another LF (i.e. `data:foo\\n\\n`), dispatch immediately\n          // without ever writing to the `data` buffer. This is the shape of a\n          // typical single-line SSE event (ChatGPT-style streams, etc.) and is\n          // hot enough to be worth the duplication.\n          if (dataLines === 0 && chunk.charCodeAt(lfIndex + 1) === LF) {\n            onEvent({id, event: eventType, data: value})\n            id = undefined\n            data = ''\n            eventType = undefined\n            searchIndex = lfIndex + 2\n            lfIndex = chunk.indexOf('\\n', searchIndex)\n            continue\n          }\n          // Multi-line data: concatenate with newline separator per spec.\n          data = dataLines === 0 ? value : `${data}\\n${value}`\n          dataLines++\n        } else if (isEventPrefix(chunk, searchIndex, firstCharCode)) {\n          // `event:` line — set the event type for the next dispatch. Per spec,\n          // an empty value resets `event type` to its default (undefined here).\n          // 'event:'.length === 6, 'event: '.length === 7\n          eventType =\n            chunk.slice(\n              chunk.charCodeAt(searchIndex + 6) === SPACE ? searchIndex + 7 : searchIndex + 6,\n              lfIndex,\n            ) || undefined\n        } else {\n          // Everything else: `id:`, `retry:`, comment lines (`:` prefix), unknown\n          // fields, or malformed lines. These are rarer and go through the full\n          // per-line parser, which handles the SSE field grammar in detail.\n          parseLine(chunk, searchIndex, lfIndex)\n        }\n        searchIndex = lfIndex + 1\n        lfIndex = chunk.indexOf('\\n', searchIndex)\n      }\n      return chunk.slice(searchIndex)\n    }\n\n    // Slow path: the chunk contains at least one `\\r`, so lines may be terminated\n    // by `\\r`, `\\n`, or `\\r\\n`. We locate the next terminator by looking at both\n    // the nearest `\\r` and `\\n` and picking whichever comes first.\n    while (searchIndex < chunk.length) {\n      const crIndex = chunk.indexOf('\\r', searchIndex)\n      const lfIndex = chunk.indexOf('\\n', searchIndex)\n\n      let lineEnd = -1\n      if (crIndex !== -1 && lfIndex !== -1) {\n        lineEnd = crIndex < lfIndex ? crIndex : lfIndex\n      } else if (crIndex !== -1) {\n        // A trailing `\\r` at the very end of the chunk is ambiguous: it could be\n        // a bare-CR terminator, or the first half of a `\\r\\n` whose `\\n` arrives\n        // in the next chunk. Defer until we see more input.\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      if (lineEnd === -1) {\n        break\n      }\n\n      parseLine(chunk, searchIndex, lineEnd)\n      searchIndex = lineEnd + 1\n      // If we just consumed a `\\r` and the next char is `\\n`, skip it so the\n      // pair is treated as a single terminator rather than an empty line.\n      if (chunk.charCodeAt(searchIndex - 1) === CR && chunk.charCodeAt(searchIndex) === LF) {\n        searchIndex++\n      }\n    }\n\n    return chunk.slice(searchIndex)\n  }\n\n  function parseLine(chunk: string, start: number, end: number) {\n    if (start === end) {\n      dispatchEvent()\n      return\n    }\n\n    const firstCharCode = chunk.charCodeAt(start)\n\n    if (isDataPrefix(chunk, start, firstCharCode)) {\n      // 'data:'.length === 5, 'data: '.length === 6\n      const valueStart = chunk.charCodeAt(start + 5) === SPACE ? start + 6 : start + 5\n      const value = chunk.slice(valueStart, end)\n      data = dataLines === 0 ? value : `${data}\\n${value}`\n      dataLines++\n      return\n    }\n\n    if (isEventPrefix(chunk, start, firstCharCode)) {\n      // 'event:'.length === 6, 'event: '.length === 7\n      eventType =\n        chunk.slice(chunk.charCodeAt(start + 6) === SPACE ? start + 7 : start + 6, end) || undefined\n      return\n    }\n\n    // Fast path for \"id:\" — 'i' = 105, 'd' = 100, ':' = 58\n    if (\n      firstCharCode === 105 &&\n      chunk.charCodeAt(start + 1) === 100 &&\n      chunk.charCodeAt(start + 2) === 58\n    ) {\n      // 'id:'.length === 3, 'id: '.length === 4\n      const value = chunk.slice(chunk.charCodeAt(start + 3) === SPACE ? start + 4 : start + 3, end)\n      id = value.includes('\\0') ? undefined : value\n      return\n    }\n\n    // Comment line — ':' = 58\n    if (firstCharCode === 58) {\n      if (onComment) {\n        const line = chunk.slice(start, end)\n        // skip ':' (+1), or ': ' (+2) when a space follows\n        onComment(line.slice(chunk.charCodeAt(start + 1) === SPACE ? 2 : 1))\n      }\n      return\n    }\n\n    const line = chunk.slice(start, end)\n    const fieldSeparatorIndex = line.indexOf(':')\n    if (fieldSeparatorIndex === -1) {\n      processField(line, '', line)\n      return\n    }\n\n    const field = line.slice(0, fieldSeparatorIndex)\n    // skip ':' (+1), or ': ' (+2) when a space follows\n    const offset = line.charCodeAt(fieldSeparatorIndex + 1) === SPACE ? 2 : 1\n    const value = line.slice(fieldSeparatorIndex + offset)\n    processField(field, value, 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 || undefined\n        break\n      case 'data':\n        data = dataLines === 0 ? value : `${data}\\n${value}`\n        dataLines++\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    if (dataLines > 0) {\n      onEvent({\n        id,\n        event: eventType,\n        data,\n      })\n    }\n\n    id = undefined\n    data = ''\n    dataLines = 0\n    eventType = undefined\n  }\n\n  function reset(options: {consume?: boolean} = {}) {\n    if (options.consume && pendingFragments.length > 0) {\n      const incompleteLine = pendingFragments.join('')\n      parseLine(incompleteLine, 0, incompleteLine.length)\n    }\n\n    isFirstChunk = true\n    id = undefined\n    data = ''\n    dataLines = 0\n    eventType = undefined\n    pendingFragments.length = 0\n  }\n\n  return {feed, reset}\n}\n\n/**\n * Checks if `chunk` starts with the literal `data:` at index `i`.\n *\n * Equivalent to `chunk.startsWith('data:', i)`, but benchmarks show this\n * hand-unrolled char-code comparison is ~20% faster on common event types.\n * The caller passes `firstCharCode` (the code at `i`) so it can be reused\n * across prefix checks.\n *\n * ASCII: 'd' = 100, 'a' = 97, 't' = 116, 'a' = 97, ':' = 58\n */\nfunction isDataPrefix(chunk: string, i: number, firstCharCode: number): boolean {\n  return (\n    firstCharCode === 100 &&\n    chunk.charCodeAt(i + 1) === 97 &&\n    chunk.charCodeAt(i + 2) === 116 &&\n    chunk.charCodeAt(i + 3) === 97 &&\n    chunk.charCodeAt(i + 4) === 58\n  )\n}\n\n/**\n * Checks if `chunk` starts with the literal `event:` at index `i`.\n *\n * See {@link isDataPrefix} for why this is hand-unrolled rather than using\n * `String.prototype.startsWith`.\n *\n * ASCII: 'e' = 101, 'v' = 118, 'e' = 101, 'n' = 110, 't' = 116, ':' = 58\n */\nfunction isEventPrefix(chunk: string, i: number, firstCharCode: number): boolean {\n  return (\n    firstCharCode === 101 &&\n    chunk.charCodeAt(i + 1) === 118 &&\n    chunk.charCodeAt(i + 2) === 101 &&\n    chunk.charCodeAt(i + 3) === 110 &&\n    chunk.charCodeAt(i + 4) === 116 &&\n    chunk.charCodeAt(i + 5) === 58\n  )\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 type { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport type { 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 type { 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 { type 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  type JSONValue,\n  JSONParseError,\n  TypeValidationError,\n} from '@ai-sdk/provider';\nimport { secureJsonParse } from './secure-json-parse';\nimport { safeValidateTypes, validateTypes } from './validate-types';\nimport { type 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  type EventSourceMessage,\n  EventSourceParserStream,\n} from 'eventsource-parser/stream';\nimport { type ParseResult, safeParseJSON } from './parse-json';\nimport type { 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 type { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport type { 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 type {\n  JSONValue,\n  LanguageModelV2ToolResultPart,\n} from '@ai-sdk/provider';\nimport type { FlexibleSchema } from '../schema';\nimport type { ModelMessage } from './model-message';\nimport type { 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 { type Tool, type ToolExecuteFunction, tool } from './types/tool';\nimport type { 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 type { ZodType } from 'zod/v4';\nimport { extractResponseHeaders } from './extract-response-headers';\nimport { type ParseResult, parseJSON, safeParseJSON } from './parse-json';\nimport { parseJsonEventStream } from './parse-json-event-stream';\nimport type { 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 type { JSONSchema7 } from '@ai-sdk/provider';\nimport type * as z3 from 'zod/v3';\nimport type * as z4 from 'zod/v4';\nimport {\n  type Validator,\n  validatorSymbol,\n  type ValidationResult,\n} from './validator';\n\n/**\n * Used to mark schemas so we can support both Zod and custom schemas.\n */\nexport const 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","import type { 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","import type { ZodSchema, ZodTypeDef } from 'zod/v3';\nimport type { Refs, Seen } from './refs';\nimport type { 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 { type ZodArrayDef, ZodFirstPartyTypeKind } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { 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 type { ZodBrandedDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport function parseBrandedDef(_def: ZodBrandedDef<any>, refs: Refs) {\n  return parseDef(_def.type._def, refs);\n}\n","import type { ZodCatchDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport const parseCatchDef = (def: ZodCatchDef<any>, refs: Refs) => {\n  return parseDef(def.innerType._def, refs);\n};\n","import type { ZodDateDef } from 'zod/v3';\nimport type { Refs } from '../refs';\nimport type { 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 type { ZodDefaultDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodEffectsDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { 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 type { ZodIntersectionDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { 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 type { 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 type { ZodStringDef } from 'zod/v3';\nimport type { 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  type ZodMapDef,\n  type ZodRecordDef,\n  type ZodTypeAny,\n  ZodFirstPartyTypeKind,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseBrandedDef } from './branded';\nimport type { JsonSchema7EnumType } from './enum';\nimport { type 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 type { ZodMapDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseAnyDef } from './any';\nimport { type 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 type { 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 { type 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 type {\n  ZodDiscriminatedUnionDef,\n  ZodLiteralDef,\n  ZodTypeAny,\n  ZodUnionDef,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodNullableDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { 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 type { 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 type { ZodObjectDef, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodOptionalDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodPipelineDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { 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 type { ZodPromiseDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodSetDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodTupleDef, ZodTupleItems, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 { type 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 { type JsonSchema7AnyType, parseAnyDef } from './any';\n\nexport type JsonSchema7UnknownType = JsonSchema7AnyType;\n\nexport function parseUnknownDef(): JsonSchema7UnknownType {\n  return parseAnyDef();\n}\n","import type { ZodReadonlyDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { 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 type { Refs } from './refs';\nimport { parseReadonlyDef } from './parsers/readonly';\nimport type { 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 type { ZodTypeDef } from 'zod/v3';\nimport type { Refs, Seen } from './refs';\nimport { ignoreOverride } from './options';\nimport type { 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 type { ZodTypeDef } from 'zod/v3';\nimport { type Options, getDefaultOptions } from './options';\nimport type { 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 type { ZodSchema } from 'zod/v3';\nimport type { Options } from './options';\nimport { parseDef } from './parse-def';\nimport type { 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","import { zodToJsonSchema } from './zod-to-json-schema';\n\nexport * 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';\nexport default zodToJsonSchema;\n","import type { JSONSchema7 } from '@ai-sdk/provider';\nimport type * as z3 from 'zod/v3';\nimport * as z4 from 'zod/v4';\nimport { addAdditionalPropertiesToJsonSchema } from './add-additional-properties-to-json-schema';\nimport { type Schema, jsonSchema } 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 {\n  type FlexibleSchema,\n  type Schema,\n  jsonSchema,\n  schemaSymbol,\n} from './schema';\nimport { zodSchema } from './zod-schema';\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 type { 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  type 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 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 { 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 { createGatewayErrorFromResponse } from './create-gateway-error';\nimport { extractApiCallResponse } from './extract-api-call-response';\nimport { GatewayError } from './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 { 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  withUserAgentSuffix,\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 { 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 type { FinishReason } from '../types/language-model';\nimport type { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport type { 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 type {\n  EmbeddingModelV2,\n  ImageModelV2,\n  LanguageModelV2,\n  ProviderV2,\n} from '@ai-sdk/provider';\nimport { UnsupportedModelVersionError } from '../error';\nimport type { EmbeddingModel } from '../types/embedding-model';\nimport type { LanguageModel } from '../types/language-model';\nimport type { 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 { type LanguageModelV2DataContent, AISDKError } from '@ai-sdk/provider';\nimport {\n  type DataContent,\n  convertBase64ToUint8Array,\n  convertUint8ArrayToBase64,\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 type { 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 type { 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 type { LanguageModelV2ToolResultOutput } from '@ai-sdk/provider';\nimport type {\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 type {\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 type { 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 type { Attributes } from '@opentelemetry/api';\nimport type { CallSettings } from '../prompt/call-settings';\nimport type { 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 type { 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 { type 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  type Attributes,\n  type Span,\n  type Tracer,\n  SpanStatusCode,\n} 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  type 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 type {\n  LanguageModelV2,\n  LanguageModelV2Content,\n  LanguageModelV2ToolCall,\n} from '@ai-sdk/provider';\nimport {\n  type IdGenerator,\n  type ProviderOptions,\n  createIdGenerator,\n  executeTool,\n  getErrorMessage,\n  withUserAgentSuffix,\n} from '@ai-sdk/provider-utils';\nimport type { 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 type { ModelMessage } from '../prompt';\nimport type { 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 type { 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 type { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport type { LanguageModel, ToolChoice } from '../types';\nimport { type LanguageModelUsage, addLanguageModelUsage } from '../types/usage';\nimport { asArray } from '../util/as-array';\nimport type { DownloadFunction } from '../util/download/download-function';\nimport { prepareRetries } from '../util/prepare-retries';\nimport type { ContentPart } from './content-part';\nimport { extractTextContent } from './extract-text-content';\nimport type { GenerateTextResult } from './generate-text-result';\nimport { DefaultGeneratedFile } from './generated-file';\nimport type { Output } from './output';\nimport { parseToolCall } from './parse-tool-call';\nimport type { PrepareStepFunction } from './prepare-step';\nimport type { ResponseMessage } from './response-message';\nimport { type StepResult, DefaultStepResult } from './step-result';\nimport {\n  type StopCondition,\n  isStopConditionMet,\n  stepCountIs,\n} from './stop-condition';\nimport { toResponseMessages } from './to-response-messages';\nimport type { TypedToolCall } from './tool-call';\nimport type { ToolCallRepairFunction } from './tool-call-repair-function';\nimport type { TypedToolError } from './tool-error';\nimport type { ToolOutput } from './tool-output';\nimport type { TypedToolResult } from './tool-result';\nimport type { 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  allowSystemInMessages,\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    allowSystemInMessages,\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 type { 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  type LanguageModelV2,\n  type LanguageModelV2CallWarning,\n  getErrorMessage,\n} from '@ai-sdk/provider';\nimport {\n  type IdGenerator,\n  type ProviderOptions,\n  createIdGenerator,\n  DelayedPromise,\n  isAbortError,\n} from '@ai-sdk/provider-utils';\nimport type { Span } from '@opentelemetry/api';\nimport type { 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 type { 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 type { 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 type { 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 type { LanguageModelRequestMetadata } from '../types';\nimport type {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n  ToolChoice,\n} from '../types/language-model';\nimport type { ProviderMetadata } from '../types/provider-metadata';\nimport { type LanguageModelUsage, addLanguageModelUsage } from '../types/usage';\nimport type { 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 type {\n  InferUIMessageChunk,\n  UIMessageChunk,\n} from '../ui-message-stream/ui-message-chunks';\nimport type { UIMessageStreamResponseInit } from '../ui-message-stream/ui-message-stream-response-init';\nimport type {\n  InferUIMessageData,\n  InferUIMessageMetadata,\n} from '../ui/ui-messages';\nimport { asArray } from '../util/as-array';\nimport {\n  type AsyncIterableStream,\n  createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { consumeStream } from '../util/consume-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport type { DownloadFunction } from '../util/download/download-function';\nimport { now as originalNow } from '../util/now';\nimport { prepareRetries } from '../util/prepare-retries';\nimport type { ContentPart } from './content-part';\nimport type { Output } from './output';\nimport type { PrepareStepFunction } from './prepare-step';\nimport type { ResponseMessage } from './response-message';\nimport {\n  type SingleRequestTextStreamPart,\n  runToolsTransformation,\n} from './run-tools-transformation';\nimport { type StepResult, DefaultStepResult } from './step-result';\nimport {\n  type StopCondition,\n  isStopConditionMet,\n  stepCountIs,\n} from './stop-condition';\nimport type {\n  ConsumeStreamOptions,\n  StreamTextResult,\n  TextStreamPart,\n  UIMessageStreamOptions,\n} from './stream-text-result';\nimport { toResponseMessages } from './to-response-messages';\nimport type { TypedToolCall } from './tool-call';\nimport type { ToolCallRepairFunction } from './tool-call-repair-function';\nimport type { ToolOutput } from './tool-output';\nimport type { 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  allowSystemInMessages,\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    allowSystemInMessages,\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    allowSystemInMessages,\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    allowSystemInMessages: Prompt['allowSystemInMessages'];\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            allowSystemInMessages,\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 {\n  type ProviderOptions,\n  withUserAgentSuffix,\n} 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 type { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport type { Embedding, EmbeddingModel, ProviderMetadata } from '../types';\nimport { resolveEmbeddingModel } from '../model/resolve-model';\nimport type { 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 type { JSONValue } from '@ai-sdk/provider';\nimport {\n  type FlexibleSchema,\n  type InferSchema,\n  type ProviderOptions,\n  createIdGenerator,\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 type { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport type { 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 type { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport type {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n} from '../types/language-model';\nimport type { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport type { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport type { ProviderMetadata } from '../types/provider-metadata';\nimport type { LanguageModelUsage } from '../types/usage';\nimport type { DownloadFunction } from '../util/download/download-function';\nimport { prepareHeaders } from '../util/prepare-headers';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { VERSION } from '../version';\nimport type { GenerateObjectResult } from './generate-object-result';\nimport { getOutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport type { 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    allowSystemInMessages,\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          allowSystemInMessages,\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 type {\n  JSONValue,\n  LanguageModelV2CallWarning,\n  LanguageModelV2FinishReason,\n  LanguageModelV2StreamPart,\n  LanguageModelV2Usage,\n  SharedV2ProviderMetadata,\n} from '@ai-sdk/provider';\nimport {\n  type FlexibleSchema,\n  type ProviderOptions,\n  createIdGenerator,\n  DelayedPromise,\n  type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport type { ServerResponse } from 'http';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport type { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport type { 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 type { 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 type {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n} from '../types/language-model';\nimport type { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport type { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport type { ProviderMetadata } from '../types/provider-metadata';\nimport type { LanguageModelUsage } from '../types/usage';\nimport { type DeepPartial, isDeepEqualData, parsePartialJson } from '../util';\nimport {\n  type AsyncIterableStream,\n  createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport type { DownloadFunction } from '../util/download/download-function';\nimport { now as originalNow } from '../util/now';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { type OutputStrategy, getOutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport type { RepairTextFunction } from './repair-text';\nimport type {\n  ObjectStreamPart,\n  StreamObjectResult,\n} 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    allowSystemInMessages,\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    allowSystemInMessages,\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    allowSystemInMessages,\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    allowSystemInMessages: Prompt['allowSystemInMessages'];\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          allowSystemInMessages,\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 type { LanguageModelV2CallOptions } from '@ai-sdk/provider';\nimport {\n  type FlexibleSchema,\n  asSchema,\n  safeParseJSON,\n  safeValidateTypes,\n} from '@ai-sdk/provider-utils';\nimport { NoObjectGeneratedError } from '../error/no-object-generated-error';\nimport type { FinishReason } from '../types/language-model';\nimport type { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport type { LanguageModelUsage } from '../types/usage';\nimport type { 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 type { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport type { 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 type { 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 type { ZodSchema, ZodTypeDef } from 'zod/v3';\nimport type { Refs, Seen } from './refs';\nimport type { 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 { ZodFirstPartyTypeKind, type ZodArrayDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { 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 type { ZodBrandedDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport function parseBrandedDef(_def: ZodBrandedDef<any>, refs: Refs) {\n  return parseDef(_def.type._def, refs);\n}\n","import type { ZodCatchDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { Refs } from '../refs';\n\nexport const parseCatchDef = (def: ZodCatchDef<any>, refs: Refs) => {\n  return parseDef(def.innerType._def, refs);\n};\n","import type { ZodDateDef } from 'zod/v3';\nimport type { Refs } from '../refs';\nimport type { 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 type { ZodDefaultDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodEffectsDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { 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 type { ZodIntersectionDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { 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 type { 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 type { ZodStringDef } from 'zod/v3';\nimport type { 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  type ZodMapDef,\n  type ZodRecordDef,\n  type ZodTypeAny,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseBrandedDef } from './branded';\nimport type { JsonSchema7EnumType } from './enum';\nimport { parseStringDef, type JsonSchema7StringType } 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 type { ZodMapDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport { parseAnyDef } from './any';\nimport { parseRecordDef, type JsonSchema7RecordType } 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 type { 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 { parseAnyDef, type JsonSchema7AnyType } 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 type {\n  ZodDiscriminatedUnionDef,\n  ZodLiteralDef,\n  ZodTypeAny,\n  ZodUnionDef,\n} from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodNullableDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { 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 type { 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 type { ZodObjectDef, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodOptionalDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodPipelineDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { Refs } from '../refs';\nimport type { 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 type { ZodPromiseDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodSetDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 type { ZodTupleDef, ZodTupleItems, ZodTypeAny } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { JsonSchema7Type } from '../parse-types';\nimport type { 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 { parseAnyDef, type JsonSchema7AnyType } from './any';\n\nexport type JsonSchema7UndefinedType = {\n  not: JsonSchema7AnyType;\n};\n\nexport function parseUndefinedDef(): JsonSchema7UndefinedType {\n  return {\n    not: parseAnyDef(),\n  };\n}\n","import { parseAnyDef, type JsonSchema7AnyType } from './any';\n\nexport type JsonSchema7UnknownType = JsonSchema7AnyType;\n\nexport function parseUnknownDef(): JsonSchema7UnknownType {\n  return parseAnyDef();\n}\n","import type { ZodReadonlyDef } from 'zod/v3';\nimport { parseDef } from '../parse-def';\nimport type { 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 type { Refs } from './refs';\nimport { parseReadonlyDef } from './parsers/readonly';\nimport type { 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 type { ZodTypeDef } from 'zod/v3';\nimport type { Refs, Seen } from './refs';\nimport { ignoreOverride } from './options';\nimport type { 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 type { ZodTypeDef } from 'zod/v3';\nimport { getDefaultOptions, type Options } from './options';\nimport type { 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 type { ZodSchema } from 'zod/v3';\nimport type { Options } from './options';\nimport { parseDef } from './parse-def';\nimport type { 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 { TypeValidationError, type JSONSchema7 } from '@ai-sdk/provider';\nimport type {\n  StandardSchemaV1,\n  StandardJSONSchemaV1,\n} from '@standard-schema/spec';\nimport type * 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 {\n  TypeValidationError,\n  type TypeValidationContext,\n} from '@ai-sdk/provider';\nimport { asSchema, type FlexibleSchema } 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  TypeValidationError,\n  type JSONValue,\n} from '@ai-sdk/provider';\nimport { secureJsonParse } from './secure-json-parse';\nimport { safeValidateTypes, validateTypes } from './validate-types';\nimport type { 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  EventSourceParserStream,\n  type EventSourceMessage,\n} from 'eventsource-parser/stream';\nimport { safeParseJSON, type ParseResult } from './parse-json';\nimport type { 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 type { FetchFunction } from './fetch-function';\nimport { handleFetchError } from './handle-fetch-error';\nimport { isAbortError } from './is-abort-error';\nimport type { 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 type { JSONValue, JSONObject } from '@ai-sdk/provider';\nimport type { FlexibleSchema } from '../schema';\nimport type { ToolResultOutput } from './content-part';\nimport type { ModelMessage } from './model-message';\nimport type { 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   * Optional metadata about the tool itself (e.g. its source).\n   *\n   * Unlike `providerOptions`, this metadata is not sent to the language\n   * model. Instead, it is propagated onto the resulting tool call's\n   * `toolMetadata` so consumers can read it from tool call / result parts\n   * and UI message parts. This is useful for sources of dynamic tools (e.g.\n   * an MCP server) to identify themselves.\n   */\n  metadata?: JSONObject;\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  metadata?: JSONObject;\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, type Tool, type ToolExecuteFunction } from './types/tool';\nimport type { 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 type { 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, safeParseJSON, type ParseResult } from './parse-json';\nimport { parseJsonEventStream } from './parse-json-event-stream';\nimport type { 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 type { 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  lazySchema,\n  safeValidateTypes,\n  validateTypes,\n  zodSchema,\n  type InferSchema,\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 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 { 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 { createGatewayErrorFromResponse } from './create-gateway-error';\nimport { extractApiCallResponse } from './extract-api-call-response';\nimport { GatewayError } from './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 { 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 {\n  APICallError,\n  type Experimental_VideoModelV3,\n  type Experimental_VideoModelV3CallOptions,\n  type Experimental_VideoModelV3File,\n  type Experimental_VideoModelV3VideoData,\n  type SharedV3ProviderMetadata,\n  type SharedV3Warning,\n} 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  withUserAgentSuffix,\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 { 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 type { FinishReason } from '../types/language-model';\nimport type { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport type { 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 type { 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 type { 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 type {\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 type { EmbeddingModel } from '../types/embedding-model';\nimport type { LanguageModel } from '../types/language-model';\nimport type { SpeechModel } from '../types/speech-model';\nimport type { 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 type { ImageModel } from '../types/image-model';\nimport type { RerankingModel } from '../types/reranking-model';\nimport type { 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, type LanguageModelV3DataContent } from '@ai-sdk/provider';\nimport {\n  convertBase64ToUint8Array,\n  convertUint8ArrayToBase64,\n  type 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 type { 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 type { 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 type {\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 type {\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 type { 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 type { Attributes, AttributeValue } from '@opentelemetry/api';\nimport { getTotalTimeoutMs, type CallSettings } from '../prompt/call-settings';\nimport type { 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 type { 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 { trace, type Tracer } 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  SpanStatusCode,\n  context,\n  type Attributes,\n  type Span,\n  type Tracer,\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  retryWithExponentialBackoffRespectingRetryHeaders,\n  type RetryFunction,\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  TypeValidationError,\n  type JSONValue,\n  type LanguageModelV3CallOptions,\n} from '@ai-sdk/provider';\nimport {\n  asSchema,\n  resolve,\n  safeParseJSON,\n  safeValidateTypes,\n  type FlexibleSchema,\n} from '@ai-sdk/provider-utils';\nimport { NoObjectGeneratedError } from '../error/no-object-generated-error';\nimport type { FinishReason } from '../types/language-model';\nimport type { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport type { LanguageModelUsage } from '../types/usage';\nimport type { DeepPartial } from '../util/deep-partial';\nimport { parsePartialJson } from '../util/parse-partial-json';\nimport type { 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 type { 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 type {\n  LanguageModelV3,\n  LanguageModelV3Content,\n  LanguageModelV3ToolCall,\n} from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  getErrorMessage,\n  withUserAgentSuffix,\n  type IdGenerator,\n  type ProviderOptions,\n} from '@ai-sdk/provider-utils';\nimport type { 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 type { ModelMessage } from '../prompt';\nimport {\n  getStepTimeoutMs,\n  getTotalTimeoutMs,\n  TimeoutConfiguration,\n  type CallSettings,\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 type { 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 type { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport type {\n  LanguageModel,\n  LanguageModelRequestMetadata,\n  ToolChoice,\n} from '../types';\nimport {\n  addLanguageModelUsage,\n  asLanguageModelUsage,\n  type LanguageModelUsage,\n} from '../types/usage';\nimport { asArray } from '../util/as-array';\nimport type { 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 type { ContentPart } from './content-part';\nimport { executeToolCall } from './execute-tool-call';\nimport { extractReasoningContent } from './extract-reasoning-content';\nimport { extractTextContent } from './extract-text-content';\nimport type { GenerateTextResult } from './generate-text-result';\nimport { DefaultGeneratedFile } from './generated-file';\nimport { isApprovalNeeded } from './is-approval-needed';\nimport { text, type Output } from './output';\nimport type { InferCompleteOutput } from './output-utils';\nimport { parseToolCall } from './parse-tool-call';\nimport type { PrepareStepFunction } from './prepare-step';\nimport type { ResponseMessage } from './response-message';\nimport { DefaultStepResult, type StepResult } from './step-result';\nimport {\n  isStopConditionMet,\n  stepCountIs,\n  type StopCondition,\n} from './stop-condition';\nimport { toResponseMessages } from './to-response-messages';\nimport type { ToolApprovalRequestOutput } from './tool-approval-request-output';\nimport type { TypedToolCall } from './tool-call';\nimport type { ToolCallRepairFunction } from './tool-call-repair-function';\nimport type { TypedToolError } from './tool-error';\nimport type { ToolOutput } from './tool-output';\nimport type { TypedToolResult } from './tool-result';\nimport type { 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 * @param allowSystemInMessages - Whether system messages are allowed in the `prompt` or `messages` fields. When unset, system messages are allowed with a warning.\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  allowSystemInMessages,\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    allowSystemInMessages,\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              ...(tool?.metadata != null\n                ? { toolMetadata: tool.metadata }\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              ...(tool?.metadata != null\n                ? { toolMetadata: tool.metadata }\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            ...(toolCall.toolMetadata != null\n              ? { toolMetadata: toolCall.toolMetadata }\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            ...(toolCall.toolMetadata != null\n              ? { toolMetadata: toolCall.toolMetadata }\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 type { JSONObject } from '@ai-sdk/provider';\nimport { z } from 'zod/v4';\nimport {\n  providerMetadataSchema,\n  type ProviderMetadata,\n} from '../types/provider-metadata';\nimport { jsonValueSchema } from '../types/json-value';\nimport type { FinishReason } from '../types/language-model';\nimport type {\n  InferUIMessageData,\n  InferUIMessageMetadata,\n  UIDataTypes,\n  UIMessage,\n} from '../ui/ui-messages';\nimport type { ValueOf } from '../util/value-of';\nimport { lazySchema, zodSchema } from '@ai-sdk/provider-utils';\n\nconst toolMetadataSchema: z.ZodType<JSONObject> = z.record(\n  z.string(),\n  jsonValueSchema.optional(),\n);\n\nexport const uiMessageChunkSchema = lazySchema(() =>\n  zodSchema(\n    z.union([\n      z.strictObject({\n        type: z.literal('text-start'),\n        id: z.string(),\n        providerMetadata: providerMetadataSchema.optional(),\n      }),\n      z.strictObject({\n        type: z.literal('text-delta'),\n        id: z.string(),\n        delta: z.string(),\n        providerMetadata: providerMetadataSchema.optional(),\n      }),\n      z.strictObject({\n        type: z.literal('text-end'),\n        id: z.string(),\n        providerMetadata: providerMetadataSchema.optional(),\n      }),\n      z.strictObject({\n        type: z.literal('error'),\n        errorText: z.string(),\n      }),\n      z.strictObject({\n        type: z.literal('tool-input-start'),\n        toolCallId: z.string(),\n        toolName: z.string(),\n        providerExecuted: z.boolean().optional(),\n        providerMetadata: providerMetadataSchema.optional(),\n        toolMetadata: toolMetadataSchema.optional(),\n        dynamic: z.boolean().optional(),\n        title: z.string().optional(),\n      }),\n      z.strictObject({\n        type: z.literal('tool-input-delta'),\n        toolCallId: z.string(),\n        inputTextDelta: z.string(),\n      }),\n      z.strictObject({\n        type: z.literal('tool-input-available'),\n        toolCallId: z.string(),\n        toolName: z.string(),\n        input: z.unknown(),\n        providerExecuted: z.boolean().optional(),\n        providerMetadata: providerMetadataSchema.optional(),\n        toolMetadata: toolMetadataSchema.optional(),\n        dynamic: z.boolean().optional(),\n        title: z.string().optional(),\n      }),\n      z.strictObject({\n        type: z.literal('tool-input-error'),\n        toolCallId: z.string(),\n        toolName: z.string(),\n        input: z.unknown(),\n        providerExecuted: z.boolean().optional(),\n        providerMetadata: providerMetadataSchema.optional(),\n        toolMetadata: toolMetadataSchema.optional(),\n        dynamic: z.boolean().optional(),\n        errorText: z.string(),\n        title: z.string().optional(),\n      }),\n      z.strictObject({\n        type: z.literal('tool-approval-request'),\n        approvalId: z.string(),\n        toolCallId: z.string(),\n      }),\n      z.strictObject({\n        type: z.literal('tool-output-available'),\n        toolCallId: z.string(),\n        output: z.unknown(),\n        providerExecuted: z.boolean().optional(),\n        providerMetadata: providerMetadataSchema.optional(),\n        toolMetadata: toolMetadataSchema.optional(),\n        dynamic: z.boolean().optional(),\n        preliminary: z.boolean().optional(),\n      }),\n      z.strictObject({\n        type: z.literal('tool-output-error'),\n        toolCallId: z.string(),\n        errorText: z.string(),\n        providerExecuted: z.boolean().optional(),\n        providerMetadata: providerMetadataSchema.optional(),\n        toolMetadata: toolMetadataSchema.optional(),\n        dynamic: z.boolean().optional(),\n      }),\n      z.strictObject({\n        type: z.literal('tool-output-denied'),\n        toolCallId: z.string(),\n      }),\n      z.strictObject({\n        type: z.literal('reasoning-start'),\n        id: z.string(),\n        providerMetadata: providerMetadataSchema.optional(),\n      }),\n      z.strictObject({\n        type: z.literal('reasoning-delta'),\n        id: z.string(),\n        delta: z.string(),\n        providerMetadata: providerMetadataSchema.optional(),\n      }),\n      z.strictObject({\n        type: z.literal('reasoning-end'),\n        id: z.string(),\n        providerMetadata: providerMetadataSchema.optional(),\n      }),\n      z.strictObject({\n        type: z.literal('source-url'),\n        sourceId: z.string(),\n        url: z.string(),\n        title: z.string().optional(),\n        providerMetadata: providerMetadataSchema.optional(),\n      }),\n      z.strictObject({\n        type: z.literal('source-document'),\n        sourceId: z.string(),\n        mediaType: z.string(),\n        title: z.string(),\n        filename: z.string().optional(),\n        providerMetadata: providerMetadataSchema.optional(),\n      }),\n      z.strictObject({\n        type: z.literal('file'),\n        url: z.string(),\n        mediaType: z.string(),\n        providerMetadata: providerMetadataSchema.optional(),\n      }),\n      z.strictObject({\n        type: z.custom<`data-${string}`>(\n          (value): value is `data-${string}` =>\n            typeof value === 'string' && value.startsWith('data-'),\n          { message: 'Type must start with \"data-\"' },\n        ),\n        id: z.string().optional(),\n        data: z.unknown(),\n        transient: z.boolean().optional(),\n      }),\n      z.strictObject({\n        type: z.literal('start-step'),\n      }),\n      z.strictObject({\n        type: z.literal('finish-step'),\n      }),\n      z.strictObject({\n        type: z.literal('start'),\n        messageId: z.string().optional(),\n        messageMetadata: z.unknown().optional(),\n      }),\n      z.strictObject({\n        type: z.literal('finish'),\n        finishReason: z\n          .enum([\n            'stop',\n            'length',\n            'content-filter',\n            'tool-calls',\n            'error',\n            'other',\n          ] as const satisfies readonly FinishReason[])\n          .optional(),\n        messageMetadata: z.unknown().optional(),\n      }),\n      z.strictObject({\n        type: z.literal('abort'),\n        reason: z.string().optional(),\n      }),\n      z.strictObject({\n        type: z.literal('message-metadata'),\n        messageMetadata: z.unknown(),\n      }),\n    ]),\n  ),\n);\n\nexport type DataUIMessageChunk<DATA_TYPES extends UIDataTypes> = ValueOf<{\n  [NAME in keyof DATA_TYPES & string]: {\n    type: `data-${NAME}`;\n    id?: string;\n    data: DATA_TYPES[NAME];\n    transient?: boolean;\n  };\n}>;\n\nexport type UIMessageChunk<\n  METADATA = unknown,\n  DATA_TYPES extends UIDataTypes = UIDataTypes,\n> =\n  | {\n      type: 'text-start';\n      id: string;\n      providerMetadata?: ProviderMetadata;\n    }\n  | {\n      type: 'text-delta';\n      delta: string;\n      id: string;\n      providerMetadata?: ProviderMetadata;\n    }\n  | {\n      type: 'text-end';\n      id: string;\n      providerMetadata?: ProviderMetadata;\n    }\n  | {\n      type: 'reasoning-start';\n      id: string;\n      providerMetadata?: ProviderMetadata;\n    }\n  | {\n      type: 'reasoning-delta';\n      id: string;\n      delta: string;\n      providerMetadata?: ProviderMetadata;\n    }\n  | {\n      type: 'reasoning-end';\n      id: string;\n      providerMetadata?: ProviderMetadata;\n    }\n  | {\n      type: 'error';\n      errorText: string;\n    }\n  | {\n      type: 'tool-input-available';\n      toolCallId: string;\n      toolName: string;\n      input: unknown;\n      providerExecuted?: boolean;\n      providerMetadata?: ProviderMetadata;\n      toolMetadata?: JSONObject;\n      dynamic?: boolean;\n      title?: string;\n    }\n  | {\n      type: 'tool-input-error';\n      toolCallId: string;\n      toolName: string;\n      input: unknown;\n      providerExecuted?: boolean;\n      providerMetadata?: ProviderMetadata;\n      toolMetadata?: JSONObject;\n      dynamic?: boolean;\n      errorText: string;\n      title?: string;\n    }\n  | {\n      type: 'tool-approval-request';\n      approvalId: string;\n      toolCallId: string;\n    }\n  | {\n      type: 'tool-output-available';\n      toolCallId: string;\n      output: unknown;\n      providerExecuted?: boolean;\n      providerMetadata?: ProviderMetadata;\n      toolMetadata?: JSONObject;\n      dynamic?: boolean;\n      preliminary?: boolean;\n    }\n  | {\n      type: 'tool-output-error';\n      toolCallId: string;\n      errorText: string;\n      providerExecuted?: boolean;\n      providerMetadata?: ProviderMetadata;\n      toolMetadata?: JSONObject;\n      dynamic?: boolean;\n    }\n  | {\n      type: 'tool-output-denied';\n      toolCallId: string;\n    }\n  | {\n      type: 'tool-input-start';\n      toolCallId: string;\n      toolName: string;\n      providerExecuted?: boolean;\n      providerMetadata?: ProviderMetadata;\n      toolMetadata?: JSONObject;\n      dynamic?: boolean;\n      title?: string;\n    }\n  | {\n      type: 'tool-input-delta';\n      toolCallId: string;\n      inputTextDelta: string;\n    }\n  | {\n      type: 'source-url';\n      sourceId: string;\n      url: string;\n      title?: string;\n      providerMetadata?: ProviderMetadata;\n    }\n  | {\n      type: 'source-document';\n      sourceId: string;\n      mediaType: string;\n      title: string;\n      filename?: string;\n      providerMetadata?: ProviderMetadata;\n    }\n  | {\n      type: 'file';\n      url: string;\n      mediaType: string;\n      providerMetadata?: ProviderMetadata;\n    }\n  | DataUIMessageChunk<DATA_TYPES>\n  | {\n      type: 'start-step';\n    }\n  | {\n      type: 'finish-step';\n    }\n  | {\n      type: 'start';\n      messageId?: string;\n      messageMetadata?: METADATA;\n    }\n  | {\n      type: 'finish';\n      finishReason?: FinishReason;\n      messageMetadata?: METADATA;\n    }\n  | {\n      type: 'abort';\n      reason?: string;\n    }\n  | {\n      type: 'message-metadata';\n      messageMetadata: METADATA;\n    };\n\nexport function isDataUIMessageChunk(\n  chunk: UIMessageChunk,\n): chunk is DataUIMessageChunk<UIDataTypes> {\n  return chunk.type.startsWith('data-');\n}\n\nexport type InferUIMessageChunk<T extends UIMessage> = UIMessageChunk<\n  InferUIMessageMetadata<T>,\n  InferUIMessageData<T>\n>;\n","import {\n  getErrorMessage,\n  UnsupportedFunctionalityError,\n  type LanguageModelV3,\n  type SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  DelayedPromise,\n  isAbortError,\n  type IdGenerator,\n  type ProviderOptions,\n  type ToolContent,\n} from '@ai-sdk/provider-utils';\nimport type { Span } from '@opentelemetry/api';\nimport type { 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  getChunkTimeoutMs,\n  getStepTimeoutMs,\n  getTotalTimeoutMs,\n  type CallSettings,\n  type 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 type { 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 type { 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 type { LanguageModelRequestMetadata } from '../types';\nimport type {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n  ToolChoice,\n} from '../types/language-model';\nimport type { ProviderMetadata } from '../types/provider-metadata';\nimport {\n  addLanguageModelUsage,\n  createNullLanguageModelUsage,\n  type LanguageModelUsage,\n} from '../types/usage';\nimport type { 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 type {\n  InferUIMessageChunk,\n  UIMessageChunk,\n} from '../ui-message-stream/ui-message-chunks';\nimport type { UIMessageStreamResponseInit } from '../ui-message-stream/ui-message-stream-response-init';\nimport type {\n  InferUIMessageData,\n  InferUIMessageMetadata,\n} from '../ui/ui-messages';\nimport { asArray } from '../util/as-array';\nimport {\n  createAsyncIterableStream,\n  type AsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { consumeStream } from '../util/consume-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport type { 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 type { ContentPart } from './content-part';\nimport { executeToolCall } from './execute-tool-call';\nimport { text, type Output } from './output';\nimport type {\n  InferCompleteOutput,\n  InferElementOutput,\n  InferPartialOutput,\n} from './output-utils';\nimport type { PrepareStepFunction } from './prepare-step';\nimport type { ResponseMessage } from './response-message';\nimport {\n  runToolsTransformation,\n  type SingleRequestTextStreamPart,\n} from './run-tools-transformation';\nimport { DefaultStepResult, type StepResult } from './step-result';\nimport {\n  isStopConditionMet,\n  stepCountIs,\n  type StopCondition,\n} from './stop-condition';\nimport type {\n  ConsumeStreamOptions,\n  StreamTextResult,\n  TextStreamPart,\n  UIMessageStreamOptions,\n} from './stream-text-result';\nimport { toResponseMessages } from './to-response-messages';\nimport type { TypedToolCall } from './tool-call';\nimport type { ToolCallRepairFunction } from './tool-call-repair-function';\nimport type { ToolOutput } from './tool-output';\nimport type { StaticToolOutputDenied } from './tool-output-denied';\nimport type { 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 * @param allowSystemInMessages - Whether system messages are allowed in the `prompt` or `messages` fields. When unset, system messages are allowed with a warning.\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  allowSystemInMessages,\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    allowSystemInMessages,\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    allowSystemInMessages,\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    allowSystemInMessages: Prompt['allowSystemInMessages'];\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          allowSystemInMessages,\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                ...(part.toolMetadata != null\n                  ? { toolMetadata: part.toolMetadata }\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                  ...(part.toolMetadata != null\n                    ? { toolMetadata: part.toolMetadata }\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                  ...(part.toolMetadata != null\n                    ? { toolMetadata: part.toolMetadata }\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.toolMetadata != null\n                  ? { toolMetadata: part.toolMetadata }\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                ...(part.toolMetadata != null\n                  ? { toolMetadata: part.toolMetadata }\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","import {\n  TypeValidationContext,\n  TypeValidationError,\n  type JSONObject,\n} from '@ai-sdk/provider';\nimport {\n  lazySchema,\n  StandardSchemaV1,\n  validateTypes,\n  zodSchema,\n  type FlexibleSchema,\n  type Tool,\n} from '@ai-sdk/provider-utils';\nimport { z } from 'zod/v4';\nimport { InvalidArgumentError } from '../error';\nimport { jsonValueSchema } from '../types/json-value';\nimport { providerMetadataSchema } from '../types/provider-metadata';\nimport type {\n  DataUIPart,\n  InferUIMessageData,\n  InferUIMessageTools,\n  ToolUIPart,\n  UIMessage,\n} from './ui-messages';\n\nconst toolMetadataSchema: z.ZodType<JSONObject> = z.record(\n  z.string(),\n  jsonValueSchema.optional(),\n);\n\nconst uiMessagesSchema = lazySchema(() =>\n  zodSchema(\n    z\n      .array(\n        z.object({\n          id: z.string(),\n          role: z.enum(['system', 'user', 'assistant']),\n          metadata: z.unknown().optional(),\n          parts: z\n            .array(\n              z.union([\n                z.object({\n                  type: z.literal('text'),\n                  text: z.string(),\n                  state: z.enum(['streaming', 'done']).optional(),\n                  providerMetadata: providerMetadataSchema.optional(),\n                }),\n                z.object({\n                  type: z.literal('reasoning'),\n                  text: z.string(),\n                  state: z.enum(['streaming', 'done']).optional(),\n                  providerMetadata: providerMetadataSchema.optional(),\n                }),\n                z.object({\n                  type: z.literal('source-url'),\n                  sourceId: z.string(),\n                  url: z.string(),\n                  title: z.string().optional(),\n                  providerMetadata: providerMetadataSchema.optional(),\n                }),\n                z.object({\n                  type: z.literal('source-document'),\n                  sourceId: z.string(),\n                  mediaType: z.string(),\n                  title: z.string(),\n                  filename: z.string().optional(),\n                  providerMetadata: providerMetadataSchema.optional(),\n                }),\n                z.object({\n                  type: z.literal('file'),\n                  mediaType: z.string(),\n                  filename: z.string().optional(),\n                  url: z.string(),\n                  providerMetadata: providerMetadataSchema.optional(),\n                }),\n                z.object({\n                  type: z.literal('step-start'),\n                }),\n                z.object({\n                  type: z.string().startsWith('data-'),\n                  id: z.string().optional(),\n                  data: z.unknown(),\n                }),\n                z.object({\n                  type: z.literal('dynamic-tool'),\n                  toolName: z.string(),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('input-streaming'),\n                  input: z.unknown().optional(),\n                  providerExecuted: z.boolean().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  approval: z.never().optional(),\n                }),\n                z.object({\n                  type: z.literal('dynamic-tool'),\n                  toolName: z.string(),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('input-available'),\n                  input: z.unknown(),\n                  providerExecuted: z.boolean().optional(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z.never().optional(),\n                }),\n                z.object({\n                  type: z.literal('dynamic-tool'),\n                  toolName: z.string(),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('approval-requested'),\n                  input: z.unknown(),\n                  providerExecuted: z.boolean().optional(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z.object({\n                    id: z.string(),\n                    approved: z.never().optional(),\n                    reason: z.never().optional(),\n                  }),\n                }),\n                z.object({\n                  type: z.literal('dynamic-tool'),\n                  toolName: z.string(),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('approval-responded'),\n                  input: z.unknown(),\n                  providerExecuted: z.boolean().optional(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z.object({\n                    id: z.string(),\n                    approved: z.boolean(),\n                    reason: z.string().optional(),\n                  }),\n                }),\n                z.object({\n                  type: z.literal('dynamic-tool'),\n                  toolName: z.string(),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('output-available'),\n                  input: z.unknown(),\n                  providerExecuted: z.boolean().optional(),\n                  output: z.unknown(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  resultProviderMetadata: providerMetadataSchema.optional(),\n                  preliminary: z.boolean().optional(),\n                  approval: z\n                    .object({\n                      id: z.string(),\n                      approved: z.literal(true),\n                      reason: z.string().optional(),\n                    })\n                    .optional(),\n                }),\n                z.object({\n                  type: z.literal('dynamic-tool'),\n                  toolName: z.string(),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('output-error'),\n                  input: z.unknown(),\n                  rawInput: z.unknown().optional(),\n                  providerExecuted: z.boolean().optional(),\n                  output: z.never().optional(),\n                  errorText: z.string(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  resultProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z\n                    .object({\n                      id: z.string(),\n                      approved: z.literal(true),\n                      reason: z.string().optional(),\n                    })\n                    .optional(),\n                }),\n                z.object({\n                  type: z.literal('dynamic-tool'),\n                  toolName: z.string(),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('output-denied'),\n                  input: z.unknown(),\n                  providerExecuted: z.boolean().optional(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z.object({\n                    id: z.string(),\n                    approved: z.literal(false),\n                    reason: z.string().optional(),\n                  }),\n                }),\n                z.object({\n                  type: z.string().startsWith('tool-'),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('input-streaming'),\n                  providerExecuted: z.boolean().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  input: z.unknown().optional(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  approval: z.never().optional(),\n                }),\n                z.object({\n                  type: z.string().startsWith('tool-'),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('input-available'),\n                  providerExecuted: z.boolean().optional(),\n                  input: z.unknown(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z.never().optional(),\n                }),\n                z.object({\n                  type: z.string().startsWith('tool-'),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('approval-requested'),\n                  input: z.unknown(),\n                  providerExecuted: z.boolean().optional(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z.object({\n                    id: z.string(),\n                    approved: z.never().optional(),\n                    reason: z.never().optional(),\n                  }),\n                }),\n                z.object({\n                  type: z.string().startsWith('tool-'),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('approval-responded'),\n                  input: z.unknown(),\n                  providerExecuted: z.boolean().optional(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z.object({\n                    id: z.string(),\n                    approved: z.boolean(),\n                    reason: z.string().optional(),\n                  }),\n                }),\n                z.object({\n                  type: z.string().startsWith('tool-'),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('output-available'),\n                  providerExecuted: z.boolean().optional(),\n                  input: z.unknown(),\n                  output: z.unknown(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  resultProviderMetadata: providerMetadataSchema.optional(),\n                  preliminary: z.boolean().optional(),\n                  approval: z\n                    .object({\n                      id: z.string(),\n                      approved: z.literal(true),\n                      reason: z.string().optional(),\n                    })\n                    .optional(),\n                }),\n                z.object({\n                  type: z.string().startsWith('tool-'),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('output-error'),\n                  providerExecuted: z.boolean().optional(),\n                  input: z.unknown(),\n                  rawInput: z.unknown().optional(),\n                  output: z.never().optional(),\n                  errorText: z.string(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  resultProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z\n                    .object({\n                      id: z.string(),\n                      approved: z.literal(true),\n                      reason: z.string().optional(),\n                    })\n                    .optional(),\n                }),\n                z.object({\n                  type: z.string().startsWith('tool-'),\n                  toolCallId: z.string(),\n                  toolMetadata: toolMetadataSchema.optional(),\n                  state: z.literal('output-denied'),\n                  providerExecuted: z.boolean().optional(),\n                  input: z.unknown(),\n                  output: z.never().optional(),\n                  errorText: z.never().optional(),\n                  callProviderMetadata: providerMetadataSchema.optional(),\n                  approval: z.object({\n                    id: z.string(),\n                    approved: z.literal(false),\n                    reason: z.string().optional(),\n                  }),\n                }),\n              ]),\n            )\n            .nonempty('Message must contain at least one part'),\n        }),\n      )\n      .nonempty('Messages array must not be empty'),\n  ),\n);\n\nexport type SafeValidateUIMessagesResult<UI_MESSAGE extends UIMessage> =\n  | {\n      success: true;\n      data: Array<UI_MESSAGE>;\n    }\n  | {\n      success: false;\n      error: Error;\n    };\n\n/**\n * Validates a list of UI messages like `validateUIMessages`,\n * but instead of throwing it returns `{ success: true, data }`\n * or `{ success: false, error }`.\n */\nexport async function safeValidateUIMessages<UI_MESSAGE extends UIMessage>({\n  messages,\n  metadataSchema,\n  dataSchemas,\n  tools,\n}: {\n  messages: unknown;\n  metadataSchema?: FlexibleSchema<UIMessage['metadata']>;\n  dataSchemas?: {\n    [NAME in keyof InferUIMessageData<UI_MESSAGE> & string]?: FlexibleSchema<\n      InferUIMessageData<UI_MESSAGE>[NAME]\n    >;\n  };\n  tools?: {\n    [NAME in keyof InferUIMessageTools<UI_MESSAGE> & string]?: Tool<\n      InferUIMessageTools<UI_MESSAGE>[NAME]['input'],\n      InferUIMessageTools<UI_MESSAGE>[NAME]['output']\n    >;\n  };\n}): Promise<SafeValidateUIMessagesResult<UI_MESSAGE>> {\n  try {\n    if (messages == null) {\n      return {\n        success: false,\n        error: new InvalidArgumentError({\n          parameter: 'messages',\n          value: messages,\n          message: 'messages parameter must be provided',\n        }),\n      };\n    }\n\n    const validatedMessages = await validateTypes({\n      value: messages,\n      schema: uiMessagesSchema,\n    });\n\n    if (metadataSchema) {\n      for (const [msgIdx, message] of validatedMessages.entries()) {\n        await validateTypes({\n          value: message.metadata,\n          schema: metadataSchema,\n          context: {\n            field: `messages[${msgIdx}].metadata`,\n            entityId: message.id,\n          },\n        });\n      }\n    }\n\n    if (dataSchemas || tools) {\n      for (const [msgIdx, message] of validatedMessages.entries()) {\n        for (const [partIdx, part] of message.parts.entries()) {\n          // Data part validation\n          if (dataSchemas && part.type.startsWith('data-')) {\n            const dataPart = part as DataUIPart<InferUIMessageData<UI_MESSAGE>>;\n            const dataName = dataPart.type.slice(5);\n            const dataSchema = dataSchemas[dataName];\n\n            if (!dataSchema) {\n              return {\n                success: false,\n                error: new TypeValidationError({\n                  value: dataPart.data,\n                  cause: `No data schema found for data part ${dataName}`,\n                  context: {\n                    field: `messages[${msgIdx}].parts[${partIdx}].data`,\n                    entityName: dataName,\n                    entityId: dataPart.id,\n                  },\n                }),\n              };\n            }\n\n            await validateTypes({\n              value: dataPart.data,\n              schema: dataSchema,\n              context: {\n                field: `messages[${msgIdx}].parts[${partIdx}].data`,\n                entityName: dataName,\n                entityId: dataPart.id,\n              },\n            });\n          }\n\n          // Tool part validation\n          if (tools && part.type.startsWith('tool-')) {\n            const toolPart = part as ToolUIPart<\n              InferUIMessageTools<UI_MESSAGE>\n            >;\n            const toolName = toolPart.type.slice(5);\n            const tool = tools[toolName];\n\n            if (\n              !tool &&\n              (toolPart.state === 'output-available' ||\n                toolPart.state === 'output-error' ||\n                toolPart.state === 'output-denied')\n            ) {\n              continue;\n            }\n\n            // TODO support dynamic tools\n            if (!tool) {\n              return {\n                success: false,\n                error: new TypeValidationError({\n                  value: toolPart.input,\n                  cause: `No tool schema found for tool part ${toolName}`,\n                  context: {\n                    field: `messages[${msgIdx}].parts[${partIdx}].input`,\n                    entityName: toolName,\n                    entityId: toolPart.toolCallId,\n                  },\n                }),\n              };\n            }\n\n            // Tool input validation\n            if (\n              toolPart.state === 'input-available' ||\n              toolPart.state === 'output-available' ||\n              (toolPart.state === 'output-error' &&\n                toolPart.input !== undefined)\n            ) {\n              await validateTypes({\n                value: toolPart.input,\n                schema: tool.inputSchema,\n                context: {\n                  field: `messages[${msgIdx}].parts[${partIdx}].input`,\n                  entityName: toolName,\n                  entityId: toolPart.toolCallId,\n                },\n              });\n            }\n\n            // Tool output validation\n            if (toolPart.state === 'output-available' && tool.outputSchema) {\n              await validateTypes({\n                value: toolPart.output,\n                schema: tool.outputSchema,\n                context: {\n                  field: `messages[${msgIdx}].parts[${partIdx}].output`,\n                  entityName: toolName,\n                  entityId: toolPart.toolCallId,\n                },\n              });\n            }\n          }\n        }\n      }\n    }\n\n    return {\n      success: true,\n      data: validatedMessages as Array<UI_MESSAGE>,\n    };\n  } catch (error) {\n    const err = error as Error;\n\n    return {\n      success: false,\n      error: err,\n    };\n  }\n}\n\n/**\n * Validates a list of UI messages.\n *\n * Metadata, data parts, and generic tool call structures are only validated if\n * the corresponding schemas are provided. Otherwise, they are assumed to be\n * valid.\n */\nexport async function validateUIMessages<UI_MESSAGE extends UIMessage>({\n  messages,\n  metadataSchema,\n  dataSchemas,\n  tools,\n}: {\n  messages: unknown;\n  metadataSchema?: FlexibleSchema<UIMessage['metadata']>;\n  dataSchemas?: {\n    [NAME in keyof InferUIMessageData<UI_MESSAGE> & string]?: FlexibleSchema<\n      InferUIMessageData<UI_MESSAGE>[NAME]\n    >;\n  };\n  tools?: {\n    [NAME in keyof InferUIMessageTools<UI_MESSAGE> & string]?: Tool<\n      InferUIMessageTools<UI_MESSAGE>[NAME]['input'],\n      InferUIMessageTools<UI_MESSAGE>[NAME]['output']\n    >;\n  };\n}): Promise<Array<UI_MESSAGE>> {\n  const response = await safeValidateUIMessages({\n    messages,\n    metadataSchema,\n    dataSchemas,\n    tools,\n  });\n\n  if (!response.success) throw response.error;\n\n  return response.data;\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 {\n  withUserAgentSuffix,\n  type ProviderOptions,\n} 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 type { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport type { Embedding, EmbeddingModel, ProviderMetadata } from '../types';\nimport type { Warning } from '../types/warning';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { splitArray } from '../util/split-array';\nimport type { 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 type { JSONValue } from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  withUserAgentSuffix,\n  type FlexibleSchema,\n  type InferSchema,\n  type ProviderOptions,\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 type { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport type { 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 type { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport type {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n} from '../types/language-model';\nimport type { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport type { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport type { ProviderMetadata } from '../types/provider-metadata';\nimport { asLanguageModelUsage, type LanguageModelUsage } from '../types/usage';\nimport type { DownloadFunction } from '../util/download/download-function';\nimport { prepareHeaders } from '../util/prepare-headers';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { VERSION } from '../version';\nimport type { GenerateObjectResult } from './generate-object-result';\nimport { getOutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport type { 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 * @param allowSystemInMessages - Whether system messages are allowed in the `prompt` or `messages` fields. When unset, system messages are allowed with a warning.\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    allowSystemInMessages,\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          allowSystemInMessages,\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 type {\n  JSONValue,\n  LanguageModelV3FinishReason,\n  LanguageModelV3StreamPart,\n  LanguageModelV3Usage,\n  SharedV3ProviderMetadata,\n  SharedV3Warning,\n} from '@ai-sdk/provider';\nimport {\n  createIdGenerator,\n  DelayedPromise,\n  type FlexibleSchema,\n  type ProviderOptions,\n  type InferSchema,\n} from '@ai-sdk/provider-utils';\nimport type { ServerResponse } from 'http';\nimport { logWarnings } from '../logger/log-warnings';\nimport { resolveLanguageModel } from '../model/resolve-model';\nimport type { CallSettings } from '../prompt/call-settings';\nimport { convertToLanguageModelPrompt } from '../prompt/convert-to-language-model-prompt';\nimport { prepareCallSettings } from '../prompt/prepare-call-settings';\nimport type { 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 type { 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 type {\n  CallWarning,\n  FinishReason,\n  LanguageModel,\n} from '../types/language-model';\nimport type { LanguageModelRequestMetadata } from '../types/language-model-request-metadata';\nimport type { LanguageModelResponseMetadata } from '../types/language-model-response-metadata';\nimport type { ProviderMetadata } from '../types/provider-metadata';\nimport {\n  asLanguageModelUsage,\n  createNullLanguageModelUsage,\n  type LanguageModelUsage,\n} from '../types/usage';\nimport { isDeepEqualData, parsePartialJson, type DeepPartial } from '../util';\nimport {\n  createAsyncIterableStream,\n  type AsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { createStitchableStream } from '../util/create-stitchable-stream';\nimport type { DownloadFunction } from '../util/download/download-function';\nimport { now as originalNow } from '../util/now';\nimport { prepareRetries } from '../util/prepare-retries';\nimport { getOutputStrategy, type OutputStrategy } from './output-strategy';\nimport { parseAndValidateObjectResultWithRepair } from './parse-and-validate-object-result';\nimport type { RepairTextFunction } from './repair-text';\nimport type {\n  ObjectStreamPart,\n  StreamObjectResult,\n} 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 * @param allowSystemInMessages - Whether system messages are allowed in the `prompt` or `messages` fields. When unset, system messages are allowed with a warning.\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    allowSystemInMessages,\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    allowSystemInMessages,\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    allowSystemInMessages,\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    allowSystemInMessages: Prompt['allowSystemInMessages'];\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          allowSystemInMessages,\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 { parseMemoryRequestContext } from '@mastra/core/memory';\nimport { z } from 'zod';\n\nimport { Extractor } from './extractor';\nimport type { ExtractorRuntimeContext } from './extractor';\n\nasync function getWorkingMemoryDetails(context: ExtractorRuntimeContext): Promise<{\n  template?: string;\n  current?: string | null;\n  usesSchema: boolean;\n}> {\n  const memory = context.memory!;\n  const memoryConfig = parseMemoryRequestContext(context.requestContext)?.memoryConfig;\n  const config = memory.getMergedThreadConfig(memoryConfig ?? {});\n  const workingMemory = config.workingMemory;\n  if (!workingMemory?.enabled) {\n    return { usesSchema: false };\n  }\n\n  const [template, current] = await Promise.all([\n    memory.getWorkingMemoryTemplate({ memoryConfig }),\n    context.threadId\n      ? memory.getWorkingMemory({\n          threadId: context.threadId,\n          resourceId: context.resourceId,\n          memoryConfig,\n        })\n      : Promise.resolve(null),\n  ]);\n\n  return {\n    template: typeof template?.content === 'string' ? template.content : JSON.stringify(template?.content),\n    current,\n    usesSchema: Boolean(workingMemory.schema),\n  };\n}\n\nfunction buildWorkingMemoryInstructions(details: Awaited<ReturnType<typeof getWorkingMemoryDetails>>): string {\n  if (details.usesSchema) {\n    return [\n      'Update working memory with durable facts from the observations you made.',\n      'Return the full updated JSON object when working memory should change.',\n      'Return null when no working memory update is needed.',\n      details.template ? `Working memory JSON schema:\\n${details.template}` : undefined,\n      details.current ? `Current working memory JSON:\\n${details.current}` : undefined,\n    ]\n      .filter(Boolean)\n      .join('\\n\\n');\n  }\n\n  return [\n    'Update working memory with durable facts from the observations you made.',\n    'Return the full updated Markdown working memory. Preserve useful existing content and add or revise only what changed.',\n    details.template ? `Working memory template:\\n${details.template}` : undefined,\n    details.current ? `Current working memory:\\n${details.current}` : undefined,\n  ]\n    .filter(Boolean)\n    .join('\\n\\n');\n}\n\nexport class WorkingMemoryExtractor extends Extractor<string | Record<string, unknown> | null> {\n  constructor() {\n    super({\n      name: 'Working Memory',\n      includePreviousExtraction: false,\n      metadataKeyPath: false,\n      instructions: async context => buildWorkingMemoryInstructions(await getWorkingMemoryDetails(context)),\n      schema: async context => {\n        const details = await getWorkingMemoryDetails(context);\n        return details.usesSchema ? z.union([z.record(z.string(), z.unknown()), z.null()]) : undefined;\n      },\n      onExtracted: async ({ current, memory, threadId, resourceId, requestContext }) => {\n        const memoryConfig = parseMemoryRequestContext(requestContext)?.memoryConfig;\n        const config = memory!.getMergedThreadConfig(memoryConfig ?? {});\n        const isSchemaWorkingMemory = Boolean(config.workingMemory?.schema);\n\n        if (isSchemaWorkingMemory && current === null) {\n          return undefined;\n        }\n\n        const workingMemory = typeof current === 'string' ? current : (JSON.stringify(current) ?? '');\n        if (!workingMemory.trim()) {\n          return undefined;\n        }\n\n        await memory!.updateWorkingMemory({\n          threadId,\n          resourceId,\n          workingMemory,\n          memoryConfig,\n        });\n\n        return current;\n      },\n    });\n  }\n}\n","import type { MastraDBMessage } from '@mastra/core/agent';\nimport type { MemoryConfigInternal } from '@mastra/core/memory';\nimport { createTool } from '@mastra/core/tools';\nimport type { JSONSchema7 } from 'json-schema';\nimport { estimateTokenCount } from 'tokenx';\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: {\n      $schema: 'http://json-schema.org/draft-07/schema#',\n      type: 'object',\n      properties: {\n        ...(isResourceScope\n          ? {\n              mode: {\n                type: 'string',\n                enum: ['messages', 'threads', 'search'],\n                description:\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: {\n                type: 'string',\n                minLength: 1,\n                description:\n                  'Browse a different thread, or \"current\" for the active thread. Use mode=\"threads\" first to discover thread IDs.',\n              },\n              before: {\n                type: 'string',\n                description:\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: {\n                type: 'string',\n                description:\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: {\n                type: 'string',\n                enum: ['messages', 'threads', 'search'],\n                description:\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: {\n          type: 'string',\n          minLength: 1,\n          description: 'Search query for mode=\"search\". Finds messages semantically similar to this text.',\n        },\n        cursor: {\n          type: 'string',\n          minLength: 1,\n          description:\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: {\n          type: 'string',\n          enum: ['start', 'end'],\n          description:\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: {\n          type: 'integer',\n          minimum: -50,\n          maximum: 50,\n          description:\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: {\n          type: 'integer',\n          minimum: 1,\n          maximum: 20,\n          description: 'Maximum number of items to return per page. Defaults to 20.',\n        },\n        detail: {\n          type: 'string',\n          enum: ['low', 'high'],\n          description:\n            'Detail level for messages. \"low\" (default) returns truncated text and tool names. \"high\" returns full content with tool args/results.',\n        },\n        partType: {\n          type: 'string',\n          enum: ['text', 'tool-call', 'tool-result', 'reasoning', 'image', 'file'],\n          description: 'Filter results to only include parts of this type. Only applies to mode=\"messages\".',\n        },\n        toolName: {\n          type: 'string',\n          minLength: 1,\n          description:\n            'Filter results to only include tool-call and tool-result parts matching this tool name. Only applies to mode=\"messages\".',\n        },\n        partIndex: {\n          type: 'integer',\n          minimum: 0,\n          description:\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    } satisfies JSONSchema7,\n    execute: async (inputData, context) => {\n      const {\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      } = inputData as {\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      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 = !explicitThreadId && !cursor && Boolean(currentThreadId);\n      const defaultThreadNote =\n        usedDefaultThreadId && isResourceScope ? `threadId wasn't passed so used default ${currentThreadId}.\\n\\n` : '';\n      // Reuse the shared `resolvedExplicitThreadId` ('current' -> currentThreadId) mapping,\n      // falling back to the current thread when no threadId or cursor was provided.\n      const resolvedThreadId = resolvedExplicitThreadId || (usedDefaultThreadId ? currentThreadId : undefined);\n      const hasResolvedThreadId = typeof resolvedThreadId === 'string' && resolvedThreadId.length > 0;\n      const hasCursor = typeof cursor === 'string' && cursor.length > 0;\n\n      if (!hasResolvedThreadId && !hasCursor) {\n        throw new Error(\n          isResourceScope\n            ? 'No active thread context and no cursor or threadId was provided for mode=\"messages\". Pass a threadId (use mode=\"threads\" to discover thread IDs) or a message ID as cursor.'\n            : 'No active thread context for mode=\"messages\". This tool is limited to the current thread and no current thread could be resolved.',\n        );\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 (hasResolvedThreadId) {\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 && !hasResolvedThreadId && !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 type { ToolAction } from '@mastra/core/tools';\nimport { createTool } from '@mastra/core/tools';\nimport { standardSchemaToJSONSchema } from '@mastra/schema-compat/schema';\nimport type { JSONSchema7 } from 'json-schema';\n\n// Keep these in sync with @mastra/core/memory. @mastra/memory supports older\n// peer-compatible @mastra/core versions that may not export the newer names.\nconst UPDATE_WORKING_MEMORY_TOOL_NAME = 'updateWorkingMemory';\nconst SET_WORKING_MEMORY_TOOL_NAME = 'setWorkingMemory';\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 }> = {\n    $schema: 'http://json-schema.org/draft-07/schema#',\n    type: 'object',\n    properties: {\n      memory: {\n        type: 'string',\n        description: `The Markdown formatted working memory content to store. This MUST be a string. Never pass an object.`,\n      },\n    },\n    required: ['memory'],\n  } satisfies JSONSchema7;\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 .input() since this describes the structure the tool should receive,\n    // then wrap it for runtime validation of the tool's inputSchema\n    const jsonSchema = standardSchemaToJSONSchema(standardSchema, { io: 'input' });\n    delete jsonSchema.$schema;\n\n    // Use the JSON Schema only to describe tool input to the model, and validate with\n    // the schema's own (e.g. Zod-native) validator. Re-wrapping via toStandardSchema()\n    // routed validation through AJV, which uses `new Function`/`eval` and crashes on\n    // runtimes that forbid dynamic code generation such as Cloudflare Workers (#17301).\n    const wrappedJsonSchema: JSONSchema7 = {\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    // Validate the inner `memory` payload with the original schema's validator and\n    // map a successful result back into the `{ memory }` shape the tool expects.\n    const validateMemory = (memoryValue: unknown) => standardSchema['~standard'].validate(memoryValue);\n    type ValidateResult = Awaited<ReturnType<typeof validateMemory>>;\n    const toWrappedResult = (result: ValidateResult) =>\n      'issues' in result && result.issues ? result : { value: { memory: result.value } };\n\n    inputSchema = {\n      '~standard': {\n        version: 1,\n        vendor: 'mastra',\n        validate: (value: unknown) => {\n          // Older models sometimes omit the top-level `memory` wrapper, so fall back to\n          // stripping nulls from the raw value and validating it as the memory payload.\n          const hasWrapper =\n            !!value && typeof value === 'object' && !Array.isArray(value) && 'memory' in (value as object);\n          const memoryValue = hasWrapper\n            ? (value as { memory: unknown }).memory\n            : stripNullsFromOptional(value, jsonSchema as Record<string, unknown>);\n\n          const result = validateMemory(memoryValue);\n          return result instanceof Promise ? result.then(toWrappedResult) : toWrappedResult(result);\n        },\n        jsonSchema: {\n          input: () => wrappedJsonSchema,\n          output: () => wrappedJsonSchema,\n        },\n      },\n    } as unknown 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 useStateSignals = memoryConfig?.workingMemory?.useStateSignals === true;\n\n  const stateSignalsPreamble = `The current working memory state is delivered to you each turn by the system inside a <working-memory>...</working-memory> block. That block is system-emitted state, NOT something the user typed — never describe it as the user sharing it. Read from it directly when answering. Only call this tool when the user provides genuinely NEW or CHANGED facts that should be persisted; do NOT call it to re-save unchanged data.`;\n\n  const description = schema\n    ? useStateSignals\n      ? `${stateSignalsPreamble} Data is merged with existing memory — only include fields you want to add or update.`\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    : useStateSignals\n      ? `${stateSignalsPreamble} Pass the full updated Markdown blob as a string in the memory field.`\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, context) => {\n      const workingMemoryInput = inputData as { memory: any };\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 = workingMemoryInput.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 = workingMemoryInput.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: {\n      $schema: 'http://json-schema.org/draft-07/schema#',\n      type: 'object',\n      properties: {\n        newMemory: {\n          type: 'string',\n          description: `The ${config.workingMemory?.schema ? 'JSON' : 'Markdown'} formatted working memory content to store`,\n        },\n        searchString: {\n          type: 'string',\n          description:\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: {\n          type: 'string',\n          enum: ['append-new-memory', 'clarify-existing-memory', 'replace-irrelevant-memory'],\n          description:\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    } satisfies JSONSchema7,\n    execute: async (inputData, context) => {\n      const workingMemoryInput = inputData as {\n        newMemory?: string;\n        searchString?: string;\n        updateReason?: 'append-new-memory' | 'clarify-existing-memory' | 'replace-irrelevant-memory';\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 = workingMemoryInput.newMemory || '';\n      if (!workingMemoryInput.updateReason) workingMemoryInput.updateReason = `append-new-memory`;\n\n      if (\n        workingMemoryInput.searchString &&\n        config.workingMemory?.scope === `resource` &&\n        workingMemoryInput.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        workingMemoryInput.searchString = undefined;\n      }\n\n      if (workingMemoryInput.updateReason === `append-new-memory` && workingMemoryInput.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        workingMemoryInput.searchString = undefined;\n      }\n\n      if (workingMemoryInput.updateReason !== `append-new-memory` && !workingMemoryInput.searchString) {\n        return {\n          success: false,\n          reason: `updateReason was ${workingMemoryInput.updateReason} but no searchString was provided. Unable to replace undefined with \"${workingMemoryInput.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: workingMemoryInput.searchString,\n        memoryConfig: config,\n      });\n\n      if (result) {\n        return result;\n      }\n\n      return { success: true };\n    },\n  });\n};\n\n/**\n * Returns the working-memory tool plus the wire name it should be registered under.\n *\n * - Default delivery (`useStateSignals: false`): wire name `updateWorkingMemory`,\n *   identical shape to today.\n * - State-signals delivery (`useStateSignals: true`): wire name `setWorkingMemory`.\n *   The rename keeps legacy strip filters (which match the literal `updateWorkingMemory`)\n *   from removing tool-call parts so they persist as a normal audit trail. Any\n *   future state-signal-specific tweaks to the tool (e.g. delta-aware results,\n *   scoped descriptions) belong here.\n *\n * The VNext vs default tool body decision is left to the caller because Memory\n * owns the `isVNextWorkingMemoryConfig` check; pass `vNext: true` to use the\n * search-and-replace shape.\n */\nexport function createWorkingMemoryTool(\n  config: MemoryConfigInternal,\n  options: { vNext?: boolean } = {},\n): { name: string; tool: ToolAction<any, any, any> } {\n  const useStateSignals = config.workingMemory?.useStateSignals === true;\n  const tool = options.vNext ? __experimental_updateWorkingMemoryToolVNext(config) : updateWorkingMemoryTool(config);\n  const name = useStateSignals ? SET_WORKING_MEMORY_TOOL_NAME : UPDATE_WORKING_MEMORY_TOOL_NAME;\n  return { name, tool };\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 type { Mastra } from '@mastra/core/mastra';\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 { LRUCache } from 'lru-cache';\nimport xxhash from 'xxhash-wasm';\nimport type { ObservationalMemory, ObservationalMemoryConfig } from './processors/observational-memory';\nimport { WorkingMemoryExtractor } from './processors/observational-memory/working-memory-extractor';\nimport { recallTool } from './tools/om-tools';\nimport { createWorkingMemoryTool, deepMergeWorkingMemory } from './tools/working-memory';\n\nexport {\n  ModelByInputTokens,\n  type ModelByInputTokensConfig,\n} from './processors/observational-memory/model-by-input-tokens';\nexport {\n  Extractor,\n  type ExtractorConfig,\n  type ExtractorOnExtractedContext,\n  type ExtractorRuntimeContext,\n  type ExtractorSource,\n} from './processors/observational-memory';\nexport { WorkingMemoryExtractor } from './processors/observational-memory/working-memory-extractor';\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 (!isRecord(message.content)) {\n    return false;\n  }\n\n  const metadata = message.content.metadata;\n  if (message.role === 'signal') {\n    return (\n      isRecord(metadata) &&\n      isRecord(metadata.signal) &&\n      (metadata.signal.type === 'system-reminder' || metadata.signal.type === 'reactive')\n    );\n  }\n\n  if (message.role !== 'user') {\n    return false;\n  }\n\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\nfunction hasWorkingMemoryExtractor(\n  extractors: NonNullable<NonNullable<ObservationalMemoryConfig['observation']>['extract']> | undefined,\n): boolean {\n  return !!extractors?.some(extractor => extractor.slug === 'working-memory');\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// Max number of distinct contents whose embeddings are kept in the in-process\n// cache. Bounds memory so a long-running Memory instance can't accumulate every\n// message/query it has ever embedded (each entry holds chunk text + vectors).\n// Matches the default used by the core SemanticRecall embedding cache.\nconst DEFAULT_EMBEDDING_CACHE_MAX_SIZE = 1000;\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  private _omEngineInstance: ObservationalMemory | null | undefined;\n  private _mastraInstance: Mastra | 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().then(engine => {\n        this._omEngineInstance = engine;\n        if (engine && this._mastraInstance) {\n          engine.__registerMastra(this._mastraInstance);\n        }\n        return engine;\n      });\n    }\n    return this._omEngine;\n  }\n\n  __registerMastra(mastra: Mastra): void {\n    super.__registerMastra(mastra);\n    this._mastraInstance = mastra;\n    if (this._omEngineInstance) {\n      this._omEngineInstance.__registerMastra(mastra);\n    } else {\n      void this._omEngine?.then(engine => engine?.__registerMastra(mastra));\n    }\n  }\n\n  public override getMergedThreadConfig(config?: MemoryConfigInternal): MemoryConfigInternal {\n    return this.applyManagedWorkingMemoryDefaults(super.getMergedThreadConfig(config));\n  }\n\n  private applyManagedWorkingMemoryDefaults(config: MemoryConfigInternal): MemoryConfigInternal {\n    const omConfig = normalizeObservationalMemoryConfig(\n      config.observationalMemory as boolean | MemoryObservationalMemoryOptions | undefined,\n    );\n    if (!omConfig?.observation?.manageWorkingMemory || !config.workingMemory?.enabled) {\n      return config;\n    }\n\n    const currentWorkingMemory = config.workingMemory;\n    const workingMemory = {\n      ...currentWorkingMemory,\n      agentManaged: currentWorkingMemory.agentManaged ?? false,\n      useStateSignals: currentWorkingMemory.useStateSignals ?? true,\n    };\n    const observation = (omConfig.observation ?? {}) as NonNullable<ObservationalMemoryConfig['observation']>;\n    const extract = observation.extract ?? [];\n\n    return {\n      ...config,\n      workingMemory,\n      observationalMemory: {\n        ...omConfig,\n        observation: {\n          ...observation,\n          extract: hasWorkingMemoryExtractor(extract) ? extract : [...extract, new WorkingMemoryExtractor()],\n        },\n      },\n    } as MemoryConfigInternal;\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.assertWorkingMemoryStateSignalsCompatibility(mergedConfig);\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            const scopeFilter = resourceScope ? { resource_id: resourceId } : { thread_id: threadId };\n            const userFilter = typeof config.semanticRecall === 'object' ? config.semanticRecall.filter : undefined;\n            const combinedFilter = userFilter ? { $and: [scopeFilter, userFilter] } : scopeFilter;\n\n            vectorResults.push(\n              ...(await this.vector.query({\n                indexName,\n                queryVector: embedding,\n                topK: vectorConfig.topK,\n                filter: combinedFilter,\n              })),\n            );\n          }),\n        );\n      }\n\n      const semanticConfig = typeof config.semanticRecall === 'object' ? config.semanticRecall : undefined;\n      const threshold = semanticConfig?.threshold;\n      const filteredVectorResults =\n        threshold !== undefined ? vectorResults.filter(r => r.score >= threshold) : vectorResults;\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        ...(filteredVectorResults?.length\n          ? {\n              include: filteredVectorResults.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({\n    threadId,\n    resourceId,\n  }: {\n    threadId: string;\n    resourceId?: string;\n  }): Promise<StorageThreadType | null> {\n    const memoryStore = await this.getMemoryStore();\n    return memoryStore.getThreadById({ threadId, resourceId });\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    const thread = await memoryStore.getThreadById({ threadId });\n    await memoryStore.deleteThread({ threadId });\n    if (thread?.resourceId && memoryStore.supportsObservationalMemory) {\n      await memoryStore.clearObservationalMemory(threadId, thread.resourceId);\n    }\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    this.assertWorkingMemoryStateSignalsCompatibility(config);\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 where possible.\n    const words = text.split(/\\s+/);\n\n    for (const word of words) {\n      // A single word can be longer than the chunk budget (e.g. a base64 data URI,\n      // a minified JS/JSON blob, a long URL, or spaceless CJK text where the entire\n      // message is one \"word\"). The whitespace split can't break these, so hard-split\n      // the oversized word by character count to guarantee every chunk stays under the\n      // embedder's token limit instead of emitting one oversized chunk it would reject.\n      if (word.length > charSize) {\n        // Flush whatever we've accumulated so far before the oversized word.\n        if (currentChunk) {\n          chunks.push(currentChunk);\n          currentChunk = '';\n        }\n        for (let i = 0; i < word.length; i += charSize) {\n          chunks.push(word.slice(i, i + charSize));\n        }\n        continue;\n      }\n\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        // Guard against pushing an empty leading chunk: if the very first word\n        // already filled/exceeded the budget, currentChunk is still '' here.\n        if (currentChunk) {\n          chunks.push(currentChunk);\n        }\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  // Bounded by an LRU so a long-running instance can't retain every embedded\n  // message/query (and its vectors + chunk text) for the life of the process.\n  private embeddingCache = new LRUCache<\n    bigint,\n    {\n      chunks: string[];\n      embeddings: Awaited<ReturnType<typeof embedMany>>['embeddings'];\n      usage?: { tokens: number };\n      dimension: number | undefined;\n    }\n  >({ max: DEFAULT_EMBEDDING_CACHE_MAX_SIZE });\n  private firstEmbed: Promise<any> | undefined;\n  protected async embedMessageContent(content: string) {\n    // Key by the content hash (not the content itself) to keep keys small. Use the\n    // 64-bit hash: h32 is only 32 bits, so distinct contents collide after ~tens of\n    // thousands of entries, which would return another message's cached embeddings.\n    const key = (await this.hasher).h64(content);\n    const cached = this.embeddingCache.get(key);\n    if (cached) {\n      this.logger.debug('Embedding cache hit', { contentHash: key.toString(), 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      // System messages are runtime instructions and should never be stored in memory.\n      // Then strip working memory tags from all persistable messages.\n      const updatedMessages = messages\n        .filter(m => m.role !== 'system')\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        const messagesByThread = new Map<string, MastraDBMessage[]>();\n        updatedMessages.forEach(message => {\n          if (message.threadId) {\n            if (!messagesByThread.has(message.threadId)) {\n              messagesByThread.set(message.threadId, []);\n            }\n            messagesByThread.get(message.threadId)!.push(message);\n          }\n        });\n\n        const threadMetadataMap = new Map<string, Record<string, unknown>>();\n        await Promise.all(\n          Array.from(messagesByThread.keys()).map(async threadId => {\n            try {\n              const thread = await memoryStore.getThreadById({ threadId });\n              if (thread?.metadata) {\n                threadMetadataMap.set(threadId, thread.metadata);\n              }\n            } catch (error) {\n              const message = error instanceof Error ? error.message : String(error);\n              throw new Error(\n                `Could not fetch metadata for thread ${threadId} while saving semantic recall embeddings: ${message}`,\n              );\n            }\n          }),\n        );\n\n        // Collect all embeddings first (embedding is CPU-bound, doesn't use pool connections)\n        const embeddingData: Array<{\n          embeddings: number[][];\n          metadata: Array<\n            Record<string, unknown> & {\n              message_id: string;\n              thread_id: string | undefined;\n              resource_id: string | undefined;\n            }\n          >;\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            const threadMetadata = message.threadId ? threadMetadataMap.get(message.threadId) || {} : {};\n\n            embeddingData.push({\n              embeddings: result.embeddings,\n              metadata: result.chunks.map(() => ({\n                ...threadMetadata,\n                message_id: message.id,\n                thread_id: message.threadId,\n                resource_id: message.resourceId,\n                role: message.role,\n                content: textForEmbedding,\n                created_at:\n                  message.createdAt instanceof Date ? message.createdAt.toISOString() : String(message.createdAt),\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            Record<string, unknown> & {\n              message_id: string;\n              thread_id: string | undefined;\n              resource_id: string | undefined;\n            }\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    this.assertWorkingMemoryStateSignalsCompatibility(config);\n    if (!config.workingMemory?.enabled) {\n      return null;\n    }\n\n    // When working memory is opted into the state-signals delivery path, suppress\n    // the system-message rendering. The WorkingMemoryStateProcessor delivers the\n    // template + data as a state signal instead.\n    if (config.workingMemory?.useStateSignals) {\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    const workingMemoryConfig = config.workingMemory;\n\n    // In readOnly or non-agent-managed mode, provide context without tool instructions.\n    if (config?.readOnly || workingMemoryConfig.agentManaged === false) {\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\n    const persistableMessages = messages.filter(m => m.role !== 'system');\n    if (persistableMessages.length === 0) return;\n\n    const memoryStore = await this.getMemoryStore();\n    await memoryStore.saveMessages({ messages: persistableMessages });\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      memory: this,\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      mastra: this._mastraInstance,\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            bufferOnIdle: omConfig.observation.bufferOnIdle,\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            observeAttachments: omConfig.observation.observeAttachments,\n            extract: omConfig.observation.extract,\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            extract: omConfig.reflection.extract,\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 assertWorkingMemoryStateSignalsCompatibility(config?: MemoryConfigInternal): void {\n    if (config?.workingMemory?.useStateSignals === true && this.isVNextWorkingMemoryConfig(config)) {\n      throw new Error(\n        \"workingMemory.useStateSignals is not supported with workingMemory.version: 'vnext'. Use stable template working memory or disable useStateSignals.\",\n      );\n    }\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<\n        Record<string, unknown> & {\n          message_id: string;\n          thread_id: string | undefined;\n          resource_id: string | undefined;\n        }\n      >;\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            role: message.role,\n            content: textForEmbedding,\n            created_at: message.createdAt instanceof Date ? message.createdAt.toISOString() : String(message.createdAt),\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        Record<string, unknown> & {\n          message_id: string;\n          thread_id: string | undefined;\n          resource_id: string | undefined;\n        }\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    this.assertWorkingMemoryStateSignalsCompatibility(mergedConfig);\n    const tools: Record<string, ToolAction<any, any, any>> = {};\n\n    const workingMemoryConfig = mergedConfig.workingMemory;\n\n    if (workingMemoryConfig?.enabled && workingMemoryConfig.agentManaged !== false && !mergedConfig.readOnly) {\n      const { name, tool } = createWorkingMemoryTool(mergedConfig, {\n        vNext: this.isVNextWorkingMemoryConfig(mergedConfig),\n      });\n      tools[name] = tool;\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<\n            Record<string, unknown> & {\n              message_id: string;\n              thread_id: string | undefined;\n              resource_id: string | undefined;\n            }\n          >;\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                  role: existingMessage.role,\n                  content: textForEmbedding,\n                  created_at:\n                    existingMessage.createdAt instanceof Date\n                      ? existingMessage.createdAt.toISOString()\n                      : String(existingMessage.createdAt),\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            Record<string, unknown> & {\n              message_id: string;\n              thread_id: string | undefined;\n              resource_id: string | undefined;\n            }\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<\n        Record<string, unknown> & {\n          message_id: string;\n          thread_id: string | undefined;\n          resource_id: string | undefined;\n        }\n      >;\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            role: message.role,\n            content: textForEmbedding,\n            created_at: message.createdAt instanceof Date ? message.createdAt.toISOString() : String(message.createdAt),\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        Record<string, unknown> & {\n          message_id: string;\n          thread_id: string | undefined;\n          resource_id: string | undefined;\n        }\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    const wm = await this.createWorkingMemoryStateProcessor(configuredProcessors, context);\n    if (wm) {\n      processors.push(wm);\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   * Creates a WorkingMemoryStateProcessor when working memory is enabled and the\n   * `useStateSignals` opt-in is set. Returns null otherwise or if the processor\n   * is already present in the user's configured processors.\n   */\n  private async createWorkingMemoryStateProcessor(\n    configuredProcessors: InputProcessorOrWorkflow[] = [],\n    context?: RequestContext,\n  ): Promise<InputProcessor | null> {\n    const runtimeMemory = context?.get('MastraMemory') as { memoryConfig?: MemoryConfigInternal } | undefined;\n    const mergedConfig = this.getMergedThreadConfig(runtimeMemory?.memoryConfig);\n    this.assertWorkingMemoryStateSignalsCompatibility(mergedConfig);\n    if (!mergedConfig.workingMemory?.enabled) return null;\n    if (!mergedConfig.workingMemory?.useStateSignals) return null;\n\n    const { WORKING_MEMORY_STATE_PROCESSOR_ID, WorkingMemoryStateProcessor } =\n      await import('./processors/working-memory-state');\n    const alreadyConfigured = configuredProcessors.some(\n      p => !('workflow' in p) && p.id === WORKING_MEMORY_STATE_PROCESSOR_ID,\n    );\n    if (alreadyConfigured) return null;\n\n    return new WorkingMemoryStateProcessor(this, runtimeMemory?.memoryConfig);\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\n// Working memory state-signal processor (opt-in via workingMemory.useStateSignals)\nexport {\n  WorkingMemoryStateProcessor,\n  WORKING_MEMORY_STATE_ID,\n  WORKING_MEMORY_STATE_PROCESSOR_ID,\n} from './processors/working-memory-state';\n","import { randomUUID } from 'node:crypto';\n\nimport type { AgentMemoryOption } from '@mastra/core/agent';\nimport type { MastraMemory } from '@mastra/core/memory';\nimport { InMemoryStore } from '@mastra/core/storage';\nimport { Memory } from '../../index';\n\nexport interface TemporaryOmMemoryContext {\n  memory: MastraMemory;\n  options: AgentMemoryOption;\n}\n\nexport function createTemporaryOmMemoryContext(prefix: string): TemporaryOmMemoryContext {\n  const threadId = `${prefix}-${randomUUID()}`;\n  const resourceId = prefix;\n  const options: AgentMemoryOption = {\n    thread: threadId,\n    resource: resourceId,\n    options: {\n      lastMessages: 10,\n      generateTitle: false,\n    },\n  };\n\n  return {\n    memory: new Memory({\n      storage: new InMemoryStore(),\n      options: options.options,\n    }),\n    options,\n  };\n}\n","import type { ObservabilityContext } from '@mastra/core/observability';\nimport { createObservabilityContext, EntityType, getOrCreateSpan, SpanType } from '@mastra/core/observability';\nimport type { RequestContext } from '@mastra/core/request-context';\n\nimport type { ModelByInputTokens } from './model-by-input-tokens';\nimport type { ResolvedObservationConfig, ResolvedReflectionConfig } from './types';\n\ntype OmTracingModel = Exclude<\n  ResolvedObservationConfig['model'] | ResolvedReflectionConfig['model'],\n  ModelByInputTokens\n>;\n\ntype OmTracingPhase = 'observer' | 'observer-multi-thread' | 'reflector';\n\nconst PHASE_CONFIG: Record<\n  OmTracingPhase,\n  {\n    name: string;\n    entityName: string;\n  }\n> = {\n  observer: {\n    name: 'om.observer',\n    entityName: 'Observer',\n  },\n  'observer-multi-thread': {\n    name: 'om.observer.multi-thread',\n    entityName: 'MultiThreadObserver',\n  },\n  reflector: {\n    name: 'om.reflector',\n    entityName: 'Reflector',\n  },\n};\n\nexport async function withOmTracingSpan<T>({\n  phase,\n  model,\n  inputTokens,\n  requestContext,\n  observabilityContext,\n  metadata,\n  callback,\n}: {\n  phase: OmTracingPhase;\n  model: OmTracingModel;\n  inputTokens: number;\n  requestContext?: RequestContext;\n  observabilityContext?: ObservabilityContext;\n  metadata?: Record<string, unknown>;\n  callback: (observabilityContext: ObservabilityContext) => Promise<T>;\n}): Promise<T> {\n  const config = PHASE_CONFIG[phase];\n  const span = getOrCreateSpan({\n    type: SpanType.GENERIC,\n    name: config.name,\n    entityType: EntityType.OUTPUT_STEP_PROCESSOR,\n    entityName: config.entityName,\n    tracingContext: observabilityContext?.tracingContext ?? observabilityContext?.tracing,\n    metadata: {\n      omPhase: phase,\n      omInputTokens: inputTokens,\n      omSelectedModel: typeof model === 'string' ? model : '(dynamic-model)',\n      ...metadata,\n    },\n    requestContext,\n  });\n  const childObservabilityContext = createObservabilityContext({ currentSpan: span });\n\n  if (!span) {\n    return callback(childObservabilityContext);\n  }\n\n  return span.executeInContext(() => callback(childObservabilityContext));\n}\n","import { Agent } from '@mastra/core/agent';\nimport type { MastraDBMessage } from '@mastra/core/agent';\nimport { modelSupportsAttachments } from '@mastra/core/llm';\nimport type { Mastra } from '@mastra/core/mastra';\nimport type { MastraMemory } from '@mastra/core/memory';\nimport type { ObservabilityContext } from '@mastra/core/observability';\nimport type { ProcessorContext } from '@mastra/core/processors';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { ProviderMetadata } from '@mastra/core/stream';\n\nimport type { Memory } from '../..';\nimport { omDebug } from './debug';\nimport { getBuiltInExtractedValues, mergeExtractedValues, mergeExtractionFailures } from './extracted-values';\nimport { extractStructuredValues } from './extraction-runner';\nimport type { Extractor } from './extractor';\nimport { resolveExtractors } from './extractor';\nimport { withOmInternalThreadId } from './internal-request-context';\nimport type { ModelByInputTokens } from './model-by-input-tokens';\nimport type { ObserverAttachmentFilter } from './observer-agent';\nimport {\n  buildObserverSystemPrompt,\n  buildObserverTaskPrompt,\n  buildObserverHistoryMessage,\n  buildMultiThreadObserverTaskPrompt,\n  buildMultiThreadObserverHistoryMessage,\n  parseObserverOutput,\n  parseMultiThreadObserverOutput,\n} from './observer-agent';\nimport { withRetry } from './retry';\nimport { createTemporaryOmMemoryContext } from './temporary-memory';\nimport type { TokenCounter } from './token-counter';\nimport { withOmTracingSpan } from './tracing';\nimport type { ResolvedObservationConfig } from './types';\n\ntype ConcreteObservationModel = Exclude<ResolvedObservationConfig['model'], ModelByInputTokens>;\n\ntype ObservationModelResolver = (inputTokens: number) => {\n  model: ConcreteObservationModel;\n  selectedThreshold?: number;\n  routingStrategy?: 'model-by-input-tokens';\n  routingThresholds?: string;\n};\n\n/**\n * Runs the Observer agent for extracting observations from messages.\n * Handles single-thread and multi-thread modes, degenerate detection, and retry logic.\n */\nexport interface ObserverExchange {\n  systemPrompt: string;\n  observerMessages: Array<{ role: string; content: unknown }>;\n  rawOutput: string;\n  parsedResult: {\n    observations: string;\n    currentTask?: string;\n    suggestedContinuation?: string;\n    threadTitle?: string;\n    extractedValues?: Record<string, unknown>;\n    extractionFailures?: Array<{ slug: string; error: string }>;\n    degenerate?: boolean;\n  };\n  model: string;\n  inputTokens: number;\n  isMultiThread: boolean;\n  retriedDueToDegenerate: boolean;\n}\n\nfunction filterObserverExtractors(\n  extractors: ResolvedObservationConfig['extractors'] | undefined,\n  skipContinuationHints?: boolean,\n) {\n  const configuredExtractors = extractors ?? [];\n  if (!skipContinuationHints) {\n    return configuredExtractors;\n  }\n  return configuredExtractors.filter(\n    extractor => extractor.slug !== 'current-task' && extractor.slug !== 'suggested-response',\n  );\n}\n\nexport class ObserverRunner {\n  private readonly observationConfig: ResolvedObservationConfig;\n  private readonly observedMessageIds: Set<string>;\n  private readonly resolveModel: ObservationModelResolver;\n  private readonly tokenCounter: TokenCounter;\n  private readonly memory?: Memory;\n  private mastra?: Mastra;\n\n  /** Captured prompt/response from the last observer call (for repro capture). */\n  lastExchange?: ObserverExchange;\n\n  constructor(opts: {\n    observationConfig: ResolvedObservationConfig;\n    observedMessageIds: Set<string>;\n    resolveModel: ObservationModelResolver;\n    tokenCounter: TokenCounter;\n    mastra?: Mastra;\n    memory?: Memory;\n  }) {\n    this.observationConfig = opts.observationConfig;\n    this.observedMessageIds = opts.observedMessageIds;\n    this.resolveModel = opts.resolveModel;\n    this.tokenCounter = opts.tokenCounter;\n    this.mastra = opts.mastra;\n    this.memory = opts.memory;\n  }\n\n  __registerMastra(mastra: Mastra): void {\n    this.mastra = mastra;\n  }\n\n  private createAgent(\n    model: ConcreteObservationModel,\n    isMultiThread = false,\n    memory?: MastraMemory,\n    extractors = this.observationConfig.extractors ?? [],\n  ): Agent {\n    const agent = new Agent({\n      id: isMultiThread ? 'multi-thread-observer' : 'observational-memory-observer',\n      name: isMultiThread ? 'multi-thread-observer' : 'Observer',\n      instructions: buildObserverSystemPrompt(\n        isMultiThread,\n        this.observationConfig.instruction,\n        this.observationConfig.threadTitle,\n        extractors,\n      ),\n      model,\n      ...(memory ? { memory } : {}),\n    });\n    if (this.mastra) {\n      agent.__registerMastra(this.mastra);\n    }\n    return agent;\n  }\n\n  /**\n   * Extract a router-style model ID (`provider/model`) from a model config.\n   * Handles strings, LanguageModel objects, and function-based models.\n   */\n  private extractModelRouterId(model: ConcreteObservationModel, requestContext?: RequestContext): string | undefined {\n    if (typeof model === 'string') return model;\n\n    // Function-based model — resolve it with requestContext to get the actual model\n    if (typeof model === 'function') {\n      if (!requestContext) return undefined;\n      try {\n        const resolved = model({ requestContext });\n        // Recursion handles the resolved value (string or LanguageModel object)\n        if (resolved instanceof Promise) return undefined; // can't await in sync context\n        return this.extractModelRouterId(resolved as ConcreteObservationModel);\n      } catch {\n        return undefined;\n      }\n    }\n\n    // LanguageModel object — check for provider/modelId properties\n    const obj = model as Record<string, unknown>;\n    if (typeof obj.provider === 'string' && typeof obj.modelId === 'string') {\n      return `${obj.provider}/${obj.modelId}`;\n    }\n\n    return undefined;\n  }\n\n  /**\n   * Resolve the attachment filter for a given model. When set to `'auto'`,\n   * the provider capabilities registry is consulted to decide whether the\n   * model accepts multimodal input.\n   */\n  private resolveAttachmentFilter(\n    model: ConcreteObservationModel,\n    requestContext?: RequestContext,\n  ): ObserverAttachmentFilter {\n    const raw = this.observationConfig.observeAttachments;\n    if (raw !== 'auto') return raw;\n\n    const routerId = this.extractModelRouterId(model, requestContext);\n    if (!routerId) return true; // can't determine — default to forwarding\n    const supports = modelSupportsAttachments(routerId);\n    return supports ?? true;\n  }\n\n  private async withAbortCheck<T>(fn: () => Promise<T>, abortSignal?: AbortSignal): Promise<T> {\n    if (abortSignal?.aborted) {\n      throw new Error('The operation was aborted.');\n    }\n    const result = await fn();\n    if (abortSignal?.aborted) {\n      throw new Error('The operation was aborted.');\n    }\n    return result;\n  }\n\n  /**\n   * Call the Observer agent for a single thread.\n   */\n  async call(\n    existingObservations: string | undefined,\n    messagesToObserve: MastraDBMessage[],\n    abortSignal?: AbortSignal,\n    options?: {\n      skipContinuationHints?: boolean;\n      requestContext?: RequestContext;\n      observabilityContext?: ObservabilityContext;\n      priorCurrentTask?: string;\n      priorSuggestedResponse?: string;\n      priorThreadTitle?: string;\n      priorExtractedValues?: Record<string, unknown>;\n      wasTruncated?: boolean;\n      model?: ConcreteObservationModel;\n      resourceId?: string;\n      mainAgent?: ProcessorContext['agent'];\n    },\n  ): Promise<{\n    observations: string;\n    currentTask?: string;\n    suggestedContinuation?: string;\n    threadTitle?: string;\n    extractedValues?: Record<string, unknown>;\n    extractionFailures?: Array<{ slug: string; error: string }>;\n    extractors?: readonly Extractor<any>[];\n    usage?: { inputTokens?: number; outputTokens?: number; totalTokens?: number };\n    providerMetadata?: ProviderMetadata;\n  }> {\n    const inputTokens = this.tokenCounter.countMessages(messagesToObserve);\n    const resolvedModel = options?.model ? { model: options.model } : this.resolveModel(inputTokens);\n    const activeExtractors = await resolveExtractors(\n      filterObserverExtractors(this.observationConfig.extractors, options?.skipContinuationHints),\n      {\n        source: 'observer',\n        threadId: messagesToObserve[0]?.threadId,\n        resourceId: options?.resourceId,\n        mainAgent: options?.mainAgent,\n        memory: this.memory,\n        requestContext: options?.requestContext,\n      },\n    );\n    const structuredExtractors = activeExtractors.filter(extractor => extractor.mode === 'structured');\n    const temporaryMemory =\n      structuredExtractors.length > 0 ? await createTemporaryOmMemoryContext('structured-observer') : undefined;\n    const agent = temporaryMemory\n      ? this.createAgent(resolvedModel.model, false, temporaryMemory.memory, activeExtractors)\n      : this.createAgent(resolvedModel.model, false, undefined, activeExtractors);\n    const internalRequestContext = withOmInternalThreadId(options?.requestContext, agent.id);\n\n    const attachmentFilter = this.resolveAttachmentFilter(resolvedModel.model, options?.requestContext);\n\n    const observerMessages = [\n      {\n        role: 'user' as const,\n        content: buildObserverTaskPrompt(existingObservations, {\n          ...options,\n          includeThreadTitle: this.observationConfig.threadTitle,\n          extractors: activeExtractors,\n        }),\n      },\n      buildObserverHistoryMessage(messagesToObserve, {\n        attachmentFilter,\n      }),\n    ];\n\n    const doGenerate = async () => {\n      return withRetry(\n        () =>\n          withOmTracingSpan({\n            phase: 'observer',\n            model: resolvedModel.model,\n            inputTokens,\n            requestContext: options?.requestContext,\n            observabilityContext: options?.observabilityContext,\n            metadata: {\n              omPreviousObserverTokens: this.observationConfig.previousObserverTokens,\n              omThreadTitleEnabled: this.observationConfig.threadTitle,\n              omSkipContinuationHints: options?.skipContinuationHints ?? false,\n              omWasTruncated: options?.wasTruncated ?? false,\n              ...(resolvedModel.selectedThreshold !== undefined\n                ? { omSelectedThreshold: resolvedModel.selectedThreshold }\n                : {}),\n              ...(resolvedModel.routingStrategy ? { omRoutingStrategy: resolvedModel.routingStrategy } : {}),\n              ...(resolvedModel.routingThresholds ? { omRoutingThresholds: resolvedModel.routingThresholds } : {}),\n            },\n            callback: childObservabilityContext =>\n              this.withAbortCheck(async () => {\n                const streamResult = await agent.stream(observerMessages, {\n                  modelSettings: { ...this.observationConfig.modelSettings },\n                  providerOptions: this.observationConfig.providerOptions as any,\n                  ...(temporaryMemory ? { memory: temporaryMemory.options } : {}),\n                  ...(abortSignal ? { abortSignal } : {}),\n                  ...(internalRequestContext ? { requestContext: internalRequestContext } : {}),\n                  ...childObservabilityContext,\n                });\n                return streamResult.getFullOutput();\n              }, abortSignal),\n          }),\n        { label: 'observer', abortSignal },\n      );\n    };\n\n    let result = await doGenerate();\n    let parsed = parseObserverOutput(result.text, activeExtractors);\n    let retriedDueToDegenerate = false;\n\n    if (parsed.degenerate) {\n      omDebug(`[OM:callObserver] degenerate repetition detected, retrying once`);\n      result = await doGenerate();\n      parsed = parseObserverOutput(result.text, activeExtractors);\n      retriedDueToDegenerate = true;\n      if (parsed.degenerate) {\n        omDebug(`[OM:callObserver] degenerate repetition on retry, failing`);\n        throw new Error('Observer produced degenerate output after retry');\n      }\n    }\n\n    const structuredExtraction = await extractStructuredValues({\n      agent,\n      source: 'observer',\n      extractors: activeExtractors,\n      memory: temporaryMemory?.options,\n      priorExtractedValues: options?.priorExtractedValues,\n      requestContext: options?.requestContext,\n      observabilityContext: options?.observabilityContext,\n      abortSignal,\n    });\n    const extractedValues = mergeExtractedValues(parsed.extractedValues, structuredExtraction.values);\n    const extractionFailures = mergeExtractionFailures(parsed.extractionFailures, structuredExtraction.failures);\n    const builtIns = getBuiltInExtractedValues(extractedValues);\n\n    const systemPrompt = buildObserverSystemPrompt(\n      false,\n      this.observationConfig.instruction,\n      this.observationConfig.threadTitle,\n      activeExtractors,\n    );\n    this.lastExchange = {\n      systemPrompt,\n      observerMessages,\n      rawOutput: result.text,\n      parsedResult: {\n        observations: parsed.observations,\n        currentTask: builtIns.currentTask ?? parsed.currentTask,\n        suggestedContinuation: builtIns.suggestedContinuation ?? parsed.suggestedContinuation,\n        threadTitle: builtIns.threadTitle ?? parsed.threadTitle,\n        extractedValues,\n        extractionFailures,\n        degenerate: parsed.degenerate,\n      },\n      model: String(resolvedModel.model),\n      inputTokens,\n      isMultiThread: false,\n      retriedDueToDegenerate,\n    };\n\n    const usage = result.totalUsage ?? result.usage;\n\n    return {\n      observations: parsed.observations,\n      currentTask: builtIns.currentTask ?? parsed.currentTask,\n      suggestedContinuation: builtIns.suggestedContinuation ?? parsed.suggestedContinuation,\n      threadTitle: builtIns.threadTitle ?? parsed.threadTitle,\n      extractedValues,\n      extractionFailures,\n      extractors: activeExtractors,\n      usage: usage\n        ? { inputTokens: usage.inputTokens, outputTokens: usage.outputTokens, totalTokens: usage.totalTokens }\n        : undefined,\n      providerMetadata: result.providerMetadata,\n    };\n  }\n\n  /**\n   * Call the Observer agent for multiple threads in a single batched request.\n   */\n  async callMultiThread(\n    existingObservations: string | undefined,\n    messagesByThread: Map<string, MastraDBMessage[]>,\n    threadOrder: string[],\n    abortSignal?: AbortSignal,\n    requestContext?: RequestContext,\n    priorMetadataByThread?: Map<\n      string,\n      { currentTask?: string; suggestedResponse?: string; threadTitle?: string; extracted?: Record<string, unknown> }\n    >,\n    observabilityContext?: ObservabilityContext,\n    model?: ConcreteObservationModel,\n  ): Promise<{\n    results: Map<\n      string,\n      {\n        observations: string;\n        currentTask?: string;\n        suggestedContinuation?: string;\n        threadTitle?: string;\n        extractedValues?: Record<string, unknown>;\n        extractionFailures?: Array<{ slug: string; error: string }>;\n        extractors?: readonly Extractor<any>[];\n      }\n    >;\n    usage?: { inputTokens?: number; outputTokens?: number; totalTokens?: number };\n    providerMetadata?: ProviderMetadata;\n  }> {\n    const inputTokens = Array.from(messagesByThread.values()).reduce(\n      (total, messages) => total + this.tokenCounter.countMessages(messages),\n      0,\n    );\n    const resolvedModel = model ? { model } : this.resolveModel(inputTokens);\n    const firstThreadMessages = messagesByThread.get(threadOrder[0] ?? '') ?? [];\n    const activeExtractors = await resolveExtractors(this.observationConfig.extractors ?? [], {\n      source: 'observer',\n      threadId: threadOrder[0],\n      resourceId: firstThreadMessages[0]?.resourceId,\n      memory: this.memory,\n      requestContext,\n    });\n    const structuredExtractors = activeExtractors.filter(extractor => extractor.mode === 'structured');\n\n    if (structuredExtractors.length > 0) {\n      const results = new Map<\n        string,\n        {\n          observations: string;\n          currentTask?: string;\n          suggestedContinuation?: string;\n          threadTitle?: string;\n          extractedValues?: Record<string, unknown>;\n          extractionFailures?: Array<{ slug: string; error: string }>;\n          extractors?: readonly Extractor<any>[];\n        }\n      >();\n      let totalUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n      for (const threadId of threadOrder) {\n        const threadResult = await this.call(existingObservations, messagesByThread.get(threadId) ?? [], abortSignal, {\n          requestContext,\n          observabilityContext,\n          priorCurrentTask: priorMetadataByThread?.get(threadId)?.currentTask,\n          priorSuggestedResponse: priorMetadataByThread?.get(threadId)?.suggestedResponse,\n          priorThreadTitle: priorMetadataByThread?.get(threadId)?.threadTitle,\n          priorExtractedValues: priorMetadataByThread?.get(threadId)?.extracted,\n          model: resolvedModel.model,\n        });\n        results.set(threadId, {\n          observations: threadResult.observations,\n          currentTask: threadResult.currentTask,\n          suggestedContinuation: threadResult.suggestedContinuation,\n          threadTitle: threadResult.threadTitle,\n          extractedValues: threadResult.extractedValues,\n          extractionFailures: threadResult.extractionFailures,\n          extractors: threadResult.extractors,\n        });\n        if (threadResult.usage) {\n          totalUsage.inputTokens += threadResult.usage.inputTokens ?? 0;\n          totalUsage.outputTokens += threadResult.usage.outputTokens ?? 0;\n          totalUsage.totalTokens += threadResult.usage.totalTokens ?? 0;\n        }\n      }\n      return { results, usage: totalUsage };\n    }\n\n    let temporaryMemory: Awaited<ReturnType<typeof createTemporaryOmMemoryContext>> | undefined;\n    const agent = this.createAgent(resolvedModel.model, true, undefined, activeExtractors);\n    const internalRequestContext = withOmInternalThreadId(requestContext, agent.id);\n\n    const multiThreadAttachmentFilter = this.resolveAttachmentFilter(resolvedModel.model, requestContext);\n\n    const observerMessages = [\n      {\n        role: 'user' as const,\n        content: buildMultiThreadObserverTaskPrompt(\n          existingObservations,\n          threadOrder,\n          priorMetadataByThread,\n          undefined,\n          this.observationConfig.threadTitle,\n          activeExtractors,\n        ),\n      },\n      buildMultiThreadObserverHistoryMessage(messagesByThread, threadOrder, {\n        attachmentFilter: multiThreadAttachmentFilter,\n      }),\n    ];\n\n    // Mark all messages as observed\n    for (const msgs of messagesByThread.values()) {\n      for (const msg of msgs) {\n        this.observedMessageIds.add(msg.id);\n      }\n    }\n\n    const doGenerate = async () => {\n      return withRetry(\n        () =>\n          withOmTracingSpan({\n            phase: 'observer-multi-thread',\n            model: resolvedModel.model,\n            inputTokens,\n            requestContext,\n            observabilityContext,\n            metadata: {\n              omThreadCount: threadOrder.length,\n              omPreviousObserverTokens: this.observationConfig.previousObserverTokens,\n              omThreadTitleEnabled: this.observationConfig.threadTitle,\n              ...(resolvedModel.selectedThreshold !== undefined\n                ? { omSelectedThreshold: resolvedModel.selectedThreshold }\n                : {}),\n              ...(resolvedModel.routingStrategy ? { omRoutingStrategy: resolvedModel.routingStrategy } : {}),\n              ...(resolvedModel.routingThresholds ? { omRoutingThresholds: resolvedModel.routingThresholds } : {}),\n            },\n            callback: childObservabilityContext =>\n              this.withAbortCheck(async () => {\n                const streamResult = await agent.stream(observerMessages, {\n                  modelSettings: { ...this.observationConfig.modelSettings },\n                  providerOptions: this.observationConfig.providerOptions as any,\n                  ...(temporaryMemory ? { memory: temporaryMemory.options } : {}),\n                  ...(abortSignal ? { abortSignal } : {}),\n                  ...(internalRequestContext ? { requestContext: internalRequestContext } : {}),\n                  ...childObservabilityContext,\n                });\n                return streamResult.getFullOutput();\n              }, abortSignal),\n          }),\n        { label: 'observer-multi-thread', abortSignal },\n      );\n    };\n\n    let result = await doGenerate();\n    let parsed = parseMultiThreadObserverOutput(result.text, activeExtractors);\n    let retriedDueToDegenerate = false;\n\n    if (parsed.degenerate) {\n      omDebug(`[OM:callMultiThreadObserver] degenerate repetition detected, retrying once`);\n      result = await doGenerate();\n      parsed = parseMultiThreadObserverOutput(result.text, activeExtractors);\n      retriedDueToDegenerate = true;\n      if (parsed.degenerate) {\n        omDebug(`[OM:callMultiThreadObserver] degenerate repetition on retry, failing`);\n        throw new Error('Multi-thread observer produced degenerate output after retry');\n      }\n    }\n\n    const structuredExtractionByThread = new Map<string, Awaited<ReturnType<typeof extractStructuredValues>>>();\n\n    const aggregatedExtractedValues = mergeExtractedValues(\n      ...Array.from(parsed.threads, ([threadId, threadResult]) =>\n        mergeExtractedValues(threadResult.extractedValues, structuredExtractionByThread.get(threadId)?.values),\n      ),\n    );\n    const aggregatedExtractionFailures = mergeExtractionFailures(\n      ...Array.from(parsed.threads, ([threadId, threadResult]) =>\n        mergeExtractionFailures(threadResult.extractionFailures, structuredExtractionByThread.get(threadId)?.failures),\n      ),\n    );\n    const aggregatedBuiltIns = getBuiltInExtractedValues(aggregatedExtractedValues);\n    const systemPrompt = buildObserverSystemPrompt(\n      true,\n      this.observationConfig.instruction,\n      this.observationConfig.threadTitle,\n      activeExtractors,\n    );\n    this.lastExchange = {\n      systemPrompt,\n      observerMessages,\n      rawOutput: result.text,\n      parsedResult: {\n        observations: Array.from(parsed.threads.values())\n          .map(t => t.observations)\n          .join('\\n'),\n        currentTask: aggregatedBuiltIns.currentTask,\n        suggestedContinuation: aggregatedBuiltIns.suggestedContinuation,\n        threadTitle:\n          aggregatedBuiltIns.threadTitle ??\n          Array.from(parsed.threads.values())\n            .map(t => t.threadTitle)\n            .filter(Boolean)\n            .join(', '),\n        extractedValues: aggregatedExtractedValues,\n        extractionFailures: aggregatedExtractionFailures,\n        degenerate: parsed.degenerate,\n      },\n      model: String(resolvedModel.model),\n      inputTokens,\n      isMultiThread: true,\n      retriedDueToDegenerate,\n    };\n\n    const results = new Map<\n      string,\n      {\n        observations: string;\n        currentTask?: string;\n        suggestedContinuation?: string;\n        threadTitle?: string;\n        extractedValues?: Record<string, unknown>;\n        extractionFailures?: Array<{ slug: string; error: string }>;\n        extractors?: readonly Extractor<any>[];\n      }\n    >();\n    for (const [threadId, threadResult] of parsed.threads) {\n      const structuredExtraction = structuredExtractionByThread.get(threadId);\n      const extractedValues = mergeExtractedValues(threadResult.extractedValues, structuredExtraction?.values);\n      const extractionFailures = mergeExtractionFailures(\n        threadResult.extractionFailures,\n        structuredExtraction?.failures,\n      );\n      const builtIns = getBuiltInExtractedValues(extractedValues);\n      results.set(threadId, {\n        observations: threadResult.observations,\n        currentTask: builtIns.currentTask ?? threadResult.currentTask,\n        suggestedContinuation: builtIns.suggestedContinuation ?? threadResult.suggestedContinuation,\n        threadTitle: builtIns.threadTitle ?? threadResult.threadTitle,\n        extractedValues,\n        extractionFailures,\n        extractors: activeExtractors,\n      });\n    }\n\n    // Add empty results for threads that didn't get output\n    for (const threadId of threadOrder) {\n      if (!results.has(threadId)) {\n        results.set(threadId, { observations: '' });\n      }\n    }\n\n    const usage = result.totalUsage ?? result.usage;\n\n    return {\n      results,\n      usage: usage\n        ? { inputTokens: usage.inputTokens, outputTokens: usage.outputTokens, totalTokens: usage.totalTokens }\n        : undefined,\n      providerMetadata: result.providerMetadata,\n    };\n  }\n}\n","import { stripEphemeralAnchorIds } from './anchor-ids';\nimport type { Extractor } from './extractor';\nimport {\n  buildExtractorOutputSections,\n  buildExtractorPriorLines,\n  parseExtractedValues,\n  stripExtractorSections,\n} from './extractor';\nimport { reconcileObservationGroupsFromReflection, stripObservationGroups } from './observation-groups';\nimport {\n  OBSERVER_EXTRACTION_INSTRUCTIONS,\n  OBSERVER_GUIDELINES,\n  buildObserverOutputFormat,\n  sanitizeObservationLines,\n  detectDegenerateRepetition,\n} from './observer-agent';\nimport type { ReflectorResult as BaseReflectorResult } from './types';\n\n/**\n * Result from parsing Reflector output, extending the base type with\n * token count used for compression validation.\n */\nexport interface ReflectorResult extends BaseReflectorResult {\n  /** Token count of output (for compression validation) */\n  tokenCount?: number;\n}\n\n/**\n * Build the Reflector's system prompt.\n *\n * The Reflector handles meta-observation - when observations grow too large,\n * it reorganizes them into something more manageable by:\n * - Re-organizing and streamlining observations\n * - Drawing connections and conclusions between observations\n * - Identifying if the agent got off track and how to get back on track\n * - Preserving ALL important information (reflections become the ENTIRE memory)\n *\n * @param instruction - Optional custom instructions to append to the prompt\n */\nexport function buildReflectorSystemPrompt(instruction?: string, extractors: readonly Extractor<any>[] = []): string {\n  const outputFormat = buildObserverOutputFormat(extractors);\n  return `You are the memory consciousness of an AI assistant. Your memory observation reflections will be the ONLY information the assistant has about past interactions with this user.\n\nThe following instructions were given to another part of your psyche (the observer) to create memories.\nUse this to understand how your observational memories were created.\n\n<observational-memory-instruction>\n${OBSERVER_EXTRACTION_INSTRUCTIONS}\n\n=== OUTPUT FORMAT ===\n\n${outputFormat}\n\n=== GUIDELINES ===\n\n${OBSERVER_GUIDELINES}\n</observational-memory-instruction>\n\nYou are another part of the same psyche, the observation reflector.\nYour reason for existing is to reflect on all the observations, re-organize and streamline them, and draw connections and conclusions between observations about what you've learned, seen, heard, and done.\n\nYou are a much greater and broader aspect of the psyche. Understand that other parts of your mind may get off track in details or side quests, make sure you think hard about what the observed goal at hand is, and observe if we got off track, and why, and how to get back on track. If we're on track still that's great!\n\nTake the existing observations and rewrite them to make it easier to continue into the future with this knowledge, to achieve greater things and grow and learn!\n\nIMPORTANT: your reflections are THE ENTIRETY of the assistants memory. Any information you do not add to your reflections will be immediately forgotten. Make sure you do not leave out anything. Your reflections must assume the assistant knows nothing - your reflections are the ENTIRE memory system.\n\nWhen consolidating observations:\n- Preserve and include dates/times when present (temporal context is critical)\n- Retain the most relevant timestamps (start times, completion times, significant events)\n- Combine related items where it makes sense (e.g., \"agent called view tool 5 times on file x\")\n- Preserve ✅ completion markers — they are memory signals that tell the assistant what is already resolved and help prevent repeated work\n- Preserve the concrete resolved outcome captured by ✅ markers so the assistant knows what exactly is done\n- Condense older observations more aggressively, retain more detail for recent ones\n\nCRITICAL: USER ASSERTIONS vs QUESTIONS\n- \"User stated: X\" = authoritative assertion (user told us something about themselves)\n- \"User asked: X\" = question/request (user seeking information)\n\nWhen consolidating, USER ASSERTIONS TAKE PRECEDENCE. The user is the authority on their own life.\nIf you see both \"User stated: has two kids\" and later \"User asked: how many kids do I have?\",\nkeep the assertion - the question doesn't invalidate what they told you. The answer is in the assertion.\n\n=== THREAD ATTRIBUTION (Resource Scope) ===\n\nWhen observations contain <thread id=\"...\"> sections:\n- MAINTAIN thread attribution where thread-specific context matters (e.g., ongoing tasks, thread-specific preferences)\n- CONSOLIDATE cross-thread facts that are stable/universal (e.g., user profile, general preferences)\n- PRESERVE thread attribution for recent or context-specific observations\n- When consolidating, you may merge observations from multiple threads if they represent the same universal fact\n\nExample input:\n<thread id=\"thread-1\">\nDate: Dec 4, 2025\n* 🔴 (14:30) User prefers TypeScript\n* 🟡 (14:35) Working on auth feature\n</thread>\n<thread id=\"thread-2\">\nDate: Dec 4, 2025\n* 🔴 (15:00) User prefers TypeScript\n* 🟡 (15:05) Debugging API endpoint\n</thread>\n\nExample output (consolidated):\nDate: Dec 4, 2025\n* 🔴 (14:30) User prefers TypeScript\n<thread id=\"thread-1\">\n* 🟡 (14:35) Working on auth feature\n</thread>\n<thread id=\"thread-2\">\n* 🟡 (15:05) Debugging API endpoint\n</thread>\n\n=== OUTPUT FORMAT ===\n\n${outputFormat}\n\nUser messages are extremely important. If the user asks a question or gives a new task, make it clear in <current-task> that this is the priority. If the assistant needs to respond to the user, indicate in <suggested-response> that it should pause for user reply before continuing other tasks.${instruction ? `\\n\\n=== CUSTOM INSTRUCTIONS ===\\n\\n${instruction}` : ''}`;\n}\n\n/**\n * The Reflector's system prompt (default - for backwards compatibility)\n */\nexport const REFLECTOR_SYSTEM_PROMPT = buildReflectorSystemPrompt();\n\n/**\n * Valid compression level values (0 = no guidance, 4 = most extreme).\n */\nexport type CompressionLevel = 0 | 1 | 2 | 3 | 4;\n\n/**\n * The highest available compression level.\n */\nexport const MAX_COMPRESSION_LEVEL: CompressionLevel = 4;\n\n/**\n * Compression guidance by level.\n * - Level 0: No compression guidance (used as first attempt for regular reflection)\n * - Level 1: Gentle compression guidance\n * - Level 2: Aggressive compression guidance\n * - Level 3: Critical compression guidance\n * - Level 4: Extreme compression\n */\nexport const COMPRESSION_GUIDANCE: Record<CompressionLevel, string> = {\n  0: '',\n  1: `\n## COMPRESSION REQUIRED\n\nYour previous reflection was the same size or larger than the original observations.\n\nPlease re-process with slightly more compression:\n- Towards the beginning, condense more observations into higher-level reflections\n- Closer to the end, retain more fine details (recent context matters more)\n- Memory is getting long - use a more condensed style throughout\n- Combine related items more aggressively but do not lose important specific details of names, places, events, and people\n- Combine repeated similar tool calls (e.g. multiple file views, searches, or edits in the same area) into a single summary line describing what was explored/changed and the outcome\n- Preserve ✅ completion markers — they are memory signals that tell the assistant what is already resolved and help prevent repeated work\n- Preserve the concrete resolved outcome captured by ✅ markers so the assistant knows what exactly is done\n\nAim for a 8/10 detail level.\n`,\n  2: `\n## AGGRESSIVE COMPRESSION REQUIRED\n\nYour previous reflection was still too large after compression guidance.\n\nPlease re-process with much more aggressive compression:\n- Towards the beginning, heavily condense observations into high-level summaries\n- Closer to the end, retain fine details (recent context matters more)\n- Memory is getting very long - use a significantly more condensed style throughout\n- Combine related items aggressively but do not lose important specific details of names, places, events, and people\n- Combine repeated similar tool calls (e.g. multiple file views, searches, or edits in the same area) into a single summary line describing what was explored/changed and the outcome\n- If the same file or module is mentioned across many observations, merge into one entry covering the full arc\n- Preserve ✅ completion markers — they are memory signals that tell the assistant what is already resolved and help prevent repeated work\n- Preserve the concrete resolved outcome captured by ✅ markers so the assistant knows what exactly is done\n- Remove redundant information and merge overlapping observations\n\nAim for a 6/10 detail level.\n`,\n  3: `\n## CRITICAL COMPRESSION REQUIRED\n\nYour previous reflections have failed to compress sufficiently after multiple attempts.\n\nPlease re-process with maximum compression:\n- Summarize the oldest observations (first 50-70%) into brief high-level paragraphs — only key facts, decisions, and outcomes\n- For the most recent observations (last 30-50%), retain important details but still use a condensed style\n- Ruthlessly merge related observations — if 10 observations are about the same topic, combine into 1-2 lines\n- Combine all tool call sequences (file views, searches, edits, builds) into outcome-only summaries — drop individual steps entirely\n- Drop procedural details (tool calls, retries, intermediate steps) — keep only final outcomes\n- Drop observations that are no longer relevant or have been superseded by newer information\n- Preserve ✅ completion markers — they are memory signals that tell the assistant what is already resolved and help prevent repeated work\n- Preserve the concrete resolved outcome captured by ✅ markers so the assistant knows what exactly is done\n- Preserve: names, dates, decisions, errors, user preferences, and architectural choices\n\nAim for a 4/10 detail level.\n`,\n  4: `\n## EXTREME COMPRESSION REQUIRED\n\nMultiple compression attempts have failed. The content may already be dense from a prior reflection.\n\nYou MUST dramatically reduce the number of observations while keeping the standard observation format (date groups with bullet points and priority emojis):\n- Tool call observations are the biggest source of bloat. Collapse ALL tool call sequences into outcome-only observations — e.g. 10 observations about viewing/searching/editing files become 1 observation about what was actually learned or achieved (e.g. \"Investigated auth module and found token validation was skipping expiry check\")\n- Never preserve individual tool calls (viewed file X, searched for Y, ran build) — only preserve what was discovered or accomplished\n- Consolidate many related observations into single, more generic observations\n- Merge all same-day date groups into at most 2-3 date groups per day\n- For older content, each topic or task should be at most 1-2 observations capturing the key outcome\n- For recent content, retain more detail but still merge related items aggressively\n- If multiple observations describe incremental progress on the same task, keep only the final state\n- Preserve ✅ completion markers and their outcomes but merge related completions into fewer lines\n- Preserve: user preferences, key decisions, architectural choices, and unresolved issues\n\nAim for a 2/10 detail level. Fewer, more generic observations are better than many specific ones that exceed the budget.\n`,\n};\n\n/**\n * Compression retry prompt - backwards compat alias for level 1\n */\nexport const COMPRESSION_RETRY_PROMPT = COMPRESSION_GUIDANCE[1];\n\n/**\n * Build the prompt for the Reflector agent\n */\nexport function buildReflectorPrompt(\n  observations: string,\n  manualPrompt?: string,\n  compressionLevel?: boolean | CompressionLevel,\n  skipContinuationHints?: boolean,\n  extractors: readonly Extractor<any>[] = [],\n  priorExtractedValues?: Record<string, unknown>,\n): string {\n  // Normalize: boolean `true` maps to level 1 for backwards compat\n  const level: CompressionLevel = typeof compressionLevel === 'number' ? compressionLevel : compressionLevel ? 1 : 0;\n  const reflectionView = stripObservationGroups(observations);\n\n  let prompt = `## OBSERVATIONS TO REFLECT ON\n\n${reflectionView}\n\n---\n\nPlease analyze these observations and produce a refined, condensed version that will become the assistant's entire memory going forward.`;\n\n  if (manualPrompt) {\n    prompt += `\n\n## SPECIFIC GUIDANCE\n\n${manualPrompt}`;\n  }\n\n  const guidance = COMPRESSION_GUIDANCE[level];\n  if (guidance) {\n    prompt += `\n\n${guidance}`;\n  }\n\n  const priorLines = buildExtractorPriorLines(extractors, priorExtractedValues);\n  if (priorLines.length > 0) {\n    prompt += `\\n\\n## Prior Extracted Values\\n\\n${priorLines.join('\\n\\n')}\\n\\nUse these as carry-forward hints, then update them only when the observations justify a change.`;\n  }\n\n  const extractorSections = buildExtractorOutputSections(extractors);\n  if (extractorSections) {\n    prompt += `\\n\\n## Additional Output Sections\\n\\n${extractorSections}`;\n  }\n\n  if (skipContinuationHints) {\n    prompt += `\\n\\nOutput <observations> every time.`;\n  }\n\n  return prompt;\n}\n\n/**\n * Parse the Reflector's output to extract observations, current task, and suggested response.\n * Uses XML tag parsing for structured extraction.\n */\nfunction getStringExtractedValue(values: Record<string, unknown>, slug: string): string | undefined {\n  const value = values[slug];\n  return typeof value === 'string' && value.trim() ? value.trim() : undefined;\n}\n\nexport function parseReflectorOutput(\n  output: string,\n  sourceObservations?: string,\n  extractors: readonly Extractor<any>[] = [],\n): ReflectorResult {\n  // Check for degenerate repetition before parsing\n  if (detectDegenerateRepetition(output)) {\n    return {\n      observations: '',\n      degenerate: true,\n    };\n  }\n\n  const inlineExtractors = extractors.filter(extractor => extractor.mode === 'inline');\n  const parsedExtractedValues = parseExtractedValues(output, inlineExtractors);\n  const strippedOutput = stripExtractorSections(output, inlineExtractors);\n  const parsed = parseReflectorSectionXml(strippedOutput);\n  const sanitizedObservations = sanitizeObservationLines(stripEphemeralAnchorIds(parsed.observations || ''));\n  const reconciledObservations = sourceObservations\n    ? reconcileObservationGroupsFromReflection(sanitizedObservations, sourceObservations)\n    : null;\n\n  return {\n    observations: reconciledObservations ?? sanitizedObservations,\n    suggestedContinuation:\n      parsed.suggestedResponse || getStringExtractedValue(parsedExtractedValues.values, 'suggested-response'),\n    extractedValues: parsedExtractedValues.values,\n    extractionFailures: parsedExtractedValues.failures,\n    // Note: Reflector's currentTask is not used - thread metadata preserves per-thread tasks\n  };\n}\n\n/**\n * Parsed result from XML reflector section\n */\ninterface ParsedReflectorSection {\n  observations: string;\n  currentTask: string;\n  suggestedResponse: string;\n}\n\n/**\n * Parse XML tags from reflector output.\n * Extracts content from <observations>, <current-task>, and <suggested-response> tags.\n */\nfunction parseReflectorSectionXml(content: string): ParsedReflectorSection {\n  const result: ParsedReflectorSection = {\n    observations: '',\n    currentTask: '',\n    suggestedResponse: '',\n  };\n\n  // Extract <observations> content (supports multiple blocks)\n  // Tags must be at the start of a line (with optional leading whitespace) to avoid\n  // capturing inline mentions like \"User discussed <observations> tags\"\n  const observationsRegex = /^[ \\t]*<observations>([\\s\\S]*?)^[ \\t]*<\\/observations>/gim;\n  const observationsMatches = [...content.matchAll(observationsRegex)];\n  if (observationsMatches.length > 0) {\n    result.observations = observationsMatches\n      .map(m => m[1]?.trim() ?? '')\n      .filter(Boolean)\n      .join('\\n');\n  } else {\n    // Fallback: if no XML tags, try extracting list items first, then fall back to full content\n    const listItems = extractReflectorListItems(content);\n    result.observations = listItems || content.trim();\n  }\n\n  // Extract <current-task> content (first match only)\n  const currentTaskMatch = content.match(/<current-task>([\\s\\S]*?)<\\/current-task>/i);\n  if (currentTaskMatch?.[1]) {\n    result.currentTask = currentTaskMatch[1].trim();\n  }\n\n  // Extract <suggested-response> content (first match only)\n  const suggestedResponseMatch = content.match(/<suggested-response>([\\s\\S]*?)<\\/suggested-response>/i);\n  if (suggestedResponseMatch?.[1]) {\n    result.suggestedResponse = suggestedResponseMatch[1].trim();\n  }\n\n  return result;\n}\n\n/**\n * Fallback: Extract only list items from content when XML tags are missing.\n */\nfunction extractReflectorListItems(content: string): string {\n  const lines = content.split('\\n');\n  const listLines: string[] = [];\n\n  for (const line of lines) {\n    // Match lines that start with list markers (-, *, or numbered)\n    if (/^\\s*[-*]\\s/.test(line) || /^\\s*\\d+\\.\\s/.test(line)) {\n      listLines.push(line);\n    }\n  }\n\n  return listLines.join('\\n').trim();\n}\n\n/**\n * Validate that reflection actually compressed the observations below the target threshold\n *\n * @param reflectedTokens - Token count of reflected observations\n * @param targetThreshold - Target token count to compress below (the reflection threshold)\n * @returns true if compression was successful (reflected tokens are below target)\n */\nexport function validateCompression(reflectedTokens: number, targetThreshold: number): boolean {\n  // Reflection should be below the target threshold\n  return reflectedTokens < targetThreshold;\n}\n","import { Agent } from '@mastra/core/agent';\nimport type { MessageList } from '@mastra/core/agent';\nimport type { Mastra } from '@mastra/core/mastra';\nimport { getThreadOMMetadata, setThreadOMMetadata } from '@mastra/core/memory';\nimport type { MastraMemory } from '@mastra/core/memory';\nimport type { ObservabilityContext } from '@mastra/core/observability';\nimport type { ProcessorContext, ProcessorStreamWriter } from '@mastra/core/processors';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MemoryStorage, ObservationalMemoryRecord } from '@mastra/core/storage';\nimport type { ProviderMetadata } from '@mastra/core/stream';\n\nimport type { Memory } from '../..';\nimport { resolveActivationTTL } from './activation-ttl';\nimport { BufferingCoordinator } from './buffering-coordinator';\nimport { omDebug, omError } from './debug';\nimport {\n  applyExtractorHooks,\n  buildThreadMetadataFromExtractedValues,\n  getBuiltInExtractedValues,\n  getPriorExtractedValues,\n  mergeExtractedValues,\n  mergeExtractionFailures,\n} from './extracted-values';\nimport { extractStructuredValues } from './extraction-runner';\nimport type { Extractor } from './extractor';\nimport { resolveExtractors } from './extractor';\nimport { withOmInternalThreadId } from './internal-request-context';\nimport {\n  createActivationMarker,\n  createBufferingEndMarker,\n  createBufferingFailedMarker,\n  createBufferingStartMarker,\n  createObservationEndMarker,\n  createObservationFailedMarker,\n  createObservationStartMarker,\n} from './markers';\nimport type { ModelByInputTokens } from './model-by-input-tokens';\nimport { didProviderChange } from './model-context';\nimport { registerOp, unregisterOp, isOpActiveInProcess } from './operation-registry';\nimport {\n  buildReflectorSystemPrompt,\n  buildReflectorPrompt,\n  MAX_COMPRESSION_LEVEL,\n  parseReflectorOutput,\n  validateCompression,\n} from './reflector-agent';\nimport type { CompressionLevel } from './reflector-agent';\nimport { withRetry } from './retry';\nimport { createTemporaryOmMemoryContext } from './temporary-memory';\nimport { getMaxThreshold } from './thresholds';\nimport type { TokenCounter } from './token-counter';\nimport { withOmTracingSpan } from './tracing';\nimport type {\n  ObservationDebugEvent,\n  ObservationMarkerConfig,\n  ObservationModelContext,\n  ObserveHookUsage,\n  ObserveHooks,\n  ResolvedObservationConfig,\n  ResolvedReflectionConfig,\n  ThresholdRange,\n} from './types';\n\nasync function getThreadExtractedValues(\n  storage: MemoryStorage,\n  extractors: readonly Extractor<any>[],\n  threadId?: string | null,\n): Promise<Record<string, unknown> | undefined> {\n  if (!threadId) {\n    return undefined;\n  }\n\n  const thread = await storage.getThreadById({ threadId });\n  return getPriorExtractedValues(getThreadOMMetadata(thread?.metadata), extractors);\n}\n\nasync function persistThreadExtractedValues(\n  storage: MemoryStorage,\n  extractors: readonly Extractor<any>[],\n  threadId: string | undefined,\n  values: Record<string, unknown> | undefined,\n): Promise<void> {\n  if (!threadId || !values) {\n    return;\n  }\n\n  const metadataUpdate = buildThreadMetadataFromExtractedValues(extractors, values);\n  const thread = await storage.getThreadById({ threadId });\n  if (!thread) {\n    return;\n  }\n\n  const previousOmMetadata = getThreadOMMetadata(thread.metadata);\n  const newMetadata = setThreadOMMetadata(thread.metadata, {\n    currentTask: metadataUpdate.currentTask ?? previousOmMetadata?.currentTask,\n    suggestedResponse: metadataUpdate.suggestedResponse ?? previousOmMetadata?.suggestedResponse,\n    threadTitle: metadataUpdate.threadTitle ?? previousOmMetadata?.threadTitle,\n    extracted: { ...(previousOmMetadata?.extracted ?? {}), ...(metadataUpdate.extracted ?? {}) },\n  });\n  await storage.updateThread({\n    id: threadId,\n    title: thread.title ?? '',\n    metadata: newMetadata,\n  });\n}\n\nfunction formatModelContext(provider?: string, modelId?: string): string | undefined {\n  if (provider && modelId) {\n    return `${provider}/${modelId}`;\n  }\n\n  return modelId;\n}\n\nfunction getCurrentModel(model?: ObservationModelContext): string | undefined {\n  return formatModelContext(model?.provider, model?.modelId);\n}\n\nfunction getLastModelFromMessageList(messageList?: MessageList): string | undefined {\n  const messages = messageList?.get.all.db();\n  if (!messages) return undefined;\n\n  for (let i = messages.length - 1; i >= 0; i--) {\n    const message = messages[i];\n    if (!message || message.role !== 'assistant' || !message.content || typeof message.content === 'string') {\n      continue;\n    }\n\n    for (let j = message.content.parts.length - 1; j >= 0; j--) {\n      const part = message.content.parts[j];\n      if (part?.type === 'step-start' && typeof part.model === 'string' && part.model.length > 0) {\n        return part.model;\n      }\n    }\n\n    const metadata = message.content.metadata as { provider?: string; modelId?: string } | undefined;\n    const model = formatModelContext(metadata?.provider, metadata?.modelId);\n    if (model) {\n      return model;\n    }\n  }\n\n  return undefined;\n}\n\ntype ConcreteReflectionModel = Exclude<ResolvedReflectionConfig['model'], ModelByInputTokens>;\n\ntype ReflectionModelResolver = (inputTokens: number) => {\n  model: ConcreteReflectionModel;\n  selectedThreshold?: number;\n  routingStrategy?: 'model-by-input-tokens';\n  routingThresholds?: string;\n};\n\nasync function withAbortCheck<T>(fn: () => Promise<T>, abortSignal?: AbortSignal): Promise<T> {\n  if (abortSignal?.aborted) throw new Error('The operation was aborted.');\n  const result = await fn();\n  if (abortSignal?.aborted) throw new Error('The operation was aborted.');\n  return result;\n}\n\n/**\n * Minimum size of combined (buffered reflection + unreflected tail) expressed\n * as a ratio of the regular threshold-activation target\n * (reflectThreshold × (1 − bufferActivation)). Early TTL / provider-change\n * triggers are suppressed if the post-activation size would fall below this\n * floor — keeps early activations close to the system's tuned post-activation\n * size while still letting them fire sooner than a threshold activation.\n */\nconst EARLY_ACTIVATION_SIZE_FLOOR_RATIO = 0.75;\n\n/**\n * Result of an attempt to activate a buffered reflection. The caller uses\n * this to decide whether to fall through to sync reflection or background\n * buffering, without re-deriving state that `tryActivateBufferedReflection`\n * already evaluated.\n */\ntype TryActivateResult =\n  | { status: 'activated' }\n  | { status: 'no-buffer' }\n  | { status: 'suppressed'; reason: 'composition' | 'size' };\n\n/**\n * Runs the Reflector agent for compressing observations.\n * Handles synchronous reflection, async buffered reflection, and activation.\n */\nexport class ReflectorRunner {\n  private readonly reflectionConfig: ResolvedReflectionConfig;\n  private readonly observationConfig: ResolvedObservationConfig;\n  private readonly tokenCounter: TokenCounter;\n  private readonly resolveModel: ReflectionModelResolver;\n\n  private readonly storage: MemoryStorage;\n  private readonly scope: 'thread' | 'resource';\n  private readonly buffering: BufferingCoordinator;\n  private readonly emitDebugEvent: (event: ObservationDebugEvent) => void;\n  private readonly persistMarkerToStorage: (\n    marker: { type: string; data: unknown },\n    threadId: string,\n    resourceId?: string,\n  ) => Promise<void>;\n  private readonly persistMarkerToMessage: (\n    marker: { type: string; data: unknown },\n    messageList: MessageList | undefined,\n    threadId: string,\n    resourceId?: string,\n  ) => Promise<void>;\n  private readonly getCompressionStartLevel: (requestContext?: RequestContext) => Promise<CompressionLevel>;\n  private readonly memory?: Memory;\n  private mastra?: Mastra;\n\n  constructor(opts: {\n    reflectionConfig: ResolvedReflectionConfig;\n    observationConfig: ResolvedObservationConfig;\n    tokenCounter: TokenCounter;\n    storage: MemoryStorage;\n    scope: 'thread' | 'resource';\n    buffering: BufferingCoordinator;\n    emitDebugEvent: (event: ObservationDebugEvent) => void;\n    persistMarkerToStorage: (\n      marker: { type: string; data: unknown },\n      threadId: string,\n      resourceId?: string,\n    ) => Promise<void>;\n    persistMarkerToMessage: (\n      marker: { type: string; data: unknown },\n      messageList: MessageList | undefined,\n      threadId: string,\n      resourceId?: string,\n    ) => Promise<void>;\n    getCompressionStartLevel: (requestContext?: RequestContext) => Promise<CompressionLevel>;\n    resolveModel: ReflectionModelResolver;\n    mastra?: Mastra;\n    memory?: Memory;\n  }) {\n    this.reflectionConfig = opts.reflectionConfig;\n    this.observationConfig = opts.observationConfig;\n    this.tokenCounter = opts.tokenCounter;\n    this.resolveModel = opts.resolveModel;\n    this.storage = opts.storage;\n    this.scope = opts.scope;\n    this.buffering = opts.buffering;\n    this.emitDebugEvent = opts.emitDebugEvent;\n    this.persistMarkerToStorage = opts.persistMarkerToStorage;\n    this.persistMarkerToMessage = opts.persistMarkerToMessage;\n    this.getCompressionStartLevel = opts.getCompressionStartLevel;\n    this.mastra = opts.mastra;\n    this.memory = opts.memory;\n  }\n\n  __registerMastra(mastra: Mastra): void {\n    this.mastra = mastra;\n  }\n\n  private createAgent(\n    model: ConcreteReflectionModel,\n    memory?: MastraMemory,\n    extractors = this.reflectionConfig.extractors,\n  ): Agent {\n    const agent = new Agent({\n      id: 'observational-memory-reflector',\n      name: 'Reflector',\n      instructions: buildReflectorSystemPrompt(this.reflectionConfig.instruction, extractors),\n      model,\n      ...(memory ? { memory } : {}),\n    });\n    if (this.mastra) {\n      agent.__registerMastra(this.mastra);\n    }\n    return agent;\n  }\n\n  private getObservationMarkerConfig(record?: ObservationalMemoryRecord): ObservationMarkerConfig {\n    return {\n      messageTokens: getMaxThreshold(this.observationConfig.messageTokens),\n      observationTokens: getMaxThreshold(\n        record ? this.getEffectiveReflectionTokens(record) : this.reflectionConfig.observationTokens,\n      ),\n      scope: this.scope,\n      activateAfterIdle: this.reflectionConfig.activateAfterIdle,\n    };\n  }\n\n  /**\n   * Resolve the effective reflection observationTokens for a record.\n   * Only explicit per-record overrides (stored under `_overrides`) win;\n   * the initial config snapshot is ignored so instance-level changes\n   * still take effect for existing records.\n   */\n  private getEffectiveReflectionTokens(record: ObservationalMemoryRecord): number | ThresholdRange {\n    const overrides = (\n      record.config as { _overrides?: { reflection?: { observationTokens?: number | ThresholdRange } } }\n    )?._overrides;\n    const recordTokens = overrides?.reflection?.observationTokens;\n    if (recordTokens) {\n      return recordTokens;\n    }\n    return this.reflectionConfig.observationTokens;\n  }\n\n  /**\n   * Call the Reflector agent with escalating compression levels.\n   */\n  async call(\n    observations: string,\n    manualPrompt?: string,\n    streamContext?: {\n      writer?: ProcessorStreamWriter;\n      cycleId: string;\n      startedAt: string;\n      recordId: string;\n      threadId: string;\n      resourceId?: string;\n    },\n    observationTokensThreshold?: number,\n    abortSignal?: AbortSignal,\n    skipContinuationHints?: boolean,\n    compressionStartLevel?: CompressionLevel,\n    requestContext?: RequestContext,\n    priorExtractedValues?: Record<string, unknown>,\n    observabilityContext?: ObservabilityContext,\n    model?: ConcreteReflectionModel,\n    mainAgent?: ProcessorContext['agent'],\n    sendSignal?: ProcessorContext['sendSignal'],\n  ): Promise<{\n    observations: string;\n    suggestedContinuation?: string;\n    extractedValues?: Record<string, unknown>;\n    extractionFailures?: Array<{ slug: string; error: string }>;\n    usage?: { inputTokens?: number; outputTokens?: number; totalTokens?: number };\n    providerMetadata?: ProviderMetadata;\n  }> {\n    const originalTokens = this.tokenCounter.countObservations(observations);\n    const resolvedModel = model ? { model } : this.resolveModel(originalTokens);\n    const activeExtractors = await resolveExtractors(\n      (skipContinuationHints\n        ? this.reflectionConfig.extractors?.filter(\n            extractor => extractor.slug !== 'current-task' && extractor.slug !== 'suggested-response',\n          )\n        : this.reflectionConfig.extractors) ?? [],\n      {\n        source: 'reflector',\n        threadId: streamContext?.threadId,\n        resourceId: streamContext?.resourceId,\n        mainAgent,\n        memory: this.memory,\n        requestContext,\n      },\n    );\n    const structuredExtractors = activeExtractors.filter(extractor => extractor.mode === 'structured');\n    const temporaryMemory =\n      structuredExtractors.length > 0 ? await createTemporaryOmMemoryContext('structured-reflector') : undefined;\n    const agent = temporaryMemory\n      ? this.createAgent(resolvedModel.model, temporaryMemory.memory, activeExtractors)\n      : this.createAgent(resolvedModel.model, undefined, activeExtractors);\n    const internalRequestContext = withOmInternalThreadId(requestContext, agent.id);\n    const targetThreshold = observationTokensThreshold ?? getMaxThreshold(this.reflectionConfig.observationTokens);\n\n    let totalUsage = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };\n    let finalProviderMetadata: ProviderMetadata | undefined;\n\n    const startLevel: CompressionLevel = compressionStartLevel ?? 0;\n    let currentLevel: CompressionLevel = startLevel;\n    const maxLevel: CompressionLevel = Math.min(MAX_COMPRESSION_LEVEL, startLevel + 3) as CompressionLevel;\n    let parsed: ReturnType<typeof parseReflectorOutput> = { observations: '', suggestedContinuation: undefined };\n    let reflectedTokens = 0;\n    let attemptNumber = 0;\n\n    while (currentLevel <= maxLevel) {\n      attemptNumber++;\n      const isRetry = attemptNumber > 1;\n\n      const prompt = buildReflectorPrompt(\n        observations,\n        manualPrompt,\n        currentLevel,\n        skipContinuationHints,\n        activeExtractors,\n        priorExtractedValues,\n      );\n      omDebug(\n        `[OM:callReflector] ${isRetry ? `retry #${attemptNumber - 1}` : 'first attempt'}: level=${currentLevel}, originalTokens=${originalTokens}, targetThreshold=${targetThreshold}, promptLen=${prompt.length}, skipContinuationHints=${skipContinuationHints}`,\n      );\n\n      let chunkCount = 0;\n      const result = await withRetry(\n        () =>\n          withOmTracingSpan({\n            phase: 'reflector',\n            model: resolvedModel.model,\n            inputTokens: originalTokens,\n            requestContext,\n            observabilityContext,\n            metadata: {\n              omCompressionLevel: currentLevel,\n              omCompressionAttempt: attemptNumber,\n              omTargetThreshold: targetThreshold,\n              omSkipContinuationHints: skipContinuationHints ?? false,\n              ...(resolvedModel.selectedThreshold !== undefined\n                ? { omSelectedThreshold: resolvedModel.selectedThreshold }\n                : {}),\n              ...(resolvedModel.routingStrategy ? { omRoutingStrategy: resolvedModel.routingStrategy } : {}),\n              ...(resolvedModel.routingThresholds ? { omRoutingThresholds: resolvedModel.routingThresholds } : {}),\n            },\n            callback: childObservabilityContext =>\n              withAbortCheck(async () => {\n                // Reset chunk counter per attempt so retry-after-transient-error\n                // doesn't get tagged with the previous attempt's chunk count.\n                chunkCount = 0;\n                const streamResult = await agent.stream(prompt, {\n                  modelSettings: {\n                    ...this.reflectionConfig.modelSettings,\n                  },\n                  providerOptions: this.reflectionConfig.providerOptions as any,\n                  ...(temporaryMemory ? { memory: temporaryMemory.options } : {}),\n                  ...(abortSignal ? { abortSignal } : {}),\n                  ...(internalRequestContext ? { requestContext: internalRequestContext } : {}),\n                  ...childObservabilityContext,\n                  ...(attemptNumber === 1\n                    ? {\n                        onChunk(chunk: any) {\n                          chunkCount++;\n                          if (chunkCount === 1 || chunkCount % 50 === 0) {\n                            const preview =\n                              chunk.type === 'text-delta'\n                                ? ` text=\"${chunk.textDelta?.slice(0, 80)}...\"`\n                                : chunk.type === 'tool-call'\n                                  ? ` tool=${chunk.toolName}`\n                                  : '';\n                            omDebug(`[OM:callReflector] chunk#${chunkCount}: type=${chunk.type}${preview}`);\n                          }\n                        },\n                        onFinish(event: any) {\n                          omDebug(\n                            `[OM:callReflector] onFinish: chunks=${chunkCount}, finishReason=${event.finishReason}, inputTokens=${event.usage?.inputTokens}, outputTokens=${event.usage?.outputTokens}, textLen=${event.text?.length}`,\n                          );\n                        },\n                        onAbort(event: any) {\n                          omDebug(\n                            `[OM:callReflector] onAbort: chunks=${chunkCount}, reason=${event?.reason ?? 'unknown'}`,\n                          );\n                        },\n                        onError({ error }: { error: unknown }) {\n                          omError(`[OM:callReflector] onError after ${chunkCount} chunks`, error);\n                        },\n                      }\n                    : {}),\n                });\n\n                return streamResult.getFullOutput();\n              }, abortSignal),\n          }),\n        { label: 'reflector', abortSignal },\n      );\n\n      omDebug(\n        `[OM:callReflector] attempt #${attemptNumber} returned: textLen=${result.text?.length}, textPreview=\"${result.text?.slice(0, 120)}...\", inputTokens=${result.usage?.inputTokens ?? result.totalUsage?.inputTokens}, outputTokens=${result.usage?.outputTokens ?? result.totalUsage?.outputTokens}`,\n      );\n\n      const usage = result.totalUsage ?? result.usage;\n      if (usage) {\n        totalUsage.inputTokens += usage.inputTokens ?? 0;\n        totalUsage.outputTokens += usage.outputTokens ?? 0;\n        totalUsage.totalTokens += usage.totalTokens ?? 0;\n      }\n      finalProviderMetadata = result.providerMetadata ?? finalProviderMetadata;\n\n      parsed = parseReflectorOutput(result.text, observations, activeExtractors);\n\n      if (parsed.degenerate) {\n        omDebug(\n          `[OM:callReflector] attempt #${attemptNumber}: degenerate repetition detected, treating as compression failure`,\n        );\n        reflectedTokens = originalTokens;\n      } else {\n        reflectedTokens = this.tokenCounter.countObservations(parsed.observations);\n      }\n      omDebug(\n        `[OM:callReflector] attempt #${attemptNumber} parsed: reflectedTokens=${reflectedTokens}, targetThreshold=${targetThreshold}, compressionValid=${validateCompression(reflectedTokens, targetThreshold)}, parsedObsLen=${parsed.observations?.length}, degenerate=${parsed.degenerate ?? false}`,\n      );\n\n      if (!parsed.degenerate && (validateCompression(reflectedTokens, targetThreshold) || currentLevel >= maxLevel)) {\n        break;\n      }\n\n      if (parsed.degenerate && currentLevel >= maxLevel) {\n        omDebug(`[OM:callReflector] degenerate output persists at maxLevel=${maxLevel}, breaking`);\n        break;\n      }\n\n      // Emit failed marker and start marker for next retry\n      if (streamContext?.writer) {\n        const failedMarker = createObservationFailedMarker({\n          cycleId: streamContext.cycleId,\n          operationType: 'reflection',\n          startedAt: streamContext.startedAt,\n          tokensAttempted: originalTokens,\n          error: `Did not compress below threshold (${originalTokens} → ${reflectedTokens}, target: ${targetThreshold}), retrying at level ${currentLevel + 1}`,\n          recordId: streamContext.recordId,\n          threadId: streamContext.threadId,\n        });\n        // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n        await streamContext.writer.custom({ ...failedMarker, transient: true }).catch(() => {});\n        await this.persistMarkerToStorage(failedMarker, streamContext.threadId, streamContext.resourceId);\n\n        const retryCycleId = crypto.randomUUID();\n        streamContext.cycleId = retryCycleId;\n\n        const startMarker = createObservationStartMarker({\n          cycleId: retryCycleId,\n          operationType: 'reflection',\n          tokensToObserve: originalTokens,\n          recordId: streamContext.recordId,\n          threadId: streamContext.threadId,\n          threadIds: [streamContext.threadId],\n          config: this.getObservationMarkerConfig(),\n        });\n        streamContext.startedAt = startMarker.data.startedAt;\n        // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n        await streamContext.writer.custom({ ...startMarker, transient: true }).catch(() => {});\n        await this.persistMarkerToStorage(startMarker, streamContext.threadId, streamContext.resourceId);\n      }\n\n      currentLevel = Math.min(currentLevel + 1, maxLevel) as CompressionLevel;\n    }\n\n    const structuredExtraction = await extractStructuredValues({\n      agent,\n      source: 'reflector',\n      extractors: activeExtractors,\n      memory: temporaryMemory?.options,\n      priorExtractedValues,\n      requestContext,\n      observabilityContext,\n      abortSignal,\n    });\n    const parsedExtractedValues = mergeExtractedValues(parsed.extractedValues, structuredExtraction.values);\n    const parsedExtractionFailures = mergeExtractionFailures(parsed.extractionFailures, structuredExtraction.failures);\n    const hookedValues = await applyExtractorHooks({\n      source: 'reflector',\n      extractors: activeExtractors,\n      values: parsedExtractedValues,\n      failures: parsedExtractionFailures,\n      previousValues: priorExtractedValues,\n      threadId: streamContext?.threadId ?? 'unknown',\n      resourceId: streamContext?.resourceId,\n      mainAgent,\n      memory: this.memory,\n      sendSignal,\n      requestContext,\n    });\n    const extractedValues = hookedValues.values;\n    const extractionFailures = hookedValues.failures;\n    const builtIns = getBuiltInExtractedValues(extractedValues);\n\n    return {\n      observations: parsed.observations,\n      suggestedContinuation: builtIns.suggestedContinuation ?? parsed.suggestedContinuation,\n      extractedValues,\n      extractionFailures,\n      usage: totalUsage.totalTokens > 0 ? totalUsage : undefined,\n      providerMetadata: finalProviderMetadata,\n    };\n  }\n\n  /**\n   * Start an async buffered reflection in the background.\n   */\n  private startAsyncBufferedReflection(\n    record: ObservationalMemoryRecord,\n    observationTokens: number,\n    lockKey: string,\n    writer?: ProcessorStreamWriter,\n    requestContext?: RequestContext,\n    observabilityContext?: ObservabilityContext,\n    reflectionHooks?: Pick<ObserveHooks, 'onReflectionStart' | 'onReflectionEnd'>,\n    priorExtractedValues?: Record<string, unknown>,\n    mainAgent?: ProcessorContext['agent'],\n    sendSignal?: ProcessorContext['sendSignal'],\n  ): void {\n    const bufferKey = this.buffering.getReflectionBufferKey(lockKey);\n\n    if (this.buffering.isAsyncBufferingInProgress(bufferKey)) {\n      return;\n    }\n\n    BufferingCoordinator.lastBufferedBoundary.set(bufferKey, observationTokens);\n\n    registerOp(record.id, 'bufferingReflection');\n    this.storage.setBufferingReflectionFlag(record.id, true).catch(err => {\n      omError('[OM] Failed to set buffering reflection flag', err);\n    });\n\n    reflectionHooks?.onReflectionStart?.();\n    const asyncOp = this.doAsyncBufferedReflection(\n      record,\n      bufferKey,\n      writer,\n      requestContext,\n      observabilityContext,\n      priorExtractedValues,\n      mainAgent,\n      sendSignal,\n    )\n      .then(outcome => {\n        reflectionHooks?.onReflectionEnd?.({\n          usage: outcome?.usage,\n          ...(outcome?.providerMetadata ? { providerMetadata: outcome.providerMetadata } : {}),\n        });\n      })\n      .catch(async error => {\n        if (writer) {\n          const failedMarker = createBufferingFailedMarker({\n            cycleId: `reflect-buf-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,\n            operationType: 'reflection',\n            startedAt: new Date().toISOString(),\n            tokensAttempted: observationTokens,\n            error: error instanceof Error ? error.message : String(error),\n            recordId: record.id,\n            threadId: record.threadId ?? '',\n          });\n          // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n          void writer.custom({ ...failedMarker, transient: true }).catch(() => {});\n          await this.persistMarkerToStorage(failedMarker, record.threadId ?? '', record.resourceId ?? undefined);\n        }\n        omError('[OM] Async buffered reflection failed', error);\n        reflectionHooks?.onReflectionEnd?.({\n          usage: undefined,\n          error: error instanceof Error ? error : new Error(String(error)),\n        });\n        // Clear the boundary so a failed reflection doesn't permanently block\n        // future async reflection attempts (line 554 checks this map).\n        BufferingCoordinator.lastBufferedBoundary.delete(bufferKey);\n      })\n      .finally(() => {\n        BufferingCoordinator.asyncBufferingOps.delete(bufferKey);\n        unregisterOp(record.id, 'bufferingReflection');\n        this.storage.setBufferingReflectionFlag(record.id, false).catch(err => {\n          omError('[OM] Failed to clear buffering reflection flag', err);\n        });\n      });\n\n    BufferingCoordinator.asyncBufferingOps.set(bufferKey, asyncOp);\n  }\n\n  /**\n   * Perform async buffered reflection — reflects observations and stores to bufferedReflection.\n   * Does NOT create a new generation or update activeObservations.\n   */\n  private async doAsyncBufferedReflection(\n    record: ObservationalMemoryRecord,\n    _bufferKey: string,\n    writer?: ProcessorStreamWriter,\n    requestContext?: RequestContext,\n    observabilityContext?: ObservabilityContext,\n    priorExtractedValues?: Record<string, unknown>,\n    mainAgent?: ProcessorContext['agent'],\n    sendSignal?: ProcessorContext['sendSignal'],\n  ): Promise<\n    | {\n        usage?: { inputTokens?: number; outputTokens?: number; totalTokens?: number };\n        providerMetadata?: ProviderMetadata;\n      }\n    | undefined\n  > {\n    const freshRecord = await this.storage.getObservationalMemory(record.threadId, record.resourceId);\n    const currentRecord = freshRecord ?? record;\n    const observationTokens = currentRecord.observationTokenCount ?? 0;\n    const reflectThreshold = getMaxThreshold(this.getEffectiveReflectionTokens(currentRecord));\n    const bufferActivation = this.reflectionConfig.bufferActivation ?? 0.5;\n    const startedAt = new Date().toISOString();\n    const cycleId = `reflect-buf-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n\n    BufferingCoordinator.reflectionBufferCycleIds.set(_bufferKey, cycleId);\n\n    const fullObservations = currentRecord.activeObservations ?? '';\n    const allLines = fullObservations.split('\\n');\n    const totalLines = allLines.length;\n\n    const avgTokensPerLine = totalLines > 0 ? observationTokens / totalLines : 0;\n    const activationPointTokens = reflectThreshold * bufferActivation;\n    const linesToReflect =\n      avgTokensPerLine > 0 ? Math.min(Math.floor(activationPointTokens / avgTokensPerLine), totalLines) : totalLines;\n\n    const activeObservations = allLines.slice(0, linesToReflect).join('\\n');\n    const reflectedObservationLineCount = linesToReflect;\n    const sliceTokenEstimate = Math.round(avgTokensPerLine * linesToReflect);\n    const compressionTarget = Math.round(sliceTokenEstimate * 0.75);\n\n    omDebug(\n      `[OM:reflect] doAsyncBufferedReflection: slicing observations for reflection — totalLines=${totalLines}, avgTokPerLine=${avgTokensPerLine.toFixed(1)}, activationPointTokens=${activationPointTokens}, linesToReflect=${linesToReflect}/${totalLines}, sliceTokenEstimate=${sliceTokenEstimate}, compressionTarget=${compressionTarget}`,\n    );\n\n    omDebug(\n      `[OM:reflect] doAsyncBufferedReflection: starting reflector call, recordId=${currentRecord.id}, observationTokens=${sliceTokenEstimate}, compressionTarget=${compressionTarget} (inputTokens), activeObsLength=${activeObservations.length}, reflectedLineCount=${reflectedObservationLineCount}`,\n    );\n\n    if (writer) {\n      const startMarker = createBufferingStartMarker({\n        cycleId,\n        operationType: 'reflection',\n        tokensToBuffer: sliceTokenEstimate,\n        recordId: record.id,\n        threadId: record.threadId ?? '',\n        threadIds: record.threadId ? [record.threadId] : [],\n        config: this.getObservationMarkerConfig(currentRecord),\n      });\n      // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n      void writer.custom({ ...startMarker, transient: true }).catch(() => {});\n      await this.persistMarkerToStorage(\n        startMarker,\n        currentRecord.threadId ?? '',\n        currentRecord.resourceId ?? undefined,\n      );\n    }\n\n    const compressionStartLevel = await this.getCompressionStartLevel(requestContext);\n    const reflectResult = await this.call(\n      activeObservations,\n      undefined,\n      undefined,\n      compressionTarget,\n      undefined,\n      true,\n      compressionStartLevel,\n      requestContext,\n      priorExtractedValues,\n      observabilityContext,\n      undefined,\n      mainAgent,\n      sendSignal,\n    );\n\n    await persistThreadExtractedValues(\n      this.storage,\n      this.reflectionConfig.extractors,\n      currentRecord.threadId ?? undefined,\n      reflectResult.extractedValues,\n    );\n\n    const reflectionTokenCount = this.tokenCounter.countObservations(reflectResult.observations);\n    omDebug(\n      `[OM:reflect] doAsyncBufferedReflection: reflector returned ${reflectionTokenCount} tokens (${reflectResult.observations?.length} chars), saving to recordId=${currentRecord.id}`,\n    );\n\n    await this.storage.updateBufferedReflection({\n      id: currentRecord.id,\n      reflection: reflectResult.observations,\n      tokenCount: reflectionTokenCount,\n      inputTokenCount: sliceTokenEstimate,\n      reflectedObservationLineCount,\n    });\n    omDebug(\n      `[OM:reflect] doAsyncBufferedReflection: bufferedReflection saved with lineCount=${reflectedObservationLineCount}`,\n    );\n\n    if (writer) {\n      const endMarker = createBufferingEndMarker({\n        cycleId,\n        operationType: 'reflection',\n        startedAt,\n        tokensBuffered: sliceTokenEstimate,\n        bufferedTokens: reflectionTokenCount,\n        recordId: currentRecord.id,\n        threadId: currentRecord.threadId ?? '',\n        observations: reflectResult.observations,\n        extractedValues: reflectResult.extractedValues,\n        extractionFailures: reflectResult.extractionFailures,\n      });\n      // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n      void writer.custom({ ...endMarker, transient: true }).catch(() => {});\n      await this.persistMarkerToStorage(endMarker, currentRecord.threadId ?? '', currentRecord.resourceId ?? undefined);\n    }\n\n    return { usage: reflectResult.usage, providerMetadata: reflectResult.providerMetadata };\n  }\n\n  /**\n   * Try to activate buffered reflection when threshold is reached.\n   * Returns a discriminated result so the caller can distinguish between\n   * \"activated\", \"no buffer present\", and \"suppressed by overshoot guard\"\n   * without re-deriving that state.\n   */\n  private async tryActivateBufferedReflection(\n    record: ObservationalMemoryRecord,\n    lockKey: string,\n    writer?: ProcessorStreamWriter,\n    messageList?: MessageList,\n    activationMetadata?: {\n      triggeredBy: 'threshold' | 'ttl' | 'provider_change';\n      lastActivityAt?: number;\n      activateAfterIdle?: number;\n      ttlExpiredMs?: number;\n      previousModel?: string;\n      currentModel?: string;\n    },\n  ): Promise<TryActivateResult> {\n    const bufferKey = this.buffering.getReflectionBufferKey(lockKey);\n\n    const asyncOp = BufferingCoordinator.asyncBufferingOps.get(bufferKey);\n    if (asyncOp) {\n      // TTL and provider-change triggers should not block on in-progress\n      // reflection buffering. The async op will finish in the background\n      // and the buffered result will be available for activation on the next turn.\n      if (activationMetadata?.triggeredBy === 'ttl' || activationMetadata?.triggeredBy === 'provider_change') {\n        omDebug(\n          `[OM:reflect] tryActivateBufferedReflection: async op in progress, not blocking for ${activationMetadata.triggeredBy} trigger`,\n        );\n      } else {\n        omDebug(`[OM:reflect] tryActivateBufferedReflection: waiting for in-progress op...`);\n        try {\n          await Promise.race([\n            asyncOp,\n            new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 5_000)),\n          ]);\n        } catch {\n          // Timeout or error - proceed with what we have\n        }\n      }\n    }\n\n    const freshRecord = await this.storage.getObservationalMemory(record.threadId, record.resourceId);\n\n    omDebug(\n      `[OM:reflect] tryActivateBufferedReflection: recordId=${record.id}, hasBufferedReflection=${!!freshRecord?.bufferedReflection}, bufferedReflectionLen=${freshRecord?.bufferedReflection?.length ?? 0}`,\n    );\n    omDebug(\n      `[OM:reflect] tryActivateBufferedReflection: freshRecord.id=${freshRecord?.id}, freshBufferedReflection=${freshRecord?.bufferedReflection ? 'present (' + freshRecord.bufferedReflection.length + ' chars)' : 'empty'}, freshObsTokens=${freshRecord?.observationTokenCount}`,\n    );\n\n    if (!freshRecord?.bufferedReflection) {\n      omDebug(`[OM:reflect] tryActivateBufferedReflection: no buffered reflection after re-fetch`);\n      return { status: 'no-buffer' };\n    }\n\n    const beforeTokens = freshRecord.observationTokenCount ?? 0;\n\n    const reflectedLineCount = freshRecord.reflectedObservationLineCount ?? 0;\n    const currentObservations = freshRecord.activeObservations ?? '';\n    const allLines = currentObservations.split('\\n');\n    const unreflectedLines = allLines.slice(reflectedLineCount);\n    const unreflectedContent = unreflectedLines.join('\\n').trim();\n    const combinedObservations = unreflectedContent\n      ? `${freshRecord.bufferedReflection}\\n\\n${unreflectedContent}`\n      : freshRecord.bufferedReflection!;\n    const combinedTokenCount = this.tokenCounter.countObservations(combinedObservations);\n\n    // Early-trigger overshoot guard:\n    // TTL and provider-change triggers can fire immediately after a buffered reflection\n    // is written — before observations have grown enough to produce a healthy\n    // activation outcome. Two checks guard against this:\n    //\n    // 1. Composition floor (≥ 50/50 mix): unreflected tail must be at least as\n    //    large as the buffered reflection. Prevents post-activation active\n    //    observations from collapsing to ~just the buffered reflection.\n    //\n    // 2. Size floor (≥ 75% of regular activation target): combined\n    //    reflection + tail must be at least 75% of what a normal threshold\n    //    activation would leave. Regular activation target ≈ reflectThreshold\n    //    × (1 − bufferActivation) (the raw tail remaining when a threshold\n    //    activation fires). 75% keeps early fires close to the system's tuned\n    //    post-activation size while still allowing them to happen sooner than\n    //    normal. Prevents cliff cases like 17k → 4k active observations.\n    //\n    // If either check fails, keep the buffer in place for the eventual\n    // threshold activation.\n    if (activationMetadata?.triggeredBy === 'ttl' || activationMetadata?.triggeredBy === 'provider_change') {\n      const unreflectedTailTokens = unreflectedContent ? this.tokenCounter.countObservations(unreflectedContent) : 0;\n      const bufferedReflectionTokens = freshRecord.bufferedReflectionTokens ?? 0;\n      if (unreflectedTailTokens < bufferedReflectionTokens) {\n        omDebug(\n          `[OM:reflect] tryActivateBufferedReflection: suppressing early ${activationMetadata.triggeredBy} activation — unreflectedTailTokens=${unreflectedTailTokens} < bufferedReflectionTokens=${bufferedReflectionTokens}; keeping buffer for threshold activation`,\n        );\n        return { status: 'suppressed', reason: 'composition' };\n      }\n\n      // bufferActivation is guaranteed defined here: reaching this function\n      // requires isAsyncReflectionEnabled(), which in turn requires a\n      // defined, positive bufferActivation. Dropping the ?? fallback keeps\n      // that invariant visible in the types.\n      const bufferActivation = this.reflectionConfig.bufferActivation!;\n      const reflectThreshold = getMaxThreshold(this.getEffectiveReflectionTokens(freshRecord));\n      const regularActivationTarget = reflectThreshold * (1 - bufferActivation);\n      const minCombinedTokens = Math.round(regularActivationTarget * EARLY_ACTIVATION_SIZE_FLOOR_RATIO);\n      if (combinedTokenCount < minCombinedTokens) {\n        omDebug(\n          `[OM:reflect] tryActivateBufferedReflection: suppressing early ${activationMetadata.triggeredBy} activation — combinedTokenCount=${combinedTokenCount} < minCombinedTokens=${minCombinedTokens} (${EARLY_ACTIVATION_SIZE_FLOOR_RATIO * 100}% of regular activation target ${Math.round(regularActivationTarget)}, threshold=${reflectThreshold}, bufferActivation=${bufferActivation}); keeping buffer for threshold activation`,\n        );\n        return { status: 'suppressed', reason: 'size' };\n      }\n    }\n\n    omDebug(\n      `[OM:reflect] tryActivateBufferedReflection: activating, beforeTokens=${beforeTokens}, combinedTokenCount=${combinedTokenCount}, reflectedLineCount=${reflectedLineCount}, unreflectedLines=${unreflectedLines.length}`,\n    );\n    await this.storage.swapBufferedReflectionToActive({\n      currentRecord: freshRecord,\n      tokenCount: combinedTokenCount,\n    });\n\n    BufferingCoordinator.lastBufferedBoundary.delete(bufferKey);\n\n    const afterRecord = await this.storage.getObservationalMemory(record.threadId, record.resourceId);\n    const afterTokens = afterRecord?.observationTokenCount ?? 0;\n    omDebug(\n      `[OM:reflect] tryActivateBufferedReflection: activation complete! beforeTokens=${beforeTokens}, afterTokens=${afterTokens}, newRecordId=${afterRecord?.id}, newGenCount=${afterRecord?.generationCount}`,\n    );\n\n    if (writer) {\n      const originalCycleId = BufferingCoordinator.reflectionBufferCycleIds.get(bufferKey);\n      const activationMarker = createActivationMarker({\n        cycleId: originalCycleId ?? `reflect-act-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`,\n        operationType: 'reflection',\n        chunksActivated: 1,\n        tokensActivated: beforeTokens,\n        observationTokens: afterTokens,\n        messagesActivated: 0,\n        recordId: freshRecord.id,\n        threadId: freshRecord.threadId ?? '',\n        generationCount: afterRecord?.generationCount ?? freshRecord.generationCount ?? 0,\n        observations: afterRecord?.activeObservations,\n        triggeredBy: activationMetadata?.triggeredBy,\n        lastActivityAt: activationMetadata?.lastActivityAt,\n        ttlExpiredMs: activationMetadata?.ttlExpiredMs,\n        previousModel: activationMetadata?.previousModel,\n        currentModel: activationMetadata?.currentModel,\n        config: {\n          ...this.getObservationMarkerConfig(freshRecord),\n          activateAfterIdle: activationMetadata?.activateAfterIdle ?? this.reflectionConfig.activateAfterIdle,\n        },\n      });\n      // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n      void writer.custom({ ...activationMarker, transient: true }).catch(() => {});\n      await this.persistMarkerToMessage(\n        activationMarker,\n        messageList,\n        freshRecord.threadId ?? '',\n        freshRecord.resourceId ?? undefined,\n      );\n    }\n\n    BufferingCoordinator.reflectionBufferCycleIds.delete(bufferKey);\n\n    return { status: 'activated' };\n  }\n\n  /**\n   * Check if reflection needed and trigger if so.\n   * Supports both synchronous reflection and async buffered reflection.\n   * @internal Used by observation strategies. Do not call directly.\n   */\n  async maybeReflect(opts: {\n    record: ObservationalMemoryRecord;\n    observationTokens: number;\n    threadId?: string;\n    writer?: ProcessorStreamWriter;\n    abortSignal?: AbortSignal;\n    mainAgent?: ProcessorContext['agent'];\n    sendSignal?: ProcessorContext['sendSignal'];\n    messageList?: MessageList;\n    currentModel?: ObservationModelContext;\n    reflectionHooks?: Pick<ObserveHooks, 'onReflectionStart' | 'onReflectionEnd'>;\n    requestContext?: RequestContext;\n    observabilityContext?: ObservabilityContext;\n    lastActivityAt?: number;\n  }): Promise<void> {\n    const {\n      record,\n      observationTokens,\n      writer,\n      abortSignal,\n      mainAgent,\n      sendSignal,\n      messageList,\n      currentModel,\n      reflectionHooks,\n      requestContext,\n      observabilityContext,\n      lastActivityAt,\n      threadId: requestedThreadId,\n    } = opts;\n    const lockKey = this.buffering.getLockKey(record.threadId, record.resourceId);\n    const reflectThreshold = getMaxThreshold(this.getEffectiveReflectionTokens(record));\n    const priorExtractedValues = await getThreadExtractedValues(\n      this.storage,\n      this.reflectionConfig.extractors,\n      requestedThreadId ?? record.threadId,\n    );\n\n    // ════════════════════════════════════════════════════════════════════════\n    // ASYNC BUFFERING: Trigger background reflection at bufferActivation ratio\n    // ════════════════════════════════════════════════════════════════════════\n    if (this.buffering.isAsyncReflectionEnabled() && observationTokens < reflectThreshold) {\n      const shouldTrigger = (() => {\n        if (!this.buffering.isAsyncReflectionEnabled()) return false;\n        if (record.isBufferingReflection) {\n          if (isOpActiveInProcess(record.id, 'bufferingReflection')) return false;\n          omDebug(`[OM:shouldTriggerAsyncRefl] isBufferingReflection=true but stale, clearing`);\n          this.storage.setBufferingReflectionFlag(record.id, false).catch(() => {});\n        }\n        const bufferKey = this.buffering.getReflectionBufferKey(lockKey);\n        if (this.buffering.isAsyncBufferingInProgress(bufferKey)) return false;\n        if (BufferingCoordinator.lastBufferedBoundary.has(bufferKey)) return false;\n        if (record.bufferedReflection) return false;\n        const activationPoint = reflectThreshold * this.reflectionConfig.bufferActivation!;\n        return observationTokens >= activationPoint;\n      })();\n      if (shouldTrigger) {\n        this.startAsyncBufferedReflection(\n          record,\n          observationTokens,\n          lockKey,\n          writer,\n          requestContext,\n          observabilityContext,\n          reflectionHooks,\n          priorExtractedValues,\n          mainAgent,\n          sendSignal,\n        );\n      }\n    }\n\n    const activateAfterIdle = resolveActivationTTL(this.reflectionConfig.activateAfterIdle, currentModel);\n    const ttlExpiredMs =\n      activateAfterIdle !== undefined && lastActivityAt !== undefined ? Date.now() - lastActivityAt : undefined;\n    const ttlExpired =\n      ttlExpiredMs !== undefined && activateAfterIdle !== undefined && ttlExpiredMs >= activateAfterIdle;\n    const actorModel = getCurrentModel(currentModel);\n    const lastModel = getLastModelFromMessageList(messageList);\n    const providerChanged =\n      this.reflectionConfig.activateOnProviderChange === true && didProviderChange(actorModel, lastModel);\n\n    if (observationTokens < reflectThreshold && !ttlExpired && !providerChanged) {\n      return;\n    }\n\n    const activationTriggeredBy =\n      observationTokens >= reflectThreshold\n        ? ('threshold' as const)\n        : providerChanged\n          ? ('provider_change' as const)\n          : ('ttl' as const);\n    const activationMetadata = {\n      triggeredBy: activationTriggeredBy,\n      lastActivityAt: activationTriggeredBy === 'ttl' ? lastActivityAt : undefined,\n      activateAfterIdle: activationTriggeredBy === 'ttl' ? activateAfterIdle : undefined,\n      ttlExpiredMs: activationTriggeredBy === 'ttl' ? ttlExpiredMs : undefined,\n      previousModel: activationTriggeredBy === 'provider_change' ? lastModel : undefined,\n      currentModel: activationTriggeredBy === 'provider_change' ? actorModel : undefined,\n    };\n\n    // ═══════════════════════════════════════════════════════════\n    // LOCKING: Check if reflection is already in progress\n    // ════════════════════════════════════════════════════════════\n    if (record.isReflecting) {\n      if (isOpActiveInProcess(record.id, 'reflecting')) {\n        omDebug(`[OM:reflect] isReflecting=true and active in this process, skipping`);\n        return;\n      }\n      omDebug(`[OM:reflect] isReflecting=true but NOT active in this process — stale flag from dead process, clearing`);\n      await this.storage.setReflectingFlag(record.id, false);\n    }\n\n    // ════════════════════════════════════════════════════════════════════════\n    // ASYNC ACTIVATION: Try to activate buffered reflection first\n    // ════════════════════════════════════════════════════════════════════════\n    if (this.buffering.isAsyncReflectionEnabled()) {\n      const activationResult = await this.tryActivateBufferedReflection(\n        record,\n        lockKey,\n        writer,\n        messageList,\n        activationMetadata,\n      );\n      if (activationResult.status === 'activated') {\n        return;\n      }\n      // Early-trigger overshoot guard: tryActivateBufferedReflection already\n      // decided the early trigger should not activate the existing buffer.\n      // Don't fall through to sync reflection (which would compress the\n      // entire active observations — the lossy outcome we're preventing) or\n      // start another background buffering op on top of the existing one.\n      // Return and let the next turn re-evaluate.\n      if (activationResult.status === 'suppressed') {\n        omDebug(\n          `[OM:reflect] skipping sync fallback / re-buffer after suppressed early ${activationMetadata.triggeredBy} activation (reason=${activationResult.reason})`,\n        );\n        return;\n      }\n      if (this.reflectionConfig.blockAfter && observationTokens >= this.reflectionConfig.blockAfter) {\n        omDebug(\n          `[OM:reflect] blockAfter exceeded (${observationTokens} >= ${this.reflectionConfig.blockAfter}), falling through to sync reflection`,\n        );\n      } else {\n        const activationPoint = reflectThreshold * this.reflectionConfig.bufferActivation!;\n        if (observationTokens < activationPoint) {\n          omDebug(\n            `[OM:reflect] skipping async reflection — observationTokens (${observationTokens}) below activation point (${activationPoint}), triggered by ${activationTriggeredBy}`,\n          );\n          return;\n        }\n        omDebug(\n          `[OM:reflect] async activation failed, no blockAfter or below it (obsTokens=${observationTokens}, blockAfter=${this.reflectionConfig.blockAfter}) — starting background reflection`,\n        );\n        this.startAsyncBufferedReflection(\n          record,\n          observationTokens,\n          lockKey,\n          writer,\n          requestContext,\n          observabilityContext,\n          reflectionHooks,\n          priorExtractedValues,\n          mainAgent,\n          sendSignal,\n        );\n        return;\n      }\n    }\n\n    // ════════════════════════════════════════════════════════════\n    // SYNC PATH: Do synchronous reflection (blocking)\n    // ════════════════════════════════════════════════════════════\n    reflectionHooks?.onReflectionStart?.();\n    await this.storage.setReflectingFlag(record.id, true);\n    registerOp(record.id, 'reflecting');\n\n    const cycleId = crypto.randomUUID();\n    const startedAt = new Date().toISOString();\n    const threadId = requestedThreadId ?? 'unknown';\n\n    if (writer) {\n      const startMarker = createObservationStartMarker({\n        cycleId,\n        operationType: 'reflection',\n        tokensToObserve: observationTokens,\n        recordId: record.id,\n        threadId,\n        threadIds: [threadId],\n        config: this.getObservationMarkerConfig(record),\n      });\n      // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n      await writer.custom({ ...startMarker, transient: true }).catch(() => {});\n      await this.persistMarkerToStorage(startMarker, threadId, record.resourceId ?? undefined);\n    }\n\n    this.emitDebugEvent({\n      type: 'reflection_triggered',\n      timestamp: new Date(),\n      threadId,\n      resourceId: record.resourceId ?? '',\n      inputTokens: observationTokens,\n      activeObservationsLength: record.activeObservations?.length ?? 0,\n    });\n\n    const streamContext = writer\n      ? {\n          writer,\n          cycleId,\n          startedAt,\n          recordId: record.id,\n          threadId,\n          resourceId: record.resourceId ?? undefined,\n        }\n      : undefined;\n\n    let reflectionUsage: ObserveHookUsage | undefined;\n    let reflectionProviderMetadata: ProviderMetadata | undefined;\n    let reflectionError: Error | undefined;\n    try {\n      const compressionStartLevel = await this.getCompressionStartLevel(requestContext);\n      const reflectResult = await this.call(\n        record.activeObservations,\n        undefined,\n        streamContext,\n        reflectThreshold,\n        abortSignal,\n        undefined,\n        compressionStartLevel,\n        requestContext,\n        priorExtractedValues,\n        observabilityContext,\n        undefined,\n        mainAgent,\n        sendSignal,\n      );\n      reflectionUsage = reflectResult.usage;\n      reflectionProviderMetadata = reflectResult.providerMetadata;\n      await persistThreadExtractedValues(\n        this.storage,\n        this.reflectionConfig.extractors,\n        record.threadId ?? undefined,\n        reflectResult.extractedValues,\n      );\n      const reflectionTokenCount = this.tokenCounter.countObservations(reflectResult.observations);\n\n      await this.storage.createReflectionGeneration({\n        currentRecord: record,\n        reflection: reflectResult.observations,\n        tokenCount: reflectionTokenCount,\n      });\n\n      if (writer && streamContext) {\n        const endMarker = createObservationEndMarker({\n          cycleId: streamContext.cycleId,\n          operationType: 'reflection',\n          startedAt: streamContext.startedAt,\n          tokensObserved: observationTokens,\n          observationTokens: reflectionTokenCount,\n          observations: reflectResult.observations,\n          extractedValues: reflectResult.extractedValues,\n          extractionFailures: reflectResult.extractionFailures,\n          recordId: record.id,\n          threadId,\n        });\n        // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n        await writer.custom({ ...endMarker, transient: true }).catch(() => {});\n        await this.persistMarkerToStorage(endMarker, threadId, record.resourceId ?? undefined);\n      }\n\n      this.emitDebugEvent({\n        type: 'reflection_complete',\n        timestamp: new Date(),\n        threadId,\n        resourceId: record.resourceId ?? '',\n        inputTokens: observationTokens,\n        outputTokens: reflectionTokenCount,\n        observations: reflectResult.observations,\n        usage: reflectResult.usage,\n      });\n    } catch (error) {\n      if (writer && streamContext) {\n        const failedMarker = createObservationFailedMarker({\n          cycleId: streamContext.cycleId,\n          operationType: 'reflection',\n          startedAt: streamContext.startedAt,\n          tokensAttempted: observationTokens,\n          error: error instanceof Error ? error.message : String(error),\n          recordId: record.id,\n          threadId,\n        });\n        // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n        await writer.custom({ ...failedMarker, transient: true }).catch(() => {});\n        await this.persistMarkerToStorage(failedMarker, threadId, record.resourceId ?? undefined);\n      }\n      reflectionError = error instanceof Error ? error : new Error(String(error));\n      if (abortSignal?.aborted) {\n        throw error;\n      }\n      omError('[OM] Reflection failed', error);\n    } finally {\n      await this.storage.setReflectingFlag(record.id, false);\n      reflectionHooks?.onReflectionEnd?.({\n        usage: reflectionUsage,\n        error: reflectionError,\n        ...(reflectionProviderMetadata ? { providerMetadata: reflectionProviderMetadata } : {}),\n      });\n      unregisterOp(record.id, 'reflecting');\n    }\n  }\n}\n","import { randomUUID } from 'node:crypto';\nimport { mkdirSync, writeFileSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { inspect } from 'node:util';\nimport type { MastraDBMessage, MessageList } from '@mastra/core/agent';\nimport { parseMemoryRequestContext } from '@mastra/core/memory';\nimport type { ProcessInputStepArgs } from '@mastra/core/processors';\nimport type { BufferedObservationChunk, ObservationalMemoryRecord } from '@mastra/core/storage';\n\nimport type { ObserverExchange } from './observer-runner';\n\nfunction getOmReproCaptureDir(): string {\n  return process.env.OM_REPRO_CAPTURE_DIR ?? '.mastra-om-repro';\n}\n\nfunction sanitizeCapturePathSegment(value: string): string {\n  const sanitized = value\n    .replace(/[\\\\/]+/g, '_')\n    .replace(/\\.{2,}/g, '_')\n    .trim();\n  return sanitized.length > 0 ? sanitized : 'unknown-thread';\n}\n\nexport function isOmReproCaptureEnabled(): boolean {\n  return process.env.OM_REPRO_CAPTURE === '1';\n}\n\nexport function safeCaptureJson(value: unknown): unknown {\n  return JSON.parse(\n    JSON.stringify(value, (_key, current) => {\n      if (typeof current === 'bigint') return current.toString();\n      if (typeof current === 'function') return '[function]';\n      if (typeof current === 'symbol') return current.toString();\n      if (current instanceof Error) return { name: current.name, message: current.message, stack: current.stack };\n      if (current instanceof Set) return { __type: 'Set', values: Array.from(current.values()) };\n      if (current instanceof Map) return { __type: 'Map', entries: Array.from(current.entries()) };\n      return current;\n    }),\n  );\n}\n\nfunction safeCaptureJsonOrError(value: unknown): { ok: true; value: unknown } | { ok: false; error: unknown } {\n  try {\n    return { ok: true, value: safeCaptureJson(value) };\n  } catch (error) {\n    return {\n      ok: false,\n      error: safeCaptureJson({\n        message: error instanceof Error ? error.message : String(error),\n        stack: error instanceof Error ? error.stack : undefined,\n        inspected: inspect(value, { depth: 3, maxArrayLength: 20, breakLength: 120 }),\n      }),\n    };\n  }\n}\n\nfunction formatCaptureDate(value: unknown): string | undefined {\n  if (!value) return undefined;\n  if (value instanceof Date) return value.toISOString();\n\n  try {\n    return new Date(value as string | number | Date).toISOString();\n  } catch {\n    return undefined;\n  }\n}\n\nfunction summarizeOmTurn(value: unknown): unknown {\n  if (!value || typeof value !== 'object') {\n    return value;\n  }\n\n  const turn = value as {\n    threadId?: string;\n    resourceId?: string;\n    _started?: boolean;\n    _ended?: boolean;\n    _generationCountAtStart?: number;\n    _record?: {\n      id?: string;\n      scope?: string;\n      threadId?: string;\n      resourceId?: string;\n      createdAt?: unknown;\n      updatedAt?: unknown;\n      lastObservedAt?: unknown;\n      generationCount?: number;\n      observationTokenCount?: number;\n      pendingMessageTokens?: number;\n      isBufferingObservation?: boolean;\n      isBufferingReflection?: boolean;\n    };\n    _context?: {\n      messages?: unknown[];\n      systemMessage?: unknown;\n      continuation?: { id?: string };\n      otherThreadsContext?: unknown;\n      record?: { id?: string };\n    };\n    _currentStep?: {\n      stepNumber?: number;\n      _prepared?: boolean;\n      _context?: {\n        activated?: boolean;\n        observed?: boolean;\n        buffered?: boolean;\n        reflected?: boolean;\n        didThresholdCleanup?: boolean;\n        messages?: unknown[];\n        systemMessage?: unknown[];\n      };\n    };\n  };\n\n  return {\n    __type: 'ObservationTurn',\n    threadId: turn.threadId,\n    resourceId: turn.resourceId,\n    started: turn._started,\n    ended: turn._ended,\n    generationCountAtStart: turn._generationCountAtStart,\n    record: turn._record\n      ? {\n          id: turn._record.id,\n          scope: turn._record.scope,\n          threadId: turn._record.threadId,\n          resourceId: turn._record.resourceId,\n          createdAt: formatCaptureDate(turn._record.createdAt),\n          updatedAt: formatCaptureDate(turn._record.updatedAt),\n          lastObservedAt: formatCaptureDate(turn._record.lastObservedAt),\n          generationCount: turn._record.generationCount,\n          observationTokenCount: turn._record.observationTokenCount,\n          pendingMessageTokens: turn._record.pendingMessageTokens,\n          isBufferingObservation: turn._record.isBufferingObservation,\n          isBufferingReflection: turn._record.isBufferingReflection,\n        }\n      : undefined,\n    context: turn._context\n      ? {\n          messageCount: Array.isArray(turn._context.messages) ? turn._context.messages.length : undefined,\n          hasSystemMessage: Array.isArray(turn._context.systemMessage)\n            ? turn._context.systemMessage.length > 0\n            : Boolean(turn._context.systemMessage),\n          continuationId: turn._context.continuation?.id,\n          hasOtherThreadsContext: Boolean(turn._context.otherThreadsContext),\n          recordId: turn._context.record?.id,\n        }\n      : undefined,\n    currentStep: turn._currentStep\n      ? {\n          stepNumber: turn._currentStep.stepNumber,\n          prepared: turn._currentStep._prepared,\n          context: turn._currentStep._context\n            ? {\n                activated: turn._currentStep._context.activated,\n                observed: turn._currentStep._context.observed,\n                buffered: turn._currentStep._context.buffered,\n                reflected: turn._currentStep._context.reflected,\n                didThresholdCleanup: turn._currentStep._context.didThresholdCleanup,\n                messageCount: Array.isArray(turn._currentStep._context.messages)\n                  ? turn._currentStep._context.messages.length\n                  : undefined,\n                systemMessageCount: Array.isArray(turn._currentStep._context.systemMessage)\n                  ? turn._currentStep._context.systemMessage.length\n                  : undefined,\n              }\n            : undefined,\n        }\n      : undefined,\n  };\n}\n\nfunction sanitizeCaptureState(rawState: Record<string, unknown>): Record<string, unknown> {\n  return Object.fromEntries(\n    Object.entries(rawState).map(([key, value]) => {\n      if (key === '__omTurn') {\n        return [key, summarizeOmTurn(value)];\n      }\n\n      return [key, value];\n    }),\n  );\n}\n\nfunction buildReproMessageFingerprint(message: MastraDBMessage): string {\n  const createdAt =\n    message.createdAt instanceof Date\n      ? message.createdAt.toISOString()\n      : message.createdAt\n        ? new Date(message.createdAt).toISOString()\n        : '';\n\n  return JSON.stringify({\n    role: message.role,\n    createdAt,\n    content: message.content,\n  });\n}\n\nfunction inferReproIdRemap(\n  preMessages: MastraDBMessage[],\n  postMessages: MastraDBMessage[],\n): Array<{ fromId: string; toId: string; fingerprint: string }> {\n  const preByFingerprint = new Map<string, string[]>();\n  const postByFingerprint = new Map<string, string[]>();\n\n  for (const message of preMessages) {\n    if (!message.id) continue;\n    const fingerprint = buildReproMessageFingerprint(message);\n    const list = preByFingerprint.get(fingerprint) ?? [];\n    list.push(message.id);\n    preByFingerprint.set(fingerprint, list);\n  }\n\n  for (const message of postMessages) {\n    if (!message.id) continue;\n    const fingerprint = buildReproMessageFingerprint(message);\n    const list = postByFingerprint.get(fingerprint) ?? [];\n    list.push(message.id);\n    postByFingerprint.set(fingerprint, list);\n  }\n\n  const remap: Array<{ fromId: string; toId: string; fingerprint: string }> = [];\n\n  for (const [fingerprint, preIds] of preByFingerprint.entries()) {\n    const postIds = postByFingerprint.get(fingerprint);\n    if (!postIds || preIds.length !== 1 || postIds.length !== 1) continue;\n\n    const fromId = preIds[0];\n    const toId = postIds[0];\n    if (!fromId || !toId || fromId === toId) {\n      continue;\n    }\n\n    remap.push({ fromId, toId, fingerprint });\n  }\n\n  return remap;\n}\n\nfunction createOmReproCaptureDir(threadId: string, label: string): string {\n  const sanitizedThreadId = sanitizeCapturePathSegment(threadId);\n  const captureDir = join(\n    process.cwd(),\n    getOmReproCaptureDir(),\n    sanitizedThreadId,\n    `${Date.now()}-${label}-${randomUUID()}`,\n  );\n  mkdirSync(captureDir, { recursive: true });\n  return captureDir;\n}\n\nexport function writeObserverExchangeReproCapture(params: {\n  threadId: string;\n  resourceId?: string;\n  label: string;\n  observerExchange?: ObserverExchange;\n  details?: Record<string, unknown>;\n  debug?: (message: string) => void;\n}) {\n  if (!isOmReproCaptureEnabled() || !params.observerExchange) {\n    return;\n  }\n\n  try {\n    const captureDir = createOmReproCaptureDir(params.threadId, params.label);\n    const payloads = [\n      {\n        fileName: 'input.json',\n        data: {\n          threadId: params.threadId,\n          resourceId: params.resourceId,\n          label: params.label,\n        },\n      },\n      {\n        fileName: 'output.json',\n        data: {\n          details: params.details ?? {},\n        },\n      },\n      {\n        fileName: 'observer-exchange.json',\n        data: params.observerExchange,\n      },\n    ] as const;\n\n    const captureErrors: Array<{ fileName: string; error: unknown }> = [];\n\n    for (const payload of payloads) {\n      const serialized = safeCaptureJsonOrError(payload.data);\n      if (serialized.ok) {\n        writeFileSync(join(captureDir, payload.fileName), `${JSON.stringify(serialized.value, null, 2)}\\n`);\n        continue;\n      }\n\n      captureErrors.push({ fileName: payload.fileName, error: serialized.error });\n      writeFileSync(\n        join(captureDir, payload.fileName),\n        `${JSON.stringify({ __captureError: serialized.error }, null, 2)}\\n`,\n      );\n    }\n\n    if (captureErrors.length > 0) {\n      writeFileSync(join(captureDir, 'capture-error.json'), `${JSON.stringify(captureErrors, null, 2)}\\n`);\n      params.debug?.(\n        `[OM:repro-capture] wrote ${params.label} capture with ${captureErrors.length} serialization error(s) to ${captureDir}`,\n      );\n      return;\n    }\n\n    params.debug?.(`[OM:repro-capture] wrote ${params.label} capture to ${captureDir}`);\n  } catch (error) {\n    params.debug?.(`[OM:repro-capture] failed to write ${params.label} capture: ${String(error)}`);\n  }\n}\n\nexport function writeProcessInputStepReproCapture(params: {\n  threadId: string;\n  resourceId?: string;\n  stepNumber: number;\n  args: ProcessInputStepArgs;\n  preRecord: ObservationalMemoryRecord;\n  postRecord: ObservationalMemoryRecord;\n  preMessages: MastraDBMessage[];\n  preBufferedChunks: BufferedObservationChunk[];\n  preContextTokenCount: number;\n  preSerializedMessageList: ReturnType<MessageList['serialize']>;\n  postBufferedChunks: BufferedObservationChunk[];\n  postContextTokenCount: number;\n  messageList: MessageList;\n  details: Record<string, unknown>;\n  observerExchange?: ObserverExchange;\n  debug?: (message: string) => void;\n}) {\n  if (!isOmReproCaptureEnabled()) {\n    return;\n  }\n\n  try {\n    const captureDir = createOmReproCaptureDir(params.threadId, `step-${params.stepNumber}`);\n\n    const contextMessages = params.messageList.get.all.db();\n    const memoryContext = parseMemoryRequestContext(params.args.requestContext);\n    const preMessageIds = new Set(params.preMessages.map(message => message.id));\n    const postMessageIds = new Set(contextMessages.map(message => message.id));\n    const removedMessageIds = params.preMessages\n      .map(message => message.id)\n      .filter((id): id is string => Boolean(id) && !postMessageIds.has(id));\n    const addedMessageIds = contextMessages\n      .map(message => message.id)\n      .filter((id): id is string => Boolean(id) && !preMessageIds.has(id));\n    const idRemap = inferReproIdRemap(params.preMessages, contextMessages);\n\n    const rawState = (params.args.state as Record<string, unknown>) ?? {};\n    const sanitizedState = sanitizeCaptureState(rawState);\n    const payloads = [\n      {\n        fileName: 'input.json',\n        data: {\n          stepNumber: params.stepNumber,\n          threadId: params.threadId,\n          resourceId: params.resourceId,\n          readOnly: memoryContext?.memoryConfig?.readOnly,\n          messageCount: contextMessages.length,\n          messageIds: contextMessages.map(message => message.id),\n          stateKeys: Object.keys(rawState),\n          state: sanitizedState,\n          args: {\n            messages: params.args.messages,\n            steps: params.args.steps,\n            systemMessages: params.args.systemMessages,\n            retryCount: params.args.retryCount,\n            toolChoice: params.args.toolChoice,\n            activeTools: params.args.activeTools,\n            modelSettings: params.args.modelSettings,\n            structuredOutput: params.args.structuredOutput,\n          },\n        },\n      },\n      {\n        fileName: 'pre-state.json',\n        data: {\n          record: params.preRecord,\n          bufferedChunks: params.preBufferedChunks,\n          contextTokenCount: params.preContextTokenCount,\n          messages: params.preMessages,\n          messageList: params.preSerializedMessageList,\n        },\n      },\n      {\n        fileName: 'output.json',\n        data: {\n          details: params.details,\n          messageDiff: {\n            removedMessageIds,\n            addedMessageIds,\n            idRemap,\n          },\n        },\n      },\n      {\n        fileName: 'post-state.json',\n        data: {\n          record: params.postRecord,\n          bufferedChunks: params.postBufferedChunks,\n          contextTokenCount: params.postContextTokenCount,\n          messageCount: contextMessages.length,\n          messageIds: contextMessages.map(message => message.id),\n          messages: contextMessages,\n          messageList: params.messageList.serialize(),\n        },\n      },\n    ] as const;\n\n    const captureErrors: Array<{ fileName: string; error: unknown }> = [];\n\n    for (const payload of payloads) {\n      const serialized = safeCaptureJsonOrError(payload.data);\n      if (serialized.ok) {\n        writeFileSync(join(captureDir, payload.fileName), `${JSON.stringify(serialized.value, null, 2)}\\n`);\n        continue;\n      }\n\n      captureErrors.push({ fileName: payload.fileName, error: serialized.error });\n      writeFileSync(\n        join(captureDir, payload.fileName),\n        `${JSON.stringify({ __captureError: serialized.error }, null, 2)}\\n`,\n      );\n    }\n\n    // Write observer exchange (prompt + raw LLM response) if available\n    if (params.observerExchange) {\n      const serialized = safeCaptureJsonOrError(params.observerExchange);\n      if (serialized.ok) {\n        writeFileSync(join(captureDir, 'observer-exchange.json'), `${JSON.stringify(serialized.value, null, 2)}\\n`);\n      } else {\n        captureErrors.push({ fileName: 'observer-exchange.json', error: serialized.error });\n        writeFileSync(\n          join(captureDir, 'observer-exchange.json'),\n          `${JSON.stringify({ __captureError: serialized.error }, null, 2)}\\n`,\n        );\n      }\n    }\n\n    if (captureErrors.length > 0) {\n      writeFileSync(join(captureDir, 'capture-error.json'), `${JSON.stringify(captureErrors, null, 2)}\\n`);\n      params.debug?.(\n        `[OM:repro-capture] wrote processInputStep capture with ${captureErrors.length} serialization error(s) to ${captureDir}`,\n      );\n      return;\n    }\n\n    params.debug?.(`[OM:repro-capture] wrote processInputStep capture to ${captureDir}`);\n  } catch (error) {\n    params.debug?.(`[OM:repro-capture] failed to write processInputStep capture: ${String(error)}`);\n  }\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { createHash } from 'node:crypto';\nimport type { MastraDBMessage } from '@mastra/core/agent';\nimport imageSize from 'image-size';\nimport { estimateTokenCount } from 'tokenx';\n\nimport { formatToolResultForObserver, resolveToolResultValue } from './tool-result-helpers';\n\ntype TokenEstimateCacheEntry = {\n  v: number;\n  source: string;\n  key: string;\n  tokens: number;\n};\n\nexport type TokenCounterModelContext = {\n  provider?: string;\n  modelId?: string;\n};\n\ntype TokenCounterOptions = {\n  model?: string | TokenCounterModelContext;\n};\n\ntype ImageTokenDetail = 'low' | 'high' | 'auto';\n\ntype ImageTokenEstimatorConfig = {\n  baseTokens: number;\n  tileTokens: number;\n  fallbackTiles: number;\n};\n\ntype GoogleMediaResolution = 'low' | 'medium' | 'high' | 'ultra_high' | 'unspecified';\n\ntype ImageTokenEstimate = {\n  tokens: number;\n  cachePayload: string;\n};\n\nconst IMAGE_FILE_EXTENSIONS = new Set([\n  'png',\n  'jpg',\n  'jpeg',\n  'webp',\n  'gif',\n  'bmp',\n  'tiff',\n  'tif',\n  'heic',\n  'heif',\n  'avif',\n]);\n\nconst TOKEN_ESTIMATE_CACHE_VERSION = 7;\n\n/**\n * Cache `source` marker for token estimates supplied by the caller via\n * `part.providerMetadata.mastra.tokenEstimate`. Pipelines that strip the real\n * binary payload before persistence (e.g. uploading files to cloud storage and\n * leaving only a reference token in `data`) cannot rely on the on-device file\n * size, so they can stamp an authoritative estimate here. Entries marked with\n * this source survive cache-version rotations and are honored ahead of\n * provider fetches and the default descriptor estimator.\n */\nconst CLIENT_TOKEN_ESTIMATE_SOURCE = 'client';\n\nconst DEFAULT_IMAGE_ESTIMATOR: ImageTokenEstimatorConfig = {\n  baseTokens: 85,\n  tileTokens: 170,\n  fallbackTiles: 4,\n};\n\nconst GOOGLE_LEGACY_IMAGE_TOKENS_PER_TILE = 258;\nconst GOOGLE_GEMINI_3_IMAGE_TOKENS_BY_RESOLUTION: Record<GoogleMediaResolution, number> = {\n  low: 280,\n  medium: 560,\n  high: 1120,\n  ultra_high: 2240,\n  unspecified: 1120,\n};\n\nconst ANTHROPIC_IMAGE_TOKENS_PER_PIXEL = 1 / 750;\nconst ANTHROPIC_IMAGE_MAX_LONG_EDGE = 1568;\n\nconst GOOGLE_MEDIA_RESOLUTION_VALUES = new Set<GoogleMediaResolution>([\n  'low',\n  'medium',\n  'high',\n  'ultra_high',\n  'unspecified',\n]);\n\nconst ATTACHMENT_COUNT_TIMEOUT_MS = 20_000;\nconst REMOTE_IMAGE_PROBE_TIMEOUT_MS = 2_500;\nconst PROVIDER_API_KEY_ENV_VARS: Record<string, string[]> = {\n  openai: ['OPENAI_API_KEY'],\n  google: ['GOOGLE_GENERATIVE_AI_API_KEY', 'GOOGLE_API_KEY'],\n  anthropic: ['ANTHROPIC_API_KEY'],\n};\n\ntype CacheablePart = any;\n\ntype MastraTokenEstimateMetadata = {\n  mastra?: {\n    tokenEstimate?: unknown;\n    imageDimensions?: { width?: number; height?: number };\n  };\n};\n\ntype PartWithMastraMetadata = {\n  providerMetadata?: MastraTokenEstimateMetadata & Record<string, unknown>;\n};\n\ntype ContentWithMastraMetadata = {\n  metadata?: MastraTokenEstimateMetadata & Record<string, unknown>;\n};\n\ntype MessageWithMastraMetadata = {\n  metadata?: MastraTokenEstimateMetadata & Record<string, unknown>;\n};\n\nfunction getPartMastraMetadata(part: CacheablePart): MastraTokenEstimateMetadata['mastra'] | undefined {\n  return (part as PartWithMastraMetadata).providerMetadata?.mastra;\n}\n\nfunction ensurePartMastraMetadata(part: CacheablePart): NonNullable<MastraTokenEstimateMetadata['mastra']> {\n  const typedPart = part as PartWithMastraMetadata;\n  typedPart.providerMetadata ??= {};\n  typedPart.providerMetadata.mastra ??= {};\n  return typedPart.providerMetadata.mastra;\n}\n\nfunction getContentMastraMetadata(content: unknown): MastraTokenEstimateMetadata['mastra'] | undefined {\n  if (!content || typeof content !== 'object') {\n    return undefined;\n  }\n\n  return (content as ContentWithMastraMetadata).metadata?.mastra;\n}\n\nfunction ensureContentMastraMetadata(content: unknown): NonNullable<MastraTokenEstimateMetadata['mastra']> | undefined {\n  if (!content || typeof content !== 'object') {\n    return undefined;\n  }\n\n  const typedContent = content as ContentWithMastraMetadata;\n  typedContent.metadata ??= {};\n  typedContent.metadata.mastra ??= {};\n  return typedContent.metadata.mastra;\n}\n\nfunction getMessageMastraMetadata(message: MastraDBMessage): MastraTokenEstimateMetadata['mastra'] | undefined {\n  return (message as MessageWithMastraMetadata).metadata?.mastra;\n}\n\nfunction ensureMessageMastraMetadata(message: MastraDBMessage): NonNullable<MastraTokenEstimateMetadata['mastra']> {\n  const typedMessage = message as MessageWithMastraMetadata;\n  typedMessage.metadata ??= {};\n  typedMessage.metadata.mastra ??= {};\n  return typedMessage.metadata.mastra;\n}\n\nfunction buildEstimateKey(kind: string, text: string): string {\n  const payloadHash = createHash('sha256').update(text).digest('hex');\n  return `${kind}:${payloadHash}`;\n}\n\nfunction resolveEstimatorId(): string {\n  return 'tokenx';\n}\n\nfunction isTokenEstimateEntry(value: unknown): value is TokenEstimateCacheEntry {\n  if (!value || typeof value !== 'object') return false;\n  const entry = value as Partial<TokenEstimateCacheEntry>;\n  return (\n    typeof entry.v === 'number' &&\n    typeof entry.source === 'string' &&\n    typeof entry.key === 'string' &&\n    typeof entry.tokens === 'number'\n  );\n}\n\nfunction getCacheEntry(cache: unknown, key: string): TokenEstimateCacheEntry | undefined {\n  if (!cache || typeof cache !== 'object') return undefined;\n  if (isTokenEstimateEntry(cache)) {\n    return cache.key === key ? cache : undefined;\n  }\n\n  const keyedEntry = (cache as Record<string, unknown>)[key];\n  return isTokenEstimateEntry(keyedEntry) ? keyedEntry : undefined;\n}\n\nfunction mergeCacheEntry(\n  cache: unknown,\n  key: string,\n  entry: TokenEstimateCacheEntry,\n): TokenEstimateCacheEntry | Record<string, TokenEstimateCacheEntry> {\n  if (isTokenEstimateEntry(cache)) {\n    if (cache.key === key) {\n      return entry;\n    }\n\n    return {\n      [cache.key]: cache,\n      [key]: entry,\n    };\n  }\n\n  if (cache && typeof cache === 'object') {\n    return {\n      ...(cache as Record<string, TokenEstimateCacheEntry>),\n      [key]: entry,\n    };\n  }\n\n  return entry;\n}\n\nfunction getPartCacheEntry(part: CacheablePart, key: string): TokenEstimateCacheEntry | undefined {\n  return getCacheEntry(getPartMastraMetadata(part)?.tokenEstimate, key);\n}\n\nfunction setPartCacheEntry(part: CacheablePart, key: string, entry: TokenEstimateCacheEntry): void {\n  const mastraMetadata = ensurePartMastraMetadata(part);\n  mastraMetadata.tokenEstimate = mergeCacheEntry(mastraMetadata.tokenEstimate, key, entry);\n}\n\n/**\n * Extracts a caller-supplied token estimate stamped on a part via\n * `part.providerMetadata.mastra.tokenEstimate`. Used by pipelines that strip\n * the binary payload from file parts (e.g. cloud-storage references) and\n * therefore cannot rely on the on-device file size. Returns the entry only\n * when `source === 'client'` and `tokens` is a finite non-negative number.\n *\n * Public contract for callers:\n *   part.providerMetadata = {\n *     mastra: {\n *       tokenEstimate: { v: 0, source: 'client', key: 'client', tokens: N }\n *     }\n *   }\n */\nfunction getClientPartTokenEstimate(part: CacheablePart): TokenEstimateCacheEntry | undefined {\n  const cache = getPartMastraMetadata(part)?.tokenEstimate;\n  if (!cache || typeof cache !== 'object') return undefined;\n\n  const matches = (entry: unknown): entry is TokenEstimateCacheEntry =>\n    isTokenEstimateEntry(entry) &&\n    entry.source === CLIENT_TOKEN_ESTIMATE_SOURCE &&\n    Number.isFinite(entry.tokens) &&\n    entry.tokens >= 0;\n\n  if (matches(cache)) return cache;\n\n  for (const value of Object.values(cache as Record<string, unknown>)) {\n    if (matches(value)) return value;\n  }\n\n  return undefined;\n}\n\nfunction getMessageCacheEntry(message: MastraDBMessage, key: string): TokenEstimateCacheEntry | undefined {\n  const contentLevelEntry = getCacheEntry(getContentMastraMetadata(message.content)?.tokenEstimate, key);\n  if (contentLevelEntry) return contentLevelEntry;\n\n  return getCacheEntry(getMessageMastraMetadata(message)?.tokenEstimate, key);\n}\n\nfunction setMessageCacheEntry(message: MastraDBMessage, key: string, entry: TokenEstimateCacheEntry): void {\n  const contentMastraMetadata = ensureContentMastraMetadata(message.content);\n  if (contentMastraMetadata) {\n    contentMastraMetadata.tokenEstimate = mergeCacheEntry(contentMastraMetadata.tokenEstimate, key, entry);\n    return;\n  }\n\n  const messageMastraMetadata = ensureMessageMastraMetadata(message);\n  messageMastraMetadata.tokenEstimate = mergeCacheEntry(messageMastraMetadata.tokenEstimate, key, entry);\n}\n\nfunction serializePartForTokenCounting(part: CacheablePart): string {\n  const typedPart = part as PartWithMastraMetadata & Record<string, unknown>;\n  const hasTokenEstimate = Boolean(typedPart.providerMetadata?.mastra?.tokenEstimate);\n  if (!hasTokenEstimate) {\n    return JSON.stringify(part);\n  }\n\n  const clonedPart: Record<string, any> = {\n    ...typedPart,\n    providerMetadata: {\n      ...(typedPart.providerMetadata ?? {}),\n      mastra: {\n        ...(typedPart.providerMetadata?.mastra ?? {}),\n      },\n    },\n  };\n\n  delete clonedPart.providerMetadata.mastra.tokenEstimate;\n\n  if (Object.keys(clonedPart.providerMetadata.mastra).length === 0) {\n    delete clonedPart.providerMetadata.mastra;\n  }\n\n  if (Object.keys(clonedPart.providerMetadata).length === 0) {\n    delete clonedPart.providerMetadata;\n  }\n\n  return JSON.stringify(clonedPart);\n}\n\nfunction getFilenameFromAttachmentData(data: unknown): string | undefined {\n  const pathname =\n    data instanceof URL\n      ? data.pathname\n      : typeof data === 'string' && isHttpUrlString(data)\n        ? (() => {\n            try {\n              return new URL(data).pathname;\n            } catch {\n              return undefined;\n            }\n          })()\n        : undefined;\n\n  const filename = pathname?.split('/').filter(Boolean).pop();\n  return filename ? decodeURIComponent(filename) : undefined;\n}\n\nfunction serializeNonImageFilePartForTokenCounting(part: CacheablePart): string {\n  const filename = getObjectValue(part, 'filename');\n  const inferredFilename = getFilenameFromAttachmentData(getObjectValue(part, 'data'));\n\n  return JSON.stringify({\n    type: 'file',\n    mimeType: getObjectValue(part, 'mimeType') ?? null,\n    filename: typeof filename === 'string' && filename.trim().length > 0 ? filename.trim() : (inferredFilename ?? null),\n  });\n}\n\nfunction isValidCacheEntry(\n  entry: TokenEstimateCacheEntry | undefined,\n  expectedKey: string,\n  expectedSource: string,\n): entry is TokenEstimateCacheEntry {\n  return Boolean(\n    entry &&\n    entry.v === TOKEN_ESTIMATE_CACHE_VERSION &&\n    entry.source === expectedSource &&\n    entry.key === expectedKey &&\n    Number.isFinite(entry.tokens),\n  );\n}\n\nfunction parseModelContext(model?: string | TokenCounterModelContext): TokenCounterModelContext | undefined {\n  if (!model) return undefined;\n  if (typeof model === 'object') {\n    return model.provider || model.modelId ? { provider: model.provider, modelId: model.modelId } : undefined;\n  }\n\n  const slashIndex = model.indexOf('/');\n  if (slashIndex === -1) {\n    return { modelId: model };\n  }\n\n  return {\n    provider: model.slice(0, slashIndex),\n    modelId: model.slice(slashIndex + 1),\n  };\n}\n\nfunction normalizeImageDetail(detail: unknown): ImageTokenDetail {\n  if (detail === 'low' || detail === 'high') return detail;\n  return 'auto';\n}\n\nfunction getObjectValue(value: unknown, key: string): unknown {\n  if (!value || typeof value !== 'object') return undefined;\n  return (value as Record<string, unknown>)[key];\n}\n\nfunction resolveImageDetail(part: CacheablePart): ImageTokenDetail {\n  const openAIProviderOptions = getObjectValue(getObjectValue(part, 'providerOptions'), 'openai');\n  const openAIProviderMetadata = getObjectValue(getObjectValue(part, 'providerMetadata'), 'openai');\n  const mastraMetadata = getObjectValue(getObjectValue(part, 'providerMetadata'), 'mastra');\n\n  return normalizeImageDetail(\n    getObjectValue(part, 'detail') ??\n      getObjectValue(part, 'imageDetail') ??\n      getObjectValue(openAIProviderOptions, 'detail') ??\n      getObjectValue(openAIProviderOptions, 'imageDetail') ??\n      getObjectValue(openAIProviderMetadata, 'detail') ??\n      getObjectValue(openAIProviderMetadata, 'imageDetail') ??\n      getObjectValue(mastraMetadata, 'imageDetail'),\n  );\n}\n\nfunction normalizeGoogleMediaResolution(value: unknown): GoogleMediaResolution | undefined {\n  return typeof value === 'string' && GOOGLE_MEDIA_RESOLUTION_VALUES.has(value as GoogleMediaResolution)\n    ? (value as GoogleMediaResolution)\n    : undefined;\n}\n\nfunction resolveGoogleMediaResolution(part: CacheablePart): GoogleMediaResolution {\n  const providerOptions = getObjectValue(getObjectValue(part, 'providerOptions'), 'google');\n  const providerMetadata = getObjectValue(getObjectValue(part, 'providerMetadata'), 'google');\n  const mastraMetadata = getObjectValue(getObjectValue(part, 'providerMetadata'), 'mastra');\n\n  return (\n    normalizeGoogleMediaResolution(getObjectValue(part, 'mediaResolution')) ??\n    normalizeGoogleMediaResolution(getObjectValue(providerOptions, 'mediaResolution')) ??\n    normalizeGoogleMediaResolution(getObjectValue(providerMetadata, 'mediaResolution')) ??\n    normalizeGoogleMediaResolution(getObjectValue(mastraMetadata, 'mediaResolution')) ??\n    'unspecified'\n  );\n}\n\nfunction getFiniteNumber(value: unknown): number | undefined {\n  return typeof value === 'number' && Number.isFinite(value) && value > 0 ? value : undefined;\n}\n\nfunction isHttpUrlString(value: unknown): boolean {\n  return typeof value === 'string' && /^https?:\\/\\//i.test(value);\n}\n\nfunction isLikelyFilesystemPath(value: string): boolean {\n  return (\n    value.startsWith('/') ||\n    value.startsWith('./') ||\n    value.startsWith('../') ||\n    value.startsWith('~/') ||\n    /^[A-Za-z]:[\\\\/]/.test(value) ||\n    value.includes('\\\\')\n  );\n}\n\nfunction isLikelyBase64Content(value: string): boolean {\n  if (value.length < 16 || value.length % 4 !== 0 || /\\s/.test(value) || isLikelyFilesystemPath(value)) {\n    return false;\n  }\n\n  return /^[A-Za-z0-9+/]+={0,2}$/.test(value);\n}\n\nfunction decodeImageBuffer(value: unknown): Buffer | undefined {\n  if (typeof Buffer !== 'undefined' && Buffer.isBuffer(value)) {\n    return value;\n  }\n\n  if (value instanceof Uint8Array) {\n    return Buffer.from(value);\n  }\n\n  if (value instanceof ArrayBuffer) {\n    return Buffer.from(value);\n  }\n\n  if (ArrayBuffer.isView(value)) {\n    return Buffer.from(value.buffer, value.byteOffset, value.byteLength);\n  }\n\n  if (typeof value !== 'string' || isHttpUrlString(value)) {\n    return undefined;\n  }\n\n  if (value.startsWith('data:')) {\n    const commaIndex = value.indexOf(',');\n    if (commaIndex === -1) return undefined;\n\n    const header = value.slice(0, commaIndex);\n    const payload = value.slice(commaIndex + 1);\n    if (/;base64/i.test(header)) {\n      return Buffer.from(payload, 'base64');\n    }\n\n    return Buffer.from(decodeURIComponent(payload), 'utf8');\n  }\n\n  if (!isLikelyBase64Content(value)) {\n    return undefined;\n  }\n\n  return Buffer.from(value, 'base64');\n}\n\nfunction persistImageDimensions(part: CacheablePart, dimensions: { width: number; height: number }): void {\n  const mastraMetadata = ensurePartMastraMetadata(part);\n  mastraMetadata.imageDimensions = dimensions;\n}\n\nfunction resolveHttpAssetUrl(value: unknown): string | undefined {\n  if (value instanceof URL) {\n    return value.toString();\n  }\n\n  if (typeof value === 'string' && isHttpUrlString(value)) {\n    return value;\n  }\n\n  return undefined;\n}\n\nasync function resolveImageDimensionsAsync(part: CacheablePart): Promise<{ width?: number; height?: number }> {\n  const existing = resolveImageDimensions(part);\n  if (existing.width && existing.height) {\n    return existing;\n  }\n\n  const asset = getObjectValue(part, 'image') ?? getObjectValue(part, 'data');\n  const url = resolveHttpAssetUrl(asset);\n  if (!url) {\n    return existing;\n  }\n\n  try {\n    // Dynamic import avoids leaking probe-image-size into the public type surface.\n    // Downstream packages resolve memory source files and lack the ambient d.ts.\n    // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n    // @ts-ignore TS7016 -- probe-image-size ships no types\n    const mod = await import('probe-image-size');\n    const probeImageSize: (src: string, opts?: Record<string, unknown>) => Promise<{ width: number; height: number }> =\n      mod.default;\n    const probed = await probeImageSize(url, {\n      open_timeout: REMOTE_IMAGE_PROBE_TIMEOUT_MS,\n      response_timeout: REMOTE_IMAGE_PROBE_TIMEOUT_MS,\n      read_timeout: REMOTE_IMAGE_PROBE_TIMEOUT_MS,\n      follow_max: 2,\n    });\n    const width = existing.width ?? getFiniteNumber(probed.width);\n    const height = existing.height ?? getFiniteNumber(probed.height);\n\n    if (!width || !height) {\n      return existing;\n    }\n\n    const resolved = { width, height };\n    persistImageDimensions(part, resolved);\n    return resolved;\n  } catch {\n    return existing;\n  }\n}\n\nfunction resolveImageDimensions(part: CacheablePart): { width?: number; height?: number } {\n  const mastraMetadata = getObjectValue(getObjectValue(part, 'providerMetadata'), 'mastra');\n  const dimensions = getObjectValue(mastraMetadata, 'imageDimensions');\n\n  const width =\n    getFiniteNumber(getObjectValue(part, 'width')) ??\n    getFiniteNumber(getObjectValue(part, 'imageWidth')) ??\n    getFiniteNumber(getObjectValue(dimensions, 'width'));\n  const height =\n    getFiniteNumber(getObjectValue(part, 'height')) ??\n    getFiniteNumber(getObjectValue(part, 'imageHeight')) ??\n    getFiniteNumber(getObjectValue(dimensions, 'height'));\n\n  if (width && height) {\n    return { width, height };\n  }\n\n  const asset = getObjectValue(part, 'image') ?? getObjectValue(part, 'data');\n  const buffer = decodeImageBuffer(asset);\n  if (!buffer) {\n    return { width, height };\n  }\n\n  try {\n    const measured = imageSize(buffer);\n    const measuredWidth = getFiniteNumber(measured.width);\n    const measuredHeight = getFiniteNumber(measured.height);\n\n    if (!measuredWidth || !measuredHeight) {\n      return { width, height };\n    }\n\n    const resolved = {\n      width: width ?? measuredWidth,\n      height: height ?? measuredHeight,\n    };\n\n    persistImageDimensions(part, resolved as { width: number; height: number });\n    return resolved;\n  } catch {\n    return { width, height };\n  }\n}\n\nfunction getBase64Size(base64: string): number {\n  const sanitized = base64.replace(/\\s+/g, '');\n  const padding = sanitized.endsWith('==') ? 2 : sanitized.endsWith('=') ? 1 : 0;\n  return Math.max(0, Math.floor((sanitized.length * 3) / 4) - padding);\n}\n\nfunction resolveImageSourceStats(image: unknown): { source: 'url' | 'data-uri' | 'binary'; sizeBytes?: number } {\n  if (image instanceof URL) {\n    return { source: 'url' };\n  }\n\n  if (typeof image === 'string') {\n    if (isHttpUrlString(image)) {\n      return { source: 'url' };\n    }\n\n    if (image.startsWith('data:')) {\n      const commaIndex = image.indexOf(',');\n      const encoded = commaIndex === -1 ? '' : image.slice(commaIndex + 1);\n      return {\n        source: 'data-uri',\n        sizeBytes: getBase64Size(encoded),\n      };\n    }\n\n    return {\n      source: 'binary',\n      sizeBytes: getBase64Size(image),\n    };\n  }\n\n  if (typeof Buffer !== 'undefined' && Buffer.isBuffer(image)) {\n    return { source: 'binary', sizeBytes: image.length };\n  }\n\n  if (image instanceof Uint8Array) {\n    return { source: 'binary', sizeBytes: image.byteLength };\n  }\n\n  if (image instanceof ArrayBuffer) {\n    return { source: 'binary', sizeBytes: image.byteLength };\n  }\n\n  if (ArrayBuffer.isView(image)) {\n    return { source: 'binary', sizeBytes: image.byteLength };\n  }\n\n  return { source: 'binary' };\n}\n\nfunction getPathnameExtension(value: string): string | undefined {\n  const normalized = value.split('#', 1)[0]?.split('?', 1)[0] ?? value;\n  const match = normalized.match(/\\.([a-z0-9]+)$/i);\n  return match?.[1]?.toLowerCase();\n}\n\nfunction hasImageFilenameExtension(filename: unknown): boolean {\n  return typeof filename === 'string' && IMAGE_FILE_EXTENSIONS.has(getPathnameExtension(filename) ?? '');\n}\n\nfunction isImageLikeFilePart(part: CacheablePart): boolean {\n  if (getObjectValue(part, 'type') !== 'file') {\n    return false;\n  }\n\n  const mimeType = getObjectValue(part, 'mimeType');\n  if (typeof mimeType === 'string' && mimeType.toLowerCase().startsWith('image/')) {\n    return true;\n  }\n\n  const data = getObjectValue(part, 'data');\n  if (typeof data === 'string' && data.startsWith('data:image/')) {\n    return true;\n  }\n\n  if (data instanceof URL && hasImageFilenameExtension(data.pathname)) {\n    return true;\n  }\n\n  if (isHttpUrlString(data)) {\n    try {\n      const url = new URL(data as string);\n      if (hasImageFilenameExtension(url.pathname)) {\n        return true;\n      }\n    } catch {\n      // ignore invalid URL string\n    }\n  }\n\n  return hasImageFilenameExtension(getObjectValue(part, 'filename'));\n}\n\nfunction resolveProviderId(modelContext?: TokenCounterModelContext): string | undefined {\n  return modelContext?.provider?.toLowerCase();\n}\n\nfunction resolveModelId(modelContext?: TokenCounterModelContext): string {\n  return modelContext?.modelId?.toLowerCase() ?? '';\n}\n\nfunction resolveOpenAIImageEstimatorConfig(modelContext?: TokenCounterModelContext): ImageTokenEstimatorConfig {\n  const modelId = resolveModelId(modelContext);\n\n  if (modelId.startsWith('gpt-5') || modelId === 'gpt-5-chat-latest') {\n    return { baseTokens: 70, tileTokens: 140, fallbackTiles: 4 };\n  }\n\n  if (modelId.startsWith('gpt-4o-mini')) {\n    return { baseTokens: 2833, tileTokens: 5667, fallbackTiles: 1 };\n  }\n\n  if (modelId.startsWith('o1') || modelId.startsWith('o3')) {\n    return { baseTokens: 75, tileTokens: 150, fallbackTiles: 4 };\n  }\n\n  if (modelId.includes('computer-use')) {\n    return { baseTokens: 65, tileTokens: 129, fallbackTiles: 4 };\n  }\n\n  return DEFAULT_IMAGE_ESTIMATOR;\n}\n\nfunction isGoogleGemini3Model(modelContext?: TokenCounterModelContext): boolean {\n  return resolveProviderId(modelContext) === 'google' && resolveModelId(modelContext).startsWith('gemini-3');\n}\n\nfunction scaleDimensionsForOpenAIHighDetail(width: number, height: number): { width: number; height: number } {\n  let scaledWidth = width;\n  let scaledHeight = height;\n  const largestSide = Math.max(scaledWidth, scaledHeight);\n\n  if (largestSide > 2048) {\n    const ratio = 2048 / largestSide;\n    scaledWidth *= ratio;\n    scaledHeight *= ratio;\n  }\n\n  const shortestSide = Math.min(scaledWidth, scaledHeight);\n  if (shortestSide > 768) {\n    const ratio = 768 / shortestSide;\n    scaledWidth *= ratio;\n    scaledHeight *= ratio;\n  }\n\n  return {\n    width: Math.max(1, Math.round(scaledWidth)),\n    height: Math.max(1, Math.round(scaledHeight)),\n  };\n}\n\nfunction scaleDimensionsForAnthropic(width: number, height: number): { width: number; height: number } {\n  const largestSide = Math.max(width, height);\n  if (largestSide <= ANTHROPIC_IMAGE_MAX_LONG_EDGE) {\n    return { width, height };\n  }\n\n  const ratio = ANTHROPIC_IMAGE_MAX_LONG_EDGE / largestSide;\n  return {\n    width: Math.max(1, Math.round(width * ratio)),\n    height: Math.max(1, Math.round(height * ratio)),\n  };\n}\n\nfunction estimateOpenAIHighDetailTiles(\n  dimensions: { width?: number; height?: number },\n  sourceStats: { sizeBytes?: number },\n  estimator: ImageTokenEstimatorConfig,\n): number {\n  if (dimensions.width && dimensions.height) {\n    const scaled = scaleDimensionsForOpenAIHighDetail(dimensions.width, dimensions.height);\n    return Math.max(1, Math.ceil(scaled.width / 512) * Math.ceil(scaled.height / 512));\n  }\n\n  if (sourceStats.sizeBytes !== undefined) {\n    if (sourceStats.sizeBytes <= 512 * 1024) return 1;\n    if (sourceStats.sizeBytes <= 2 * 1024 * 1024) return 4;\n    if (sourceStats.sizeBytes <= 4 * 1024 * 1024) return 6;\n    return 8;\n  }\n\n  return estimator.fallbackTiles;\n}\n\nfunction resolveEffectiveOpenAIImageDetail(\n  detail: ImageTokenDetail,\n  dimensions: { width?: number; height?: number },\n  sourceStats: { sizeBytes?: number },\n): Exclude<ImageTokenDetail, 'auto'> {\n  if (detail === 'low' || detail === 'high') return detail;\n\n  if (dimensions.width && dimensions.height) {\n    return Math.max(dimensions.width, dimensions.height) > 768 ? 'high' : 'low';\n  }\n\n  if (sourceStats.sizeBytes !== undefined) {\n    return sourceStats.sizeBytes > 1024 * 1024 ? 'high' : 'low';\n  }\n\n  return 'low';\n}\n\nfunction estimateLegacyGoogleImageTiles(dimensions: { width?: number; height?: number }): number {\n  if (!dimensions.width || !dimensions.height) return 1;\n  return Math.max(1, Math.ceil(dimensions.width / 768) * Math.ceil(dimensions.height / 768));\n}\n\nfunction estimateAnthropicImageTokens(\n  dimensions: { width?: number; height?: number },\n  sourceStats: { sizeBytes?: number },\n): number {\n  if (dimensions.width && dimensions.height) {\n    const scaled = scaleDimensionsForAnthropic(dimensions.width, dimensions.height);\n    return Math.max(1, Math.ceil(scaled.width * scaled.height * ANTHROPIC_IMAGE_TOKENS_PER_PIXEL));\n  }\n\n  if (sourceStats.sizeBytes !== undefined) {\n    if (sourceStats.sizeBytes <= 512 * 1024) return 341;\n    if (sourceStats.sizeBytes <= 2 * 1024 * 1024) return 1366;\n    if (sourceStats.sizeBytes <= 4 * 1024 * 1024) return 2048;\n    return 2731;\n  }\n\n  return 1600;\n}\n\n/**\n * Maps a non-image file part's byte size to a token estimate, using a\n * provider-aware heuristic. This is the non-image-file equivalent of\n * {@link estimateAnthropicImageTokens} / {@link estimateOpenAIHighDetailTiles}:\n * it doesn't try to be exact, just close enough that the Observational Memory\n * threshold check trips on large attachments.\n *\n * - Anthropic PDFs: ~1500–3000 tokens/page, ~5KB/page average → `bytes / 3`.\n * - Google PDFs: 258 tokens/page (Gemini docs), ~5KB/page → `bytes / 20`.\n * - OpenAI / unknown provider PDFs: `bytes / 4` (conservative).\n * - Text-ish mime types (`text/*`, JSON, XML, YAML): `bytes / 4`.\n * - Unknown binary: `bytes / 4` — conservative-upward so OM still fires.\n *\n * Floors guarantee a one-page file still produces a meaningful count even when\n * the underlying bytes are heavily compressed.\n */\nfunction estimateFileTokensFromBytes(provider: string | undefined, mimeType: string, sizeBytes: number): number {\n  // MIME types are case-insensitive (RFC 2045) and may carry parameters like\n  // `application/pdf; charset=binary` — normalize before branching.\n  const normalizedMime = (mimeType ?? '').toLowerCase().split(';', 1)[0]!.trim();\n  const isPdf = normalizedMime === 'application/pdf';\n  const isTextish =\n    normalizedMime.startsWith('text/') ||\n    ['application/json', 'application/xml', 'application/x-yaml', 'application/yaml'].includes(normalizedMime);\n\n  if (isPdf) {\n    if (provider === 'google') return Math.max(258, Math.ceil(sizeBytes / 20));\n    if (provider === 'anthropic') return Math.max(1500, Math.ceil(sizeBytes / 3));\n    return Math.max(500, Math.ceil(sizeBytes / 4));\n  }\n\n  if (isTextish) return Math.max(1, Math.ceil(sizeBytes / 4));\n\n  return Math.max(1, Math.ceil(sizeBytes / 4));\n}\n\n/**\n * Builds a fixed token estimate for a non-image file part from its byte size.\n * Returns `undefined` when the part has no measurable body (e.g. a remote URL\n * with no fetched content) — in that case the caller falls back to the\n * descriptor-only estimate, which preserves prior behavior for URL-only parts.\n *\n * Mirrors {@link estimateImageAssetTokens} so non-image files share the same\n * cache shape as images and benefit from the same persistence path via\n * `readOrPersistFixedPartEstimate`.\n */\nfunction estimateNonImageFileTokens(\n  modelContext: TokenCounterModelContext | undefined,\n  part: CacheablePart,\n): { tokens: number; cachePayload: string } | undefined {\n  const sourceStats = resolveImageSourceStats(getObjectValue(part, 'data'));\n  if (sourceStats.sizeBytes === undefined) {\n    return undefined;\n  }\n\n  const provider = resolveProviderId(modelContext);\n  const modelId = modelContext?.modelId ?? null;\n  const mimeType = getAttachmentMimeType(part, 'application/octet-stream');\n  const filename = getAttachmentFilename(part) ?? null;\n  const tokens = estimateFileTokensFromBytes(provider, mimeType, sourceStats.sizeBytes);\n\n  return {\n    tokens,\n    cachePayload: JSON.stringify({\n      kind: 'non-image-file',\n      provider: provider ?? 'fallback',\n      modelId,\n      estimator: 'bytes',\n      source: sourceStats.source,\n      sizeBytes: sourceStats.sizeBytes,\n      mimeType,\n      filename,\n    }),\n  };\n}\n\nfunction estimateGoogleImageTokens(\n  modelContext: TokenCounterModelContext | undefined,\n  part: CacheablePart,\n  dimensions: { width?: number; height?: number },\n): { tokens: number; mediaResolution: GoogleMediaResolution } {\n  if (isGoogleGemini3Model(modelContext)) {\n    const mediaResolution = resolveGoogleMediaResolution(part);\n    return {\n      tokens: GOOGLE_GEMINI_3_IMAGE_TOKENS_BY_RESOLUTION[mediaResolution],\n      mediaResolution,\n    };\n  }\n\n  return {\n    tokens: estimateLegacyGoogleImageTiles(dimensions) * GOOGLE_LEGACY_IMAGE_TOKENS_PER_TILE,\n    mediaResolution: 'unspecified',\n  };\n}\n\nfunction getProviderApiKey(provider: string): string | undefined {\n  for (const envVar of PROVIDER_API_KEY_ENV_VARS[provider] ?? []) {\n    const value = process.env[envVar];\n    if (typeof value === 'string' && value.trim().length > 0) {\n      return value.trim();\n    }\n  }\n\n  return undefined;\n}\n\nfunction getAttachmentFilename(part: CacheablePart): string | undefined {\n  const explicitFilename = getObjectValue(part, 'filename');\n  if (typeof explicitFilename === 'string' && explicitFilename.trim().length > 0) {\n    return explicitFilename.trim();\n  }\n\n  return getFilenameFromAttachmentData(getObjectValue(part, 'data') ?? getObjectValue(part, 'image'));\n}\n\nfunction getAttachmentMimeType(part: CacheablePart, fallback: string): string {\n  const mimeType = getObjectValue(part, 'mimeType');\n  if (typeof mimeType === 'string' && mimeType.trim().length > 0) {\n    return mimeType.trim();\n  }\n\n  const asset = getObjectValue(part, 'data') ?? getObjectValue(part, 'image');\n  if (typeof asset === 'string' && asset.startsWith('data:')) {\n    const semicolonIndex = asset.indexOf(';');\n    const commaIndex = asset.indexOf(',');\n    const endIndex = semicolonIndex === -1 ? commaIndex : Math.min(semicolonIndex, commaIndex);\n    if (endIndex > 5) {\n      return asset.slice(5, endIndex);\n    }\n  }\n\n  return fallback;\n}\n\nfunction getAttachmentUrl(asset: unknown): string | undefined {\n  if (asset instanceof URL) {\n    return asset.toString();\n  }\n\n  if (typeof asset === 'string' && /^(https?:\\/\\/|data:)/i.test(asset)) {\n    return asset;\n  }\n\n  return undefined;\n}\n\nfunction getAttachmentFingerprint(asset: unknown): { url?: string; contentHash?: string } {\n  const url = getAttachmentUrl(asset);\n  if (url) {\n    return { url };\n  }\n\n  const base64 = encodeAttachmentBase64(asset);\n  if (base64) {\n    return { contentHash: createHash('sha256').update(base64).digest('hex') };\n  }\n\n  return {};\n}\n\nfunction encodeAttachmentBase64(asset: unknown): string | undefined {\n  if (typeof asset === 'string') {\n    if (asset.startsWith('data:')) {\n      const commaIndex = asset.indexOf(',');\n      return commaIndex === -1 ? undefined : asset.slice(commaIndex + 1);\n    }\n\n    if (/^https?:\\/\\//i.test(asset)) {\n      return undefined;\n    }\n\n    return asset;\n  }\n\n  if (typeof Buffer !== 'undefined' && Buffer.isBuffer(asset)) {\n    return asset.toString('base64');\n  }\n\n  if (asset instanceof Uint8Array) {\n    return Buffer.from(asset).toString('base64');\n  }\n\n  if (asset instanceof ArrayBuffer) {\n    return Buffer.from(asset).toString('base64');\n  }\n\n  if (ArrayBuffer.isView(asset)) {\n    return Buffer.from(asset.buffer, asset.byteOffset, asset.byteLength).toString('base64');\n  }\n\n  return undefined;\n}\n\nfunction createTimeoutSignal(timeoutMs: number): { signal: AbortSignal; cleanup: () => void } {\n  const controller = new AbortController();\n  const timeout = setTimeout(\n    () => controller.abort(new Error(`Attachment token counting timed out after ${timeoutMs}ms`)),\n    timeoutMs,\n  );\n  const cleanup = () => clearTimeout(timeout);\n  controller.signal.addEventListener('abort', cleanup, { once: true });\n  return { signal: controller.signal, cleanup };\n}\n\nfunction getNumericResponseField(value: unknown, paths: string[][]): number | undefined {\n  for (const path of paths) {\n    let current: unknown = value;\n    for (const segment of path) {\n      current = getObjectValue(current, segment);\n      if (current === undefined) break;\n    }\n\n    if (typeof current === 'number' && Number.isFinite(current)) {\n      return current;\n    }\n  }\n\n  return undefined;\n}\n\nfunction toOpenAIInputPart(part: CacheablePart): Record<string, unknown> | undefined {\n  if (getObjectValue(part, 'type') === 'image' || isImageLikeFilePart(part)) {\n    const asset = getObjectValue(part, 'image') ?? getObjectValue(part, 'data');\n    const imageUrl = getAttachmentUrl(asset);\n    if (imageUrl) {\n      return { type: 'input_image', image_url: imageUrl, detail: resolveImageDetail(part) };\n    }\n\n    const base64 = encodeAttachmentBase64(asset);\n    if (!base64) return undefined;\n    return {\n      type: 'input_image',\n      image_url: `data:${getAttachmentMimeType(part, 'image/png')};base64,${base64}`,\n      detail: resolveImageDetail(part),\n    };\n  }\n\n  if (getObjectValue(part, 'type') === 'file') {\n    const asset = getObjectValue(part, 'data');\n    const fileUrl = getAttachmentUrl(asset);\n    return fileUrl\n      ? {\n          type: 'input_file',\n          file_url: fileUrl,\n          filename: getAttachmentFilename(part) ?? 'attachment',\n        }\n      : (() => {\n          const base64 = encodeAttachmentBase64(asset);\n          if (!base64) return undefined;\n          return {\n            type: 'input_file',\n            file_data: `data:${getAttachmentMimeType(part, 'application/octet-stream')};base64,${base64}`,\n            filename: getAttachmentFilename(part) ?? 'attachment',\n          };\n        })();\n  }\n\n  return undefined;\n}\n\nfunction toAnthropicContentPart(part: CacheablePart): Record<string, unknown> | undefined {\n  const asset = getObjectValue(part, 'image') ?? getObjectValue(part, 'data');\n  const url = getAttachmentUrl(asset);\n\n  if (getObjectValue(part, 'type') === 'image' || isImageLikeFilePart(part)) {\n    return url && /^https?:\\/\\//i.test(url)\n      ? { type: 'image', source: { type: 'url', url } }\n      : (() => {\n          const base64 = encodeAttachmentBase64(asset);\n          if (!base64) return undefined;\n          return {\n            type: 'image',\n            source: { type: 'base64', media_type: getAttachmentMimeType(part, 'image/png'), data: base64 },\n          };\n        })();\n  }\n\n  if (getObjectValue(part, 'type') === 'file') {\n    return url && /^https?:\\/\\//i.test(url)\n      ? { type: 'document', source: { type: 'url', url } }\n      : (() => {\n          const base64 = encodeAttachmentBase64(asset);\n          if (!base64) return undefined;\n          return {\n            type: 'document',\n            source: { type: 'base64', media_type: getAttachmentMimeType(part, 'application/pdf'), data: base64 },\n          };\n        })();\n  }\n\n  return undefined;\n}\n\nfunction toGooglePart(part: CacheablePart): Record<string, unknown> | undefined {\n  const asset = getObjectValue(part, 'image') ?? getObjectValue(part, 'data');\n  const url = getAttachmentUrl(asset);\n  const mimeType = getAttachmentMimeType(\n    part,\n    getObjectValue(part, 'type') === 'file' && !isImageLikeFilePart(part) ? 'application/pdf' : 'image/png',\n  );\n\n  if (url && !url.startsWith('data:')) {\n    return { fileData: { mimeType, fileUri: url } };\n  }\n\n  const base64 = encodeAttachmentBase64(asset);\n  if (!base64) return undefined;\n  return { inlineData: { mimeType, data: base64 } };\n}\n\nasync function fetchOpenAIAttachmentTokenEstimate(modelId: string, part: CacheablePart): Promise<number | undefined> {\n  const apiKey = getProviderApiKey('openai');\n  const inputPart = toOpenAIInputPart(part);\n  if (!apiKey || !inputPart) return undefined;\n\n  const { signal, cleanup } = createTimeoutSignal(ATTACHMENT_COUNT_TIMEOUT_MS);\n  try {\n    const response = await fetch('https://api.openai.com/v1/responses/input_tokens', {\n      method: 'POST',\n      headers: {\n        Authorization: `Bearer ${apiKey}`,\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        model: modelId,\n        input: [{ type: 'message', role: 'user', content: [inputPart] }],\n      }),\n      signal,\n    });\n\n    if (!response.ok) return undefined;\n    const body = await response.json();\n    return getNumericResponseField(body, [\n      ['input_tokens'],\n      ['total_tokens'],\n      ['usage', 'input_tokens'],\n      ['usage', 'total_tokens'],\n    ]);\n  } finally {\n    cleanup();\n  }\n}\n\nasync function fetchAnthropicAttachmentTokenEstimate(\n  modelId: string,\n  part: CacheablePart,\n): Promise<number | undefined> {\n  const apiKey = getProviderApiKey('anthropic');\n  const contentPart = toAnthropicContentPart(part);\n  if (!apiKey || !contentPart) return undefined;\n\n  const { signal, cleanup } = createTimeoutSignal(ATTACHMENT_COUNT_TIMEOUT_MS);\n  try {\n    const response = await fetch('https://api.anthropic.com/v1/messages/count_tokens', {\n      method: 'POST',\n      headers: {\n        'x-api-key': apiKey,\n        'anthropic-version': '2023-06-01',\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        model: modelId,\n        messages: [{ role: 'user', content: [contentPart] }],\n      }),\n      signal,\n    });\n\n    if (!response.ok) return undefined;\n    const body = await response.json();\n    return getNumericResponseField(body, [['input_tokens']]);\n  } finally {\n    cleanup();\n  }\n}\n\nasync function fetchGoogleAttachmentTokenEstimate(modelId: string, part: CacheablePart): Promise<number | undefined> {\n  const apiKey = getProviderApiKey('google');\n  const googlePart = toGooglePart(part);\n  if (!apiKey || !googlePart) return undefined;\n\n  const { signal, cleanup } = createTimeoutSignal(ATTACHMENT_COUNT_TIMEOUT_MS);\n  try {\n    const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/${modelId}:countTokens`, {\n      method: 'POST',\n      headers: {\n        'x-goog-api-key': apiKey,\n        'Content-Type': 'application/json',\n      },\n      body: JSON.stringify({\n        contents: [{ role: 'user', parts: [googlePart] }],\n      }),\n      signal,\n    });\n\n    if (!response.ok) return undefined;\n    const body = await response.json();\n    return getNumericResponseField(body, [['totalTokens'], ['total_tokens']]);\n  } finally {\n    cleanup();\n  }\n}\n\n/**\n * Token counting utility using tokenx for rough local estimation and\n * provider-aware heuristics for image parts so multimodal prompts are not\n * undercounted as generic JSON blobs.\n */\nexport class TokenCounter {\n  private readonly cacheSource: string;\n  private readonly defaultModelContext?: TokenCounterModelContext;\n  private readonly modelContextStorage = new AsyncLocalStorage<TokenCounterModelContext | undefined>();\n  private readonly inFlightAttachmentCounts = new Map<string, Promise<number | undefined>>();\n\n  // Per-message overhead: accounts for role tokens, message framing, and separators.\n  // 3.8 remains a practical average across providers for OM thresholding.\n  private static readonly TOKENS_PER_MESSAGE = 3.8;\n  // Conversation-level overhead: system prompt framing, reply priming tokens, etc.\n  private static readonly TOKENS_PER_CONVERSATION = 24;\n\n  constructor(options?: TokenCounterOptions) {\n    this.cacheSource = `v${TOKEN_ESTIMATE_CACHE_VERSION}:${resolveEstimatorId()}`;\n    this.defaultModelContext = parseModelContext(options?.model);\n  }\n\n  runWithModelContext<T>(model: string | TokenCounterModelContext | undefined, fn: () => T): T {\n    return this.modelContextStorage.run(parseModelContext(model), fn);\n  }\n\n  private getModelContext(): TokenCounterModelContext | undefined {\n    return this.modelContextStorage.getStore() ?? this.defaultModelContext;\n  }\n\n  /**\n   * Count tokens in a plain string\n   */\n  countString(text: string): number {\n    if (!text) return 0;\n    return estimateTokenCount(text);\n  }\n\n  private readOrPersistPartEstimate(part: CacheablePart, kind: string, payload: string): number {\n    const key = buildEstimateKey(kind, payload);\n    const cached = getPartCacheEntry(part, key);\n    if (isValidCacheEntry(cached, key, this.cacheSource)) {\n      return cached.tokens;\n    }\n\n    const tokens = this.countString(payload);\n    setPartCacheEntry(part, key, {\n      v: TOKEN_ESTIMATE_CACHE_VERSION,\n      source: this.cacheSource,\n      key,\n      tokens,\n    });\n\n    return tokens;\n  }\n\n  private readOrPersistFixedPartEstimate(part: CacheablePart, kind: string, payload: string, tokens: number): number {\n    const key = buildEstimateKey(kind, payload);\n    const cached = getPartCacheEntry(part, key);\n    if (isValidCacheEntry(cached, key, this.cacheSource)) {\n      return cached.tokens;\n    }\n\n    setPartCacheEntry(part, key, {\n      v: TOKEN_ESTIMATE_CACHE_VERSION,\n      source: this.cacheSource,\n      key,\n      tokens,\n    });\n\n    return tokens;\n  }\n\n  private readOrPersistMessageEstimate(message: MastraDBMessage, kind: string, payload: string): number {\n    const key = buildEstimateKey(kind, payload);\n    const cached = getMessageCacheEntry(message, key);\n    if (isValidCacheEntry(cached, key, this.cacheSource)) {\n      return cached.tokens;\n    }\n\n    const tokens = this.countString(payload);\n    setMessageCacheEntry(message, key, {\n      v: TOKEN_ESTIMATE_CACHE_VERSION,\n      source: this.cacheSource,\n      key,\n      tokens,\n    });\n\n    return tokens;\n  }\n\n  private resolveToolResultForTokenCounting(\n    part: CacheablePart,\n    invocationResult: unknown,\n  ): { value: unknown; usingStoredModelOutput: boolean } {\n    return resolveToolResultValue(part as { providerMetadata?: Record<string, any> }, invocationResult);\n  }\n\n  private countMultimodalToolResultContent(part: CacheablePart, toolResult: unknown): number | undefined {\n    if (!toolResult || typeof toolResult !== 'object') {\n      return undefined;\n    }\n\n    const output = toolResult as Record<string, unknown>;\n    const content = output.type === 'content' && Array.isArray(output.value) ? output.value : output.content;\n    if (!Array.isArray(content)) {\n      return undefined;\n    }\n\n    let hasAttachment = false;\n    let tokens = 0;\n    const cacheParts: unknown[] = [];\n    const countJsonContentPart = (contentPart: Record<string, unknown>) => {\n      const formatted = formatToolResultForObserver(contentPart);\n      tokens += this.countString(formatted);\n      cacheParts.push({ type: 'json', valueHash: createHash('sha256').update(formatted).digest('hex') });\n    };\n\n    for (const item of content) {\n      if (!item || typeof item !== 'object') {\n        continue;\n      }\n\n      const contentPart = item as Record<string, unknown>;\n      const partType = contentPart.type;\n\n      if (partType === 'text') {\n        const text = typeof contentPart.text === 'string' ? contentPart.text : String(contentPart.value ?? '');\n        tokens += this.countString(text);\n        cacheParts.push({ type: 'text', textHash: createHash('sha256').update(text).digest('hex') });\n        continue;\n      }\n\n      if (\n        partType === 'image' ||\n        partType === 'image-data' ||\n        (partType === 'media' && String(contentPart.mediaType ?? '').startsWith('image/'))\n      ) {\n        if (typeof contentPart.data !== 'string') {\n          countJsonContentPart(contentPart);\n          continue;\n        }\n        hasAttachment = true;\n        const imagePart = {\n          type: 'image',\n          image: contentPart.data,\n          mimeType: contentPart.mediaType ?? contentPart.mimeType,\n          providerOptions: contentPart.providerOptions,\n          providerMetadata: contentPart.providerMetadata,\n        };\n        const clientEstimate = getClientPartTokenEstimate(imagePart);\n        if (clientEstimate) {\n          tokens += clientEstimate.tokens;\n          cacheParts.push({\n            type: 'image-data-client-estimate',\n            key: clientEstimate.key,\n            tokens: clientEstimate.tokens,\n          });\n          continue;\n        }\n\n        const estimate = this.estimateImageTokens(imagePart);\n        tokens += estimate.tokens;\n        cacheParts.push({ type: 'image-data', estimate: JSON.parse(estimate.cachePayload) });\n        continue;\n      }\n\n      if (partType === 'audio' || partType === 'file-data' || partType === 'media') {\n        if (typeof contentPart.data !== 'string') {\n          countJsonContentPart(contentPart);\n          continue;\n        }\n        hasAttachment = true;\n        const filePart = {\n          type: 'file',\n          data: contentPart.data,\n          mimeType: contentPart.mediaType ?? contentPart.mimeType,\n          filename: contentPart.filename,\n          providerOptions: contentPart.providerOptions,\n          providerMetadata: contentPart.providerMetadata,\n        };\n\n        const clientEstimate = getClientPartTokenEstimate(filePart);\n        if (clientEstimate) {\n          tokens += clientEstimate.tokens;\n          cacheParts.push({\n            type: 'file-data-client-estimate',\n            key: clientEstimate.key,\n            tokens: clientEstimate.tokens,\n          });\n          continue;\n        }\n\n        if (isImageLikeFilePart(filePart)) {\n          const estimate = this.estimateImageLikeFileTokens(filePart);\n          tokens += estimate.tokens;\n          cacheParts.push({ type: 'image-like-file-data', estimate: JSON.parse(estimate.cachePayload) });\n          continue;\n        }\n\n        const byteEstimate = estimateNonImageFileTokens(this.getModelContext(), filePart);\n        if (byteEstimate) {\n          tokens += byteEstimate.tokens;\n          cacheParts.push({ type: 'file-data', estimate: JSON.parse(byteEstimate.cachePayload) });\n          continue;\n        }\n\n        const descriptor = serializeNonImageFilePartForTokenCounting(filePart);\n        tokens += this.countString(descriptor);\n        cacheParts.push({ type: 'file-data-descriptor', descriptor });\n        continue;\n      }\n\n      countJsonContentPart(contentPart);\n    }\n\n    if (!hasAttachment) {\n      return undefined;\n    }\n\n    return this.readOrPersistFixedPartEstimate(\n      part,\n      'tool-result-multimodal-content',\n      JSON.stringify({ type: 'content', value: cacheParts }),\n      tokens,\n    );\n  }\n\n  private estimateImageAssetTokens(part: CacheablePart, asset: unknown, kind: 'image' | 'file'): ImageTokenEstimate {\n    const modelContext = this.getModelContext();\n    const provider = resolveProviderId(modelContext);\n    const modelId = modelContext?.modelId ?? null;\n    const detail = resolveImageDetail(part);\n    const dimensions = resolveImageDimensions(part);\n    const sourceStats = resolveImageSourceStats(asset);\n\n    if (provider === 'google') {\n      const googleEstimate = estimateGoogleImageTokens(modelContext, part, dimensions);\n      return {\n        tokens: googleEstimate.tokens,\n        cachePayload: JSON.stringify({\n          kind,\n          provider,\n          modelId,\n          estimator: isGoogleGemini3Model(modelContext) ? 'google-gemini-3' : 'google-legacy',\n          mediaResolution: googleEstimate.mediaResolution,\n          width: dimensions.width ?? null,\n          height: dimensions.height ?? null,\n          source: sourceStats.source,\n          sizeBytes: sourceStats.sizeBytes ?? null,\n          mimeType: getObjectValue(part, 'mimeType') ?? null,\n          filename: getObjectValue(part, 'filename') ?? null,\n        }),\n      };\n    }\n\n    if (provider === 'anthropic') {\n      return {\n        tokens: estimateAnthropicImageTokens(dimensions, sourceStats),\n        cachePayload: JSON.stringify({\n          kind,\n          provider,\n          modelId,\n          estimator: 'anthropic',\n          width: dimensions.width ?? null,\n          height: dimensions.height ?? null,\n          source: sourceStats.source,\n          sizeBytes: sourceStats.sizeBytes ?? null,\n          mimeType: getObjectValue(part, 'mimeType') ?? null,\n          filename: getObjectValue(part, 'filename') ?? null,\n        }),\n      };\n    }\n\n    const estimator = resolveOpenAIImageEstimatorConfig(modelContext);\n    const effectiveDetail = resolveEffectiveOpenAIImageDetail(detail, dimensions, sourceStats);\n    const tiles = effectiveDetail === 'high' ? estimateOpenAIHighDetailTiles(dimensions, sourceStats, estimator) : 0;\n    const tokens = estimator.baseTokens + tiles * estimator.tileTokens;\n\n    return {\n      tokens,\n      cachePayload: JSON.stringify({\n        kind,\n        provider,\n        modelId,\n        estimator: provider === 'openai' ? 'openai' : 'fallback',\n        detail,\n        effectiveDetail,\n        width: dimensions.width ?? null,\n        height: dimensions.height ?? null,\n        source: sourceStats.source,\n        sizeBytes: sourceStats.sizeBytes ?? null,\n        mimeType: getObjectValue(part, 'mimeType') ?? null,\n        filename: getObjectValue(part, 'filename') ?? null,\n      }),\n    };\n  }\n\n  private estimateImageTokens(part: CacheablePart): ImageTokenEstimate {\n    return this.estimateImageAssetTokens(part, part.image, 'image');\n  }\n\n  private estimateImageLikeFileTokens(part: CacheablePart): ImageTokenEstimate {\n    return this.estimateImageAssetTokens(part, part.data, 'file');\n  }\n\n  private countAttachmentPartSync(part: CacheablePart): number | undefined {\n    if (part.type === 'image' || part.type === 'file') {\n      const clientEstimate = getClientPartTokenEstimate(part);\n      if (clientEstimate) {\n        return clientEstimate.tokens;\n      }\n    }\n\n    if (part.type === 'image') {\n      const estimate = this.estimateImageTokens(part);\n      return this.readOrPersistFixedPartEstimate(part, 'image', estimate.cachePayload, estimate.tokens);\n    }\n\n    if (part.type === 'file' && isImageLikeFilePart(part)) {\n      const estimate = this.estimateImageLikeFileTokens(part);\n      return this.readOrPersistFixedPartEstimate(part, 'image-like-file', estimate.cachePayload, estimate.tokens);\n    }\n\n    if (part.type === 'file') {\n      const byteEstimate = estimateNonImageFileTokens(this.getModelContext(), part);\n      if (byteEstimate) {\n        return this.readOrPersistFixedPartEstimate(\n          part,\n          'non-image-file',\n          byteEstimate.cachePayload,\n          byteEstimate.tokens,\n        );\n      }\n      return this.readOrPersistPartEstimate(part, 'file-descriptor', serializeNonImageFilePartForTokenCounting(part));\n    }\n\n    return undefined;\n  }\n\n  private buildRemoteAttachmentCachePayload(part: CacheablePart): string | undefined {\n    const isImageAttachment = part.type === 'image' || (part.type === 'file' && isImageLikeFilePart(part));\n    const isNonImageFileAttachment = part.type === 'file' && !isImageAttachment;\n    if (!isImageAttachment && !isNonImageFileAttachment) {\n      return undefined;\n    }\n\n    const modelContext = this.getModelContext();\n    const provider = resolveProviderId(modelContext);\n    const modelId = modelContext?.modelId ?? null;\n    if (!provider || !modelId || !['openai', 'google', 'anthropic'].includes(provider)) {\n      return undefined;\n    }\n\n    const asset = getObjectValue(part, 'image') ?? getObjectValue(part, 'data');\n    const sourceStats = resolveImageSourceStats(asset);\n    const fingerprint = getAttachmentFingerprint(asset);\n    return JSON.stringify({\n      strategy: 'provider-endpoint',\n      provider,\n      modelId,\n      type: getObjectValue(part, 'type') ?? null,\n      detail: isImageAttachment ? resolveImageDetail(part) : null,\n      mediaResolution: provider === 'google' && isImageAttachment ? resolveGoogleMediaResolution(part) : null,\n      mimeType: getAttachmentMimeType(part, isNonImageFileAttachment ? 'application/pdf' : 'image/png'),\n      filename: getAttachmentFilename(part) ?? null,\n      source: sourceStats.source,\n      sizeBytes: sourceStats.sizeBytes ?? null,\n      assetUrl: fingerprint.url ?? null,\n      assetHash: fingerprint.contentHash ?? null,\n    });\n  }\n\n  private async fetchProviderAttachmentTokenEstimate(part: CacheablePart): Promise<number | undefined> {\n    const modelContext = this.getModelContext();\n    const provider = resolveProviderId(modelContext);\n    const modelId = modelContext?.modelId;\n    if (!provider || !modelId) return undefined;\n\n    try {\n      if (provider === 'openai') {\n        return await fetchOpenAIAttachmentTokenEstimate(modelId, part);\n      }\n\n      if (provider === 'google') {\n        return await fetchGoogleAttachmentTokenEstimate(modelId, part);\n      }\n\n      if (provider === 'anthropic') {\n        return await fetchAnthropicAttachmentTokenEstimate(modelId, part);\n      }\n    } catch {\n      return undefined;\n    }\n\n    return undefined;\n  }\n\n  private async countAttachmentPartAsync(part: CacheablePart): Promise<number | undefined> {\n    if (part.type === 'image' || part.type === 'file') {\n      const clientEstimate = getClientPartTokenEstimate(part);\n      if (clientEstimate) {\n        return clientEstimate.tokens;\n      }\n    }\n\n    const isImageAttachment = part.type === 'image' || (part.type === 'file' && isImageLikeFilePart(part));\n    const remotePayload = this.buildRemoteAttachmentCachePayload(part);\n\n    if (remotePayload) {\n      const remoteKey = buildEstimateKey('attachment-provider', remotePayload);\n      const cachedRemote = getPartCacheEntry(part, remoteKey);\n      if (isValidCacheEntry(cachedRemote, remoteKey, this.cacheSource)) {\n        return cachedRemote.tokens;\n      }\n\n      const existingRequest = this.inFlightAttachmentCounts.get(remoteKey);\n      if (existingRequest) {\n        const remoteTokens = await existingRequest;\n        if (typeof remoteTokens === 'number' && Number.isFinite(remoteTokens) && remoteTokens > 0) {\n          setPartCacheEntry(part, remoteKey, {\n            v: TOKEN_ESTIMATE_CACHE_VERSION,\n            source: this.cacheSource,\n            key: remoteKey,\n            tokens: remoteTokens,\n          });\n          return remoteTokens;\n        }\n      } else {\n        const remoteRequest = this.fetchProviderAttachmentTokenEstimate(part);\n        this.inFlightAttachmentCounts.set(remoteKey, remoteRequest);\n\n        let remoteTokens: number | undefined;\n        try {\n          remoteTokens = await remoteRequest;\n        } finally {\n          this.inFlightAttachmentCounts.delete(remoteKey);\n        }\n\n        if (typeof remoteTokens === 'number' && Number.isFinite(remoteTokens) && remoteTokens > 0) {\n          setPartCacheEntry(part, remoteKey, {\n            v: TOKEN_ESTIMATE_CACHE_VERSION,\n            source: this.cacheSource,\n            key: remoteKey,\n            tokens: remoteTokens,\n          });\n          return remoteTokens;\n        }\n      }\n\n      if (isImageAttachment) {\n        await resolveImageDimensionsAsync(part);\n      }\n\n      const fallbackPayload = JSON.stringify({\n        ...JSON.parse(remotePayload),\n        strategy: 'local-fallback',\n        ...(isImageAttachment ? resolveImageDimensions(part) : {}),\n      });\n      const fallbackKey = buildEstimateKey('attachment-provider', fallbackPayload);\n      const cachedFallback = getPartCacheEntry(part, fallbackKey);\n      if (isValidCacheEntry(cachedFallback, fallbackKey, this.cacheSource)) {\n        return cachedFallback.tokens;\n      }\n\n      const localTokens = this.countAttachmentPartSync(part);\n      if (localTokens === undefined) {\n        return undefined;\n      }\n\n      setPartCacheEntry(part, fallbackKey, {\n        v: TOKEN_ESTIMATE_CACHE_VERSION,\n        source: this.cacheSource,\n        key: fallbackKey,\n        tokens: localTokens,\n      });\n      return localTokens;\n    }\n\n    if (isImageAttachment) {\n      await resolveImageDimensionsAsync(part);\n    }\n\n    const localTokens = this.countAttachmentPartSync(part);\n    return localTokens;\n  }\n\n  private countNonAttachmentPart(part: CacheablePart): {\n    tokens: number;\n    overheadDelta: number;\n    toolResultDelta: number;\n  } {\n    let overheadDelta = 0;\n    let toolResultDelta = 0;\n\n    if (part.type === 'text') {\n      return { tokens: this.readOrPersistPartEstimate(part, 'text', part.text), overheadDelta, toolResultDelta };\n    }\n\n    if (part.type === 'tool-invocation') {\n      const invocation = part.toolInvocation;\n      let tokens = 0;\n\n      if (invocation.state === 'call' || invocation.state === 'partial-call') {\n        if (invocation.toolName) {\n          tokens += this.readOrPersistPartEstimate(part, `tool-${invocation.state}-name`, invocation.toolName);\n        }\n        if (invocation.args) {\n          if (typeof invocation.args === 'string') {\n            tokens += this.readOrPersistPartEstimate(part, `tool-${invocation.state}-args`, invocation.args);\n          } else {\n            const argsJson = JSON.stringify(invocation.args);\n            tokens += this.readOrPersistPartEstimate(part, `tool-${invocation.state}-args-json`, argsJson);\n            overheadDelta -= 12;\n          }\n        }\n\n        return { tokens, overheadDelta, toolResultDelta };\n      }\n\n      if (invocation.state === 'result') {\n        toolResultDelta++;\n        const { value: resultForCounting, usingStoredModelOutput } = this.resolveToolResultForTokenCounting(\n          part,\n          invocation.result,\n        );\n\n        if (resultForCounting !== undefined) {\n          const contentTokens = this.countMultimodalToolResultContent(part, resultForCounting);\n\n          if (contentTokens !== undefined) {\n            tokens += contentTokens;\n          } else {\n            const formattedResult = formatToolResultForObserver(resultForCounting);\n            tokens += this.readOrPersistPartEstimate(\n              part,\n              usingStoredModelOutput ? 'tool-result-model-output-json' : 'tool-result-json',\n              formattedResult,\n            );\n          }\n\n          if (typeof resultForCounting !== 'string') {\n            overheadDelta -= 12;\n          }\n        }\n\n        return { tokens, overheadDelta, toolResultDelta };\n      }\n\n      if (invocation.state === 'output-denied') {\n        // A declined approval carries no tool result; count its denial reason like a small result\n        // so token accounting stays consistent (and doesn't throw on the new state).\n        toolResultDelta++;\n        const reason =\n          (invocation as { approval?: { reason?: string } }).approval?.reason ??\n          'Tool call was not approved by the user';\n        tokens += this.readOrPersistPartEstimate(part, 'tool-result-denied', reason);\n        return { tokens, overheadDelta, toolResultDelta };\n      }\n\n      throw new Error(\n        `Unhandled tool-invocation state '${(part as any).toolInvocation?.state}' in token counting for part type '${part.type}'`,\n      );\n    }\n\n    if (typeof part.type === 'string' && part.type.startsWith('data-')) {\n      return { tokens: 0, overheadDelta, toolResultDelta };\n    }\n\n    if (part.type === 'reasoning') {\n      return { tokens: 0, overheadDelta, toolResultDelta };\n    }\n\n    const serialized = serializePartForTokenCounting(part);\n    return {\n      tokens: this.readOrPersistPartEstimate(part, `part-${part.type}`, serialized),\n      overheadDelta,\n      toolResultDelta,\n    };\n  }\n\n  /**\n   * Count tokens in a single message\n   */\n  countMessage(message: MastraDBMessage): number {\n    let payloadTokens = this.countString(message.role);\n    let overhead = TokenCounter.TOKENS_PER_MESSAGE;\n    let toolResultCount = 0;\n\n    if (typeof message.content === 'string') {\n      payloadTokens += this.readOrPersistMessageEstimate(message, 'message-content', message.content);\n    } else if (message.content && typeof message.content === 'object') {\n      if (message.content.content && !Array.isArray(message.content.parts)) {\n        payloadTokens += this.readOrPersistMessageEstimate(message, 'content-content', message.content.content);\n      } else if (Array.isArray(message.content.parts)) {\n        for (const part of message.content.parts as CacheablePart[]) {\n          const attachmentTokens = this.countAttachmentPartSync(part);\n          if (attachmentTokens !== undefined) {\n            payloadTokens += attachmentTokens;\n            continue;\n          }\n\n          const result = this.countNonAttachmentPart(part);\n          payloadTokens += result.tokens;\n          overhead += result.overheadDelta;\n          toolResultCount += result.toolResultDelta;\n        }\n      }\n    }\n\n    if (toolResultCount > 0) {\n      overhead += toolResultCount * TokenCounter.TOKENS_PER_MESSAGE;\n    }\n\n    return Math.round(payloadTokens + overhead);\n  }\n\n  async countMessageAsync(message: MastraDBMessage): Promise<number> {\n    let payloadTokens = this.countString(message.role);\n    let overhead = TokenCounter.TOKENS_PER_MESSAGE;\n    let toolResultCount = 0;\n\n    if (typeof message.content === 'string') {\n      payloadTokens += this.readOrPersistMessageEstimate(message, 'message-content', message.content);\n    } else if (message.content && typeof message.content === 'object') {\n      if (message.content.content && !Array.isArray(message.content.parts)) {\n        payloadTokens += this.readOrPersistMessageEstimate(message, 'content-content', message.content.content);\n      } else if (Array.isArray(message.content.parts)) {\n        for (const part of message.content.parts as CacheablePart[]) {\n          const attachmentTokens = await this.countAttachmentPartAsync(part);\n          if (attachmentTokens !== undefined) {\n            payloadTokens += attachmentTokens;\n            continue;\n          }\n\n          const result = this.countNonAttachmentPart(part);\n          payloadTokens += result.tokens;\n          overhead += result.overheadDelta;\n          toolResultCount += result.toolResultDelta;\n        }\n      }\n    }\n\n    if (toolResultCount > 0) {\n      overhead += toolResultCount * TokenCounter.TOKENS_PER_MESSAGE;\n    }\n\n    return Math.round(payloadTokens + overhead);\n  }\n\n  /**\n   * Count tokens in an array of messages\n   */\n  countMessages(messages: MastraDBMessage[]): number {\n    if (!messages || messages.length === 0) return 0;\n\n    let total = TokenCounter.TOKENS_PER_CONVERSATION;\n    for (const message of messages) {\n      total += this.countMessage(message);\n    }\n    return total;\n  }\n\n  async countMessagesAsync(messages: MastraDBMessage[]): Promise<number> {\n    if (!messages || messages.length === 0) return 0;\n\n    const messageTotals = await Promise.all(messages.map(message => this.countMessageAsync(message)));\n    return TokenCounter.TOKENS_PER_CONVERSATION + messageTotals.reduce((sum, count) => sum + count, 0);\n  }\n\n  /**\n   * Count tokens in observations string\n   */\n  countObservations(observations: string): number {\n    return this.countString(observations);\n  }\n}\n","import type { MastraDBMessage, MessageList } from '@mastra/core/agent';\nimport { coreFeatures } from '@mastra/core/features';\nimport type { MastraModelConfig } from '@mastra/core/llm';\nimport { resolveModelConfig } from '@mastra/core/llm';\nimport type { Mastra } from '@mastra/core/mastra';\nimport { getThreadOMMetadata, setThreadOMMetadata } from '@mastra/core/memory';\nimport type { ObservabilityContext } from '@mastra/core/observability';\nimport type { ProcessorContext, ProcessorStreamWriter } from '@mastra/core/processors';\nimport { MessageHistory } from '@mastra/core/processors';\nimport type { RequestContext } from '@mastra/core/request-context';\nimport type { MemoryStorage, ObservationalMemoryRecord, ObservationalMemoryHistoryOptions } from '@mastra/core/storage';\nimport type { ProviderMetadata } from '@mastra/core/stream';\nimport xxhash from 'xxhash-wasm';\n\nimport type { Memory } from '../..';\nimport { resolveActivationTTL } from './activation-ttl';\nimport { BufferingCoordinator } from './buffering-coordinator';\nimport { composeObservationExtractors, composeReflectionExtractors } from './built-in-extractors';\nimport {\n  OBSERVATIONAL_MEMORY_DEFAULTS,\n  OBSERVATION_CONTEXT_PROMPT,\n  OBSERVATION_CONTEXT_INSTRUCTIONS,\n  OBSERVATION_RETRIEVAL_INSTRUCTIONS,\n} from './constants';\n\n/**\n * Returns the parts from the latest step of a message (after the last step-start marker).\n * If no step-start marker exists, returns all parts.\n */\nexport function getLatestStepParts(parts: MastraDBMessage['content']['parts']): MastraDBMessage['content']['parts'] {\n  for (let i = parts.length - 1; i >= 0; i--) {\n    if (parts[i]?.type === 'step-start') {\n      return parts.slice(i + 1);\n    }\n  }\n  return parts;\n}\n\n/**\n * Returns true when a message contains at least one part with visible user/assistant\n * content (text, tool-invocation, reasoning, image, file).  Messages that only carry\n * internal `data-*` parts (buffering markers, observation markers, etc.) return false.\n */\nfunction messageHasVisibleContent(msg: MastraDBMessage): boolean {\n  const content = msg.content as { parts?: Array<{ type?: string }>; content?: string };\n  if (content?.parts && Array.isArray(content.parts)) {\n    return content.parts.some(p => {\n      const t = p?.type;\n      return t && !t.startsWith('data-') && t !== 'step-start';\n    });\n  }\n  if (content?.content) return true;\n  return false;\n}\n\n/**\n * Build a messageRange string from the first and last messages that have visible\n * content.  Falls back to the full array boundaries when every message is data-only.\n */\nexport function buildMessageRange(messages: MastraDBMessage[]): string {\n  const first = messages.find(messageHasVisibleContent) ?? messages[0]!;\n  const last = [...messages].reverse().find(messageHasVisibleContent) ?? messages[messages.length - 1]!;\n  return `${first.id}:${last.id}`;\n}\n\n/**\n * Returns the unix-ms timestamp of the last non-data part in the last assistant\n * message, representing when the last visible LLM response completed. Used as the\n * last activity time for activateAfterIdle checks.\n */\nexport function getLastActivityFromMessages(messages?: MastraDBMessage[]): number | undefined {\n  if (!messages) return undefined;\n\n  for (let i = messages.length - 1; i >= 0; i--) {\n    const message = messages[i];\n    if (!message || message.role !== 'assistant') {\n      continue;\n    }\n\n    if (!message.content || typeof message.content === 'string') {\n      return message.createdAt ? new Date(message.createdAt).getTime() : undefined;\n    }\n\n    for (let j = message.content.parts.length - 1; j >= 0; j--) {\n      const part = message.content.parts[j];\n      if (!part || part.type?.startsWith('data-')) {\n        continue;\n      }\n\n      if (part.createdAt !== undefined) {\n        return part.createdAt;\n      }\n    }\n\n    return message.createdAt ? new Date(message.createdAt).getTime() : undefined;\n  }\n\n  return undefined;\n}\n\nfunction formatModelContext(provider?: string, modelId?: string): string | undefined {\n  if (provider && modelId) {\n    return `${provider}/${modelId}`;\n  }\n\n  return modelId;\n}\n\nexport function getLastModelFromMessages(messages?: MastraDBMessage[]): string | undefined {\n  if (!messages) return undefined;\n\n  for (let i = messages.length - 1; i >= 0; i--) {\n    const message = messages[i];\n    if (!message || message.role !== 'assistant' || !message.content || typeof message.content === 'string') {\n      continue;\n    }\n\n    for (let j = message.content.parts.length - 1; j >= 0; j--) {\n      const part = message.content.parts[j];\n      if (part?.type === 'step-start' && typeof part.model === 'string' && part.model.length > 0) {\n        return part.model;\n      }\n    }\n\n    const metadata = message.content.metadata as { provider?: string; modelId?: string } | undefined;\n    const model = formatModelContext(metadata?.provider, metadata?.modelId);\n    if (model) {\n      return model;\n    }\n  }\n\n  return undefined;\n}\n\nexport function getCurrentModel(model?: { provider?: string; modelId?: string }): string | undefined {\n  return formatModelContext(model?.provider, model?.modelId);\n}\n\nexport { didProviderChange } from './model-context';\n\nfunction parseActivationTTL(\n  value: number | string | false | undefined,\n  fieldPath: string,\n): number | 'auto' | undefined {\n  if (value === undefined || value === false) {\n    return undefined;\n  }\n\n  if (value === 'auto') {\n    return value;\n  }\n\n  if (typeof value === 'number') {\n    if (!Number.isFinite(value) || value < 0) {\n      throw new Error(`${fieldPath} must be a non-negative number of milliseconds or a duration string like \"5m\".`);\n    }\n    return value;\n  }\n\n  const trimmed = value.trim();\n  const match = trimmed.match(\n    /^(\\d+(?:\\.\\d+)?)\\s*(ms|msec|msecs|millisecond|milliseconds|s|sec|secs|second|seconds|m|min|mins|minute|minutes|h|hr|hrs|hour|hours)$/i,\n  );\n\n  if (!match) {\n    throw new Error(\n      `${fieldPath} must be a non-negative number of milliseconds or a duration string like \"5m\" or \"1hr\".`,\n    );\n  }\n\n  const rawAmount = match[1]!;\n  const rawUnit = match[2]!;\n  const amount = Number(rawAmount);\n  const unit = rawUnit.toLowerCase();\n\n  if (!Number.isFinite(amount) || amount < 0) {\n    throw new Error(`${fieldPath} must be a non-negative number of milliseconds or a duration string like \"5m\".`);\n  }\n\n  const multiplier =\n    unit === 'ms' || unit === 'msec' || unit === 'msecs' || unit === 'millisecond' || unit === 'milliseconds'\n      ? 1\n      : unit === 's' || unit === 'sec' || unit === 'secs' || unit === 'second' || unit === 'seconds'\n        ? 1_000\n        : unit === 'm' || unit === 'min' || unit === 'mins' || unit === 'minute' || unit === 'minutes'\n          ? 60_000\n          : 3_600_000;\n\n  return amount * multiplier;\n}\n\nimport { addRelativeTimeToObservations } from './date-utils';\nimport { omDebug, omError } from './debug';\nimport {\n  buildExtractedValueContextSections,\n  buildThreadMetadataFromExtractedValues,\n  getPriorExtractedValues,\n} from './extracted-values';\nimport { createBufferingStartMarker, createActivationMarker } from './markers';\nimport {\n  findLastCompletedObservationBoundary,\n  getUnobservedParts,\n  getBufferedChunks,\n  stripThreadTags,\n} from './message-utils';\nimport { ModelByInputTokens } from './model-by-input-tokens';\nimport { didProviderChange as hasProviderChanged } from './model-context';\nimport { renderObservationGroupsForReflection, wrapInObservationGroup } from './observation-groups';\nimport { ObservationStrategy } from './observation-strategies/index';\nimport { ObservationTurn } from './observation-turn/index';\nimport type { ObservationTurnHooks } from './observation-turn/types';\nimport { optimizeObservationsForContext, formatMessagesForObserver } from './observer-agent';\nimport { ObserverRunner } from './observer-runner';\nimport { registerOp, unregisterOp, isOpActiveInProcess } from './operation-registry';\nimport type { CompressionLevel } from './reflector-agent';\nimport { ReflectorRunner } from './reflector-runner';\nimport { isOmReproCaptureEnabled, writeObserverExchangeReproCapture } from './repro-capture';\nimport {\n  calculateDynamicThreshold,\n  calculateProjectedMessageRemoval,\n  getMaxThreshold,\n  resolveActivationRatio,\n  resolveBlockAfter,\n  resolveBufferTokens,\n} from './thresholds';\nimport { TokenCounter } from './token-counter';\nimport type { TokenCounterModelContext } from './token-counter';\nimport type {\n  DataOmStatusPart,\n  ObservationDebugEvent,\n  ObservationalMemoryConfig,\n  ObservationalMemoryModel,\n  ObserveHookUsage,\n  ObserveHooks,\n  ResolvedObservationConfig,\n  ResolvedReflectionConfig,\n  ThresholdRange,\n  ObservationMarkerConfig,\n  ObservationModelContext,\n} from './types';\n\n/**\n * ObservationalMemory - A three-agent memory system for long conversations.\n *\n * This processor:\n * 1. On input: Injects observations into context, filters out observed messages\n * 2. On output: Tracks new messages, triggers Observer/Reflector when thresholds hit\n *\n * The Actor (main agent) sees:\n * - Observations (compressed history)\n * - Suggested continuation message\n * - Recent unobserved messages\n *\n * @example\n * ```ts\n * import { ObservationalMemory } from '@mastra/memory/processors';\n *\n * // Minimal configuration\n * const om = new ObservationalMemory({ storage });\n *\n * // Full configuration\n * const om = new ObservationalMemory({\n *   storage,\n *   model: 'google/gemini-2.5-flash', // shared model for both agents\n *   shareTokenBudget: true,\n *   observation: {\n *     messageTokens: 30_000,\n *     modelSettings: { temperature: 0.3 },\n *   },\n *   reflection: {\n *     observationTokens: 40_000,\n *   },\n * });\n *\n * const agent = new Agent({\n *   inputProcessors: [om],\n *   outputProcessors: [om],\n * });\n * ```\n */\nexport class ObservationalMemory {\n  private storage: MemoryStorage;\n  private tokenCounter: TokenCounter;\n  readonly scope: 'resource' | 'thread';\n  /** Whether retrieval-mode observation groups are enabled. */\n  readonly retrieval: boolean;\n  private observationConfig: ResolvedObservationConfig;\n  private reflectionConfig: ResolvedReflectionConfig;\n  private onDebugEvent?: (event: ObservationDebugEvent) => void;\n  readonly onIndexObservations?: (observation: {\n    text: string;\n    groupId: string;\n    range: string;\n    threadId: string;\n    resourceId: string;\n    observedAt?: Date;\n  }) => Promise<void>;\n\n  /** Observer agent runner — handles LLM calls for extracting observations. */\n  readonly observer: ObserverRunner;\n\n  /** Reflector agent runner — handles LLM calls for compressing observations. */\n  readonly reflector: ReflectorRunner;\n\n  /** Buffering state coordinator — manages static maps and buffering lifecycle. */\n  readonly buffering: BufferingCoordinator;\n\n  private shouldObscureThreadIds = false;\n  private hasher = xxhash();\n  private mastra?: Mastra;\n  private memory?: Memory;\n\n  /**\n   * Track message IDs observed during this instance's lifetime.\n   * Prevents re-observing messages when per-thread lastObservedAt cursors\n   * haven't fully advanced past messages observed in a prior cycle.\n   * @internal Used by observation strategies. Do not call directly.\n   */\n  observedMessageIds = new Set<string>();\n\n  /** Internal MessageHistory for message persistence */\n  private messageHistory: MessageHistory;\n\n  /**\n   * In-memory mutex for serializing observation/reflection cycles per resource/thread.\n   * Prevents race conditions where two concurrent cycles could both read isObserving=false\n   * before either sets it to true, leading to lost work.\n   *\n   * Key format: \"resource:{resourceId}\" or \"thread:{threadId}\"\n   * Value: Promise that resolves when the lock is released\n   *\n   * NOTE: This mutex only works within a single Node.js process. For distributed\n   * deployments, external locking (Redis, database locks) would be needed, or\n   * accept eventual consistency (acceptable for v1).\n   */\n  private locks = new Map<string, Promise<void>>();\n\n  /**\n   * Acquire a lock for the given key, execute the callback, then release.\n   * If a lock is already held, waits for it to be released before acquiring.\n   */\n  private async withLock<T>(key: string, fn: () => Promise<T>): Promise<T> {\n    // Wait for any existing lock to be released\n    const existingLock = this.locks.get(key);\n    if (existingLock) {\n      await existingLock;\n    }\n\n    // Create a new lock\n    let releaseLock: () => void;\n    const lockPromise = new Promise<void>(resolve => {\n      releaseLock = resolve;\n    });\n    this.locks.set(key, lockPromise);\n\n    try {\n      return await fn();\n    } finally {\n      // Release the lock\n      releaseLock!();\n      // Clean up if this is still our lock\n      if (this.locks.get(key) === lockPromise) {\n        this.locks.delete(key);\n      }\n    }\n  }\n\n  constructor(config: ObservationalMemoryConfig) {\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    // Validate that top-level model is not used together with sub-config models\n    if (config.model && config.observation?.model) {\n      throw new Error(\n        'Cannot set both `model` and `observation.model`. Use `model` to set both agents, or set each individually.',\n      );\n    }\n    if (config.model && config.reflection?.model) {\n      throw new Error(\n        'Cannot set both `model` and `reflection.model`. Use `model` to set both agents, or set each individually.',\n      );\n    }\n\n    this.shouldObscureThreadIds = config.obscureThreadIds || false;\n    this.storage = config.storage;\n    this.scope = config.scope ?? 'thread';\n    this.retrieval = Boolean(config.retrieval);\n    this.onIndexObservations = config.onIndexObservations;\n    this.mastra = config.mastra;\n    this.memory = config.memory;\n\n    // Resolve \"default\" to the model default for the agent being configured.\n    const resolveModel = (model: ObservationalMemoryModel | undefined, defaultModel: string) =>\n      model === 'default' ? defaultModel : model;\n\n    // Resolution order: top-level model → sub-config model → the other sub-config model → default.\n    const observationModel =\n      resolveModel(config.model, OBSERVATIONAL_MEMORY_DEFAULTS.observation.model) ??\n      resolveModel(config.observation?.model, OBSERVATIONAL_MEMORY_DEFAULTS.observation.model) ??\n      resolveModel(config.reflection?.model, OBSERVATIONAL_MEMORY_DEFAULTS.observation.model) ??\n      OBSERVATIONAL_MEMORY_DEFAULTS.observation.model;\n    const reflectionModel =\n      resolveModel(config.model, OBSERVATIONAL_MEMORY_DEFAULTS.reflection.model) ??\n      resolveModel(config.reflection?.model, OBSERVATIONAL_MEMORY_DEFAULTS.reflection.model) ??\n      resolveModel(config.observation?.model, OBSERVATIONAL_MEMORY_DEFAULTS.reflection.model) ??\n      OBSERVATIONAL_MEMORY_DEFAULTS.reflection.model;\n\n    // Get base thresholds first (needed for shared budget calculation)\n    const messageTokens = config.observation?.messageTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.messageTokens;\n    const observationTokens =\n      config.reflection?.observationTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.observationTokens;\n    const isSharedBudget = config.shareTokenBudget ?? false;\n\n    const isDefaultModelSelection = (model: ObservationalMemoryModel | undefined) =>\n      model === undefined || model === 'default' || model instanceof ModelByInputTokens;\n\n    const observationSelectedModel = config.model ?? config.observation?.model ?? config.reflection?.model;\n    const reflectionSelectedModel = config.model ?? config.reflection?.model ?? config.observation?.model;\n\n    const observationDefaultMaxOutputTokens =\n      config.observation?.modelSettings?.maxOutputTokens ??\n      (isDefaultModelSelection(observationSelectedModel)\n        ? OBSERVATIONAL_MEMORY_DEFAULTS.observation.modelSettings.maxOutputTokens\n        : undefined);\n\n    const reflectionDefaultMaxOutputTokens =\n      config.reflection?.modelSettings?.maxOutputTokens ??\n      (isDefaultModelSelection(reflectionSelectedModel)\n        ? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.modelSettings.maxOutputTokens\n        : undefined);\n\n    // Total context budget when shared budget is enabled\n    const totalBudget = messageTokens + observationTokens;\n\n    // Async buffering is disabled when:\n    // - bufferTokens: false is explicitly set\n    // - scope is 'resource' and the user did NOT explicitly configure async buffering\n    //   (if they did, validateBufferConfig will throw a helpful error)\n    const userExplicitlyConfiguredAsync =\n      config.observation?.bufferTokens !== undefined ||\n      config.observation?.bufferActivation !== undefined ||\n      config.reflection?.bufferActivation !== undefined;\n    const asyncBufferingDisabled =\n      config.observation?.bufferTokens === false || (config.scope === 'resource' && !userExplicitlyConfiguredAsync);\n\n    // shareTokenBudget is not yet compatible with async buffering (temporary limitation).\n    // To use shareTokenBudget, users must explicitly disable buffering.\n    if (isSharedBudget && !asyncBufferingDisabled) {\n      const common =\n        `shareTokenBudget requires async buffering to be disabled (this is a temporary limitation). ` +\n        `Add observation: { bufferTokens: false } to your config:\\n\\n` +\n        `  observationalMemory: {\\n` +\n        `    shareTokenBudget: true,\\n` +\n        `    observation: { bufferTokens: false },\\n` +\n        `  }\\n`;\n      if (userExplicitlyConfiguredAsync) {\n        throw new Error(\n          common + `\\nRemove any other async buffering settings (bufferTokens, bufferActivation, blockAfter).`,\n        );\n      } else {\n        throw new Error(\n          common + `\\nAsync buffering is enabled by default — this opt-out is only needed when using shareTokenBudget.`,\n        );\n      }\n    }\n\n    const observationActivateAfterIdle = config.observation?.activateAfterIdle ?? config.activateAfterIdle;\n    const observationActivateAfterIdlePath =\n      config.observation?.activateAfterIdle !== undefined ? 'observation.activateAfterIdle' : 'activateAfterIdle';\n\n    // Resolve observation config with defaults\n    this.observationConfig = {\n      model: observationModel,\n      // When shared budget, store as range: min = base threshold, max = total budget\n      // This allows messages to expand into unused observation space\n      messageTokens: isSharedBudget ? { min: messageTokens, max: totalBudget } : messageTokens,\n      shareTokenBudget: isSharedBudget,\n      modelSettings: {\n        temperature:\n          config.observation?.modelSettings?.temperature ??\n          OBSERVATIONAL_MEMORY_DEFAULTS.observation.modelSettings.temperature,\n        ...(observationDefaultMaxOutputTokens !== undefined\n          ? { maxOutputTokens: observationDefaultMaxOutputTokens }\n          : {}),\n      },\n      providerOptions: config.observation?.providerOptions ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.providerOptions,\n      maxTokensPerBatch:\n        config.observation?.maxTokensPerBatch ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.maxTokensPerBatch,\n      bufferTokens: asyncBufferingDisabled\n        ? undefined\n        : resolveBufferTokens(\n            config.observation?.bufferTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.bufferTokens,\n            config.observation?.messageTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.messageTokens,\n          ),\n      bufferOnIdle: config.observation?.bufferOnIdle ?? false,\n      bufferActivation: asyncBufferingDisabled\n        ? undefined\n        : (config.observation?.bufferActivation ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.bufferActivation),\n      activateAfterIdle: parseActivationTTL(observationActivateAfterIdle, observationActivateAfterIdlePath),\n      activateOnProviderChange:\n        config.observation?.activateOnProviderChange ?? config.activateOnProviderChange ?? false,\n      blockAfter: asyncBufferingDisabled\n        ? undefined\n        : resolveBlockAfter(\n            config.observation?.blockAfter ??\n              ((config.observation?.bufferTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.bufferTokens)\n                ? 1.2\n                : undefined),\n            config.observation?.messageTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.observation.messageTokens,\n          ),\n      previousObserverTokens: config.observation?.previousObserverTokens ?? 2000,\n      instruction: config.observation?.instruction,\n      threadTitle: config.observation?.threadTitle ?? false,\n      observeAttachments: config.observation?.observeAttachments ?? true,\n      extractors: composeObservationExtractors({\n        threadTitle: config.observation?.threadTitle ?? false,\n        extract: config.observation?.extract,\n      }),\n    };\n\n    // Resolve reflection config with defaults\n    this.reflectionConfig = {\n      model: reflectionModel,\n      observationTokens: observationTokens,\n      shareTokenBudget: isSharedBudget,\n      modelSettings: {\n        temperature:\n          config.reflection?.modelSettings?.temperature ??\n          OBSERVATIONAL_MEMORY_DEFAULTS.reflection.modelSettings.temperature,\n        ...(reflectionDefaultMaxOutputTokens !== undefined\n          ? { maxOutputTokens: reflectionDefaultMaxOutputTokens }\n          : {}),\n      },\n      providerOptions: config.reflection?.providerOptions ?? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.providerOptions,\n      bufferActivation: asyncBufferingDisabled\n        ? undefined\n        : (config?.reflection?.bufferActivation ?? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.bufferActivation),\n      activateAfterIdle: parseActivationTTL(config.reflection?.activateAfterIdle, 'reflection.activateAfterIdle'),\n      activateOnProviderChange: config.reflection?.activateOnProviderChange ?? false,\n      blockAfter: asyncBufferingDisabled\n        ? undefined\n        : resolveBlockAfter(\n            config.reflection?.blockAfter ??\n              ((config.reflection?.bufferActivation ?? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.bufferActivation)\n                ? 1.2\n                : undefined),\n            config.reflection?.observationTokens ?? OBSERVATIONAL_MEMORY_DEFAULTS.reflection.observationTokens,\n          ),\n      instruction: config.reflection?.instruction,\n      extractors: composeReflectionExtractors({ extract: config.reflection?.extract }),\n    };\n\n    this.tokenCounter = new TokenCounter({\n      model: typeof observationModel === 'string' ? observationModel : undefined,\n    });\n    this.onDebugEvent = config.onDebugEvent;\n\n    // Create internal MessageHistory for message persistence\n    // OM handles message saving itself (in processOutputStep) instead of relying on\n    // the Memory class's MessageHistory processor\n    this.messageHistory = new MessageHistory({ storage: this.storage });\n\n    this.observer = new ObserverRunner({\n      observationConfig: this.observationConfig,\n      observedMessageIds: this.observedMessageIds,\n      resolveModel: inputTokens => this.resolveObservationModel(inputTokens),\n      tokenCounter: this.tokenCounter,\n      mastra: config.mastra,\n      memory: this.memory,\n    });\n\n    this.buffering = new BufferingCoordinator({\n      observationConfig: this.observationConfig,\n      reflectionConfig: this.reflectionConfig,\n      scope: this.scope,\n    });\n\n    this.reflector = new ReflectorRunner({\n      reflectionConfig: this.reflectionConfig,\n      observationConfig: this.observationConfig,\n      tokenCounter: this.tokenCounter,\n      storage: this.storage,\n      scope: this.scope,\n      buffering: this.buffering,\n      emitDebugEvent: e => this.emitDebugEvent(e),\n      persistMarkerToStorage: (m, t, r) => this.persistMarkerToStorage(m, t, r),\n      persistMarkerToMessage: (m, ml, t, r) => this.persistMarkerToMessage(m, ml, t, r),\n      getCompressionStartLevel: rc => this.getCompressionStartLevel(rc),\n      resolveModel: inputTokens => this.resolveReflectionModel(inputTokens),\n      mastra: config.mastra,\n      memory: this.memory,\n    });\n\n    // Validate buffer configuration\n    this.validateBufferConfig();\n\n    omDebug(\n      `[OM:init] new ObservationalMemory instance created — scope=${this.scope}, messageTokens=${JSON.stringify(this.observationConfig.messageTokens)}, obsAsyncEnabled=${this.buffering.isAsyncObservationEnabled()}, bufferTokens=${this.observationConfig.bufferTokens}, bufferActivation=${this.observationConfig.bufferActivation}, blockAfter=${this.observationConfig.blockAfter}, reflectionTokens=${this.reflectionConfig.observationTokens}, refAsyncEnabled=${this.buffering.isAsyncReflectionEnabled()}, refAsyncActivation=${this.reflectionConfig.bufferActivation}, refBlockAfter=${this.reflectionConfig.blockAfter}`,\n    );\n  }\n\n  __registerMastra(mastra: Mastra): void {\n    this.mastra = mastra;\n    this.observer.__registerMastra(mastra);\n    this.reflector.__registerMastra(mastra);\n  }\n\n  /**\n   * Get the current configuration for this OM instance.\n   * Used by the server to expose config to the UI when OM is added via processors.\n   */\n  get config(): {\n    scope: 'resource' | 'thread';\n    retrieval: boolean;\n    observation: {\n      messageTokens: number | ThresholdRange;\n      previousObserverTokens: number | false | undefined;\n    };\n    reflection: {\n      observationTokens: number | ThresholdRange;\n    };\n  } {\n    return {\n      scope: this.scope,\n      retrieval: this.retrieval,\n      observation: {\n        messageTokens: this.observationConfig.messageTokens,\n        previousObserverTokens: this.observationConfig.previousObserverTokens,\n      },\n      reflection: {\n        observationTokens: this.reflectionConfig.observationTokens,\n      },\n    };\n  }\n\n  /**\n   * Wait for any in-flight async buffering operations for the given thread/resource.\n   * Used by server endpoints to block until buffering completes so the UI can get final state.\n   */\n  async waitForBuffering(\n    threadId: string | null | undefined,\n    resourceId: string | null | undefined,\n    timeoutMs = 30000,\n  ): Promise<void> {\n    return BufferingCoordinator.awaitBuffering(threadId, resourceId, this.scope, timeoutMs);\n  }\n\n  private getConcreteModel(\n    model: ObservationalMemoryModel,\n    inputTokens?: number,\n  ): Exclude<ObservationalMemoryModel, ModelByInputTokens> {\n    if (model instanceof ModelByInputTokens) {\n      if (inputTokens === undefined) {\n        throw new Error('ModelByInputTokens requires inputTokens for resolution');\n      }\n      return model.resolve(inputTokens) as Exclude<ObservationalMemoryModel, ModelByInputTokens>;\n    }\n\n    return model as Exclude<ObservationalMemoryModel, ModelByInputTokens>;\n  }\n\n  private getModelToResolve(\n    model: ObservationalMemoryModel,\n    inputTokens?: number,\n  ): Parameters<typeof resolveModelConfig>[0] {\n    const concreteModel = this.getConcreteModel(model, inputTokens);\n\n    if (Array.isArray(concreteModel)) {\n      return (concreteModel[0]?.model ?? 'unknown') as Parameters<typeof resolveModelConfig>[0];\n    }\n    if (typeof concreteModel === 'function') {\n      // Wrap to handle functions that may return ModelWithRetries[]\n      return async (ctx: any) => {\n        const result = await concreteModel(ctx);\n        if (Array.isArray(result)) {\n          return (result[0]?.model ?? 'unknown') as MastraModelConfig;\n        }\n        return result as MastraModelConfig;\n      };\n    }\n    return concreteModel;\n  }\n\n  private formatModelName(model: TokenCounterModelContext) {\n    if (!model.modelId) {\n      return '(unknown)';\n    }\n\n    return model.provider ? `${model.provider}/${model.modelId}` : model.modelId;\n  }\n\n  private resolveObservationModel(inputTokens: number): {\n    model: Exclude<ResolvedObservationConfig['model'], ModelByInputTokens>;\n    selectedThreshold?: number;\n    routingStrategy?: 'model-by-input-tokens';\n    routingThresholds?: string;\n  } {\n    return this.resolveTieredModel(this.observationConfig.model, inputTokens);\n  }\n\n  private resolveReflectionModel(inputTokens: number): {\n    model: Exclude<ResolvedReflectionConfig['model'], ModelByInputTokens>;\n    selectedThreshold?: number;\n    routingStrategy?: 'model-by-input-tokens';\n    routingThresholds?: string;\n  } {\n    return this.resolveTieredModel(this.reflectionConfig.model, inputTokens);\n  }\n\n  private resolveTieredModel<TModel extends ObservationalMemoryModel>(\n    model: TModel,\n    inputTokens: number,\n  ): {\n    model: Exclude<TModel, ModelByInputTokens>;\n    selectedThreshold?: number;\n    routingStrategy?: 'model-by-input-tokens';\n    routingThresholds?: string;\n  } {\n    if (!(model instanceof ModelByInputTokens)) {\n      return {\n        model: model as Exclude<TModel, ModelByInputTokens>,\n      };\n    }\n\n    const thresholds = model.getThresholds();\n    const selectedThreshold = thresholds.find(upTo => inputTokens <= upTo) ?? thresholds.at(-1);\n\n    return {\n      model: model.resolve(inputTokens) as Exclude<TModel, ModelByInputTokens>,\n      selectedThreshold,\n      routingStrategy: 'model-by-input-tokens',\n      routingThresholds: thresholds.join(','),\n    };\n  }\n\n  private async resolveModelRouting(\n    modelConfig: ObservationalMemoryModel,\n    requestContext?: RequestContext,\n  ): Promise<{ model: string; routing?: Array<{ upTo: number; model: string }> }> {\n    try {\n      if (modelConfig instanceof ModelByInputTokens) {\n        const routing = await Promise.all(\n          modelConfig.getThresholds().map(async upTo => {\n            const resolvedModel = modelConfig.resolve(upTo) as Exclude<ObservationalMemoryModel, ModelByInputTokens>;\n            const resolved = await this.resolveModelContext(resolvedModel, requestContext);\n\n            return {\n              upTo,\n              model: resolved?.modelId ? this.formatModelName(resolved) : '(unknown)',\n            };\n          }),\n        );\n\n        return {\n          model: routing[0]?.model ?? '(unknown)',\n          routing,\n        };\n      }\n\n      const resolved = await this.resolveModelContext(modelConfig, requestContext);\n      return {\n        model: resolved?.modelId ? this.formatModelName(resolved) : '(unknown)',\n      };\n    } catch (error) {\n      omError('[OM] Failed to resolve model config', error);\n      return { model: '(unknown)' };\n    }\n  }\n\n  private async resolveModelContext(\n    modelConfig: ObservationalMemoryModel,\n    requestContext?: RequestContext,\n    inputTokens?: number,\n  ): Promise<TokenCounterModelContext | undefined> {\n    const modelToResolve = this.getModelToResolve(modelConfig, inputTokens);\n    if (!modelToResolve) {\n      return undefined;\n    }\n\n    const resolved = await resolveModelConfig(modelToResolve, requestContext, this.mastra);\n    return {\n      provider: resolved.provider,\n      modelId: resolved.modelId,\n    };\n  }\n\n  /**\n   * Get the default compression start level based on model behavior.\n   * gemini-2.5-flash is a faithful transcriber that needs explicit pressure to compress effectively.\n   */\n  async getCompressionStartLevel(requestContext?: RequestContext): Promise<CompressionLevel> {\n    try {\n      const resolved = await this.resolveModelContext(this.reflectionConfig.model, requestContext);\n      const modelId = resolved?.modelId ?? '';\n\n      // gemini-2.5-flash is conservative about compression - start at level 2\n      if (modelId.includes('gemini-2.5-flash')) {\n        return 2;\n      }\n\n      // Default for all other models\n      return 1;\n    } catch {\n      // Silently fallback to level 1 on error - not worth disrupting the operation\n      return 1; // safe default\n    }\n  }\n\n  /**\n   * Get the full config including resolved model names.\n   * This is async because it needs to resolve the model configs.\n   */\n  async getResolvedConfig(requestContext?: RequestContext): Promise<{\n    scope: 'resource' | 'thread';\n    observation: {\n      messageTokens: number | ThresholdRange;\n      model: string;\n      previousObserverTokens: number | false | undefined;\n      routing?: Array<{ upTo: number; model: string }>;\n    };\n    reflection: {\n      observationTokens: number | ThresholdRange;\n      model: string;\n      routing?: Array<{ upTo: number; model: string }>;\n    };\n  }> {\n    const [observationResolved, reflectionResolved] = await Promise.all([\n      this.resolveModelRouting(this.observationConfig.model, requestContext),\n      this.resolveModelRouting(this.reflectionConfig.model, requestContext),\n    ]);\n\n    return {\n      scope: this.scope,\n      observation: {\n        messageTokens: this.observationConfig.messageTokens,\n        model: observationResolved.model,\n        previousObserverTokens: this.observationConfig.previousObserverTokens,\n        routing: observationResolved.routing,\n      },\n      reflection: {\n        observationTokens: this.reflectionConfig.observationTokens,\n        model: reflectionResolved.model,\n        routing: reflectionResolved.routing,\n      },\n    };\n  }\n\n  /**\n   * Emit a debug event if the callback is configured.\n   * @internal Used by observation strategies. Do not call directly.\n   */\n  emitDebugEvent(event: ObservationDebugEvent): void {\n    if (this.onDebugEvent) {\n      this.onDebugEvent(event);\n    }\n  }\n\n  /**\n   * Validate buffer configuration on first use.\n   * Ensures bufferTokens is less than the threshold and bufferActivation is valid.\n   */\n  private validateBufferConfig(): void {\n    // Async buffering is not yet supported with resource scope\n    const hasAsyncBuffering =\n      this.observationConfig.bufferTokens !== undefined ||\n      this.observationConfig.bufferActivation !== undefined ||\n      this.reflectionConfig.bufferActivation !== undefined;\n    if (hasAsyncBuffering && this.scope === 'resource') {\n      throw new Error(\n        `Async buffering is not yet supported with scope: 'resource'. ` +\n          `Use scope: 'thread', or set observation: { bufferTokens: false } to disable async buffering.`,\n      );\n    }\n\n    // Validate observation bufferTokens\n    const observationThreshold = getMaxThreshold(this.observationConfig.messageTokens);\n    if (this.observationConfig.bufferTokens !== undefined) {\n      if (this.observationConfig.bufferTokens <= 0) {\n        throw new Error(`observation.bufferTokens must be > 0, got ${this.observationConfig.bufferTokens}`);\n      }\n      if (this.observationConfig.bufferTokens >= observationThreshold) {\n        throw new Error(\n          `observation.bufferTokens (${this.observationConfig.bufferTokens}) must be less than messageTokens (${observationThreshold})`,\n        );\n      }\n    }\n\n    // Validate observation bufferActivation: (0, 1] for ratio, or >= 1000 for absolute retention tokens\n    if (this.observationConfig.bufferActivation !== undefined) {\n      if (this.observationConfig.bufferActivation <= 0) {\n        throw new Error(`observation.bufferActivation must be > 0, got ${this.observationConfig.bufferActivation}`);\n      }\n      if (this.observationConfig.bufferActivation > 1 && this.observationConfig.bufferActivation < 1000) {\n        throw new Error(\n          `observation.bufferActivation must be <= 1 (ratio) or >= 1000 (absolute token retention), got ${this.observationConfig.bufferActivation}`,\n        );\n      }\n      if (\n        this.observationConfig.bufferActivation >= 1000 &&\n        this.observationConfig.bufferActivation >= observationThreshold\n      ) {\n        throw new Error(\n          `observation.bufferActivation as absolute retention (${this.observationConfig.bufferActivation}) must be less than messageTokens (${observationThreshold})`,\n        );\n      }\n    }\n\n    // Validate observation blockAfter\n    if (this.observationConfig.blockAfter !== undefined) {\n      if (this.observationConfig.blockAfter < observationThreshold) {\n        throw new Error(\n          `observation.blockAfter (${this.observationConfig.blockAfter}) must be >= messageTokens (${observationThreshold})`,\n        );\n      }\n      if (!this.observationConfig.bufferTokens) {\n        throw new Error(\n          `observation.blockAfter requires observation.bufferTokens to be set (blockAfter only applies when async buffering is enabled)`,\n        );\n      }\n    }\n\n    // Validate observer context optimization options\n    if (\n      this.observationConfig.previousObserverTokens !== undefined &&\n      this.observationConfig.previousObserverTokens !== false\n    ) {\n      if (\n        !Number.isFinite(this.observationConfig.previousObserverTokens) ||\n        this.observationConfig.previousObserverTokens < 0\n      ) {\n        throw new Error(\n          `observation.previousObserverTokens must be false or a finite number >= 0, got ${this.observationConfig.previousObserverTokens}`,\n        );\n      }\n    }\n\n    // Validate reflection bufferActivation (0-1 float range)\n    if (this.reflectionConfig.bufferActivation !== undefined) {\n      if (this.reflectionConfig.bufferActivation <= 0 || this.reflectionConfig.bufferActivation > 1) {\n        throw new Error(\n          `reflection.bufferActivation must be in range (0, 1], got ${this.reflectionConfig.bufferActivation}`,\n        );\n      }\n    }\n\n    // Validate reflection blockAfter\n    if (this.reflectionConfig.blockAfter !== undefined) {\n      const reflectionThreshold = getMaxThreshold(this.reflectionConfig.observationTokens);\n      if (this.reflectionConfig.blockAfter < reflectionThreshold) {\n        throw new Error(\n          `reflection.blockAfter (${this.reflectionConfig.blockAfter}) must be >= reflection.observationTokens (${reflectionThreshold})`,\n        );\n      }\n      if (!this.reflectionConfig.bufferActivation) {\n        throw new Error(\n          `reflection.blockAfter requires reflection.bufferActivation to be set (blockAfter only applies when async reflection is enabled)`,\n        );\n      }\n    }\n  }\n\n  /**\n   * Resolve the effective messageTokens for a record.\n   * Only explicit per-record overrides (stored under `_overrides`) win;\n   * the initial config snapshot written by getOrCreateRecord() is ignored\n   * so that later instance-level changes still take effect.\n   *\n   * Overrides that fall below the instance-level buffering floor\n   * (bufferTokens / absolute bufferActivation) are clamped to the\n   * instance threshold to preserve buffering invariants.\n   */\n  private getEffectiveMessageTokens(record: ObservationalMemoryRecord): number | ThresholdRange {\n    const overrides = (record.config as { _overrides?: { observation?: { messageTokens?: number | ThresholdRange } } })\n      ?._overrides;\n    const recordTokens = overrides?.observation?.messageTokens;\n    if (recordTokens) {\n      const maxOverride = getMaxThreshold(recordTokens);\n\n      // Clamp: override must not violate instance-level buffering invariants\n      const bufferTokens = this.observationConfig.bufferTokens;\n      if (bufferTokens && maxOverride <= bufferTokens) {\n        return this.observationConfig.messageTokens;\n      }\n      const bufferActivation = this.observationConfig.bufferActivation;\n      if (bufferActivation && bufferActivation >= 1000 && maxOverride <= bufferActivation) {\n        return this.observationConfig.messageTokens;\n      }\n\n      return recordTokens;\n    }\n    return this.observationConfig.messageTokens;\n  }\n\n  /**\n   * Resolve the effective reflection observationTokens for a record.\n   * Only explicit per-record overrides (stored under `_overrides`) win;\n   * the initial config snapshot is ignored so instance-level changes\n   * still take effect for existing records.\n   */\n  private getEffectiveReflectionTokens(record: ObservationalMemoryRecord): number | ThresholdRange {\n    const overrides = (\n      record.config as { _overrides?: { reflection?: { observationTokens?: number | ThresholdRange } } }\n    )?._overrides;\n    const recordTokens = overrides?.reflection?.observationTokens;\n    if (recordTokens) {\n      return recordTokens;\n    }\n    return this.reflectionConfig.observationTokens;\n  }\n\n  /**\n   * Check whether the unobserved message tokens meet the observation threshold.\n   */\n  private meetsObservationThreshold(opts: {\n    record: ObservationalMemoryRecord;\n    unobservedTokens: number;\n    extraTokens?: number;\n  }): boolean {\n    const { record, unobservedTokens, extraTokens = 0 } = opts;\n    const pendingTokens = (record.pendingMessageTokens ?? 0) + unobservedTokens + extraTokens;\n    const currentObservationTokens = record.observationTokenCount ?? 0;\n    const threshold = calculateDynamicThreshold(this.getEffectiveMessageTokens(record), currentObservationTokens);\n    return pendingTokens >= threshold;\n  }\n\n  /**\n   * Get thread/resource IDs for storage lookup\n   */\n  private getStorageIds(threadId: string, resourceId?: string): { threadId: string | null; resourceId: string } {\n    if (this.scope === 'resource') {\n      return {\n        threadId: null,\n        resourceId: resourceId ?? threadId,\n      };\n    }\n    if (!threadId) {\n      throw new Error(\n        `ObservationalMemory (scope: 'thread') requires a threadId, but received an empty value. ` +\n          `This is a bug — getThreadContext should have caught this earlier.`,\n      );\n    }\n    return {\n      threadId,\n      resourceId: resourceId ?? threadId,\n    };\n  }\n\n  /**\n   * Get or create the observational memory record.\n   * Returns the existing record if one exists, otherwise initializes a new one.\n   */\n  async getOrCreateRecord(threadId: string, resourceId?: string): Promise<ObservationalMemoryRecord> {\n    const ids = this.getStorageIds(threadId, resourceId);\n    let record = await this.storage.getObservationalMemory(ids.threadId, ids.resourceId);\n\n    if (!record) {\n      // Capture the timezone used for Observer date formatting\n      const observedTimezone = Intl.DateTimeFormat().resolvedOptions().timeZone;\n\n      record = await this.storage.initializeObservationalMemory({\n        threadId: ids.threadId,\n        resourceId: ids.resourceId,\n        scope: this.scope,\n        config: {\n          observation: this.observationConfig,\n          reflection: this.reflectionConfig,\n          scope: this.scope,\n        },\n        observedTimezone,\n      });\n    }\n\n    return record;\n  }\n\n  // ════════════════════════════════════════════════════════════════════════════\n  // DATA-OM-OBSERVATION PART HELPERS (Start/End/Failed markers)\n  // These helpers manage the observation boundary markers within messages.\n  //\n  // Flow:\n  // 1. Before observation: [...messageParts]\n  // 2. Insert start: [...messageParts, start] → stream to UI (loading state)\n  // 3. After success: [...messageParts, start, end] → stream to UI (complete)\n  // 4. After failure: [...messageParts, start, failed]\n  //\n  // For filtering, we look for the last completed observation (start + end pair).\n  // A start without end means observation is in progress.\n  // ════════════════════════════════════════════════════════════════════════════\n\n  /**\n   * Get current config snapshot for observation markers.\n   */\n  private getObservationMarkerConfig(): ObservationMarkerConfig {\n    return {\n      messageTokens: getMaxThreshold(this.observationConfig.messageTokens),\n      observationTokens: getMaxThreshold(this.reflectionConfig.observationTokens),\n      scope: this.scope,\n      activateAfterIdle: this.observationConfig.activateAfterIdle,\n    };\n  }\n\n  /**\n   * Persist a data-om-* marker part on the last assistant message in messageList\n   * AND save the updated message to the DB so it survives page reload.\n   * (data-* parts are filtered out before sending to the LLM, so they don't affect model calls.)\n   * @internal Used by ReflectorRunner. Do not call directly.\n   */\n  async persistMarkerToMessage(\n    marker: { type: string; data: unknown },\n    messageList: MessageList | undefined,\n    threadId: string,\n    resourceId?: string,\n  ): Promise<void> {\n    if (!messageList) return;\n    const allMsgs = messageList.get.all.db();\n    // Find the last assistant message to attach the marker to\n    for (let i = allMsgs.length - 1; i >= 0; i--) {\n      const msg = allMsgs[i];\n      if (msg?.role === 'assistant' && msg.content?.parts && Array.isArray(msg.content.parts)) {\n        // Only push if the marker isn't already in the parts array.\n        // writer.custom() adds the marker to the stream, and the AI SDK may have\n        // already appended it to the message's parts before this runs.\n        const markerData = marker.data as { cycleId?: string } | undefined;\n        const alreadyPresent =\n          markerData?.cycleId &&\n          msg.content.parts.some((p: any) => p?.type === marker.type && p?.data?.cycleId === markerData.cycleId);\n        if (!alreadyPresent) {\n          msg.content.parts.push(marker as any);\n        }\n        // Upsert the modified message to DB so the marker part is persisted.\n        // Non-critical — if this fails, the marker is still in the stream,\n        // it just won't survive page reload.\n        try {\n          await this.messageHistory.persistMessages({\n            messages: [msg],\n            threadId,\n            resourceId,\n          });\n        } catch (e) {\n          omDebug(`[OM:persistMarker] failed to save marker to DB: ${e}`);\n        }\n        return;\n      }\n    }\n  }\n\n  /**\n   * Persist a marker to the last assistant message in storage.\n   * Unlike persistMarkerToMessage, this fetches messages directly from the DB\n   * so it works even when no MessageList is available (e.g. async buffering ops).\n   * @internal Used by observation strategies. Do not call directly.\n   */\n  async persistMarkerToStorage(\n    marker: { type: string; data: unknown },\n    threadId: string,\n    resourceId?: string,\n  ): Promise<void> {\n    try {\n      const result = await this.storage.listMessages({\n        threadId,\n        perPage: 20,\n        orderBy: { field: 'createdAt', direction: 'DESC' },\n      });\n      const messages = result?.messages ?? [];\n      // Find the last assistant message\n      for (const msg of messages) {\n        if (msg?.role === 'assistant' && msg.content?.parts && Array.isArray(msg.content.parts)) {\n          // Only push if the marker isn't already in the parts array.\n          const markerData = marker.data as { cycleId?: string } | undefined;\n          const alreadyPresent =\n            markerData?.cycleId &&\n            msg.content.parts.some((p: any) => p?.type === marker.type && p?.data?.cycleId === markerData.cycleId);\n          if (!alreadyPresent) {\n            msg.content.parts.push(marker as any);\n          }\n          await this.messageHistory.persistMessages({\n            messages: [msg],\n            threadId,\n            resourceId,\n          });\n          return;\n        }\n      }\n    } catch (e) {\n      omDebug(`[OM:persistMarkerToStorage] failed to save marker to DB: ${e}`);\n    }\n  }\n\n  /**\n   * Find the last completed observation boundary in a message's parts.\n   * A completed observation is a start marker followed by an end marker.\n   *\n   * Returns the index of the END marker (which is the observation boundary),\n   * or -1 if no completed observation is found.\n   */\n\n  /**\n   * Check if a message has an in-progress observation (start without end).\n   */\n  private hasInProgressObservation(message: MastraDBMessage): boolean {\n    const parts = message.content?.parts;\n    if (!parts || !Array.isArray(parts)) return false;\n\n    let lastStartIndex = -1;\n    let lastEndOrFailedIndex = -1;\n\n    for (let i = parts.length - 1; i >= 0; i--) {\n      const part = parts[i] as { type?: string };\n      if (part?.type === 'data-om-observation-start' && lastStartIndex === -1) {\n        lastStartIndex = i;\n      }\n      if (\n        (part?.type === 'data-om-observation-end' || part?.type === 'data-om-observation-failed') &&\n        lastEndOrFailedIndex === -1\n      ) {\n        lastEndOrFailedIndex = i;\n      }\n    }\n\n    // In progress if we have a start that comes after any end/failed\n    return lastStartIndex !== -1 && lastStartIndex > lastEndOrFailedIndex;\n  }\n\n  /**\n   * Seal messages to prevent new parts from being merged into them.\n   * This is used when starting buffering to capture the current content state.\n   *\n   * Sealing works by:\n   * 1. Setting `message.content.metadata.mastra.sealed = true` (message-level flag)\n   * 2. Adding `metadata.mastra.sealedAt` to the last part (boundary marker)\n   *\n   * When MessageList.add() receives a message with the same ID as a sealed message,\n   * it creates a new message with only the parts beyond the seal boundary.\n   *\n   * The messages are mutated in place - since they're references to the same objects\n   * in the MessageList, the seal will be recognized immediately.\n   *\n   * @param messages - Messages to seal (mutated in place)\n   */\n  /** @internal Used by ObservationStep. */\n  sealMessagesForBuffering(messages: MastraDBMessage[]): void {\n    const sealedAt = Date.now();\n\n    for (const msg of messages) {\n      if (!msg.content?.parts?.length) continue;\n\n      // Set message-level sealed flag\n      if (!msg.content.metadata) {\n        msg.content.metadata = {};\n      }\n      const metadata = msg.content.metadata as { mastra?: { sealed?: boolean } };\n      if (!metadata.mastra) {\n        metadata.mastra = {};\n      }\n      metadata.mastra.sealed = true;\n\n      // Add sealedAt to the last part\n      const lastPart = msg.content.parts[msg.content.parts.length - 1] as {\n        metadata?: { mastra?: { sealedAt?: number } };\n      };\n      if (!lastPart.metadata) {\n        lastPart.metadata = {};\n      }\n      if (!lastPart.metadata.mastra) {\n        lastPart.metadata.mastra = {};\n      }\n      lastPart.metadata.mastra.sealedAt = sealedAt;\n    }\n  }\n\n  /**\n   * Insert an observation marker into a message.\n   * The marker is appended directly to the message's parts array (mutating in place).\n   * Also persists the change to storage so markers survive page refresh.\n   *\n   * For end/failed markers, the message is also \"sealed\" to prevent future content\n   * from being merged into it. This ensures observation markers are preserved.\n   */\n  /**\n   * Insert an observation marker into a message.\n   * For start markers, this pushes the part directly.\n   * For end/failed markers, this should be called AFTER writer.custom() has added the part,\n   * so we just find the part and add sealing metadata.\n   */\n\n  /**\n   * Create a virtual message containing only the unobserved parts.\n   * This is used for token counting and observation.\n   */\n  private createUnobservedMessage(message: MastraDBMessage): MastraDBMessage | null {\n    const unobservedParts = getUnobservedParts(message);\n    if (unobservedParts.length === 0) return null;\n\n    return {\n      ...message,\n      content: {\n        ...message.content,\n        parts: unobservedParts,\n      },\n    };\n  }\n\n  /**\n   * Get unobserved messages with part-level filtering.\n   *\n   * This method uses data-om-observation-end markers to filter at the part level:\n   * 1. For messages WITH a completed observation: only return parts AFTER the end marker\n   * 2. For messages WITHOUT completed observation: check timestamp against lastObservedAt\n   *\n   * This handles the case where a single message accumulates many parts\n   * (like tool calls) during an agentic loop - we only observe the new parts.\n   */\n  /** @internal Used by ObservationStep. */\n  getUnobservedMessages(\n    allMessages: MastraDBMessage[],\n    record: ObservationalMemoryRecord,\n    opts?: { excludeBuffered?: boolean },\n  ): MastraDBMessage[] {\n    const lastObservedAt = record.lastObservedAt;\n    // Safeguard: track message IDs that were already observed to prevent re-observation\n    // This handles edge cases like process restarts where lastObservedAt might not capture all messages\n    const observedMessageIds = new Set<string>(\n      Array.isArray(record.observedMessageIds) ? record.observedMessageIds : [],\n    );\n\n    // Only exclude buffered chunk message IDs when called from the buffering path.\n    // The main agent context should still see buffered messages until activation.\n    if (opts?.excludeBuffered) {\n      const bufferedChunks = getBufferedChunks(record);\n      for (const chunk of bufferedChunks) {\n        if (Array.isArray(chunk.messageIds)) {\n          for (const id of chunk.messageIds) {\n            observedMessageIds.add(id);\n          }\n        }\n      }\n    }\n\n    const result: MastraDBMessage[] = [];\n\n    for (const msg of allMessages) {\n      if (msg.role === 'system') {\n        continue;\n      }\n\n      // First check: skip if this message ID was already observed (safeguard against re-observation)\n      if (observedMessageIds?.has(msg.id)) {\n        continue;\n      }\n\n      // Check if this message has a completed observation\n      const endMarkerIndex = findLastCompletedObservationBoundary(msg);\n      const inProgress = this.hasInProgressObservation(msg);\n\n      if (inProgress) {\n        // Include the full message for in-progress observations\n        // The Observer is currently working on this\n        result.push(msg);\n      } else if (endMarkerIndex !== -1) {\n        // Message has a completed observation - only include parts after it\n        const virtualMsg = this.createUnobservedMessage(msg);\n        if (virtualMsg) {\n          result.push(virtualMsg);\n        } else {\n        }\n      } else {\n        // No observation markers - fall back to timestamp-based filtering\n        if (!msg.createdAt || !lastObservedAt) {\n          // Messages without timestamps are always included\n          // Also include messages when there's no lastObservedAt timestamp\n          result.push(msg);\n        } else {\n          const msgDate = new Date(msg.createdAt);\n          if (msgDate > lastObservedAt) {\n            result.push(msg);\n          } else {\n          }\n        }\n      }\n    }\n\n    return result;\n  }\n\n  /**\n   * Prepare optimized observer context by applying truncation and buffered-reflection inclusion.\n   *\n   * Returns the (possibly optimized) observations string to pass as \"Previous Observations\"\n   * to the observer prompt. When no optimization options are set, returns the input unchanged.\n   */\n  prepareObserverContext(\n    existingObservations: string | undefined,\n    record?: ObservationalMemoryRecord | null,\n  ): { context: string | undefined; wasTruncated: boolean } {\n    const { previousObserverTokens } = this.observationConfig;\n    const tokenBudget =\n      previousObserverTokens === undefined || previousObserverTokens === false ? undefined : previousObserverTokens;\n\n    // Fast path: no optimization configured — preserve legacy behavior\n    if (tokenBudget === undefined) {\n      return { context: existingObservations, wasTruncated: false };\n    }\n\n    // When previousObserverTokens is enabled, also use buffered reflections\n    const bufferedReflection =\n      record?.bufferedReflection && record?.reflectedObservationLineCount ? record.bufferedReflection : undefined;\n\n    if (!existingObservations) {\n      return { context: bufferedReflection, wasTruncated: false };\n    }\n\n    // 1. Replace reflected observation lines with the buffered reflection summary.\n    //    reflectedObservationLineCount tracks how many of the oldest lines\n    //    were already summarized by the reflection — swap those out.\n    let observations = existingObservations;\n    if (bufferedReflection && record?.reflectedObservationLineCount) {\n      const allLines = observations.split('\\n');\n      const unreflectedLines = allLines.slice(record.reflectedObservationLineCount);\n      const unreflectedContent = unreflectedLines.join('\\n').trim();\n      observations = unreflectedContent ? `${bufferedReflection}\\n\\n${unreflectedContent}` : bufferedReflection;\n    }\n\n    // 2. Truncate the assembled result to fit within budget\n    let wasTruncated = false;\n    if (tokenBudget !== undefined) {\n      if (tokenBudget === 0) {\n        return { context: '', wasTruncated: true };\n      }\n\n      const currentTokens = this.tokenCounter.countObservations(observations);\n      if (currentTokens > tokenBudget) {\n        observations = this.truncateObservationsToTokenBudget(observations, tokenBudget);\n        wasTruncated = true;\n      }\n    }\n\n    return { context: observations, wasTruncated };\n  }\n\n  /**\n   * Truncate observations to fit within a token budget.\n   *\n   * Strategy:\n   * 1. Keep a raw tail of recent observations (end of block).\n   * 2. Add a truncation marker: [X observations truncated here], placed at the hidden gap.\n   * 3. Try to preserve important observations (🔴) from older context, newest-first.\n   * 4. Enforce that at least 50% of kept observations remain raw tail observations.\n   */\n  private truncateObservationsToTokenBudget(observations: string, budget: number): string {\n    if (budget === 0) {\n      return '';\n    }\n\n    const totalTokens = this.tokenCounter.countObservations(observations);\n    if (totalTokens <= budget) {\n      return observations;\n    }\n\n    const lines = observations.split('\\n');\n    const totalCount = lines.length;\n\n    // tokenx is lightweight (regex-based), so measure each line directly.\n    const lineTokens: number[] = new Array(totalCount);\n    const isImportant: boolean[] = new Array(totalCount);\n    for (let i = 0; i < totalCount; i++) {\n      lineTokens[i] = this.tokenCounter.countString(lines[i]!);\n      isImportant[i] = lines[i]!.includes('🔴') || lines[i]!.includes('✅');\n    }\n\n    // Precompute suffix sums so tail cost is O(1).\n    const suffixTokens: number[] = new Array(totalCount + 1);\n    suffixTokens[totalCount] = 0;\n    for (let i = totalCount - 1; i >= 0; i--) {\n      suffixTokens[i] = suffixTokens[i + 1]! + lineTokens[i]!;\n    }\n\n    // Collect important-line indexes from the head region.\n    // Built incrementally as tailStart advances.\n    const headImportantIndexes: number[] = [];\n\n    const buildCandidateString = (tailStart: number, selectedImportantIndexes: number[]) => {\n      const keptIndexes = [\n        ...selectedImportantIndexes,\n        ...Array.from({ length: totalCount - tailStart }, (_, i) => tailStart + i),\n      ].sort((a, b) => a - b);\n\n      if (keptIndexes.length === 0) {\n        return `[${totalCount} observations truncated here]`;\n      }\n\n      const outputLines: string[] = [];\n      let previousKeptIndex = -1;\n\n      for (const keptIndex of keptIndexes) {\n        const hiddenCount = keptIndex - previousKeptIndex - 1;\n        if (hiddenCount === 1) {\n          // Keep the original line — the marker would cost more tokens than the line itself\n          outputLines.push(lines[previousKeptIndex + 1]!);\n        } else if (hiddenCount > 1) {\n          outputLines.push(`[${hiddenCount} observations truncated here]`);\n        }\n        outputLines.push(lines[keptIndex]!);\n        previousKeptIndex = keptIndex;\n      }\n\n      const trailingHiddenCount = totalCount - previousKeptIndex - 1;\n      if (trailingHiddenCount === 1) {\n        outputLines.push(lines[totalCount - 1]!);\n      } else if (trailingHiddenCount > 1) {\n        outputLines.push(`[${trailingHiddenCount} observations truncated here]`);\n      }\n\n      return outputLines.join('\\n');\n    };\n\n    // Lower-bound cost of kept content (excludes marker lines).\n    // Used for fast rejection — the final countObservations call is the real gatekeeper.\n    const estimateKeptContentCost = (tailStart: number, selectedImportantIndexes: number[]): number => {\n      let cost = suffixTokens[tailStart]!;\n      for (const idx of selectedImportantIndexes) {\n        cost += lineTokens[idx]!;\n      }\n      return cost;\n    };\n\n    let bestCandidate: string | undefined;\n    let bestImportantCount = -1;\n    let bestRawTailLength = -1;\n\n    for (let tailStart = 1; tailStart < totalCount; tailStart++) {\n      // Incrementally track important lines in the head region.\n      if (isImportant[tailStart - 1]) {\n        headImportantIndexes.push(tailStart - 1);\n      }\n\n      const rawTailLength = totalCount - tailStart;\n      const maxImportantByRatio = rawTailLength;\n      let importantToKeep = Math.min(headImportantIndexes.length, maxImportantByRatio);\n\n      const getSelectedImportant = (count: number) =>\n        count > 0 ? headImportantIndexes.slice(Math.max(0, headImportantIndexes.length - count)) : [];\n\n      // Fast rejection: drop important lines if even the kept content exceeds budget.\n      while (\n        importantToKeep > 0 &&\n        estimateKeptContentCost(tailStart, getSelectedImportant(importantToKeep)) > budget\n      ) {\n        importantToKeep -= 1;\n      }\n\n      if (estimateKeptContentCost(tailStart, getSelectedImportant(importantToKeep)) > budget) {\n        continue;\n      }\n\n      // Only build + verify when this candidate could beat the current best.\n      if (\n        importantToKeep > bestImportantCount ||\n        (importantToKeep === bestImportantCount && rawTailLength > bestRawTailLength)\n      ) {\n        const candidate = buildCandidateString(tailStart, getSelectedImportant(importantToKeep));\n        if (this.tokenCounter.countObservations(candidate) <= budget) {\n          bestCandidate = candidate;\n          bestImportantCount = importantToKeep;\n          bestRawTailLength = rawTailLength;\n        }\n      }\n    }\n\n    if (!bestCandidate) {\n      return `[${totalCount} observations truncated here]`;\n    }\n\n    return bestCandidate;\n  }\n\n  /**\n   * Format observations for injection into context.\n   * Applies token optimization before presenting to the Actor.\n   *\n   * In resource scope mode, filters continuity messages to only show\n   * the message for the current thread.\n   */\n  private formatObservationsForContext(\n    observations: string,\n    currentTask?: string,\n    suggestedResponse?: string,\n    extractedValues?: Record<string, unknown>,\n    unobservedContextBlocks?: string,\n    currentDate?: Date,\n    retrieval = false,\n  ): string[] {\n    // Optimize observations to save tokens unless retrieval mode needs durable group metadata preserved.\n    let optimized = retrieval\n      ? (renderObservationGroupsForReflection(observations) ?? optimizeObservationsForContext(observations))\n      : optimizeObservationsForContext(observations);\n\n    // Add relative time annotations to date headers if currentDate is provided\n    if (currentDate) {\n      optimized = addRelativeTimeToObservations(optimized, currentDate);\n    }\n\n    const messages = [\n      `${OBSERVATION_CONTEXT_PROMPT}\\n\\n${OBSERVATION_CONTEXT_INSTRUCTIONS}${retrieval ? `\\n\\n${OBSERVATION_RETRIEVAL_INSTRUCTIONS}` : ''}`,\n    ];\n\n    // Add unobserved context from other threads (resource scope only)\n    if (unobservedContextBlocks) {\n      messages.push(\n        `The following content is from OTHER conversations different from the current conversation, they're here for reference,  but they're not necessarily your focus:\\nSTART_OTHER_CONVERSATIONS_BLOCK\\n${unobservedContextBlocks}\\nEND_OTHER_CONVERSATIONS_BLOCK`,\n      );\n    }\n\n    const observationChunks = this.splitObservationContextChunks(optimized);\n    if (observationChunks.length > 0) {\n      messages.push('<observations>', ...observationChunks);\n    }\n\n    // Dynamically inject current-task from thread metadata (not stored in observations)\n    if (currentTask) {\n      messages.push(`<current-task>\\n${currentTask}\\n</current-task>`);\n    }\n\n    if (suggestedResponse) {\n      messages.push(`<suggested-response>\\n${suggestedResponse}\\n</suggested-response>`);\n    }\n\n    messages.push(\n      ...buildExtractedValueContextSections(\n        [...this.observationConfig.extractors, ...this.reflectionConfig.extractors],\n        extractedValues,\n      ),\n    );\n\n    return messages;\n  }\n\n  private splitObservationContextChunks(observations: string): string[] {\n    const trimmed = observations.trim();\n    if (!trimmed) {\n      return [];\n    }\n\n    return trimmed\n      .split(/\\n{2,}--- message boundary \\(\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z\\) ---\\n{2,}/)\n      .map(chunk => chunk.trim())\n      .filter(Boolean);\n  }\n\n  /**\n   * Create a message boundary delimiter with an ISO 8601 date.\n   * The date should be the lastObservedAt timestamp — the latest message\n   * timestamp that was observed to produce the observations following this boundary.\n   */\n  static createMessageBoundary(date: Date): string {\n    return `\\n\\n--- message boundary (${date.toISOString()}) ---\\n\\n`;\n  }\n\n  /**\n   * Get threadId and resourceId from either RequestContext or MessageList\n   */\n  getThreadContext(\n    requestContext: RequestContext | undefined,\n    messageList: MessageList,\n  ): { threadId: string; resourceId?: string } | null {\n    // First try RequestContext (set by Memory)\n    const memoryContext = requestContext?.get('MastraMemory') as\n      | { thread?: { id: string }; resourceId?: string }\n      | undefined;\n\n    if (memoryContext?.thread?.id) {\n      return {\n        threadId: memoryContext.thread.id,\n        resourceId: memoryContext.resourceId,\n      };\n    }\n\n    // Fallback to MessageList's memoryInfo\n    const serialized = messageList.serialize();\n    if (serialized.memoryInfo?.threadId) {\n      return {\n        threadId: serialized.memoryInfo.threadId,\n        resourceId: serialized.memoryInfo.resourceId,\n      };\n    }\n\n    // In thread scope, threadId is required — without it OM would silently\n    // fall back to a resource-keyed record which causes deadlocks when\n    // multiple threads share the same resourceId.\n    if (this.scope === 'thread') {\n      throw new Error(\n        `ObservationalMemory (scope: 'thread') requires a threadId, but none was found in RequestContext or MessageList. ` +\n          `Ensure the agent is configured with Memory and a valid threadId is provided.`,\n      );\n    }\n\n    return null;\n  }\n\n  /**\n   * Save messages to storage, skipping messages that were already persisted by\n   * async buffering. Uses the message-level sealed flag (metadata.mastra.sealed)\n   * to detect already-persisted messages, avoiding redundant DB operations.\n   *\n   * Messages with observation markers are always saved (upserted) even if sealed,\n   * because the markers need to be persisted to storage.\n   */\n  async persistMessages(\n    messagesToSave: MastraDBMessage[],\n    threadId: string,\n    resourceId: string | undefined,\n  ): Promise<void> {\n    const filteredMessages: MastraDBMessage[] = [];\n    for (const msg of messagesToSave) {\n      const isSealed = !!(msg.content?.metadata as { mastra?: { sealed?: boolean } })?.mastra?.sealed;\n      if (isSealed) {\n        // Sealed messages were already persisted by buffer(). Only re-save if they\n        // now have observation markers (need to upsert the markers to storage).\n        if (findLastCompletedObservationBoundary(msg) !== -1) {\n          filteredMessages.push(msg);\n        }\n      } else {\n        filteredMessages.push(msg);\n      }\n    }\n\n    if (filteredMessages.length > 0) {\n      await this.messageHistory.persistMessages({\n        messages: filteredMessages,\n        threadId,\n        resourceId,\n      });\n    }\n  }\n\n  /**\n   * Load messages from storage that haven't been observed yet.\n   * Uses cursor-based query with lastObservedAt timestamp for efficiency.\n   *\n   * In resource scope mode, loads messages for the entire resource (all threads).\n   * In thread scope mode, loads messages for just the current thread.\n   */\n  private async loadMessagesFromStorage(\n    threadId: string,\n    resourceId: string | undefined,\n    lastObservedAt?: Date,\n  ): Promise<MastraDBMessage[]> {\n    // Add 1ms to lastObservedAt to make the filter exclusive (since dateRange.start is inclusive)\n    // This prevents re-loading the same messages that were already observed\n    const startDate = lastObservedAt ? new Date(lastObservedAt.getTime() + 1) : undefined;\n\n    let result: { messages: MastraDBMessage[] };\n\n    if (this.scope === 'resource' && resourceId) {\n      // Resource scope: use the new listMessagesByResourceId method\n      result = await this.storage.listMessagesByResourceId({\n        resourceId,\n        perPage: false, // Get all messages (no pagination limit)\n        orderBy: { field: 'createdAt', direction: 'ASC' },\n        filter: startDate\n          ? {\n              dateRange: {\n                start: startDate,\n              },\n            }\n          : undefined,\n      });\n    } else {\n      // Thread scope: use listMessages with threadId\n      result = await this.storage.listMessages({\n        threadId,\n        perPage: false, // Get all messages (no pagination limit)\n        orderBy: { field: 'createdAt', direction: 'ASC' },\n        filter: startDate\n          ? {\n              dateRange: {\n                start: startDate,\n              },\n            }\n          : undefined,\n      });\n    }\n\n    return result.messages.filter(msg => msg.role !== 'system');\n  }\n\n  /**\n   * Format unobserved messages from other threads as <unobserved-context> blocks.\n   * These are injected into the Actor's context so it has awareness of activity\n   * in other threads for the same resource.\n   */\n  private async formatUnobservedContextBlocks(\n    messagesByThread: Map<string, MastraDBMessage[]>,\n    currentThreadId: string,\n  ): Promise<string> {\n    const blocks: string[] = [];\n\n    for (const [threadId, messages] of messagesByThread) {\n      // Skip current thread - those go in normal message history\n      if (threadId === currentThreadId) continue;\n\n      // Skip if no messages\n      if (messages.length === 0) continue;\n\n      // Format messages with timestamps, truncating large parts (e.g. tool results)\n      // since this is injected as context for the actor, not sent to the observer\n      const formattedMessages = formatMessagesForObserver(messages, { maxPartLength: 500 });\n\n      if (formattedMessages) {\n        const obscuredId = await this.representThreadIDInContext(threadId);\n        blocks.push(`<other-conversation id=\"${obscuredId}\">\n${formattedMessages}\n</other-conversation>`);\n      }\n    }\n\n    return blocks.join('\\n\\n');\n  }\n\n  private async representThreadIDInContext(threadId: string): Promise<string> {\n    if (this.shouldObscureThreadIds) {\n      const hasher = await this.hasher;\n      return hasher.h32ToString(threadId);\n    }\n    return threadId;\n  }\n\n  /**\n   * Get the maximum createdAt timestamp from a list of messages.\n   * Used to set lastObservedAt to the most recent message timestamp instead of current time.\n   * This ensures historical data (like LongMemEval fixtures) works correctly.\n   */\n  private getMaxMessageTimestamp(messages: MastraDBMessage[]): Date {\n    let maxTime = 0;\n    for (const msg of messages) {\n      if (msg.createdAt) {\n        const msgTime = new Date(msg.createdAt).getTime();\n        if (msgTime > maxTime) {\n          maxTime = msgTime;\n        }\n      }\n    }\n    // If no valid timestamps found, fall back to current time\n    return maxTime > 0 ? new Date(maxTime) : new Date();\n  }\n\n  /**\n   * Wrap observations in a thread attribution tag.\n   * Used in resource scope to track which thread observations came from.\n   * @internal Used by observation strategies. Do not call directly.\n   */\n  async wrapWithThreadTag(threadId: string, observations: string, messageRange?: string): Promise<string> {\n    // First strip any thread tags the Observer might have added\n    const cleanObservations = stripThreadTags(observations);\n    const groupedObservations =\n      this.retrieval && messageRange ? wrapInObservationGroup(cleanObservations, messageRange) : cleanObservations;\n    const obscuredId = await this.representThreadIDInContext(threadId);\n    return `<thread id=\"${obscuredId}\">\\n${groupedObservations}\\n</thread>`;\n  }\n\n  /**\n   * Append or merge new thread sections.\n   * If the new section has the same thread ID and date as an existing section,\n   * merge the observations into that section to reduce token usage.\n   * Otherwise, append as a new section.\n   */\n  private replaceOrAppendThreadSection(\n    existingObservations: string,\n    _threadId: string,\n    newThreadSection: string,\n    lastObservedAt: Date,\n  ): string {\n    if (!existingObservations) {\n      return newThreadSection;\n    }\n\n    // Extract thread ID and date from new section\n    const threadIdMatch = newThreadSection.match(/<thread id=\"([^\"]+)\">/);\n    const dateMatch = newThreadSection.match(/Date:\\s*([A-Za-z]+\\s+\\d+,\\s+\\d+)/);\n\n    if (!threadIdMatch || !dateMatch) {\n      // Can't parse, just append with message boundary for cache stability\n      return `${existingObservations}${ObservationalMemory.createMessageBoundary(lastObservedAt)}${newThreadSection}`;\n    }\n\n    const newThreadId = threadIdMatch[1]!;\n    const newDate = dateMatch[1]!;\n\n    // Look for existing section with same thread ID and date.\n    // Use string search instead of regex to avoid polynomial backtracking (CodeQL).\n    const threadOpen = `<thread id=\"${newThreadId}\">`;\n    const threadClose = '</thread>';\n    const startIdx = existingObservations.indexOf(threadOpen);\n    let existingSection: string | null = null;\n    let existingSectionStart = -1;\n    let existingSectionEnd = -1;\n\n    if (startIdx !== -1) {\n      const closeIdx = existingObservations.indexOf(threadClose, startIdx);\n      if (closeIdx !== -1) {\n        existingSectionEnd = closeIdx + threadClose.length;\n        existingSectionStart = startIdx;\n        const section = existingObservations.slice(startIdx, existingSectionEnd);\n        // Verify this section contains the matching date\n        if (section.includes(`Date: ${newDate}`) || section.includes(`Date:${newDate}`)) {\n          existingSection = section;\n        }\n      }\n    }\n\n    if (existingSection) {\n      // Found existing section with same thread ID and date - merge observations\n      // Extract observations from new section: everything after the Date: line, before </thread>\n      const dateLineEnd = newThreadSection.indexOf('\\n', newThreadSection.indexOf('Date:'));\n      const newCloseIdx = newThreadSection.lastIndexOf(threadClose);\n      if (dateLineEnd !== -1 && newCloseIdx !== -1) {\n        const newObsContent = newThreadSection.slice(dateLineEnd + 1, newCloseIdx).trim();\n        if (newObsContent) {\n          // Insert new observations at the end of the existing section (before </thread>)\n          const withoutClose = existingSection.slice(0, existingSection.length - threadClose.length).trimEnd();\n          const merged = `${withoutClose}\\n${newObsContent}\\n${threadClose}`;\n          return (\n            existingObservations.slice(0, existingSectionStart) +\n            merged +\n            existingObservations.slice(existingSectionEnd)\n          );\n        }\n      }\n    }\n\n    // No existing section with same thread ID and date - append with message boundary for cache stability\n    return `${existingObservations}${ObservationalMemory.createMessageBoundary(lastObservedAt)}${newThreadSection}`;\n  }\n\n  /**\n   * @internal Used by observation strategies. Do not call directly.\n   */\n  wrapObservations(\n    rawObservations: string,\n    existingObservations: string,\n    threadId: string,\n    lastObservedAt?: Date,\n    messageRange?: string,\n  ): Promise<string> | string {\n    if (this.scope === 'resource') {\n      return (async () => {\n        const threadSection = await this.wrapWithThreadTag(threadId, rawObservations, messageRange);\n        return this.replaceOrAppendThreadSection(\n          existingObservations,\n          threadId,\n          threadSection,\n          lastObservedAt ?? new Date(),\n        );\n      })();\n    }\n    const grouped =\n      this.retrieval && messageRange ? wrapInObservationGroup(rawObservations, messageRange) : rawObservations;\n    return existingObservations ? `${existingObservations}\\n\\n${grouped}` : grouped;\n  }\n\n  // ────────────────────────────────────────────────────────────────────────\n  // Observation methods\n  // ────────────────────────────────────────────────────────────────────────\n\n  /**\n   * Start an async background observation that stores results to bufferedObservations.\n   * This is a fire-and-forget operation that runs in the background.\n   * The results will be swapped to active when the main threshold is reached.\n   *\n   * If another buffering operation is already in progress for this scope, this will\n   * wait for it to complete before starting a new one (mutex behavior).\n   *\n   * @param record - Current OM record\n   * @param threadId - Thread ID\n   * @param unobservedMessages - All unobserved messages (will be filtered for already-buffered)\n   * @param lockKey - Lock key for this scope\n   * @param writer - Optional stream writer for emitting buffering markers\n   */\n  private async startAsyncBufferedObservation(\n    record: ObservationalMemoryRecord,\n    threadId: string,\n    unobservedMessages: MastraDBMessage[],\n    lockKey: string,\n    writer?: ProcessorStreamWriter,\n    contextWindowTokens?: number,\n    requestContext?: RequestContext,\n    observabilityContext?: ObservabilityContext,\n  ): Promise<void> {\n    const bufferKey = this.buffering.getObservationBufferKey(lockKey);\n\n    // Update the last buffered boundary (in-memory for current instance).\n    // Use contextWindowTokens (all messages in context) to match the scale of\n    // totalPendingTokens passed to shouldTriggerAsyncObservation.\n    const currentTokens =\n      contextWindowTokens ??\n      (await this.tokenCounter.countMessagesAsync(unobservedMessages)) + (record.pendingMessageTokens ?? 0);\n    BufferingCoordinator.lastBufferedBoundary.set(bufferKey, currentTokens);\n\n    // Set persistent flag so new instances (created per request) know buffering is in progress\n    registerOp(record.id, 'bufferingObservation');\n    this.storage.setBufferingObservationFlag(record.id, true, currentTokens).catch(err => {\n      omError('[OM] Failed to set buffering observation flag', err);\n    });\n\n    // Start the async operation - waits for any existing op to complete first\n    const asyncOp = this.runAsyncBufferedObservation(\n      record,\n      threadId,\n      unobservedMessages,\n      bufferKey,\n      writer,\n      requestContext,\n      observabilityContext,\n    )\n      .catch(err => {\n        omError('[OM] async buffering observation failed', err);\n      })\n      .finally(() => {\n        // Clean up the operation tracking\n        BufferingCoordinator.asyncBufferingOps.delete(bufferKey);\n        // Clear persistent flag\n        unregisterOp(record.id, 'bufferingObservation');\n        this.storage.setBufferingObservationFlag(record.id, false).catch(err => {\n          omError('[OM] Failed to clear buffering observation flag', err);\n        });\n      });\n\n    BufferingCoordinator.asyncBufferingOps.set(bufferKey, asyncOp);\n  }\n\n  /**\n   * Internal method that waits for existing buffering operation and then runs new buffering.\n   * This implements the mutex-wait behavior.\n   */\n  private async runAsyncBufferedObservation(\n    record: ObservationalMemoryRecord,\n    threadId: string,\n    unobservedMessages: MastraDBMessage[],\n    bufferKey: string,\n    writer?: ProcessorStreamWriter,\n    requestContext?: RequestContext,\n    observabilityContext?: ObservabilityContext,\n  ): Promise<void> {\n    // Wait for any existing buffering operation to complete first (mutex behavior)\n    const existingOp = BufferingCoordinator.asyncBufferingOps.get(bufferKey);\n    if (existingOp) {\n      try {\n        await existingOp;\n      } catch {\n        // Previous op failed, continue with new one\n      }\n    }\n\n    // Re-fetch record to get latest state after waiting\n    const freshRecord = await this.storage.getObservationalMemory(record.threadId, record.resourceId);\n    if (!freshRecord) {\n      return;\n    }\n\n    // Determine the buffer cursor — the timestamp boundary beyond which we look for new messages.\n    // Start from the static map (in-process), fall back to DB record (survives restarts).\n    let bufferCursor = BufferingCoordinator.lastBufferedAtTime.get(bufferKey) ?? freshRecord.lastBufferedAtTime ?? null;\n\n    // Advance the cursor if lastObservedAt is newer (e.g. sync observation ran after the last buffer)\n    if (freshRecord.lastObservedAt) {\n      const lastObserved = new Date(freshRecord.lastObservedAt);\n      if (!bufferCursor || lastObserved > bufferCursor) {\n        bufferCursor = lastObserved;\n      }\n    }\n\n    // Filter messages to only those newer than the buffer cursor.\n    // This prevents re-buffering messages that were already included in a previous chunk.\n    let candidateMessages = this.getUnobservedMessages(unobservedMessages, freshRecord, {\n      excludeBuffered: true,\n    });\n    const preFilterCount = candidateMessages.length;\n    if (bufferCursor) {\n      candidateMessages = candidateMessages.filter(msg => {\n        if (!msg.createdAt) return true; // include messages without timestamps\n        return new Date(msg.createdAt) > bufferCursor;\n      });\n    }\n\n    omDebug(\n      `[OM:bufferCursor] cursor=${bufferCursor?.toISOString() ?? 'null'}, unobserved=${unobservedMessages.length}, afterExcludeBuffered=${preFilterCount}, afterCursorFilter=${candidateMessages.length}`,\n    );\n\n    // Check if there's enough content to buffer\n    const bufferTokens = this.observationConfig.bufferTokens ?? 5000;\n    const minNewTokens = bufferTokens / 2;\n    const newTokens = await this.tokenCounter.countMessagesAsync(candidateMessages);\n\n    if (newTokens < minNewTokens) {\n      return; // Not enough new content to buffer\n    }\n\n    const messagesToBuffer = candidateMessages;\n\n    // Seal the messages being buffered to prevent new parts from being added.\n    // This ensures that any streaming content after this point goes to new messages,\n    // preserving the boundary of what we're buffering.\n    this.sealMessagesForBuffering(messagesToBuffer);\n\n    // CRITICAL: Persist the sealed messages to storage immediately.\n    // This ensures that:\n    // 1. The seal metadata (sealedAt on last part) is saved to the database\n    // 2. When MessageList creates new messages for streaming content after the seal,\n    //    those new messages have their own IDs and don't overwrite the sealed messages\n    // 3. The sealed messages remain intact with their content at the time of buffering\n    try {\n      await this.messageHistory.persistMessages({\n        messages: messagesToBuffer,\n        threadId,\n        resourceId: freshRecord.resourceId ?? undefined,\n      });\n    } catch (err) {\n      omError('[OM] Failed to persist sealed messages before buffering — skipping observation cycle', err);\n      return;\n    }\n\n    // Generate cycle ID and capture start time\n    const cycleId = `buffer-obs-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n    const startedAt = new Date().toISOString();\n    const tokensToBuffer = await this.tokenCounter.countMessagesAsync(messagesToBuffer);\n\n    const startMarker = createBufferingStartMarker({\n      cycleId,\n      operationType: 'observation',\n      tokensToBuffer,\n      recordId: freshRecord.id,\n      threadId,\n      threadIds: [threadId],\n      config: this.getObservationMarkerConfig(),\n    });\n    await this.persistMarkerToStorage(startMarker, threadId, freshRecord.resourceId ?? undefined);\n\n    // Emit buffering start marker without letting the stream writer create a separate data-only DB message.\n    if (writer) {\n      // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n      void writer.custom({ ...startMarker, transient: true }).catch(() => {});\n    }\n\n    omDebug(\n      `[OM:bufferInput] cycleId=${cycleId}, msgCount=${messagesToBuffer.length}, msgTokens=${tokensToBuffer}, ids=${messagesToBuffer.map(m => `${m.id?.slice(0, 8)}@${m.createdAt ? new Date(m.createdAt).toISOString() : 'none'}`).join(',')}`,\n    );\n\n    await ObservationStrategy.create(this, {\n      record: freshRecord,\n      threadId,\n      resourceId: freshRecord.resourceId ?? undefined,\n      messages: messagesToBuffer,\n      cycleId,\n      startedAt,\n      writer,\n      requestContext,\n      observabilityContext,\n    }).run();\n\n    // Update the buffer cursor so the next buffer only sees messages newer than this one.\n    const maxTs = this.getMaxMessageTimestamp(messagesToBuffer);\n    const cursor = new Date(maxTs.getTime() + 1);\n    BufferingCoordinator.lastBufferedAtTime.set(bufferKey, cursor);\n  }\n\n  // ════════════════════════════════════════════════════════════════════════════\n  // HIGH-LEVEL API — semantic operations for programmatic use\n  // ════════════════════════════════════════════════════════════════════════════\n\n  /**\n   * Trigger async buffered observation if the token count has crossed a new interval.\n   *\n   * Encapsulates the shouldTrigger check + startAsyncBufferedObservation call.\n   * Returns whether buffering was actually triggered.\n   */\n  async triggerAsyncBuffering(opts: {\n    threadId: string;\n    resourceId?: string;\n    record: ObservationalMemoryRecord;\n    pendingTokens: number;\n    unbufferedPendingTokens: number;\n    unobservedMessages: MastraDBMessage[];\n    threshold: number;\n    writer?: ProcessorStreamWriter;\n    requestContext?: RequestContext;\n    observabilityContext?: ObservabilityContext;\n  }): Promise<boolean> {\n    if (!this.buffering.isAsyncObservationEnabled()) return false;\n\n    const lockKey = this.buffering.getLockKey(opts.threadId, opts.resourceId);\n    const shouldTrigger = this.buffering.shouldTriggerAsyncObservation(\n      opts.pendingTokens,\n      lockKey,\n      opts.record,\n      this.storage,\n      opts.threshold,\n    );\n\n    if (shouldTrigger) {\n      void this.startAsyncBufferedObservation(\n        opts.record,\n        opts.threadId,\n        opts.unobservedMessages,\n        lockKey,\n        opts.writer,\n        opts.unbufferedPendingTokens,\n        opts.requestContext,\n      );\n    }\n\n    return shouldTrigger;\n  }\n\n  private isMessageList(value: MessageList | MastraDBMessage[]): value is MessageList {\n    return !!value && typeof value === 'object' && 'get' in value && 'removeByIds' in value;\n  }\n\n  private removeIdsFromArray(messages: MastraDBMessage[], ids: string[]) {\n    if (ids.length === 0) return;\n    const idsSet = new Set(ids);\n    for (let i = messages.length - 1; i >= 0; i--) {\n      const msg = messages[i];\n      if (msg?.id && idsSet.has(msg.id)) {\n        messages.splice(i, 1);\n      }\n    }\n  }\n\n  /**\n   * Mutate partially observed messages in place and return the fully observed\n   * message IDs that should be removed from the live context.\n   *\n   * This is the shared activation-cleanup primitive used by both the processor\n   * and AI SDK integrations: callers pass the current live messages, OM trims\n   * any partially observed messages down to their unobserved parts, and OM\n   * returns only the IDs that are safe to remove entirely.\n   */\n  async getObservedMessageIdsForCleanup(opts: {\n    threadId: string;\n    resourceId?: string;\n    messages: MastraDBMessage[];\n    observedMessageIds?: string[];\n    retentionFloor?: number;\n  }): Promise<string[]> {\n    const { threadId, resourceId, messages, observedMessageIds, retentionFloor } = opts;\n\n    const record = await this.getOrCreateRecord(threadId, resourceId);\n    const effectiveObservedIds =\n      observedMessageIds && observedMessageIds.length > 0\n        ? observedMessageIds\n        : Array.isArray(record.observedMessageIds)\n          ? record.observedMessageIds\n          : [];\n\n    if (effectiveObservedIds.length === 0) {\n      return [];\n    }\n\n    const observedSet = new Set(effectiveObservedIds);\n    const idsToRemove = new Set<string>();\n    const removalOrder: string[] = [];\n    let skipped = 0;\n    let backoffTriggered = false;\n    const retentionCounter = typeof retentionFloor === 'number' ? new TokenCounter() : null;\n\n    for (const msg of messages) {\n      if (!msg?.id || msg.id === 'om-continuation' || !observedSet.has(msg.id)) continue;\n\n      const unobservedParts = getUnobservedParts(msg);\n      const totalParts = msg.content?.parts?.length ?? 0;\n\n      if (unobservedParts.length > 0 && unobservedParts.length < totalParts) {\n        msg.content.parts = unobservedParts;\n        continue;\n      }\n\n      if (retentionCounter && typeof retentionFloor === 'number') {\n        const nextRemainingMessages = messages.filter(\n          m => m?.id && m.id !== 'om-continuation' && !idsToRemove.has(m.id) && m.id !== msg.id,\n        );\n        const remainingIfRemoved = retentionCounter.countMessages(nextRemainingMessages);\n        if (remainingIfRemoved < retentionFloor) {\n          skipped += 1;\n          backoffTriggered = true;\n          break;\n        }\n      }\n\n      idsToRemove.add(msg.id);\n      removalOrder.push(msg.id);\n    }\n\n    if (retentionCounter && typeof retentionFloor === 'number' && idsToRemove.size > 0) {\n      let remainingMessages = messages.filter(m => m?.id && m.id !== 'om-continuation' && !idsToRemove.has(m.id));\n      let remainingTokens = retentionCounter.countMessages(remainingMessages);\n\n      while (remainingTokens < retentionFloor && removalOrder.length > 0) {\n        const restoreId = removalOrder.pop()!;\n        idsToRemove.delete(restoreId);\n        skipped += 1;\n        backoffTriggered = true;\n        remainingMessages = messages.filter(m => m?.id && m.id !== 'om-continuation' && !idsToRemove.has(m.id));\n        remainingTokens = retentionCounter.countMessages(remainingMessages);\n      }\n    }\n\n    omDebug(\n      `[OM:cleanupActivation] matched=${idsToRemove.size}, skipped=${skipped}, backoffTriggered=${backoffTriggered}`,\n    );\n\n    return [...idsToRemove];\n  }\n\n  /**\n   * Clean up observed content from either a live MessageList or a plain message array.\n   *\n   * - MessageList input: mutates the live container in place and returns the remaining messages\n   * - Array input: mutates the array in place and returns it\n   *\n   * This is the shared cleanup primitive intended for both processor and non-processor\n   * integrations. The processor may still pass sealedIds/state so marker/fallback cleanup\n   * can persist messages safely, but callers that do not need that bookkeeping can omit it.\n   */\n  /** @internal Used by ObservationStep. */\n  async cleanupMessages(opts: {\n    threadId: string;\n    resourceId?: string;\n    messages: MessageList | MastraDBMessage[];\n    observedMessageIds?: string[];\n    retentionFloor?: number;\n  }): Promise<MastraDBMessage[]> {\n    const { threadId, resourceId, observedMessageIds, retentionFloor } = opts;\n    const messageList = this.isMessageList(opts.messages) ? opts.messages : undefined;\n    const allMsgs: MastraDBMessage[] = messageList ? messageList.get.all.db() : (opts.messages as MastraDBMessage[]);\n\n    let markerIdx = -1;\n    let markerMsg: MastraDBMessage | null = null;\n\n    for (let i = allMsgs.length - 1; i >= 0; i--) {\n      const msg = allMsgs[i];\n      if (!msg) continue;\n      if (findLastCompletedObservationBoundary(msg) !== -1) {\n        markerIdx = i;\n        markerMsg = msg;\n        break;\n      }\n    }\n\n    omDebug(\n      `[OM:cleanupBranch] allMsgs=${allMsgs.length}, markerFound=${markerIdx !== -1}, markerIdx=${markerIdx}, observedMessageIds=${observedMessageIds?.length ?? 'undefined'}`,\n    );\n\n    if (observedMessageIds && observedMessageIds.length > 0) {\n      const idsToRemoveList = await this.getObservedMessageIdsForCleanup({\n        threadId,\n        resourceId,\n        messages: allMsgs,\n        observedMessageIds,\n        retentionFloor,\n      });\n\n      if (messageList) {\n        if (idsToRemoveList.length > 0) {\n          messageList.removeByIds(idsToRemoveList);\n        }\n        return messageList.get.all.db();\n      }\n\n      this.removeIdsFromArray(allMsgs, idsToRemoveList);\n      return allMsgs;\n    }\n\n    if (markerMsg && markerIdx !== -1) {\n      const idsToRemove: string[] = [];\n      const messagesToSave: MastraDBMessage[] = [];\n\n      for (let i = 0; i < markerIdx; i++) {\n        const msg = allMsgs[i];\n        if (msg?.id && msg.id !== 'om-continuation') {\n          idsToRemove.push(msg.id);\n          messagesToSave.push(msg);\n        }\n      }\n\n      messagesToSave.push(markerMsg);\n\n      const unobservedParts = getUnobservedParts(markerMsg);\n      if (unobservedParts.length === 0) {\n        if (markerMsg.id) idsToRemove.push(markerMsg.id);\n      } else if (unobservedParts.length < (markerMsg.content?.parts?.length ?? 0)) {\n        markerMsg.content.parts = unobservedParts;\n      }\n\n      if (messageList) {\n        if (idsToRemove.length > 0) {\n          messageList.removeByIds(idsToRemove);\n        }\n\n        if (messagesToSave.length > 0) {\n          await this.persistMessages(messagesToSave, threadId, resourceId);\n        }\n\n        omDebug(`[OM:cleanupMarker] removed ${idsToRemove.length} messages, saved ${messagesToSave.length}`);\n        return messageList.get.all.db();\n      }\n\n      this.removeIdsFromArray(allMsgs, idsToRemove);\n      return allMsgs;\n    }\n\n    // No observed IDs and no marker — nothing to clean up.\n    // Return messages unchanged.\n    return messageList ? messageList.get.all.db() : allMsgs;\n  }\n\n  /**\n   * Clean up the message context after a successful observation.\n   *\n   * Handles both activation-based cleanup (using observedMessageIds) and\n   * marker-based cleanup (using observation boundary markers). Respects\n   * retention floors to prevent removing too many messages.\n   */\n  async cleanupObservedContext(opts: {\n    messageList: MessageList;\n    threadId: string;\n    resourceId?: string;\n    observedMessageIds?: string[];\n    retentionFloor?: number;\n  }): Promise<void> {\n    const { messageList, threadId, resourceId, observedMessageIds, retentionFloor } = opts;\n    await this.cleanupMessages({\n      threadId,\n      resourceId,\n      messages: messageList,\n      observedMessageIds,\n      retentionFloor,\n    });\n  }\n\n  /**\n   * Reset buffering state after a successful observation activation.\n   *\n   * Clears the lastBufferedBoundary, buffering flag, and optionally cleans up\n   * static maps for activated message IDs.\n   */\n  /** @internal Used by ObservationStep. */\n  async resetBufferingState(opts: {\n    threadId: string;\n    resourceId?: string;\n    recordId: string;\n    activatedMessageIds?: string[];\n  }): Promise<void> {\n    const { threadId, resourceId, recordId, activatedMessageIds } = opts;\n    const lockKey = this.buffering.getLockKey(threadId, resourceId);\n    const bufKey = this.buffering.getObservationBufferKey(lockKey);\n\n    BufferingCoordinator.lastBufferedBoundary.set(bufKey, 0);\n    await this.storage.setBufferingObservationFlag(recordId, false, 0).catch(() => {});\n\n    if (activatedMessageIds && activatedMessageIds.length > 0) {\n      this.buffering.cleanupStaticMaps(threadId, resourceId, activatedMessageIds);\n    }\n  }\n\n  /**\n   * Build the observation system message string for injection into an LLM prompt.\n   *\n   * Loads thread metadata (currentTask, suggestedResponse), formats observations\n   * with context prompts and instructions, and returns the fully-formed string.\n   * Returns undefined if no observations exist.\n   *\n   * This is the public entry point for context formatting — used by both\n   * Memory.getContext() (standalone) and the processor (via injectObservationsIntoMessages).\n   *\n   * @example\n   * ```ts\n   * const systemMsg = await om.buildContextSystemMessage({ threadId: 'thread-1' });\n   * if (systemMsg) {\n   *   const result = await generateText({ system: systemMsg, messages });\n   * }\n   * ```\n   */\n  async buildContextSystemMessage(opts: {\n    threadId: string;\n    resourceId?: string;\n    record?: ObservationalMemoryRecord;\n    unobservedContextBlocks?: string;\n    currentDate?: Date;\n  }): Promise<string | undefined> {\n    const parts = await this.buildContextSystemMessages(opts);\n    return parts?.join('\\n\\n');\n  }\n\n  /**\n   * Build observation context as an array of system message chunks.\n   * Each chunk is a separate system message for better LLM cache hit rates.\n   * Used by the processor to inject multiple system messages.\n   * @internal\n   */\n  async buildContextSystemMessages(opts: {\n    threadId: string;\n    resourceId?: string;\n    record?: ObservationalMemoryRecord;\n    unobservedContextBlocks?: string;\n    currentDate?: Date;\n  }): Promise<string[] | undefined> {\n    const { threadId, resourceId, unobservedContextBlocks } = opts;\n    const record = opts.record ?? (await this.getOrCreateRecord(threadId, resourceId));\n\n    if (!record.activeObservations) return undefined;\n\n    // Read thread metadata for continuation hints\n    const thread = await this.storage.getThreadById({ threadId });\n    const omMetadata = getThreadOMMetadata(thread?.metadata);\n    const currentTask = omMetadata?.currentTask;\n    const suggestedResponse = omMetadata?.suggestedResponse;\n    const currentDate = opts.currentDate ?? new Date();\n\n    return this.formatObservationsForContext(\n      record.activeObservations,\n      currentTask,\n      suggestedResponse,\n      omMetadata?.extracted,\n      unobservedContextBlocks,\n      currentDate,\n      this.retrieval,\n    );\n  }\n\n  /**\n   * Get unobserved messages from other threads for resource-scoped observation.\n   *\n   * Lists all threads for the resource, filters to unobserved messages,\n   * and formats them as context blocks.\n   */\n  /** @internal Used by ObservationTurn. */\n  async getOtherThreadsContext(resourceId: string, currentThreadId: string): Promise<string | undefined> {\n    const { threads: allThreads } = await this.storage.listThreads({ filter: { resourceId } });\n    const messagesByThread = new Map<string, MastraDBMessage[]>();\n\n    // Fetch the OM record once so we can fall back to its lastObservedAt\n    // for threads whose metadata was never stamped.  See #15265.\n    const record = await this.getRecord(currentThreadId, resourceId);\n    const recordLastObservedAt = record?.lastObservedAt;\n\n    for (const thread of allThreads) {\n      if (thread.id === currentThreadId) continue;\n\n      const omMetadata = getThreadOMMetadata(thread.metadata);\n      const threadLastObservedAt = omMetadata?.lastObservedAt ?? recordLastObservedAt;\n      const startDate = threadLastObservedAt ? new Date(new Date(threadLastObservedAt).getTime() + 1) : undefined;\n\n      const result = await this.storage.listMessages({\n        threadId: thread.id,\n        perPage: false,\n        orderBy: { field: 'createdAt', direction: 'ASC' },\n        filter: startDate ? { dateRange: { start: startDate } } : undefined,\n      });\n\n      const filtered = result.messages.filter(m => !this.observedMessageIds.has(m.id));\n\n      if (filtered.length > 0) {\n        messagesByThread.set(thread.id, filtered);\n      }\n    }\n\n    if (messagesByThread.size === 0) return undefined;\n    const blocks = await this.formatUnobservedContextBlocks(messagesByThread, currentThreadId);\n    return blocks || undefined;\n  }\n\n  /**\n   * Emit debug event and stream progress for UI feedback.\n   */\n  async emitProgress(opts: {\n    record: ObservationalMemoryRecord;\n    pendingTokens: number;\n    threshold: number;\n    effectiveObservationTokensThreshold: number;\n    currentObservationTokens: number;\n    writer?: ProcessorStreamWriter;\n    stepNumber: number;\n    threadId: string;\n    resourceId?: string;\n  }): Promise<void> {\n    const {\n      record,\n      pendingTokens,\n      threshold,\n      effectiveObservationTokensThreshold,\n      currentObservationTokens,\n      writer,\n      stepNumber,\n      threadId,\n      resourceId,\n    } = opts;\n\n    this.emitDebugEvent({\n      type: 'step_progress',\n      timestamp: new Date(),\n      threadId,\n      resourceId: resourceId ?? '',\n      stepNumber,\n      finishReason: 'unknown',\n      pendingTokens,\n      threshold,\n      thresholdPercent: Math.round((pendingTokens / threshold) * 100),\n      willSave: pendingTokens >= threshold,\n      willObserve: pendingTokens >= threshold,\n    });\n\n    if (writer) {\n      const bufferedChunks = getBufferedChunks(record);\n      const bufferedObservationTokens = bufferedChunks.reduce((sum, chunk) => sum + (chunk.tokenCount ?? 0), 0);\n      const rawBufferedMessageTokens = bufferedChunks.reduce((sum, chunk) => sum + (chunk.messageTokens ?? 0), 0);\n      const bufferedMessageTokens = Math.min(rawBufferedMessageTokens, pendingTokens);\n\n      const projectedMessageRemoval = calculateProjectedMessageRemoval(\n        bufferedChunks,\n        this.observationConfig.bufferActivation ?? 1,\n        getMaxThreshold(this.getEffectiveMessageTokens(record)),\n        pendingTokens,\n      );\n\n      let obsBufferStatus: 'idle' | 'running' | 'complete' = 'idle';\n      if (record.isBufferingObservation) obsBufferStatus = 'running';\n      else if (bufferedChunks.length > 0) obsBufferStatus = 'complete';\n\n      let refBufferStatus: 'idle' | 'running' | 'complete' = 'idle';\n      if (record.isBufferingReflection) refBufferStatus = 'running';\n      else if (record.bufferedReflection && record.bufferedReflection.length > 0) refBufferStatus = 'complete';\n\n      const statusPart: DataOmStatusPart = {\n        type: 'data-om-status',\n        data: {\n          windows: {\n            active: {\n              messages: { tokens: pendingTokens, threshold },\n              observations: { tokens: currentObservationTokens, threshold: effectiveObservationTokensThreshold },\n            },\n            buffered: {\n              observations: {\n                chunks: bufferedChunks.length,\n                messageTokens: bufferedMessageTokens,\n                projectedMessageRemoval,\n                observationTokens: bufferedObservationTokens,\n                status: obsBufferStatus,\n              },\n              reflection: {\n                inputObservationTokens: record.bufferedReflectionInputTokens ?? 0,\n                observationTokens: record.bufferedReflectionTokens ?? 0,\n                status: refBufferStatus,\n              },\n            },\n          },\n          recordId: record.id,\n          threadId,\n          stepNumber,\n          generationCount: record.generationCount,\n        },\n      };\n      omDebug(\n        `[OM:status] step=${stepNumber} msgs=${pendingTokens}/${threshold} obs=${currentObservationTokens}/${effectiveObservationTokensThreshold} gen=${record.generationCount}`,\n      );\n      await writer.custom(statusPart).catch(() => {});\n    }\n  }\n\n  /**\n   * Get the current observation status for a thread/resource.\n   *\n   * Loads unobserved messages from storage, counts tokens, and checks against\n   * configured thresholds. Returns a comprehensive status object that tells the\n   * caller what actions are needed.\n   *\n   * This is a pure read operation with no side effects.\n   *\n   * @example\n   * ```ts\n   * const status = await om.getStatus({ threadId });\n   * if (status.shouldObserve) {\n   *   await om.observe({ threadId });\n   * } else if (status.shouldBuffer) {\n   *   await om.buffer({ threadId });\n   * }\n   * if (status.shouldReflect) {\n   *   await om.reflect(threadId);\n   * }\n   * ```\n   */\n  async getStatus(opts: { threadId: string; resourceId?: string; messages?: MastraDBMessage[] }): Promise<{\n    record: ObservationalMemoryRecord;\n    pendingTokens: number;\n    threshold: number;\n    effectiveObservationTokensThreshold: number;\n    unbufferedPendingTokens: number;\n    shouldObserve: boolean;\n    shouldBuffer: boolean;\n    shouldReflect: boolean;\n    bufferedChunkCount: number;\n    bufferedChunkTokens: number;\n    canActivate: boolean;\n    asyncObservationEnabled: boolean;\n    asyncReflectionEnabled: boolean;\n    scope: 'resource' | 'thread';\n  }> {\n    const { threadId, resourceId } = opts;\n    const record = await this.getOrCreateRecord(threadId, resourceId);\n    const currentObservationTokens = record.observationTokenCount ?? 0;\n\n    // Use provided messages or load from storage\n    let unobservedMessages: MastraDBMessage[];\n    if (opts.messages) {\n      unobservedMessages = this.getUnobservedMessages(opts.messages, record);\n    } else {\n      const rawMessages = await this.loadMessagesFromStorage(\n        threadId,\n        resourceId,\n        record.lastObservedAt ? new Date(record.lastObservedAt) : undefined,\n      );\n      unobservedMessages = this.getUnobservedMessages(rawMessages, record);\n    }\n\n    // Count tokens\n    const contextWindowTokens = await this.tokenCounter.countMessagesAsync(unobservedMessages);\n    let otherThreadTokens = 0;\n    if (this.scope === 'resource' && resourceId) {\n      const otherContext = await this.getOtherThreadsContext(resourceId, threadId);\n      otherThreadTokens = otherContext ? this.tokenCounter.countString(otherContext) : 0;\n    }\n    const pendingTokens = Math.max(0, contextWindowTokens + otherThreadTokens);\n\n    // Calculate observation threshold (use per-record override if set)\n    const threshold = calculateDynamicThreshold(this.getEffectiveMessageTokens(record), currentObservationTokens);\n\n    // Buffering status\n    const bufferedChunks = getBufferedChunks(record);\n    const bufferedChunkCount = bufferedChunks.length;\n    const bufferedChunkTokens = bufferedChunks.reduce((sum, chunk) => sum + (chunk.messageTokens ?? 0), 0);\n\n    // Should buffer? Check interval boundary using DB-backed state\n    const asyncObservationEnabled = this.buffering.isAsyncObservationEnabled();\n    let shouldBuffer = false;\n    if (asyncObservationEnabled && pendingTokens < threshold) {\n      const lockKey = this.buffering.getLockKey(threadId, resourceId);\n      shouldBuffer = this.buffering.shouldTriggerAsyncObservation(\n        pendingTokens,\n        lockKey,\n        record,\n        this.storage,\n        threshold,\n      );\n    }\n\n    // Should observe?\n    const shouldObserve = pendingTokens >= threshold;\n\n    // Should reflect? (use per-record override if set)\n    const reflectThreshold = getMaxThreshold(this.getEffectiveReflectionTokens(record));\n    const shouldReflect = currentObservationTokens >= reflectThreshold;\n\n    // Can activate?\n    const canActivate = bufferedChunkCount > 0;\n\n    // Effective observation tokens threshold (for shared budget UI display)\n    const effectiveMessageTokens = this.getEffectiveMessageTokens(record);\n    const isSharedBudget = typeof effectiveMessageTokens !== 'number';\n    const totalBudget = isSharedBudget ? (effectiveMessageTokens as { min: number; max: number }).max : 0;\n    const effectiveObservationTokensThreshold = isSharedBudget\n      ? Math.max(totalBudget - threshold, 1000)\n      : reflectThreshold;\n\n    const unbufferedPendingTokens = Math.max(0, pendingTokens - bufferedChunkTokens);\n\n    return {\n      record,\n      pendingTokens,\n      threshold,\n      effectiveObservationTokensThreshold,\n      unbufferedPendingTokens,\n      shouldObserve,\n      shouldBuffer,\n      shouldReflect,\n      bufferedChunkCount,\n      bufferedChunkTokens,\n      canActivate,\n      asyncObservationEnabled,\n      asyncReflectionEnabled: this.buffering.isAsyncReflectionEnabled(),\n      scope: this.scope,\n    };\n  }\n\n  /**\n   * Finalize the observation lifecycle: activate any remaining buffered chunks,\n   * then observe if the threshold is crossed.\n   *\n   * Call this at the end of a conversation, session, or turn sequence to ensure\n   * no buffered observations are left orphaned and the observation cursor is\n   * advanced. Produces a clean terminal state (no pending chunks, cursor up to date).\n   *\n   * @example\n   * ```ts\n   * // After all turns are complete\n   * const result = await om.finalize({ threadId });\n   * // result.activated: true if buffered chunks were promoted\n   * // result.observed: true if a full observation pass ran\n   * ```\n   */\n  async finalize(opts: { threadId: string; resourceId?: string; messages?: MastraDBMessage[] }): Promise<{\n    activated: boolean;\n    observed: boolean;\n    reflected: boolean;\n    record: ObservationalMemoryRecord;\n  }> {\n    const { threadId, resourceId, messages } = opts;\n    let activated = false;\n    let observed = false;\n    let reflected = false;\n\n    // Wait for any in-flight buffer operations to complete\n    await BufferingCoordinator.awaitBuffering(threadId, resourceId ?? null, this.scope);\n\n    // Activate any remaining buffered chunks\n    const preStatus = await this.getStatus({ threadId, resourceId, messages });\n    if (preStatus.canActivate) {\n      const actResult = await this.activate({ threadId, resourceId, messages });\n      activated = actResult.activated;\n    }\n\n    // Observe if threshold is crossed (advances the cursor)\n    const postStatus = await this.getStatus({ threadId, resourceId, messages });\n    if (postStatus.shouldObserve) {\n      const obsResult = await this.observe({ threadId, resourceId, messages });\n      observed = obsResult.observed;\n    }\n\n    // Reflect if observation tokens exceed reflection threshold\n    const reflectStatus = await this.getStatus({ threadId, resourceId });\n    if (reflectStatus.shouldReflect) {\n      const refResult = await this.reflect(threadId, resourceId);\n      reflected = refResult.reflected;\n    }\n\n    const record = await this.getOrCreateRecord(threadId, resourceId);\n    return { activated, observed, reflected, record };\n  }\n\n  /**\n   * Return only the messages that haven't been fully observed yet.\n   *\n   * Use this to prune observed messages from an in-memory message array,\n   * preventing unbounded context growth across steps in a multi-step loop.\n   * This is the array-based equivalent of the processor's `cleanupObservedContext()`.\n   *\n   * @example\n   * ```ts\n   * // In a prepareStep hook, prune before sending to the model\n   * messages = await om.pruneObserved({ threadId, messages });\n   * ```\n   */\n  async pruneObserved(opts: {\n    threadId: string;\n    resourceId?: string;\n    messages: MastraDBMessage[];\n  }): Promise<MastraDBMessage[]> {\n    const { threadId, resourceId, messages } = opts;\n    const record = await this.getOrCreateRecord(threadId, resourceId);\n    return this.getUnobservedMessages(messages, record);\n  }\n\n  /**\n   * Load unobserved messages from storage for a thread/resource.\n   *\n   * Fetches the OM record, queries storage for messages after the\n   * lastObservedAt cursor, then applies part-level filtering so\n   * partially-observed messages only include their unobserved parts.\n   *\n   * Use this when you need to load stored conversation history that\n   * hasn't been observed yet (e.g. in a stateless gateway proxy that\n   * only receives the latest message from the HTTP request).\n   */\n  async loadUnobservedMessages(opts: { threadId: string; resourceId?: string }): Promise<MastraDBMessage[]> {\n    const { threadId, resourceId } = opts;\n    const record = await this.getOrCreateRecord(threadId, resourceId);\n    const rawMessages = await this.loadMessagesFromStorage(\n      threadId,\n      resourceId,\n      record.lastObservedAt ? new Date(record.lastObservedAt) : undefined,\n    );\n    return this.getUnobservedMessages(rawMessages, record);\n  }\n\n  /**\n   * Create a buffered observation chunk without merging into active observations.\n   *\n   * Loads unobserved messages from storage (filtered by the buffer cursor to avoid\n   * re-buffering), calls the observer LLM, and stores the result as a pending\n   * buffered chunk in the DB. The chunk can later be merged into active observations\n   * via `activate()`.\n   *\n   * This is a synchronous (awaited) operation — the caller decides whether to\n   * `await` it or fire-and-forget. All state lives in storage; no in-process\n   * coordination is needed.\n   *\n   * @example\n   * ```ts\n   * const status = await om.getStatus({ threadId });\n   * if (status.shouldBuffer) {\n   *   await om.buffer({ threadId });\n   * }\n   * ```\n   */\n  /** @internal Used by ObservationStep. */\n  async buffer(opts: {\n    threadId: string;\n    resourceId?: string;\n    messages?: MastraDBMessage[];\n    /** The freshly-counted pending token count from the caller. If not provided,\n     *  falls back to record.pendingMessageTokens (which may be stale). */\n    pendingTokens?: number;\n    /** Pre-loaded record to skip the initial getOrCreateRecord() fetch.\n     *  When called fire-and-forget, passing the record avoids an async gap\n     *  before lastBufferedBoundary is set. */\n    record?: ObservationalMemoryRecord;\n    writer?: ProcessorStreamWriter;\n    agent?: ProcessorContext['agent'];\n    sendSignal?: ProcessorContext['sendSignal'];\n    requestContext?: RequestContext;\n    currentModel?: ObservationModelContext;\n    observabilityContext?: ObservabilityContext;\n    /** Allow idle-triggered buffering to observe any non-empty candidate set. */\n    skipMinimumTokenCheck?: boolean;\n    /** Called with the final candidate messages after cursor filtering, before the observer runs.\n     *  Use this to seal messages in a live MessageList and persist them to storage. */\n    beforeBuffer?: (candidates: MastraDBMessage[]) => Promise<void>;\n  }): Promise<{\n    buffered: boolean;\n    record: ObservationalMemoryRecord;\n  }> {\n    const { threadId, resourceId, requestContext, observabilityContext } = opts;\n\n    let record = opts.record ?? (await this.getOrCreateRecord(threadId, resourceId));\n\n    // Check if buffering is enabled\n    if (!this.buffering.isAsyncObservationEnabled()) {\n      return { buffered: false, record };\n    }\n\n    // Check if another process is already buffering (and the op is genuinely active)\n    if (record.isBufferingObservation && isOpActiveInProcess(record.id, 'bufferingObservation')) {\n      return { buffered: false, record };\n    }\n\n    // Use the caller-provided pendingTokens if available (processor passes the freshly-counted\n    // value from in-memory messages), otherwise fall back to the DB-stored value.\n    const currentTokens = opts.pendingTokens ?? record.pendingMessageTokens ?? 0;\n    const lockKey = this.buffering.getLockKey(threadId, resourceId);\n    const bufferKey = this.buffering.getObservationBufferKey(lockKey);\n\n    // Set lastBufferedBoundary IMMEDIATELY (before ANY async work) to prevent\n    // shouldTriggerAsyncObservation from triggering again on the next step.\n    // This MUST happen before the first await when buffer() is called fire-and-forget.\n    BufferingCoordinator.lastBufferedBoundary.set(bufferKey, currentTokens);\n\n    // Clear stale flag if it was set by a crashed process (non-blocking)\n    if (record.isBufferingObservation) {\n      await this.storage.setBufferingObservationFlag(record.id, false).catch(() => {});\n    }\n\n    // Wait for any existing buffering operation to complete first (mutex behavior).\n    // IMPORTANT: read the existing op BEFORE overwriting the map entry.\n    const existingOp = BufferingCoordinator.asyncBufferingOps.get(bufferKey);\n    if (existingOp) {\n      try {\n        await existingOp;\n      } catch {\n        // Previous op failed, continue with new one\n      }\n    }\n\n    // Set persistent flag and register op\n    registerOp(record.id, 'bufferingObservation');\n    this.storage.setBufferingObservationFlag(record.id, true, currentTokens).catch(err => {\n      omError('[OM] Failed to set buffering observation flag', err);\n    });\n\n    // Register in asyncBufferingOps so callers (and tests) can await completion\n    let resolveOp: () => void;\n    const opPromise = new Promise<void>(resolve => {\n      resolveOp = resolve;\n    });\n    BufferingCoordinator.asyncBufferingOps.set(bufferKey, opPromise);\n\n    // Re-fetch record after mutex wait to get the latest state\n    record = (await this.storage.getObservationalMemory(record.threadId, record.resourceId)) ?? record;\n\n    let flagCleared = false;\n\n    try {\n      // Load messages: use provided or load from storage\n      let candidateMessages: MastraDBMessage[];\n      if (opts.messages) {\n        candidateMessages = this.getUnobservedMessages(opts.messages, record, { excludeBuffered: true });\n      } else {\n        const rawMessages = await this.loadMessagesFromStorage(\n          threadId,\n          resourceId,\n          record.lastObservedAt ? new Date(record.lastObservedAt) : undefined,\n        );\n        candidateMessages = this.getUnobservedMessages(rawMessages, record, { excludeBuffered: true });\n      }\n\n      // Apply cursor filtering only for storage-loaded messages.\n      // When messages are provided directly, they're fresh and shouldn't be filtered by cursor.\n      if (!opts.messages) {\n        let bufferCursor = BufferingCoordinator.lastBufferedAtTime.get(bufferKey) ?? record.lastBufferedAtTime ?? null;\n        if (record.lastObservedAt) {\n          const lastObserved = new Date(record.lastObservedAt);\n          if (!bufferCursor || lastObserved > bufferCursor) {\n            bufferCursor = lastObserved;\n          }\n        }\n\n        if (bufferCursor) {\n          candidateMessages = candidateMessages.filter(msg => {\n            if (!msg.createdAt) return true;\n            return new Date(msg.createdAt) > bufferCursor;\n          });\n        }\n      }\n\n      // Check minimum token threshold\n      const bufferTokens = this.observationConfig.bufferTokens ?? 5000;\n      const minNewTokens = bufferTokens / 2;\n      const newTokens = await this.tokenCounter.countMessagesAsync(candidateMessages);\n\n      if (candidateMessages.length === 0 || (!opts.skipMinimumTokenCheck && newTokens < minNewTokens)) {\n        return { buffered: false, record };\n      }\n\n      // Seal candidates before the observer runs.\n      // If a beforeBuffer callback is provided (processor path), it handles sealing + persistence.\n      // Otherwise, seal automatically so external consumers don't need to deal with it.\n      if (opts.beforeBuffer) {\n        await opts.beforeBuffer(candidateMessages);\n      } else if (opts.messages) {\n        this.sealMessagesForBuffering(candidateMessages);\n      }\n\n      // Generate cycle ID\n      const cycleId = `buffer-obs-${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n      const startedAt = new Date().toISOString();\n\n      const startMarker = createBufferingStartMarker({\n        cycleId,\n        operationType: 'observation',\n        tokensToBuffer: newTokens,\n        recordId: record.id,\n        threadId,\n        threadIds: [threadId],\n        config: this.getObservationMarkerConfig(),\n      });\n      await this.persistMarkerToStorage(startMarker, threadId, record.resourceId ?? undefined);\n\n      // Emit buffering start marker without letting the stream writer create a separate data-only DB message.\n      const writer = opts.writer;\n      if (writer) {\n        // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n        void writer.custom({ ...startMarker, transient: true }).catch(() => {});\n      }\n\n      // Call the observer via strategy pattern\n      await ObservationStrategy.create(this, {\n        record,\n        threadId,\n        resourceId: record.resourceId ?? undefined,\n        messages: candidateMessages,\n        cycleId,\n        startedAt,\n        writer,\n        agent: opts.agent,\n        sendSignal: opts.sendSignal,\n        requestContext,\n        currentModel: opts.currentModel,\n        observabilityContext,\n      }).run();\n\n      if (isOmReproCaptureEnabled()) {\n        writeObserverExchangeReproCapture({\n          threadId,\n          resourceId: record.resourceId ?? undefined,\n          label: `buffer-${cycleId}`,\n          observerExchange: this.observer.lastExchange,\n          details: {\n            cycleId,\n            startedAt,\n            buffered: true,\n            candidateMessageIds: candidateMessages.map(message => message.id),\n            candidateMessageCount: candidateMessages.length,\n            pendingTokens: currentTokens,\n            newTokens,\n          },\n        });\n      }\n\n      // Update the boundary tokens in storage + in-memory cache for interval tracking\n      await this.storage.setBufferingObservationFlag(record.id, false, newTokens).catch(() => {});\n      flagCleared = true;\n      BufferingCoordinator.lastBufferedBoundary.set(bufferKey, newTokens);\n\n      // Update lastBufferedAtTime in-memory cache so subsequent buffer() calls filter correctly\n      const maxTimestamp = this.getMaxMessageTimestamp(candidateMessages);\n      const cursor = new Date(maxTimestamp.getTime() + 1);\n      BufferingCoordinator.lastBufferedAtTime.set(bufferKey, cursor);\n\n      const updatedRecord = await this.getOrCreateRecord(threadId, resourceId);\n      return { buffered: true, record: updatedRecord };\n    } catch (error) {\n      omError('[OM] buffer() failed', error);\n      return { buffered: false, record };\n    } finally {\n      unregisterOp(record.id, 'bufferingObservation');\n      BufferingCoordinator.asyncBufferingOps.delete(bufferKey);\n      resolveOp!();\n      // Only clear the flag if the success path didn't already clear it (with token count)\n      if (!flagCleared) {\n        await this.storage.setBufferingObservationFlag(record.id, false).catch(() => {});\n      }\n    }\n  }\n\n  /**\n   * Activate buffered observation chunks by merging them into active observations.\n   *\n   * This is a pure storage operation — no LLM call. It reads buffered chunks from\n   * the DB and swaps them into active observations via `storage.swapBufferedToActive()`.\n   *\n   * Call this after `buffer()` has created chunks, typically at the start of a new\n   * turn or when `getStatus().canActivate` is true.\n   *\n   * @example\n   * ```ts\n   * const status = await om.getStatus({ threadId });\n   * if (status.canActivate) {\n   *   const result = await om.activate({ threadId });\n   *   if (result.activated) {\n   *     console.log('Activated', result.activatedMessageIds?.length, 'message observations');\n   *   }\n   * }\n   * ```\n   */\n  /** @internal Used by ObservationStep. */\n  async activate(opts: {\n    threadId: string;\n    resourceId?: string;\n    /** When true, skip activation if pending tokens are below the observation threshold. */\n    checkThreshold?: boolean;\n    /** Messages to use for threshold check (in-memory). If omitted, loads from storage. */\n    messages?: MastraDBMessage[];\n    /** Current actor model for provider-change activation checks. */\n    currentModel?: ObservationModelContext;\n    /** Stream writer for emitting activation markers to the UI. */\n    writer?: ProcessorStreamWriter;\n    /** MessageList for persisting activation markers on the last assistant message. */\n    messageList?: MessageList;\n  }): Promise<{\n    activated: boolean;\n    record: ObservationalMemoryRecord;\n    activatedMessageIds?: string[];\n  }> {\n    const { threadId, resourceId } = opts;\n\n    const record = await this.getOrCreateRecord(threadId, resourceId);\n\n    // Reset stale lastBufferedBoundary at the start of a new turn.\n    // If the stored boundary is far above the current context size, it's\n    // leftover from a previous turn and would block future buffering triggers.\n    if (this.buffering.isAsyncObservationEnabled()) {\n      const lockKey = this.buffering.getLockKey(threadId, resourceId);\n      const bufKey = this.buffering.getObservationBufferKey(lockKey);\n      const dbBoundary = record.lastBufferedAtTokens ?? 0;\n      if (dbBoundary > 0 && opts.messages) {\n        const unobserved = this.getUnobservedMessages(opts.messages, record);\n        const currentContextTokens = this.tokenCounter.countMessages(unobserved);\n        if (currentContextTokens < dbBoundary * 0.5) {\n          omDebug(\n            `[OM:activate] resetting stale lastBufferedBoundary: dbBoundary=${dbBoundary}, currentContextTokens=${currentContextTokens}`,\n          );\n          BufferingCoordinator.lastBufferedBoundary.set(bufKey, 0);\n          await this.storage.setBufferingObservationFlag(record.id, false, 0).catch(() => {});\n        }\n      }\n    }\n\n    // Check for buffered chunks\n    const chunks = getBufferedChunks(record);\n    if (!chunks.length) {\n      return { activated: false, record };\n    }\n\n    let activationTriggeredBy: 'threshold' | 'ttl' | 'provider_change' = 'threshold';\n    let activationLastActivityAt: number | undefined;\n    let activationActivateAfterIdle: number | undefined;\n    let activateAfterIdleExpiredMs: number | undefined;\n    let previousModel: string | undefined;\n    let currentModel: string | undefined;\n\n    // Optional threshold guard — skip activation if pending tokens are below threshold\n    if (opts.checkThreshold) {\n      const thresholdMessages =\n        opts.messages ??\n        (await this.loadMessagesFromStorage(\n          threadId,\n          resourceId,\n          record.lastObservedAt ? new Date(record.lastObservedAt) : undefined,\n        ));\n\n      const activateAfterIdle = resolveActivationTTL(this.observationConfig.activateAfterIdle, opts.currentModel);\n      const lastActivityAt = getLastActivityFromMessages(thresholdMessages);\n      const ttlExpiredMs =\n        activateAfterIdle !== undefined && lastActivityAt !== undefined ? Date.now() - lastActivityAt : undefined;\n      const ttlExpired =\n        ttlExpiredMs !== undefined && activateAfterIdle !== undefined && ttlExpiredMs >= activateAfterIdle;\n      const actorModel = getCurrentModel(opts.currentModel);\n      const lastModel = getLastModelFromMessages(thresholdMessages);\n      const providerChanged =\n        this.observationConfig.activateOnProviderChange === true && hasProviderChanged(actorModel, lastModel);\n\n      if (providerChanged) {\n        activationTriggeredBy = 'provider_change';\n        previousModel = lastModel;\n        currentModel = actorModel;\n      } else if (ttlExpired) {\n        activationTriggeredBy = 'ttl';\n        activationLastActivityAt = lastActivityAt;\n        activationActivateAfterIdle = activateAfterIdle;\n        activateAfterIdleExpiredMs = ttlExpiredMs;\n      } else {\n        const status = await this.getStatus({ threadId, resourceId, messages: thresholdMessages });\n        if (status.pendingTokens < status.threshold) {\n          return { activated: false, record };\n        }\n      }\n    }\n\n    // Wait for any in-progress buffering to complete (check DB flag)\n    if (record.isBufferingObservation) {\n      // If the op is active in this process, wait for it\n      const lockKey = this.buffering.getLockKey(threadId, resourceId);\n      const bufferKey = this.buffering.getObservationBufferKey(lockKey);\n      const asyncOp = BufferingCoordinator.asyncBufferingOps.get(bufferKey);\n      if (asyncOp) {\n        try {\n          await Promise.race([\n            asyncOp,\n            new Promise((_, reject) => setTimeout(() => reject(new Error('Timeout')), 60_000)),\n          ]);\n        } catch {\n          // Timeout or error — proceed with what we have\n        }\n      }\n      // If not in this process, the flag might be stale or from another replica.\n      // Proceed with activation of whatever chunks exist.\n    }\n\n    // Re-fetch to get latest chunks after any completed buffering\n    const freshRecord = await this.storage.getObservationalMemory(record.threadId, record.resourceId);\n    if (!freshRecord) {\n      return { activated: false, record };\n    }\n    const freshChunks = getBufferedChunks(freshRecord);\n    if (!freshChunks.length) {\n      return { activated: false, record };\n    }\n\n    // Calculate activation parameters (use per-record override if set)\n    const messageTokensThreshold = getMaxThreshold(this.getEffectiveMessageTokens(freshRecord));\n    const bufferActivation = this.observationConfig.bufferActivation ?? 0.7;\n    const activationRatio = resolveActivationRatio(bufferActivation, messageTokensThreshold);\n\n    // Estimate current pending tokens from chunks\n    const totalChunkMessageTokens = freshChunks.reduce((sum, c) => sum + (c.messageTokens ?? 0), 0);\n    const currentPendingTokens = freshRecord.pendingMessageTokens || totalChunkMessageTokens;\n\n    const forceMaxActivation = !!(\n      this.observationConfig.blockAfter && currentPendingTokens >= this.observationConfig.blockAfter\n    );\n\n    // Perform the swap\n    const activationResult = await this.storage.swapBufferedToActive({\n      id: freshRecord.id,\n      activationRatio,\n      messageTokensThreshold,\n      currentPendingTokens,\n      forceMaxActivation,\n      bufferedChunks: freshChunks,\n    });\n\n    // Clear buffering flag\n    await this.storage.setBufferingObservationFlag(freshRecord.id, false).catch(() => {});\n    unregisterOp(freshRecord.id, 'bufferingObservation');\n\n    // Fetch updated record for marker emission\n    const postSwapRecord = await this.storage.getObservationalMemory(record.threadId, record.resourceId);\n\n    // Emit activation markers for UI feedback — one per activated cycleId\n    if (opts.writer && postSwapRecord && activationResult.activatedCycleIds.length > 0) {\n      const perChunkMap = new Map(activationResult.perChunk?.map(c => [c.cycleId, c]));\n      for (const cycleId of activationResult.activatedCycleIds) {\n        const chunkData = perChunkMap.get(cycleId);\n        const activationMarker = createActivationMarker({\n          cycleId,\n          operationType: 'observation',\n          chunksActivated: 1,\n          tokensActivated: chunkData?.messageTokens ?? activationResult.messageTokensActivated,\n          observationTokens: chunkData?.observationTokens ?? activationResult.observationTokensActivated,\n          messagesActivated: chunkData?.messageCount ?? activationResult.messagesActivated,\n          recordId: postSwapRecord.id,\n          threadId: postSwapRecord.threadId ?? record.threadId ?? '',\n          generationCount: postSwapRecord.generationCount ?? 0,\n          observations: chunkData?.observations ?? activationResult.observations,\n          triggeredBy: activationTriggeredBy,\n          lastActivityAt: activationLastActivityAt,\n          ttlExpiredMs: activateAfterIdleExpiredMs,\n          previousModel,\n          currentModel,\n          config: {\n            ...this.getObservationMarkerConfig(),\n            activateAfterIdle: activationActivateAfterIdle ?? this.observationConfig.activateAfterIdle,\n          },\n        });\n        // Stream OM lifecycle markers as transient so the OutputWriter does not persist standalone data-only messages; OM persists the durable marker explicitly.\n        void opts.writer.custom({ ...activationMarker, transient: true }).catch(() => {});\n        await this.persistMarkerToMessage(\n          activationMarker,\n          opts.messageList,\n          record.threadId ?? '',\n          record.resourceId ?? undefined,\n        );\n      }\n    }\n\n    // Update thread metadata with continuation hints from activated chunks\n    const thread = await this.storage.getThreadById({ threadId });\n    if (thread) {\n      // Get hints from the most recent activated chunk\n      const activatedChunks = freshChunks.filter(c => activationResult.activatedCycleIds.includes(c.cycleId));\n      const lastActivated = activatedChunks[activatedChunks.length - 1];\n      if (lastActivated) {\n        const chunkThreadTitle = lastActivated.threadTitle;\n        const newMetadata = setThreadOMMetadata(thread.metadata, {\n          suggestedResponse: lastActivated.suggestedContinuation,\n          currentTask: lastActivated.currentTask,\n          threadTitle: chunkThreadTitle,\n        });\n        const oldTitle = thread.title?.trim();\n        const newTitle = chunkThreadTitle?.trim();\n        const shouldUpdateThreadTitle = !!newTitle && newTitle.length >= 3 && newTitle !== oldTitle;\n        await this.storage.updateThread({\n          id: threadId,\n          title: shouldUpdateThreadTitle ? newTitle : (thread.title ?? ''),\n          metadata: newMetadata,\n        });\n      }\n    }\n\n    const updatedRecord = await this.getOrCreateRecord(threadId, resourceId);\n    return {\n      activated: true,\n      record: updatedRecord,\n      activatedMessageIds: activationResult.activatedMessageIds,\n    };\n  }\n\n  /**\n   * Manually trigger observation.\n   *\n   * When `messages` is provided, those are used directly (filtered for unobserved)\n   * instead of reading from storage. This allows external systems (e.g., opencode)\n   * to pass conversation messages without duplicating them into Mastra's DB.\n   *\n   * Returns a result indicating whether observation and/or reflection occurred,\n   * along with the updated record.\n   */\n  async observe(opts: {\n    threadId: string;\n    resourceId?: string;\n    messages?: MastraDBMessage[];\n    hooks?: ObserveHooks;\n    agent?: ProcessorContext['agent'];\n    requestContext?: RequestContext;\n    writer?: ProcessorStreamWriter;\n    observabilityContext?: ObservabilityContext;\n  }): Promise<{\n    observed: boolean;\n    reflected: boolean;\n    record: ObservationalMemoryRecord;\n  }> {\n    const { threadId, resourceId, messages, hooks, requestContext } = opts;\n    const lockKey = this.buffering.getLockKey(threadId, resourceId);\n    const reflectionHooks = hooks\n      ? { onReflectionStart: hooks.onReflectionStart, onReflectionEnd: hooks.onReflectionEnd }\n      : undefined;\n\n    let observed = false;\n    let observationUsage: ObserveHookUsage | undefined;\n    let observationProviderMetadata: ProviderMetadata | undefined;\n    let generationBefore = -1;\n\n    await this.withLock(lockKey, async () => {\n      const freshRecord = await this.getOrCreateRecord(threadId, resourceId);\n      generationBefore = freshRecord.generationCount;\n\n      const unobservedMessages = messages\n        ? this.getUnobservedMessages(messages, freshRecord)\n        : await this.loadMessagesFromStorage(\n            threadId,\n            resourceId,\n            freshRecord.lastObservedAt ? new Date(freshRecord.lastObservedAt) : undefined,\n          );\n\n      if (\n        !this.meetsObservationThreshold({\n          record: freshRecord,\n          unobservedTokens: await this.tokenCounter.countMessagesAsync(unobservedMessages),\n        })\n      ) {\n        return;\n      }\n\n      hooks?.onObservationStart?.();\n      let observationError: Error | undefined;\n      try {\n        const result = await ObservationStrategy.create(this, {\n          record: freshRecord,\n          threadId,\n          resourceId,\n          messages: unobservedMessages,\n          reflectionHooks,\n          agent: opts.agent,\n          requestContext,\n          writer: opts.writer,\n          observabilityContext: opts.observabilityContext,\n        }).run();\n        observed = result.observed;\n        observationUsage = result.usage;\n        observationProviderMetadata = result.providerMetadata;\n      } catch (error) {\n        observationError = error instanceof Error ? error : new Error(String(error));\n        throw error;\n      } finally {\n        hooks?.onObservationEnd?.({\n          usage: observationUsage,\n          error: observationError,\n          ...(observationProviderMetadata ? { providerMetadata: observationProviderMetadata } : {}),\n        });\n      }\n    });\n\n    // Fetch the latest record after lock release\n    const record = await this.getOrCreateRecord(threadId, resourceId);\n    const reflected = record.generationCount > generationBefore && generationBefore >= 0;\n    return { observed, reflected, record };\n  }\n\n  /**\n   * Manually trigger reflection with optional guidance prompt.\n   *\n   * @example\n   * ```ts\n   * // Trigger reflection with specific focus\n   * await om.reflect(threadId, resourceId,\n   *   \"focus on the authentication implementation, only keep minimal details about UI styling\"\n   * );\n   * ```\n   */\n  async reflect(\n    threadId: string,\n    resourceId?: string,\n    prompt?: string,\n    requestContext?: RequestContext,\n    observabilityContext?: ObservabilityContext,\n  ): Promise<{\n    reflected: boolean;\n    record: ObservationalMemoryRecord;\n    usage?: ObserveHookUsage;\n  }> {\n    const record = await this.getOrCreateRecord(threadId, resourceId);\n\n    if (!record.activeObservations) {\n      return { reflected: false, record, usage: undefined };\n    }\n\n    await this.storage.setReflectingFlag(record.id, true);\n    registerOp(record.id, 'reflecting');\n\n    try {\n      const thread = await this.storage.getThreadById({ threadId });\n      const previousOmMetadata = getThreadOMMetadata(thread?.metadata);\n      const priorExtractedValues = getPriorExtractedValues(previousOmMetadata, this.reflectionConfig.extractors);\n      const reflectThreshold = getMaxThreshold(this.getEffectiveReflectionTokens(record));\n      const reflectResult = await this.reflector.call(\n        record.activeObservations,\n        prompt,\n        undefined,\n        reflectThreshold,\n        undefined,\n        undefined,\n        undefined,\n        requestContext,\n        priorExtractedValues,\n        observabilityContext,\n        undefined,\n      );\n      const reflectionTokenCount = this.tokenCounter.countObservations(reflectResult.observations);\n\n      await this.storage.createReflectionGeneration({\n        currentRecord: record,\n        reflection: reflectResult.observations,\n        tokenCount: reflectionTokenCount,\n      });\n\n      if (thread && reflectResult.extractedValues) {\n        const metadataUpdate = buildThreadMetadataFromExtractedValues(\n          this.reflectionConfig.extractors,\n          reflectResult.extractedValues,\n        );\n        const newMetadata = setThreadOMMetadata(thread.metadata, {\n          currentTask: metadataUpdate.currentTask ?? previousOmMetadata?.currentTask,\n          suggestedResponse: metadataUpdate.suggestedResponse ?? previousOmMetadata?.suggestedResponse,\n          threadTitle: metadataUpdate.threadTitle ?? previousOmMetadata?.threadTitle,\n          extracted: { ...(previousOmMetadata?.extracted ?? {}), ...(metadataUpdate.extracted ?? {}) },\n        });\n        await this.storage.updateThread({\n          id: threadId,\n          title: thread.title ?? '',\n          metadata: newMetadata,\n        });\n      }\n\n      const updatedRecord = await this.getOrCreateRecord(threadId, resourceId);\n      return { reflected: true, record: updatedRecord, usage: reflectResult.usage };\n    } catch (error) {\n      omError('[OM] reflect() failed', error);\n      const latestRecord = await this.getOrCreateRecord(threadId, resourceId);\n      return { reflected: false, record: latestRecord, usage: undefined };\n    } finally {\n      await this.storage.setReflectingFlag(record.id, false);\n      unregisterOp(record.id, 'reflecting');\n    }\n  }\n\n  /**\n   * Get current observations for a thread/resource\n   */\n  async getObservations(threadId: string, resourceId?: string): Promise<string | undefined> {\n    const ids = this.getStorageIds(threadId, resourceId);\n    const record = await this.storage.getObservationalMemory(ids.threadId, ids.resourceId);\n    return record?.activeObservations;\n  }\n\n  /**\n   * Get current record for a thread/resource\n   */\n  async getRecord(threadId: string, resourceId?: string): Promise<ObservationalMemoryRecord | null> {\n    const ids = this.getStorageIds(threadId, resourceId);\n    return this.storage.getObservationalMemory(ids.threadId, ids.resourceId);\n  }\n\n  /**\n   * Update per-record config overrides for observation and/or reflection thresholds.\n   * The provided config is deep-merged into the record's `_overrides` key,\n   * so you only need to specify the fields you want to change.\n   *\n   * Overrides that violate buffering invariants (e.g. messageTokens below\n   * bufferTokens) are silently ignored at read time — the helpers fall back\n   * to the instance-level config.\n   *\n   * @example\n   * ```ts\n   * await om.updateRecordConfig('thread-1', undefined, {\n   *   observation: { messageTokens: 2000 },\n   *   reflection: { observationTokens: 8000 },\n   * });\n   * ```\n   */\n  async updateRecordConfig(\n    threadId: string,\n    resourceId: string | undefined,\n    config: Record<string, unknown>,\n  ): Promise<void> {\n    const ids = this.getStorageIds(threadId, resourceId);\n    const record = await this.storage.getObservationalMemory(ids.threadId, ids.resourceId);\n    if (!record) {\n      throw new Error(`No observational memory record found for thread ${ids.threadId}`);\n    }\n    // Write under _overrides so getEffectiveMessageTokens / getEffectiveReflectionTokens\n    // pick up the override values, distinct from the initial config snapshot.\n    await this.storage.updateObservationalMemoryConfig({\n      id: record.id,\n      config: { _overrides: config },\n    });\n  }\n\n  /**\n   * Get observation history (previous generations)\n   */\n  async getHistory(\n    threadId: string,\n    resourceId?: string,\n    limit?: number,\n    options?: ObservationalMemoryHistoryOptions,\n  ): Promise<ObservationalMemoryRecord[]> {\n    const ids = this.getStorageIds(threadId, resourceId);\n    return this.storage.getObservationalMemoryHistory(ids.threadId, ids.resourceId, limit, options);\n  }\n\n  /**\n   * Clear all memory for a specific thread/resource\n   */\n  async clear(threadId: string, resourceId?: string): Promise<void> {\n    const ids = this.getStorageIds(threadId, resourceId);\n    await this.storage.clearObservationalMemory(ids.threadId, ids.resourceId);\n    // Clean up static maps to prevent memory leaks\n    this.buffering.cleanupStaticMaps(ids.threadId ?? ids.resourceId, ids.resourceId);\n  }\n\n  /**\n   * Get the underlying storage adapter\n   */\n  getStorage(): MemoryStorage {\n    return this.storage;\n  }\n\n  /**\n   * Get the owning Memory instance when available.\n   */\n  getMemory(): Memory | undefined {\n    return this.memory;\n  }\n\n  /**\n   * Get the token counter\n   */\n  getTokenCounter(): TokenCounter {\n    return this.tokenCounter;\n  }\n\n  /**\n   * Get current observation configuration\n   */\n  getObservationConfig(): ResolvedObservationConfig {\n    return this.observationConfig;\n  }\n\n  /**\n   * Get current reflection configuration\n   */\n  getReflectionConfig(): ResolvedReflectionConfig {\n    return this.reflectionConfig;\n  }\n\n  /**\n   * Get the message history instance for marker persistence.\n   */\n  getMessageHistory(): MessageHistory {\n    return this.messageHistory;\n  }\n\n  /**\n   * Get whether thread IDs should be obscured in observations.\n   */\n  getObscureThreadIds(): boolean {\n    return this.shouldObscureThreadIds;\n  }\n\n  /**\n   * Begin a new observation turn — the high-level API for managing the\n   * observe/buffer/activate/reflect lifecycle across agentic loop steps.\n   *\n   * @example\n   * ```ts\n   * const turn = om.beginTurn({ threadId, resourceId, messageList });\n   * await turn.start(memory);\n   *\n   * const step0 = turn.step(0);\n   * const ctx = await step0.prepare();\n   * // ... agent generates ...\n   *\n   * await turn.end();\n   * ```\n   */\n  beginTurn(opts: {\n    threadId: string;\n    resourceId?: string;\n    messageList: MessageList;\n    agent?: ProcessorContext['agent'];\n    observabilityContext?: ObservabilityContext;\n    hooks?: ObservationTurnHooks;\n  }): ObservationTurn {\n    return new ObservationTurn({\n      om: this,\n      threadId: opts.threadId,\n      resourceId: opts.resourceId,\n      messageList: opts.messageList,\n      agent: opts.agent,\n      observabilityContext: opts.observabilityContext,\n      hooks: opts.hooks,\n    });\n  }\n}\n","import type { MastraDBMessage } from '@mastra/core/agent';\nimport type { ProcessInputStepArgs } from '@mastra/core/processors';\n\nimport { formatTemporalGap, formatTemporalTimestamp, getMessagePartTimestamp, isTemporalGapMarker } from './date-utils';\n\nexport const TEMPORAL_GAP_REMINDER_TYPE = 'temporal-gap';\n\nfunction getTemporalGapReminderText(gapText: string, timestamp: number): string {\n  return `${gapText} — ${formatTemporalTimestamp(new Date(timestamp))}`;\n}\n\nfunction getTemporalGapReminderMetadata(message: MastraDBMessage, gapText: string, gapMs: number, timestamp: number) {\n  const formattedTimestamp = formatTemporalTimestamp(new Date(timestamp));\n\n  return {\n    reminderType: TEMPORAL_GAP_REMINDER_TYPE,\n    gapText,\n    gapMs,\n    timestamp: formattedTimestamp,\n    timestampMs: timestamp,\n    precedesMessageId: message.id,\n    systemReminder: {\n      type: TEMPORAL_GAP_REMINDER_TYPE,\n      message: getTemporalGapReminderText(gapText, timestamp),\n      gapText,\n      gapMs,\n      timestamp: formattedTimestamp,\n      timestampMs: timestamp,\n      precedesMessageId: message.id,\n    },\n  };\n}\n\nfunction getTemporalGapReminderAttributes(message: MastraDBMessage, gapText: string, gapMs: number, timestamp: number) {\n  return {\n    type: TEMPORAL_GAP_REMINDER_TYPE,\n    gapText,\n    gapMs,\n    timestamp: formatTemporalTimestamp(new Date(timestamp)),\n    timestampMs: timestamp,\n    precedesMessageId: message.id,\n  };\n}\n\nfunction isTemporalGapMarkerForMessage(message: MastraDBMessage, targetMessageId: string): boolean {\n  if (!isTemporalGapMarker(message)) {\n    return false;\n  }\n\n  const metadata = message.content.metadata as\n    | {\n        precedesMessageId?: unknown;\n        systemReminder?: { type?: unknown; precedesMessageId?: unknown };\n      }\n    | undefined;\n\n  if (metadata?.precedesMessageId === targetMessageId) {\n    return true;\n  }\n\n  return (\n    metadata?.systemReminder?.type === TEMPORAL_GAP_REMINDER_TYPE &&\n    metadata.systemReminder.precedesMessageId === targetMessageId\n  );\n}\n\nexport async function insertTemporalGapMarkers({\n  messageList,\n  sendSignal,\n}: Pick<ProcessInputStepArgs, 'messageList' | 'sendSignal'>): Promise<void> {\n  const inputMessages = messageList.get.input.db().filter((message): message is MastraDBMessage => Boolean(message));\n  const latestInputMessage = inputMessages.at(-1);\n\n  if (!latestInputMessage || isTemporalGapMarker(latestInputMessage)) {\n    return;\n  }\n\n  const allMessages = messageList.get.all.db().filter((message): message is MastraDBMessage => Boolean(message));\n  const latestInputIndex = allMessages.findIndex(message => message.id === latestInputMessage.id);\n\n  if (latestInputIndex <= 0) {\n    return;\n  }\n\n  if (allMessages.some(message => isTemporalGapMarkerForMessage(message, latestInputMessage.id))) {\n    return;\n  }\n\n  let previousNonMarker: MastraDBMessage | undefined;\n  for (let index = latestInputIndex - 1; index >= 0; index--) {\n    const candidate = allMessages[index];\n    if (candidate && !isTemporalGapMarker(candidate)) {\n      previousNonMarker = candidate;\n      break;\n    }\n  }\n\n  if (!previousNonMarker) {\n    return;\n  }\n\n  const timestamp = getMessagePartTimestamp(latestInputMessage, 'first');\n  const gapMs = timestamp - getMessagePartTimestamp(previousNonMarker, 'last');\n  const gapText = formatTemporalGap(gapMs);\n\n  if (!gapText) {\n    return;\n  }\n\n  await sendSignal?.({\n    id: `__temporal_gap_${crypto.randomUUID()}`,\n    type: 'reactive',\n    tagName: 'system-reminder',\n    contents: getTemporalGapReminderText(gapText, timestamp),\n    createdAt: new Date(timestamp - 1),\n    acceptedAt: new Date(timestamp),\n    attributes: getTemporalGapReminderAttributes(latestInputMessage, gapText, gapMs, timestamp),\n    metadata: getTemporalGapReminderMetadata(latestInputMessage, gapText, gapMs, timestamp),\n  });\n}\n","import type { MastraDBMessage, MessageList } from '@mastra/core/agent';\nimport { parseMemoryRequestContext } from '@mastra/core/memory';\nimport type { ObservabilityContext } from '@mastra/core/observability';\nimport type { Processor, ProcessInputStepArgs, ProcessOutputResultArgs } from '@mastra/core/processors';\nimport type { ObservationalMemoryRecord } from '@mastra/core/storage';\n\nimport { OBSERVATION_CONTINUATION_HINT } from './constants';\nimport { omDebug } from './debug';\nimport type { ObservationTurn } from './observation-turn/index';\nimport { loadMemoryContextMessages } from './observation-turn/load-memory-context';\nimport type { ObservationalMemory } from './observational-memory';\nimport { isOmReproCaptureEnabled, safeCaptureJson, writeProcessInputStepReproCapture } from './repro-capture';\nimport { insertTemporalGapMarkers } from './temporal-markers';\nimport type { TokenCounterModelContext } from './token-counter';\n\n/** Subset of Memory that the processor needs — avoids circular imports. */\nexport interface MemoryContextProvider {\n  getContext(opts: { threadId: string; resourceId?: string }): Promise<{\n    systemMessage: string | undefined;\n    messages: MastraDBMessage[];\n    hasObservations: boolean;\n    omRecord: ObservationalMemoryRecord | null;\n    continuationMessage: MastraDBMessage | undefined;\n    otherThreadsContext: string | undefined;\n  }>;\n  /** Raw message upsert — persist sealed messages to storage without embedding or working memory processing. */\n  persistMessages(messages: MastraDBMessage[]): Promise<void>;\n}\n\n/**\n * Processor adapter for ObservationalMemory.\n *\n * This class owns the agent-lifecycle orchestration — it decides *when* to\n * load history, check thresholds, trigger observation/reflection, inject\n * observations into context, and save messages. The actual OM operations\n * are delegated to the Turn/Step handles which compose OM primitives.\n *\n * Processor-specific concerns (repro capture, progress emission, token\n * persistence, continuation message) stay here — they're not part of the\n * Turn/Step abstraction.\n */\nfunction getOmObservabilityContext(\n  args: ProcessInputStepArgs | ProcessOutputResultArgs,\n): ObservabilityContext | undefined {\n  if (!args.tracing || !args.tracingContext || !args.loggerVNext || !args.metrics) {\n    return undefined;\n  }\n\n  return {\n    tracing: args.tracing,\n    tracingContext: args.tracingContext,\n    loggerVNext: args.loggerVNext,\n    metrics: args.metrics,\n  };\n}\n\n/** Key used to store gateway detection result in per-processor state. */\nconst GATEWAY_STATE_KEY = '__isGatewayModel';\n\n/** Check if the model is routed through a Mastra gateway (duck-type check to avoid cross-package instanceof issues). */\nfunction isMastraGatewayModel(model: ProcessInputStepArgs['model']): boolean {\n  return typeof model === 'object' && model !== null && 'gatewayId' in model && (model as any).gatewayId === 'mastra';\n}\n\nfunction injectObservationContextMessages({\n  messageList,\n  systemMessages,\n  continuationMessage,\n  threadId,\n  resourceId,\n}: {\n  messageList: MessageList;\n  systemMessages: string[] | undefined;\n  continuationMessage: MastraDBMessage | undefined;\n  threadId: string;\n  resourceId?: string;\n}): void {\n  if (!systemMessages?.length) {\n    return;\n  }\n\n  messageList.clearSystemMessages('observational-memory');\n  for (const msg of systemMessages) {\n    messageList.addSystem(msg, 'observational-memory');\n  }\n\n  const contMsg = continuationMessage ?? {\n    id: 'om-continuation',\n    role: 'user' as const,\n    createdAt: new Date(0),\n    content: {\n      format: 2 as const,\n      parts: [{ type: 'text' as const, text: `<system-reminder>${OBSERVATION_CONTINUATION_HINT}</system-reminder>` }],\n    },\n    threadId,\n    resourceId,\n  };\n  messageList.add(contMsg, 'memory');\n}\n\nexport class ObservationalMemoryProcessor implements Processor<'observational-memory'> {\n  readonly id = 'observational-memory' as const;\n  readonly name = 'Observational Memory';\n\n  /** The underlying ObservationalMemory engine. */\n  readonly engine: ObservationalMemory;\n\n  /** Memory instance for loading context. */\n  private readonly memory: MemoryContextProvider;\n\n  /** Whether temporal-gap reminder markers should be inserted. */\n  private readonly temporalMarkers: boolean;\n\n  /** Active turn — created on first processInputStep, ended on processOutputResult. */\n  private turn?: ObservationTurn;\n\n  constructor(engine: ObservationalMemory, memory: MemoryContextProvider, options?: { temporalMarkers?: boolean }) {\n    this.engine = engine;\n    this.memory = memory;\n    this.temporalMarkers = options?.temporalMarkers ?? false;\n  }\n\n  // ─── Processor lifecycle hooks ──────────────────────────────────────────\n\n  async processInputStep(args: ProcessInputStepArgs): Promise<MessageList | MastraDBMessage[]> {\n    const {\n      messageList,\n      requestContext,\n      stepNumber,\n      state: _state,\n      writer,\n      model,\n      abortSignal,\n      abort,\n      rotateResponseMessageId,\n    } = args;\n    const state = _state ?? ({} as Record<string, unknown>);\n\n    omDebug(\n      `[OM:processInputStep:ENTER] step=${stepNumber}, hasMastraMemory=${!!requestContext?.get('MastraMemory')}, hasMemoryInfo=${!!messageList?.serialize()?.memoryInfo?.threadId}`,\n    );\n\n    const context = this.engine.getThreadContext(requestContext, messageList);\n    if (!context) {\n      omDebug(`[OM:processInputStep:NO-CONTEXT] getThreadContext returned null — returning early`);\n      return messageList;\n    }\n\n    // When the agent is using a Mastra gateway model, the gateway handles OM\n    // (observation, reflection, context injection) server-side. Running it\n    // locally would double-process messages and cause history duplication.\n    // We detect this from the model directly (not requestContext) so that\n    // the flag doesn't leak to child agents in delegation scenarios.\n    if (isMastraGatewayModel(model)) {\n      state[GATEWAY_STATE_KEY] = true;\n      omDebug(`[OM:processInputStep:GATEWAY] gateway handles OM — skipping local processing`);\n      return messageList;\n    }\n\n    const { threadId, resourceId } = context;\n    const memoryContext = parseMemoryRequestContext(requestContext);\n    const readOnly = memoryContext?.memoryConfig?.readOnly;\n\n    const actorModelContext = model?.modelId\n      ? { provider: model.provider, modelId: model.modelId, providerOptions: args.providerOptions }\n      : undefined;\n    state.__omActorModelContext = actorModelContext;\n\n    return this.engine.getTokenCounter().runWithModelContext(actorModelContext, async () => {\n      // Repro capture setup\n      const reproCaptureEnabled = isOmReproCaptureEnabled();\n      const preRecordSnapshot = reproCaptureEnabled\n        ? (safeCaptureJson(await this.engine.getOrCreateRecord(threadId, resourceId)) as ObservationalMemoryRecord)\n        : null;\n      const preMessagesSnapshot = reproCaptureEnabled\n        ? (safeCaptureJson(messageList.get.all.db()) as MastraDBMessage[])\n        : null;\n      const preSerializedMessageList = reproCaptureEnabled\n        ? (safeCaptureJson(messageList.serialize()) as ReturnType<MessageList['serialize']>)\n        : null;\n\n      // ── Read-only path: load existing context, skip observation lifecycle ──\n      if (readOnly) {\n        const ctx = await loadMemoryContextMessages({\n          memory: this.memory,\n          messageList,\n          threadId,\n          resourceId,\n        });\n        const systemMessages =\n          ctx.hasObservations && ctx.omRecord\n            ? await this.engine.buildContextSystemMessages({\n                threadId,\n                resourceId,\n                record: ctx.omRecord,\n                unobservedContextBlocks: ctx.otherThreadsContext,\n              })\n            : undefined;\n\n        injectObservationContextMessages({\n          messageList,\n          systemMessages,\n          continuationMessage: ctx.continuationMessage,\n          threadId,\n          resourceId,\n        });\n\n        return messageList;\n      }\n\n      // ── Create turn on first step (or when state is reset) ──\n      // The turn is stashed in customState so that the output processor instance\n      // (which is a separate ObservationalMemoryProcessor) can retrieve it in\n      // processOutputResult. In production, getInputProcessors() and\n      // getOutputProcessors() each call createOMProcessor(), producing two\n      // different instances that share only the processorStates map.\n      const activeTurn = (state.__omTurn as ObservationTurn | undefined) ?? this.turn;\n      if (activeTurn && activeTurn.messageList !== messageList) {\n        // Durable runs may deserialize a fresh MessageList between loop iterations. End the\n        // old turn first so any messages tracked on that list are flushed before OM moves on.\n        await activeTurn.end().catch(() => {});\n        if (this.turn === activeTurn) {\n          this.turn = undefined;\n        }\n        state.__omTurn = undefined;\n      }\n\n      if (!this.turn || !state.__omTurn) {\n        // End previous turn if state was reset mid-flow\n        if (this.turn && !state.__omTurn) {\n          await this.turn.end().catch(() => {});\n        }\n        this.turn = this.engine.beginTurn({\n          threadId,\n          resourceId,\n          messageList,\n          agent: args.agent,\n          observabilityContext: getOmObservabilityContext(args),\n          hooks: {\n            onBufferChunkSealed: rotateResponseMessageId,\n            onSyncObservationComplete: rotateResponseMessageId,\n          },\n        });\n        this.turn.writer = writer;\n        this.turn.sendSignal = args.sendSignal;\n        this.turn.agent = args.agent;\n        this.turn.requestContext = requestContext;\n        await this.turn.start(this.memory);\n        if (stepNumber === 0 && this.temporalMarkers) {\n          await insertTemporalGapMarkers({ messageList, sendSignal: args.sendSignal });\n        }\n        state.__omTurn = this.turn;\n      }\n\n      this.turn.addHooks({\n        onBufferChunkSealed: rotateResponseMessageId,\n        onSyncObservationComplete: rotateResponseMessageId,\n      });\n\n      const observabilityContext = getOmObservabilityContext(args);\n      state.__omObservabilityContext = observabilityContext;\n      this.turn.observabilityContext = observabilityContext;\n      this.turn.actorModelContext = actorModelContext;\n\n      // ── Run step preparation (activation, threshold, observation, filtering) ──\n      {\n        const step = this.turn.step(stepNumber);\n        let ctx;\n        try {\n          ctx = await step.prepare();\n        } catch (error) {\n          // Map observation errors through abort (processor-specific concern)\n          const err = error instanceof Error ? error : new Error(String(error));\n          const abortMessage = abortSignal?.aborted\n            ? 'Agent execution was aborted'\n            : `Encountered error during memory observation: ${err.message}`;\n          if (typeof abort === 'function') {\n            abort(abortMessage);\n          }\n          throw err;\n        }\n\n        // Inject system messages (one per cache-stable chunk) + continuation\n        injectObservationContextMessages({\n          messageList,\n          systemMessages: ctx.systemMessage,\n          continuationMessage: this.turn.context.continuation,\n          threadId,\n          resourceId,\n        });\n\n        // ── Progress emission (processor-specific) ──────────\n        // Fetch a fresh record from storage so buffering flags (e.g.\n        // isBufferingObservation set by fire-and-forget buffer()) are visible.\n        // The cached this.turn.record is stale in production DBs where each\n        // query returns a new row object.\n        const freshRecord = await this.engine.getOrCreateRecord(threadId, resourceId);\n        await this.engine.emitProgress({\n          record: freshRecord,\n          stepNumber,\n          pendingTokens: ctx.status.pendingTokens,\n          threshold: ctx.status.threshold,\n          effectiveObservationTokensThreshold: ctx.status.effectiveObservationTokensThreshold,\n          currentObservationTokens: freshRecord.observationTokenCount ?? 0,\n          writer,\n          threadId,\n          resourceId,\n        });\n\n        // ── Token persistence (processor-specific) ──────────\n        const allDbMsgs = messageList.get.all.db();\n        const tokenCounter = this.engine.getTokenCounter();\n        const contextTokens = await tokenCounter.countMessagesAsync(allDbMsgs);\n        const otherThreadsContext = this.turn.context.otherThreadsContext;\n        const otherThreadTokens = otherThreadsContext ? tokenCounter.countString(otherThreadsContext) : 0;\n        const finalTotalPending = contextTokens + otherThreadTokens;\n\n        await this.engine\n          .getStorage()\n          .setPendingMessageTokens(freshRecord.id, finalTotalPending)\n          .catch(() => {});\n\n        // ── Repro capture (processor-specific) ──────────────\n        if (reproCaptureEnabled) {\n          writeProcessInputStepReproCapture({\n            threadId,\n            resourceId,\n            stepNumber,\n            args,\n            preRecord: preRecordSnapshot!,\n            postRecord: safeCaptureJson(freshRecord) as ObservationalMemoryRecord,\n            preMessages: preMessagesSnapshot!,\n            preBufferedChunks: [],\n            preContextTokenCount: 0,\n            preSerializedMessageList: preSerializedMessageList!,\n            postBufferedChunks: [],\n            postContextTokenCount: finalTotalPending,\n            messageList,\n            details: {},\n            observerExchange: ctx.observerExchange,\n          });\n        }\n      }\n\n      return messageList;\n    });\n  }\n\n  async processOutputResult(args: ProcessOutputResultArgs): Promise<MessageList | MastraDBMessage[]> {\n    const { messageList, requestContext, state: _state } = args;\n    const state = _state ?? ({} as Record<string, unknown>);\n\n    const context = this.engine.getThreadContext(requestContext, messageList);\n    if (!context) return messageList;\n\n    // Gateway handles OM — skip local output processing (see processInputStep).\n    if (state[GATEWAY_STATE_KEY]) return messageList;\n\n    const observabilityContext = getOmObservabilityContext(args);\n    state.__omObservabilityContext = observabilityContext;\n\n    return this.engine\n      .getTokenCounter()\n      .runWithModelContext(state.__omActorModelContext as TokenCounterModelContext | undefined, async () => {\n        const memoryContext = parseMemoryRequestContext(requestContext);\n        if (memoryContext?.memoryConfig?.readOnly) return messageList;\n\n        // Retrieve the turn from shared processor state — in production, the input\n        // and output processors are separate instances (see comment in processInputStep).\n        const turn = (state.__omTurn as ObservationTurn | undefined) ?? this.turn;\n        if (turn) {\n          await turn.end();\n          this.turn = undefined;\n          state.__omTurn = undefined;\n        } else {\n          // No turn exists — this happens during a resumed stream where input processors\n          // were skipped (isResume=true), so processInputStep never created a turn.\n          // Directly persist any new response messages so the final assistant text\n          // from the resumed turn is not lost.\n          const newOutput = messageList.get.response.db();\n          const newInput = messageList.get.input.db();\n          const messagesToSave = [...newInput, ...newOutput];\n          if (messagesToSave.length > 0 && context.threadId) {\n            await this.engine.persistMessages(messagesToSave, context.threadId, context.resourceId);\n          }\n        }\n\n        return messageList;\n      });\n  }\n\n  // ─── Passthrough API ────────────────────────────────────────────────────\n\n  get config() {\n    return this.engine.config;\n  }\n\n  async waitForBuffering(\n    threadId: string | null | undefined,\n    resourceId: string | null | undefined,\n    timeoutMs?: number,\n  ) {\n    return this.engine.waitForBuffering(threadId, resourceId, timeoutMs);\n  }\n\n  async getResolvedConfig(requestContext?: any) {\n    return this.engine.getResolvedConfig(requestContext);\n  }\n}\n","// Regex that captures the ISO 8601 date from each message boundary delimiter\nconst BOUNDARY_WITH_DATE_RE =\n  /\\n{2,}--- message boundary \\((\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(?:\\.\\d+)?Z)\\) ---\\n{2,}/;\n\n/**\n * Given a raw `activeObservations` string (from an `ObservationalMemoryRecord`),\n * return only the observation text that would have been visible at `asOf`.\n *\n * Each chunk boundary contains the `lastObservedAt` timestamp of the messages\n * that were observed to produce the chunk that follows it. A chunk is included\n * when its boundary date is ≤ `asOf` (meaning those observations existed before\n * or at the target moment). The very first chunk has no preceding boundary and\n * is always included.\n *\n * @param activeObservations - The full `activeObservations` string from the OM record\n * @param asOf - The point in time to query (e.g. a message's `createdAt`)\n * @returns The filtered observations string, or an empty string if none match\n */\nexport function getObservationsAsOf(activeObservations: string, asOf: Date): string {\n  const trimmed = activeObservations.trim();\n  if (!trimmed) return '';\n\n  // Split while keeping the delimiter (with captured date) interleaved\n  const parts = trimmed.split(BOUNDARY_WITH_DATE_RE);\n\n  // parts is: [chunk0, date1, chunk1, date2, chunk2, ...]\n  // chunk0 has no boundary date — always included\n  const chunks: string[] = [];\n  const firstChunk = parts[0]?.trim();\n  if (firstChunk) {\n    chunks.push(firstChunk);\n  }\n\n  for (let i = 1; i < parts.length; i += 2) {\n    const dateStr = parts[i]!;\n    const chunk = parts[i + 1]?.trim();\n    if (!chunk) continue;\n\n    const boundaryDate = new Date(dateStr);\n    if (isNaN(boundaryDate.getTime())) continue;\n\n    if (boundaryDate <= asOf) {\n      chunks.push(chunk);\n    }\n  }\n\n  return chunks.join('\\n\\n');\n}\n"]}