@mastra/core 1.11.0-alpha.1 → 1.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/CHANGELOG.md +336 -0
  2. package/dist/agent/index.cjs +13 -13
  3. package/dist/agent/index.js +2 -2
  4. package/dist/agent/message-list/conversion/output-converter.d.ts.map +1 -1
  5. package/dist/agent/message-list/index.cjs +18 -18
  6. package/dist/agent/message-list/index.js +1 -1
  7. package/dist/{chunk-2CSKXHM7.cjs → chunk-6NZQ52RZ.cjs} +22 -10
  8. package/dist/chunk-6NZQ52RZ.cjs.map +1 -0
  9. package/dist/{chunk-7P77FWM6.js → chunk-7FVJIJGY.js} +3 -3
  10. package/dist/{chunk-7P77FWM6.js.map → chunk-7FVJIJGY.js.map} +1 -1
  11. package/dist/{chunk-MIAFERSL.js → chunk-7UM6FE6A.js} +8 -2
  12. package/dist/chunk-7UM6FE6A.js.map +1 -0
  13. package/dist/{chunk-CDXZJ3PO.cjs → chunk-E7PW4ZAB.cjs} +8 -2
  14. package/dist/chunk-E7PW4ZAB.cjs.map +1 -0
  15. package/dist/{chunk-L7NBGABG.cjs → chunk-FIQRYC7M.cjs} +4 -4
  16. package/dist/{chunk-L7NBGABG.cjs.map → chunk-FIQRYC7M.cjs.map} +1 -1
  17. package/dist/{chunk-V5SM5A4F.cjs → chunk-FN6ZOGJ7.cjs} +6 -6
  18. package/dist/{chunk-V5SM5A4F.cjs.map → chunk-FN6ZOGJ7.cjs.map} +1 -1
  19. package/dist/{chunk-RH5O4YBE.cjs → chunk-NJVIJQ4R.cjs} +3 -3
  20. package/dist/{chunk-RH5O4YBE.cjs.map → chunk-NJVIJQ4R.cjs.map} +1 -1
  21. package/dist/{chunk-PUTCRAH6.cjs → chunk-QAIBZ7GH.cjs} +235 -230
  22. package/dist/{chunk-PUTCRAH6.cjs.map → chunk-QAIBZ7GH.cjs.map} +1 -1
  23. package/dist/{chunk-JNNKF6W5.cjs → chunk-QGT2HJGX.cjs} +24 -24
  24. package/dist/{chunk-JNNKF6W5.cjs.map → chunk-QGT2HJGX.cjs.map} +1 -1
  25. package/dist/{chunk-J4V2WVFG.js → chunk-RF2EPUM4.js} +3 -3
  26. package/dist/{chunk-J4V2WVFG.js.map → chunk-RF2EPUM4.js.map} +1 -1
  27. package/dist/{chunk-C574TBOV.js → chunk-S5BMBKUR.js} +20 -15
  28. package/dist/{chunk-C574TBOV.js.map → chunk-S5BMBKUR.js.map} +1 -1
  29. package/dist/{chunk-XWMBFPD5.js → chunk-VW4MYD6N.js} +3 -3
  30. package/dist/{chunk-XWMBFPD5.js.map → chunk-VW4MYD6N.js.map} +1 -1
  31. package/dist/{chunk-WLS37KH3.js → chunk-W3LSSG4T.js} +3 -3
  32. package/dist/{chunk-WLS37KH3.js.map → chunk-W3LSSG4T.js.map} +1 -1
  33. package/dist/{chunk-GQRY6HEY.js → chunk-WD467XGW.js} +22 -10
  34. package/dist/chunk-WD467XGW.js.map +1 -0
  35. package/dist/{chunk-QYYWWS3U.cjs → chunk-YTND5227.cjs} +2 -2
  36. package/dist/chunk-YTND5227.cjs.map +1 -0
  37. package/dist/{chunk-5FNG2ISL.js → chunk-YY3T5AJK.js} +2 -2
  38. package/dist/chunk-YY3T5AJK.js.map +1 -0
  39. package/dist/datasets/index.cjs +16 -16
  40. package/dist/datasets/index.js +1 -1
  41. package/dist/docs/SKILL.md +1 -1
  42. package/dist/docs/assets/SOURCE_MAP.json +320 -320
  43. package/dist/docs/references/reference-observability-tracing-interfaces.md +3 -0
  44. package/dist/evals/index.cjs +19 -19
  45. package/dist/evals/index.js +2 -2
  46. package/dist/evals/scoreTraces/index.cjs +7 -7
  47. package/dist/evals/scoreTraces/index.js +3 -3
  48. package/dist/harness/index.cjs +16 -16
  49. package/dist/harness/index.js +6 -6
  50. package/dist/index.cjs +2 -2
  51. package/dist/index.js +1 -1
  52. package/dist/integration/index.cjs +2 -2
  53. package/dist/integration/index.js +1 -1
  54. package/dist/llm/index.cjs +12 -12
  55. package/dist/llm/index.js +3 -3
  56. package/dist/loop/index.cjs +14 -14
  57. package/dist/loop/index.js +1 -1
  58. package/dist/mastra/index.cjs +2 -2
  59. package/dist/mastra/index.js +1 -1
  60. package/dist/memory/index.cjs +14 -14
  61. package/dist/memory/index.js +1 -1
  62. package/dist/netlify-BFMLDQM5.js +3 -0
  63. package/dist/{netlify-QDVWIV7X.js.map → netlify-BFMLDQM5.js.map} +1 -1
  64. package/dist/netlify-RN36CL4F.cjs +12 -0
  65. package/dist/{netlify-OZA4BKIK.cjs.map → netlify-RN36CL4F.cjs.map} +1 -1
  66. package/dist/observability/index.cjs +17 -17
  67. package/dist/observability/index.js +1 -1
  68. package/dist/observability/types/tracing.d.ts +2 -0
  69. package/dist/observability/types/tracing.d.ts.map +1 -1
  70. package/dist/processor-provider/index.cjs +10 -10
  71. package/dist/processor-provider/index.js +1 -1
  72. package/dist/processors/index.cjs +42 -42
  73. package/dist/processors/index.js +1 -1
  74. package/dist/provider-registry-6FITK73S.js +3 -0
  75. package/dist/{provider-registry-L3ZZWLYW.js.map → provider-registry-6FITK73S.js.map} +1 -1
  76. package/dist/provider-registry-IHJW2WNI.cjs +40 -0
  77. package/dist/{provider-registry-TLYLLTKR.cjs.map → provider-registry-IHJW2WNI.cjs.map} +1 -1
  78. package/dist/relevance/index.cjs +3 -3
  79. package/dist/relevance/index.js +1 -1
  80. package/dist/storage/constants.cjs +56 -56
  81. package/dist/storage/constants.js +1 -1
  82. package/dist/storage/index.cjs +172 -172
  83. package/dist/storage/index.js +2 -2
  84. package/dist/stream/index.cjs +11 -11
  85. package/dist/stream/index.js +2 -2
  86. package/dist/test-utils/llm-mock.cjs +12 -12
  87. package/dist/test-utils/llm-mock.js +3 -3
  88. package/dist/tool-loop-agent/index.cjs +4 -4
  89. package/dist/tool-loop-agent/index.js +1 -1
  90. package/dist/tools/index.cjs +6 -6
  91. package/dist/tools/index.js +1 -1
  92. package/dist/tools/is-vercel-tool.cjs +2 -2
  93. package/dist/tools/is-vercel-tool.js +1 -1
  94. package/dist/tools/tool-builder/builder.d.ts.map +1 -1
  95. package/dist/tools/tool.d.ts +6 -1
  96. package/dist/tools/tool.d.ts.map +1 -1
  97. package/dist/tools/types.d.ts +15 -0
  98. package/dist/tools/types.d.ts.map +1 -1
  99. package/dist/utils.cjs +23 -23
  100. package/dist/utils.js +1 -1
  101. package/dist/vector/index.cjs +9 -9
  102. package/dist/vector/index.js +2 -2
  103. package/dist/workflows/evented/index.cjs +10 -10
  104. package/dist/workflows/evented/index.js +1 -1
  105. package/dist/workflows/index.cjs +24 -24
  106. package/dist/workflows/index.js +1 -1
  107. package/dist/workspace/index.cjs +67 -67
  108. package/dist/workspace/index.js +1 -1
  109. package/package.json +10 -10
  110. package/dist/chunk-2CSKXHM7.cjs.map +0 -1
  111. package/dist/chunk-5FNG2ISL.js.map +0 -1
  112. package/dist/chunk-CDXZJ3PO.cjs.map +0 -1
  113. package/dist/chunk-GQRY6HEY.js.map +0 -1
  114. package/dist/chunk-MIAFERSL.js.map +0 -1
  115. package/dist/chunk-QYYWWS3U.cjs.map +0 -1
  116. package/dist/netlify-OZA4BKIK.cjs +0 -12
  117. package/dist/netlify-QDVWIV7X.js +0 -3
  118. package/dist/provider-registry-L3ZZWLYW.js +0 -3
  119. package/dist/provider-registry-TLYLLTKR.cjs +0 -40
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/agent/message-list/detection/TypeDetector.ts","../src/agent/message-list/prompt/data-content.ts","../src/agent/message-list/prompt/image-utils.ts","../src/agent/message-list/utils/provider-compat.ts","../src/agent/message-list/adapters/AIV4Adapter.ts","../src/agent/message-list/utils/tool-name.ts","../src/agent/message-list/adapters/AIV5Adapter.ts","../src/agent/message-list/cache/CacheKeyGenerator.ts","../src/agent/message-list/conversion/to-prompt.ts","../src/agent/message-list/conversion/utils.ts","../src/agent/message-list/conversion/input-converter.ts","../../../node_modules/.pnpm/secure-json-parse@2.7.0/node_modules/secure-json-parse/index.js","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/ai-sdk-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/api-call-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/get-error-message.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/invalid-argument-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/invalid-prompt-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/json-parse-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/type-validation-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/errors/unsupported-functionality-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider@1.1.3/node_modules/@ai-sdk/provider/src/json-value/is-json.ts","../../../node_modules/.pnpm/nanoid@3.3.11/node_modules/nanoid/non-secure/index.js","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/parse-json.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/convert-async-iterator-to-readable-stream.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/delay.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/generate-id.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/get-error-message.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/is-abort-error.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/validator.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/validate-types.ts","../../../node_modules/.pnpm/@ai-sdk+provider-utils@2.2.8_zod@3.25.76/node_modules/@ai-sdk/provider-utils/src/uint8-utils.ts","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Options.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/Refs.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/errorMessages.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/getRelativePath.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/any.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/array.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/bigint.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/boolean.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/branded.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/catch.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/date.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/default.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/effects.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/enum.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/intersection.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/literal.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/string.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/record.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/map.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nativeEnum.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/never.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/null.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/union.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/nullable.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/number.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/object.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/optional.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/pipeline.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/promise.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/set.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/tuple.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/undefined.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/unknown.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parsers/readonly.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/selectParser.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/parseDef.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/zodToJsonSchema.js","../../../node_modules/.pnpm/zod-to-json-schema@3.25.1_zod@3.25.76/node_modules/zod-to-json-schema/dist/esm/index.js","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/fix-json.ts","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/parse-partial-json.ts","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/data-stream-parts.ts","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/is-deep-equal-data.ts","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/zod-schema.ts","../../../node_modules/.pnpm/@ai-sdk+ui-utils@1.2.11_zod@3.25.76/node_modules/@ai-sdk/ui-utils/src/schema.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/platform/node/globalThis.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/version.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/semver.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/internal/global-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/ComponentLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/types.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/diag/internal/logLevelLogger.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/diag.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/context/NoopContextManager.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/context.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/trace_flags.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/invalid-span-constants.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NonRecordingSpan.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/context-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/spancontext-utils.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracer.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/NoopTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/ProxyTracerProvider.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace/status.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/api/trace.ts","../../../node_modules/.pnpm/@opentelemetry+api@1.9.0/node_modules/@opentelemetry/api/src/trace-api.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/prepare-response-headers.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/prepare-outgoing-http-headers.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/write-to-server-response.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/errors/unsupported-model-version-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/errors/invalid-argument-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/util/retry-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/util/retry-with-exponential-backoff.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/prepare-retries.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/telemetry/assemble-operation-name.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/telemetry/get-base-telemetry-attributes.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/telemetry/noop-tracer.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/telemetry/get-tracer.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/telemetry/record-span.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/telemetry/select-telemetry-attributes.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/embed/embed.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-text/generated-file.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/detect-mimetype.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/errors/no-object-generated-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/util/download-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/util/download.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/invalid-data-content-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/data-content.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/invalid-message-role-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/split-data-url.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/convert-to-language-model-prompt.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/prepare-call-settings.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/attachments-to-parts.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/message-conversion-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/convert-to-core-messages.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/types/json-value.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/types/provider-metadata.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/tool-result-content.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/content-part.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/message.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/standardize-prompt.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/types/usage.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-object/inject-json-instruction.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/async-iterable-stream.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-object/output-strategy.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-object/validate-object-generation-input.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/stringify-for-telemetry.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-object/generate-object.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/util/delayed-promise.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/util/create-resolvable-promise.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/create-stitchable-stream.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/now.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-object/stream-object.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/errors/no-output-specified-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/errors/tool-execution-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/is-non-empty-object.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/prompt/prepare-tools-and-tool-choice.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/split-on-last-whitespace.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/remove-text-after-last-whitespace.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/errors/invalid-tool-arguments-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/errors/no-such-tool-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/errors/tool-call-repair-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-text/parse-tool-call.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-text/reasoning-detail.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-text/to-response-messages.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-text/generate-text.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-text/output.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/errors/invalid-stream-part-error.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/util/as-array.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/util/consume-stream.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/merge-streams.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-text/run-tools-transformation.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/generate-text/stream-text.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/tool/mcp/types.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/tool/mcp/json-rpc-message.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/core/util/simulate-readable-stream.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/streams/langchain-adapter.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/streams/stream-callbacks.ts","../../../node_modules/.pnpm/ai@4.3.19_react@19.2.4_zod@3.25.76/node_modules/ai/streams/llamaindex-adapter.ts","../src/agent/message-list/conversion/output-converter.ts","../src/stream/aisdk/v5/file.ts","../src/agent/message-list/conversion/step-content.ts","../src/agent/message-list/merge/MessageMerger.ts","../src/stream/aisdk/v5/compat/content.ts","../src/stream/aisdk/v5/compat/media.ts","../src/agent/message-list/prompt/convert-file.ts","../src/agent/message-list/prompt/attachments-to-parts.ts","../src/agent/message-list/prompt/convert-to-mastra-v1.ts","../src/utils/fetchWithRetry.ts","../src/agent/message-list/prompt/download-assets.ts","../src/agent/message-list/state/serialization.ts","../src/agent/message-list/state/MessageStateManager.ts","../src/agent/message-list/message-list.ts","../src/agent/message-list/utils/convert-messages.ts"],"names":["convertUint8ArrayToBase64","uiMessage","MastraError","filterEmptyTextParts","text","isToolUIPart","toolResultPart","matchingCall","exports","_AISDKError","name","marker","symbol","_a","_TypeValidationError","resolve","getErrorMessage","zodSchema","validator","SecureJSON","ZodFirstPartyTypeKind","object","types","x","base","jsonSchema","schema","textStreamPart","errorStreamPart","isCompatible","DiagComponentLogger","DiagLogLevel","DiagAPI","__spreadArray","__read","BaseContext","NoopContextManager","API_NAME","ContextAPI","TraceFlags","NonRecordingSpan","NoopTracer","ProxyTracer","NoopTracerProvider","ProxyTracerProvider","SpanStatusCode","TraceAPI","InvalidArgumentError","AISDKError","attributes","embedding","usage","convertBase64ToUint8Array","z","convertDataContentToBase64String","processBlock","content","tool","i","safeValidateTypes","generateId","span","_b","_c","_d","result","TypeValidationError","originalGenerateId","createIdGenerator","now","doStreamSpan","error","asSchema","safeParseJSON","_e","_f","parsePartialJson","originalGenerateMessageId","stepType","stream","stepReasoning","stepFiles","activeReasoningText","formatDataStreamPart","delay","mergeIntoDataStream","toDataStream","toDataStreamResponse","toDataStreamInternal","convertToModelMessages","DefaultGeneratedFile","DefaultGeneratedFileWithType","stepParts","splitDataUrl","stripID3","stripID3TagsIfPresent","attachmentsToParts","toolInvocations","isUrlSupported","randomUUID"],"mappings":"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","file":"chunk-6NZQ52RZ.cjs","sourcesContent":["import type { Message as AIV4Message, UIMessage as UIMessageV4 } from '@internal/ai-sdk-v4';\n\nimport type { MastraDBMessage, MastraMessageV1 } from '../state/types';\nimport type { AIV5Type, CoreMessageV4 } from '../types';\n\n/**\n * Type representing all possible message input formats\n */\nexport type MessageInput =\n | AIV5Type.UIMessage\n | AIV5Type.ModelMessage\n | (UIMessageV4 & { metadata?: Record<string, unknown> })\n | AIV4Message\n | CoreMessageV4\n | MastraMessageV1\n | MastraDBMessage;\n\n/**\n * TypeDetector - Centralized type detection for different message formats\n *\n * This class provides consistent type detection across all message formats,\n * which is critical for:\n * - Determining which conversion path to use\n * - Validating incoming message formats\n * - Providing better TypeScript type narrowing\n *\n * The detection order is important because some formats share similar properties.\n */\nexport class TypeDetector {\n /**\n * Check if a message is a MastraDBMessage (format 2)\n */\n static isMastraDBMessage(msg: MessageInput): msg is MastraDBMessage {\n return Boolean(\n 'content' in msg &&\n msg.content &&\n !Array.isArray(msg.content) &&\n typeof msg.content !== 'string' &&\n 'format' in msg.content &&\n msg.content.format === 2,\n );\n }\n\n /**\n * Check if a message is a MastraMessageV1 (legacy format)\n */\n static isMastraMessageV1(msg: MessageInput): msg is MastraMessageV1 {\n return !TypeDetector.isMastraDBMessage(msg) && ('threadId' in msg || 'resourceId' in msg);\n }\n\n /**\n * Check if a message is either Mastra format (V1 or V2/DB)\n */\n static isMastraMessage(msg: MessageInput): msg is MastraDBMessage | MastraMessageV1 {\n return TypeDetector.isMastraDBMessage(msg) || TypeDetector.isMastraMessageV1(msg);\n }\n\n /**\n * Check if a message is an AIV4 UIMessage\n */\n static isAIV4UIMessage(msg: MessageInput): msg is UIMessageV4 {\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !TypeDetector.isAIV4CoreMessage(msg) &&\n 'parts' in msg &&\n !TypeDetector.hasAIV5UIMessageCharacteristics(msg)\n );\n }\n\n /**\n * Check if a message is an AIV5 UIMessage\n */\n static isAIV5UIMessage(msg: MessageInput): msg is AIV5Type.UIMessage {\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !TypeDetector.isAIV5CoreMessage(msg) &&\n 'parts' in msg &&\n TypeDetector.hasAIV5UIMessageCharacteristics(msg)\n );\n }\n\n /**\n * Check if a message is an AIV4 CoreMessage\n */\n static isAIV4CoreMessage(msg: MessageInput): msg is CoreMessageV4 {\n // V4 CoreMessage has role and content like V5, but content can be array of parts\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !('parts' in msg) &&\n 'content' in msg &&\n !TypeDetector.hasAIV5CoreMessageCharacteristics(msg)\n );\n }\n\n /**\n * Check if a message is an AIV5 ModelMessage (CoreMessage equivalent)\n */\n static isAIV5CoreMessage(msg: MessageInput): msg is AIV5Type.ModelMessage {\n return (\n !TypeDetector.isMastraMessage(msg) &&\n !('parts' in msg) &&\n 'content' in msg &&\n TypeDetector.hasAIV5CoreMessageCharacteristics(msg)\n );\n }\n\n /**\n * Check if a message has AIV5 UIMessage characteristics\n *\n * V5 UIMessages have specific part types and field names that differ from V4\n */\n static hasAIV5UIMessageCharacteristics(\n msg: AIV5Type.UIMessage | UIMessageV4 | AIV4Message,\n ): msg is AIV5Type.UIMessage {\n // ai v4 has these separated arrays of parts that don't record overall order\n // so we can check for their presence as a faster/early check\n if (\n 'toolInvocations' in msg ||\n 'reasoning' in msg ||\n 'experimental_attachments' in msg ||\n 'data' in msg ||\n 'annotations' in msg\n // don't check `content` in msg because it fully narrows the type to v5 and there's a chance someone might mess up and add content to a v5 message, that's more likely than the other keys\n )\n return false;\n\n if (!msg.parts) return false; // this is likely an AIV4Type.Message\n\n for (const part of msg.parts) {\n if ('metadata' in part) return true;\n\n // tools are annoying cause ai v5 has the type as\n // tool-${toolName}\n // in v4 we had tool-invocation\n // technically\n // v4 tool\n if ('toolInvocation' in part) return false;\n // v5 tool\n if ('toolCallId' in part) return true;\n\n if (part.type === 'source') return false;\n if (part.type === 'source-url') return true;\n\n if (part.type === 'reasoning') {\n if ('state' in part || 'text' in part) return true; // v5\n if ('reasoning' in part || 'details' in part) return false; // v4\n }\n\n if (part.type === 'file' && 'mediaType' in part) return true;\n }\n\n return false; // default to v4 for backwards compat\n }\n\n /**\n * Check if a message has AIV5 CoreMessage characteristics\n *\n * V5 ModelMessages use different field names (output vs result, input vs args, mediaType vs mimeType)\n */\n static hasAIV5CoreMessageCharacteristics(\n msg:\n | CoreMessageV4\n | AIV5Type.ModelMessage\n // This is here because AIV4 \"Message\" type can omit parts! 😱\n | AIV4Message,\n ): msg is AIV5Type.ModelMessage {\n if ('experimental_providerMetadata' in msg) return false; // is v4 cause v5 doesn't have this property\n\n // String content is identical in both v4 and v5, so we can safely treat it as v5-compatible\n // This doesn't misclassify v4 messages because the format is the same\n if (typeof msg.content === 'string') return true;\n\n for (const part of msg.content) {\n if (part.type === 'tool-result' && 'output' in part) return true; // v5 renamed result->output,\n if (part.type === 'tool-call' && 'input' in part) return true; // v5 renamed args->input\n if (part.type === 'tool-result' && 'result' in part) return false; // v5 renamed result->output,\n if (part.type === 'tool-call' && 'args' in part) return false; // v5 renamed args->input\n\n // for file and image\n if ('mediaType' in part) return true; // v5 renamed mimeType->mediaType\n if ('mimeType' in part) return false;\n\n // applies to multiple part types\n if ('experimental_providerMetadata' in part) return false; // was in v4 but deprecated for providerOptions, v4+5 have providerOptions though, can't check the other way\n\n if (part.type === 'reasoning' && 'signature' in part) return false; // v5 doesn't have signature, which is optional in v4\n\n if (part.type === 'redacted-reasoning') return false; // only in v4, seems like in v5 they add it to providerOptions or something?\n }\n\n // If no distinguishing features were found, the message format is identical in v4 and v5\n // We return true (v5-compatible) because the message can be used as-is with v5\n return true;\n }\n\n /**\n * Get the normalized role for a message\n * Maps 'tool' role to 'assistant' since tool messages are displayed as part of assistant conversation\n */\n static getRole(message: MessageInput): MastraDBMessage['role'] {\n if (message.role === 'assistant' || message.role === 'tool') return 'assistant';\n if (message.role === 'user') return 'user';\n if (message.role === 'system') return 'system';\n throw new Error(\n `BUG: add handling for message role ${message.role} in message ${JSON.stringify(message, null, 2)}`,\n );\n }\n}\n","import type { DataContent } from '@ai-sdk/provider-utils-v5';\nimport { convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils-v5';\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","import { convertDataContentToBase64String } from './data-content';\n\n/**\n * Image content can be a string (URL or data URI), a URL object, or binary data\n */\nexport type ImageContent = string | URL | Uint8Array | ArrayBuffer | Buffer;\n\n/**\n * Represents the parsed components of a data URI\n */\nexport interface DataUriParts {\n mimeType?: string;\n base64Content: string;\n isDataUri: boolean;\n}\n\n/**\n * Parses a data URI string into its components.\n * Format: data:[<mediatype>][;base64],<data>\n *\n * @param dataUri - The data URI string to parse\n * @returns Parsed components including MIME type and base64 content\n */\nexport function parseDataUri(dataUri: string): DataUriParts {\n if (!dataUri.startsWith('data:')) {\n return {\n isDataUri: false,\n base64Content: dataUri,\n };\n }\n\n const base64Index = dataUri.indexOf(',');\n if (base64Index === -1) {\n // Malformed data URI, return as-is\n return {\n isDataUri: true,\n base64Content: dataUri,\n };\n }\n\n const header = dataUri.substring(5, base64Index); // Skip 'data:' prefix\n const base64Content = dataUri.substring(base64Index + 1);\n\n // Extract MIME type from header (before ';base64' or ';')\n const semicolonIndex = header.indexOf(';');\n const mimeType = semicolonIndex !== -1 ? header.substring(0, semicolonIndex) : header;\n\n return {\n isDataUri: true,\n mimeType: mimeType || undefined,\n base64Content,\n };\n}\n\n/**\n * Creates a data URI from base64 content and MIME type.\n *\n * @param base64Content - The base64 encoded content\n * @param mimeType - The MIME type (defaults to 'application/octet-stream')\n * @returns A properly formatted data URI\n */\nexport function createDataUri(base64Content: string, mimeType: string = 'application/octet-stream'): string {\n // If it's already a data URI, return as-is\n if (base64Content.startsWith('data:')) {\n return base64Content;\n }\n return `data:${mimeType};base64,${base64Content}`;\n}\n\n/**\n * Converts various image data formats to a string representation.\n * - Strings are returned as-is (could be URLs or data URIs)\n * - URL objects are converted to strings\n * - Binary data (Uint8Array, ArrayBuffer, Buffer) is converted to base64\n *\n * @param image - The image data in various formats\n * @param fallbackMimeType - MIME type to use when creating data URIs from binary data\n * @returns String representation of the image (URL, data URI, or base64)\n */\nexport function imageContentToString(image: ImageContent, fallbackMimeType?: string): string {\n if (typeof image === 'string') {\n return image;\n }\n\n if (image instanceof URL) {\n return image.toString();\n }\n\n if (image instanceof Uint8Array || image instanceof ArrayBuffer || (globalThis.Buffer && Buffer.isBuffer(image))) {\n // Convert binary data to base64\n const base64 = convertDataContentToBase64String(image);\n // If it's not already a data URI, create one\n if (fallbackMimeType && !base64.startsWith('data:')) {\n return `data:${fallbackMimeType};base64,${base64}`;\n }\n return base64;\n }\n\n // Fallback for unknown types - try to convert to string\n return String(image);\n}\n\n/**\n * Converts various image data formats to a data URI string.\n *\n * @param image - The image data in various formats\n * @param mimeType - MIME type for the data URI (defaults to 'image/png')\n * @returns Data URI string\n */\nexport function imageContentToDataUri(image: ImageContent, mimeType: string = 'image/png'): string {\n const imageStr = imageContentToString(image, mimeType);\n\n // If it's already a data URI, return as-is\n if (imageStr.startsWith('data:')) {\n return imageStr;\n }\n\n // If it's an HTTP(S) URL, return as-is (can't convert to data URI)\n if (imageStr.startsWith('http://') || imageStr.startsWith('https://')) {\n return imageStr;\n }\n\n // Otherwise, assume it's base64 and create a data URI\n return `data:${mimeType};base64,${imageStr}`;\n}\n\n/**\n * Gets a stable cache key component for image content.\n * Used for generating hash keys for caching purposes.\n *\n * @param image - The image data in various formats\n * @returns A string or number suitable for cache key generation\n */\nexport function getImageCacheKey(image: ImageContent): string | number {\n if (image instanceof URL) {\n return image.toString();\n }\n\n if (typeof image === 'string') {\n return image.length;\n }\n\n if (image instanceof Uint8Array) {\n return image.byteLength;\n }\n\n if (image instanceof ArrayBuffer) {\n return image.byteLength;\n }\n\n return image;\n}\n\n/**\n * Checks if a string is a valid URL (including protocol-relative URLs).\n *\n * @param str - The string to check\n * @returns true if the string is a valid URL\n */\nexport function isValidUrl(str: string): boolean {\n try {\n new URL(str);\n return true;\n } catch {\n // Try as protocol-relative URL\n if (str.startsWith('//')) {\n try {\n new URL(`https:${str}`);\n return true;\n } catch {\n return false;\n }\n }\n return false;\n }\n}\n\n/**\n * Categorizes a string as a URL, data URI, or raw data (base64/other).\n * Also extracts MIME type from data URIs when present.\n *\n * @param data - The string data to categorize\n * @param fallbackMimeType - Optional fallback MIME type\n * @returns Categorized data with type and extracted MIME type\n */\nexport function categorizeFileData(\n data: string,\n fallbackMimeType?: string,\n): {\n type: 'url' | 'dataUri' | 'raw';\n mimeType?: string;\n data: string;\n} {\n // Parse as data URI first to extract MIME type\n const parsed = parseDataUri(data);\n const mimeType = parsed.isDataUri && parsed.mimeType ? parsed.mimeType : fallbackMimeType;\n\n // Check if it's a data URI\n if (parsed.isDataUri) {\n return {\n type: 'dataUri',\n mimeType,\n data,\n };\n }\n\n // Check if it's a URL\n if (isValidUrl(data)) {\n return {\n type: 'url',\n mimeType,\n data,\n };\n }\n\n // Otherwise it's raw data (likely base64 or other string data)\n return {\n type: 'raw',\n mimeType,\n data,\n };\n}\n\n/**\n * Classifies a string as a URL, data URI, or raw data.\n *\n * @param data - The string to classify\n * @returns Object with classification and extracted metadata\n */\nexport function classifyFileData(data: string): {\n type: 'url' | 'dataUri' | 'base64' | 'other';\n mimeType?: string;\n} {\n // Check if it's a data URI\n const parsed = parseDataUri(data);\n if (parsed.isDataUri) {\n return {\n type: 'dataUri',\n mimeType: parsed.mimeType,\n };\n }\n\n // Check if it's a URL\n if (isValidUrl(data)) {\n return { type: 'url' };\n }\n\n // Check if it looks like base64 (simple heuristic)\n if (/^[A-Za-z0-9+/\\-_]+=*$/.test(data) && data.length > 20) {\n return { type: 'base64' };\n }\n\n return { type: 'other' };\n}\n","import type { CoreMessage as CoreMessageV4 } from '@internal/ai-sdk-v4';\nimport type { ModelMessage, ToolResultPart } from '@internal/ai-sdk-v5';\n\nimport type { IMastraLogger } from '../../../logger';\nimport type { MastraDBMessage } from '../state/types';\n\n/**\n * Tool result with input field (Anthropic requirement)\n */\nexport type ToolResultWithInput = ToolResultPart & {\n input: Record<string, unknown>;\n};\n\n// ============================================================================\n// Gemini Compatibility\n// ============================================================================\n\n/**\n * Ensures message array is compatible with Gemini API requirements.\n *\n * Gemini API requires:\n * 1. The first non-system message must be from the user role\n * 2. Cannot have only system messages - at least one user/assistant is required\n *\n * @param messages - Array of model messages to validate and fix\n * @param logger - Optional logger for warnings\n * @returns Modified messages array that satisfies Gemini requirements\n *\n * @see https://github.com/mastra-ai/mastra/issues/7287 - Tool call ordering\n * @see https://github.com/mastra-ai/mastra/issues/8053 - Single turn validation\n * @see https://github.com/mastra-ai/mastra/issues/13045 - Empty thread support\n */\nexport function ensureGeminiCompatibleMessages<T extends ModelMessage | CoreMessageV4>(\n messages: T[],\n logger?: IMastraLogger,\n): T[] {\n const result = [...messages];\n\n // Ensure first non-system message is user\n const firstNonSystemIndex = result.findIndex(m => m.role !== 'system');\n\n if (firstNonSystemIndex === -1) {\n // Only system messages or empty — warn and pass through unchanged.\n // Providers that support system-only prompts (Anthropic, OpenAI) will work natively.\n // Providers that don't (Gemini) will return their own error.\n if (result.length > 0) {\n logger?.warn(\n 'No user or assistant messages in the request. Some providers (e.g. Gemini) require at least one user message to generate a response.',\n );\n }\n } else if (result[firstNonSystemIndex]?.role === 'assistant') {\n // First non-system is assistant, insert user message before it\n result.splice(firstNonSystemIndex, 0, {\n role: 'user',\n content: '.',\n } as T);\n }\n\n return result;\n}\n\n// ============================================================================\n// Anthropic Compatibility\n// ============================================================================\n\n/**\n * Ensures model messages are compatible with Anthropic API requirements.\n *\n * Anthropic API requires tool-result parts to include an 'input' field\n * that matches the original tool call arguments.\n *\n * @param messages - Array of model messages to transform\n * @param dbMessages - MastraDB messages to look up tool call args from\n * @returns Messages with tool-result parts enriched with input field\n *\n * @see https://github.com/mastra-ai/mastra/issues/11376 - Anthropic models fail with empty object tool input\n */\nexport function ensureAnthropicCompatibleMessages(\n messages: ModelMessage[],\n dbMessages: MastraDBMessage[],\n): ModelMessage[] {\n return messages.map(msg => enrichToolResultsWithInput(msg, dbMessages));\n}\n\n/**\n * Enriches a single message's tool-result parts with input field\n */\nfunction enrichToolResultsWithInput(message: ModelMessage, dbMessages: MastraDBMessage[]): ModelMessage {\n if (message.role !== 'tool' || !Array.isArray(message.content)) {\n return message;\n }\n\n return {\n ...message,\n content: message.content.map(part => {\n if (part.type === 'tool-result') {\n return {\n ...part,\n input: findToolCallArgs(dbMessages, part.toolCallId),\n } as ToolResultWithInput;\n }\n return part;\n }),\n } as ModelMessage;\n}\n\n// ============================================================================\n// OpenAI Compatibility\n// ============================================================================\n\n/**\n * Checks if a message part has OpenAI reasoning itemId\n *\n * OpenAI reasoning items are tracked via `providerMetadata.openai.itemId` (e.g., `rs_...`).\n * Each reasoning item has a unique itemId that must be preserved for proper deduplication.\n *\n * @param part - A message part to check\n * @returns true if the part has an OpenAI itemId\n *\n * @see https://github.com/mastra-ai/mastra/issues/9005 - OpenAI reasoning items filtering\n */\nexport function hasOpenAIReasoningItemId(part: unknown): boolean {\n if (!part || typeof part !== 'object') return false;\n const partAny = part as Record<string, unknown>;\n\n if (!('providerMetadata' in partAny) || !partAny.providerMetadata) return false;\n const metadata = partAny.providerMetadata as Record<string, unknown>;\n\n if (!('openai' in metadata) || !metadata.openai) return false;\n const openai = metadata.openai as Record<string, unknown>;\n\n return 'itemId' in openai && typeof openai.itemId === 'string';\n}\n\n/**\n * Extracts the OpenAI itemId from a message part if present\n *\n * @param part - A message part to extract from\n * @returns The itemId string or undefined if not present\n */\nexport function getOpenAIReasoningItemId(part: unknown): string | undefined {\n if (!hasOpenAIReasoningItemId(part)) return undefined;\n\n const partAny = part as Record<string, unknown>;\n const metadata = partAny.providerMetadata as Record<string, unknown>;\n const openai = metadata.openai as Record<string, unknown>;\n\n return openai.itemId as string;\n}\n\n// ============================================================================\n// Tool Call Args Lookup\n// ============================================================================\n\n/**\n * Finds the tool call args for a given toolCallId by searching through messages.\n * This is used to reconstruct the input field when converting tool-result parts to StaticToolResult.\n *\n * Searches through messages in reverse order (most recent first) for better performance.\n * Checks both content.parts (v2 format) and toolInvocations (legacy AIV4 format).\n *\n * @param messages - Array of MastraDB messages to search through\n * @param toolCallId - The ID of the tool call to find args for\n * @returns The args object from the matching tool call, or an empty object if not found\n */\nexport function findToolCallArgs(messages: MastraDBMessage[], toolCallId: string): Record<string, unknown> {\n // Search through all messages in reverse order (most recent first) for better performance\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (!msg || msg.role !== 'assistant') {\n continue;\n }\n\n // Check both content.parts (v2 format) and toolInvocations (legacy format)\n if (msg.content.parts) {\n // Look for tool-invocation with matching toolCallId (can be in 'call' or 'result' state)\n const toolCallPart = msg.content.parts.find(\n p => p.type === 'tool-invocation' && p.toolInvocation.toolCallId === toolCallId,\n );\n\n if (toolCallPart && toolCallPart.type === 'tool-invocation') {\n // Return the args even if it's undefined or empty object\n return toolCallPart.toolInvocation.args || {};\n }\n }\n\n // Also check toolInvocations array (AIV4 format)\n if (msg.content.toolInvocations) {\n const toolInvocation = msg.content.toolInvocations.find(inv => inv.toolCallId === toolCallId);\n\n if (toolInvocation) {\n return toolInvocation.args || {};\n }\n }\n }\n\n // If not found in DB messages, return empty object\n return {};\n}\n","import type {\n UIMessage as UIMessageV4,\n CoreMessage as CoreMessageV4,\n ToolInvocation as ToolInvocationV4,\n} from '@internal/ai-sdk-v4';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '../../../error';\nimport { TypeDetector } from '../detection/TypeDetector';\nimport { convertDataContentToBase64String } from '../prompt/data-content';\nimport { categorizeFileData, createDataUri, imageContentToString } from '../prompt/image-utils';\nimport type {\n MastraDBMessage,\n MastraMessageContentV2,\n MastraMessagePart,\n UIMessageV4Part,\n MessageSource,\n UIMessageWithMetadata,\n} from '../state/types';\nimport { findToolCallArgs } from '../utils/provider-compat';\n\n/**\n * Filter out data-* parts from MastraMessagePart[] to get V4-compatible parts.\n * Data parts are a Mastra extension for custom streaming data and aren't supported by AI SDK V4.\n */\nfunction filterDataParts(parts: MastraMessagePart[]): UIMessageV4Part[] {\n return parts.filter((part): part is UIMessageV4Part => !part.type.startsWith('data-'));\n}\n\n/**\n * Filter out empty text parts from message parts array.\n * Empty text blocks are not allowed by Anthropic's API and cause request failures.\n * This can happen during streaming when text-start/text-end events occur without actual content.\n * However, if the only part is an empty text part, it is preserved as a legitimate placeholder\n * (e.g. empty assistant messages between tool results and user messages).\n */\nfunction filterEmptyTextParts(parts: MastraMessagePart[]): MastraMessagePart[] {\n const hasNonEmptyParts = parts.some(part => !(part.type === 'text' && part.text === ''));\n if (!hasNonEmptyParts) return parts;\n return parts.filter(part => {\n if (part.type === 'text') {\n return part.text !== '';\n }\n return true;\n });\n}\n\n// Re-export for backward compatibility\nexport type { UIMessageWithMetadata };\n\nexport interface AIV4AdapterContext {\n memoryInfo: { threadId?: string; resourceId?: string } | null;\n newMessageId(): string;\n generateCreatedAt(messageSource: MessageSource, start?: unknown): Date;\n /** Messages array for looking up tool call args */\n dbMessages?: MastraDBMessage[];\n}\n\n/**\n * AIV4Adapter - Handles conversions between MastraDBMessage and AI SDK V4 formats\n *\n * This adapter centralizes all AI SDK V4 (UIMessage and CoreMessage) conversion logic.\n */\nexport class AIV4Adapter {\n /**\n * Convert MastraDBMessage to AI SDK V4 UIMessage\n */\n static toUIMessage(m: MastraDBMessage): UIMessageWithMetadata {\n const experimentalAttachments: UIMessageWithMetadata['experimental_attachments'] = m.content\n .experimental_attachments\n ? [...m.content.experimental_attachments]\n : [];\n const contentString =\n typeof m.content.content === `string` && m.content.content !== ''\n ? m.content.content\n : (m.content.parts ?? []).reduce((prev, part) => {\n if (part.type === `text`) {\n // return only the last text part like AI SDK does\n return part.text;\n }\n return prev;\n }, '');\n\n const parts: MastraMessageContentV2['parts'] = [];\n const sourceParts = m.content.parts ?? [];\n\n if (sourceParts.length) {\n for (const part of sourceParts) {\n if (part.type === `file`) {\n // Normalize part.data to ensure it's a valid URL or data URI\n let normalizedUrl: string;\n if (typeof part.data === 'string') {\n const categorized = categorizeFileData(part.data, part.mimeType);\n if (categorized.type === 'raw') {\n // Raw base64 - convert to data URI\n normalizedUrl = createDataUri(part.data, part.mimeType || 'application/octet-stream');\n } else {\n // Already a URL or data URI\n normalizedUrl = part.data;\n }\n } else {\n // It's a non-string (shouldn't happen in practice for file parts, but handle it)\n normalizedUrl = part.data;\n }\n\n experimentalAttachments.push({\n contentType: part.mimeType,\n url: normalizedUrl,\n });\n } else if (\n part.type === 'tool-invocation' &&\n (part.toolInvocation.state === 'call' || part.toolInvocation.state === 'partial-call')\n ) {\n // Filter out tool invocations with call or partial-call states\n continue;\n } else if (part.type === 'tool-invocation') {\n // Handle tool invocations with step number logic\n const toolInvocation = { ...part.toolInvocation };\n\n // Find the step number for this tool invocation\n let currentStep = -1;\n let toolStep = -1;\n for (const innerPart of sourceParts) {\n if (innerPart.type === `step-start`) currentStep++;\n if (\n innerPart.type === `tool-invocation` &&\n innerPart.toolInvocation.toolCallId === part.toolInvocation.toolCallId\n ) {\n toolStep = currentStep;\n break;\n }\n }\n\n if (toolStep >= 0) {\n const preparedInvocation = {\n step: toolStep,\n ...toolInvocation,\n };\n parts.push({\n type: 'tool-invocation',\n toolInvocation: preparedInvocation,\n });\n } else {\n parts.push({\n type: 'tool-invocation',\n toolInvocation,\n });\n }\n } else {\n parts.push(part);\n }\n }\n }\n\n if (parts.length === 0 && experimentalAttachments.length > 0) {\n // make sure we have atleast one part so this message doesn't get removed when converting to core message\n parts.push({ type: 'text', text: '' });\n }\n\n // Filter out data-* parts when converting to UIMessageV4 (V4 doesn't support them)\n const v4Parts = filterDataParts(parts);\n\n if (m.role === `user`) {\n const uiMessage: UIMessageWithMetadata = {\n id: m.id,\n role: m.role,\n content: m.content.content || contentString,\n createdAt: m.createdAt,\n parts: v4Parts,\n experimental_attachments: experimentalAttachments,\n };\n // Preserve metadata if present\n if (m.content.metadata) {\n uiMessage.metadata = m.content.metadata;\n }\n return uiMessage;\n } else if (m.role === `assistant`) {\n const isSingleTextContentArray =\n Array.isArray(m.content.content) && m.content.content.length === 1 && m.content.content[0].type === `text`;\n\n const uiMessage: UIMessageWithMetadata = {\n id: m.id,\n role: m.role,\n content: isSingleTextContentArray ? contentString : m.content.content || contentString,\n createdAt: m.createdAt,\n parts: v4Parts,\n reasoning: undefined,\n toolInvocations:\n `toolInvocations` in m.content ? m.content.toolInvocations?.filter(t => t.state === 'result') : undefined,\n };\n // Preserve metadata if present\n if (m.content.metadata) {\n uiMessage.metadata = m.content.metadata;\n }\n return uiMessage;\n }\n\n const uiMessage: UIMessageWithMetadata = {\n id: m.id,\n role: m.role,\n content: m.content.content || contentString,\n createdAt: m.createdAt,\n parts: v4Parts,\n experimental_attachments: experimentalAttachments,\n };\n // Preserve metadata if present\n if (m.content.metadata) {\n uiMessage.metadata = m.content.metadata;\n }\n return uiMessage;\n }\n\n /**\n * Converts a MastraDBMessage system message directly to AIV4 CoreMessage format\n */\n static systemToV4Core(message: MastraDBMessage): CoreMessageV4 {\n if (message.role !== `system` || !message.content.content)\n throw new MastraError({\n id: 'INVALID_SYSTEM_MESSAGE_FORMAT',\n domain: ErrorDomain.AGENT,\n category: ErrorCategory.USER,\n text: `Invalid system message format. System messages must include 'role' and 'content' properties. The content should be a string.`,\n details: {\n receivedMessage: JSON.stringify(message, null, 2),\n },\n });\n\n const coreMessage: CoreMessageV4 = { role: 'system', content: message.content.content };\n\n // Preserve message-level providerMetadata as experimental_providerMetadata (V4 field name)\n if (message.content.providerMetadata) {\n coreMessage.experimental_providerMetadata = message.content.providerMetadata;\n }\n\n return coreMessage;\n }\n\n /**\n * Convert AI SDK V4 UIMessage to MastraDBMessage\n */\n static fromUIMessage(\n message: UIMessageV4 | UIMessageWithMetadata,\n ctx: AIV4AdapterContext,\n messageSource: MessageSource,\n ): MastraDBMessage {\n // Filter out empty text parts to prevent Anthropic API errors\n const filteredParts = message.parts ? filterEmptyTextParts(message.parts) : [];\n\n const content: MastraMessageContentV2 = {\n format: 2,\n parts: filteredParts,\n };\n\n if (message.toolInvocations) content.toolInvocations = message.toolInvocations;\n if (message.reasoning) content.reasoning = message.reasoning;\n if (message.annotations) content.annotations = message.annotations;\n if (message.experimental_attachments) {\n content.experimental_attachments = message.experimental_attachments;\n }\n // Preserve metadata field if present\n if ('metadata' in message && message.metadata !== null && message.metadata !== undefined) {\n content.metadata = message.metadata as Record<string, unknown>;\n }\n\n return {\n id: message.id || ctx.newMessageId(),\n role: TypeDetector.getRole(message),\n createdAt: ctx.generateCreatedAt(messageSource, message.createdAt),\n threadId: ctx.memoryInfo?.threadId,\n resourceId: ctx.memoryInfo?.resourceId,\n content,\n } satisfies MastraDBMessage;\n }\n\n /**\n * Convert AI SDK V4 CoreMessage to MastraDBMessage\n */\n static fromCoreMessage(\n coreMessage: CoreMessageV4,\n ctx: AIV4AdapterContext,\n messageSource: MessageSource,\n ): MastraDBMessage {\n const id = `id` in coreMessage ? (coreMessage.id as string) : ctx.newMessageId();\n const parts: UIMessageV4['parts'] = [];\n const experimentalAttachments: UIMessageV4['experimental_attachments'] = [];\n const toolInvocations: ToolInvocationV4[] = [];\n\n const isSingleTextContent =\n messageSource === `response` &&\n Array.isArray(coreMessage.content) &&\n coreMessage.content.length === 1 &&\n coreMessage.content[0] &&\n coreMessage.content[0].type === `text` &&\n `text` in coreMessage.content[0] &&\n coreMessage.content[0].text;\n\n if (isSingleTextContent && messageSource === `response`) {\n coreMessage.content = isSingleTextContent;\n }\n\n if (typeof coreMessage.content === 'string') {\n parts.push({\n type: 'text',\n text: coreMessage.content,\n });\n } else if (Array.isArray(coreMessage.content)) {\n for (const aiV4Part of coreMessage.content) {\n switch (aiV4Part.type) {\n case 'text': {\n // Add step-start only after tool invocations, not at the beginning\n const prevPart = parts.at(-1);\n if (coreMessage.role === 'assistant' && prevPart && prevPart.type === 'tool-invocation') {\n parts.push({ type: 'step-start' });\n }\n\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'text' as const,\n text: aiV4Part.text,\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n break;\n }\n\n case 'tool-call': {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'tool-invocation' as const,\n toolInvocation: {\n state: 'call',\n toolCallId: aiV4Part.toolCallId,\n toolName: aiV4Part.toolName,\n args: aiV4Part.args,\n },\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n break;\n }\n\n case 'tool-result':\n {\n // Try to find args from the corresponding tool-call in previous messages\n let toolArgs: Record<string, unknown> = {};\n\n // First, check if there's a tool-call in the same message\n const toolCallInSameMsg = coreMessage.content.find(\n p => p.type === 'tool-call' && p.toolCallId === aiV4Part.toolCallId,\n );\n if (toolCallInSameMsg && toolCallInSameMsg.type === 'tool-call') {\n toolArgs = toolCallInSameMsg.args as Record<string, unknown>;\n }\n\n // If not found, look in previous messages for the corresponding tool-call\n if (Object.keys(toolArgs).length === 0 && ctx.dbMessages) {\n toolArgs = findToolCallArgs(ctx.dbMessages, aiV4Part.toolCallId);\n }\n\n // Only use part-level providerOptions if present\n const invocation: ToolInvocationV4 = {\n state: 'result' as const,\n toolCallId: aiV4Part.toolCallId,\n toolName: aiV4Part.toolName,\n result: aiV4Part.result ?? '',\n args: toolArgs,\n };\n\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'tool-invocation',\n toolInvocation: invocation,\n };\n\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n\n parts.push(part);\n toolInvocations.push(invocation);\n }\n break;\n\n case 'reasoning':\n {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'reasoning',\n reasoning: '',\n details: [{ type: 'text', text: aiV4Part.text, signature: aiV4Part.signature }],\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n }\n break;\n case 'redacted-reasoning':\n {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'reasoning',\n reasoning: '',\n details: [{ type: 'redacted', data: aiV4Part.data }],\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n }\n break;\n case 'image': {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n data: imageContentToString(aiV4Part.image),\n mimeType: aiV4Part.mimeType!,\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n parts.push(part);\n break;\n }\n case 'file': {\n if (aiV4Part.data instanceof URL) {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n data: aiV4Part.data.toString(),\n mimeType: aiV4Part.mimeType,\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n if (aiV4Part.filename) {\n (part as Record<string, unknown>).filename = aiV4Part.filename;\n }\n parts.push(part);\n } else if (typeof aiV4Part.data === 'string') {\n const categorized = categorizeFileData(aiV4Part.data, aiV4Part.mimeType);\n\n if (categorized.type === 'url' || categorized.type === 'dataUri') {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n data: aiV4Part.data,\n mimeType: categorized.mimeType || 'image/png',\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n if (aiV4Part.filename) {\n (part as Record<string, unknown>).filename = aiV4Part.filename;\n }\n parts.push(part);\n } else {\n try {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n mimeType: categorized.mimeType || 'image/png',\n data: convertDataContentToBase64String(aiV4Part.data),\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n if (aiV4Part.filename) {\n (part as Record<string, unknown>).filename = aiV4Part.filename;\n }\n parts.push(part);\n } catch (error) {\n console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);\n }\n }\n } else {\n try {\n const part: MastraDBMessage['content']['parts'][number] = {\n type: 'file' as const,\n mimeType: aiV4Part.mimeType,\n data: convertDataContentToBase64String(aiV4Part.data),\n };\n if (aiV4Part.providerOptions) {\n part.providerMetadata = aiV4Part.providerOptions;\n }\n if (aiV4Part.filename) {\n (part as Record<string, unknown>).filename = aiV4Part.filename;\n }\n parts.push(part);\n } catch (error) {\n console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);\n }\n }\n break;\n }\n }\n }\n }\n\n // Filter out empty text parts to prevent Anthropic API errors\n const filteredParts = filterEmptyTextParts(parts);\n\n const content: MastraDBMessage['content'] = {\n format: 2,\n parts: filteredParts,\n };\n\n if (toolInvocations.length) content.toolInvocations = toolInvocations;\n if (typeof coreMessage.content === `string`) content.content = coreMessage.content;\n\n if (experimentalAttachments.length) content.experimental_attachments = experimentalAttachments;\n\n // V4 uses experimental_providerMetadata, V5 uses providerOptions\n if (coreMessage.providerOptions) {\n content.providerMetadata = coreMessage.providerOptions;\n } else if ('experimental_providerMetadata' in coreMessage && coreMessage.experimental_providerMetadata) {\n content.providerMetadata = coreMessage.experimental_providerMetadata;\n }\n\n if ('metadata' in coreMessage && coreMessage.metadata !== null && coreMessage.metadata !== undefined) {\n content.metadata = coreMessage.metadata as Record<string, unknown>;\n }\n\n const rawCreatedAt =\n 'metadata' in coreMessage &&\n coreMessage.metadata &&\n typeof coreMessage.metadata === 'object' &&\n 'createdAt' in coreMessage.metadata\n ? coreMessage.metadata.createdAt\n : undefined;\n\n return {\n id,\n role: TypeDetector.getRole(coreMessage),\n createdAt: ctx.generateCreatedAt(messageSource, rawCreatedAt),\n threadId: ctx.memoryInfo?.threadId,\n resourceId: ctx.memoryInfo?.resourceId,\n content,\n } satisfies MastraDBMessage;\n }\n}\n","const TOOL_NAME_PATTERN = /^[a-zA-Z0-9_-]+$/;\n\nexport const FALLBACK_TOOL_NAME = 'unknown_tool';\n\nexport function sanitizeToolName(toolName: unknown): string {\n if (typeof toolName !== 'string') {\n return FALLBACK_TOOL_NAME;\n }\n\n return TOOL_NAME_PATTERN.test(toolName) ? toolName : FALLBACK_TOOL_NAME;\n}\n","import type { ToolInvocationUIPart } from '@ai-sdk/ui-utils-v5';\nimport * as AIV5 from '@internal/ai-sdk-v5';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '../../../error';\nimport { categorizeFileData, createDataUri, parseDataUri } from '../prompt/image-utils';\nimport type { MastraDBMessage, MastraMessageContentV2, MastraMessagePart, MessageSource } from '../state/types';\nimport type { AIV5Type } from '../types';\nimport { sanitizeToolName } from '../utils/tool-name';\n\n/**\n * Filter out empty text parts from message parts array.\n * Empty text blocks are not allowed by Anthropic's API and cause request failures.\n * This can happen during streaming when text-start/text-end events occur without actual content.\n * However, if the only part is an empty text part, it is preserved as a legitimate placeholder\n * (e.g. empty assistant messages between tool results and user messages).\n */\nfunction filterEmptyTextParts(parts: MastraMessagePart[]): MastraMessagePart[] {\n const hasNonEmptyParts = parts.some(part => !(part.type === 'text' && part.text === ''));\n if (!hasNonEmptyParts) return parts;\n return parts.filter(part => {\n if (part.type === 'text') {\n return part.text !== '';\n }\n return true;\n });\n}\n\n/**\n * Extract tool name from AI SDK v5 tool type string\n *\n * V5 format: \"tool-${toolName}\" or \"dynamic-tool\"\n * V4 format: \"tool-invocation\"\n *\n * @param type - The tool type string from AI SDK v5\n * @returns The tool name or 'dynamic-tool' if it's a dynamic tool\n */\nfunction getToolName(type: string | { type: string }): string {\n // Handle objects with type property\n if (typeof type === 'object' && type && 'type' in type) {\n type = type.type;\n }\n\n // Ensure type is a string\n if (typeof type !== 'string') {\n return sanitizeToolName(type);\n }\n\n if (type === 'dynamic-tool') {\n return 'dynamic-tool';\n }\n\n // Extract tool name from \"tool-${toolName}\" format\n if (type.startsWith('tool-')) {\n return sanitizeToolName(type.slice('tool-'.length)); // Remove \"tool-\" prefix\n }\n\n // Fallback for unexpected formats\n return sanitizeToolName(type);\n}\n\nexport interface AIV5AdapterContext {\n memoryInfo: { threadId?: string; resourceId?: string } | null;\n newMessageId?(): string;\n generateCreatedAt?(messageSource: MessageSource, start?: unknown): Date;\n}\n\n/**\n * AIV5Adapter - Handles conversions between MastraDBMessage and AI SDK V5 formats\n *\n * This adapter centralizes all AI SDK V5 (UIMessage and ModelMessage) conversion logic.\n */\nexport class AIV5Adapter {\n /**\n * Direct conversion from MastraDBMessage to AIV5 UIMessage\n */\n static toUIMessage(dbMsg: MastraDBMessage): AIV5Type.UIMessage {\n const parts: AIV5Type.UIMessage['parts'] = [];\n const metadata: Record<string, unknown> = { ...(dbMsg.content.metadata || {}) };\n\n // Add Mastra-specific metadata\n if (dbMsg.createdAt) metadata.createdAt = dbMsg.createdAt;\n if (dbMsg.threadId) metadata.threadId = dbMsg.threadId;\n if (dbMsg.resourceId) metadata.resourceId = dbMsg.resourceId;\n\n // Preserve message-level providerMetadata in metadata so it survives UI → Model conversion\n if (dbMsg.content.providerMetadata) {\n metadata.providerMetadata = dbMsg.content.providerMetadata;\n }\n\n // 1. Handle tool invocations (only if not already in parts array)\n const hasToolInvocationParts = dbMsg.content.parts?.some(p => p.type === 'tool-invocation');\n if (dbMsg.content.toolInvocations && !hasToolInvocationParts) {\n for (const invocation of dbMsg.content.toolInvocations) {\n if (invocation.state === 'result') {\n parts.push({\n type: `tool-${invocation.toolName}`,\n toolCallId: invocation.toolCallId,\n state: 'output-available',\n input: invocation.args,\n output: invocation.result,\n });\n } else {\n parts.push({\n type: `tool-${invocation.toolName}`,\n toolCallId: invocation.toolCallId,\n state: invocation.state === 'call' ? 'input-available' : 'input-streaming',\n input: invocation.args,\n });\n }\n }\n }\n\n // 2. Check if we have parts with providerMetadata first\n const hasReasoningInParts = dbMsg.content.parts?.some(p => p.type === 'reasoning');\n const hasFileInParts = dbMsg.content.parts?.some(p => p.type === 'file');\n\n // 3. Handle reasoning (AIV4 reasoning is a string) - only if not in parts\n if (dbMsg.content.reasoning && !hasReasoningInParts) {\n parts.push({\n type: 'reasoning',\n text: dbMsg.content.reasoning,\n });\n }\n\n // 4. Handle files (experimental_attachments) - only if not in parts\n const attachmentUrls = new Set<string>();\n if (dbMsg.content.experimental_attachments && !hasFileInParts) {\n for (const attachment of dbMsg.content.experimental_attachments) {\n attachmentUrls.add(attachment.url);\n parts.push({\n type: 'file',\n url: attachment.url,\n mediaType: attachment.contentType || 'unknown',\n });\n }\n }\n\n // 5. Handle parts directly (if present in V2)\n let hasNonToolReasoningParts = false;\n if (dbMsg.content.parts) {\n for (const part of dbMsg.content.parts) {\n // Handle tool-invocation parts\n if (part.type === 'tool-invocation' && part.toolInvocation) {\n const inv = part.toolInvocation;\n\n if (inv.state === 'result') {\n parts.push({\n type: `tool-${inv.toolName}`,\n toolCallId: inv.toolCallId,\n input: inv.args,\n output: inv.result,\n state: 'output-available',\n callProviderMetadata: part.providerMetadata,\n providerExecuted: (part as { providerExecuted?: boolean }).providerExecuted,\n } satisfies AIV5Type.ToolUIPart);\n } else {\n parts.push({\n type: `tool-${inv.toolName}`,\n toolCallId: inv.toolCallId,\n input: inv.args,\n state: 'input-available',\n callProviderMetadata: part.providerMetadata,\n providerExecuted: (part as { providerExecuted?: boolean }).providerExecuted,\n } satisfies AIV5Type.ToolUIPart);\n }\n continue;\n }\n\n // Handle reasoning parts\n if (part.type === 'reasoning') {\n const text =\n part.reasoning ||\n (part.details?.reduce((p: string, c) => {\n if (c.type === `text` && c.text) return p + c.text;\n return p;\n }, '') ??\n '');\n if (text || part.details?.length) {\n const v5UIPart: AIV5Type.ReasoningUIPart = {\n type: 'reasoning' as const,\n text: text || '',\n state: 'done' as const,\n };\n if (part.providerMetadata) {\n v5UIPart.providerMetadata = part.providerMetadata;\n }\n parts.push(v5UIPart);\n }\n continue;\n }\n\n // Skip tool-invocation parts without toolInvocation object and other tool- parts\n if (part.type === 'tool-invocation' || part.type.startsWith('tool-')) {\n continue;\n }\n\n // Convert file parts from V2 format (data) to AIV5 format (url)\n if (part.type === 'file') {\n // Skip file parts that came from experimental_attachments to avoid duplicates\n if (typeof part.data === 'string' && attachmentUrls.has(part.data)) {\n continue;\n }\n\n const categorized =\n typeof part.data === 'string'\n ? categorizeFileData(part.data, part.mimeType)\n : { type: 'raw' as const, mimeType: part.mimeType, data: part.data };\n\n if (categorized.type === 'url' && typeof part.data === 'string') {\n const v5UIPart: AIV5Type.FileUIPart = {\n type: 'file' as const,\n url: part.data,\n mediaType: categorized.mimeType || 'image/png',\n };\n if (part.providerMetadata) {\n v5UIPart.providerMetadata = part.providerMetadata;\n }\n parts.push(v5UIPart);\n } else {\n let filePartData: string;\n let extractedMimeType = part.mimeType;\n\n if (typeof part.data === 'string') {\n const parsed = parseDataUri(part.data);\n\n if (parsed.isDataUri) {\n filePartData = parsed.base64Content;\n if (parsed.mimeType) {\n extractedMimeType = extractedMimeType || parsed.mimeType;\n }\n } else {\n filePartData = part.data;\n }\n } else {\n filePartData = part.data;\n }\n\n const finalMimeType = extractedMimeType || 'image/png';\n\n let dataUri: string;\n if (typeof filePartData === 'string' && filePartData.startsWith('data:')) {\n dataUri = filePartData;\n } else {\n dataUri = createDataUri(filePartData, finalMimeType);\n }\n\n const v5UIPart: AIV5Type.FileUIPart = {\n type: 'file' as const,\n url: dataUri,\n mediaType: finalMimeType,\n };\n if (part.providerMetadata) {\n v5UIPart.providerMetadata = part.providerMetadata;\n }\n parts.push(v5UIPart);\n }\n } else if (part.type === 'source') {\n const v5UIPart: AIV5Type.SourceUrlUIPart = {\n type: 'source-url' as const,\n url: part.source.url,\n sourceId: part.source.id,\n title: part.source.title,\n };\n if (part.providerMetadata) {\n v5UIPart.providerMetadata = part.providerMetadata;\n }\n\n parts.push(v5UIPart);\n } else if (part.type === 'text') {\n const v5UIPart: AIV5Type.TextUIPart = {\n type: 'text' as const,\n text: part.text,\n };\n if (part.providerMetadata) {\n v5UIPart.providerMetadata = part.providerMetadata;\n }\n parts.push(v5UIPart);\n hasNonToolReasoningParts = true;\n } else {\n // Other parts (step-start, etc.) can be pushed as-is\n parts.push(part);\n hasNonToolReasoningParts = true;\n }\n }\n }\n\n // 6. Handle text content (fallback if no parts)\n if (dbMsg.content.content && !hasNonToolReasoningParts) {\n parts.push({ type: 'text', text: dbMsg.content.content });\n }\n\n return {\n id: dbMsg.id,\n role: dbMsg.role,\n metadata,\n parts,\n };\n }\n\n /**\n * Direct conversion from AIV5 UIMessage to MastraDBMessage\n */\n static fromUIMessage(uiMsg: AIV5Type.UIMessage): MastraDBMessage {\n const { parts, metadata: rawMetadata } = uiMsg;\n const metadata = (rawMetadata || {}) as Record<string, unknown>;\n\n // Extract Mastra-specific metadata\n const createdAtValue = metadata.createdAt;\n const createdAt = createdAtValue\n ? typeof createdAtValue === 'string'\n ? new Date(createdAtValue)\n : createdAtValue instanceof Date\n ? createdAtValue\n : new Date()\n : new Date();\n const threadId = metadata.threadId as string | undefined;\n const resourceId = metadata.resourceId as string | undefined;\n\n // Remove Mastra-specific metadata from the metadata object\n const cleanMetadata = { ...metadata };\n delete cleanMetadata.createdAt;\n delete cleanMetadata.threadId;\n delete cleanMetadata.resourceId;\n\n // Process parts to build V2 content\n const toolInvocationParts = parts.filter(p => AIV5.isToolUIPart(p));\n const reasoningParts = parts.filter(p => p.type === 'reasoning');\n const fileParts = parts.filter(p => p.type === 'file');\n const textParts = parts.filter(p => p.type === 'text');\n\n // Build tool invocations array\n let toolInvocations: MastraDBMessage['content']['toolInvocations'] = undefined;\n if (toolInvocationParts.length > 0) {\n toolInvocations = toolInvocationParts.map(p => {\n const toolName = getToolName(p);\n if (p.state === 'output-available') {\n return {\n args: p.input,\n result:\n typeof p.output === 'object' && p.output && 'value' in p.output\n ? (p.output as { value: unknown }).value\n : p.output,\n toolCallId: p.toolCallId,\n toolName,\n state: 'result',\n } satisfies NonNullable<MastraDBMessage['content']['toolInvocations']>[0];\n }\n return {\n args: p.input,\n toolCallId: p.toolCallId,\n toolName,\n state: 'call',\n } satisfies NonNullable<MastraDBMessage['content']['toolInvocations']>[0];\n });\n }\n\n // Build reasoning string (AIV4 reasoning is a string, not an array)\n let reasoning: MastraDBMessage['content']['reasoning'] = undefined;\n if (reasoningParts.length > 0) {\n reasoning = reasoningParts.map(p => p.text).join('\\n');\n }\n\n // Build experimental_attachments from file parts\n let experimental_attachments: MastraDBMessage['content']['experimental_attachments'] = undefined;\n if (fileParts.length > 0) {\n experimental_attachments = fileParts.map(p => ({\n url: p.url || '',\n contentType: p.mediaType,\n }));\n }\n\n // Build content from text parts (AIV4 content is a string)\n let content: MastraDBMessage['content']['content'] = undefined;\n if (textParts.length > 0) {\n content = textParts.map(p => p.text).join('');\n }\n // Build V2-compatible parts array\n const v2Parts = parts\n .map(p => {\n // Convert AIV5 UI parts to V2 parts\n if (AIV5.isToolUIPart(p)) {\n const toolName = getToolName(p);\n const callProviderMetadata = 'callProviderMetadata' in p ? p.callProviderMetadata : undefined;\n if (p.state === 'output-available') {\n return {\n type: 'tool-invocation' as const,\n toolInvocation: {\n toolCallId: p.toolCallId,\n toolName,\n args: p.input,\n result:\n typeof p.output === 'object' && p.output && 'value' in p.output\n ? (p.output as { value: unknown }).value\n : p.output,\n state: 'result' as const,\n },\n providerMetadata: callProviderMetadata,\n } satisfies ToolInvocationUIPart & { providerMetadata?: AIV5Type.ProviderMetadata };\n }\n return {\n type: 'tool-invocation' as const,\n toolInvocation: {\n toolCallId: p.toolCallId,\n toolName,\n args: p.input,\n state: 'call' as const,\n },\n providerMetadata: callProviderMetadata,\n } satisfies ToolInvocationUIPart & { providerMetadata?: AIV5Type.ProviderMetadata };\n }\n\n if (p.type === 'reasoning') {\n return {\n type: 'reasoning' as const,\n reasoning: '',\n details: [\n {\n type: 'text' as const,\n text: p.text,\n },\n ],\n providerMetadata: p.providerMetadata,\n };\n }\n\n if (p.type === 'file') {\n return {\n type: 'file' as const,\n mimeType: p.mediaType,\n data: p.url || '',\n providerMetadata: p.providerMetadata,\n ...((p as { filename?: string }).filename ? { filename: (p as { filename?: string }).filename } : {}),\n };\n }\n\n if (p.type === 'source-url') {\n return {\n type: 'source' as const,\n source: {\n url: p.url,\n sourceType: 'url',\n id: p.url,\n providerMetadata: p.providerMetadata,\n },\n providerMetadata: p.providerMetadata,\n };\n }\n\n if (p.type === 'text') {\n type V2TextPart = {\n type: 'text';\n text: string;\n providerMetadata?: AIV5Type.ProviderMetadata;\n };\n return {\n type: 'text' as const,\n text: p.text,\n providerMetadata: p.providerMetadata,\n } satisfies V2TextPart;\n }\n\n if (p.type === 'step-start') {\n return p;\n }\n\n // Handle data-* parts (custom parts emitted by tools via writer.custom())\n if (typeof p.type === 'string' && p.type.startsWith('data-')) {\n return {\n type: p.type,\n data: 'data' in p ? (p as any).data : undefined,\n };\n }\n\n return null;\n })\n .filter((p): p is NonNullable<typeof p> => p !== null);\n\n // Filter out empty text parts to prevent Anthropic API errors\n const filteredV2Parts = filterEmptyTextParts(v2Parts as MastraMessagePart[]);\n\n return {\n id: uiMsg.id,\n role: uiMsg.role,\n createdAt,\n threadId,\n resourceId,\n content: {\n format: 2,\n parts: filteredV2Parts as MastraMessageContentV2['parts'],\n toolInvocations,\n reasoning,\n experimental_attachments,\n content,\n metadata: Object.keys(cleanMetadata).length > 0 ? cleanMetadata : undefined,\n },\n };\n }\n\n /**\n * Convert image or file to data URI or URL for V2 file part\n */\n private static getDataStringFromAIV5DataPart(part: AIV5Type.ImagePart | AIV5Type.FilePart): string {\n let mimeType: string;\n let data: AIV5.FilePart['data'] | AIV5.ImagePart['image'];\n if ('data' in part) {\n mimeType = part.mediaType || 'application/octet-stream';\n data = part.data;\n } else if ('image' in part) {\n mimeType = part.mediaType || 'image/jpeg';\n data = part.image;\n } else {\n throw new MastraError({\n id: 'MASTRA_AIV5_DATA_PART_INVALID',\n domain: ErrorDomain.AGENT,\n category: ErrorCategory.USER,\n text: 'Invalid AIV5 data part in getDataStringFromAIV5DataPart',\n details: {\n part,\n },\n });\n }\n\n if (data instanceof URL) {\n return data.toString();\n } else {\n if (data instanceof Buffer) {\n const base64 = data.toString('base64');\n return `data:${mimeType};base64,${base64}`;\n } else if (typeof data === 'string') {\n return data.startsWith('data:') || data.startsWith('http') ? data : `data:${mimeType};base64,${data}`;\n } else if (data instanceof Uint8Array) {\n const base64 = Buffer.from(data).toString('base64');\n return `data:${mimeType};base64,${base64}`;\n } else if (data instanceof ArrayBuffer) {\n const base64 = Buffer.from(data).toString('base64');\n return `data:${mimeType};base64,${base64}`;\n } else {\n return '';\n }\n }\n }\n\n /**\n * Direct conversion from AIV5 ModelMessage to MastraDBMessage\n */\n static fromModelMessage(modelMsg: AIV5Type.ModelMessage, _messageSource?: MessageSource): MastraDBMessage {\n const content = Array.isArray(modelMsg.content)\n ? modelMsg.content\n : [{ type: 'text', text: modelMsg.content } satisfies AIV5.TextPart];\n\n const mastraDBParts: MastraMessageContentV2['parts'] = [];\n const toolInvocations: NonNullable<MastraDBMessage['content']['toolInvocations']> = [];\n const reasoningParts: string[] = [];\n const experimental_attachments: NonNullable<MastraDBMessage['content']['experimental_attachments']> = [];\n\n for (const part of content) {\n if (part.type === 'text') {\n const textPart: MastraDBMessage['content']['parts'][number] = {\n type: 'text' as const,\n text: part.text,\n };\n if (part.providerOptions) {\n textPart.providerMetadata = part.providerOptions;\n }\n mastraDBParts.push(textPart);\n } else if (part.type === 'tool-call') {\n const toolCallPart = part as AIV5Type.ToolCallPart;\n const toolInvocationPart: MastraDBMessage['content']['parts'][number] = {\n type: 'tool-invocation' as const,\n toolInvocation: {\n toolCallId: toolCallPart.toolCallId,\n toolName: sanitizeToolName(toolCallPart.toolName),\n args: toolCallPart.input,\n state: 'call',\n },\n };\n if (part.providerOptions) {\n toolInvocationPart.providerMetadata = part.providerOptions;\n }\n mastraDBParts.push(toolInvocationPart);\n toolInvocations.push({\n toolCallId: toolCallPart.toolCallId,\n toolName: sanitizeToolName(toolCallPart.toolName),\n args: toolCallPart.input,\n state: 'call',\n });\n } else if (part.type === 'tool-result') {\n const toolResultPart = part;\n const matchingCall = toolInvocations.find(inv => inv.toolCallId === toolResultPart.toolCallId);\n\n const matchingV2Part = mastraDBParts.find(\n (p): p is Extract<MastraDBMessage['content']['parts'][number], { type: 'tool-invocation' }> =>\n p.type === 'tool-invocation' &&\n 'toolInvocation' in p &&\n p.toolInvocation.toolCallId === toolResultPart.toolCallId,\n );\n\n const updateMatchingCallInvocationResult = (toolResultPart: AIV5Type.ToolResultPart, matchingCall: any) => {\n matchingCall.state = 'result';\n matchingCall.result =\n typeof toolResultPart.output === 'object' && toolResultPart.output && 'value' in toolResultPart.output\n ? toolResultPart.output.value\n : toolResultPart.output;\n };\n\n if (matchingCall) {\n updateMatchingCallInvocationResult(toolResultPart, matchingCall);\n } else {\n const call: any = {\n state: 'call',\n toolCallId: toolResultPart.toolCallId,\n toolName: sanitizeToolName(toolResultPart.toolName),\n args: {},\n };\n updateMatchingCallInvocationResult(toolResultPart, call);\n toolInvocations.push(call);\n }\n\n if (matchingV2Part && matchingV2Part.type === 'tool-invocation') {\n updateMatchingCallInvocationResult(toolResultPart, matchingV2Part.toolInvocation);\n } else {\n const toolInvocationPart: MastraDBMessage['content']['parts'][number] = {\n type: 'tool-invocation' as const,\n toolInvocation: {\n toolCallId: toolResultPart.toolCallId,\n toolName: sanitizeToolName(toolResultPart.toolName),\n args: {},\n state: 'call',\n },\n };\n updateMatchingCallInvocationResult(toolResultPart, toolInvocationPart.toolInvocation);\n mastraDBParts.push(toolInvocationPart);\n }\n } else if (part.type === 'reasoning') {\n const v2ReasoningPart: MastraDBMessage['content']['parts'][number] = {\n type: 'reasoning',\n reasoning: '',\n details: [{ type: 'text', text: part.text }],\n };\n if (part.providerOptions) {\n v2ReasoningPart.providerMetadata = part.providerOptions;\n }\n mastraDBParts.push(v2ReasoningPart);\n reasoningParts.push(part.text);\n } else if (part.type === 'image') {\n const imagePart = part;\n const mimeType = imagePart.mediaType || 'image/jpeg';\n const imageData = this.getDataStringFromAIV5DataPart(imagePart);\n\n const imageFilePart: MastraDBMessage['content']['parts'][number] = {\n type: 'file',\n data: imageData,\n mimeType,\n };\n if (part.providerOptions) {\n imageFilePart.providerMetadata = part.providerOptions;\n }\n mastraDBParts.push(imageFilePart);\n experimental_attachments.push({\n url: imageData,\n contentType: mimeType,\n });\n } else if (part.type === 'file') {\n const filePart = part;\n const mimeType = filePart.mediaType || 'application/octet-stream';\n const fileData = this.getDataStringFromAIV5DataPart(filePart);\n\n const v2FilePart: MastraDBMessage['content']['parts'][number] = {\n type: 'file',\n data: fileData,\n mimeType,\n };\n if (part.providerOptions) {\n v2FilePart.providerMetadata = part.providerOptions;\n }\n if ((filePart as { filename?: string }).filename) {\n (v2FilePart as Record<string, unknown>).filename = (filePart as { filename?: string }).filename;\n }\n mastraDBParts.push(v2FilePart);\n experimental_attachments.push({\n url: fileData,\n contentType: mimeType,\n });\n }\n }\n\n // Filter out empty text parts to prevent Anthropic API errors\n const filteredMastraDBParts = filterEmptyTextParts(mastraDBParts);\n\n // Build V2 content string\n const contentString = filteredMastraDBParts\n .filter(p => p.type === 'text')\n .map(p => p.text)\n .join('\\n');\n\n // Preserve metadata from the input message if present\n const metadata: Record<string, unknown> =\n 'metadata' in modelMsg && modelMsg.metadata !== null && modelMsg.metadata !== undefined\n ? (modelMsg.metadata as Record<string, unknown>)\n : {};\n\n // Generate ID from modelMsg if available, otherwise create a new one\n const id =\n `id` in modelMsg && typeof modelMsg.id === `string`\n ? modelMsg.id\n : `msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n\n const message: MastraDBMessage = {\n id,\n role: modelMsg.role === 'tool' ? 'assistant' : modelMsg.role,\n createdAt: new Date(),\n content: {\n format: 2,\n parts: filteredMastraDBParts,\n toolInvocations: toolInvocations.length > 0 ? toolInvocations : undefined,\n reasoning: reasoningParts.length > 0 ? reasoningParts.join('\\n') : undefined,\n experimental_attachments: experimental_attachments.length > 0 ? experimental_attachments : undefined,\n content: contentString || undefined,\n metadata: Object.keys(metadata).length > 0 ? metadata : undefined,\n },\n };\n // Add message-level providerOptions if present\n if (modelMsg.providerOptions) {\n message.content.providerMetadata = modelMsg.providerOptions;\n }\n\n return message;\n }\n}\n","import type { UIMessage as UIMessageV4 } from '@internal/ai-sdk-v4';\nimport * as AIV5 from '@internal/ai-sdk-v5';\n\nimport { getImageCacheKey } from '../prompt/image-utils';\nimport type { AIV5Type, CoreMessageV4 } from '../types';\nimport type { MastraMessagePart, UIMessageV4Part } from './types';\n\n/**\n * CacheKeyGenerator - Centralized cache key generation for message equality checks\n *\n * This class provides consistent cache key generation across all message formats,\n * which is critical for:\n * - Deduplication of messages\n * - Detecting when messages have been updated\n * - Comparing messages across different formats\n *\n * Cache key invariants:\n * - Same message content should always produce the same key\n * - Different content should produce different keys\n * - Provider metadata (e.g., OpenAI reasoning itemId) must be included for proper distinction\n */\nexport class CacheKeyGenerator {\n /**\n * Generate cache key from AIV4 UIMessage parts\n */\n static fromAIV4Parts(parts: UIMessageV4['parts']): string {\n let key = '';\n for (const part of parts) {\n key += part.type;\n key += CacheKeyGenerator.fromAIV4Part(part);\n }\n return key;\n }\n\n /**\n * Generate cache key from a single AIV4 UIMessage part\n */\n static fromAIV4Part(part: UIMessageV4['parts'][number]): string {\n let cacheKey = '';\n if (part.type === 'text') {\n cacheKey += part.text;\n }\n if (part.type === 'tool-invocation') {\n cacheKey += part.toolInvocation.toolCallId;\n cacheKey += part.toolInvocation.state;\n }\n if (part.type === 'reasoning') {\n cacheKey += part.reasoning;\n cacheKey += part.details.reduce((prev, current) => {\n if (current.type === 'text') {\n return prev + current.text.length + (current.signature?.length || 0);\n }\n return prev;\n }, 0);\n\n // OpenAI sends reasoning items (rs_...) inside part.providerMetadata.openai.itemId.\n // When the reasoning text is empty, the default cache key logic produces \"reasoning0\"\n // for *all* reasoning parts. This makes distinct rs_ entries appear identical, so the\n // message-merging logic drops the latest reasoning item. The result is that subsequent\n // OpenAI calls fail with:\n //\n // \"Item 'fc_...' was provided without its required 'reasoning' item\"\n //\n // To fix this, we incorporate the OpenAI itemId into the cache key so each rs_ entry\n // is treated as distinct.\n //\n // Note: We cast `part` to `any` here because the AI SDK's ReasoningUIPart V4 type does\n // NOT declare `providerMetadata` (even though Mastra attaches it at runtime). This\n // access is safe in JavaScript, but TypeScript cannot type it without augmentation,\n // so we intentionally narrow to `any` only for this metadata lookup.\n\n const partAny = part as any;\n\n if (\n partAny &&\n Object.hasOwn(partAny, 'providerMetadata') &&\n partAny.providerMetadata &&\n Object.hasOwn(partAny.providerMetadata, 'openai') &&\n partAny.providerMetadata.openai &&\n Object.hasOwn(partAny.providerMetadata.openai, 'itemId')\n ) {\n const itemId = partAny.providerMetadata.openai.itemId;\n cacheKey += `|${itemId}`;\n }\n }\n if (part.type === 'file') {\n cacheKey += part.data;\n cacheKey += part.mimeType;\n }\n\n return cacheKey;\n }\n\n /**\n * Generate cache key from MastraDB message parts\n */\n static fromDBParts(parts: MastraMessagePart[]): string {\n let key = '';\n for (const part of parts) {\n key += part.type;\n if (part.type.startsWith('data-')) {\n // Stringify data for proper cache key comparison since data can be any type\n const data = (part as AIV5Type.DataUIPart<AIV5.UIDataTypes>).data;\n key += JSON.stringify(data);\n } else {\n // Cast to UIMessageV4Part since we've already handled data-* parts above\n key += CacheKeyGenerator.fromAIV4Part(part as UIMessageV4Part);\n }\n }\n return key;\n }\n\n /**\n * Generate cache key from AIV4 CoreMessage content\n */\n static fromAIV4CoreMessageContent(content: CoreMessageV4['content']): string {\n if (typeof content === 'string') return content;\n let key = '';\n for (const part of content) {\n key += part.type;\n if (part.type === 'text') {\n key += part.text.length;\n }\n if (part.type === 'reasoning') {\n key += part.text.length;\n }\n if (part.type === 'tool-call') {\n key += part.toolCallId;\n key += part.toolName;\n }\n if (part.type === 'tool-result') {\n key += part.toolCallId;\n key += part.toolName;\n }\n if (part.type === 'file') {\n key += part.filename;\n key += part.mimeType;\n }\n if (part.type === 'image') {\n key += getImageCacheKey(part.image);\n key += part.mimeType;\n }\n if (part.type === 'redacted-reasoning') {\n key += part.data.length;\n }\n }\n return key;\n }\n\n /**\n * Generate cache key from AIV5 UIMessage parts\n */\n static fromAIV5Parts(parts: AIV5Type.UIMessage['parts']): string {\n let key = '';\n for (const part of parts) {\n key += part.type;\n if (part.type === 'text') {\n key += part.text;\n }\n if (AIV5.isToolUIPart(part) || part.type === 'dynamic-tool') {\n key += part.toolCallId;\n key += part.state;\n }\n if (part.type === 'reasoning') {\n key += part.text;\n }\n if (part.type === 'file') {\n key += part.url.length;\n key += part.mediaType;\n key += part.filename || '';\n }\n }\n return key;\n }\n\n /**\n * Generate cache key from AIV5 ModelMessage content\n */\n static fromAIV5ModelMessageContent(content: AIV5Type.ModelMessage['content']): string {\n if (typeof content === 'string') return content;\n let key = '';\n for (const part of content) {\n key += part.type;\n if (part.type === 'text') {\n key += part.text.length;\n }\n if (part.type === 'reasoning') {\n key += part.text.length;\n }\n if (part.type === 'tool-call') {\n key += part.toolCallId;\n key += part.toolName;\n }\n if (part.type === 'tool-result') {\n key += part.toolCallId;\n key += part.toolName;\n }\n if (part.type === 'file') {\n key += part.filename;\n key += part.mediaType;\n }\n if (part.type === 'image') {\n key += getImageCacheKey(part.image);\n key += part.mediaType;\n }\n }\n return key;\n }\n}\n","import type { LanguageModelV2Prompt } from '@ai-sdk/provider-v5';\nimport type { LanguageModelV1Prompt, CoreMessage as CoreMessageV4 } from '@internal/ai-sdk-v4';\n\nimport { convertDataContentToBase64String } from '../prompt/data-content';\nimport { categorizeFileData, createDataUri } from '../prompt/image-utils';\nimport type { AIV5Type } from '../types';\nimport { sanitizeToolName } from '../utils/tool-name';\n\ntype AIV5LanguageModelV2Message = LanguageModelV2Prompt[0];\ntype LanguageModelV1Message = LanguageModelV1Prompt[0];\n\n/**\n * Convert an AI SDK V4 CoreMessage to a V1 LanguageModel prompt message.\n * Used for creating LLM prompt messages without AI SDK streamText/generateText.\n */\nexport function aiV4CoreMessageToV1PromptMessage(coreMessage: CoreMessageV4): LanguageModelV1Message {\n if (coreMessage.role === `system`) {\n return coreMessage;\n }\n\n if (typeof coreMessage.content === `string` && (coreMessage.role === `assistant` || coreMessage.role === `user`)) {\n return {\n ...coreMessage,\n content: [{ type: 'text', text: coreMessage.content }],\n };\n }\n\n if (typeof coreMessage.content === `string`) {\n throw new Error(\n `Saw text content for input CoreMessage, but the role is ${coreMessage.role}. This is only allowed for \"system\", \"assistant\", and \"user\" roles.`,\n );\n }\n\n const roleContent: {\n user: Exclude<Extract<LanguageModelV1Message, { role: 'user' }>['content'], string>;\n assistant: Exclude<Extract<LanguageModelV1Message, { role: 'assistant' }>['content'], string>;\n tool: Exclude<Extract<LanguageModelV1Message, { role: 'tool' }>['content'], string>;\n } = {\n user: [],\n assistant: [],\n tool: [],\n };\n\n const role = coreMessage.role;\n\n for (const part of coreMessage.content) {\n const incompatibleMessage = `Saw incompatible message content part type ${part.type} for message role ${role}`;\n\n switch (part.type) {\n case 'text': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push(part);\n break;\n }\n\n case 'redacted-reasoning':\n case 'reasoning': {\n if (role !== `assistant`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push(part);\n break;\n }\n\n case 'tool-call': {\n if (role === `tool` || role === `user`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n toolName: sanitizeToolName(part.toolName),\n });\n break;\n }\n\n case 'tool-result': {\n if (role === `assistant` || role === `user`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n toolName: sanitizeToolName(part.toolName),\n });\n break;\n }\n\n case 'image': {\n if (role === `tool` || role === `assistant`) {\n throw new Error(incompatibleMessage);\n }\n\n let processedImage: URL | Uint8Array;\n\n if (part.image instanceof URL || part.image instanceof Uint8Array) {\n processedImage = part.image;\n } else if (Buffer.isBuffer(part.image) || part.image instanceof ArrayBuffer) {\n processedImage = new Uint8Array(part.image);\n } else {\n // part.image is a string - could be a URL, data URI, or raw base64\n const categorized = categorizeFileData(part.image, part.mimeType);\n\n if (categorized.type === 'raw') {\n // Raw base64 - convert to data URI before creating URL\n const dataUri = createDataUri(part.image, part.mimeType || 'image/png');\n processedImage = new URL(dataUri);\n } else {\n // It's already a URL or data URI\n processedImage = new URL(part.image);\n }\n }\n\n roleContent[role].push({\n ...part,\n image: processedImage,\n });\n break;\n }\n\n case 'file': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n data:\n part.data instanceof URL\n ? part.data\n : typeof part.data === 'string'\n ? part.data\n : convertDataContentToBase64String(part.data),\n });\n break;\n }\n }\n }\n\n if (role === `tool`) {\n return {\n ...coreMessage,\n content: roleContent[role],\n };\n }\n if (role === `user`) {\n return {\n ...coreMessage,\n content: roleContent[role],\n };\n }\n if (role === `assistant`) {\n return {\n ...coreMessage,\n content: roleContent[role],\n };\n }\n\n throw new Error(\n `Encountered unknown role ${role} when converting V4 CoreMessage -> V4 LanguageModelV1Prompt, input message: ${JSON.stringify(coreMessage, null, 2)}`,\n );\n}\n\n/**\n * Convert an AI SDK V5 ModelMessage to a V2 LanguageModel prompt message.\n * Used for creating LLM prompt messages without AI SDK streamText/generateText.\n */\nexport function aiV5ModelMessageToV2PromptMessage(modelMessage: AIV5Type.ModelMessage): AIV5LanguageModelV2Message {\n if (modelMessage.role === `system`) {\n return modelMessage;\n }\n\n if (typeof modelMessage.content === `string` && (modelMessage.role === `assistant` || modelMessage.role === `user`)) {\n return {\n role: modelMessage.role,\n content: [{ type: 'text', text: modelMessage.content }],\n providerOptions: modelMessage.providerOptions,\n };\n }\n\n if (typeof modelMessage.content === `string`) {\n throw new Error(\n `Saw text content for input ModelMessage, but the role is ${modelMessage.role}. This is only allowed for \"system\", \"assistant\", and \"user\" roles.`,\n );\n }\n\n const roleContent: {\n user: Extract<AIV5LanguageModelV2Message, { role: 'user' }>['content'];\n assistant: Extract<AIV5LanguageModelV2Message, { role: 'assistant' }>['content'];\n tool: Extract<AIV5LanguageModelV2Message, { role: 'tool' }>['content'];\n } = {\n user: [],\n assistant: [],\n tool: [],\n };\n\n const role = modelMessage.role;\n\n for (const part of modelMessage.content) {\n const incompatibleMessage = `Saw incompatible message content part type ${part.type} for message role ${role}`;\n\n switch (part.type) {\n case 'text': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push(part);\n break;\n }\n\n case 'reasoning': {\n if (role === `tool` || role === `user`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push(part);\n break;\n }\n\n case 'tool-call': {\n if (role !== `assistant`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n toolName: sanitizeToolName(part.toolName),\n });\n break;\n }\n\n case 'tool-result': {\n if (role === `assistant` || role === `user`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n toolName: sanitizeToolName(part.toolName),\n });\n break;\n }\n\n case 'file': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n data: part.data instanceof ArrayBuffer ? new Uint8Array(part.data) : part.data,\n });\n break;\n }\n\n case 'image': {\n if (role === `tool`) {\n throw new Error(incompatibleMessage);\n }\n roleContent[role].push({\n ...part,\n mediaType: part.mediaType || 'image/unknown',\n type: 'file',\n data: part.image instanceof ArrayBuffer ? new Uint8Array(part.image) : part.image,\n });\n break;\n }\n }\n }\n\n if (role === `tool`) {\n return {\n ...modelMessage,\n content: roleContent[role],\n };\n }\n if (role === `user`) {\n return {\n ...modelMessage,\n content: roleContent[role],\n };\n }\n if (role === `assistant`) {\n return {\n ...modelMessage,\n content: roleContent[role],\n };\n }\n\n throw new Error(\n `Encountered unknown role ${role} when converting V5 ModelMessage -> V5 LanguageModelV2Message, input message: ${JSON.stringify(modelMessage, null, 2)}`,\n );\n}\n","import type { CoreMessage as CoreMessageV4 } from '@internal/ai-sdk-v4';\n\nimport { CacheKeyGenerator } from '../cache/CacheKeyGenerator';\nimport { TypeDetector } from '../detection/TypeDetector';\nimport type { MessageInput } from '../types';\n\n/**\n * Convert CoreMessage content to a plain string.\n * Extracts text from text parts and concatenates them.\n */\nexport function coreContentToString(content: CoreMessageV4['content']): string {\n if (typeof content === `string`) return content;\n\n return content.reduce((p, c) => {\n if (c.type === `text`) {\n p += c.text;\n }\n return p;\n }, '');\n}\n\n/**\n * Compare two messages for equality based on their content.\n * Uses cache keys for efficient comparison across different message formats.\n */\nexport function messagesAreEqual(one: MessageInput, two: MessageInput): boolean {\n const oneUIV4 = TypeDetector.isAIV4UIMessage(one) && one;\n const twoUIV4 = TypeDetector.isAIV4UIMessage(two) && two;\n if (oneUIV4 && !twoUIV4) return false;\n if (oneUIV4 && twoUIV4) {\n return CacheKeyGenerator.fromAIV4Parts(one.parts) === CacheKeyGenerator.fromAIV4Parts(two.parts);\n }\n\n const oneCMV4 = TypeDetector.isAIV4CoreMessage(one) && one;\n const twoCMV4 = TypeDetector.isAIV4CoreMessage(two) && two;\n if (oneCMV4 && !twoCMV4) return false;\n if (oneCMV4 && twoCMV4) {\n return (\n CacheKeyGenerator.fromAIV4CoreMessageContent(oneCMV4.content) ===\n CacheKeyGenerator.fromAIV4CoreMessageContent(twoCMV4.content)\n );\n }\n\n const oneMM1 = TypeDetector.isMastraMessageV1(one) && one;\n const twoMM1 = TypeDetector.isMastraMessageV1(two) && two;\n if (oneMM1 && !twoMM1) return false;\n if (oneMM1 && twoMM1) {\n return (\n oneMM1.id === twoMM1.id &&\n CacheKeyGenerator.fromAIV4CoreMessageContent(oneMM1.content) ===\n CacheKeyGenerator.fromAIV4CoreMessageContent(twoMM1.content)\n );\n }\n\n const oneMM2 = TypeDetector.isMastraDBMessage(one) && one;\n const twoMM2 = TypeDetector.isMastraDBMessage(two) && two;\n if (oneMM2 && !twoMM2) return false;\n if (oneMM2 && twoMM2) {\n return (\n oneMM2.id === twoMM2.id &&\n CacheKeyGenerator.fromDBParts(oneMM2.content.parts) === CacheKeyGenerator.fromDBParts(twoMM2.content.parts)\n );\n }\n\n const oneUIV5 = TypeDetector.isAIV5UIMessage(one) && one;\n const twoUIV5 = TypeDetector.isAIV5UIMessage(two) && two;\n if (oneUIV5 && !twoUIV5) return false;\n if (oneUIV5 && twoUIV5) {\n return CacheKeyGenerator.fromAIV5Parts(one.parts) === CacheKeyGenerator.fromAIV5Parts(two.parts);\n }\n\n const oneCMV5 = TypeDetector.isAIV5CoreMessage(one) && one;\n const twoCMV5 = TypeDetector.isAIV5CoreMessage(two) && two;\n if (oneCMV5 && !twoCMV5) return false;\n if (oneCMV5 && twoCMV5) {\n return (\n CacheKeyGenerator.fromAIV5ModelMessageContent(oneCMV5.content) ===\n CacheKeyGenerator.fromAIV5ModelMessageContent(twoCMV5.content)\n );\n }\n\n // default to it did change. we'll likely never reach this codepath\n return true;\n}\n","import type { CoreMessage as CoreMessageV4, UIMessage as UIMessageV4 } from '@internal/ai-sdk-v4';\n\nimport { AIV4Adapter, AIV5Adapter } from '../adapters';\nimport { TypeDetector } from '../detection/TypeDetector';\nimport type {\n MastraDBMessage,\n MastraMessageV1,\n MessageSource,\n MemoryInfo,\n UIMessageWithMetadata,\n} from '../state/types';\nimport type { MessageInput } from '../types';\n\n/**\n * Context required for input conversion functions.\n * This is passed from MessageList to provide access to instance-specific utilities.\n */\nexport interface InputConversionContext {\n memoryInfo: MemoryInfo | null;\n newMessageId: () => string;\n generateCreatedAt: (messageSource: MessageSource, start?: unknown) => Date;\n /** Messages array for looking up tool call args */\n dbMessages: MastraDBMessage[];\n}\n\n/**\n * Convert any supported message input format to MastraDBMessage.\n * Routes to the appropriate converter based on message type detection.\n */\nexport function inputToMastraDBMessage(\n message: MessageInput,\n messageSource: MessageSource,\n context: InputConversionContext,\n): MastraDBMessage {\n // Validate threadId matches (except for memory messages which can come from other threads)\n if (\n messageSource !== `memory` &&\n `threadId` in message &&\n message.threadId &&\n context.memoryInfo &&\n message.threadId !== context.memoryInfo.threadId\n ) {\n throw new Error(\n `Received input message with wrong threadId. Input ${message.threadId}, expected ${context.memoryInfo.threadId}`,\n );\n }\n\n // Validate resourceId matches\n if (\n `resourceId` in message &&\n message.resourceId &&\n context.memoryInfo?.resourceId &&\n message.resourceId !== context.memoryInfo.resourceId\n ) {\n throw new Error(\n `Received input message with wrong resourceId. Input ${message.resourceId}, expected ${context.memoryInfo.resourceId}`,\n );\n }\n\n if (TypeDetector.isMastraMessageV1(message)) {\n return mastraMessageV1ToMastraDBMessage(message, messageSource, context);\n }\n if (TypeDetector.isMastraDBMessage(message)) {\n return hydrateMastraDBMessageFields(message, context);\n }\n if (TypeDetector.isAIV4CoreMessage(message)) {\n return AIV4Adapter.fromCoreMessage(message, context, messageSource);\n }\n if (TypeDetector.isAIV4UIMessage(message)) {\n return AIV4Adapter.fromUIMessage(message as UIMessageV4 | UIMessageWithMetadata, context, messageSource);\n }\n\n // Use custom ID generator if message doesn't have an ID, otherwise keep the original\n const hasOriginalId = 'id' in message && typeof message.id === 'string';\n const id = hasOriginalId ? message.id : context.newMessageId();\n\n if (TypeDetector.isAIV5CoreMessage(message)) {\n const dbMsg = AIV5Adapter.fromModelMessage(message, messageSource);\n // Only use the original createdAt from input message metadata, not the generated one from the static method\n // This fixes issue #10683 where messages without createdAt would get shuffled\n const rawCreatedAt =\n 'metadata' in message &&\n message.metadata &&\n typeof message.metadata === 'object' &&\n 'createdAt' in message.metadata\n ? message.metadata.createdAt\n : undefined;\n return {\n ...dbMsg,\n id,\n createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),\n threadId: context.memoryInfo?.threadId,\n resourceId: context.memoryInfo?.resourceId,\n };\n }\n if (TypeDetector.isAIV5UIMessage(message)) {\n const dbMsg = AIV5Adapter.fromUIMessage(message);\n // Only use the original createdAt from input message, not the generated one from the static method\n // This fixes issue #10683 where messages without createdAt would get shuffled\n const rawCreatedAt = 'createdAt' in message ? message.createdAt : undefined;\n return {\n ...dbMsg,\n id,\n createdAt: context.generateCreatedAt(messageSource, rawCreatedAt),\n threadId: context.memoryInfo?.threadId,\n resourceId: context.memoryInfo?.resourceId,\n };\n }\n\n throw new Error(`Found unhandled message ${JSON.stringify(message)}`);\n}\n\n/**\n * Convert MastraMessageV1 format to MastraDBMessage.\n */\nexport function mastraMessageV1ToMastraDBMessage(\n message: MastraMessageV1,\n messageSource: MessageSource,\n context: InputConversionContext,\n): MastraDBMessage {\n const coreV2 = AIV4Adapter.fromCoreMessage(\n {\n content: message.content,\n role: message.role,\n } as CoreMessageV4,\n context,\n messageSource,\n );\n\n return {\n id: message.id,\n role: coreV2.role,\n createdAt: context.generateCreatedAt(messageSource, message.createdAt),\n threadId: message.threadId,\n resourceId: message.resourceId,\n content: coreV2.content,\n };\n}\n\n/**\n * Hydrate a MastraDBMessage with missing fields (id, createdAt, threadId, resourceId).\n * Also fixes toolInvocations with empty args by looking in the parts array.\n */\nexport function hydrateMastraDBMessageFields(\n message: MastraDBMessage,\n context: InputConversionContext,\n): MastraDBMessage {\n // Generate ID if missing\n if (!message.id) {\n message.id = context.newMessageId();\n }\n\n if (!(message.createdAt instanceof Date)) {\n message.createdAt = new Date(message.createdAt);\n }\n\n // Fix toolInvocations with empty args by looking in the parts array\n // This handles messages restored from database where toolInvocations might have lost their args\n if (message.content.toolInvocations && message.content.parts) {\n message.content.toolInvocations = message.content.toolInvocations.map(ti => {\n if (!ti.args || Object.keys(ti.args).length === 0) {\n // Find the corresponding tool-invocation part with args\n const partWithArgs = message.content.parts.find(\n part =>\n part.type === 'tool-invocation' &&\n part.toolInvocation &&\n part.toolInvocation.toolCallId === ti.toolCallId &&\n part.toolInvocation.args &&\n Object.keys(part.toolInvocation.args).length > 0,\n );\n if (partWithArgs && partWithArgs.type === 'tool-invocation') {\n return { ...ti, args: partWithArgs.toolInvocation.args };\n }\n }\n return ti;\n });\n }\n\n if (!message.threadId && context.memoryInfo?.threadId) {\n message.threadId = context.memoryInfo.threadId;\n\n if (!message.resourceId && context.memoryInfo?.resourceId) {\n message.resourceId = context.memoryInfo.resourceId;\n }\n }\n\n return message;\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';\n\nconst name = 'AI_InvalidPromptError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\n * A prompt is invalid. This error should be thrown by providers when they cannot\n * process a prompt.\n */\nexport class InvalidPromptError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly prompt: unknown;\n\n constructor({\n prompt,\n message,\n cause,\n }: {\n prompt: unknown;\n message: string;\n cause?: unknown;\n }) {\n super({ name, message: `Invalid prompt: ${message}`, cause });\n\n this.prompt = prompt;\n }\n\n static isInstance(error: unknown): error is InvalidPromptError {\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","import { AISDKError } from './ai-sdk-error';\n\nconst name = 'AI_UnsupportedFunctionalityError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class UnsupportedFunctionalityError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly functionality: string;\n\n constructor({\n functionality,\n message = `'${functionality}' functionality not supported.`,\n }: {\n functionality: string;\n message?: string;\n }) {\n super({ name, message });\n this.functionality = functionality;\n }\n\n static isInstance(error: unknown): error is UnsupportedFunctionalityError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { JSONArray, JSONObject, JSONValue } from './json-value';\n\nexport function isJSONValue(value: unknown): value is JSONValue {\n if (\n value === null ||\n typeof value === 'string' ||\n typeof value === 'number' ||\n typeof value === 'boolean'\n ) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.every(isJSONValue);\n }\n\n if (typeof value === 'object') {\n return Object.entries(value).every(\n ([key, val]) => typeof key === 'string' && isJSONValue(val),\n );\n }\n\n return false;\n}\n\nexport function isJSONArray(value: unknown): value is JSONArray {\n return Array.isArray(value) && value.every(isJSONValue);\n}\n\nexport function isJSONObject(value: unknown): value is JSONObject {\n return (\n value != null &&\n typeof value === 'object' &&\n Object.entries(value).every(\n ([key, val]) => typeof key === 'string' && isJSONValue(val),\n )\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","// 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","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","/**\n * Performs a deep-equal comparison of two parsed JSON objects.\n *\n * @param {any} obj1 - The first object to compare.\n * @param {any} obj2 - The second object to compare.\n * @returns {boolean} - Returns true if the two objects are deeply equal, false otherwise.\n */\nexport function isDeepEqualData(obj1: any, obj2: any): boolean {\n // Check for strict equality first\n if (obj1 === obj2) return true;\n\n // Check if either is null or undefined\n if (obj1 == null || obj2 == null) return false;\n\n // Check if both are objects\n if (typeof obj1 !== 'object' && typeof obj2 !== 'object')\n return obj1 === obj2;\n\n // If they are not strictly equal, they both need to be Objects\n if (obj1.constructor !== obj2.constructor) return false;\n\n // Special handling for Date objects\n if (obj1 instanceof Date && obj2 instanceof Date) {\n return obj1.getTime() === obj2.getTime();\n }\n\n // Handle arrays: compare length and then perform a recursive deep comparison on each item\n if (Array.isArray(obj1)) {\n if (obj1.length !== obj2.length) return false;\n for (let i = 0; i < obj1.length; i++) {\n if (!isDeepEqualData(obj1[i], obj2[i])) return false;\n }\n return true; // All array elements matched\n }\n\n // Compare the set of keys in each object\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n\n // Check each key-value pair recursively\n for (const key of keys1) {\n if (!keys2.includes(key)) return false;\n if (!isDeepEqualData(obj1[key], obj2[key])) return false;\n }\n\n return true; // All keys and values matched\n}\n","import { 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","export function prepareOutgoingHttpHeaders(\n headers: HeadersInit | undefined,\n {\n contentType,\n dataStreamVersion,\n }: { contentType: string; dataStreamVersion?: 'v1' | undefined },\n) {\n const outgoingHeaders: Record<string, string | number | string[]> = {};\n\n if (headers != null) {\n for (const [key, value] of Object.entries(headers)) {\n outgoingHeaders[key] = value;\n }\n }\n\n if (outgoingHeaders['Content-Type'] == null) {\n outgoingHeaders['Content-Type'] = contentType;\n }\n\n if (dataStreamVersion !== undefined) {\n outgoingHeaders['X-Vercel-AI-Data-Stream'] = dataStreamVersion;\n }\n\n return outgoingHeaders;\n}\n","import { ServerResponse } from 'node:http';\n\n/**\n * Writes the content of a stream to a server response.\n */\nexport function writeToServerResponse({\n response,\n status,\n statusText,\n headers,\n stream,\n}: {\n response: ServerResponse;\n status?: number;\n statusText?: string;\n headers?: Record<string, string | number | string[]>;\n stream: ReadableStream<Uint8Array>;\n}): void {\n response.writeHead(status ?? 200, statusText, headers);\n\n const reader = stream.getReader();\n const read = async () => {\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n response.write(value);\n }\n } catch (error) {\n throw error;\n } finally {\n response.end();\n }\n };\n\n read();\n}\n","import { 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","import { UnsupportedModelVersionError } from '../../errors/unsupported-model-version-error';\nimport { 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 { EmbeddingModel } from '../types';\nimport { EmbedResult } from './embed-result';\n\n/**\nEmbed a value using an embedding model. The type of the value is defined by the embedding model.\n\n@param model - The embedding model to use.\n@param value - The value that should be embedded.\n\n@param maxRetries - Maximum number of retries. Set to 0 to disable retries. Default: 2.\n@param abortSignal - An optional abort signal that can be used to cancel the call.\n@param headers - Additional HTTP headers to be sent with the request. Only applicable for HTTP-based providers.\n\n@returns A result object that contains the embedding, the value, and additional information.\n */\nexport async function embed<VALUE>({\n model,\n value,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n experimental_telemetry: telemetry,\n}: {\n /**\nThe embedding model to use.\n */\n model: EmbeddingModel<VALUE>;\n\n /**\nThe value that should be embedded.\n */\n value: VALUE;\n\n /**\nMaximum number of retries per embedding model call. Set to 0 to disable retries.\n\n@default 2\n */\n maxRetries?: number;\n\n /**\nAbort signal.\n */\n abortSignal?: AbortSignal;\n\n /**\nAdditional headers to include in the request.\nOnly applicable for HTTP-based providers.\n */\n headers?: Record<string, string>;\n\n /**\n * Optional telemetry configuration (experimental).\n */\n experimental_telemetry?: TelemetrySettings;\n}): Promise<EmbedResult<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.embed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({ operationId: 'ai.embed', telemetry }),\n ...baseTelemetryAttributes,\n 'ai.value': { input: () => JSON.stringify(value) },\n },\n }),\n tracer,\n fn: async span => {\n const { embedding, usage, rawResponse } = await retry(() =>\n // nested spans to align with the embedMany telemetry data:\n recordSpan({\n name: 'ai.embed.doEmbed',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.embed.doEmbed',\n telemetry,\n }),\n ...baseTelemetryAttributes,\n // specific settings that only make sense on the outer level:\n 'ai.values': { input: () => [JSON.stringify(value)] },\n },\n }),\n tracer,\n fn: async doEmbedSpan => {\n const modelResponse = await model.doEmbed({\n values: [value],\n abortSignal,\n headers,\n });\n\n const embedding = modelResponse.embeddings[0];\n const usage = modelResponse.usage ?? { tokens: NaN };\n\n doEmbedSpan.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embeddings': {\n output: () =>\n modelResponse.embeddings.map(embedding =>\n JSON.stringify(embedding),\n ),\n },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return {\n embedding,\n usage,\n rawResponse: modelResponse.rawResponse,\n };\n },\n }),\n );\n\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.embedding': { output: () => JSON.stringify(embedding) },\n 'ai.usage.tokens': usage.tokens,\n },\n }),\n );\n\n return new DefaultEmbedResult({ value, embedding, usage, rawResponse });\n },\n });\n}\n\nclass DefaultEmbedResult<VALUE> implements EmbedResult<VALUE> {\n readonly value: EmbedResult<VALUE>['value'];\n readonly embedding: EmbedResult<VALUE>['embedding'];\n readonly usage: EmbedResult<VALUE>['usage'];\n readonly rawResponse: EmbedResult<VALUE>['rawResponse'];\n\n constructor(options: {\n value: EmbedResult<VALUE>['value'];\n embedding: EmbedResult<VALUE>['embedding'];\n usage: EmbedResult<VALUE>['usage'];\n rawResponse?: EmbedResult<VALUE>['rawResponse'];\n }) {\n this.value = options.value;\n this.embedding = options.embedding;\n this.usage = options.usage;\n this.rawResponse = options.rawResponse;\n }\n}\n","import {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64,\n} from '@ai-sdk/provider-utils';\n\n/**\n * A generated file.\n */\nexport interface GeneratedFile {\n /**\nFile as a base64 encoded string.\n */\n readonly base64: string;\n\n /**\nFile as a Uint8Array.\n */\n readonly uint8Array: Uint8Array;\n\n /**\nMIME type of the file\n */\n readonly mimeType: string;\n}\n\nexport class DefaultGeneratedFile implements GeneratedFile {\n private base64Data: string | undefined;\n private uint8ArrayData: Uint8Array | undefined;\n\n readonly mimeType: string;\n\n constructor({\n data,\n mimeType,\n }: {\n data: string | Uint8Array;\n mimeType: string;\n }) {\n const isUint8Array = data instanceof Uint8Array;\n this.base64Data = isUint8Array ? undefined : data;\n this.uint8ArrayData = isUint8Array ? data : undefined;\n this.mimeType = mimeType;\n }\n\n // lazy conversion with caching to avoid unnecessary conversion overhead:\n get base64() {\n if (this.base64Data == null) {\n this.base64Data = convertUint8ArrayToBase64(this.uint8ArrayData!);\n }\n return this.base64Data;\n }\n\n // lazy conversion with caching to avoid unnecessary conversion overhead:\n get uint8Array() {\n if (this.uint8ArrayData == null) {\n this.uint8ArrayData = convertBase64ToUint8Array(this.base64Data!);\n }\n return this.uint8ArrayData;\n }\n}\n\nexport class DefaultGeneratedFileWithType extends DefaultGeneratedFile {\n readonly type = 'file';\n\n constructor(options: { data: string | Uint8Array; mimeType: string }) {\n super(options);\n }\n}\n","import { convertBase64ToUint8Array } from '@ai-sdk/provider-utils';\n\nexport const imageMimeTypeSignatures = [\n {\n mimeType: 'image/gif' as const,\n bytesPrefix: [0x47, 0x49, 0x46],\n base64Prefix: 'R0lG',\n },\n {\n mimeType: 'image/png' as const,\n bytesPrefix: [0x89, 0x50, 0x4e, 0x47],\n base64Prefix: 'iVBORw',\n },\n {\n mimeType: 'image/jpeg' as const,\n bytesPrefix: [0xff, 0xd8],\n base64Prefix: '/9j/',\n },\n {\n mimeType: 'image/webp' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46],\n base64Prefix: 'UklGRg',\n },\n {\n mimeType: 'image/bmp' as const,\n bytesPrefix: [0x42, 0x4d],\n base64Prefix: 'Qk',\n },\n {\n mimeType: 'image/tiff' as const,\n bytesPrefix: [0x49, 0x49, 0x2a, 0x00],\n base64Prefix: 'SUkqAA',\n },\n {\n mimeType: 'image/tiff' as const,\n bytesPrefix: [0x4d, 0x4d, 0x00, 0x2a],\n base64Prefix: 'TU0AKg',\n },\n {\n mimeType: 'image/avif' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66,\n ],\n base64Prefix: 'AAAAIGZ0eXBhdmlm',\n },\n {\n mimeType: 'image/heic' as const,\n bytesPrefix: [\n 0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63,\n ],\n base64Prefix: 'AAAAIGZ0eXBoZWlj',\n },\n] as const;\n\nexport const audioMimeTypeSignatures = [\n {\n mimeType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfb],\n base64Prefix: '//s=',\n },\n {\n mimeType: 'audio/wav' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46],\n base64Prefix: 'UklGR',\n },\n {\n mimeType: 'audio/ogg' as const,\n bytesPrefix: [0x4f, 0x67, 0x67, 0x53],\n base64Prefix: 'T2dnUw',\n },\n {\n mimeType: 'audio/flac' as const,\n bytesPrefix: [0x66, 0x4c, 0x61, 0x43],\n base64Prefix: 'ZkxhQw',\n },\n {\n mimeType: 'audio/aac' as const,\n bytesPrefix: [0x40, 0x15, 0x00, 0x00],\n base64Prefix: 'QBUA',\n },\n {\n mimeType: 'audio/mp4' as const,\n bytesPrefix: [0x66, 0x74, 0x79, 0x70],\n base64Prefix: 'ZnR5cA',\n },\n] as const;\n\nconst stripID3 = (data: Uint8Array | string) => {\n const bytes =\n typeof data === 'string' ? convertBase64ToUint8Array(data) : data;\n const id3Size =\n ((bytes[6] & 0x7f) << 21) |\n ((bytes[7] & 0x7f) << 14) |\n ((bytes[8] & 0x7f) << 7) |\n (bytes[9] & 0x7f);\n\n // The raw MP3 starts here\n return bytes.slice(id3Size + 10);\n};\n\nfunction stripID3TagsIfPresent(data: Uint8Array | string): Uint8Array | string {\n const hasId3 =\n (typeof data === 'string' && data.startsWith('SUQz')) ||\n (typeof data !== 'string' &&\n data.length > 10 &&\n data[0] === 0x49 && // 'I'\n data[1] === 0x44 && // 'D'\n data[2] === 0x33); // '3'\n\n return hasId3 ? stripID3(data) : data;\n}\n\nexport function detectMimeType({\n data,\n signatures,\n}: {\n data: Uint8Array | string;\n signatures: typeof audioMimeTypeSignatures | typeof imageMimeTypeSignatures;\n}): (typeof signatures)[number]['mimeType'] | undefined {\n const processedData = stripID3TagsIfPresent(data);\n\n for (const signature of signatures) {\n if (\n typeof processedData === 'string'\n ? processedData.startsWith(signature.base64Prefix)\n : processedData.length >= signature.bytesPrefix.length &&\n signature.bytesPrefix.every(\n (byte, index) => processedData[index] === byte,\n )\n ) {\n return signature.mimeType;\n }\n }\n\n return undefined;\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 { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_DownloadError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class DownloadError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly url: string;\n readonly statusCode?: number;\n readonly statusText?: string;\n\n constructor({\n url,\n statusCode,\n statusText,\n cause,\n message = cause == null\n ? `Failed to download ${url}: ${statusCode} ${statusText}`\n : `Failed to download ${url}: ${cause}`,\n }: {\n url: string;\n statusCode?: number;\n statusText?: string;\n message?: string;\n cause?: unknown;\n }) {\n super({ name, message, cause });\n\n this.url = url;\n this.statusCode = statusCode;\n this.statusText = statusText;\n }\n\n static isInstance(error: unknown): error is DownloadError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { DownloadError } from './download-error';\n\nexport async function download({ url }: { url: URL }): Promise<{\n data: Uint8Array;\n mimeType: string | undefined;\n}> {\n const urlText = url.toString();\n try {\n const response = await fetch(urlText);\n\n if (!response.ok) {\n throw new DownloadError({\n url: urlText,\n statusCode: response.status,\n statusText: response.statusText,\n });\n }\n\n return {\n data: new Uint8Array(await response.arrayBuffer()),\n mimeType: response.headers.get('content-type') ?? undefined,\n };\n } catch (error) {\n if (DownloadError.isInstance(error)) {\n throw error;\n }\n\n throw new DownloadError({ url: urlText, cause: error });\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidDataContentError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidDataContentError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly content: unknown;\n\n constructor({\n content,\n cause,\n message = `Invalid data content. Expected a base64 string, Uint8Array, ArrayBuffer, or Buffer, but got ${typeof content}.`,\n }: {\n content: unknown;\n cause?: unknown;\n message?: string;\n }) {\n super({ name, message, cause });\n\n this.content = content;\n }\n\n static isInstance(error: unknown): error is InvalidDataContentError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import {\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 { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidMessageRoleError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidMessageRoleError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly role: string;\n\n constructor({\n role,\n message = `Invalid message role: '${role}'. Must be one of: \"system\", \"user\", \"assistant\", \"tool\".`,\n }: {\n role: string;\n message?: string;\n }) {\n super({ name, message });\n\n this.role = role;\n }\n\n static isInstance(error: unknown): error is InvalidMessageRoleError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","export function splitDataUrl(dataUrl: string): {\n mimeType: string | undefined;\n base64Content: string | undefined;\n} {\n try {\n const [header, base64Content] = dataUrl.split(',');\n return {\n mimeType: header.split(';')[0].split(':')[1],\n base64Content,\n };\n } catch (error) {\n return {\n mimeType: undefined,\n base64Content: undefined,\n };\n }\n}\n","import {\n LanguageModelV1FilePart,\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1Prompt,\n LanguageModelV1TextPart,\n} from '@ai-sdk/provider';\nimport { download } from '../../util/download';\nimport { CoreMessage } from '../prompt/message';\nimport {\n detectMimeType,\n imageMimeTypeSignatures,\n} from '../util/detect-mimetype';\nimport { FilePart, ImagePart, TextPart } from './content-part';\nimport {\n convertDataContentToBase64String,\n convertDataContentToUint8Array,\n DataContent,\n} from './data-content';\nimport { InvalidMessageRoleError } from './invalid-message-role-error';\nimport { splitDataUrl } from './split-data-url';\nimport { StandardizedPrompt } from './standardize-prompt';\n\nexport async function convertToLanguageModelPrompt({\n prompt,\n modelSupportsImageUrls = true,\n modelSupportsUrl = () => false,\n downloadImplementation = download,\n}: {\n prompt: StandardizedPrompt;\n modelSupportsImageUrls: boolean | undefined;\n modelSupportsUrl: undefined | ((url: URL) => boolean);\n downloadImplementation?: typeof download;\n}): Promise<LanguageModelV1Prompt> {\n const downloadedAssets = await downloadAssets(\n prompt.messages,\n downloadImplementation,\n modelSupportsImageUrls,\n modelSupportsUrl,\n );\n\n return [\n ...(prompt.system != null\n ? [{ role: 'system' as const, content: prompt.system }]\n : []),\n ...prompt.messages.map(message =>\n convertToLanguageModelMessage(message, downloadedAssets),\n ),\n ];\n}\n\n/**\n * Convert a CoreMessage to a LanguageModelV1Message.\n *\n * @param message The CoreMessage to convert.\n * @param downloadedAssets A map of URLs to their downloaded data. Only\n * available if the model does not support URLs, null otherwise.\n */\nexport function convertToLanguageModelMessage(\n message: CoreMessage,\n downloadedAssets: Record<\n string,\n { mimeType: string | undefined; data: Uint8Array }\n >,\n): LanguageModelV1Message {\n const role = message.role;\n switch (role) {\n case 'system': {\n return {\n role: 'system',\n content: message.content,\n providerMetadata:\n message.providerOptions ?? message.experimental_providerMetadata,\n };\n }\n\n case 'user': {\n if (typeof message.content === 'string') {\n return {\n role: 'user',\n content: [{ type: 'text', text: message.content }],\n providerMetadata:\n message.providerOptions ?? message.experimental_providerMetadata,\n };\n }\n\n return {\n role: 'user',\n content: message.content\n .map(part => convertPartToLanguageModelPart(part, downloadedAssets))\n // remove empty text parts:\n .filter(part => part.type !== 'text' || part.text !== ''),\n providerMetadata:\n message.providerOptions ?? message.experimental_providerMetadata,\n };\n }\n\n case 'assistant': {\n if (typeof message.content === 'string') {\n return {\n role: 'assistant',\n content: [{ type: 'text', text: message.content }],\n providerMetadata:\n message.providerOptions ?? message.experimental_providerMetadata,\n };\n }\n\n return {\n role: 'assistant',\n content: message.content\n .filter(\n // remove empty text parts:\n part => part.type !== 'text' || part.text !== '',\n )\n .map(part => {\n const providerOptions =\n part.providerOptions ?? part.experimental_providerMetadata;\n\n switch (part.type) {\n case 'file': {\n return {\n type: 'file',\n data:\n part.data instanceof URL\n ? part.data\n : convertDataContentToBase64String(part.data),\n filename: part.filename,\n mimeType: part.mimeType,\n providerMetadata: providerOptions,\n };\n }\n case 'reasoning': {\n return {\n type: 'reasoning',\n text: part.text,\n signature: part.signature,\n providerMetadata: providerOptions,\n };\n }\n case 'redacted-reasoning': {\n return {\n type: 'redacted-reasoning',\n data: part.data,\n providerMetadata: providerOptions,\n };\n }\n case 'text': {\n return {\n type: 'text' as const,\n text: part.text,\n providerMetadata: providerOptions,\n };\n }\n case 'tool-call': {\n return {\n type: 'tool-call' as const,\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n args: part.args,\n providerMetadata: providerOptions,\n };\n }\n }\n }),\n providerMetadata:\n message.providerOptions ?? message.experimental_providerMetadata,\n };\n }\n\n case 'tool': {\n return {\n role: 'tool',\n content: message.content.map(part => ({\n type: 'tool-result',\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n result: part.result,\n content: part.experimental_content,\n isError: part.isError,\n providerMetadata:\n part.providerOptions ?? part.experimental_providerMetadata,\n })),\n providerMetadata:\n message.providerOptions ?? message.experimental_providerMetadata,\n };\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new InvalidMessageRoleError({ role: _exhaustiveCheck });\n }\n }\n}\n\n/**\n * Downloads images and files from URLs in the messages.\n */\nasync function downloadAssets(\n messages: CoreMessage[],\n downloadImplementation: typeof download,\n modelSupportsImageUrls: boolean | undefined,\n modelSupportsUrl: (url: URL) => boolean,\n): Promise<Record<string, { mimeType: string | undefined; data: Uint8Array }>> {\n const urls = messages\n .filter(message => message.role === 'user')\n .map(message => message.content)\n .filter((content): content is Array<TextPart | ImagePart | FilePart> =>\n Array.isArray(content),\n )\n .flat()\n .filter(\n (part): part is ImagePart | FilePart =>\n part.type === 'image' || part.type === 'file',\n )\n /**\n * Filter out image parts if the model supports image URLs, before letting it\n * decide if it supports a particular URL.\n */\n .filter(\n (part): part is ImagePart | FilePart =>\n !(part.type === 'image' && modelSupportsImageUrls === true),\n )\n .map(part => (part.type === 'image' ? part.image : part.data))\n .map(part =>\n // support string urls:\n typeof part === 'string' &&\n (part.startsWith('http:') || part.startsWith('https:'))\n ? new URL(part)\n : part,\n )\n .filter((image): image is URL => image instanceof URL)\n /**\n * Filter out URLs that the model supports natively, so we don't download them.\n */\n .filter(url => !modelSupportsUrl(url));\n\n // download in parallel:\n const downloadedImages = await Promise.all(\n urls.map(async url => ({\n url,\n data: await downloadImplementation({ url }),\n })),\n );\n\n return Object.fromEntries(\n downloadedImages.map(({ url, data }) => [url.toString(), data]),\n );\n}\n\n/**\n * Convert part of a message to a LanguageModelV1Part.\n * @param part The part to convert.\n * @param downloadedAssets A map of URLs to their downloaded data. Only\n * available if the model does not support URLs, null otherwise.\n *\n * @returns The converted part.\n */\nfunction convertPartToLanguageModelPart(\n part: TextPart | ImagePart | FilePart,\n downloadedAssets: Record<\n string,\n { mimeType: string | undefined; data: Uint8Array }\n >,\n):\n | LanguageModelV1TextPart\n | LanguageModelV1ImagePart\n | LanguageModelV1FilePart {\n if (part.type === 'text') {\n return {\n type: 'text',\n text: part.text,\n providerMetadata:\n part.providerOptions ?? part.experimental_providerMetadata,\n };\n }\n\n let mimeType: string | undefined = part.mimeType;\n let data: DataContent | URL;\n let content: URL | ArrayBuffer | string;\n let normalizedData: Uint8Array | URL;\n\n const type = part.type;\n switch (type) {\n case 'image':\n data = part.image;\n break;\n case 'file':\n data = part.data;\n break;\n default:\n throw new Error(`Unsupported part type: ${type}`);\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 try {\n content = typeof data === 'string' ? new URL(data) : data;\n } catch (error) {\n content = data;\n }\n\n // If we successfully created a URL, we can use that to normalize the data\n // either by passing it through or converting normalizing the base64 content\n // to a Uint8Array.\n if (content instanceof URL) {\n // If the content is a data URL, we want to convert that to a Uint8Array\n if (content.protocol === 'data:') {\n const { mimeType: dataUrlMimeType, base64Content } = splitDataUrl(\n content.toString(),\n );\n\n if (dataUrlMimeType == null || base64Content == null) {\n throw new Error(`Invalid data URL format in part ${type}`);\n }\n\n mimeType = dataUrlMimeType;\n normalizedData = convertDataContentToUint8Array(base64Content);\n } else {\n /**\n * If the content is a URL, we should first see if it was downloaded. And if not,\n * we can let the model decide if it wants to support the URL. This also allows\n * for non-HTTP URLs to be passed through (e.g. gs://).\n */\n const downloadedFile = downloadedAssets[content.toString()];\n if (downloadedFile) {\n normalizedData = downloadedFile.data;\n mimeType ??= downloadedFile.mimeType;\n } else {\n normalizedData = content;\n }\n }\n } else {\n // Since we know now the content is not a URL, we can attempt to normalize\n // the data assuming it is some sort of data.\n normalizedData = convertDataContentToUint8Array(content);\n }\n\n // Now that we have the normalized data either as a URL or a Uint8Array,\n // we can create the LanguageModelV1Part.\n switch (type) {\n case 'image': {\n // When possible, try to detect the mimetype automatically\n // to deal with incorrect mimetype inputs.\n // When detection fails, use provided mimetype.\n\n if (normalizedData instanceof Uint8Array) {\n mimeType =\n detectMimeType({\n data: normalizedData,\n signatures: imageMimeTypeSignatures,\n }) ?? mimeType;\n }\n return {\n type: 'image',\n image: normalizedData,\n mimeType,\n providerMetadata:\n part.providerOptions ?? part.experimental_providerMetadata,\n };\n }\n\n case 'file': {\n // We should have a mimeType at this point, if not, throw an error.\n if (mimeType == null) {\n throw new Error(`Mime type is missing for file part`);\n }\n\n return {\n type: 'file',\n data:\n normalizedData instanceof Uint8Array\n ? convertDataContentToBase64String(normalizedData)\n : normalizedData,\n filename: part.filename,\n mimeType,\n providerMetadata:\n part.providerOptions ?? part.experimental_providerMetadata,\n };\n }\n }\n}\n","import { InvalidArgumentError } from '../../errors/invalid-argument-error';\nimport { CallSettings } from './call-settings';\n\n/**\n * Validates call settings and sets default values.\n */\nexport function prepareCallSettings({\n maxTokens,\n temperature,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n stopSequences,\n seed,\n}: Omit<CallSettings, 'abortSignal' | 'headers' | 'maxRetries'>): Omit<\n CallSettings,\n 'abortSignal' | 'headers' | 'maxRetries'\n> {\n if (maxTokens != null) {\n if (!Number.isInteger(maxTokens)) {\n throw new InvalidArgumentError({\n parameter: 'maxTokens',\n value: maxTokens,\n message: 'maxTokens must be an integer',\n });\n }\n\n if (maxTokens < 1) {\n throw new InvalidArgumentError({\n parameter: 'maxTokens',\n value: maxTokens,\n message: 'maxTokens must be >= 1',\n });\n }\n }\n\n if (temperature != null) {\n if (typeof temperature !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'temperature',\n value: temperature,\n message: 'temperature must be a number',\n });\n }\n }\n\n if (topP != null) {\n if (typeof topP !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'topP',\n value: topP,\n message: 'topP must be a number',\n });\n }\n }\n\n if (topK != null) {\n if (typeof topK !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'topK',\n value: topK,\n message: 'topK must be a number',\n });\n }\n }\n\n if (presencePenalty != null) {\n if (typeof presencePenalty !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'presencePenalty',\n value: presencePenalty,\n message: 'presencePenalty must be a number',\n });\n }\n }\n\n if (frequencyPenalty != null) {\n if (typeof frequencyPenalty !== 'number') {\n throw new InvalidArgumentError({\n parameter: 'frequencyPenalty',\n value: frequencyPenalty,\n message: 'frequencyPenalty must be a number',\n });\n }\n }\n\n if (seed != null) {\n if (!Number.isInteger(seed)) {\n throw new InvalidArgumentError({\n parameter: 'seed',\n value: seed,\n message: 'seed must be an integer',\n });\n }\n }\n\n return {\n maxTokens,\n // TODO v5 remove default 0 for temperature\n temperature: temperature ?? 0,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n stopSequences:\n stopSequences != null && stopSequences.length > 0\n ? stopSequences\n : undefined,\n seed,\n };\n}\n","import { Attachment } from '@ai-sdk/ui-utils';\nimport { FilePart, ImagePart, TextPart } from './content-part';\nimport {\n convertDataContentToUint8Array,\n convertUint8ArrayToText,\n} from './data-content';\n\ntype ContentPart = TextPart | ImagePart | FilePart;\n\n/**\n * Converts a list of attachments to a list of content parts\n * for consumption by `ai/core` functions.\n * Currently only supports images and text attachments.\n */\nexport function attachmentsToParts(attachments: Attachment[]): ContentPart[] {\n const parts: ContentPart[] = [];\n\n for (const attachment of attachments) {\n let url;\n\n try {\n url = new URL(attachment.url);\n } catch (error) {\n throw new Error(`Invalid URL: ${attachment.url}`);\n }\n\n switch (url.protocol) {\n case 'http:':\n case 'https:': {\n if (attachment.contentType?.startsWith('image/')) {\n parts.push({ type: 'image', image: url });\n } else {\n if (!attachment.contentType) {\n throw new Error(\n 'If the attachment is not an image, it must specify a content type',\n );\n }\n\n parts.push({\n type: 'file',\n data: url,\n mimeType: attachment.contentType,\n });\n }\n break;\n }\n\n case 'data:': {\n let header;\n let base64Content;\n let mimeType;\n\n try {\n [header, base64Content] = attachment.url.split(',');\n mimeType = header.split(';')[0].split(':')[1];\n } catch (error) {\n throw new Error(`Error processing data URL: ${attachment.url}`);\n }\n\n if (mimeType == null || base64Content == null) {\n throw new Error(`Invalid data URL format: ${attachment.url}`);\n }\n\n if (attachment.contentType?.startsWith('image/')) {\n parts.push({\n type: 'image',\n image: convertDataContentToUint8Array(base64Content),\n });\n } else if (attachment.contentType?.startsWith('text/')) {\n parts.push({\n type: 'text',\n text: convertUint8ArrayToText(\n convertDataContentToUint8Array(base64Content),\n ),\n });\n } else {\n if (!attachment.contentType) {\n throw new Error(\n 'If the attachment is not an image or text, it must specify a content type',\n );\n }\n\n parts.push({\n type: 'file',\n data: base64Content,\n mimeType: attachment.contentType,\n });\n }\n\n break;\n }\n\n default: {\n throw new Error(`Unsupported URL protocol: ${url.protocol}`);\n }\n }\n }\n\n return parts;\n}\n","import { AISDKError } from '@ai-sdk/provider';\nimport { Message } from '@ai-sdk/ui-utils';\n\nconst name = 'AI_MessageConversionError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class MessageConversionError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly originalMessage: Omit<Message, 'id'>;\n\n constructor({\n originalMessage,\n message,\n }: {\n originalMessage: Omit<Message, 'id'>;\n message: string;\n }) {\n super({ name, message });\n\n this.originalMessage = originalMessage;\n }\n\n static isInstance(error: unknown): error is MessageConversionError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import {\n FileUIPart,\n Message,\n ReasoningUIPart,\n TextUIPart,\n ToolInvocationUIPart,\n} from '@ai-sdk/ui-utils';\nimport { ToolSet } from '../generate-text/tool-set';\nimport {\n AssistantContent,\n CoreMessage,\n ToolCallPart,\n ToolResultPart,\n} from '../prompt';\nimport { attachmentsToParts } from './attachments-to-parts';\nimport { MessageConversionError } from './message-conversion-error';\n\n/**\nConverts an array of messages from useChat into an array of CoreMessages that can be used\nwith the AI core functions (e.g. `streamText`).\n */\nexport function convertToCoreMessages<TOOLS extends ToolSet = never>(\n messages: Array<Omit<Message, 'id'>>,\n options?: { tools?: TOOLS },\n) {\n const tools = options?.tools ?? ({} as TOOLS);\n const coreMessages: CoreMessage[] = [];\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n const isLastMessage = i === messages.length - 1;\n const { role, content, experimental_attachments } = message;\n\n switch (role) {\n case 'system': {\n coreMessages.push({\n role: 'system',\n content,\n });\n break;\n }\n\n case 'user': {\n if (message.parts == null) {\n coreMessages.push({\n role: 'user',\n content: experimental_attachments\n ? [\n { type: 'text', text: content },\n ...attachmentsToParts(experimental_attachments),\n ]\n : content,\n });\n } else {\n const textParts = message.parts\n .filter(part => part.type === 'text')\n .map(part => ({\n type: 'text' as const,\n text: part.text,\n }));\n\n coreMessages.push({\n role: 'user',\n content: experimental_attachments\n ? [...textParts, ...attachmentsToParts(experimental_attachments)]\n : textParts,\n });\n }\n break;\n }\n\n case 'assistant': {\n if (message.parts != null) {\n let currentStep = 0;\n let blockHasToolInvocations = false;\n let block: Array<\n TextUIPart | ToolInvocationUIPart | ReasoningUIPart | FileUIPart\n > = [];\n\n function processBlock() {\n const content: AssistantContent = [];\n\n for (const part of block) {\n switch (part.type) {\n case 'file':\n case 'text': {\n content.push(part);\n break;\n }\n case 'reasoning': {\n for (const detail of part.details) {\n switch (detail.type) {\n case 'text':\n content.push({\n type: 'reasoning' as const,\n text: detail.text,\n signature: detail.signature,\n });\n break;\n case 'redacted':\n content.push({\n type: 'redacted-reasoning' as const,\n data: detail.data,\n });\n break;\n }\n }\n break;\n }\n case 'tool-invocation':\n content.push({\n type: 'tool-call' as const,\n toolCallId: part.toolInvocation.toolCallId,\n toolName: part.toolInvocation.toolName,\n args: part.toolInvocation.args,\n });\n break;\n default: {\n const _exhaustiveCheck: never = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n }\n\n coreMessages.push({\n role: 'assistant',\n content,\n });\n\n // check if there are tool invocations with results in the block\n const stepInvocations = block\n .filter(\n (\n part:\n | TextUIPart\n | ToolInvocationUIPart\n | ReasoningUIPart\n | FileUIPart,\n ): part is ToolInvocationUIPart =>\n part.type === 'tool-invocation',\n )\n .map(part => part.toolInvocation);\n\n // tool message with tool results\n if (stepInvocations.length > 0) {\n coreMessages.push({\n role: 'tool',\n content: stepInvocations.map(\n (toolInvocation): ToolResultPart => {\n if (!('result' in toolInvocation)) {\n throw new MessageConversionError({\n originalMessage: message,\n message:\n 'ToolInvocation must have a result: ' +\n JSON.stringify(toolInvocation),\n });\n }\n\n const { toolCallId, toolName, result } = toolInvocation;\n\n const tool = tools[toolName];\n return tool?.experimental_toToolResultContent != null\n ? {\n type: 'tool-result',\n toolCallId,\n toolName,\n result: tool.experimental_toToolResultContent(result),\n experimental_content:\n tool.experimental_toToolResultContent(result),\n }\n : {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n },\n ),\n });\n }\n\n // updates for next block\n block = [];\n blockHasToolInvocations = false;\n currentStep++;\n }\n\n for (const part of message.parts) {\n switch (part.type) {\n case 'text': {\n if (blockHasToolInvocations) {\n processBlock(); // text must come before tool invocations\n }\n block.push(part);\n break;\n }\n case 'file':\n case 'reasoning': {\n block.push(part);\n break;\n }\n case 'tool-invocation': {\n if ((part.toolInvocation.step ?? 0) !== currentStep) {\n processBlock();\n }\n block.push(part);\n blockHasToolInvocations = true;\n break;\n }\n }\n }\n\n processBlock();\n\n break;\n }\n\n const toolInvocations = message.toolInvocations;\n\n if (toolInvocations == null || toolInvocations.length === 0) {\n coreMessages.push({ role: 'assistant', content });\n break;\n }\n\n const maxStep = toolInvocations.reduce((max, toolInvocation) => {\n return Math.max(max, toolInvocation.step ?? 0);\n }, 0);\n\n for (let i = 0; i <= maxStep; i++) {\n const stepInvocations = toolInvocations.filter(\n toolInvocation => (toolInvocation.step ?? 0) === i,\n );\n\n if (stepInvocations.length === 0) {\n continue;\n }\n\n // assistant message with tool calls\n coreMessages.push({\n role: 'assistant',\n content: [\n ...(isLastMessage && content && i === 0\n ? [{ type: 'text' as const, text: content }]\n : []),\n ...stepInvocations.map(\n ({ toolCallId, toolName, args }): ToolCallPart => ({\n type: 'tool-call' as const,\n toolCallId,\n toolName,\n args,\n }),\n ),\n ],\n });\n\n // tool message with tool results\n coreMessages.push({\n role: 'tool',\n content: stepInvocations.map((toolInvocation): ToolResultPart => {\n if (!('result' in toolInvocation)) {\n throw new MessageConversionError({\n originalMessage: message,\n message:\n 'ToolInvocation must have a result: ' +\n JSON.stringify(toolInvocation),\n });\n }\n\n const { toolCallId, toolName, result } = toolInvocation;\n\n const tool = tools[toolName];\n return tool?.experimental_toToolResultContent != null\n ? {\n type: 'tool-result',\n toolCallId,\n toolName,\n result: tool.experimental_toToolResultContent(result),\n experimental_content:\n tool.experimental_toToolResultContent(result),\n }\n : {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n }),\n });\n }\n\n if (content && !isLastMessage) {\n coreMessages.push({ role: 'assistant', content });\n }\n\n break;\n }\n\n case 'data': {\n // ignore\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = role;\n throw new MessageConversionError({\n originalMessage: message,\n message: `Unsupported role: ${_exhaustiveCheck}`,\n });\n }\n }\n }\n\n return coreMessages;\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 { InvalidPromptError } from '@ai-sdk/provider';\nimport { safeValidateTypes } from '@ai-sdk/provider-utils';\nimport { Message } from '@ai-sdk/ui-utils';\nimport { z } from 'zod';\nimport { ToolSet } from '../generate-text/tool-set';\nimport { convertToCoreMessages } from './convert-to-core-messages';\nimport { CoreMessage, coreMessageSchema } from './message';\nimport { Prompt } from './prompt';\n\nexport type StandardizedPrompt = {\n /**\n * Original prompt type. This is forwarded to the providers and can be used\n * to write send raw text to providers that support it.\n */\n type: 'prompt' | 'messages';\n\n /**\n * System message.\n */\n system?: string;\n\n /**\n * Messages.\n */\n messages: CoreMessage[];\n};\n\nexport function standardizePrompt<TOOLS extends ToolSet>({\n prompt,\n tools,\n}: {\n prompt: Prompt;\n tools: undefined | TOOLS;\n}): StandardizedPrompt {\n if (prompt.prompt == null && prompt.messages == null) {\n throw new InvalidPromptError({\n prompt,\n message: 'prompt or messages must be defined',\n });\n }\n\n if (prompt.prompt != null && prompt.messages != null) {\n throw new InvalidPromptError({\n prompt,\n message: 'prompt and messages cannot be defined at the same time',\n });\n }\n\n // validate that system is a string\n if (prompt.system != null && typeof prompt.system !== 'string') {\n throw new InvalidPromptError({\n prompt,\n message: 'system must be a string',\n });\n }\n\n // type: prompt\n if (prompt.prompt != null) {\n // validate that prompt is a string\n if (typeof prompt.prompt !== 'string') {\n throw new InvalidPromptError({\n prompt,\n message: 'prompt must be a string',\n });\n }\n\n return {\n type: 'prompt',\n system: prompt.system,\n messages: [\n {\n role: 'user',\n content: prompt.prompt,\n },\n ],\n };\n }\n\n // type: messages\n if (prompt.messages != null) {\n const promptType = detectPromptType(prompt.messages);\n\n const messages: CoreMessage[] =\n promptType === 'ui-messages'\n ? convertToCoreMessages(prompt.messages as Omit<Message, 'id'>[], {\n tools,\n })\n : (prompt.messages as CoreMessage[]);\n\n if (messages.length === 0) {\n throw new InvalidPromptError({\n prompt,\n message: 'messages must not be empty',\n });\n }\n\n const validationResult = safeValidateTypes({\n value: messages,\n schema: z.array(coreMessageSchema),\n });\n\n if (!validationResult.success) {\n throw new InvalidPromptError({\n prompt,\n message: [\n 'message must be a CoreMessage or a UI message',\n `Validation error: ${validationResult.error.message}`,\n ].join('\\n'),\n cause: validationResult.error,\n });\n }\n\n return {\n type: 'messages',\n messages,\n system: prompt.system,\n };\n }\n\n throw new Error('unreachable');\n}\n\nfunction detectPromptType(\n prompt: Array<any>,\n): 'ui-messages' | 'messages' | 'other' {\n if (!Array.isArray(prompt)) {\n throw new InvalidPromptError({\n prompt,\n message: [\n 'messages must be an array of CoreMessage or UIMessage',\n `Received non-array value: ${JSON.stringify(prompt)}`,\n ].join('\\n'),\n cause: prompt,\n });\n }\n\n if (prompt.length === 0) {\n return 'messages';\n }\n\n const characteristics = prompt.map(detectSingleMessageCharacteristics);\n\n if (characteristics.some(c => c === 'has-ui-specific-parts')) {\n return 'ui-messages';\n }\n\n const nonMessageIndex = characteristics.findIndex(\n c => c !== 'has-core-specific-parts' && c !== 'message',\n );\n\n if (nonMessageIndex === -1) {\n return 'messages';\n }\n\n throw new InvalidPromptError({\n prompt,\n message: [\n 'messages must be an array of CoreMessage or UIMessage',\n `Received message of type: \"${characteristics[nonMessageIndex]}\" at index ${nonMessageIndex}`,\n `messages[${nonMessageIndex}]: ${JSON.stringify(prompt[nonMessageIndex])}`,\n ].join('\\n'),\n cause: prompt,\n });\n}\n\nfunction detectSingleMessageCharacteristics(\n message: any,\n): 'has-ui-specific-parts' | 'has-core-specific-parts' | 'message' | 'other' {\n if (\n typeof message === 'object' &&\n message !== null &&\n (message.role === 'function' || // UI-only role\n message.role === 'data' || // UI-only role\n 'toolInvocations' in message || // UI-specific field\n 'parts' in message || // UI-specific field\n 'experimental_attachments' in message)\n ) {\n return 'has-ui-specific-parts';\n } else if (\n typeof message === 'object' &&\n message !== null &&\n 'content' in message &&\n (Array.isArray(message.content) || // Core messages can have array content\n 'experimental_providerMetadata' in message ||\n 'providerOptions' in message)\n ) {\n return 'has-core-specific-parts';\n } else if (\n typeof message === 'object' &&\n message !== null &&\n 'role' in message &&\n 'content' in message &&\n typeof message.content === 'string' &&\n ['system', 'user', 'assistant', 'tool'].includes(message.role)\n ) {\n return 'message';\n } else {\n return 'other';\n }\n}\n","/**\nRepresents the number of tokens used in a prompt and completion.\n */\nexport type LanguageModelUsage = {\n /**\nThe number of tokens used in the prompt.\n */\n promptTokens: number;\n\n /**\nThe number of tokens used in the completion.\n */\n completionTokens: number;\n\n /**\nThe total number of tokens used (promptTokens + completionTokens).\n */\n totalTokens: number;\n};\n\n/**\nRepresents the number of tokens used in an embedding.\n */\nexport type EmbeddingModelUsage = {\n /**\nThe number of tokens used in the embedding.\n */\n tokens: number;\n};\n\nexport function calculateLanguageModelUsage({\n promptTokens,\n completionTokens,\n}: {\n promptTokens: number;\n completionTokens: number;\n}): LanguageModelUsage {\n return {\n promptTokens,\n completionTokens,\n totalTokens: promptTokens + completionTokens,\n };\n}\n\nexport function addLanguageModelUsage(\n usage1: LanguageModelUsage,\n usage2: LanguageModelUsage,\n): LanguageModelUsage {\n return {\n promptTokens: usage1.promptTokens + usage2.promptTokens,\n completionTokens: usage1.completionTokens + usage2.completionTokens,\n totalTokens: usage1.totalTokens + usage2.totalTokens,\n };\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","export type AsyncIterableStream<T> = AsyncIterable<T> & ReadableStream<T>;\n\nexport function createAsyncIterableStream<T>(\n source: ReadableStream<T>,\n): AsyncIterableStream<T> {\n const stream = source.pipeThrough(new TransformStream<T, T>());\n\n (stream as AsyncIterableStream<T>)[Symbol.asyncIterator] = () => {\n const reader = stream.getReader();\n return {\n async next(): Promise<IteratorResult<T>> {\n const { done, value } = await reader.read();\n return done ? { done: true, value: undefined } : { done: false, value };\n },\n };\n };\n\n return stream as AsyncIterableStream<T>;\n}\n","import {\n isJSONArray,\n isJSONObject,\n JSONObject,\n JSONSchema7,\n JSONValue,\n TypeValidationError,\n UnsupportedFunctionalityError,\n} from '@ai-sdk/provider';\nimport { safeValidateTypes, ValidationResult } from '@ai-sdk/provider-utils';\nimport { asSchema, DeepPartial, Schema } from '@ai-sdk/ui-utils';\nimport { z } from 'zod';\nimport { NoObjectGeneratedError } from '../../errors/no-object-generated-error';\nimport {\n AsyncIterableStream,\n createAsyncIterableStream,\n} from '../util/async-iterable-stream';\nimport { ObjectStreamPart } from './stream-object-result';\nimport {\n FinishReason,\n LanguageModelResponseMetadata,\n LanguageModelUsage,\n} from '../types';\n\nexport interface OutputStrategy<PARTIAL, RESULT, ELEMENT_STREAM> {\n readonly type: 'object' | 'array' | 'enum' | 'no-schema';\n readonly jsonSchema: JSONSchema7 | undefined;\n\n validatePartialResult({\n value,\n textDelta,\n isFinalDelta,\n }: {\n value: JSONValue;\n textDelta: string;\n isFirstDelta: boolean;\n isFinalDelta: boolean;\n latestObject: PARTIAL | undefined;\n }): ValidationResult<{\n partial: PARTIAL;\n textDelta: string;\n }>;\n validateFinalResult(\n value: JSONValue | undefined,\n context: {\n text: string;\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n },\n ): ValidationResult<RESULT>;\n\n createElementStream(\n originalStream: ReadableStream<ObjectStreamPart<PARTIAL>>,\n ): ELEMENT_STREAM;\n}\n\nconst noSchemaOutputStrategy: OutputStrategy<JSONValue, JSONValue, never> = {\n type: 'no-schema',\n jsonSchema: undefined,\n\n validatePartialResult({ value, textDelta }) {\n return { success: true, value: { partial: value, textDelta } };\n },\n\n validateFinalResult(\n value: JSONValue | undefined,\n context: {\n text: string;\n response: LanguageModelResponseMetadata;\n usage: LanguageModelUsage;\n finishReason: FinishReason;\n },\n ): ValidationResult<JSONValue> {\n return value === undefined\n ? {\n success: false,\n error: new NoObjectGeneratedError({\n message: 'No object generated: response did not match schema.',\n text: context.text,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason,\n }),\n }\n : { success: true, value };\n },\n\n createElementStream() {\n throw new UnsupportedFunctionalityError({\n functionality: 'element streams in no-schema mode',\n });\n },\n};\n\nconst objectOutputStrategy = <OBJECT>(\n schema: Schema<OBJECT>,\n): OutputStrategy<DeepPartial<OBJECT>, OBJECT, never> => ({\n type: 'object',\n jsonSchema: schema.jsonSchema,\n\n validatePartialResult({ value, textDelta }) {\n return {\n success: true,\n value: {\n // Note: currently no validation of partial results:\n partial: value as DeepPartial<OBJECT>,\n textDelta,\n },\n };\n },\n\n validateFinalResult(value: JSONValue | undefined): ValidationResult<OBJECT> {\n return safeValidateTypes({ value, schema });\n },\n\n createElementStream() {\n throw new UnsupportedFunctionalityError({\n functionality: 'element streams in object mode',\n });\n },\n});\n\nconst arrayOutputStrategy = <ELEMENT>(\n schema: Schema<ELEMENT>,\n): OutputStrategy<ELEMENT[], ELEMENT[], AsyncIterableStream<ELEMENT>> => {\n // remove $schema from schema.jsonSchema:\n const { $schema, ...itemSchema } = schema.jsonSchema;\n\n return {\n type: 'enum',\n\n // wrap in object that contains array of elements, since most LLMs will not\n // be able to generate an array directly:\n // possible future optimization: use arrays directly when model supports grammar-guided generation\n jsonSchema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n elements: { type: 'array', items: itemSchema },\n },\n required: ['elements'],\n additionalProperties: false,\n },\n\n validatePartialResult({ value, latestObject, isFirstDelta, isFinalDelta }) {\n // check that the value is an object that contains an array of elements:\n if (!isJSONObject(value) || !isJSONArray(value.elements)) {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be an object that contains an array of elements',\n }),\n };\n }\n\n const inputArray = value.elements as Array<JSONObject>;\n const resultArray: Array<ELEMENT> = [];\n\n for (let i = 0; i < inputArray.length; i++) {\n const element = inputArray[i];\n const result = safeValidateTypes({ value: element, schema });\n\n // special treatment for last processed element:\n // ignore parse or validation failures, since they indicate that the\n // last element is incomplete and should not be included in the result,\n // unless it is the final delta\n if (i === inputArray.length - 1 && !isFinalDelta) {\n continue;\n }\n\n if (!result.success) {\n return result;\n }\n\n resultArray.push(result.value);\n }\n\n // calculate delta:\n const publishedElementCount = latestObject?.length ?? 0;\n\n let textDelta = '';\n\n if (isFirstDelta) {\n textDelta += '[';\n }\n\n if (publishedElementCount > 0) {\n textDelta += ',';\n }\n\n textDelta += resultArray\n .slice(publishedElementCount) // only new elements\n .map(element => JSON.stringify(element))\n .join(',');\n\n if (isFinalDelta) {\n textDelta += ']';\n }\n\n return {\n success: true,\n value: {\n partial: resultArray,\n textDelta,\n },\n };\n },\n\n validateFinalResult(\n value: JSONValue | undefined,\n ): ValidationResult<Array<ELEMENT>> {\n // check that the value is an object that contains an array of elements:\n if (!isJSONObject(value) || !isJSONArray(value.elements)) {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be an object that contains an array of elements',\n }),\n };\n }\n\n const inputArray = value.elements as Array<JSONObject>;\n\n // check that each element in the array is of the correct type:\n for (const element of inputArray) {\n const result = safeValidateTypes({ value: element, schema });\n if (!result.success) {\n return result;\n }\n }\n\n return { success: true, value: inputArray as Array<ELEMENT> };\n },\n\n createElementStream(\n originalStream: ReadableStream<ObjectStreamPart<ELEMENT[]>>,\n ) {\n let publishedElements = 0;\n\n return createAsyncIterableStream(\n originalStream.pipeThrough(\n new TransformStream<ObjectStreamPart<ELEMENT[]>, ELEMENT>({\n transform(chunk, controller) {\n switch (chunk.type) {\n case 'object': {\n const array = chunk.object;\n\n // publish new elements one by one:\n for (\n ;\n publishedElements < array.length;\n publishedElements++\n ) {\n controller.enqueue(array[publishedElements]);\n }\n\n break;\n }\n\n case 'text-delta':\n case 'finish':\n case 'error': // suppress error (use onError instead)\n break;\n\n default: {\n const _exhaustiveCheck: never = chunk;\n throw new Error(\n `Unsupported chunk type: ${_exhaustiveCheck}`,\n );\n }\n }\n },\n }),\n ),\n );\n },\n };\n};\n\nconst enumOutputStrategy = <ENUM extends string>(\n enumValues: Array<ENUM>,\n): OutputStrategy<ENUM, ENUM, never> => {\n return {\n type: 'enum',\n\n // wrap in object that contains result, since most LLMs will not\n // be able to generate an enum value directly:\n // possible future optimization: use enums directly when model supports top-level enums\n jsonSchema: {\n $schema: 'http://json-schema.org/draft-07/schema#',\n type: 'object',\n properties: {\n result: { type: 'string', enum: enumValues },\n },\n required: ['result'],\n additionalProperties: false,\n },\n\n validateFinalResult(value: JSONValue | undefined): ValidationResult<ENUM> {\n // check that the value is an object that contains an array of elements:\n if (!isJSONObject(value) || typeof value.result !== 'string') {\n return {\n success: false,\n error: new TypeValidationError({\n value,\n cause:\n 'value must be an object that contains a string in the \"result\" property.',\n }),\n };\n }\n\n const result = value.result as string;\n\n return enumValues.includes(result as ENUM)\n ? { success: true, value: result as ENUM }\n : {\n success: false,\n error: new TypeValidationError({\n value,\n cause: 'value must be a string in the enum',\n }),\n };\n },\n\n validatePartialResult() {\n // no streaming in enum mode\n throw new UnsupportedFunctionalityError({\n functionality: 'partial results in enum mode',\n });\n },\n\n createElementStream() {\n // no streaming in enum mode\n throw new UnsupportedFunctionalityError({\n functionality: 'element streams in enum mode',\n });\n },\n };\n};\n\nexport function getOutputStrategy<SCHEMA>({\n output,\n schema,\n enumValues,\n}: {\n output: 'object' | 'array' | 'enum' | 'no-schema';\n schema?: z.Schema<SCHEMA, z.ZodTypeDef, any> | Schema<SCHEMA>;\n enumValues?: Array<SCHEMA>;\n}): OutputStrategy<any, any, any> {\n switch (output) {\n case 'object':\n return objectOutputStrategy(asSchema(schema!));\n case 'array':\n return arrayOutputStrategy(asSchema(schema!));\n case 'enum':\n return enumOutputStrategy(enumValues! as Array<string>);\n case 'no-schema':\n return noSchemaOutputStrategy;\n default: {\n const _exhaustiveCheck: never = output;\n throw new Error(`Unsupported output: ${_exhaustiveCheck}`);\n }\n }\n}\n","import { z } from 'zod';\nimport { InvalidArgumentError } from '../../errors/invalid-argument-error';\nimport { Schema } from '@ai-sdk/ui-utils';\n\nexport function validateObjectGenerationInput({\n output,\n mode,\n schema,\n schemaName,\n schemaDescription,\n enumValues,\n}: {\n output?: 'object' | 'array' | 'enum' | 'no-schema';\n schema?: z.Schema<any, z.ZodTypeDef, any> | Schema<any>;\n schemaName?: string;\n schemaDescription?: string;\n enumValues?: Array<unknown>;\n mode?: 'auto' | 'json' | 'tool';\n}) {\n if (\n output != null &&\n output !== 'object' &&\n output !== 'array' &&\n output !== 'enum' &&\n output !== 'no-schema'\n ) {\n throw new InvalidArgumentError({\n parameter: 'output',\n value: output,\n message: 'Invalid output type.',\n });\n }\n\n if (output === 'no-schema') {\n if (mode === 'auto' || mode === 'tool') {\n throw new InvalidArgumentError({\n parameter: 'mode',\n value: mode,\n message: 'Mode must be \"json\" for no-schema output.',\n });\n }\n\n if (schema != null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Schema is not supported for no-schema output.',\n });\n }\n\n if (schemaDescription != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaDescription',\n value: schemaDescription,\n message: 'Schema description is not supported for no-schema output.',\n });\n }\n\n if (schemaName != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaName',\n value: schemaName,\n message: 'Schema name is not supported for no-schema output.',\n });\n }\n\n if (enumValues != null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are not supported for no-schema output.',\n });\n }\n }\n\n if (output === 'object') {\n if (schema == null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Schema is required for object output.',\n });\n }\n\n if (enumValues != null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are not supported for object output.',\n });\n }\n }\n\n if (output === 'array') {\n if (schema == null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Element schema is required for array output.',\n });\n }\n\n if (enumValues != null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are not supported for array output.',\n });\n }\n }\n\n if (output === 'enum') {\n if (schema != null) {\n throw new InvalidArgumentError({\n parameter: 'schema',\n value: schema,\n message: 'Schema is not supported for enum output.',\n });\n }\n\n if (schemaDescription != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaDescription',\n value: schemaDescription,\n message: 'Schema description is not supported for enum output.',\n });\n }\n\n if (schemaName != null) {\n throw new InvalidArgumentError({\n parameter: 'schemaName',\n value: schemaName,\n message: 'Schema name is not supported for enum output.',\n });\n }\n\n if (enumValues == null) {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value: enumValues,\n message: 'Enum values are required for enum output.',\n });\n }\n\n for (const value of enumValues) {\n if (typeof value !== 'string') {\n throw new InvalidArgumentError({\n parameter: 'enumValues',\n value,\n message: 'Enum values must be strings.',\n });\n }\n }\n }\n}\n","/**\n * Helper utility to serialize prompt content for OpenTelemetry tracing.\n * It is initially created because normalized LanguageModelV1Prompt carries\n * images as Uint8Arrays, on which JSON.stringify acts weirdly, converting\n * them to objects with stringified indices as keys, e.g. {\"0\": 42, \"1\": 69 }.\n */\n\nimport {\n LanguageModelV1ImagePart,\n LanguageModelV1Message,\n LanguageModelV1Prompt,\n LanguageModelV1ProviderMetadata,\n} from '@ai-sdk/provider';\nimport { convertDataContentToBase64String } from './data-content';\n\nexport function stringifyForTelemetry(prompt: LanguageModelV1Prompt): string {\n const processedPrompt = prompt.map((message: LanguageModelV1Message) => {\n return {\n ...message,\n content:\n typeof message.content === 'string'\n ? message.content\n : message.content.map(processPart),\n };\n });\n\n return JSON.stringify(processedPrompt);\n}\n\ntype MessageContentPart = Exclude<\n LanguageModelV1Message['content'],\n string\n>[number];\ntype ProcessedMessageContentPart =\n | Exclude<MessageContentPart, LanguageModelV1ImagePart>\n | {\n type: 'image';\n image: string | URL;\n mimeType?: string;\n providerMetadata?: LanguageModelV1ProviderMetadata;\n };\n\nfunction processPart(part: MessageContentPart): ProcessedMessageContentPart {\n if (part.type === 'image') {\n return {\n ...part,\n image:\n part.image instanceof Uint8Array\n ? convertDataContentToBase64String(part.image)\n : part.image,\n };\n }\n return part;\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","/**\n * Delayed promise. It is only constructed once the value is accessed.\n * This is useful to avoid unhandled promise rejections when the promise is created\n * but not accessed.\n */\nexport class DelayedPromise<T> {\n private status:\n | { type: 'pending' }\n | { type: 'resolved'; value: T }\n | { type: 'rejected'; error: unknown } = { type: 'pending' };\n private promise: Promise<T> | undefined;\n private _resolve: undefined | ((value: T) => void) = undefined;\n private _reject: undefined | ((error: unknown) => void) = undefined;\n\n get value(): Promise<T> {\n if (this.promise) {\n return this.promise;\n }\n\n this.promise = new Promise<T>((resolve, reject) => {\n if (this.status.type === 'resolved') {\n resolve(this.status.value);\n } else if (this.status.type === 'rejected') {\n reject(this.status.error);\n }\n\n this._resolve = resolve;\n this._reject = reject;\n });\n\n return this.promise;\n }\n\n resolve(value: T): void {\n this.status = { type: 'resolved', value };\n\n if (this.promise) {\n this._resolve?.(value);\n }\n }\n\n reject(error: unknown): void {\n this.status = { type: 'rejected', error };\n\n if (this.promise) {\n this._reject?.(error);\n }\n }\n}\n","/**\n * Creates a Promise with externally accessible resolve and reject functions.\n *\n * @template T - The type of the value that the Promise will resolve to.\n * @returns An object containing:\n * - promise: A Promise that can be resolved or rejected externally.\n * - resolve: A function to resolve the Promise with a value of type T.\n * - reject: A function to reject the Promise with an error.\n */\nexport function createResolvablePromise<T = any>(): {\n promise: Promise<T>;\n resolve: (value: T) => void;\n reject: (error: unknown) => void;\n} {\n let resolve: (value: T) => void;\n let reject: (error: unknown) => void;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return {\n promise,\n resolve: resolve!,\n reject: reject!,\n };\n}\n","import { createResolvablePromise } from '../../util/create-resolvable-promise';\n\n/**\n * Creates a stitchable stream that can pipe one stream at a time.\n *\n * @template T - The type of values emitted by the streams.\n * @returns {Object} An object containing the stitchable stream and control methods.\n */\nexport function createStitchableStream<T>(): {\n stream: ReadableStream<T>;\n addStream: (innerStream: ReadableStream<T>) => void;\n close: () => void;\n terminate: () => void;\n} {\n let innerStreamReaders: ReadableStreamDefaultReader<T>[] = [];\n let controller: ReadableStreamDefaultController<T> | null = null;\n let isClosed = false;\n let waitForNewStream = createResolvablePromise<void>();\n\n const processPull = async () => {\n // Case 1: Outer stream is closed and no more inner streams\n if (isClosed && innerStreamReaders.length === 0) {\n controller?.close();\n return;\n }\n\n // Case 2: No inner streams available, but outer stream is open\n // wait for a new inner stream to be added or the outer stream to close\n if (innerStreamReaders.length === 0) {\n waitForNewStream = createResolvablePromise<void>();\n await waitForNewStream.promise;\n return processPull();\n }\n\n try {\n const { value, done } = await innerStreamReaders[0].read();\n\n if (done) {\n // Case 3: Current inner stream is done\n innerStreamReaders.shift(); // Remove the finished stream\n\n // Continue pulling from the next stream if available\n if (innerStreamReaders.length > 0) {\n await processPull();\n } else if (isClosed) {\n controller?.close();\n }\n } else {\n // Case 4: Current inner stream returns an item\n controller?.enqueue(value);\n }\n } catch (error) {\n // Case 5: Current inner stream throws an error\n controller?.error(error);\n innerStreamReaders.shift(); // Remove the errored stream\n\n if (isClosed && innerStreamReaders.length === 0) {\n controller?.close();\n }\n }\n };\n\n return {\n stream: new ReadableStream<T>({\n start(controllerParam) {\n controller = controllerParam;\n },\n pull: processPull,\n async cancel() {\n for (const reader of innerStreamReaders) {\n await reader.cancel();\n }\n innerStreamReaders = [];\n isClosed = true;\n },\n }),\n addStream: (innerStream: ReadableStream<T>) => {\n if (isClosed) {\n throw new Error('Cannot add inner stream: outer stream is closed');\n }\n\n innerStreamReaders.push(innerStream.getReader());\n waitForNewStream.resolve();\n },\n\n /**\n * Gracefully close the outer stream. This will let the inner streams\n * finish processing and then close the outer stream.\n */\n close: () => {\n isClosed = true;\n waitForNewStream.resolve();\n\n if (innerStreamReaders.length === 0) {\n controller?.close();\n }\n },\n\n /**\n * Immediately close the outer stream. This will cancel all inner streams\n * and close the outer stream.\n */\n terminate: () => {\n isClosed = true;\n waitForNewStream.resolve();\n\n innerStreamReaders.forEach(reader => reader.cancel());\n innerStreamReaders = [];\n controller?.close();\n },\n };\n}\n","// Shim for performance.now() to support environments that don't have it:\nexport function now(): number {\n return globalThis?.performance?.now() ?? Date.now();\n}\n","import {\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 { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_NoOutputSpecifiedError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\n/**\nThrown when no output type is specified and output-related methods are called.\n */\nexport class NoOutputSpecifiedError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n constructor({ message = 'No output specified.' }: { message?: string } = {}) {\n super({ name, message });\n }\n\n static isInstance(error: unknown): error is NoOutputSpecifiedError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError, getErrorMessage, JSONValue } from '@ai-sdk/provider';\n\nconst name = 'AI_ToolExecutionError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class ToolExecutionError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly toolName: string;\n readonly toolArgs: JSONValue;\n readonly toolCallId: string;\n\n constructor({\n toolArgs,\n toolName,\n toolCallId,\n cause,\n message = `Error executing tool ${toolName}: ${getErrorMessage(cause)}`,\n }: {\n message?: string;\n toolArgs: JSONValue;\n toolName: string;\n toolCallId: string;\n cause: unknown;\n }) {\n super({ name, message, cause });\n\n this.toolArgs = toolArgs;\n this.toolName = toolName;\n this.toolCallId = toolCallId;\n }\n\n static isInstance(error: unknown): error is ToolExecutionError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","export function isNonEmptyObject(\n object: Record<string, unknown> | undefined | null,\n): object is Record<string, unknown> {\n return object != null && Object.keys(object).length > 0;\n}\n","import {\n LanguageModelV1FunctionTool,\n LanguageModelV1ProviderDefinedTool,\n LanguageModelV1ToolChoice,\n} from '@ai-sdk/provider';\nimport { asSchema } from '@ai-sdk/ui-utils';\nimport { ToolSet } from '../generate-text';\nimport { ToolChoice } from '../types/language-model';\nimport { isNonEmptyObject } from '../util/is-non-empty-object';\n\nexport function prepareToolsAndToolChoice<TOOLS extends ToolSet>({\n tools,\n toolChoice,\n activeTools,\n}: {\n tools: TOOLS | undefined;\n toolChoice: ToolChoice<TOOLS> | undefined;\n activeTools: Array<keyof TOOLS> | undefined;\n}): {\n tools:\n | Array<LanguageModelV1FunctionTool | LanguageModelV1ProviderDefinedTool>\n | undefined;\n toolChoice: LanguageModelV1ToolChoice | undefined;\n} {\n if (!isNonEmptyObject(tools)) {\n return {\n tools: undefined,\n toolChoice: undefined,\n };\n }\n\n // when activeTools is provided, we only include the tools that are in the list:\n const filteredTools =\n activeTools != null\n ? Object.entries(tools).filter(([name]) =>\n activeTools.includes(name as keyof TOOLS),\n )\n : Object.entries(tools);\n\n return {\n tools: filteredTools.map(([name, tool]) => {\n const toolType = tool.type;\n switch (toolType) {\n case undefined:\n case 'function':\n return {\n type: 'function' as const,\n name,\n description: tool.description,\n parameters: asSchema(tool.parameters).jsonSchema,\n };\n case 'provider-defined':\n return {\n type: 'provider-defined' as const,\n name,\n id: tool.id,\n args: tool.args,\n };\n default: {\n const exhaustiveCheck: never = toolType;\n throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);\n }\n }\n }),\n toolChoice:\n toolChoice == null\n ? { type: 'auto' }\n : typeof toolChoice === 'string'\n ? { type: toolChoice }\n : { type: 'tool' as const, toolName: toolChoice.toolName as string },\n };\n}\n","const lastWhitespaceRegexp = /^([\\s\\S]*?)(\\s+)(\\S*)$/;\n\n/**\n * Splits the text on the last whitespace.\n *\n * Whitespace is defined as one or more whitespace characters,\n * e.g. space, tab, newline, etc.\n *\n * @param text - The text to split.\n * @returns The prefix, whitespace, and suffix. Undefined if there is no whitespace.\n */\nexport function splitOnLastWhitespace(text: string):\n | {\n prefix: string;\n whitespace: string;\n suffix: string;\n }\n | undefined {\n const match = text.match(lastWhitespaceRegexp);\n return match\n ? { prefix: match[1], whitespace: match[2], suffix: match[3] }\n : undefined;\n}\n","import { splitOnLastWhitespace } from './split-on-last-whitespace';\n\nexport function removeTextAfterLastWhitespace(text: string): string {\n const match = splitOnLastWhitespace(text);\n return match ? match.prefix + match.whitespace : text;\n}\n","import { AISDKError, getErrorMessage } from '@ai-sdk/provider';\n\nconst name = 'AI_InvalidToolArgumentsError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidToolArgumentsError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly toolName: string;\n readonly toolArgs: string;\n\n constructor({\n toolArgs,\n toolName,\n cause,\n message = `Invalid arguments for tool ${toolName}: ${getErrorMessage(\n cause,\n )}`,\n }: {\n message?: string;\n toolArgs: string;\n toolName: string;\n cause: unknown;\n }) {\n super({ name, message, cause });\n\n this.toolArgs = toolArgs;\n this.toolName = toolName;\n }\n\n static isInstance(error: unknown): error is InvalidToolArgumentsError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError } from '@ai-sdk/provider';\n\nconst name = 'AI_NoSuchToolError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class NoSuchToolError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly toolName: string;\n readonly availableTools: string[] | undefined;\n\n constructor({\n toolName,\n availableTools = undefined,\n message = `Model tried to call unavailable tool '${toolName}'. ${\n availableTools === undefined\n ? 'No tools are available.'\n : `Available tools: ${availableTools.join(', ')}.`\n }`,\n }: {\n toolName: string;\n availableTools?: string[] | undefined;\n message?: string;\n }) {\n super({ name, message });\n\n this.toolName = toolName;\n this.availableTools = availableTools;\n }\n\n static isInstance(error: unknown): error is NoSuchToolError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { AISDKError, getErrorMessage } from '@ai-sdk/provider';\nimport { InvalidToolArgumentsError } from './invalid-tool-arguments-error';\nimport { NoSuchToolError } from './no-such-tool-error';\n\nconst name = 'AI_ToolCallRepairError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class ToolCallRepairError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly originalError: NoSuchToolError | InvalidToolArgumentsError;\n\n constructor({\n cause,\n originalError,\n message = `Error repairing tool call: ${getErrorMessage(cause)}`,\n }: {\n message?: string;\n cause: unknown;\n originalError: NoSuchToolError | InvalidToolArgumentsError;\n }) {\n super({ name, message, cause });\n this.originalError = originalError;\n }\n\n static isInstance(error: unknown): error is ToolCallRepairError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","import { LanguageModelV1FunctionToolCall } from '@ai-sdk/provider';\nimport { safeParseJSON, safeValidateTypes } from '@ai-sdk/provider-utils';\nimport { Schema, asSchema } from '@ai-sdk/ui-utils';\nimport { InvalidToolArgumentsError } from '../../errors/invalid-tool-arguments-error';\nimport { NoSuchToolError } from '../../errors/no-such-tool-error';\nimport { ToolCallRepairError } from '../../errors/tool-call-repair-error';\nimport { CoreMessage } from '../prompt';\nimport { inferParameters } from '../tool/tool';\nimport { ToolCallUnion } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair';\nimport { ToolSet } from './tool-set';\n\nexport async function parseToolCall<TOOLS extends ToolSet>({\n toolCall,\n tools,\n repairToolCall,\n system,\n messages,\n}: {\n toolCall: LanguageModelV1FunctionToolCall;\n tools: TOOLS | undefined;\n repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;\n system: string | undefined;\n messages: CoreMessage[];\n}): Promise<ToolCallUnion<TOOLS>> {\n if (tools == null) {\n throw new NoSuchToolError({ toolName: toolCall.toolName });\n }\n\n try {\n return await doParseToolCall({ toolCall, tools });\n } catch (error) {\n if (\n repairToolCall == null ||\n !(\n NoSuchToolError.isInstance(error) ||\n InvalidToolArgumentsError.isInstance(error)\n )\n ) {\n throw error;\n }\n\n let repairedToolCall: LanguageModelV1FunctionToolCall | null = null;\n\n try {\n repairedToolCall = await repairToolCall({\n toolCall,\n tools,\n parameterSchema: ({ toolName }) =>\n asSchema(tools[toolName].parameters).jsonSchema,\n system,\n messages,\n error,\n });\n } catch (repairError) {\n throw new ToolCallRepairError({\n cause: repairError,\n originalError: error,\n });\n }\n\n // no repaired tool call returned\n if (repairedToolCall == null) {\n throw error;\n }\n\n return await doParseToolCall({ toolCall: repairedToolCall, tools });\n }\n}\n\nasync function doParseToolCall<TOOLS extends ToolSet>({\n toolCall,\n tools,\n}: {\n toolCall: LanguageModelV1FunctionToolCall;\n tools: TOOLS;\n}): Promise<ToolCallUnion<TOOLS>> {\n const toolName = toolCall.toolName as keyof TOOLS & string;\n\n const tool = tools[toolName];\n\n if (tool == null) {\n throw new NoSuchToolError({\n toolName: toolCall.toolName,\n availableTools: Object.keys(tools),\n });\n }\n\n const schema = asSchema(tool.parameters) as Schema<\n inferParameters<TOOLS[keyof TOOLS]['parameters']>\n >;\n\n // when the tool call has no arguments, we try passing an empty object to the schema\n // (many LLMs generate empty strings for tool calls with no arguments)\n const parseResult =\n toolCall.args.trim() === ''\n ? safeValidateTypes({ value: {}, schema })\n : safeParseJSON({ text: toolCall.args, schema });\n\n if (parseResult.success === false) {\n throw new InvalidToolArgumentsError({\n toolName,\n toolArgs: toolCall.args,\n cause: parseResult.error,\n });\n }\n\n return {\n type: 'tool-call',\n toolCallId: toolCall.toolCallId,\n toolName,\n args: parseResult.value,\n };\n}\n","export type ReasoningDetail =\n | { type: 'text'; text: string; signature?: string }\n | { type: 'redacted'; data: string };\n\nexport function asReasoningText(\n reasoning: Array<ReasoningDetail>,\n): string | undefined {\n const reasoningText = reasoning\n .filter(part => part.type === 'text')\n .map(part => part.text)\n .join('');\n\n return reasoningText.length > 0 ? reasoningText : undefined;\n}\n","import { ToolResultPart } from '../prompt';\nimport { GeneratedFile } from './generated-file';\nimport { ReasoningDetail } from './reasoning-detail';\nimport { ResponseMessage } from './step-result';\nimport { ToolCallArray } from './tool-call';\nimport { ToolResultArray } from './tool-result';\nimport { ToolSet } from './tool-set';\n\n/**\nConverts the result of a `generateText` or `streamText` call to a list of response messages.\n */\nexport function toResponseMessages<TOOLS extends ToolSet>({\n text = '',\n files,\n reasoning,\n tools,\n toolCalls,\n toolResults,\n messageId,\n generateMessageId,\n}: {\n text: string | undefined;\n files: Array<GeneratedFile>;\n reasoning: Array<ReasoningDetail>;\n tools: TOOLS;\n toolCalls: ToolCallArray<TOOLS>;\n toolResults: ToolResultArray<TOOLS>;\n messageId: string;\n generateMessageId: () => string;\n}): Array<ResponseMessage> {\n const responseMessages: Array<ResponseMessage> = [];\n\n const content = [];\n\n // TODO language model v2: switch to order response content (instead of type-based ordering)\n\n if (reasoning.length > 0) {\n content.push(\n ...reasoning.map(part =>\n part.type === 'text'\n ? { ...part, type: 'reasoning' as const }\n : { ...part, type: 'redacted-reasoning' as const },\n ),\n );\n }\n\n if (files.length > 0) {\n content.push(\n ...files.map(file => ({\n type: 'file' as const,\n data: file.base64,\n mimeType: file.mimeType,\n })),\n );\n }\n\n if (text.length > 0) {\n content.push({ type: 'text' as const, text });\n }\n\n if (toolCalls.length > 0) {\n content.push(...toolCalls);\n }\n\n if (content.length > 0) {\n responseMessages.push({\n role: 'assistant',\n content,\n id: messageId,\n });\n }\n\n if (toolResults.length > 0) {\n responseMessages.push({\n role: 'tool',\n id: generateMessageId(),\n content: toolResults.map((toolResult): ToolResultPart => {\n const tool = tools[toolResult.toolName];\n return tool?.experimental_toToolResultContent != null\n ? {\n type: 'tool-result',\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName,\n result: tool.experimental_toToolResultContent(toolResult.result),\n experimental_content: tool.experimental_toToolResultContent(\n toolResult.result,\n ),\n }\n : {\n type: 'tool-result',\n toolCallId: toolResult.toolCallId,\n toolName: toolResult.toolName,\n result: toolResult.result,\n };\n }),\n });\n }\n\n return responseMessages;\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","import { AISDKError } from '@ai-sdk/provider';\nimport { SingleRequestTextStreamPart } from '../core/generate-text/run-tools-transformation';\n\nconst name = 'AI_InvalidStreamPartError';\nconst marker = `vercel.ai.error.${name}`;\nconst symbol = Symbol.for(marker);\n\nexport class InvalidStreamPartError extends AISDKError {\n private readonly [symbol] = true; // used in isInstance\n\n readonly chunk: SingleRequestTextStreamPart<any>;\n\n constructor({\n chunk,\n message,\n }: {\n chunk: SingleRequestTextStreamPart<any>;\n message: string;\n }) {\n super({ name, message });\n\n this.chunk = chunk;\n }\n\n static isInstance(error: unknown): error is InvalidStreamPartError {\n return AISDKError.hasMarker(error, marker);\n }\n}\n","export function asArray<T>(value: T | T[] | undefined): T[] {\n return value === undefined ? [] : Array.isArray(value) ? value : [value];\n}\n","/**\n * Consumes a ReadableStream until it's fully read.\n *\n * This function reads the stream chunk by chunk until the stream is exhausted.\n * It doesn't process or return the data from the stream; it simply ensures\n * that the entire stream is read.\n *\n * @param {ReadableStream} stream - The ReadableStream to be consumed.\n * @returns {Promise<void>} A promise that resolves when the stream is fully consumed.\n */\nexport async function consumeStream({\n stream,\n onError,\n}: {\n stream: ReadableStream;\n onError?: (error: unknown) => void;\n}): Promise<void> {\n const reader = stream.getReader();\n try {\n while (true) {\n const { done } = await reader.read();\n if (done) break;\n }\n } catch (error) {\n onError?.(error);\n } finally {\n reader.releaseLock();\n }\n}\n","/**\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 { LanguageModelV1StreamPart } from '@ai-sdk/provider';\nimport { generateId } from '@ai-sdk/ui-utils';\nimport { Tracer } from '@opentelemetry/api';\nimport { ToolExecutionError } from '../../errors';\nimport { CoreMessage } from '../prompt/message';\nimport { assembleOperationName } from '../telemetry/assemble-operation-name';\nimport { recordErrorOnSpan, recordSpan } from '../telemetry/record-span';\nimport { selectTelemetryAttributes } from '../telemetry/select-telemetry-attributes';\nimport { TelemetrySettings } from '../telemetry/telemetry-settings';\nimport {\n FinishReason,\n LanguageModelUsage,\n LogProbs,\n ProviderMetadata,\n} from '../types';\nimport { Source } from '../types/language-model';\nimport { calculateLanguageModelUsage } from '../types/usage';\nimport { DefaultGeneratedFileWithType, GeneratedFile } from './generated-file';\nimport { parseToolCall } from './parse-tool-call';\nimport { ToolCallUnion } from './tool-call';\nimport { ToolCallRepairFunction } from './tool-call-repair';\nimport { ToolResultUnion } from './tool-result';\nimport { ToolSet } from './tool-set';\n\nexport type SingleRequestTextStreamPart<TOOLS extends ToolSet> =\n | {\n type: 'text-delta';\n textDelta: string;\n }\n | {\n type: 'reasoning';\n textDelta: string;\n }\n | {\n type: 'reasoning-signature';\n signature: string;\n }\n | {\n type: 'redacted-reasoning';\n data: string;\n }\n | ({\n type: 'file';\n } & GeneratedFile)\n | {\n type: 'source';\n source: Source;\n }\n | ({\n type: 'tool-call';\n } & ToolCallUnion<TOOLS>)\n | {\n type: 'tool-call-streaming-start';\n toolCallId: string;\n toolName: string;\n }\n | {\n type: 'tool-call-delta';\n toolCallId: string;\n toolName: string;\n argsTextDelta: string;\n }\n | ({\n type: 'tool-result';\n } & ToolResultUnion<TOOLS>)\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 experimental_providerMetadata?: ProviderMetadata;\n }\n | {\n type: 'error';\n error: unknown;\n };\n\nexport function runToolsTransformation<TOOLS extends ToolSet>({\n tools,\n generatorStream,\n toolCallStreaming,\n tracer,\n telemetry,\n system,\n messages,\n abortSignal,\n repairToolCall,\n}: {\n tools: TOOLS | undefined;\n generatorStream: ReadableStream<LanguageModelV1StreamPart>;\n toolCallStreaming: boolean;\n tracer: Tracer;\n telemetry: TelemetrySettings | undefined;\n system: string | undefined;\n messages: CoreMessage[];\n abortSignal: AbortSignal | undefined;\n repairToolCall: ToolCallRepairFunction<TOOLS> | undefined;\n}): ReadableStream<SingleRequestTextStreamPart<TOOLS>> {\n // tool results stream\n let toolResultsStreamController: ReadableStreamDefaultController<\n SingleRequestTextStreamPart<TOOLS>\n > | null = null;\n const toolResultsStream = new ReadableStream<\n SingleRequestTextStreamPart<TOOLS>\n >({\n start(controller) {\n toolResultsStreamController = controller;\n },\n });\n\n // keep track of active tool calls for tool call streaming:\n const activeToolCalls: Record<string, boolean> = {};\n\n // keep track of outstanding tool results for stream closing:\n const outstandingToolResults = new Set<string>();\n\n let canClose = false;\n let finishChunk:\n | (SingleRequestTextStreamPart<TOOLS> & { type: 'finish' })\n | undefined = undefined;\n\n function attemptClose() {\n // close the tool results controller if no more outstanding tool calls\n if (canClose && outstandingToolResults.size === 0) {\n // we delay sending the finish chunk until all tool results (incl. delayed ones)\n // are received to ensure that the frontend receives tool results before a message\n // finish event arrives.\n if (finishChunk != null) {\n toolResultsStreamController!.enqueue(finishChunk);\n }\n\n toolResultsStreamController!.close();\n }\n }\n\n // forward stream\n const forwardStream = new TransformStream<\n LanguageModelV1StreamPart,\n SingleRequestTextStreamPart<TOOLS>\n >({\n async transform(\n chunk: LanguageModelV1StreamPart,\n controller: TransformStreamDefaultController<\n SingleRequestTextStreamPart<TOOLS>\n >,\n ) {\n const chunkType = chunk.type;\n\n switch (chunkType) {\n // forward:\n case 'text-delta':\n case 'reasoning':\n case 'reasoning-signature':\n case 'redacted-reasoning':\n case 'source':\n case 'response-metadata':\n case 'error': {\n controller.enqueue(chunk);\n break;\n }\n\n case 'file': {\n controller.enqueue(\n new DefaultGeneratedFileWithType({\n data: chunk.data,\n mimeType: chunk.mimeType,\n }),\n );\n break;\n }\n\n // forward with less information:\n case 'tool-call-delta': {\n if (toolCallStreaming) {\n if (!activeToolCalls[chunk.toolCallId]) {\n controller.enqueue({\n type: 'tool-call-streaming-start',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n });\n\n activeToolCalls[chunk.toolCallId] = true;\n }\n\n controller.enqueue({\n type: 'tool-call-delta',\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n argsTextDelta: chunk.argsTextDelta,\n });\n }\n break;\n }\n\n // process tool call:\n case 'tool-call': {\n try {\n const toolCall = await parseToolCall({\n toolCall: chunk,\n tools,\n repairToolCall,\n system,\n messages,\n });\n\n controller.enqueue(toolCall);\n\n const tool = tools![toolCall.toolName];\n\n if (tool.execute != null) {\n const toolExecutionId = generateId(); // use our own id to guarantee uniqueness\n outstandingToolResults.add(toolExecutionId);\n\n // Note: we don't await the tool execution here (by leaving out 'await' on recordSpan),\n // because we want to process the next chunk as soon as possible.\n // This is important for the case where the tool execution takes a long time.\n recordSpan({\n name: 'ai.toolCall',\n attributes: selectTelemetryAttributes({\n telemetry,\n attributes: {\n ...assembleOperationName({\n operationId: 'ai.toolCall',\n telemetry,\n }),\n 'ai.toolCall.name': toolCall.toolName,\n 'ai.toolCall.id': toolCall.toolCallId,\n 'ai.toolCall.args': {\n output: () => JSON.stringify(toolCall.args),\n },\n },\n }),\n tracer,\n fn: async span =>\n tool.execute!(toolCall.args, {\n toolCallId: toolCall.toolCallId,\n messages,\n abortSignal,\n }).then(\n (result: any) => {\n toolResultsStreamController!.enqueue({\n ...toolCall,\n type: 'tool-result',\n result,\n } as any);\n\n outstandingToolResults.delete(toolExecutionId);\n\n attemptClose();\n\n // record telemetry\n try {\n span.setAttributes(\n selectTelemetryAttributes({\n telemetry,\n attributes: {\n 'ai.toolCall.result': {\n output: () => JSON.stringify(result),\n },\n },\n }),\n );\n } catch (ignored) {\n // JSON stringify might fail if the result is not serializable,\n // in which case we just ignore it. In the future we might want to\n // add an optional serialize method to the tool interface and warn\n // if the result is not serializable.\n }\n },\n (error: any) => {\n recordErrorOnSpan(span, error);\n toolResultsStreamController!.enqueue({\n type: 'error',\n error: new ToolExecutionError({\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n toolArgs: toolCall.args,\n cause: error,\n }),\n });\n\n outstandingToolResults.delete(toolExecutionId);\n attemptClose();\n },\n ),\n });\n }\n } catch (error) {\n toolResultsStreamController!.enqueue({\n type: 'error',\n error,\n });\n }\n\n break;\n }\n\n case 'finish': {\n finishChunk = {\n type: 'finish',\n finishReason: chunk.finishReason,\n logprobs: chunk.logprobs,\n usage: calculateLanguageModelUsage(chunk.usage),\n experimental_providerMetadata: chunk.providerMetadata,\n };\n break;\n }\n\n default: {\n const _exhaustiveCheck: never = chunkType;\n throw new Error(`Unhandled chunk type: ${_exhaustiveCheck}`);\n }\n }\n },\n\n flush() {\n canClose = true;\n attemptClose();\n },\n });\n\n // combine the generator stream and the tool results stream\n return new ReadableStream<SingleRequestTextStreamPart<TOOLS>>({\n async start(controller) {\n // need to wait for both pipes so there are no dangling promises that\n // can cause uncaught promise rejections when the stream is aborted\n return Promise.all([\n generatorStream.pipeThrough(forwardStream).pipeTo(\n new WritableStream({\n write(chunk) {\n controller.enqueue(chunk);\n },\n close() {\n // the generator stream controller is automatically closed when it's consumed\n },\n }),\n ),\n toolResultsStream.pipeTo(\n new WritableStream({\n write(chunk) {\n controller.enqueue(chunk);\n },\n close() {\n controller.close();\n },\n }),\n ),\n ]);\n },\n });\n}\n","import { 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 { delay as delayFunction } from '@ai-sdk/provider-utils';\n\n/**\n * Creates a ReadableStream that emits the provided values with an optional delay between each value.\n *\n * @param options - The configuration options\n * @param options.chunks - Array of values to be emitted by the stream\n * @param options.initialDelayInMs - Optional initial delay in milliseconds before emitting the first value (default: 0). Can be set to `null` to skip the initial delay. The difference between `initialDelayInMs: null` and `initialDelayInMs: 0` is that `initialDelayInMs: null` will emit the values without any delay, while `initialDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @param options.chunkDelayInMs - Optional delay in milliseconds between emitting each value (default: 0). Can be set to `null` to skip the delay. The difference between `chunkDelayInMs: null` and `chunkDelayInMs: 0` is that `chunkDelayInMs: null` will emit the values without any delay, while `chunkDelayInMs: 0` will emit the values with a delay of 0 milliseconds.\n * @returns A ReadableStream that emits the provided values\n */\nexport function simulateReadableStream<T>({\n chunks,\n initialDelayInMs = 0,\n chunkDelayInMs = 0,\n _internal,\n}: {\n chunks: T[];\n initialDelayInMs?: number | null;\n chunkDelayInMs?: number | null;\n _internal?: {\n delay?: (ms: number | null) => Promise<void>;\n };\n}): ReadableStream<T> {\n const delay = _internal?.delay ?? delayFunction;\n\n let index = 0;\n\n return new ReadableStream({\n async pull(controller) {\n if (index < chunks.length) {\n await delay(index === 0 ? initialDelayInMs : chunkDelayInMs);\n controller.enqueue(chunks[index++]);\n } else {\n controller.close();\n }\n },\n });\n}\n","import { 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","import { convertToCoreMessages as convertToCoreMessagesV4 } from '@internal/ai-sdk-v4';\nimport type { CoreMessage as CoreMessageV4, UIMessage as UIMessageV4 } from '@internal/ai-sdk-v4';\nimport * as AIV5 from '@internal/ai-sdk-v5';\n\nimport { AIV4Adapter, AIV5Adapter } from '../adapters';\nimport type { AdapterContext } from '../adapters';\nimport { TypeDetector } from '../detection/TypeDetector';\nimport type { MastraDBMessage, MessageSource } from '../state/types';\nimport type { AIV5Type } from '../types';\nimport { ensureAnthropicCompatibleMessages } from '../utils/provider-compat';\n\n/**\n * Sanitizes AIV4 UI messages by filtering out incomplete tool calls.\n * Removes messages with empty parts arrays after sanitization.\n */\nexport function sanitizeAIV4UIMessages(messages: UIMessageV4[]): UIMessageV4[] {\n const msgs = messages\n .map(m => {\n if (m.parts.length === 0) return false;\n const safeParts = m.parts.filter(\n p =>\n p.type !== `tool-invocation` ||\n // calls and partial-calls should be updated to be results at this point\n // if they haven't we can't send them back to the llm and need to remove them.\n (p.toolInvocation.state !== `call` && p.toolInvocation.state !== `partial-call`),\n );\n\n // fully remove this message if it has an empty parts array after stripping out incomplete tool calls.\n if (!safeParts.length) return false;\n\n const sanitized = {\n ...m,\n parts: safeParts,\n };\n\n // ensure toolInvocations are also updated to only show results\n if (`toolInvocations` in m && m.toolInvocations) {\n sanitized.toolInvocations = m.toolInvocations.filter(t => t.state === `result`);\n }\n\n return sanitized;\n })\n .filter((m): m is UIMessageV4 => Boolean(m));\n return msgs;\n}\n\n/**\n * Sanitizes AIV5 UI messages by filtering out streaming states, data-* parts, empty text parts, and optionally incomplete tool calls.\n * Handles legacy data by filtering empty text parts that may exist in pre-existing DB records.\n */\nexport function sanitizeV5UIMessages(\n messages: AIV5Type.UIMessage[],\n filterIncompleteToolCalls = false,\n): AIV5Type.UIMessage[] {\n const msgs = messages\n .map(m => {\n if (m.parts.length === 0) return false;\n\n // When building a prompt TO the LLM (filterIncompleteToolCalls=true),\n // check if this message contains OpenAI reasoning parts (rs_* itemIds).\n // If so, we need to strip them AND clear providerMetadata.openai from remaining\n // parts to prevent item_reference linking to the stripped reasoning items.\n const hasOpenAIReasoning =\n filterIncompleteToolCalls &&\n m.parts.some(\n p =>\n p.type === 'reasoning' &&\n 'providerMetadata' in p &&\n p.providerMetadata &&\n typeof p.providerMetadata === 'object' &&\n 'openai' in (p.providerMetadata as Record<string, unknown>),\n );\n\n // Filter out streaming states and optionally input-available (which aren't supported by convertToModelMessages)\n const safeParts = m.parts.filter(p => {\n // Filter out data-* parts (custom streaming data from writer.custom())\n // These are Mastra extensions not supported by LLM providers.\n // If not filtered, convertToModelMessages produces empty content arrays\n // which causes some models to fail with \"must include at least one parts field\"\n if (typeof p.type === 'string' && p.type.startsWith('data-')) {\n return false;\n }\n\n // Strip OpenAI reasoning parts when building a prompt TO the LLM.\n // OpenAI's Responses API uses item_reference linking (rs_*/msg_* itemIds) that\n // creates mandatory pairing between reasoning and message items. Replaying\n // reasoning from history causes:\n // \"Item 'rs_*' of type 'reasoning' was provided without its required following item\"\n // \"Item 'msg_*' of type 'message' was provided without its required 'reasoning' item\"\n // Reasoning data is preserved in the database — only stripped from LLM input.\n // See: https://github.com/mastra-ai/mastra/issues/12980\n if (p.type === 'reasoning' && hasOpenAIReasoning) {\n return false;\n }\n\n // Filter out empty text parts to handle legacy data from before this filtering was implemented\n // But preserve them if they are the only parts (legitimate placeholder messages)\n if (p.type === 'text' && (!('text' in p) || p.text === '' || p.text?.trim() === '')) {\n const hasNonEmptyParts = m.parts.some(\n part => !(part.type === 'text' && (!('text' in part) || part.text === '' || part.text?.trim() === '')),\n );\n if (hasNonEmptyParts) return false;\n }\n\n if (!AIV5.isToolUIPart(p)) return true;\n\n // When sending messages TO the LLM: only keep completed tool calls (output-available/output-error)\n // This filters out input-available (incomplete client-side tool calls) and input-streaming\n if (filterIncompleteToolCalls) {\n if (p.state === 'output-available' || p.state === 'output-error') {\n // Strip completed provider-executed tools (e.g. Anthropic web_search). The provider\n // already handled these internally — sending tool_result for server_tool_use is invalid.\n if (p.providerExecuted) return false;\n return true;\n }\n // Provider-executed tools (e.g. Anthropic web_search) remain in input-available state\n // because no client-side result is added. Keep them so the provider API sees the\n // server_tool_use block and can execute the deferred tool on the next request.\n if (p.state === 'input-available' && p.providerExecuted) return true;\n return false;\n }\n\n // When processing response messages FROM the LLM: keep input-available states\n // (tool calls waiting for client-side execution) but filter out input-streaming\n return p.state !== 'input-streaming';\n });\n\n if (!safeParts.length) return false;\n\n const sanitized = {\n ...m,\n parts: safeParts.map(part => {\n // When OpenAI reasoning was stripped, clear openai metadata from ALL remaining\n // parts so the SDK sends inline content instead of item_reference. This covers:\n // - providerMetadata.openai on text/reasoning parts (msg_*/rs_* itemIds)\n // - callProviderMetadata.openai on tool parts (fc_* itemIds used by convertToModelMessages)\n // Without paired reasoning items, OpenAI rejects orphaned item_references with:\n // \"function_call was provided without its required reasoning item\"\n if (hasOpenAIReasoning) {\n if ('providerMetadata' in part && part.providerMetadata) {\n const meta = part.providerMetadata as Record<string, unknown>;\n if ('openai' in meta) {\n const { openai: _, ...restMeta } = meta;\n part = {\n ...part,\n providerMetadata:\n Object.keys(restMeta).length > 0 ? (restMeta as typeof part.providerMetadata) : undefined,\n };\n }\n }\n if ('callProviderMetadata' in part && part.callProviderMetadata) {\n const callMeta = part.callProviderMetadata as Record<string, unknown>;\n if ('openai' in callMeta) {\n const { openai: _, ...restCallMeta } = callMeta;\n part = {\n ...part,\n callProviderMetadata:\n Object.keys(restCallMeta).length > 0\n ? (restCallMeta as typeof part.callProviderMetadata)\n : undefined,\n } as typeof part;\n }\n }\n }\n\n if (AIV5.isToolUIPart(part) && part.state === 'output-available') {\n return {\n ...part,\n output:\n typeof part.output === 'object' && part.output && 'value' in part.output\n ? part.output.value\n : part.output,\n };\n }\n return part;\n }),\n };\n\n return sanitized;\n })\n .filter((m): m is AIV5Type.UIMessage => Boolean(m));\n return msgs;\n}\n\n/**\n * Adds step-start parts between tool parts and non-tool parts for proper AIV5 message conversion.\n * This ensures AIV5.convertToModelMessages produces the correct message order.\n */\nexport function addStartStepPartsForAIV5(messages: AIV5Type.UIMessage[]): AIV5Type.UIMessage[] {\n for (const message of messages) {\n if (message.role !== `assistant`) continue;\n for (const [index, part] of message.parts.entries()) {\n if (!AIV5.isToolUIPart(part)) continue;\n const nextPart = message.parts.at(index + 1);\n // If we don't insert step-start between tools and other parts, AIV5.convertToModelMessages will incorrectly add extra tool parts in the wrong order\n // ex: ui message with parts: [tool-result, text] becomes [assistant-message-with-both-parts, tool-result-message], when it should become [tool-call-message, tool-result-message, text-message]\n // However, we should NOT add step-start between consecutive tool parts (parallel tool calls)\n if (nextPart && nextPart.type !== `step-start` && !AIV5.isToolUIPart(nextPart)) {\n message.parts.splice(index + 1, 0, { type: 'step-start' });\n }\n }\n }\n return messages;\n}\n\n/**\n * Converts AIV4 UI messages to AIV4 Core messages.\n */\nexport function aiV4UIMessagesToAIV4CoreMessages(messages: UIMessageV4[]): CoreMessageV4[] {\n return convertToCoreMessagesV4(sanitizeAIV4UIMessages(messages));\n}\n\n/**\n * Converts AIV5 UI messages to AIV5 Model messages.\n * Handles sanitization, step-start insertion, provider options restoration, and Anthropic compatibility.\n *\n * @param messages - AIV5 UI messages to convert\n * @param dbMessages - MastraDB messages used to look up tool call args for Anthropic compatibility\n * @param filterIncompleteToolCalls - Whether to filter out incomplete tool calls\n */\nexport function aiV5UIMessagesToAIV5ModelMessages(\n messages: AIV5Type.UIMessage[],\n dbMessages: MastraDBMessage[],\n filterIncompleteToolCalls = false,\n): AIV5Type.ModelMessage[] {\n const sanitized = sanitizeV5UIMessages(messages, filterIncompleteToolCalls);\n const preprocessed = addStartStepPartsForAIV5(sanitized);\n const result = AIV5.convertToModelMessages(preprocessed);\n\n // Build a lookup of toolCallId → stored modelOutput from providerMetadata.mastra.modelOutput.\n // This allows toModelOutput results computed at tool execution time to be preserved\n // in the model prompt without re-running the transformation.\n const storedModelOutputs = new Map<string, unknown>();\n for (const dbMsg of dbMessages) {\n if (dbMsg.content?.format === 2 && dbMsg.content.parts) {\n for (const part of dbMsg.content.parts) {\n if (\n part.type === 'tool-invocation' &&\n part.toolInvocation?.state === 'result' &&\n part.providerMetadata?.mastra &&\n typeof part.providerMetadata.mastra === 'object' &&\n 'modelOutput' in (part.providerMetadata.mastra as Record<string, unknown>)\n ) {\n storedModelOutputs.set(\n part.toolInvocation.toolCallId,\n (part.providerMetadata.mastra as Record<string, unknown>).modelOutput,\n );\n }\n }\n }\n }\n\n // Apply stored modelOutput to tool-result parts in model messages\n if (storedModelOutputs.size > 0) {\n for (const modelMsg of result) {\n if (modelMsg.role === 'tool' && Array.isArray(modelMsg.content)) {\n for (let i = 0; i < modelMsg.content.length; i++) {\n const part = modelMsg.content[i]!;\n if (part.type === 'tool-result' && storedModelOutputs.has(part.toolCallId)) {\n modelMsg.content[i] = {\n ...part,\n output: storedModelOutputs.get(part.toolCallId) as any,\n };\n }\n }\n }\n }\n }\n\n // Restore message-level providerOptions from metadata.providerMetadata\n // This preserves providerOptions through the DB → UI → Model conversion\n const withProviderOptions = result.map((modelMsg, index) => {\n const uiMsg = preprocessed[index];\n\n if (\n uiMsg?.metadata &&\n typeof uiMsg.metadata === 'object' &&\n 'providerMetadata' in uiMsg.metadata &&\n uiMsg.metadata.providerMetadata\n ) {\n return {\n ...modelMsg,\n providerOptions: uiMsg.metadata.providerMetadata as AIV5Type.ProviderMetadata,\n } satisfies AIV5Type.ModelMessage;\n }\n\n return modelMsg;\n });\n\n // Add input field to tool-result parts for Anthropic API compatibility (fixes issue #11376)\n return ensureAnthropicCompatibleMessages(withProviderOptions, dbMessages);\n}\n\n/**\n * Converts AIV4 Core messages to AIV5 Model messages.\n */\nexport function aiV4CoreMessagesToAIV5ModelMessages(\n messages: CoreMessageV4[],\n source: MessageSource,\n adapterContext: AdapterContext,\n dbMessages: MastraDBMessage[],\n): AIV5Type.ModelMessage[] {\n return aiV5UIMessagesToAIV5ModelMessages(\n messages.map(m => AIV4Adapter.fromCoreMessage(m, adapterContext, source)).map(m => AIV5Adapter.toUIMessage(m)),\n dbMessages,\n );\n}\n\n/**\n * Converts various message formats to AIV4 CoreMessage format for system messages.\n * Supports string, MastraDBMessage, or AI SDK message types.\n */\nexport function systemMessageToAIV4Core(\n message: CoreMessageV4 | AIV5Type.ModelMessage | MastraDBMessage | string,\n): CoreMessageV4 {\n if (typeof message === `string`) {\n return { role: 'system', content: message };\n }\n\n if (TypeDetector.isAIV5CoreMessage(message)) {\n const dbMsg = AIV5Adapter.fromModelMessage(message as AIV5Type.ModelMessage, 'system');\n return AIV4Adapter.systemToV4Core(dbMsg);\n }\n\n if (TypeDetector.isMastraDBMessage(message)) {\n return AIV4Adapter.systemToV4Core(message);\n }\n\n return message;\n}\n","import { convertBase64ToUint8Array, convertUint8ArrayToBase64 } from '@ai-sdk/provider-utils-v5';\n\n/**\n * A generated file.\n */\nexport interface GeneratedFile {\n /**\n File as a base64 encoded string.\n */\n readonly base64: string;\n\n /**\n File as a Uint8Array.\n */\n readonly uint8Array: Uint8Array;\n\n /**\n The IANA media type of the file.\n \n @see https://www.iana.org/assignments/media-types/media-types.xhtml\n */\n readonly mediaType: string;\n}\n\nexport class DefaultGeneratedFile implements GeneratedFile {\n private base64Data: string | undefined;\n private uint8ArrayData: Uint8Array | undefined;\n\n readonly mediaType: string;\n\n constructor({ data, mediaType }: { data: string | Uint8Array; mediaType: string }) {\n const isUint8Array = data instanceof Uint8Array;\n this.base64Data = isUint8Array ? undefined : data;\n this.uint8ArrayData = isUint8Array ? data : undefined;\n this.mediaType = mediaType;\n }\n\n // lazy conversion with caching to avoid unnecessary conversion overhead:\n get base64() {\n if (this.base64Data == null) {\n this.base64Data = convertUint8ArrayToBase64(this.uint8ArrayData!);\n }\n return this.base64Data;\n }\n\n // lazy conversion with caching to avoid unnecessary conversion overhead:\n get uint8Array() {\n if (this.uint8ArrayData == null) {\n this.uint8ArrayData = convertBase64ToUint8Array(this.base64Data!);\n }\n return this.uint8ArrayData;\n }\n}\n\nexport class DefaultGeneratedFileWithType extends DefaultGeneratedFile {\n readonly type = 'file';\n\n constructor(options: { data: string | Uint8Array; mediaType: string }) {\n super(options);\n }\n}\n","import * as AIV5 from '@internal/ai-sdk-v5';\n\nimport { DefaultGeneratedFileWithType } from '../../../stream/aisdk/v5/file';\nimport { convertDataContentToBase64String } from '../prompt/data-content';\nimport { parseDataUri } from '../prompt/image-utils';\nimport type { MastraDBMessage } from '../state/types';\nimport type { AIV5Type } from '../types';\nimport { findToolCallArgs } from '../utils/provider-compat';\nimport { sanitizeV5UIMessages } from './output-converter';\n\n/**\n * StepContentExtractor - Handles extraction of step content from response messages\n *\n * This class encapsulates the complex logic for:\n * - Finding step boundaries by looking for step-start markers\n * - Handling special cases like -1 (last step) and tool-only steps\n * - Converting UI messages to model messages and extracting content\n */\nexport class StepContentExtractor {\n /**\n * Extract content for a specific step number from UI messages\n *\n * @param uiMessages - Array of AI SDK V5 UI messages\n * @param stepNumber - Step number to extract (1-indexed, or -1 for last step)\n * @param stepContentFn - Function to convert model messages to step content\n * @returns Step content array\n */\n static extractStepContent(\n uiMessages: AIV5Type.UIMessage[],\n stepNumber: number,\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult<any>['content'],\n ): AIV5Type.StepResult<any>['content'] {\n const uiMessagesParts = uiMessages.flatMap(item => item.parts);\n\n // Find step boundaries by looking for step-start markers\n const stepBoundaries: number[] = [];\n uiMessagesParts.forEach((part, index) => {\n if (part.type === 'step-start') {\n stepBoundaries.push(index);\n }\n });\n\n // Handle -1 to get the last step (the current/most recent step)\n if (stepNumber === -1) {\n return StepContentExtractor.extractLastStep(uiMessagesParts, stepBoundaries, stepContentFn);\n }\n\n // Step 1 is everything before the first step-start\n if (stepNumber === 1) {\n return StepContentExtractor.extractFirstStep(uiMessagesParts, stepBoundaries, stepContentFn);\n }\n\n // For steps 2+, content is between (stepNumber-1)th and stepNumber-th step-start markers\n return StepContentExtractor.extractMiddleStep(uiMessagesParts, stepBoundaries, stepNumber, stepContentFn);\n }\n\n /**\n * Extract the last step content (stepNumber === -1)\n */\n private static extractLastStep(\n uiMessagesParts: AIV5Type.UIMessage['parts'],\n stepBoundaries: number[],\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult<any>['content'],\n ): AIV5Type.StepResult<any>['content'] {\n // For tool-only steps without step-start markers, we need different logic\n // Each tool part represents a complete step (tool call + result)\n const toolParts = uiMessagesParts.filter(p => p.type?.startsWith('tool-'));\n const hasStepStart = stepBoundaries.length > 0;\n\n if (!hasStepStart && toolParts.length > 0) {\n // No step-start markers but we have tool parts\n // Each tool part is a separate step, so return only the last tool\n const lastToolPart = toolParts[toolParts.length - 1];\n if (!lastToolPart) {\n return [];\n }\n const lastToolIndex = uiMessagesParts.indexOf(lastToolPart);\n const previousToolPart = toolParts[toolParts.length - 2];\n const previousToolIndex = previousToolPart ? uiMessagesParts.indexOf(previousToolPart) : -1;\n\n const startIndex = previousToolIndex + 1;\n const stepParts = uiMessagesParts.slice(startIndex, lastToolIndex + 1);\n\n return StepContentExtractor.convertPartsToContent(stepParts, 'last-step', stepContentFn);\n }\n\n // Count total steps (1 + number of step-start markers)\n const totalSteps = stepBoundaries.length + 1;\n\n // Get the content for the last step using the regular step logic\n if (totalSteps === 1 && !hasStepStart) {\n // Only one step, return all content\n return StepContentExtractor.convertPartsToContent(uiMessagesParts, 'last-step', stepContentFn);\n }\n\n // Multiple steps - get content after the last step-start marker\n const lastStepStart = stepBoundaries[stepBoundaries.length - 1];\n if (lastStepStart === undefined) {\n return [];\n }\n const stepParts = uiMessagesParts.slice(lastStepStart + 1);\n\n if (stepParts.length === 0) {\n return [];\n }\n\n return StepContentExtractor.convertPartsToContent(stepParts, 'last-step', stepContentFn);\n }\n\n /**\n * Extract the first step content (stepNumber === 1)\n */\n private static extractFirstStep(\n uiMessagesParts: AIV5Type.UIMessage['parts'],\n stepBoundaries: number[],\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult<any>['content'],\n ): AIV5Type.StepResult<any>['content'] {\n const firstStepStart = stepBoundaries[0] ?? uiMessagesParts.length;\n if (firstStepStart === 0) {\n // No content before first step-start\n return [];\n }\n\n const stepParts = uiMessagesParts.slice(0, firstStepStart);\n return StepContentExtractor.convertPartsToContent(stepParts, 'step-1', stepContentFn);\n }\n\n /**\n * Extract content for steps 2+ (between step-start markers)\n */\n private static extractMiddleStep(\n uiMessagesParts: AIV5Type.UIMessage['parts'],\n stepBoundaries: number[],\n stepNumber: number,\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult<any>['content'],\n ): AIV5Type.StepResult<any>['content'] {\n const stepIndex = stepNumber - 2; // -2 because step 2 is at index 0 in boundaries\n if (stepIndex < 0 || stepIndex >= stepBoundaries.length) {\n return [];\n }\n\n const startIndex = (stepBoundaries[stepIndex] ?? 0) + 1; // Start after the step-start marker\n const endIndex = stepBoundaries[stepIndex + 1] ?? uiMessagesParts.length;\n\n if (startIndex >= endIndex) {\n return [];\n }\n\n const stepParts = uiMessagesParts.slice(startIndex, endIndex);\n return StepContentExtractor.convertPartsToContent(stepParts, `step-${stepNumber}`, stepContentFn);\n }\n\n /**\n * Convert UI message parts to step content\n */\n private static convertPartsToContent(\n parts: AIV5Type.UIMessage['parts'],\n stepId: string,\n stepContentFn: (message?: AIV5Type.ModelMessage) => AIV5Type.StepResult<any>['content'],\n ): AIV5Type.StepResult<any>['content'] {\n const stepUiMessages: AIV5Type.UIMessage[] = [\n {\n id: stepId,\n role: 'assistant',\n parts,\n },\n ];\n\n const modelMessages = AIV5.convertToModelMessages(sanitizeV5UIMessages(stepUiMessages));\n return modelMessages.flatMap(stepContentFn);\n }\n\n /**\n * Convert a single model message content to step result content\n *\n * This handles:\n * - Tool results: adding input field from DB messages\n * - Files: converting to GeneratedFile format\n * - Images: converting to file format with proper media type\n * - Other content: passed through as-is\n *\n * @param message - Model message to convert (or undefined to use latest)\n * @param dbMessages - Database messages for looking up tool call args\n * @param getLatestMessage - Function to get the latest model message if not provided\n */\n static convertToStepContent(\n message: AIV5Type.ModelMessage | undefined,\n dbMessages: MastraDBMessage[],\n getLatestMessage: () => AIV5Type.ModelMessage | undefined,\n ): AIV5Type.StepResult<any>['content'] {\n const latest = message ? message : getLatestMessage();\n if (!latest) return [];\n\n if (typeof latest.content === 'string') {\n return [{ type: 'text', text: latest.content }];\n }\n\n return latest.content.map(c => {\n if (c.type === 'tool-result') {\n return {\n type: 'tool-result',\n input: findToolCallArgs(dbMessages, c.toolCallId),\n output: c.output,\n toolCallId: c.toolCallId,\n toolName: c.toolName,\n } satisfies AIV5Type.StaticToolResult<any>;\n }\n\n if (c.type === 'file') {\n return {\n type: 'file',\n file: new DefaultGeneratedFileWithType({\n data:\n typeof c.data === 'string'\n ? parseDataUri(c.data).base64Content // Strip data URI prefix if present\n : c.data instanceof URL\n ? c.data.toString()\n : convertDataContentToBase64String(c.data),\n mediaType: c.mediaType,\n }),\n } satisfies Extract<AIV5Type.StepResult<any>['content'][number], { type: 'file' }>;\n }\n\n if (c.type === 'image') {\n return {\n type: 'file',\n file: new DefaultGeneratedFileWithType({\n data:\n typeof c.image === 'string'\n ? parseDataUri(c.image).base64Content // Strip data URI prefix if present\n : c.image instanceof URL\n ? c.image.toString()\n : convertDataContentToBase64String(c.image),\n mediaType: c.mediaType || 'unknown',\n }),\n };\n }\n\n return { ...c };\n });\n }\n}\n","import { CacheKeyGenerator } from '../cache/CacheKeyGenerator';\nimport type { MastraDBMessage, MastraMessageContentV2 } from '../state/types';\n\n/**\n * MessageMerger - Handles complex logic for merging assistant messages\n *\n * When streaming responses from LLMs, we often receive multiple messages that need to be\n * merged together:\n * - Tool calls that need to be updated with their results\n * - Text parts that need to be appended\n * - Step-start markers that need to be inserted\n *\n * This class encapsulates all the complex merging logic that was previously spread\n * throughout the MessageList.addOne method.\n */\nexport class MessageMerger {\n /**\n * Check if a message is sealed (should not be merged into).\n * Messages are sealed after observation to preserve observation markers.\n */\n static isSealed(message: MastraDBMessage): boolean {\n const metadata = message.content?.metadata as { mastra?: { sealed?: boolean } } | undefined;\n return metadata?.mastra?.sealed === true;\n }\n\n /**\n * Check if we should merge an incoming message with the latest message\n *\n * @param latestMessage - The most recent message in the list\n * @param incomingMessage - The message being added\n * @param messageSource - The source of the incoming message ('memory', 'input', 'response', 'context')\n * @param isLatestFromMemory - Whether the latest message is from memory\n * @param agentNetworkAppend - Whether agent network append mode is enabled\n */\n\n static shouldMerge(\n latestMessage: MastraDBMessage | undefined,\n incomingMessage: MastraDBMessage,\n messageSource: string,\n isLatestFromMemory: boolean,\n agentNetworkAppend: boolean = false,\n ): boolean {\n if (!latestMessage) return false;\n\n // Don't merge into sealed messages (e.g., messages that have been observed)\n if (MessageMerger.isSealed(latestMessage)) return false;\n\n // Don't merge completion result message (network uses completionResult, supervisor uses isTaskCompleteResult)\n if (\n incomingMessage.content.metadata?.completionResult ||\n latestMessage.content.metadata?.completionResult ||\n incomingMessage.content.metadata?.isTaskCompleteResult ||\n latestMessage.content.metadata?.isTaskCompleteResult\n ) {\n return false;\n }\n\n // Basic merge conditions: both messages must be assistant messages from the same thread\n const shouldAppendToLastAssistantMessage =\n latestMessage.role === 'assistant' &&\n incomingMessage.role === 'assistant' &&\n latestMessage.threadId === incomingMessage.threadId &&\n // If the message is from memory, don't append to the last assistant message\n messageSource !== 'memory';\n\n // Agent network append flag handling\n // When enabled, only merge if the latest message is NOT from memory\n const appendNetworkMessage = agentNetworkAppend ? !isLatestFromMemory : true;\n\n return shouldAppendToLastAssistantMessage && appendNetworkMessage;\n }\n\n /**\n * Merge an incoming assistant message into the latest assistant message\n *\n * This handles:\n * - Updating tool invocations with their results\n * - Adding new parts in the correct order using anchor maps\n * - Inserting step-start markers where needed\n * - Updating timestamps and content strings\n */\n static merge(latestMessage: MastraDBMessage, incomingMessage: MastraDBMessage): void {\n // Update timestamp\n latestMessage.createdAt = incomingMessage.createdAt || latestMessage.createdAt;\n\n // Used for mapping indexes for incomingMessage parts to corresponding indexes in latestMessage\n const toolResultAnchorMap = new Map<number, number>();\n const partsToAdd = new Map<number, MastraMessageContentV2['parts'][number]>();\n\n for (const [index, part] of incomingMessage.content.parts.entries()) {\n // If the incoming part is a tool-invocation result, find the corresponding call in the latest message\n if (part.type === 'tool-invocation') {\n const existingCallPart = [...latestMessage.content.parts]\n .reverse()\n .find(p => p.type === 'tool-invocation' && p.toolInvocation.toolCallId === part.toolInvocation.toolCallId);\n\n const existingCallToolInvocation = !!existingCallPart && existingCallPart.type === 'tool-invocation';\n\n if (existingCallToolInvocation) {\n if (part.toolInvocation.state === 'result') {\n // Update the existing tool-call part with the result\n existingCallPart.toolInvocation = {\n ...existingCallPart.toolInvocation,\n step: part.toolInvocation.step,\n state: 'result',\n result: part.toolInvocation.result,\n args: {\n ...existingCallPart.toolInvocation.args,\n ...part.toolInvocation.args,\n },\n };\n // Preserve providerMetadata from the result part (e.g. toModelOutput stored at mastra.modelOutput)\n if (part.providerMetadata) {\n existingCallPart.providerMetadata = {\n ...existingCallPart.providerMetadata,\n ...part.providerMetadata,\n };\n }\n if (!latestMessage.content.toolInvocations) {\n latestMessage.content.toolInvocations = [];\n }\n const toolInvocationIndex = latestMessage.content.toolInvocations.findIndex(\n t => t.toolCallId === existingCallPart.toolInvocation.toolCallId,\n );\n if (toolInvocationIndex === -1) {\n latestMessage.content.toolInvocations.push(existingCallPart.toolInvocation);\n } else {\n latestMessage.content.toolInvocations[toolInvocationIndex] = existingCallPart.toolInvocation;\n }\n }\n // Map the index of the tool call in incomingMessage to the index of the tool call in latestMessage\n const existingIndex = latestMessage.content.parts.findIndex(p => p === existingCallPart);\n toolResultAnchorMap.set(index, existingIndex);\n // Otherwise we do nothing, as we're not updating the tool call\n } else {\n partsToAdd.set(index, part);\n }\n } else {\n partsToAdd.set(index, part);\n }\n }\n\n MessageMerger.addPartsToMessage({\n latestMessage,\n incomingMessage,\n anchorMap: toolResultAnchorMap,\n partsToAdd,\n });\n\n if (latestMessage.createdAt.getTime() < incomingMessage.createdAt.getTime()) {\n latestMessage.createdAt = incomingMessage.createdAt;\n }\n if (!latestMessage.content.content && incomingMessage.content.content) {\n latestMessage.content.content = incomingMessage.content.content;\n }\n if (\n latestMessage.content.content &&\n incomingMessage.content.content &&\n latestMessage.content.content !== incomingMessage.content.content\n ) {\n // Match what AI SDK does - content string is always the latest text part.\n latestMessage.content.content = incomingMessage.content.content;\n }\n }\n\n /**\n * Add parts from the incoming message to the latest message using anchor positions\n */\n private static addPartsToMessage({\n latestMessage,\n incomingMessage,\n anchorMap,\n partsToAdd,\n }: {\n latestMessage: MastraDBMessage;\n incomingMessage: MastraDBMessage;\n anchorMap: Map<number, number>;\n partsToAdd: Map<number, MastraMessageContentV2['parts'][number]>;\n }): void {\n // Walk through incomingMessage, inserting any part not present at the canonical position\n for (let i = 0; i < incomingMessage.content.parts.length; ++i) {\n const part = incomingMessage.content.parts[i];\n if (!part) continue;\n const key = CacheKeyGenerator.fromDBParts([part]);\n const partToAdd = partsToAdd.get(i);\n if (!key || !partToAdd) continue;\n if (anchorMap.size > 0) {\n if (anchorMap.has(i)) continue; // skip anchors\n // Find left anchor in incomingMessage\n const leftAnchorV2 = [...anchorMap.keys()].filter(idx => idx < i).pop() ?? -1;\n // Find right anchor in incomingMessage\n const rightAnchorV2 = [...anchorMap.keys()].find(idx => idx > i) ?? -1;\n\n // Map to latestMessage\n const leftAnchorLatest = leftAnchorV2 !== -1 ? anchorMap.get(leftAnchorV2)! : 0;\n\n // Compute offset from anchor\n const offset = leftAnchorV2 === -1 ? i : i - leftAnchorV2;\n\n // Insert at proportional position\n const insertAt = leftAnchorLatest + offset;\n\n const rightAnchorLatest =\n rightAnchorV2 !== -1 ? anchorMap.get(rightAnchorV2)! : latestMessage.content.parts.length;\n\n if (\n insertAt >= 0 &&\n insertAt <= rightAnchorLatest &&\n !latestMessage.content.parts\n .slice(insertAt, rightAnchorLatest)\n .some(p => CacheKeyGenerator.fromDBParts([p]) === CacheKeyGenerator.fromDBParts([part]))\n ) {\n MessageMerger.pushNewPart({\n latestMessage,\n newMessage: incomingMessage,\n part,\n insertAt,\n });\n for (const [v2Idx, latestIdx] of anchorMap.entries()) {\n if (latestIdx >= insertAt) {\n anchorMap.set(v2Idx, latestIdx + 1);\n }\n }\n }\n } else {\n MessageMerger.pushNewPart({\n latestMessage,\n newMessage: incomingMessage,\n part,\n });\n }\n }\n }\n\n /**\n * Push a new message part to the latest message\n */\n private static pushNewPart({\n latestMessage,\n newMessage,\n part,\n insertAt,\n }: {\n latestMessage: MastraDBMessage;\n newMessage: MastraDBMessage;\n part: MastraMessageContentV2['parts'][number];\n insertAt?: number;\n }): void {\n const partKey = CacheKeyGenerator.fromDBParts([part]);\n const latestPartCount = latestMessage.content.parts.filter(\n p => CacheKeyGenerator.fromDBParts([p]) === partKey,\n ).length;\n const newPartCount = newMessage.content.parts.filter(p => CacheKeyGenerator.fromDBParts([p]) === partKey).length;\n // If the number of parts in the latest message is less than the number of parts in the new message, insert the part\n if (latestPartCount < newPartCount) {\n // Check if we need to add a step-start before text parts when merging assistant messages\n // Only add after tool invocations, and only if the incoming message doesn't already have step-start\n const partIndex = newMessage.content.parts.indexOf(part);\n const hasStepStartBefore = partIndex > 0 && newMessage.content.parts[partIndex - 1]?.type === 'step-start';\n\n const needsStepStart =\n latestMessage.role === 'assistant' &&\n part.type === 'text' &&\n !hasStepStartBefore &&\n latestMessage.content.parts.length > 0 &&\n latestMessage.content.parts.at(-1)?.type === 'tool-invocation';\n\n if (typeof insertAt === 'number') {\n if (needsStepStart) {\n latestMessage.content.parts.splice(insertAt, 0, { type: 'step-start' });\n latestMessage.content.parts.splice(insertAt + 1, 0, part);\n } else {\n latestMessage.content.parts.splice(insertAt, 0, part);\n }\n } else {\n if (needsStepStart) {\n latestMessage.content.parts.push({ type: 'step-start' });\n }\n latestMessage.content.parts.push(part);\n }\n }\n }\n}\n","import type { LanguageModelV2DataContent } from '@ai-sdk/provider-v5';\nimport type { DataContent } from '@internal/ai-sdk-v5';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../../../error';\n\nfunction splitDataUrl(dataUrl: string): {\n mediaType: string | undefined;\n base64Content: string | undefined;\n} {\n try {\n const [header, base64Content] = dataUrl.split(',');\n return {\n mediaType: header?.split(';')[0]?.split(':')[1],\n base64Content,\n };\n } catch {\n return {\n mediaType: undefined,\n base64Content: undefined,\n };\n }\n}\n\nexport function convertToDataContent(content: DataContent | URL): {\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 {\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(content.toString());\n\n if (dataUrlMediaType == null || base64Content == null) {\n throw new MastraError({\n id: 'INVALID_DATA_URL_FORMAT',\n text: `Invalid data URL format in content ${content.toString()}`,\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n });\n }\n\n return { data: base64Content, mediaType: dataUrlMediaType };\n }\n\n return { data: content, mediaType: undefined };\n}\n","import { convertBase64ToUint8Array } from '@ai-sdk/provider-utils-v5';\n\nexport const imageMediaTypeSignatures = [\n {\n mediaType: 'image/gif' as const,\n bytesPrefix: [0x47, 0x49, 0x46],\n base64Prefix: 'R0lG',\n },\n {\n mediaType: 'image/png' as const,\n bytesPrefix: [0x89, 0x50, 0x4e, 0x47],\n base64Prefix: 'iVBORw',\n },\n {\n mediaType: 'image/jpeg' as const,\n bytesPrefix: [0xff, 0xd8],\n base64Prefix: '/9j/',\n },\n {\n mediaType: 'image/webp' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46],\n base64Prefix: 'UklGRg',\n },\n {\n mediaType: 'image/bmp' as const,\n bytesPrefix: [0x42, 0x4d],\n base64Prefix: 'Qk',\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x49, 0x49, 0x2a, 0x00],\n base64Prefix: 'SUkqAA',\n },\n {\n mediaType: 'image/tiff' as const,\n bytesPrefix: [0x4d, 0x4d, 0x00, 0x2a],\n base64Prefix: 'TU0AKg',\n },\n {\n mediaType: 'image/avif' as const,\n bytesPrefix: [0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x61, 0x76, 0x69, 0x66],\n base64Prefix: 'AAAAIGZ0eXBhdmlm',\n },\n {\n mediaType: 'image/heic' as const,\n bytesPrefix: [0x00, 0x00, 0x00, 0x20, 0x66, 0x74, 0x79, 0x70, 0x68, 0x65, 0x69, 0x63],\n base64Prefix: 'AAAAIGZ0eXBoZWlj',\n },\n] as const;\n\nexport const audioMediaTypeSignatures = [\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfb],\n base64Prefix: '//s=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xfa],\n base64Prefix: '//o=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf3],\n base64Prefix: '//M=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xf2],\n base64Prefix: '//I=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe3],\n base64Prefix: '/+M=',\n },\n {\n mediaType: 'audio/mpeg' as const,\n bytesPrefix: [0xff, 0xe2],\n base64Prefix: '/+I=',\n },\n {\n mediaType: 'audio/wav' as const,\n bytesPrefix: [0x52, 0x49, 0x46, 0x46],\n base64Prefix: 'UklGR',\n },\n {\n mediaType: 'audio/ogg' as const,\n bytesPrefix: [0x4f, 0x67, 0x67, 0x53],\n base64Prefix: 'T2dnUw',\n },\n {\n mediaType: 'audio/flac' as const,\n bytesPrefix: [0x66, 0x4c, 0x61, 0x43],\n base64Prefix: 'ZkxhQw',\n },\n {\n mediaType: 'audio/aac' as const,\n bytesPrefix: [0x40, 0x15, 0x00, 0x00],\n base64Prefix: 'QBUA',\n },\n {\n mediaType: 'audio/mp4' as const,\n bytesPrefix: [0x66, 0x74, 0x79, 0x70],\n base64Prefix: 'ZnR5cA',\n },\n {\n mediaType: 'audio/webm',\n bytesPrefix: [0x1a, 0x45, 0xdf, 0xa3],\n base64Prefix: 'GkXf',\n },\n] as const;\n\nconst stripID3 = (data: Uint8Array | string) => {\n const bytes = typeof data === 'string' ? convertBase64ToUint8Array(data) : data;\n const id3Size =\n // @ts-expect-error - bytes array access\n ((bytes[6] & 0x7f) << 21) |\n // @ts-expect-error - bytes array access\n ((bytes[7] & 0x7f) << 14) |\n // @ts-expect-error - bytes array access\n ((bytes[8] & 0x7f) << 7) |\n // @ts-expect-error - bytes array access\n (bytes[9] & 0x7f);\n\n // The raw MP3 starts here\n return bytes.slice(id3Size + 10);\n};\n\nfunction stripID3TagsIfPresent(data: Uint8Array | string): Uint8Array | string {\n const hasId3 =\n (typeof data === 'string' && data.startsWith('SUQz')) ||\n (typeof data !== 'string' &&\n data.length > 10 &&\n data[0] === 0x49 && // 'I'\n data[1] === 0x44 && // 'D'\n data[2] === 0x33); // '3'\n\n return hasId3 ? stripID3(data) : data;\n}\n\nexport function detectMediaType({\n data,\n signatures,\n}: {\n data: Uint8Array | string;\n signatures: typeof audioMediaTypeSignatures | typeof imageMediaTypeSignatures;\n}): (typeof signatures)[number]['mediaType'] | undefined {\n const processedData = stripID3TagsIfPresent(data);\n\n for (const signature of signatures) {\n if (\n typeof processedData === 'string'\n ? processedData.startsWith(signature.base64Prefix)\n : processedData.length >= signature.bytesPrefix.length &&\n signature.bytesPrefix.every((byte, index) => processedData[index] === byte)\n ) {\n return signature.mediaType;\n }\n }\n\n return undefined;\n}\n","import type { DataContent, ImagePart, FilePart } from '@ai-sdk/provider-utils-v5';\nimport type { LanguageModelV2FilePart, LanguageModelV2TextPart } from '@ai-sdk/provider-v5';\nimport { convertToDataContent, detectMediaType, imageMediaTypeSignatures } from '../../../stream/aisdk/v5/compat';\n\nexport function convertImageFilePart(\n part: ImagePart | FilePart,\n downloadedAssets?: Record<string, { mediaType: string | undefined; data: Uint8Array }>,\n): LanguageModelV2TextPart | LanguageModelV2FilePart {\n let originalData: DataContent | URL;\n const type = part.type;\n switch (type) {\n case 'image':\n originalData = part.image;\n break;\n case 'file':\n originalData = part.data;\n\n break;\n default:\n throw new Error(`Unsupported part type: ${type}`);\n }\n\n const { data: convertedData, mediaType: convertedMediaType } = convertToDataContent(originalData);\n\n let mediaType: string | undefined = convertedMediaType ?? part.mediaType;\n let data: Uint8Array | string | URL = convertedData; // binary | base64 | url\n\n // If the content is a URL, we check if it was downloaded:\n if (data instanceof URL && downloadedAssets) {\n const downloadedFile = downloadedAssets[data.toString()];\n if (downloadedFile) {\n data = downloadedFile.data;\n mediaType ??= downloadedFile.mediaType;\n }\n }\n\n // Now that we have the normalized data either as a URL or a Uint8Array,\n // we can create the LanguageModelV2Part.\n switch (type) {\n case 'image': {\n // When possible, try to detect the media type automatically\n // to deal with incorrect media type inputs.\n // When detection fails, use provided media type.\n if (data instanceof Uint8Array || typeof data === 'string') {\n mediaType = detectMediaType({ data, signatures: imageMediaTypeSignatures }) ?? mediaType;\n }\n\n return {\n type: 'file',\n mediaType: mediaType ?? 'image/*', // any image\n filename: undefined,\n data,\n providerOptions: part.providerOptions,\n };\n }\n\n case 'file': {\n // We must have a mediaType for files, if not, throw an error.\n if (mediaType == null) {\n throw new Error(`Media type is missing for file part`);\n }\n\n return {\n type: 'file',\n mediaType,\n filename: part.filename,\n data,\n providerOptions: part.providerOptions,\n };\n }\n }\n}\n","import type { Attachment } from '@ai-sdk/ui-utils-v5';\nimport type { FilePart, ImagePart, TextPart } from '@internal/ai-sdk-v4';\nimport { categorizeFileData, createDataUri } from './image-utils';\n\ntype ContentPart = TextPart | ImagePart | FilePart;\n\n/**\n * Converts a list of attachments to a list of content parts\n * for consumption by `ai/core` functions.\n * Currently only supports images and text attachments.\n */\nexport function attachmentsToParts(attachments: Attachment[]): ContentPart[] {\n const parts: ContentPart[] = [];\n\n for (const attachment of attachments) {\n // Categorize the attachment URL to determine if it's a URL, data URI, or raw base64\n const categorized = categorizeFileData(attachment.url, attachment.contentType);\n\n // If it's raw data (base64), convert it to a data URI\n let urlString = attachment.url;\n if (categorized.type === 'raw') {\n urlString = createDataUri(attachment.url, attachment.contentType || 'application/octet-stream');\n }\n\n let url;\n try {\n url = new URL(urlString);\n } catch {\n throw new Error(`Invalid URL: ${attachment.url}`);\n }\n\n switch (url.protocol) {\n case 'http:':\n case 'https:':\n // Cloud storage protocols supported by AI providers (e.g., Vertex AI for gs://, Bedrock for s3://)\n case 'gs:':\n case 's3:': {\n if (attachment.contentType?.startsWith('image/')) {\n parts.push({ type: 'image', image: url.toString(), mimeType: attachment.contentType });\n } else {\n if (!attachment.contentType) {\n throw new Error('If the attachment is not an image, it must specify a content type');\n }\n\n parts.push({\n type: 'file',\n data: url.toString(),\n mimeType: attachment.contentType,\n });\n }\n break;\n }\n\n case 'data:': {\n if (attachment.contentType?.startsWith('image/')) {\n parts.push({\n type: 'image',\n image: urlString,\n mimeType: attachment.contentType,\n });\n } else if (attachment.contentType?.startsWith('text/')) {\n parts.push({\n type: 'file',\n data: urlString,\n mimeType: attachment.contentType,\n });\n } else {\n if (!attachment.contentType) {\n throw new Error('If the attachment is not an image or text, it must specify a content type');\n }\n\n parts.push({\n type: 'file',\n data: urlString,\n mimeType: attachment.contentType,\n });\n }\n\n break;\n }\n\n default: {\n throw new Error(`Unsupported URL protocol: ${url.protocol}`);\n }\n }\n }\n\n return parts;\n}\n","/**\n * This file is an adaptation of https://github.com/vercel/ai/blob/e14c066bf4d02c5ee2180c56a01fa0e5216bc582/packages/ai/core/prompt/convert-to-core-messages.ts\n * But has been modified to work with Mastra storage adapter messages (MastraMessageV1)\n */\nimport type { AssistantContent, ToolResultPart } from '@internal/ai-sdk-v4';\nimport type { MastraMessageV1 } from '../../../memory/types';\nimport type { MastraMessageContentV2, MastraDBMessage } from '../../message-list';\nimport { attachmentsToParts } from './attachments-to-parts';\n\nconst makePushOrCombine = (v1Messages: MastraMessageV1[]) => {\n // Track how many times each ID has been used to create unique IDs for split messages\n const idUsageCount = new Map<string, number>();\n\n // Pattern to detect if an ID already has our split suffix\n const SPLIT_SUFFIX_PATTERN = /__split-\\d+$/;\n\n return (msg: MastraMessageV1) => {\n const previousMessage = v1Messages.at(-1);\n if (\n msg.role === previousMessage?.role &&\n Array.isArray(previousMessage.content) &&\n Array.isArray(msg.content) &&\n // we were creating new messages for tool calls before and not appending to the assistant message\n // so don't append here so everything works as before\n (msg.role !== `assistant` || (msg.role === `assistant` && msg.content.at(-1)?.type !== `tool-call`))\n ) {\n for (const part of msg.content) {\n // @ts-expect-error needs type gymnastics? msg.content and previousMessage.content are the same type here since both are arrays\n previousMessage.content.push(part);\n }\n } else {\n // When pushing a new message, check if we need to deduplicate the ID\n let baseId = msg.id;\n\n // Check if this ID already has a split suffix and extract the base ID\n const hasSplitSuffix = SPLIT_SUFFIX_PATTERN.test(baseId);\n if (hasSplitSuffix) {\n // This ID already has a split suffix, don't add another one\n v1Messages.push(msg);\n return;\n }\n\n const currentCount = idUsageCount.get(baseId) || 0;\n\n // If we've seen this ID before, append our unique split suffix\n if (currentCount > 0) {\n msg.id = `${baseId}__split-${currentCount}`;\n }\n\n // Increment the usage count for this base ID\n idUsageCount.set(baseId, currentCount + 1);\n\n v1Messages.push(msg);\n }\n };\n};\nexport function convertToV1Messages(messages: Array<MastraDBMessage>) {\n const v1Messages: MastraMessageV1[] = [];\n const pushOrCombine = makePushOrCombine(v1Messages);\n\n for (let i = 0; i < messages.length; i++) {\n const message = messages[i];\n const isLastMessage = i === messages.length - 1;\n if (!message?.content) continue;\n const { content, experimental_attachments: inputAttachments = [], parts: inputParts } = message.content;\n const { role } = message;\n\n const fields = {\n id: message.id,\n createdAt: message.createdAt,\n resourceId: message.resourceId!,\n threadId: message.threadId!,\n };\n\n const experimental_attachments = [...inputAttachments];\n const parts: typeof inputParts = [];\n for (const part of inputParts) {\n if (part.type === 'file') {\n experimental_attachments.push({\n url: part.data,\n contentType: part.mimeType,\n });\n } else {\n parts.push(part);\n }\n }\n\n switch (role) {\n case 'user': {\n if (parts == null) {\n const userContent = experimental_attachments\n ? [{ type: 'text', text: content || '' }, ...attachmentsToParts(experimental_attachments)]\n : { type: 'text', text: content || '' };\n pushOrCombine({\n role: 'user',\n ...fields,\n type: 'text',\n // @ts-expect-error - content type mismatch in conversion\n content: userContent,\n });\n } else {\n const textParts = message.content.parts\n .filter(part => part.type === 'text')\n .map(part => ({\n type: 'text' as const,\n text: part.text,\n }));\n\n const userContent = experimental_attachments\n ? [...textParts, ...attachmentsToParts(experimental_attachments)]\n : textParts;\n pushOrCombine({\n role: 'user',\n ...fields,\n type: 'text',\n content:\n Array.isArray(userContent) &&\n userContent.length === 1 &&\n userContent[0]?.type === `text` &&\n typeof content !== `undefined`\n ? content\n : userContent,\n });\n }\n break;\n }\n\n case 'assistant': {\n if (message.content.parts != null) {\n let currentStep = 0;\n let blockHasToolInvocations = false;\n let block: MastraMessageContentV2['parts'] = [];\n\n function processBlock() {\n const content: AssistantContent = [];\n\n for (const part of block) {\n switch (part.type) {\n case 'file':\n case 'text': {\n content.push(part);\n break;\n }\n case 'reasoning': {\n for (const detail of part.details) {\n switch (detail.type) {\n case 'text':\n content.push({\n type: 'reasoning' as const,\n text: detail.text,\n signature: detail.signature,\n });\n break;\n case 'redacted':\n content.push({\n type: 'redacted-reasoning' as const,\n data: detail.data,\n });\n break;\n }\n }\n break;\n }\n case 'tool-invocation':\n // Skip updateWorkingMemory tool calls as they should not be visible in history\n if (part.toolInvocation.toolName !== 'updateWorkingMemory') {\n content.push({\n type: 'tool-call' as const,\n toolCallId: part.toolInvocation.toolCallId,\n toolName: part.toolInvocation.toolName,\n args: part.toolInvocation.args,\n });\n }\n break;\n }\n }\n\n pushOrCombine({\n role: 'assistant',\n ...fields,\n type: content.some(c => c.type === `tool-call`) ? 'tool-call' : 'text',\n content:\n typeof content !== `string` &&\n Array.isArray(content) &&\n content.length === 1 &&\n content[0]?.type === `text`\n ? content[0].text\n : content,\n });\n\n // check if there are tool invocations with results in the block\n const stepInvocations = block\n .filter(part => `type` in part && part.type === 'tool-invocation')\n .map(part => part.toolInvocation)\n .filter(ti => ti.toolName !== 'updateWorkingMemory');\n\n // Only create tool-result message if there are actual results\n const invocationsWithResults = stepInvocations.filter(ti => ti.state === 'result' && 'result' in ti);\n\n if (invocationsWithResults.length > 0) {\n pushOrCombine({\n role: 'tool',\n ...fields,\n type: 'tool-result',\n content: invocationsWithResults.map((toolInvocation): ToolResultPart => {\n const { toolCallId, toolName, result } = toolInvocation;\n return {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n }),\n });\n }\n\n // updates for next block\n block = [];\n blockHasToolInvocations = false;\n currentStep++;\n }\n\n for (const part of message.content.parts) {\n switch (part.type) {\n case 'text': {\n if (blockHasToolInvocations) {\n processBlock(); // text must come after tool invocations\n }\n block.push(part);\n break;\n }\n case 'file':\n case 'reasoning': {\n block.push(part);\n break;\n }\n case 'tool-invocation': {\n // If we have non-tool content (text/file/reasoning) in the block, process it first\n const hasNonToolContent = block.some(\n p => p.type === 'text' || p.type === 'file' || p.type === 'reasoning',\n );\n if (hasNonToolContent || (part.toolInvocation.step ?? 0) !== currentStep) {\n processBlock();\n }\n block.push(part);\n blockHasToolInvocations = true;\n break;\n }\n }\n }\n\n processBlock();\n\n // Check if there are toolInvocations that weren't processed from parts\n const toolInvocations = message.content.toolInvocations;\n if (toolInvocations && toolInvocations.length > 0) {\n // Find tool invocations that weren't already processed from parts\n const processedToolCallIds = new Set<string>();\n for (const part of message.content.parts) {\n if (part.type === 'tool-invocation' && part.toolInvocation.toolCallId) {\n processedToolCallIds.add(part.toolInvocation.toolCallId);\n }\n }\n\n const unprocessedToolInvocations = toolInvocations.filter(\n ti => !processedToolCallIds.has(ti.toolCallId) && ti.toolName !== 'updateWorkingMemory',\n );\n\n if (unprocessedToolInvocations.length > 0) {\n // Group by step, handling undefined steps\n const invocationsByStep = new Map<number, typeof unprocessedToolInvocations>();\n\n for (const inv of unprocessedToolInvocations) {\n const step = inv.step ?? 0;\n if (!invocationsByStep.has(step)) {\n invocationsByStep.set(step, []);\n }\n invocationsByStep.get(step)!.push(inv);\n }\n\n // Process each step\n const sortedSteps = Array.from(invocationsByStep.keys()).sort((a, b) => a - b);\n\n for (const step of sortedSteps) {\n const stepInvocations = invocationsByStep.get(step)!;\n\n // Create tool-call message for all invocations (calls and results)\n pushOrCombine({\n role: 'assistant',\n ...fields,\n type: 'tool-call',\n content: [\n ...stepInvocations.map(({ toolCallId, toolName, args }) => ({\n type: 'tool-call' as const,\n toolCallId,\n toolName,\n args,\n })),\n ],\n });\n\n // Only create tool-result message if there are actual results\n const invocationsWithResults = stepInvocations.filter(ti => ti.state === 'result' && 'result' in ti);\n\n if (invocationsWithResults.length > 0) {\n pushOrCombine({\n role: 'tool',\n ...fields,\n type: 'tool-result',\n content: invocationsWithResults.map((toolInvocation): ToolResultPart => {\n const { toolCallId, toolName, result } = toolInvocation;\n return {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n }),\n });\n }\n }\n }\n }\n\n break;\n }\n\n const toolInvocations = message.content.toolInvocations;\n\n if (toolInvocations == null || toolInvocations.length === 0) {\n pushOrCombine({ role: 'assistant', ...fields, content: content || '', type: 'text' });\n break;\n }\n\n const maxStep = toolInvocations.reduce((max, toolInvocation) => {\n return Math.max(max, toolInvocation.step ?? 0);\n }, 0);\n\n for (let i = 0; i <= maxStep; i++) {\n const stepInvocations = toolInvocations.filter(\n toolInvocation => (toolInvocation.step ?? 0) === i && toolInvocation.toolName !== 'updateWorkingMemory',\n );\n\n if (stepInvocations.length === 0) {\n continue;\n }\n\n // assistant message with tool calls\n pushOrCombine({\n role: 'assistant',\n ...fields,\n type: 'tool-call',\n content: [\n ...(isLastMessage && content && i === 0 ? [{ type: 'text' as const, text: content }] : []),\n ...stepInvocations.map(({ toolCallId, toolName, args }) => ({\n type: 'tool-call' as const,\n toolCallId,\n toolName,\n args,\n })),\n ],\n });\n\n // Only create tool-result message if there are actual results\n const invocationsWithResults = stepInvocations.filter(ti => ti.state === 'result' && 'result' in ti);\n\n if (invocationsWithResults.length > 0) {\n pushOrCombine({\n role: 'tool',\n ...fields,\n type: 'tool-result',\n content: invocationsWithResults.map((toolInvocation): ToolResultPart => {\n const { toolCallId, toolName, result } = toolInvocation;\n return {\n type: 'tool-result',\n toolCallId,\n toolName,\n result,\n };\n }),\n });\n }\n }\n\n if (content && !isLastMessage) {\n pushOrCombine({ role: 'assistant', ...fields, type: 'text', content: content || '' });\n }\n\n break;\n }\n }\n }\n\n return v1Messages;\n}\n","/**\n * Fetches a URL with retry logic\n * @param url The URL to fetch\n * @param options Fetch options\n * @param maxRetries Maximum number of retry attempts\n * @returns The fetch Response if successful\n */\nexport async function fetchWithRetry(\n url: string,\n options: RequestInit = {},\n maxRetries: number = 3,\n): Promise<Response> {\n let retryCount = 0;\n let lastError: Error | null = null;\n\n while (retryCount < maxRetries) {\n try {\n const response = await fetch(url, options);\n\n if (!response.ok) {\n // Only retry on server errors (5xx) or network failures\n // Don't retry on client errors (4xx)\n if (response.status >= 400 && response.status < 500) {\n throw new Error(`Request failed with status: ${response.status} ${response.statusText}`);\n }\n\n lastError = new Error(`Request failed with status: ${response.status} ${response.statusText}`);\n retryCount++;\n\n if (retryCount >= maxRetries) {\n throw lastError;\n }\n\n const delay = Math.min(1000 * Math.pow(2, retryCount), 10000);\n await new Promise(resolve => setTimeout(resolve, delay));\n continue;\n }\n\n return response;\n } catch (error) {\n lastError = error instanceof Error ? error : new Error(String(error));\n\n // If it's a client error (4xx), don't retry\n if (lastError.message.includes('status: 4')) {\n throw lastError;\n }\n\n retryCount++;\n\n if (retryCount >= maxRetries) {\n break;\n }\n\n const delay = Math.min(1000 * Math.pow(2, retryCount), 10000);\n await new Promise(resolve => setTimeout(resolve, delay));\n }\n }\n\n throw lastError || new Error('Request failed after multiple retry attempts');\n}\n","import { isUrlSupported } from '@ai-sdk/provider-utils-v5';\nimport { ErrorCategory, ErrorDomain, MastraError } from '../../../error';\nimport { fetchWithRetry } from '../../../utils/fetchWithRetry';\nimport type { AIV5Type } from '../types';\n\nexport const downloadFromUrl = async ({ url, downloadRetries }: { url: URL; downloadRetries: number }) => {\n const urlText = url.toString();\n\n try {\n const response = await fetchWithRetry(\n urlText,\n {\n method: 'GET',\n },\n downloadRetries,\n );\n\n if (!response.ok) {\n throw new MastraError({\n id: 'DOWNLOAD_ASSETS_FAILED',\n text: 'Failed to download asset',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n });\n }\n return {\n data: new Uint8Array(await response.arrayBuffer()),\n mediaType: response.headers.get('content-type') ?? undefined,\n };\n } catch (error) {\n throw new MastraError(\n {\n id: 'DOWNLOAD_ASSETS_FAILED',\n text: 'Failed to download asset',\n domain: ErrorDomain.LLM,\n category: ErrorCategory.USER,\n },\n error,\n );\n }\n};\n\nexport async function downloadAssetsFromMessages({\n messages,\n downloadConcurrency = 10,\n downloadRetries = 3,\n supportedUrls,\n}: {\n messages: AIV5Type.ModelMessage[];\n downloadConcurrency?: number;\n downloadRetries?: number;\n supportedUrls?: Record<string, RegExp[]>;\n}) {\n const pMap = (await import('p-map')).default;\n\n const filesToDownload = messages\n .filter(message => message.role === 'user')\n .map(message => message.content)\n .filter(content => Array.isArray(content))\n .flat()\n .filter(part => part.type === 'image' || part.type === 'file')\n .map(part => {\n const mediaType = part.mediaType ?? (part.type === 'image' ? 'image/*' : undefined);\n\n let data = part.type === 'image' ? part.image : part.data;\n if (typeof data === 'string') {\n try {\n data = new URL(data);\n } catch {}\n }\n\n return { mediaType, data };\n })\n\n .filter((part): part is { mediaType: string | undefined; data: URL } => part.data instanceof URL)\n .map(part => {\n return {\n url: part.data,\n isUrlSupportedByModel:\n part.mediaType != null &&\n isUrlSupported({\n url: part.data.toString(),\n mediaType: part.mediaType,\n supportedUrls: supportedUrls ?? {},\n }),\n };\n });\n\n const downloadedFiles = await pMap(\n filesToDownload,\n async fileItem => {\n if (fileItem.isUrlSupportedByModel) {\n return null;\n }\n return {\n url: fileItem.url.toString(),\n ...(await downloadFromUrl({ url: fileItem.url, downloadRetries })),\n };\n },\n {\n concurrency: downloadConcurrency,\n },\n );\n\n const downloadFileList = downloadedFiles\n .filter(\n (\n downloadedFile,\n ): downloadedFile is {\n url: string;\n mediaType: string | undefined;\n data: Uint8Array<ArrayBuffer>;\n } => downloadedFile?.data != null,\n )\n .map(({ url, data, mediaType }) => [url, { data, mediaType }]);\n\n return Object.fromEntries(downloadFileList);\n}\n","import type { MastraDBMessage } from './types';\n\n/**\n * Serialized form of a MastraDBMessage where Date is converted to string\n */\nexport type SerializedMessage = Omit<MastraDBMessage, 'createdAt'> & {\n createdAt: string;\n};\n\n/**\n * Serialize a message by converting Date to string\n */\nexport function serializeMessage(message: MastraDBMessage): SerializedMessage {\n return {\n ...message,\n createdAt: message.createdAt.toUTCString(),\n };\n}\n\n/**\n * Deserialize a message by converting string back to Date\n */\nexport function deserializeMessage(message: SerializedMessage): MastraDBMessage {\n return {\n ...message,\n createdAt: new Date(message.createdAt),\n } as MastraDBMessage;\n}\n\n/**\n * Serialize an array of messages\n */\nexport function serializeMessages(messages: MastraDBMessage[]): SerializedMessage[] {\n return messages.map(serializeMessage);\n}\n\n/**\n * Deserialize an array of messages\n */\nexport function deserializeMessages(messages: SerializedMessage[]): MastraDBMessage[] {\n return messages.map(deserializeMessage);\n}\n","import type { CoreSystemMessage } from '@internal/ai-sdk-v4';\n\nimport { serializeMessages, deserializeMessages } from './serialization';\nimport type { SerializedMessage } from './serialization';\nimport type { MastraDBMessage, MessageSource, MemoryInfo } from './types';\n\n// Re-export for backward compatibility\nexport type { MessageSource };\n\n/**\n * MessageStateManager - Manages the state of messages in a MessageList\n *\n * Handles:\n * - Tracking messages by their source (memory, input, response, context)\n * - Tracking which messages have been persisted\n * - Providing efficient lookups for message categorization\n *\n * This replaces the 8 Sets in the original MessageList with a more manageable interface.\n */\nexport class MessageStateManager {\n // Messages tracked by source\n private memoryMessages = new Set<MastraDBMessage>();\n private newUserMessages = new Set<MastraDBMessage>();\n private newResponseMessages = new Set<MastraDBMessage>();\n private userContextMessages = new Set<MastraDBMessage>();\n\n // Persisted message tracking\n private memoryMessagesPersisted = new Set<MastraDBMessage>();\n private newUserMessagesPersisted = new Set<MastraDBMessage>();\n private newResponseMessagesPersisted = new Set<MastraDBMessage>();\n private userContextMessagesPersisted = new Set<MastraDBMessage>();\n\n /**\n * Add a message to the appropriate source set and persisted set\n */\n addToSource(message: MastraDBMessage, source: MessageSource): void {\n switch (source) {\n case 'memory':\n this.memoryMessages.add(message);\n this.memoryMessagesPersisted.add(message);\n break;\n case 'response':\n this.newResponseMessages.add(message);\n this.newResponseMessagesPersisted.add(message);\n // Handle case where a client-side tool response was added as user input\n if (this.newUserMessages.has(message)) {\n this.newUserMessages.delete(message);\n }\n break;\n case 'input':\n case 'user': // deprecated alias for input\n this.newUserMessages.add(message);\n this.newUserMessagesPersisted.add(message);\n break;\n case 'context':\n this.userContextMessages.add(message);\n this.userContextMessagesPersisted.add(message);\n break;\n default:\n throw new Error(`Missing message source for message ${message}`);\n }\n }\n\n /**\n * Check if a message belongs to the memory source\n */\n isMemoryMessage(message: MastraDBMessage): boolean {\n return this.memoryMessages.has(message);\n }\n\n /**\n * Check if a message belongs to the input source\n */\n isUserMessage(message: MastraDBMessage): boolean {\n return this.newUserMessages.has(message);\n }\n\n /**\n * Check if a message belongs to the response source\n */\n isResponseMessage(message: MastraDBMessage): boolean {\n return this.newResponseMessages.has(message);\n }\n\n /**\n * Check if a message belongs to the context source\n */\n isContextMessage(message: MastraDBMessage): boolean {\n return this.userContextMessages.has(message);\n }\n\n /**\n * Get all memory messages\n */\n getMemoryMessages(): Set<MastraDBMessage> {\n return this.memoryMessages;\n }\n\n /**\n * Get all user/input messages\n */\n getUserMessages(): Set<MastraDBMessage> {\n return this.newUserMessages;\n }\n\n /**\n * Get all response messages\n */\n getResponseMessages(): Set<MastraDBMessage> {\n return this.newResponseMessages;\n }\n\n /**\n * Get all context messages\n */\n getContextMessages(): Set<MastraDBMessage> {\n return this.userContextMessages;\n }\n\n /**\n * Get persisted memory messages\n */\n getMemoryMessagesPersisted(): Set<MastraDBMessage> {\n return this.memoryMessagesPersisted;\n }\n\n /**\n * Get persisted user/input messages\n */\n getUserMessagesPersisted(): Set<MastraDBMessage> {\n return this.newUserMessagesPersisted;\n }\n\n /**\n * Get persisted response messages\n */\n getResponseMessagesPersisted(): Set<MastraDBMessage> {\n return this.newResponseMessagesPersisted;\n }\n\n /**\n * Get persisted context messages\n */\n getContextMessagesPersisted(): Set<MastraDBMessage> {\n return this.userContextMessagesPersisted;\n }\n\n /**\n * Remove a message from all source sets\n */\n removeMessage(message: MastraDBMessage): void {\n this.memoryMessages.delete(message);\n this.newUserMessages.delete(message);\n this.newResponseMessages.delete(message);\n this.userContextMessages.delete(message);\n }\n\n /**\n * Clear all user messages\n */\n clearUserMessages(): void {\n this.newUserMessages.clear();\n }\n\n /**\n * Clear all response messages\n */\n clearResponseMessages(): void {\n this.newResponseMessages.clear();\n }\n\n /**\n * Clear all context messages\n */\n clearContextMessages(): void {\n this.userContextMessages.clear();\n }\n\n /**\n * Clear all messages from all sources (but not persisted tracking)\n */\n clearAll(): void {\n this.newUserMessages.clear();\n this.newResponseMessages.clear();\n this.userContextMessages.clear();\n }\n\n /**\n * Create a lookup function to determine message source\n */\n createSourceChecker(): {\n memory: Set<string>;\n input: Set<string>;\n output: Set<string>;\n context: Set<string>;\n getSource: (message: MastraDBMessage) => MessageSource | null;\n } {\n const sources = {\n memory: new Set(Array.from(this.memoryMessages.values()).map(m => m.id)),\n output: new Set(Array.from(this.newResponseMessages.values()).map(m => m.id)),\n input: new Set(Array.from(this.newUserMessages.values()).map(m => m.id)),\n context: new Set(Array.from(this.userContextMessages.values()).map(m => m.id)),\n };\n\n return {\n ...sources,\n getSource: (msg: MastraDBMessage): MessageSource | null => {\n if (sources.memory.has(msg.id)) return 'memory';\n if (sources.input.has(msg.id)) return 'input';\n if (sources.output.has(msg.id)) return 'response';\n if (sources.context.has(msg.id)) return 'context';\n return null;\n },\n };\n }\n\n /**\n * Check if a message is a new (unsaved) user or response message by ID\n */\n isNewMessage(messageOrId: MastraDBMessage | string): boolean {\n const id = typeof messageOrId === 'string' ? messageOrId : messageOrId.id;\n\n // Check by object reference first (fast path)\n if (typeof messageOrId !== 'string') {\n if (this.newUserMessages.has(messageOrId) || this.newResponseMessages.has(messageOrId)) {\n return true;\n }\n }\n\n // Check by ID (handles copies)\n return (\n Array.from(this.newUserMessages).some(m => m.id === id) ||\n Array.from(this.newResponseMessages).some(m => m.id === id)\n );\n }\n\n /**\n * Serialize source tracking state (message IDs only)\n */\n private serializeSourceTracking(): {\n memoryMessages: string[];\n newUserMessages: string[];\n newResponseMessages: string[];\n userContextMessages: string[];\n memoryMessagesPersisted: string[];\n newUserMessagesPersisted: string[];\n newResponseMessagesPersisted: string[];\n userContextMessagesPersisted: string[];\n } {\n const serializeSet = (set: Set<MastraDBMessage>) => Array.from(set).map(value => value.id);\n\n return {\n memoryMessages: serializeSet(this.memoryMessages),\n newUserMessages: serializeSet(this.newUserMessages),\n newResponseMessages: serializeSet(this.newResponseMessages),\n userContextMessages: serializeSet(this.userContextMessages),\n memoryMessagesPersisted: serializeSet(this.memoryMessagesPersisted),\n newUserMessagesPersisted: serializeSet(this.newUserMessagesPersisted),\n newResponseMessagesPersisted: serializeSet(this.newResponseMessagesPersisted),\n userContextMessagesPersisted: serializeSet(this.userContextMessagesPersisted),\n };\n }\n\n /**\n * Deserialize source tracking state from message IDs\n */\n private deserializeSourceTracking(\n state: ReturnType<typeof this.serializeSourceTracking>,\n messages: MastraDBMessage[],\n ): void {\n const deserializeSet = (ids: string[]) =>\n new Set(ids.map(id => messages.find(m => m.id === id)).filter(Boolean) as MastraDBMessage[]);\n\n this.memoryMessages = deserializeSet(state.memoryMessages);\n this.newUserMessages = deserializeSet(state.newUserMessages);\n this.newResponseMessages = deserializeSet(state.newResponseMessages);\n this.userContextMessages = deserializeSet(state.userContextMessages);\n this.memoryMessagesPersisted = deserializeSet(state.memoryMessagesPersisted);\n this.newUserMessagesPersisted = deserializeSet(state.newUserMessagesPersisted);\n this.newResponseMessagesPersisted = deserializeSet(state.newResponseMessagesPersisted);\n this.userContextMessagesPersisted = deserializeSet(state.userContextMessagesPersisted);\n }\n\n /**\n * Serialize all MessageList state for workflow suspend/resume\n */\n serializeAll(data: {\n messages: MastraDBMessage[];\n systemMessages: CoreSystemMessage[];\n taggedSystemMessages: Record<string, CoreSystemMessage[]>;\n memoryInfo: MemoryInfo | null;\n agentNetworkAppend: boolean;\n }): SerializedMessageListState {\n return {\n messages: serializeMessages(data.messages),\n systemMessages: data.systemMessages,\n taggedSystemMessages: data.taggedSystemMessages,\n memoryInfo: data.memoryInfo,\n _agentNetworkAppend: data.agentNetworkAppend,\n ...this.serializeSourceTracking(),\n };\n }\n\n /**\n * Deserialize all MessageList state from workflow suspend/resume\n */\n deserializeAll(state: SerializedMessageListState): {\n messages: MastraDBMessage[];\n systemMessages: CoreSystemMessage[];\n taggedSystemMessages: Record<string, CoreSystemMessage[]>;\n memoryInfo: MemoryInfo | null;\n agentNetworkAppend: boolean;\n } {\n const messages = deserializeMessages(state.messages);\n\n this.deserializeSourceTracking(\n {\n memoryMessages: state.memoryMessages,\n newUserMessages: state.newUserMessages,\n newResponseMessages: state.newResponseMessages,\n userContextMessages: state.userContextMessages,\n memoryMessagesPersisted: state.memoryMessagesPersisted,\n newUserMessagesPersisted: state.newUserMessagesPersisted,\n newResponseMessagesPersisted: state.newResponseMessagesPersisted,\n userContextMessagesPersisted: state.userContextMessagesPersisted,\n },\n messages,\n );\n\n return {\n messages,\n systemMessages: state.systemMessages,\n taggedSystemMessages: state.taggedSystemMessages,\n memoryInfo: state.memoryInfo,\n agentNetworkAppend: state._agentNetworkAppend,\n };\n }\n}\n\n/**\n * Serialized form of the complete MessageList state\n */\nexport interface SerializedMessageListState {\n messages: SerializedMessage[];\n systemMessages: CoreSystemMessage[];\n taggedSystemMessages: Record<string, CoreSystemMessage[]>;\n memoryInfo: MemoryInfo | null;\n _agentNetworkAppend: boolean;\n memoryMessages: string[];\n newUserMessages: string[];\n newResponseMessages: string[];\n userContextMessages: string[];\n memoryMessagesPersisted: string[];\n newUserMessagesPersisted: string[];\n newResponseMessagesPersisted: string[];\n userContextMessagesPersisted: string[];\n}\n","import type { LanguageModelV2Prompt } from '@ai-sdk/provider-v5';\nimport type { LanguageModelV1Prompt, CoreMessage as CoreMessageV4 } from '@internal/ai-sdk-v4';\nimport type * as AIV4Type from '@internal/ai-sdk-v4';\nimport { v4 as randomUUID } from '@lukeed/uuid';\n\nimport { MastraError, ErrorDomain, ErrorCategory } from '../../error';\nimport type { IMastraLogger } from '../../logger';\nimport type { IdGeneratorContext } from '../../types';\nimport { AIV4Adapter, AIV5Adapter } from './adapters';\nimport { CacheKeyGenerator } from './cache/CacheKeyGenerator';\nimport {\n aiV4CoreMessageToV1PromptMessage,\n aiV5ModelMessageToV2PromptMessage,\n coreContentToString,\n messagesAreEqual,\n inputToMastraDBMessage as convertInputToMastraDBMessage,\n aiV4UIMessagesToAIV4CoreMessages,\n aiV5UIMessagesToAIV5ModelMessages as convertAIV5UIToModelMessages,\n aiV4CoreMessagesToAIV5ModelMessages as convertAIV4CoreToAIV5ModelMessages,\n systemMessageToAIV4Core,\n StepContentExtractor,\n} from './conversion';\nimport { TypeDetector } from './detection/TypeDetector';\nimport { MessageMerger } from './merge';\nimport { convertImageFilePart } from './prompt/convert-file';\nimport { convertToV1Messages } from './prompt/convert-to-mastra-v1';\nimport { downloadAssetsFromMessages } from './prompt/download-assets';\nimport { MessageStateManager } from './state';\nimport type {\n MastraDBMessage,\n MastraMessageV1,\n MessageSource,\n MemoryInfo,\n UIMessageWithMetadata,\n SerializedMessageListState,\n} from './state';\nimport type { AIV5Type, AIV5ResponseMessage, MessageInput, MessageListInput } from './types';\nimport { ensureGeminiCompatibleMessages } from './utils/provider-compat';\n\nexport class MessageList {\n private messages: MastraDBMessage[] = [];\n\n // passed in by dev in input or context\n private systemMessages: AIV4Type.CoreSystemMessage[] = [];\n // passed in by us for a specific purpose, eg memory system message\n private taggedSystemMessages: Record<string, AIV4Type.CoreSystemMessage[]> = {};\n\n private memoryInfo: null | MemoryInfo = null;\n\n // Centralized state management for message tracking\n private stateManager = new MessageStateManager();\n\n // Legacy getters for backward compatibility - delegate to stateManager\n private get memoryMessages() {\n return this.stateManager.getMemoryMessages();\n }\n private get newUserMessages() {\n return this.stateManager.getUserMessages();\n }\n private get newResponseMessages() {\n return this.stateManager.getResponseMessages();\n }\n private get userContextMessages() {\n return this.stateManager.getContextMessages();\n }\n private get memoryMessagesPersisted() {\n return this.stateManager.getMemoryMessagesPersisted();\n }\n private get newUserMessagesPersisted() {\n return this.stateManager.getUserMessagesPersisted();\n }\n private get newResponseMessagesPersisted() {\n return this.stateManager.getResponseMessagesPersisted();\n }\n private get userContextMessagesPersisted() {\n return this.stateManager.getContextMessagesPersisted();\n }\n\n private generateMessageId?: (context?: IdGeneratorContext) => string;\n private _agentNetworkAppend = false;\n private logger?: IMastraLogger;\n\n // Event recording for observability\n private isRecording = false;\n private recordedEvents: Array<{\n type: 'add' | 'addSystem' | 'removeByIds' | 'clear';\n source?: MessageSource;\n count?: number;\n ids?: string[];\n text?: string;\n tag?: string;\n message?: CoreMessageV4;\n }> = [];\n\n constructor({\n threadId,\n resourceId,\n generateMessageId,\n logger,\n // @ts-expect-error Flag for agent network messages\n _agentNetworkAppend,\n }: {\n threadId?: string;\n resourceId?: string;\n generateMessageId?: (context?: IdGeneratorContext) => string;\n logger?: IMastraLogger;\n } = {}) {\n if (threadId) {\n this.memoryInfo = { threadId, resourceId };\n }\n this.generateMessageId = generateMessageId;\n this.logger = logger;\n this._agentNetworkAppend = _agentNetworkAppend || false;\n }\n\n /**\n * Start recording mutations to the MessageList for observability/tracing\n */\n public startRecording(): void {\n this.isRecording = true;\n this.recordedEvents = [];\n }\n\n public hasRecordedEvents(): boolean {\n return this.recordedEvents.length > 0;\n }\n\n public getRecordedEvents(): Array<{\n type: 'add' | 'addSystem' | 'removeByIds' | 'clear';\n source?: MessageSource;\n count?: number;\n ids?: string[];\n text?: string;\n tag?: string;\n message?: CoreMessageV4;\n }> {\n const events = [...this.recordedEvents];\n return events;\n }\n\n /**\n * Stop recording and return the list of recorded events\n */\n public stopRecording(): Array<{\n type: 'add' | 'addSystem' | 'removeByIds' | 'clear';\n source?: MessageSource;\n count?: number;\n ids?: string[];\n text?: string;\n tag?: string;\n message?: CoreMessageV4;\n }> {\n this.isRecording = false;\n const events = this.getRecordedEvents();\n this.recordedEvents = [];\n return events;\n }\n\n public add(messages: MessageListInput, messageSource: MessageSource) {\n if (messageSource === `user`) messageSource = `input`;\n\n if (!messages) return this;\n const messageArray = Array.isArray(messages) ? messages : [messages];\n\n // Record event if recording is enabled\n if (this.isRecording) {\n this.recordedEvents.push({\n type: 'add',\n source: messageSource,\n count: messageArray.length,\n });\n }\n\n for (const message of messageArray) {\n this.addOne(\n typeof message === `string`\n ? {\n role: 'user',\n content: message,\n }\n : message,\n messageSource,\n );\n }\n return this;\n }\n\n public serialize(): SerializedMessageListState {\n return this.stateManager.serializeAll({\n messages: this.messages,\n systemMessages: this.systemMessages,\n taggedSystemMessages: this.taggedSystemMessages,\n memoryInfo: this.memoryInfo,\n agentNetworkAppend: this._agentNetworkAppend,\n });\n }\n\n /**\n * Custom serialization for tracing/observability spans.\n * Returns a clean representation with just the essential data,\n * excluding internal state tracking, methods, and implementation details.\n *\n * This is automatically called by the span serialization system when\n * a MessageList instance appears in span input/output/attributes.\n */\n public serializeForSpan(): {\n messages: Array<{ role: string; content: unknown }>;\n systemMessages: Array<{ role: string; content: unknown; tag?: string }>;\n } {\n const coreMessages = this.all.aiV4.core();\n\n return {\n messages: coreMessages.map(msg => ({\n role: msg.role,\n content: msg.content,\n })),\n systemMessages: [\n // Untagged first (base instructions)\n ...this.systemMessages.map(m => ({ role: m.role, content: m.content })),\n // Tagged after (contextual additions)\n ...Object.entries(this.taggedSystemMessages).flatMap(([tag, msgs]) =>\n msgs.map(m => ({ role: m.role, content: m.content, tag })),\n ),\n ],\n };\n }\n\n public deserialize(state: SerializedMessageListState) {\n const data = this.stateManager.deserializeAll(state);\n this.messages = data.messages;\n this.systemMessages = data.systemMessages;\n this.taggedSystemMessages = data.taggedSystemMessages;\n this.memoryInfo = data.memoryInfo;\n this._agentNetworkAppend = data.agentNetworkAppend;\n return this;\n }\n\n public makeMessageSourceChecker(): {\n memory: Set<string>;\n input: Set<string>;\n output: Set<string>;\n context: Set<string>;\n getSource: (message: MastraDBMessage) => MessageSource | null;\n } {\n return this.stateManager.createSourceChecker();\n }\n\n public getLatestUserContent(): string | null {\n const currentUserMessages = this.all.core().filter(m => m.role === 'user');\n const content = currentUserMessages.at(-1)?.content;\n if (!content) return null;\n return coreContentToString(content);\n }\n\n public get get() {\n return {\n all: this.all,\n remembered: this.remembered,\n input: this.input,\n response: this.response,\n };\n }\n public get getPersisted() {\n return {\n remembered: this.rememberedPersisted,\n input: this.inputPersisted,\n taggedSystemMessages: this.taggedSystemMessages,\n response: this.responsePersisted,\n };\n }\n\n public get clear() {\n return {\n all: {\n db: (): MastraDBMessage[] => {\n const allMessages = [...this.messages];\n this.messages = [];\n this.stateManager.clearAll();\n if (this.isRecording && allMessages.length > 0) {\n this.recordedEvents.push({\n type: 'clear',\n count: allMessages.length,\n });\n }\n return allMessages;\n },\n },\n input: {\n db: (): MastraDBMessage[] => {\n const userMessages = Array.from(this.stateManager.getUserMessages());\n this.messages = this.messages.filter(m => !this.stateManager.isUserMessage(m));\n this.stateManager.clearUserMessages();\n if (this.isRecording && userMessages.length > 0) {\n this.recordedEvents.push({\n type: 'clear',\n source: 'input',\n count: userMessages.length,\n });\n }\n return userMessages;\n },\n },\n response: {\n db: () => {\n const responseMessages = Array.from(this.stateManager.getResponseMessages());\n this.messages = this.messages.filter(m => !this.stateManager.isResponseMessage(m));\n this.stateManager.clearResponseMessages();\n if (this.isRecording && responseMessages.length > 0) {\n this.recordedEvents.push({\n type: 'clear',\n source: 'response',\n count: responseMessages.length,\n });\n }\n return responseMessages;\n },\n },\n };\n }\n\n /**\n * Remove messages by ID\n * @param ids - Array of message IDs to remove\n * @returns Array of removed messages\n */\n public removeByIds(ids: string[]): MastraDBMessage[] {\n const idsSet = new Set(ids);\n const removed: MastraDBMessage[] = [];\n this.messages = this.messages.filter(m => {\n if (idsSet.has(m.id)) {\n removed.push(m);\n this.stateManager.removeMessage(m);\n return false;\n }\n return true;\n });\n if (this.isRecording && removed.length > 0) {\n this.recordedEvents.push({\n type: 'removeByIds',\n ids,\n count: removed.length,\n });\n }\n return removed;\n }\n\n private all = {\n db: (): MastraDBMessage[] => this.messages,\n v1: (): MastraMessageV1[] => convertToV1Messages(this.all.db()),\n\n aiV5: {\n model: (): AIV5Type.ModelMessage[] => convertAIV5UIToModelMessages(this.all.aiV5.ui(), this.messages),\n ui: (): AIV5Type.UIMessage[] => this.all.db().map(AIV5Adapter.toUIMessage),\n\n // Used when calling AI SDK streamText/generateText\n prompt: (): AIV5Type.ModelMessage[] => {\n const systemMessages = convertAIV4CoreToAIV5ModelMessages(\n [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat()],\n `system`,\n this.createAdapterContext(),\n this.messages,\n );\n // Filter incomplete tool calls when sending messages TO the LLM\n const modelMessages = convertAIV5UIToModelMessages(this.all.aiV5.ui(), this.messages, true);\n\n const messages = [...systemMessages, ...modelMessages];\n\n return ensureGeminiCompatibleMessages(messages, this.logger);\n },\n\n // Used for creating LLM prompt messages without AI SDK streamText/generateText\n llmPrompt: async (\n options: {\n downloadConcurrency?: number;\n downloadRetries?: number;\n supportedUrls?: Record<string, RegExp[]>;\n } = {\n downloadConcurrency: 10,\n downloadRetries: 3,\n },\n ): Promise<LanguageModelV2Prompt> => {\n // Filter incomplete tool calls when sending messages TO the LLM\n // Stored toModelOutput results from providerMetadata are applied automatically\n const modelMessages = convertAIV5UIToModelMessages(this.all.aiV5.ui(), this.messages, true);\n const systemMessages = convertAIV4CoreToAIV5ModelMessages(\n [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat()],\n `system`,\n this.createAdapterContext(),\n this.messages,\n );\n\n const downloadedAssets = await downloadAssetsFromMessages({\n messages: modelMessages,\n downloadConcurrency: options?.downloadConcurrency,\n downloadRetries: options?.downloadRetries,\n supportedUrls: options?.supportedUrls,\n });\n\n let messages = [...systemMessages, ...modelMessages];\n\n // Check if any messages have image/file content that needs processing\n const hasImageOrFileContent = modelMessages.some(\n message =>\n message.role === 'user' &&\n typeof message.content !== 'string' &&\n message.content.some(part => part.type === 'image' || part.type === 'file'),\n );\n\n if (hasImageOrFileContent) {\n messages = messages.map(message => {\n if (message.role === 'user') {\n if (typeof message.content === 'string') {\n return {\n role: 'user' as const,\n content: [{ type: 'text' as const, text: message.content }],\n providerOptions: message.providerOptions,\n } as AIV5Type.ModelMessage;\n }\n\n const convertedContent = message.content\n .map(part => {\n if (part.type === 'image' || part.type === 'file') {\n return convertImageFilePart(part, downloadedAssets);\n }\n return part;\n })\n .filter(part => part.type !== 'text' || part.text !== '');\n\n return {\n role: 'user' as const,\n content: convertedContent,\n providerOptions: message.providerOptions,\n } as AIV5Type.ModelMessage;\n }\n\n return message;\n });\n }\n\n messages = ensureGeminiCompatibleMessages(messages, this.logger);\n\n return messages\n .map(aiV5ModelMessageToV2PromptMessage)\n .filter(\n message => message.role === 'system' || typeof message.content === 'string' || message.content.length > 0,\n );\n },\n },\n\n /* @deprecated use list.get.all.aiV4.prompt() instead */\n prompt: () => this.all.aiV4.prompt(),\n /* @deprecated use list.get.all.aiV4.ui() */\n ui: (): UIMessageWithMetadata[] => this.all.db().map(AIV4Adapter.toUIMessage),\n /* @deprecated use list.get.all.aiV4.core() */\n core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.all.aiV4.ui()),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.all.db().map(AIV4Adapter.toUIMessage),\n core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.all.aiV4.ui()),\n\n // Used when calling AI SDK streamText/generateText\n prompt: () => {\n const coreMessages = this.all.aiV4.core();\n const messages = [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat(), ...coreMessages];\n\n return ensureGeminiCompatibleMessages(messages, this.logger);\n },\n\n // Used for creating LLM prompt messages without AI SDK streamText/generateText\n llmPrompt: (): LanguageModelV1Prompt => {\n const coreMessages = this.all.aiV4.core();\n\n const systemMessages = [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat()];\n let messages = [...systemMessages, ...coreMessages];\n\n messages = ensureGeminiCompatibleMessages(messages, this.logger);\n\n return messages.map(aiV4CoreMessageToV1PromptMessage);\n },\n },\n };\n\n private remembered = {\n db: () => this.messages.filter(m => this.memoryMessages.has(m)),\n v1: () => convertToV1Messages(this.remembered.db()),\n\n aiV5: {\n model: () => convertAIV5UIToModelMessages(this.remembered.aiV5.ui(), this.messages),\n ui: (): AIV5Type.UIMessage[] => this.remembered.db().map(AIV5Adapter.toUIMessage),\n },\n\n /* @deprecated use list.get.remembered.aiV4.ui() */\n ui: (): UIMessageWithMetadata[] => this.remembered.db().map(AIV4Adapter.toUIMessage),\n /* @deprecated use list.get.remembered.aiV4.core() */\n core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.all.aiV4.ui()),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.remembered.db().map(AIV4Adapter.toUIMessage),\n core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.all.aiV4.ui()),\n },\n };\n private rememberedPersisted = {\n db: () => this.all.db().filter(m => this.memoryMessagesPersisted.has(m)),\n v1: () => convertToV1Messages(this.rememberedPersisted.db()),\n\n aiV5: {\n model: () => convertAIV5UIToModelMessages(this.rememberedPersisted.aiV5.ui(), this.messages),\n ui: (): AIV5Type.UIMessage[] => this.rememberedPersisted.db().map(AIV5Adapter.toUIMessage),\n },\n\n /* @deprecated use list.getPersisted.remembered.aiV4.ui() */\n ui: () => this.rememberedPersisted.db().map(AIV4Adapter.toUIMessage),\n /* @deprecated use list.getPersisted.remembered.aiV4.core() */\n core: () => aiV4UIMessagesToAIV4CoreMessages(this.rememberedPersisted.ui()),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.rememberedPersisted.db().map(AIV4Adapter.toUIMessage),\n core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.rememberedPersisted.aiV4.ui()),\n },\n };\n\n private input = {\n db: () => this.messages.filter(m => this.newUserMessages.has(m)),\n v1: () => convertToV1Messages(this.input.db()),\n\n aiV5: {\n model: () => convertAIV5UIToModelMessages(this.input.aiV5.ui(), this.messages),\n ui: (): AIV5Type.UIMessage[] => this.input.db().map(AIV5Adapter.toUIMessage),\n },\n\n /* @deprecated use list.get.input.aiV4.ui() instead */\n ui: () => this.input.db().map(AIV4Adapter.toUIMessage),\n /* @deprecated use list.get.core.aiV4.ui() instead */\n core: () => aiV4UIMessagesToAIV4CoreMessages(this.input.ui()),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.input.db().map(AIV4Adapter.toUIMessage),\n core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.input.aiV4.ui()),\n },\n };\n private inputPersisted = {\n db: (): MastraDBMessage[] => this.messages.filter(m => this.newUserMessagesPersisted.has(m)),\n v1: (): MastraMessageV1[] => convertToV1Messages(this.inputPersisted.db()),\n\n aiV5: {\n model: () => convertAIV5UIToModelMessages(this.inputPersisted.aiV5.ui(), this.messages),\n ui: (): AIV5Type.UIMessage[] => this.inputPersisted.db().map(AIV5Adapter.toUIMessage),\n },\n\n /* @deprecated use list.getPersisted.input.aiV4.ui() */\n ui: (): UIMessageWithMetadata[] => this.inputPersisted.db().map(AIV4Adapter.toUIMessage),\n /* @deprecated use list.getPersisted.input.aiV4.core() */\n core: () => aiV4UIMessagesToAIV4CoreMessages(this.inputPersisted.ui()),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.inputPersisted.db().map(AIV4Adapter.toUIMessage),\n core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.inputPersisted.aiV4.ui()),\n },\n };\n\n private response = {\n db: (): MastraDBMessage[] => this.messages.filter(m => this.newResponseMessages.has(m)),\n v1: (): MastraMessageV1[] => convertToV1Messages(this.response.db()),\n\n aiV5: {\n ui: (): AIV5Type.UIMessage[] => this.response.db().map(AIV5Adapter.toUIMessage),\n model: (): AIV5ResponseMessage[] =>\n convertAIV5UIToModelMessages(this.response.aiV5.ui(), this.messages).filter(\n m => m.role === `tool` || m.role === `assistant`,\n ),\n modelContent: (stepNumber?: number): AIV5Type.StepResult<any>['content'] => {\n if (typeof stepNumber === 'number') {\n // Delegate to StepContentExtractor for step-specific content extraction\n return StepContentExtractor.extractStepContent(\n this.response.aiV5.ui(),\n stepNumber,\n this.response.aiV5.stepContent,\n );\n }\n\n return this.response.aiV5.model().map(this.response.aiV5.stepContent).flat();\n },\n stepContent: (message?: AIV5Type.ModelMessage): AIV5Type.StepResult<any>['content'] => {\n // Delegate to StepContentExtractor for content conversion\n return StepContentExtractor.convertToStepContent(message, this.messages, () =>\n this.response.aiV5.model().at(-1),\n );\n },\n },\n\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.response.db().map(AIV4Adapter.toUIMessage),\n core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.response.aiV4.ui()),\n },\n };\n private responsePersisted = {\n db: (): MastraDBMessage[] => this.messages.filter(m => this.newResponseMessagesPersisted.has(m)),\n\n aiV5: {\n model: () => convertAIV5UIToModelMessages(this.responsePersisted.aiV5.ui(), this.messages),\n ui: (): AIV5Type.UIMessage[] => this.responsePersisted.db().map(AIV5Adapter.toUIMessage),\n },\n\n /* @deprecated use list.getPersisted.response.aiV4.ui() */\n ui: (): UIMessageWithMetadata[] => this.responsePersisted.db().map(AIV4Adapter.toUIMessage),\n aiV4: {\n ui: (): UIMessageWithMetadata[] => this.responsePersisted.db().map(AIV4Adapter.toUIMessage),\n core: (): CoreMessageV4[] => aiV4UIMessagesToAIV4CoreMessages(this.responsePersisted.aiV4.ui()),\n },\n };\n\n public drainUnsavedMessages(): MastraDBMessage[] {\n const messages = this.messages.filter(m => this.newUserMessages.has(m) || this.newResponseMessages.has(m));\n this.newUserMessages.clear();\n this.newResponseMessages.clear();\n return messages;\n }\n\n public getEarliestUnsavedMessageTimestamp(): number | undefined {\n const unsavedMessages = this.messages.filter(m => this.newUserMessages.has(m) || this.newResponseMessages.has(m));\n if (unsavedMessages.length === 0) return undefined;\n // Find the earliest createdAt among unsaved messages\n return Math.min(...unsavedMessages.map(m => new Date(m.createdAt).getTime()));\n }\n\n /**\n * Check if a message is a new user or response message that should be saved.\n * Checks by message ID to handle cases where the message object may be a copy.\n */\n public isNewMessage(messageOrId: MastraDBMessage | string): boolean {\n return this.stateManager.isNewMessage(messageOrId);\n }\n\n public getSystemMessages(tag?: string): CoreMessageV4[] {\n if (tag) {\n return this.taggedSystemMessages[tag] || [];\n }\n return this.systemMessages;\n }\n\n /**\n * Get all system messages (both tagged and untagged)\n * @returns Array of all system messages\n */\n public getAllSystemMessages(): CoreMessageV4[] {\n return [...this.systemMessages, ...Object.values(this.taggedSystemMessages).flat()];\n }\n\n /**\n * Clear system messages, optionally for a specific tag\n * @param tag - If provided, only clears messages with this tag. Otherwise clears untagged messages.\n */\n public clearSystemMessages(tag?: string): this {\n if (tag) {\n delete this.taggedSystemMessages[tag];\n } else {\n this.systemMessages = [];\n }\n return this;\n }\n\n /**\n * Replace all system messages with new ones\n * This clears both tagged and untagged system messages and replaces them with the provided array\n * @param messages - Array of system messages to set\n */\n public replaceAllSystemMessages(messages: CoreMessageV4[]): this {\n // Clear existing system messages\n this.systemMessages = [];\n this.taggedSystemMessages = {};\n\n // Add all new messages as untagged (processors don't need to preserve tags)\n for (const message of messages) {\n if (message.role === 'system') {\n this.systemMessages.push(message);\n }\n }\n\n return this;\n }\n\n public addSystem(\n messages:\n | CoreMessageV4\n | CoreMessageV4[]\n | AIV5Type.ModelMessage\n | AIV5Type.ModelMessage[]\n | MastraDBMessage\n | MastraDBMessage[]\n | string\n | string[]\n | null,\n tag?: string,\n ) {\n if (!messages) return this;\n for (const message of Array.isArray(messages) ? messages : [messages]) {\n this.addOneSystem(message, tag);\n }\n return this;\n }\n\n private addOneSystem(message: CoreMessageV4 | AIV5Type.ModelMessage | MastraDBMessage | string, tag?: string) {\n const coreMessage = systemMessageToAIV4Core(message);\n\n if (coreMessage.role !== `system`) {\n throw new Error(\n `Expected role \"system\" but saw ${coreMessage.role} for message ${JSON.stringify(coreMessage, null, 2)}`,\n );\n }\n\n if (tag && !this.isDuplicateSystem(coreMessage, tag)) {\n this.taggedSystemMessages[tag] ||= [];\n this.taggedSystemMessages[tag].push(coreMessage);\n if (this.isRecording) {\n this.recordedEvents.push({\n type: 'addSystem',\n tag,\n message: coreMessage,\n });\n }\n } else if (!tag && !this.isDuplicateSystem(coreMessage)) {\n this.systemMessages.push(coreMessage);\n if (this.isRecording) {\n this.recordedEvents.push({\n type: 'addSystem',\n message: coreMessage,\n });\n }\n }\n }\n\n private isDuplicateSystem(message: CoreMessageV4, tag?: string) {\n if (tag) {\n if (!this.taggedSystemMessages[tag]) return false;\n return this.taggedSystemMessages[tag].some(\n m =>\n CacheKeyGenerator.fromAIV4CoreMessageContent(m.content) ===\n CacheKeyGenerator.fromAIV4CoreMessageContent(message.content),\n );\n }\n return this.systemMessages.some(\n m =>\n CacheKeyGenerator.fromAIV4CoreMessageContent(m.content) ===\n CacheKeyGenerator.fromAIV4CoreMessageContent(message.content),\n );\n }\n\n private getMessageById(id: string) {\n return this.messages.find(m => m.id === id);\n }\n\n private shouldReplaceMessage(message: MastraDBMessage): { exists: boolean; shouldReplace?: boolean; id?: string } {\n if (!this.messages.length) return { exists: false };\n\n if (!(`id` in message) || !message?.id) {\n return { exists: false };\n }\n\n const existingMessage = this.getMessageById(message.id);\n if (!existingMessage) return { exists: false };\n\n return {\n exists: true,\n shouldReplace: !messagesAreEqual(existingMessage, message),\n id: existingMessage.id,\n };\n }\n\n private addOne(message: MessageInput, messageSource: MessageSource) {\n if (\n (!(`content` in message) ||\n (!message.content &&\n // allow empty strings\n typeof message.content !== 'string')) &&\n (!(`parts` in message) || !message.parts)\n ) {\n throw new MastraError({\n id: 'INVALID_MESSAGE_CONTENT',\n domain: ErrorDomain.AGENT,\n category: ErrorCategory.USER,\n text: `Message with role \"${message.role}\" must have either a 'content' property (string or array) or a 'parts' property (array) that is not empty, null, or undefined. Received message: ${JSON.stringify(message, null, 2)}`,\n details: {\n role: message.role as string,\n messageSource,\n hasContent: 'content' in message,\n hasParts: 'parts' in message,\n },\n });\n }\n\n if (message.role === `system`) {\n // In the past system messages were accidentally stored in the db. these should be ignored because memory is not supposed to store system messages.\n if (messageSource === `memory`) return null;\n\n // Check if the message is in a supported format for system messages\n const isSupportedSystemFormat =\n TypeDetector.isAIV4CoreMessage(message) ||\n TypeDetector.isAIV5CoreMessage(message) ||\n TypeDetector.isMastraDBMessage(message);\n\n if (isSupportedSystemFormat) {\n return this.addSystem(message);\n }\n\n // if we didn't add the message and we didn't ignore this intentionally, then it's a problem!\n throw new MastraError({\n id: 'INVALID_SYSTEM_MESSAGE_FORMAT',\n domain: ErrorDomain.AGENT,\n category: ErrorCategory.USER,\n text: `Invalid system message format. System messages must be CoreMessage format with 'role' and 'content' properties. The content should be a string or valid content array.`,\n details: {\n messageSource,\n receivedMessage: JSON.stringify(message, null, 2),\n },\n });\n }\n\n const messageV2 = convertInputToMastraDBMessage(message, messageSource, this.createAdapterContext());\n\n const { exists, shouldReplace, id } = this.shouldReplaceMessage(messageV2);\n\n const latestMessage = this.messages.at(-1);\n\n if (messageSource === `memory`) {\n for (const existingMessage of this.messages) {\n // don't double store any messages\n if (messagesAreEqual(existingMessage, messageV2)) {\n return;\n }\n }\n }\n\n const replacementTarget = exists && id ? this.messages.find(m => m.id === id) : undefined;\n const hasSealedReplacementTarget = !!replacementTarget && MessageMerger.isSealed(replacementTarget);\n\n // Keep this replacement-target guard here instead of MessageMerger.shouldMerge().\n // shouldMerge() only decides whether to append to the latest assistant message,\n // but replace-by-id can target an older sealed message elsewhere in the list.\n const isLatestFromMemory = latestMessage ? this.memoryMessages.has(latestMessage) : false;\n const shouldMerge =\n !hasSealedReplacementTarget &&\n MessageMerger.shouldMerge(latestMessage, messageV2, messageSource, isLatestFromMemory, this._agentNetworkAppend);\n\n if (shouldMerge && latestMessage) {\n // Delegate merge logic to MessageMerger\n MessageMerger.merge(latestMessage, messageV2);\n\n // If latest message gets appended to, it should be added to the proper source\n this.pushMessageToSource(latestMessage, messageSource);\n }\n // Else the last message and this message are not both assistant messages OR an existing message has been updated and should be replaced. add a new message to the array or update an existing one.\n else {\n let existingIndex = -1;\n if (shouldReplace) {\n existingIndex = this.messages.findIndex(m => m.id === id);\n }\n const existingMessage = existingIndex !== -1 && this.messages[existingIndex];\n\n if (shouldReplace && existingMessage) {\n // If the existing message is sealed (e.g., after observation), don't replace it.\n // Instead, generate a new ID for the incoming message and add it as a new message.\n if (MessageMerger.isSealed(existingMessage)) {\n // Find the last part with sealedAt metadata in the EXISTING message.\n // The existing message has the seal boundary marker from insertObservationMarker.\n const existingParts = existingMessage.content?.parts || [];\n let sealedPartCount = 0;\n\n for (let i = existingParts.length - 1; i >= 0; i--) {\n const part = existingParts[i] as { metadata?: { mastra?: { sealedAt?: number } } };\n if (part?.metadata?.mastra?.sealedAt) {\n // The seal is at index i, so sealed content is parts 0 through i (inclusive)\n sealedPartCount = i + 1;\n break;\n }\n }\n\n // If no sealedAt found, use the entire existing message length as the boundary\n if (sealedPartCount === 0) {\n sealedPartCount = existingParts.length;\n }\n\n // Get parts from incoming message that are beyond the sealed boundary\n const incomingParts = messageV2.content.parts;\n\n let newParts: typeof incomingParts;\n\n if (incomingParts.length <= sealedPartCount) {\n // Incoming message has fewer or equal parts than the sealed boundary.\n // Check if these are truly stale (same content as the sealed message) or\n // new content flushed independently (e.g., text deltas flushed with the\n // same messageId but only containing a text part).\n if (messagesAreEqual(existingMessage, messageV2)) {\n // Stale message, ignore - don't replace, don't create new\n return this;\n }\n // Not stale — these are fresh parts (e.g., a text flush). Treat all as new.\n newParts = incomingParts;\n } else {\n newParts = incomingParts.slice(sealedPartCount);\n }\n\n // Only create a new message if there are actually new parts\n if (newParts.length > 0) {\n // Generate a new ID for the incoming message\n messageV2.id = this.generateMessageId?.({ idType: 'message', source: 'memory' }) ?? randomUUID();\n // Replace the parts with only the new ones\n messageV2.content.parts = newParts;\n // Ensure the new message has a timestamp after the sealed message\n if (messageV2.createdAt <= existingMessage.createdAt) {\n messageV2.createdAt = new Date(existingMessage.createdAt.getTime() + 1);\n }\n this.messages.push(messageV2);\n }\n // If no new parts, don't add anything (the sealed message already has all the content)\n } else {\n const isExistingFromMemory = this.memoryMessages.has(existingMessage);\n const shouldMergeIntoExisting = MessageMerger.shouldMerge(\n existingMessage,\n messageV2,\n messageSource,\n isExistingFromMemory,\n this._agentNetworkAppend,\n );\n if (shouldMergeIntoExisting) {\n MessageMerger.merge(existingMessage, messageV2);\n this.pushMessageToSource(existingMessage, messageSource);\n // Sort messages and return early — existingMessage stays in messages[] and its Sets\n this.messages.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n return this;\n }\n this.messages[existingIndex] = messageV2;\n }\n } else if (!exists) {\n this.messages.push(messageV2);\n }\n\n this.pushMessageToSource(messageV2, messageSource);\n }\n\n // make sure messages are always stored in order of when they were created!\n this.messages.sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());\n\n return this;\n }\n\n private pushMessageToSource(messageV2: MastraDBMessage, messageSource: MessageSource) {\n this.stateManager.addToSource(messageV2, messageSource);\n }\n\n private lastCreatedAt?: number;\n // this makes sure messages added in order will always have a date atleast 1ms apart.\n private generateCreatedAt(messageSource: MessageSource, start?: unknown): Date {\n // Normalize timestamp\n const startDate: Date | undefined =\n start instanceof Date\n ? start\n : typeof start === 'string' || typeof start === 'number'\n ? new Date(start)\n : undefined;\n\n if (startDate && !this.lastCreatedAt) {\n this.lastCreatedAt = startDate.getTime();\n return startDate;\n }\n\n if (startDate && messageSource === `memory`) {\n // Preserve user-provided timestamps for memory messages to avoid re-ordering\n // Messages without timestamps will fall through to get generated incrementing timestamps\n return startDate;\n }\n\n const now = new Date();\n const nowTime = startDate?.getTime() || now.getTime();\n // find the latest createdAt in all stored messages\n const lastTime = this.messages.reduce((p, m) => {\n if (m.createdAt.getTime() > p) return m.createdAt.getTime();\n return p;\n }, this.lastCreatedAt || 0);\n\n // make sure our new message is created later than the latest known message time\n // it's expected that messages are added to the list in order if they don't have a createdAt date on them\n if (nowTime <= lastTime) {\n const newDate = new Date(lastTime + 1);\n this.lastCreatedAt = newDate.getTime();\n return newDate;\n }\n\n this.lastCreatedAt = nowTime;\n return now;\n }\n\n private newMessageId(role?: string): string {\n if (this.generateMessageId) {\n return this.generateMessageId({\n idType: 'message',\n source: 'agent',\n threadId: this.memoryInfo?.threadId,\n resourceId: this.memoryInfo?.resourceId,\n role,\n });\n }\n return randomUUID();\n }\n\n private createAdapterContext() {\n return {\n memoryInfo: this.memoryInfo,\n newMessageId: () => this.newMessageId(),\n generateCreatedAt: (messageSource: MessageSource, start?: unknown) =>\n this.generateCreatedAt(messageSource, start),\n dbMessages: this.messages,\n };\n }\n}\n","import type * as AIV4 from '@internal/ai-sdk-v4';\nimport type * as AIV5 from '@internal/ai-sdk-v5';\n\nimport type { MastraDBMessage, UIMessageWithMetadata, MessageListInput } from '../index';\n\nimport { MessageList } from '../index';\n\n/**\n * Available output formats for message conversion.\n *\n * @remarks\n * - `Mastra.V2` - Current database storage format, compatible with AI SDK v4\n * - `AIV4.UI` - AI SDK v4 UIMessage format (for frontend components)\n * - `AIV4.Core` - AI SDK v4 CoreMessage format (for LLM API calls)\n * - `AIV5.UI` - AI SDK v5 UIMessage format (for frontend components)\n * - `AIV5.Model` - AI SDK v5 ModelMessage format (for LLM API calls)\n */\nexport type OutputFormat = 'Mastra.V2' | 'AIV4.UI' | 'AIV4.Core' | 'AIV5.UI' | 'AIV5.Model';\n\nclass MessageConverter {\n private messageList: MessageList;\n\n constructor(messages: MessageListInput) {\n this.messageList = new MessageList();\n // Use 'memory' source to preserve messages exactly as provided\n // without any transformations or combinations\n this.messageList.add(messages, 'memory');\n }\n\n /**\n * Convert messages to Mastra V2 format (current database format).\n * @param format - The format 'Mastra.V2'\n * @returns Array of messages in Mastra V2 format, used for database storage\n */\n to(format: 'Mastra.V2'): MastraDBMessage[];\n /**\n * Convert messages to AI SDK v4 UIMessage format.\n * @param format - The format 'AIV4.UI'\n * @returns Array of UIMessages for use with AI SDK v4 frontend components\n */\n to(format: 'AIV4.UI'): UIMessageWithMetadata[] | AIV4.UIMessage[];\n /**\n * Convert messages to AI SDK v4 CoreMessage format.\n * @param format - The format 'AIV4.Core'\n * @returns Array of CoreMessages for AI SDK v4 LLM API calls\n */\n to(format: 'AIV4.Core'): AIV4.CoreMessage[];\n /**\n * Convert messages to AI SDK v5 UIMessage format.\n * @param format - The format 'AIV5.UI'\n * @returns Array of UIMessages for use with AI SDK v5 frontend components\n */\n to(format: 'AIV5.UI'): AIV5.UIMessage[];\n /**\n * Convert messages to AI SDK v5 ModelMessage format.\n * @param format - The format 'AIV5.Model'\n * @returns Array of ModelMessages for AI SDK v5 LLM API calls\n */\n to(format: 'AIV5.Model'): AIV5.ModelMessage[];\n to(format: OutputFormat): unknown[] {\n switch (format) {\n // Old format keys (backward compatibility)\n case 'Mastra.V2':\n return this.messageList.get.all.db();\n case 'AIV4.UI':\n return this.messageList.get.all.aiV4.ui();\n case 'AIV4.Core':\n return this.messageList.get.all.aiV4.core();\n case 'AIV5.UI':\n return this.messageList.get.all.aiV5.ui();\n case 'AIV5.Model':\n return this.messageList.get.all.aiV5.model();\n default:\n throw new Error(`Unsupported output format: ${format}`);\n }\n }\n}\n\n/**\n * Convert messages from any supported format to another format.\n *\n * @param messages - Input messages in any supported format. Accepts:\n * - AI SDK v4 formats: UIMessage, CoreMessage, Message\n * - AI SDK v5 formats: UIMessage, ModelMessage\n * - Mastra formats: MastraMessageV1 (input only), MastraDBMessage\n * - Simple strings (will be converted to user messages)\n * - Arrays of any of the above\n *\n * @returns A converter object with a `.to()` method to specify the output format\n *\n * @example\n * ```typescript\n * import { convertMessages } from '@mastra/core/agent';\n *\n * // Convert AI SDK v5 UI messages to v4 Core messages\n * const v4CoreMessages = convertMessages(v5UIMessages).to('AIV4.Core');\n *\n * // Convert database messages (Mastra V2) to AI SDK v5 UI messages for frontend\n * const v5UIMessages = convertMessages(dbMessages).to('AIV5.UI');\n *\n * // Convert any format to Mastra's V2 format for database storage\n * const mastraV2Messages = convertMessages(anyMessages).to('Mastra.V2');\n *\n * // Convert simple strings to formatted messages\n * const messages = convertMessages(['Hello', 'How are you?']).to('AIV5.UI');\n *\n * // Convert v4 UI messages to v5 Model messages for LLM calls\n * const modelMessages = convertMessages(v4UIMessages).to('AIV5.Model');\n * ```\n *\n * @remarks\n * This utility handles all message format conversions internally, including:\n * - Tool invocations and results\n * - File attachments\n * - Multi-part messages\n * - System messages\n * - Metadata preservation where possible\n */\nexport function convertMessages(messages: MessageListInput): MessageConverter {\n return new MessageConverter(messages);\n}\n"]}