@8wave/ai-elements 0.104.0 → 0.105.0-beta.1

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 (125) hide show
  1. package/dist/_chunks/{Agent-DG4nPG72.js → Agent-VhugusRf.js} +2 -2
  2. package/dist/_chunks/Agent-VhugusRf.js.map +1 -0
  3. package/dist/_chunks/{Document-DXkvvAnt.js → Document-DjNrISX1.js} +2 -2
  4. package/dist/_chunks/{Document-DXkvvAnt.js.map → Document-DjNrISX1.js.map} +1 -1
  5. package/dist/_chunks/{Media-3Mo4NRj7.js → Media-hjgDyEMr.js} +2 -2
  6. package/dist/_chunks/Media-hjgDyEMr.js.map +1 -0
  7. package/dist/_chunks/{PkStreamingMarkdown-YKd9F3xU.js → PkStreamingMarkdown-B4eMb97I.js} +2 -2
  8. package/dist/_chunks/{PkStreamingMarkdown-YKd9F3xU.js.map → PkStreamingMarkdown-B4eMb97I.js.map} +1 -1
  9. package/dist/_chunks/{PkToolRequestGeolocation-sf6LpUN_.js → PkToolRequestGeolocation-Bp-D2nDb.js} +3 -3
  10. package/{dist-vue/_chunks/PkToolRequestGeolocation-BdX5DzEN.js.map → dist/_chunks/PkToolRequestGeolocation-Bp-D2nDb.js.map} +1 -1
  11. package/dist/_chunks/{PkToolRequestOAuthConnection-BB8mlQit.js → PkToolRequestOAuthConnection-CjjyDj9A.js} +3 -3
  12. package/dist/_chunks/{PkToolRequestOAuthConnection-BB8mlQit.js.map → PkToolRequestOAuthConnection-CjjyDj9A.js.map} +1 -1
  13. package/dist/_chunks/{PkToolShowArtifact-54saXXCe.js → PkToolShowArtifact-Dl8f7Q7q.js} +2 -2
  14. package/dist/_chunks/{PkToolShowArtifact-54saXXCe.js.map → PkToolShowArtifact-Dl8f7Q7q.js.map} +1 -1
  15. package/dist/_chunks/{PkToolShowCalendarEvent-B_HPVUDk.js → PkToolShowCalendarEvent-B_QmZrlZ.js} +2 -2
  16. package/dist/_chunks/{PkToolShowCalendarEvent-B_HPVUDk.js.map → PkToolShowCalendarEvent-B_QmZrlZ.js.map} +1 -1
  17. package/dist/_chunks/{PkToolShowContactForm-BtcNCixq.js → PkToolShowContactForm-CXE0485W.js} +14 -14
  18. package/dist/_chunks/{PkToolShowContactForm-BtcNCixq.js.map → PkToolShowContactForm-CXE0485W.js.map} +1 -1
  19. package/dist/_chunks/{PkToolShowDiagram-cA64c2_N.js → PkToolShowDiagram-D-TyCkCB.js} +2 -2
  20. package/dist/_chunks/{PkToolShowDiagram-cA64c2_N.js.map → PkToolShowDiagram-D-TyCkCB.js.map} +1 -1
  21. package/dist/_chunks/{PkToolShowForm-DdBAG0Qs.js → PkToolShowForm-BzaibKAz.js} +101 -115
  22. package/dist/_chunks/PkToolShowForm-BzaibKAz.js.map +1 -0
  23. package/dist/_chunks/{PkToolShowSources-0qudS-bu.js → PkToolShowSources-CoTIoupP.js} +3 -3
  24. package/dist/_chunks/{PkToolShowSources-0qudS-bu.js.map → PkToolShowSources-CoTIoupP.js.map} +1 -1
  25. package/dist/_chunks/{PkToolShowSuggestedReply-B2IB6ioR.js → PkToolShowSuggestedReply-DA2Bi7k4.js} +2 -2
  26. package/dist/_chunks/{PkToolShowSuggestedReply-B2IB6ioR.js.map → PkToolShowSuggestedReply-DA2Bi7k4.js.map} +1 -1
  27. package/dist/_chunks/{PkToolShowWeather-Bl3Yoscl.js → PkToolShowWeather-ChDHtOLz.js} +2 -2
  28. package/dist/_chunks/{PkToolShowWeather-Bl3Yoscl.js.map → PkToolShowWeather-ChDHtOLz.js.map} +1 -1
  29. package/dist/_chunks/{browser-DuzNfJq0.js → browser-BXy4OnXA.js} +804 -779
  30. package/dist/_chunks/browser-BXy4OnXA.js.map +1 -0
  31. package/dist/_chunks/index.es-CnpsLhp_.js +1006 -0
  32. package/dist/_chunks/index.es-CnpsLhp_.js.map +1 -0
  33. package/dist/_chunks/utils-DtJdKlnF.js +185 -0
  34. package/dist/_chunks/utils-DtJdKlnF.js.map +1 -0
  35. package/dist/_chunks/{vue-i18n-_ouwlDGE.js → vue-i18n-C3J36GV4.js} +2 -2
  36. package/dist/_chunks/{vue-i18n-_ouwlDGE.js.map → vue-i18n-C3J36GV4.js.map} +1 -1
  37. package/dist/_chunks/{web-DnPxEADy.js → web-CzR5jWfC.js} +46 -45
  38. package/dist/_chunks/{web-DnPxEADy.js.map → web-CzR5jWfC.js.map} +1 -1
  39. package/dist/ai-elements.es.js +2100 -2159
  40. package/dist/ai-elements.es.js.map +1 -1
  41. package/dist-vue/PkChatbot.js +1 -1
  42. package/dist-vue/PkChatbotMessages.js +1 -1
  43. package/dist-vue/PkChatbotStepPayload.js +1 -1
  44. package/dist-vue/PkChatbotStepToolDetail.js +1 -1
  45. package/dist-vue/PkChatbotSteps.js +1 -1
  46. package/dist-vue/PkChatbotViewChat.js +1 -1
  47. package/dist-vue/PkChatbotViewConversations.js +1 -1
  48. package/dist-vue/PkChatbotViewFiles.js +1 -1
  49. package/dist-vue/PkChatbotViewProfile.js +1 -1
  50. package/dist-vue/_chunks/{Agent-gCuDMxHN.js → Agent-CpIgGdU4.js} +2 -2
  51. package/dist-vue/_chunks/Agent-CpIgGdU4.js.map +1 -0
  52. package/dist-vue/_chunks/{Document-iH61Cw06.js → Document-CiaGPYTR.js} +2 -2
  53. package/dist-vue/_chunks/{Document-iH61Cw06.js.map → Document-CiaGPYTR.js.map} +1 -1
  54. package/dist-vue/_chunks/{PkChatbot-Bg9oercD.js → PkChatbot-xmjKbljL.js} +7 -7
  55. package/dist-vue/_chunks/{PkChatbot-Bg9oercD.js.map → PkChatbot-xmjKbljL.js.map} +1 -1
  56. package/dist-vue/_chunks/{PkChatbotMessages-DUQxuYaG.js → PkChatbotMessages-tHQ2JQrb.js} +75 -75
  57. package/dist-vue/_chunks/{PkChatbotMessages-DUQxuYaG.js.map → PkChatbotMessages-tHQ2JQrb.js.map} +1 -1
  58. package/dist-vue/_chunks/{PkChatbotStepPayload-hCmy4XG9.js → PkChatbotStepPayload-BtsnkJIV.js} +2 -2
  59. package/dist-vue/_chunks/{PkChatbotStepPayload-hCmy4XG9.js.map → PkChatbotStepPayload-BtsnkJIV.js.map} +1 -1
  60. package/dist-vue/_chunks/{PkChatbotStepToolDetail-B0WU0HcD.js → PkChatbotStepToolDetail-CCa95eBO.js} +116 -101
  61. package/dist-vue/_chunks/PkChatbotStepToolDetail-CCa95eBO.js.map +1 -0
  62. package/dist-vue/_chunks/PkChatbotSteps-CPBzs7Gi.js +180 -0
  63. package/dist-vue/_chunks/PkChatbotSteps-CPBzs7Gi.js.map +1 -0
  64. package/dist-vue/_chunks/{PkChatbotViewChat-YwjWNoqf.js → PkChatbotViewChat-CdiPjQLq.js} +6 -6
  65. package/dist-vue/_chunks/{PkChatbotViewChat-YwjWNoqf.js.map → PkChatbotViewChat-CdiPjQLq.js.map} +1 -1
  66. package/dist-vue/_chunks/{PkChatbotViewConversations-vo57eSwy.js → PkChatbotViewConversations-BP-NJvlK.js} +2 -2
  67. package/dist-vue/_chunks/{PkChatbotViewConversations-vo57eSwy.js.map → PkChatbotViewConversations-BP-NJvlK.js.map} +1 -1
  68. package/dist-vue/_chunks/{PkChatbotViewFiles-DDPugn7F.js → PkChatbotViewFiles-DRUVmxU5.js} +3 -3
  69. package/dist-vue/_chunks/{PkChatbotViewFiles-DDPugn7F.js.map → PkChatbotViewFiles-DRUVmxU5.js.map} +1 -1
  70. package/dist-vue/_chunks/{PkChatbotViewProfile-Dww5KI21.js → PkChatbotViewProfile-ywvIs6N5.js} +2 -2
  71. package/dist-vue/_chunks/{PkChatbotViewProfile-Dww5KI21.js.map → PkChatbotViewProfile-ywvIs6N5.js.map} +1 -1
  72. package/dist-vue/_chunks/{PkToolRequestGeolocation-BdX5DzEN.js → PkToolRequestGeolocation-BdIyXoPQ.js} +2 -2
  73. package/{dist/_chunks/PkToolRequestGeolocation-sf6LpUN_.js.map → dist-vue/_chunks/PkToolRequestGeolocation-BdIyXoPQ.js.map} +1 -1
  74. package/dist-vue/_chunks/{PkToolRequestOAuthConnection-BUmnRgMi.js → PkToolRequestOAuthConnection-Dnch7xAB.js} +2 -2
  75. package/dist-vue/_chunks/{PkToolRequestOAuthConnection-BUmnRgMi.js.map → PkToolRequestOAuthConnection-Dnch7xAB.js.map} +1 -1
  76. package/dist-vue/_chunks/{PkToolShowDiagram-YMo-iVWr.js → PkToolShowDiagram-DgLxNNp7.js} +2 -2
  77. package/dist-vue/_chunks/{PkToolShowDiagram-YMo-iVWr.js.map → PkToolShowDiagram-DgLxNNp7.js.map} +1 -1
  78. package/dist-vue/_chunks/{PkToolShowForm-D2n2rA6J.js → PkToolShowForm-6eLi6Wr0.js} +103 -117
  79. package/dist-vue/_chunks/PkToolShowForm-6eLi6Wr0.js.map +1 -0
  80. package/dist-vue/_chunks/{PkToolShowSources-DUAsrrzC.js → PkToolShowSources-DTJgvDiB.js} +2 -2
  81. package/dist-vue/_chunks/{PkToolShowSources-DUAsrrzC.js.map → PkToolShowSources-DTJgvDiB.js.map} +1 -1
  82. package/dist-vue/_chunks/{PkToolShowSuggestedReply-Dm28RIJF.js → PkToolShowSuggestedReply-D9RY2h6Z.js} +2 -2
  83. package/dist-vue/_chunks/{PkToolShowSuggestedReply-Dm28RIJF.js.map → PkToolShowSuggestedReply-D9RY2h6Z.js.map} +1 -1
  84. package/dist-vue/_chunks/{createChatbotApiClient-CAX-3-oK.js → createChatbotApiClient-12eL7hul.js} +2 -2
  85. package/dist-vue/_chunks/{createChatbotApiClient-CAX-3-oK.js.map → createChatbotApiClient-12eL7hul.js.map} +1 -1
  86. package/dist-vue/_chunks/{useChatbotStore-Rj18hAUf.js → useChatbotStore-Chtzi5jc.js} +1086 -1016
  87. package/dist-vue/_chunks/useChatbotStore-Chtzi5jc.js.map +1 -0
  88. package/dist-vue/_chunks/{utils-B0jsOUqd.js → utils-DKNWwMTQ.js} +46 -23
  89. package/dist-vue/_chunks/utils-DKNWwMTQ.js.map +1 -0
  90. package/dist-vue/_chunks/{web-DnPxEADy.js → web-CzR5jWfC.js} +46 -45
  91. package/dist-vue/_chunks/{web-DnPxEADy.js.map → web-CzR5jWfC.js.map} +1 -1
  92. package/dist-vue/api.js +1 -1
  93. package/dist-vue/composables.js +3 -3
  94. package/dist-vue/index.js +259 -259
  95. package/dist-vue/index.js.map +1 -1
  96. package/dist-vue/locales.js +10 -4
  97. package/dist-vue/packages/components/src/PkEditorRepeater.d.ts +1 -1
  98. package/dist-vue/packages/components/src/chat/constants.d.ts +12 -0
  99. package/dist-vue/packages/components/src/chat/utils.d.ts +37 -0
  100. package/dist-vue/packages/models/src/schema/Agent.d.ts +24 -16
  101. package/dist-vue/packages/models/src/schema/AgentChatStatistics.d.ts +1 -1
  102. package/dist-vue/packages/models/src/schema/Chat.d.ts +9 -9
  103. package/dist-vue/packages/models/src/schema/Document.d.ts +6 -6
  104. package/dist-vue/packages/models/src/schema/DocumentFolder.d.ts +0 -1
  105. package/dist-vue/packages/models/src/schema/McpServer.d.ts +2 -2
  106. package/dist-vue/packages/models/src/schema/Member.d.ts +2 -2
  107. package/dist-vue/packages/models/src/schema/Organization.d.ts +4 -4
  108. package/dist-vue/packages/models/src/schema/ReasoningChat.d.ts +29 -29
  109. package/dist-vue/packages/models/src/schema/SubAgent.d.ts +20 -20
  110. package/dist-vue/packages/models/src/schema/User.d.ts +6 -6
  111. package/dist-vue/packages/models/src/schema/constants.d.ts +2 -0
  112. package/package.json +10 -5
  113. package/dist/_chunks/Agent-DG4nPG72.js.map +0 -1
  114. package/dist/_chunks/Media-3Mo4NRj7.js.map +0 -1
  115. package/dist/_chunks/PkToolShowForm-DdBAG0Qs.js.map +0 -1
  116. package/dist/_chunks/browser-DuzNfJq0.js.map +0 -1
  117. package/dist/_chunks/index.es-DXx8DNKf.js +0 -2986
  118. package/dist/_chunks/index.es-DXx8DNKf.js.map +0 -1
  119. package/dist-vue/_chunks/Agent-gCuDMxHN.js.map +0 -1
  120. package/dist-vue/_chunks/PkChatbotStepToolDetail-B0WU0HcD.js.map +0 -1
  121. package/dist-vue/_chunks/PkChatbotSteps-BrvTsAeZ.js +0 -177
  122. package/dist-vue/_chunks/PkChatbotSteps-BrvTsAeZ.js.map +0 -1
  123. package/dist-vue/_chunks/PkToolShowForm-D2n2rA6J.js.map +0 -1
  124. package/dist-vue/_chunks/useChatbotStore-Rj18hAUf.js.map +0 -1
  125. package/dist-vue/_chunks/utils-B0jsOUqd.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"useChatbotStore-Rj18hAUf.js","names":["marker","symbol","_a","_b","name","marker2","symbol2","_a2","_b2","name2","marker3","symbol3","_a3","_b3","name3","marker4","symbol4","_a4","_b4","InvalidArgumentError","name4","marker5","symbol5","_a5","_b5","name5","marker6","symbol6","_a6","_b6","name6","marker7","symbol7","_a7","_b7","name7","marker8","symbol8","_a8","_b8","name8","marker9","symbol9","_a9","_b9","name9","marker10","symbol10","_a10","_b10","name10","marker11","symbol11","_a11","_b11","name11","marker12","symbol12","_a12","_b12","name12","marker13","symbol13","_a13","_b13","name13","marker14","symbol14","_a14","_b14","name14","marker15","symbol15","_a15","_b15","name","marker2","symbol","_a","_b","InvalidArgumentError","TypeValidationError2","name2","marker3","symbol2","_a2","_b2","AISDKError2","AISDKError2","AISDKError3","AISDKError4","AISDKError5","AISDKError6","AISDKError7","AISDKError8","AISDKError9","AISDKError10","AISDKError11","AISDKError12","AISDKError13","AISDKError14","AISDKError15","AISDKError16","AISDKError17","getErrorMessage2","AISDKError18","AISDKError20","AISDKError21","AISDKError22","AISDKError23","AISDKError24","DownloadError2","enumType","instanceOf","nullType","isBuffer2","asSchema2","safeParseJSON2","safeValidateTypes2","TypeValidationError2","validateTypes2","createIdGenerator2","createIdGenerator3","lazySchema2","zodSchema2","createIdGenerator4","createIdGenerator5","createIdGenerator6","createIdGenerator7","NoSuchModelError3","AISDKError28","createIdGenerator8","resolve2","parseJsonEventStream2","generateIdFunc2","webPreset","useSWRV","useSWRV","swrv","swrv2","ref3"],"sources":["../../../../packages/utils/src/device-context.ts","../../../../node_modules/.pnpm/@ai-sdk+provider@4.0.10/node_modules/@ai-sdk/provider/dist/index.js","../../../../node_modules/.pnpm/eventsource-parser@3.1.0/node_modules/eventsource-parser/dist/index.js","../../../../node_modules/.pnpm/eventsource-parser@3.1.0/node_modules/eventsource-parser/dist/stream.js","../../../../node_modules/.pnpm/@ai-sdk+provider-utils@5.0.36_zod@4.5.4/node_modules/@ai-sdk/provider-utils/dist/index.js","../../../../node_modules/.pnpm/ai@7.0.90_zod@4.5.4/node_modules/ai/dist/index.js","../../../../node_modules/.pnpm/swrv@1.2.0_vue@3.5.42_typescript@6.0.3_/node_modules/swrv/esm/lib/hash.js","../../../../node_modules/.pnpm/swrv@1.2.0_vue@3.5.42_typescript@6.0.3_/node_modules/swrv/esm/cache/index.js","../../../../node_modules/.pnpm/swrv@1.2.0_vue@3.5.42_typescript@6.0.3_/node_modules/swrv/esm/lib/web-preset.js","../../../../node_modules/.pnpm/swrv@1.2.0_vue@3.5.42_typescript@6.0.3_/node_modules/swrv/esm/use-swrv.js","../../../../node_modules/.pnpm/swrv@1.2.0_vue@3.5.42_typescript@6.0.3_/node_modules/swrv/esm/index.js","../../../../node_modules/.pnpm/@ai-sdk+vue@4.0.90_vue@3.5.42_typescript@6.0.3__zod@4.5.4/node_modules/@ai-sdk/vue/dist/index.js","../../../../packages/composable/src/chatbot/useChatbotStore.ts"],"sourcesContent":["interface NetworkInformation {\n type?: string\n effectiveType?: string\n downlink?: number\n rtt?: number\n saveData?: boolean\n}\n\ninterface NavigatorUAData {\n platform?: string\n}\n\n/**\n * Collects client-side device context information useful for chatbot interactions.\n * No additional permissions are required — all values are available by default in the browser.\n */\nexport function collectDeviceContext() {\n const connection = (\n navigator as Navigator & { connection?: NetworkInformation }\n ).connection\n\n const uaData = (\n navigator as Navigator & { userAgentData?: NavigatorUAData }\n ).userAgentData\n\n return {\n dateTime: new Date().toISOString(),\n timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,\n language: navigator.language,\n languages: [...navigator.languages],\n url: window.location.href,\n pathname: window.location.pathname,\n pageTitle: document.title,\n referrer: document.referrer || undefined,\n screenWidth: screen.width,\n screenHeight: screen.height,\n viewportWidth: window.innerWidth,\n viewportHeight: window.innerHeight,\n devicePixelRatio: window.devicePixelRatio,\n maxTouchPoints: navigator.maxTouchPoints,\n hardwareConcurrency: navigator.hardwareConcurrency,\n deviceMemory: (navigator as Navigator & { deviceMemory?: number })\n .deviceMemory,\n platform: uaData?.platform,\n connectionType: connection?.type,\n connectionEffectiveType: connection?.effectiveType,\n connectionDownlink: connection?.downlink,\n connectionRtt: connection?.rtt,\n saveData: connection?.saveData,\n darkMode: window.matchMedia('(prefers-color-scheme: dark)').matches,\n reducedMotion: window.matchMedia('(prefers-reduced-motion: reduce)')\n .matches,\n historyLength: window.history.length,\n }\n}\n\nexport type GeolocationData = {\n geolocationLatitude: number\n geolocationLongitude: number\n geolocationAccuracy?: number\n geolocationCity?: string\n}\n\nexport type ReverseGeocodeFn = (\n lat: number,\n lon: number,\n) => Promise<string | undefined>\n\n/**\n * Collects geolocation data if the user has already granted permission.\n * Uses the Permissions API to avoid triggering a browser prompt.\n * Returns null if permission is not granted or geolocation is unavailable.\n * @param reverseGeocode - optional callback to resolve city name from coordinates (e.g. via backend proxy)\n */\nexport async function collectGeolocation(\n reverseGeocode?: ReverseGeocodeFn,\n): Promise<GeolocationData | null> {\n if (!navigator.geolocation || !navigator.permissions) {\n return null\n }\n\n try {\n const permission = await navigator.permissions.query({\n name: 'geolocation',\n })\n if (permission.state !== 'granted') {\n return null\n }\n\n const position = await new Promise<GeolocationPosition>(\n (resolve, reject) => {\n navigator.geolocation.getCurrentPosition(resolve, reject, {\n timeout: 10_000,\n })\n },\n )\n\n const { latitude, longitude, accuracy } = position.coords\n const city = reverseGeocode\n ? await reverseGeocode(latitude, longitude).catch(() => undefined)\n : undefined\n\n return {\n geolocationLatitude: latitude,\n geolocationLongitude: longitude,\n geolocationAccuracy: accuracy,\n geolocationCity: city,\n }\n } catch {\n return null\n }\n}\n","// src/errors/ai-sdk-error.ts\nvar marker = \"vercel.ai.error\";\nvar symbol = Symbol.for(marker);\nvar _a, _b;\nvar AISDKError = class _AISDKError extends (_b = Error, _a = symbol, _b) {\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: name15,\n message,\n cause\n }) {\n super(message);\n this[_a] = true;\n this.name = name15;\n this.cause = cause;\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) {\n return _AISDKError.hasMarker(error, marker);\n }\n static hasMarker(error, marker16) {\n const markerSymbol = Symbol.for(marker16);\n return error != null && typeof error === \"object\" && markerSymbol in error && typeof error[markerSymbol] === \"boolean\" && error[markerSymbol] === true;\n }\n};\n\n// src/errors/api-call-error.ts\nvar name = \"AI_APICallError\";\nvar marker2 = `vercel.ai.error.${name}`;\nvar symbol2 = Symbol.for(marker2);\nvar _a2, _b2;\nvar APICallError = class extends (_b2 = AISDKError, _a2 = symbol2, _b2) {\n constructor({\n message,\n url,\n requestBodyValues,\n statusCode,\n responseHeaders,\n responseBody,\n cause,\n isRetryable = statusCode != null && (statusCode === 408 || // request timeout\n statusCode === 409 || // conflict\n statusCode === 429 || // too many requests\n statusCode >= 500),\n // server error\n data\n }) {\n super({ name, message, cause });\n this[_a2] = true;\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 static isInstance(error) {\n return AISDKError.hasMarker(error, marker2);\n }\n};\n\n// src/errors/empty-response-body-error.ts\nvar name2 = \"AI_EmptyResponseBodyError\";\nvar marker3 = `vercel.ai.error.${name2}`;\nvar symbol3 = Symbol.for(marker3);\nvar _a3, _b3;\nvar EmptyResponseBodyError = class extends (_b3 = AISDKError, _a3 = symbol3, _b3) {\n // used in isInstance\n constructor({ message = \"Empty response body\" } = {}) {\n super({ name: name2, message });\n this[_a3] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker3);\n }\n};\n\n// src/errors/get-error-message.ts\nfunction getErrorMessage(error) {\n if (error == null) {\n return \"unknown error\";\n }\n if (typeof error === \"string\") {\n return error;\n }\n if (error instanceof Error) {\n return error.toString();\n }\n return JSON.stringify(error);\n}\n\n// src/errors/invalid-argument-error.ts\nvar name3 = \"AI_InvalidArgumentError\";\nvar marker4 = `vercel.ai.error.${name3}`;\nvar symbol4 = Symbol.for(marker4);\nvar _a4, _b4;\nvar InvalidArgumentError = class extends (_b4 = AISDKError, _a4 = symbol4, _b4) {\n constructor({\n message,\n cause,\n argument\n }) {\n super({ name: name3, message, cause });\n this[_a4] = true;\n this.argument = argument;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker4);\n }\n};\n\n// src/errors/invalid-prompt-error.ts\nvar name4 = \"AI_InvalidPromptError\";\nvar marker5 = `vercel.ai.error.${name4}`;\nvar symbol5 = Symbol.for(marker5);\nvar _a5, _b5;\nvar InvalidPromptError = class extends (_b5 = AISDKError, _a5 = symbol5, _b5) {\n constructor({\n prompt,\n message,\n cause\n }) {\n super({ name: name4, message: `Invalid prompt: ${message}`, cause });\n this[_a5] = true;\n this.prompt = prompt;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker5);\n }\n};\n\n// src/errors/invalid-response-data-error.ts\nvar name5 = \"AI_InvalidResponseDataError\";\nvar marker6 = `vercel.ai.error.${name5}`;\nvar symbol6 = Symbol.for(marker6);\nvar _a6, _b6;\nvar InvalidResponseDataError = class extends (_b6 = AISDKError, _a6 = symbol6, _b6) {\n constructor({\n data,\n message = `Invalid response data: ${JSON.stringify(data)}.`\n }) {\n super({ name: name5, message });\n this[_a6] = true;\n this.data = data;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker6);\n }\n};\n\n// src/errors/json-parse-error.ts\nvar name6 = \"AI_JSONParseError\";\nvar marker7 = `vercel.ai.error.${name6}`;\nvar symbol7 = Symbol.for(marker7);\nvar _a7, _b7;\nvar JSONParseError = class extends (_b7 = AISDKError, _a7 = symbol7, _b7) {\n constructor({ text, cause }) {\n super({\n name: name6,\n message: `JSON parsing failed: Text: ${text}.\nError message: ${getErrorMessage(cause)}`,\n cause\n });\n this[_a7] = true;\n this.text = text;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker7);\n }\n};\n\n// src/errors/load-api-key-error.ts\nvar name7 = \"AI_LoadAPIKeyError\";\nvar marker8 = `vercel.ai.error.${name7}`;\nvar symbol8 = Symbol.for(marker8);\nvar _a8, _b8;\nvar LoadAPIKeyError = class extends (_b8 = AISDKError, _a8 = symbol8, _b8) {\n // used in isInstance\n constructor({ message }) {\n super({ name: name7, message });\n this[_a8] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker8);\n }\n};\n\n// src/errors/load-setting-error.ts\nvar name8 = \"AI_LoadSettingError\";\nvar marker9 = `vercel.ai.error.${name8}`;\nvar symbol9 = Symbol.for(marker9);\nvar _a9, _b9;\nvar LoadSettingError = class extends (_b9 = AISDKError, _a9 = symbol9, _b9) {\n // used in isInstance\n constructor({ message }) {\n super({ name: name8, message });\n this[_a9] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker9);\n }\n};\n\n// src/errors/no-content-generated-error.ts\nvar name9 = \"AI_NoContentGeneratedError\";\nvar marker10 = `vercel.ai.error.${name9}`;\nvar symbol10 = Symbol.for(marker10);\nvar _a10, _b10;\nvar NoContentGeneratedError = class extends (_b10 = AISDKError, _a10 = symbol10, _b10) {\n // used in isInstance\n constructor({\n message = \"No content generated.\"\n } = {}) {\n super({ name: name9, message });\n this[_a10] = true;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker10);\n }\n};\n\n// src/errors/no-such-model-error.ts\nvar name10 = \"AI_NoSuchModelError\";\nvar marker11 = `vercel.ai.error.${name10}`;\nvar symbol11 = Symbol.for(marker11);\nvar _a11, _b11;\nvar NoSuchModelError = class extends (_b11 = AISDKError, _a11 = symbol11, _b11) {\n constructor({\n errorName = name10,\n modelId,\n modelType,\n message = `No such ${modelType}: ${modelId}`\n }) {\n super({ name: errorName, message });\n this[_a11] = true;\n this.modelId = modelId;\n this.modelType = modelType;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker11);\n }\n};\n\n// src/errors/no-such-provider-reference-error.ts\nvar name11 = \"AI_NoSuchProviderReferenceError\";\nvar marker12 = `vercel.ai.error.${name11}`;\nvar symbol12 = Symbol.for(marker12);\nvar _a12, _b12;\nvar NoSuchProviderReferenceError = class extends (_b12 = AISDKError, _a12 = symbol12, _b12) {\n constructor({\n provider,\n reference,\n message = `No provider reference found for provider '${provider}'. Available providers: ${Object.keys(reference).join(\", \")}`\n }) {\n super({ name: name11, message });\n this[_a12] = true;\n this.provider = provider;\n this.reference = reference;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker12);\n }\n};\n\n// src/errors/too-many-embedding-values-for-call-error.ts\nvar name12 = \"AI_TooManyEmbeddingValuesForCallError\";\nvar marker13 = `vercel.ai.error.${name12}`;\nvar symbol13 = Symbol.for(marker13);\nvar _a13, _b13;\nvar TooManyEmbeddingValuesForCallError = class extends (_b13 = AISDKError, _a13 = symbol13, _b13) {\n constructor(options) {\n super({\n name: name12,\n message: `Too many values for a single embedding call. The ${options.provider} model \"${options.modelId}\" can only embed up to ${options.maxEmbeddingsPerCall} values per call, but ${options.values.length} values were provided.`\n });\n this[_a13] = true;\n this.provider = options.provider;\n this.modelId = options.modelId;\n this.maxEmbeddingsPerCall = options.maxEmbeddingsPerCall;\n this.values = options.values;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker13);\n }\n};\n\n// src/errors/type-validation-error.ts\nvar name13 = \"AI_TypeValidationError\";\nvar marker14 = `vercel.ai.error.${name13}`;\nvar symbol14 = Symbol.for(marker14);\nvar _a14, _b14;\nvar TypeValidationError = class _TypeValidationError extends (_b14 = AISDKError, _a14 = symbol14, _b14) {\n constructor({\n value,\n cause,\n context\n }) {\n let contextPrefix = \"Type validation failed\";\n if (context == null ? void 0 : context.field) {\n contextPrefix += ` for ${context.field}`;\n }\n if ((context == null ? void 0 : context.entityName) || (context == null ? void 0 : context.entityId)) {\n contextPrefix += \" (\";\n const parts = [];\n if (context.entityName) {\n parts.push(context.entityName);\n }\n if (context.entityId) {\n parts.push(`id: \"${context.entityId}\"`);\n }\n contextPrefix += parts.join(\", \");\n contextPrefix += \")\";\n }\n super({\n name: name13,\n message: `${contextPrefix}: Value: ${JSON.stringify(value)}.\nError message: ${getErrorMessage(cause)}`,\n cause\n });\n this[_a14] = true;\n this.value = value;\n this.context = context;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker14);\n }\n /**\n * Wraps an error into a TypeValidationError.\n * If the cause is already a TypeValidationError with the same value and context, it returns the cause.\n * Otherwise, it creates a new TypeValidationError.\n *\n * @param {Object} params - The parameters for wrapping the error.\n * @param {unknown} params.value - The value that failed validation.\n * @param {unknown} params.cause - The original error or cause of the validation failure.\n * @param {TypeValidationContext} params.context - Optional context about what is being validated.\n * @returns {TypeValidationError} A TypeValidationError instance.\n */\n static wrap({\n value,\n cause,\n context\n }) {\n var _a16, _b16, _c;\n if (_TypeValidationError.isInstance(cause) && cause.value === value && ((_a16 = cause.context) == null ? void 0 : _a16.field) === (context == null ? void 0 : context.field) && ((_b16 = cause.context) == null ? void 0 : _b16.entityName) === (context == null ? void 0 : context.entityName) && ((_c = cause.context) == null ? void 0 : _c.entityId) === (context == null ? void 0 : context.entityId)) {\n return cause;\n }\n return new _TypeValidationError({ value, cause, context });\n }\n};\n\n// src/errors/unsupported-functionality-error.ts\nvar name14 = \"AI_UnsupportedFunctionalityError\";\nvar marker15 = `vercel.ai.error.${name14}`;\nvar symbol15 = Symbol.for(marker15);\nvar _a15, _b15;\nvar UnsupportedFunctionalityError = class extends (_b15 = AISDKError, _a15 = symbol15, _b15) {\n constructor({\n functionality,\n message = `'${functionality}' functionality not supported.`\n }) {\n super({ name: name14, message });\n this[_a15] = true;\n this.functionality = functionality;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker15);\n }\n};\n\n// src/json-value/is-json.ts\nfunction isJSONValue(value) {\n if (value === null || typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return true;\n }\n if (Array.isArray(value)) {\n return value.every(isJSONValue);\n }\n if (typeof value === \"object\") {\n return Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && (val === void 0 || isJSONValue(val))\n );\n }\n return false;\n}\nfunction isJSONArray(value) {\n return Array.isArray(value) && value.every(isJSONValue);\n}\nfunction isJSONObject(value) {\n return value != null && typeof value === \"object\" && Object.entries(value).every(\n ([key, val]) => typeof key === \"string\" && (val === void 0 || isJSONValue(val))\n );\n}\nexport {\n AISDKError,\n APICallError,\n EmptyResponseBodyError,\n InvalidArgumentError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n LoadSettingError,\n NoContentGeneratedError,\n NoSuchModelError,\n NoSuchProviderReferenceError,\n TooManyEmbeddingValuesForCallError,\n TypeValidationError,\n UnsupportedFunctionalityError,\n getErrorMessage,\n isJSONArray,\n isJSONObject,\n isJSONValue\n};\n//# sourceMappingURL=index.js.map","class ParseError extends Error {\n constructor(message, options) {\n super(message), this.name = \"ParseError\", this.type = options.type, this.field = options.field, this.value = options.value, this.line = options.line;\n }\n}\nconst LF = 10, CR = 13, SPACE = 32;\nfunction noop(_arg) {\n}\nfunction createParser(config) {\n if (typeof config == \"function\")\n throw new TypeError(\n \"`config` must be an object, got a function instead. Did you mean `createParser({onEvent: fn})`?\"\n );\n const { onEvent = noop, onError = noop, onRetry = noop, onComment, maxBufferSize } = config, pendingFragments = [];\n let pendingFragmentsLength = 0, isFirstChunk = !0, id, data = \"\", dataLines = 0, eventType, terminated = !1;\n function feed(chunk) {\n if (terminated)\n throw new Error(\n \"Cannot feed parser: it was terminated after exceeding the configured max buffer size. Call `reset()` to resume parsing.\"\n );\n if (isFirstChunk && (isFirstChunk = !1, chunk.charCodeAt(0) === 239 && chunk.charCodeAt(1) === 187 && chunk.charCodeAt(2) === 191 && (chunk = chunk.slice(3))), pendingFragments.length === 0) {\n const trailing2 = processLines(chunk);\n trailing2 !== \"\" && (pendingFragments.push(trailing2), pendingFragmentsLength = trailing2.length), checkBufferSize();\n return;\n }\n if (chunk.indexOf(`\n`) === -1 && chunk.indexOf(\"\\r\") === -1) {\n pendingFragments.push(chunk), pendingFragmentsLength += chunk.length, checkBufferSize();\n return;\n }\n pendingFragments.push(chunk);\n const input = pendingFragments.join(\"\");\n pendingFragments.length = 0, pendingFragmentsLength = 0;\n const trailing = processLines(input);\n trailing !== \"\" && (pendingFragments.push(trailing), pendingFragmentsLength = trailing.length), checkBufferSize();\n }\n function checkBufferSize() {\n maxBufferSize !== void 0 && (pendingFragmentsLength + data.length <= maxBufferSize || (terminated = !0, pendingFragments.length = 0, pendingFragmentsLength = 0, id = void 0, data = \"\", dataLines = 0, eventType = void 0, onError(\n new ParseError(`Buffered data exceeded max buffer size of ${maxBufferSize} characters`, {\n type: \"max-buffer-size-exceeded\"\n })\n )));\n }\n function processLines(chunk) {\n let searchIndex = 0;\n if (chunk.indexOf(\"\\r\") === -1) {\n let lfIndex = chunk.indexOf(`\n`, searchIndex);\n for (; lfIndex !== -1; ) {\n if (searchIndex === lfIndex) {\n dataLines > 0 && onEvent({ id, event: eventType, data }), id = void 0, data = \"\", dataLines = 0, eventType = void 0, searchIndex = lfIndex + 1, lfIndex = chunk.indexOf(`\n`, searchIndex);\n continue;\n }\n const firstCharCode = chunk.charCodeAt(searchIndex);\n if (isDataPrefix(chunk, searchIndex, firstCharCode)) {\n const valueStart = chunk.charCodeAt(searchIndex + 5) === SPACE ? searchIndex + 6 : searchIndex + 5, value = chunk.slice(valueStart, lfIndex);\n if (dataLines === 0 && chunk.charCodeAt(lfIndex + 1) === LF) {\n onEvent({ id, event: eventType, data: value }), id = void 0, data = \"\", eventType = void 0, searchIndex = lfIndex + 2, lfIndex = chunk.indexOf(`\n`, searchIndex);\n continue;\n }\n data = dataLines === 0 ? value : `${data}\n${value}`, dataLines++;\n } else isEventPrefix(chunk, searchIndex, firstCharCode) ? eventType = chunk.slice(\n chunk.charCodeAt(searchIndex + 6) === SPACE ? searchIndex + 7 : searchIndex + 6,\n lfIndex\n ) || void 0 : parseLine(chunk, searchIndex, lfIndex);\n searchIndex = lfIndex + 1, lfIndex = chunk.indexOf(`\n`, searchIndex);\n }\n return chunk.slice(searchIndex);\n }\n for (; searchIndex < chunk.length; ) {\n const crIndex = chunk.indexOf(\"\\r\", searchIndex), lfIndex = chunk.indexOf(`\n`, searchIndex);\n let lineEnd = -1;\n if (crIndex !== -1 && lfIndex !== -1 ? lineEnd = crIndex < lfIndex ? crIndex : lfIndex : crIndex !== -1 ? crIndex === chunk.length - 1 ? lineEnd = -1 : lineEnd = crIndex : lfIndex !== -1 && (lineEnd = lfIndex), lineEnd === -1)\n break;\n parseLine(chunk, searchIndex, lineEnd), searchIndex = lineEnd + 1, chunk.charCodeAt(searchIndex - 1) === CR && chunk.charCodeAt(searchIndex) === LF && searchIndex++;\n }\n return chunk.slice(searchIndex);\n }\n function parseLine(chunk, start, end) {\n if (start === end) {\n dispatchEvent();\n return;\n }\n const firstCharCode = chunk.charCodeAt(start);\n if (isDataPrefix(chunk, start, firstCharCode)) {\n const valueStart = chunk.charCodeAt(start + 5) === SPACE ? start + 6 : start + 5, value2 = chunk.slice(valueStart, end);\n data = dataLines === 0 ? value2 : `${data}\n${value2}`, dataLines++;\n return;\n }\n if (isEventPrefix(chunk, start, firstCharCode)) {\n eventType = chunk.slice(chunk.charCodeAt(start + 6) === SPACE ? start + 7 : start + 6, end) || void 0;\n return;\n }\n if (firstCharCode === 105 && chunk.charCodeAt(start + 1) === 100 && chunk.charCodeAt(start + 2) === 58) {\n const value2 = chunk.slice(chunk.charCodeAt(start + 3) === SPACE ? start + 4 : start + 3, end);\n id = value2.includes(\"\\0\") ? void 0 : value2;\n return;\n }\n if (firstCharCode === 58) {\n if (onComment) {\n const line2 = chunk.slice(start, end);\n onComment(line2.slice(chunk.charCodeAt(start + 1) === SPACE ? 2 : 1));\n }\n return;\n }\n const line = chunk.slice(start, end), fieldSeparatorIndex = line.indexOf(\":\");\n if (fieldSeparatorIndex === -1) {\n processField(line, \"\", line);\n return;\n }\n const field = line.slice(0, fieldSeparatorIndex), offset = line.charCodeAt(fieldSeparatorIndex + 1) === SPACE ? 2 : 1, value = line.slice(fieldSeparatorIndex + offset);\n processField(field, value, line);\n }\n function processField(field, value, line) {\n switch (field) {\n case \"event\":\n eventType = value || void 0;\n break;\n case \"data\":\n data = dataLines === 0 ? value : `${data}\n${value}`, dataLines++;\n break;\n case \"id\":\n id = value.includes(\"\\0\") ? void 0 : value;\n break;\n case \"retry\":\n /^\\d+$/.test(value) ? onRetry(parseInt(value, 10)) : onError(\n new ParseError(`Invalid \\`retry\\` value: \"${value}\"`, {\n type: \"invalid-retry\",\n value,\n line\n })\n );\n break;\n default:\n onError(\n new ParseError(\n `Unknown field \"${field.length > 20 ? `${field.slice(0, 20)}\\u2026` : field}\"`,\n { type: \"unknown-field\", field, value, line }\n )\n );\n break;\n }\n }\n function dispatchEvent() {\n dataLines > 0 && onEvent({\n id,\n event: eventType,\n data\n }), id = void 0, data = \"\", dataLines = 0, eventType = void 0;\n }\n function reset(options = {}) {\n if (options.consume && pendingFragments.length > 0) {\n const incompleteLine = pendingFragments.join(\"\");\n parseLine(incompleteLine, 0, incompleteLine.length);\n }\n isFirstChunk = !0, id = void 0, data = \"\", dataLines = 0, eventType = void 0, pendingFragments.length = 0, pendingFragmentsLength = 0, terminated = !1;\n }\n return { feed, reset };\n}\nfunction isDataPrefix(chunk, i, firstCharCode) {\n return firstCharCode === 100 && chunk.charCodeAt(i + 1) === 97 && chunk.charCodeAt(i + 2) === 116 && chunk.charCodeAt(i + 3) === 97 && chunk.charCodeAt(i + 4) === 58;\n}\nfunction isEventPrefix(chunk, i, firstCharCode) {\n return firstCharCode === 101 && chunk.charCodeAt(i + 1) === 118 && chunk.charCodeAt(i + 2) === 101 && chunk.charCodeAt(i + 3) === 110 && chunk.charCodeAt(i + 4) === 116 && chunk.charCodeAt(i + 5) === 58;\n}\nexport {\n ParseError,\n createParser\n};\n//# sourceMappingURL=index.js.map\n","import { createParser } from \"./index.js\";\nimport { ParseError } from \"./index.js\";\nclass EventSourceParserStream extends TransformStream {\n constructor({ onError, onRetry, onComment, maxBufferSize } = {}) {\n let parser;\n super({\n start(controller) {\n parser = createParser({\n onEvent: (event) => {\n controller.enqueue(event);\n },\n onError(error) {\n typeof onError == \"function\" && onError(error), (onError === \"terminate\" || error.type === \"max-buffer-size-exceeded\") && controller.error(error);\n },\n onRetry,\n onComment,\n maxBufferSize\n });\n },\n transform(chunk) {\n parser.feed(chunk);\n }\n });\n }\n}\nexport {\n EventSourceParserStream,\n ParseError\n};\n//# sourceMappingURL=stream.js.map\n","// src/as-array.ts\nfunction asArray(value) {\n return value === void 0 ? [] : Array.isArray(value) ? value : [value];\n}\n\n// src/combine-headers.ts\nfunction combineHeaders(...headers) {\n return headers.reduce(\n (combinedHeaders, currentHeaders) => ({\n ...combinedHeaders,\n ...currentHeaders != null ? currentHeaders : {}\n }),\n {}\n );\n}\n\n// src/remove-undefined-entries.ts\nfunction removeUndefinedEntries(record) {\n return Object.fromEntries(\n Object.entries(record).filter(([_key, value]) => value != null)\n );\n}\n\n// src/delay.ts\nasync function delay(delayInMs, options) {\n if (delayInMs == null) {\n return Promise.resolve();\n }\n const signal = options == null ? void 0 : options.abortSignal;\n return new Promise((resolve2, reject) => {\n if (signal == null ? void 0 : signal.aborted) {\n reject(createAbortError());\n return;\n }\n const timeoutId = setTimeout(() => {\n cleanup();\n resolve2();\n }, delayInMs);\n const cleanup = () => {\n clearTimeout(timeoutId);\n signal == null ? void 0 : signal.removeEventListener(\"abort\", onAbort);\n };\n const onAbort = () => {\n cleanup();\n reject(createAbortError());\n };\n signal == null ? void 0 : signal.addEventListener(\"abort\", onAbort);\n });\n}\nfunction createAbortError() {\n return new DOMException(\"Delay was aborted\", \"AbortError\");\n}\n\n// src/websocket.ts\nfunction getWebSocketConstructor(webSocket) {\n const WebSocketConstructor = webSocket != null ? webSocket : globalThis.WebSocket;\n if (WebSocketConstructor == null) {\n throw new Error(\"No WebSocket implementation available.\");\n }\n return WebSocketConstructor;\n}\nfunction toWebSocketUrl(url) {\n const wsUrl = new URL(url);\n if (wsUrl.protocol === \"http:\") {\n wsUrl.protocol = \"ws:\";\n } else if (wsUrl.protocol === \"https:\") {\n wsUrl.protocol = \"wss:\";\n }\n return wsUrl;\n}\nvar textDecoder = new TextDecoder();\nasync function readWebSocketMessageText(data) {\n if (typeof data === \"string\") return data;\n if (data instanceof ArrayBuffer) return textDecoder.decode(data);\n if (ArrayBuffer.isView(data)) {\n return textDecoder.decode(data);\n }\n if (typeof Blob !== \"undefined\" && data instanceof Blob) {\n return data.text();\n }\n return String(data);\n}\nvar WEBSOCKET_OPEN_STATE = 1;\nasync function waitForWebSocketBufferDrain(socket, {\n highWaterMark = 1024 * 1024,\n pollIntervalMs = 20,\n abortSignal\n} = {}) {\n var _a3;\n while (socket.readyState === WEBSOCKET_OPEN_STATE && ((_a3 = socket.bufferedAmount) != null ? _a3 : 0) > highWaterMark) {\n if ((abortSignal == null ? void 0 : abortSignal.aborted) === true) {\n return;\n }\n await delay(pollIntervalMs);\n }\n}\n\n// src/connect-to-websocket.ts\nfunction connectToWebSocket({\n url,\n protocols,\n headers,\n webSocket,\n abortSignal,\n onOpen,\n onMessageText,\n onProcessingError,\n onSocketError,\n onClose,\n onAbort\n}) {\n var _a3;\n let socket;\n let abortListener;\n const close = (code) => {\n if (abortListener != null) {\n abortSignal == null ? void 0 : abortSignal.removeEventListener(\"abort\", abortListener);\n abortListener = void 0;\n }\n try {\n socket == null ? void 0 : socket.close(code);\n } catch (e) {\n }\n };\n if (abortSignal == null ? void 0 : abortSignal.aborted) {\n onAbort == null ? void 0 : onAbort((_a3 = abortSignal.reason) != null ? _a3 : new Error(\"Aborted\"));\n return { socket: void 0, close };\n }\n try {\n const WebSocketConstructor = getWebSocketConstructor(webSocket);\n socket = new WebSocketConstructor(url, protocols, {\n headers: removeUndefinedEntries(headers != null ? headers : {})\n });\n } catch (error) {\n onProcessingError(error);\n return { socket: void 0, close };\n }\n if (abortSignal != null && onAbort != null) {\n abortListener = () => {\n var _a4;\n return onAbort((_a4 = abortSignal.reason) != null ? _a4 : new Error(\"Aborted\"));\n };\n abortSignal.addEventListener(\"abort\", abortListener, { once: true });\n }\n const openedSocket = socket;\n socket.onopen = () => {\n try {\n onOpen == null ? void 0 : onOpen(openedSocket);\n } catch (error) {\n onProcessingError(error);\n }\n };\n let tail = Promise.resolve();\n socket.onmessage = (event) => {\n tail = tail.then(() => readWebSocketMessageText(event.data)).then((text) => onMessageText(text)).catch(onProcessingError);\n };\n socket.onerror = () => {\n tail = tail.then(() => onSocketError == null ? void 0 : onSocketError()).catch(onProcessingError);\n };\n socket.onclose = (event) => {\n const closeEvent = event;\n const code = typeof (closeEvent == null ? void 0 : closeEvent.code) === \"number\" ? closeEvent.code : void 0;\n const reason = typeof (closeEvent == null ? void 0 : closeEvent.reason) === \"string\" ? closeEvent.reason : void 0;\n tail = tail.then(() => onClose == null ? void 0 : onClose({ code, reason })).catch(onProcessingError);\n };\n return { socket, close };\n}\n\n// src/convert-async-iterator-to-readable-stream.ts\nfunction convertAsyncIteratorToReadableStream(iterator) {\n let cancelled = false;\n return new ReadableStream({\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 if (cancelled) return;\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 async cancel(reason) {\n cancelled = true;\n if (iterator.return) {\n try {\n await iterator.return(reason);\n } catch (e) {\n }\n }\n }\n });\n}\n\n// src/convert-inline-file-data-to-uint8-array.ts\nimport { UnsupportedFunctionalityError } from \"@ai-sdk/provider\";\n\n// src/uint8-utils.ts\nvar { btoa, atob } = globalThis;\nfunction convertBase64ToUint8Array(base64String) {\n const base64Url = base64String.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const latin1string = atob(base64Url);\n return Uint8Array.from(latin1string, (byte) => byte.codePointAt(0));\n}\nfunction convertUint8ArrayToBase64(array) {\n let latin1string = \"\";\n for (let i = 0; i < array.length; i++) {\n latin1string += String.fromCodePoint(array[i]);\n }\n return btoa(latin1string);\n}\nfunction convertToBase64(value) {\n return value instanceof Uint8Array ? convertUint8ArrayToBase64(value) : value;\n}\n\n// src/convert-inline-file-data-to-uint8-array.ts\nfunction convertInlineFileDataToUint8Array(data) {\n if (data.type === \"stream\") {\n const error = new UnsupportedFunctionalityError({\n functionality: \"streaming file upload\"\n });\n void data.stream.cancel(error).catch(() => {\n });\n throw error;\n }\n if (data.type === \"text\") {\n return new TextEncoder().encode(data.text);\n }\n if (data.data instanceof Uint8Array) {\n return data.data;\n }\n if (data.data instanceof ArrayBuffer) {\n return new Uint8Array(data.data);\n }\n return convertBase64ToUint8Array(data.data);\n}\n\n// src/convert-image-model-file-to-data-uri.ts\nfunction convertImageModelFileToDataUri(file) {\n if (file.type === \"url\") return file.url;\n return `data:${file.mediaType};base64,${typeof file.data === \"string\" ? file.data : convertUint8ArrayToBase64(file.data)}`;\n}\n\n// src/convert-to-form-data.ts\nfunction convertToFormData(input, options = {}) {\n const { useArrayBrackets = true } = options;\n const formData = new FormData();\n for (const [key, value] of Object.entries(input)) {\n if (value == null) {\n continue;\n }\n if (Array.isArray(value)) {\n if (value.length === 1) {\n formData.append(key, value[0]);\n continue;\n }\n const arrayKey = useArrayBrackets ? `${key}[]` : key;\n for (const item of value) {\n formData.append(arrayKey, item);\n }\n continue;\n }\n formData.append(key, value);\n }\n return formData;\n}\n\n// src/create-language-model-response-metadata.ts\nfunction createLanguageModelResponseMetadata({\n id,\n model,\n created\n}) {\n return {\n id: id != null ? id : void 0,\n modelId: model != null ? model : void 0,\n timestamp: created != null ? new Date(created * 1e3) : void 0\n };\n}\n\n// src/create-null-language-model-usage.ts\nfunction createNullLanguageModelUsage() {\n return {\n inputTokens: {\n total: void 0,\n noCache: void 0,\n cacheRead: void 0,\n cacheWrite: void 0\n },\n outputTokens: {\n total: void 0,\n text: void 0,\n reasoning: void 0\n },\n raw: void 0\n };\n}\n\n// src/create-tool-name-mapping.ts\nfunction createToolNameMapping({\n tools = [],\n providerToolNames\n}) {\n const customToolNameToProviderToolName = {};\n const providerToolNameToCustomToolName = {};\n for (const tool2 of tools) {\n if (tool2.type === \"provider\" && tool2.id in providerToolNames) {\n const providerToolName = providerToolNames[tool2.id];\n customToolNameToProviderToolName[tool2.name] = providerToolName;\n providerToolNameToCustomToolName[providerToolName] = tool2.name;\n }\n }\n return {\n toProviderToolName: (customToolName) => {\n var _a3;\n return (_a3 = customToolNameToProviderToolName[customToolName]) != null ? _a3 : customToolName;\n },\n toCustomToolName: (providerToolName) => {\n var _a3;\n return (_a3 = providerToolNameToCustomToolName[providerToolName]) != null ? _a3 : providerToolName;\n }\n };\n}\n\n// src/create-provider-stream-error.ts\nvar marker = /* @__PURE__ */ Symbol.for(\"vercel.ai.providerStreamError\");\nfunction createProviderStreamError({\n message,\n type,\n code,\n statusCode,\n isRetryable,\n data\n}) {\n const error = {\n message,\n type,\n code,\n statusCode,\n isRetryable,\n data\n };\n Object.defineProperty(error, marker, { value: true });\n return error;\n}\nfunction isProviderStreamError(error) {\n return typeof error === \"object\" && error != null && error[marker] === true;\n}\n\n// src/delayed-promise.ts\nvar DelayedPromise = class {\n constructor() {\n this.status = { type: \"pending\" };\n this._resolve = void 0;\n this._reject = void 0;\n }\n get promise() {\n if (this._promise) {\n return this._promise;\n }\n this._promise = new Promise((resolve2, reject) => {\n if (this.status.type === \"resolved\") {\n resolve2(this.status.value);\n } else if (this.status.type === \"rejected\") {\n reject(this.status.error);\n }\n this._resolve = resolve2;\n this._reject = reject;\n });\n return this._promise;\n }\n resolve(value) {\n var _a3;\n this.status = { type: \"resolved\", value };\n if (this._promise) {\n (_a3 = this._resolve) == null ? void 0 : _a3.call(this, value);\n }\n }\n reject(error) {\n var _a3;\n this.status = { type: \"rejected\", error };\n if (this._promise) {\n (_a3 = this._reject) == null ? void 0 : _a3.call(this, error);\n }\n }\n isResolved() {\n return this.status.type === \"resolved\";\n }\n isRejected() {\n return this.status.type === \"rejected\";\n }\n isPending() {\n return this.status.type === \"pending\";\n }\n};\n\n// src/delete-from-api.ts\nimport { APICallError as APICallError2 } from \"@ai-sdk/provider\";\n\n// src/extract-response-headers.ts\nfunction extractResponseHeaders(response) {\n return Object.fromEntries([...response.headers]);\n}\n\n// src/get-runtime-environment-user-agent.ts\nfunction getRuntimeEnvironmentUserAgent(globalThisAny = globalThis) {\n var _a3, _b3, _c;\n if (globalThisAny.window) {\n return `runtime/browser`;\n }\n if ((_a3 = globalThisAny.navigator) == null ? void 0 : _a3.userAgent) {\n return `runtime/${globalThisAny.navigator.userAgent.toLowerCase()}`;\n }\n if ((_c = (_b3 = globalThisAny.process) == null ? void 0 : _b3.versions) == null ? void 0 : _c.node) {\n return `runtime/node.js/${globalThisAny.process.version.substring(0)}`;\n }\n if (globalThisAny.EdgeRuntime) {\n return `runtime/vercel-edge`;\n }\n return \"runtime/unknown\";\n}\n\n// src/handle-fetch-error.ts\nimport { APICallError } from \"@ai-sdk/provider\";\n\n// src/is-abort-error.ts\nfunction isAbortError(error) {\n return (error instanceof Error || error instanceof DOMException) && (error.name === \"AbortError\" || error.name === \"ResponseAborted\" || // Next.js\n error.name === \"TimeoutError\");\n}\n\n// src/handle-fetch-error.ts\nvar FETCH_FAILED_ERROR_MESSAGES = [\"fetch failed\", \"failed to fetch\"];\nvar RETRYABLE_NETWORK_ERROR_CODES = /* @__PURE__ */ new Set([\n \"ConnectionRefused\",\n \"ConnectionClosed\",\n \"FailedToOpenSocket\",\n \"ECONNRESET\",\n \"ECONNREFUSED\",\n \"ETIMEDOUT\",\n \"EPIPE\",\n \"UND_ERR_SOCKET\",\n \"UND_ERR_HEADERS_TIMEOUT\",\n \"UND_ERR_BODY_TIMEOUT\",\n \"UND_ERR_CONNECT_TIMEOUT\"\n]);\nfunction findNetworkError(error) {\n const visited = /* @__PURE__ */ new Set();\n let current = error;\n while (current instanceof Error && !visited.has(current)) {\n visited.add(current);\n const errorWithCode = current;\n if (typeof errorWithCode.code === \"string\" && RETRYABLE_NETWORK_ERROR_CODES.has(errorWithCode.code)) {\n return errorWithCode;\n }\n current = current.cause;\n }\n return void 0;\n}\nfunction handleFetchError({\n error,\n url,\n requestBodyValues\n}) {\n if (isAbortError(error)) {\n return error;\n }\n if (error instanceof TypeError && FETCH_FAILED_ERROR_MESSAGES.includes(error.message.toLowerCase())) {\n const cause = error.cause;\n if (cause != null) {\n return new APICallError({\n message: `Cannot connect to API: ${cause.message}`,\n cause,\n url,\n requestBodyValues,\n isRetryable: true\n // retry when network error\n });\n }\n }\n const networkError = findNetworkError(error);\n if (networkError != null) {\n if (APICallError.isInstance(error)) {\n return new APICallError({\n message: error.message,\n cause: error.cause,\n url: error.url,\n requestBodyValues: error.requestBodyValues,\n statusCode: error.statusCode,\n responseHeaders: error.responseHeaders,\n responseBody: error.responseBody,\n data: error.data,\n isRetryable: true\n });\n }\n return new APICallError({\n message: `Cannot connect to API: ${error instanceof Error ? error.message : networkError.message}`,\n cause: error,\n url,\n requestBodyValues,\n isRetryable: true\n });\n }\n return error;\n}\n\n// src/version.ts\nvar VERSION = true ? \"5.0.36\" : \"0.0.0-test\";\n\n// src/normalize-headers.ts\nfunction normalizeHeaders(headers) {\n if (headers == null) {\n return {};\n }\n const normalized = {};\n if (headers instanceof Headers) {\n headers.forEach((value, key) => {\n normalized[key.toLowerCase()] = value;\n });\n } else {\n if (!Array.isArray(headers)) {\n headers = Object.entries(headers);\n }\n for (const [key, value] of headers) {\n if (value != null) {\n normalized[key.toLowerCase()] = value;\n }\n }\n }\n return normalized;\n}\n\n// src/with-user-agent-suffix.ts\nfunction withUserAgentSuffix(headers, ...userAgentSuffixParts) {\n const normalizedHeaders = new Headers(normalizeHeaders(headers));\n const currentUserAgentHeader = normalizedHeaders.get(\"user-agent\") || \"\";\n normalizedHeaders.set(\n \"user-agent\",\n [currentUserAgentHeader, ...userAgentSuffixParts].filter(Boolean).join(\" \")\n );\n return Object.fromEntries(normalizedHeaders.entries());\n}\n\n// src/delete-from-api.ts\nvar getOriginalFetch = () => globalThis.fetch;\nvar deleteFromApi = async ({\n url,\n headers = {},\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch = getOriginalFetch()\n}) => {\n try {\n const response = await fetch(url, {\n method: \"DELETE\",\n headers: withUserAgentSuffix(\n headers,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent()\n ),\n signal: abortSignal\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (isAbortError(error) || APICallError2.isInstance(error)) {\n throw error;\n }\n throw new APICallError2({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError2.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError2({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: {} });\n }\n};\n\n// src/detect-media-type.ts\nvar imageMediaTypeSignatures = [\n {\n mediaType: \"image/gif\",\n bytesPrefix: [71, 73, 70]\n // GIF\n },\n {\n mediaType: \"image/png\",\n bytesPrefix: [137, 80, 78, 71]\n // PNG\n },\n {\n mediaType: \"image/jpeg\",\n bytesPrefix: [255, 216]\n // JPEG\n },\n {\n mediaType: \"image/webp\",\n bytesPrefix: [\n 82,\n 73,\n 70,\n 70,\n // \"RIFF\"\n null,\n null,\n null,\n null,\n // file size (variable)\n 87,\n 69,\n 66,\n 80\n // \"WEBP\"\n ]\n },\n {\n mediaType: \"image/bmp\",\n bytesPrefix: [66, 77]\n },\n {\n mediaType: \"image/tiff\",\n bytesPrefix: [73, 73, 42, 0]\n },\n {\n mediaType: \"image/tiff\",\n bytesPrefix: [77, 77, 0, 42]\n },\n {\n mediaType: \"image/avif\",\n bytesPrefix: [\n 0,\n 0,\n 0,\n 32,\n 102,\n 116,\n 121,\n 112,\n 97,\n 118,\n 105,\n 102\n ]\n },\n {\n mediaType: \"image/heic\",\n bytesPrefix: [\n 0,\n 0,\n 0,\n 32,\n 102,\n 116,\n 121,\n 112,\n 104,\n 101,\n 105,\n 99\n ]\n }\n];\nvar documentMediaTypeSignatures = [\n {\n mediaType: \"application/pdf\",\n bytesPrefix: [37, 80, 68, 70]\n // %PDF\n }\n];\nvar audioMediaTypeSignaturesWithoutMp4 = [\n {\n mediaType: \"audio/mpeg\",\n bytesPrefix: [255, 251]\n },\n {\n mediaType: \"audio/mpeg\",\n bytesPrefix: [255, 250]\n },\n {\n mediaType: \"audio/mpeg\",\n bytesPrefix: [255, 243]\n },\n {\n mediaType: \"audio/mpeg\",\n bytesPrefix: [255, 242]\n },\n {\n mediaType: \"audio/mpeg\",\n bytesPrefix: [255, 227]\n },\n {\n mediaType: \"audio/mpeg\",\n bytesPrefix: [255, 226]\n },\n {\n mediaType: \"audio/wav\",\n bytesPrefix: [\n 82,\n // R\n 73,\n // I\n 70,\n // F\n 70,\n // F\n null,\n null,\n null,\n null,\n 87,\n // W\n 65,\n // A\n 86,\n // V\n 69\n // E\n ]\n },\n {\n mediaType: \"audio/ogg\",\n bytesPrefix: [79, 103, 103, 83]\n },\n {\n mediaType: \"audio/flac\",\n bytesPrefix: [102, 76, 97, 67]\n },\n {\n mediaType: \"audio/aac\",\n bytesPrefix: [64, 21, 0, 0]\n },\n {\n mediaType: \"audio/webm\",\n bytesPrefix: [26, 69, 223, 163]\n }\n];\nvar audioMediaTypeSignatures = [\n ...audioMediaTypeSignaturesWithoutMp4,\n {\n mediaType: \"audio/mp4\",\n bytesPrefix: [\n 0,\n 0,\n 0,\n null,\n 102,\n 116,\n 121,\n 112\n // ftyp\n ]\n }\n];\nvar videoMediaTypeSignatures = [\n {\n mediaType: \"video/mp4\",\n bytesPrefix: [\n 0,\n 0,\n 0,\n null,\n 102,\n 116,\n 121,\n 112\n // ftyp\n ]\n },\n {\n mediaType: \"video/webm\",\n bytesPrefix: [26, 69, 223, 163]\n // EBML\n },\n {\n mediaType: \"video/quicktime\",\n bytesPrefix: [\n 0,\n 0,\n 0,\n 20,\n 102,\n 116,\n 121,\n 112,\n 113,\n 116\n // ftypqt\n ]\n },\n {\n mediaType: \"video/x-msvideo\",\n bytesPrefix: [82, 73, 70, 70]\n // RIFF (AVI)\n }\n];\nvar DEFAULT_SNIFF_BYTES = 18;\nvar MAX_SIGNATURE_BYTES = 12;\nvar MAX_ID3_TAG_BYTES = 128 * 1024;\nvar ID3_SCAN_BYTES = MAX_ID3_TAG_BYTES + MAX_SIGNATURE_BYTES;\nfunction decodePrefix(data, maxBytes) {\n if (typeof data !== \"string\") {\n return data.length > maxBytes ? data.subarray(0, maxBytes) : data;\n }\n const maxChars = Math.ceil(maxBytes / 3) * 4;\n const bytes = convertBase64ToUint8Array(\n data.substring(0, Math.min(data.length, maxChars))\n );\n return bytes.length > maxBytes ? bytes.subarray(0, maxBytes) : bytes;\n}\nfunction hasID3(bytes) {\n return bytes.length > 10 && bytes[0] === 73 && // 'I'\n bytes[1] === 68 && // 'D'\n bytes[2] === 51;\n}\nvar stripID3 = (bytes) => {\n const id3Size = (bytes[6] & 127) << 21 | (bytes[7] & 127) << 14 | (bytes[8] & 127) << 7 | bytes[9] & 127;\n return bytes.subarray(id3Size + 10);\n};\nfunction detectMediaTypeBySignatures({\n data,\n signatures\n}) {\n let bytes = decodePrefix(data, DEFAULT_SNIFF_BYTES);\n if (hasID3(bytes)) {\n bytes = stripID3(decodePrefix(data, ID3_SCAN_BYTES));\n }\n for (const signature of signatures) {\n if (bytes.length >= signature.bytesPrefix.length && signature.bytesPrefix.every(\n (byte, index) => byte === null || bytes[index] === byte\n )) {\n return signature.mediaType;\n }\n }\n return void 0;\n}\nvar topLevelSignatureTables = {\n image: imageMediaTypeSignatures,\n audio: audioMediaTypeSignatures,\n video: videoMediaTypeSignatures,\n application: documentMediaTypeSignatures\n};\nfunction detectMediaType({\n data,\n topLevelType\n}) {\n if (topLevelType === void 0) {\n return detectMediaTypeBySignatures({\n data,\n signatures: [\n ...imageMediaTypeSignatures,\n ...documentMediaTypeSignatures,\n // MP4 containers cannot be distinguished as audio or video by ftyp alone.\n // Preserve the generic detection result as video/mp4.\n ...audioMediaTypeSignaturesWithoutMp4,\n ...videoMediaTypeSignatures\n ]\n });\n }\n const signatures = topLevelSignatureTables[topLevelType];\n if (signatures === void 0) {\n return void 0;\n }\n return detectMediaTypeBySignatures({ data, signatures });\n}\nfunction getTopLevelMediaType(mediaType) {\n const slashIndex = mediaType.indexOf(\"/\");\n return slashIndex === -1 ? mediaType : mediaType.substring(0, slashIndex);\n}\nfunction isFullMediaType(mediaType) {\n const slashIndex = mediaType.indexOf(\"/\");\n if (slashIndex === -1) {\n return false;\n }\n const subtype = mediaType.substring(slashIndex + 1);\n return subtype.length > 0 && subtype !== \"*\";\n}\n\n// src/cancel-response-body.ts\nasync function cancelResponseBody(response) {\n var _a3;\n try {\n await ((_a3 = response.body) == null ? void 0 : _a3.cancel());\n } catch (e) {\n }\n}\n\n// src/download-error.ts\nimport { AISDKError } from \"@ai-sdk/provider\";\nvar name = \"AI_DownloadError\";\nvar marker2 = `vercel.ai.error.${name}`;\nvar symbol = Symbol.for(marker2);\nvar _a, _b;\nvar DownloadError = class extends (_b = AISDKError, _a = symbol, _b) {\n constructor({\n url,\n statusCode,\n statusText,\n cause,\n message = cause == null ? `Failed to download ${url}: ${statusCode} ${statusText}` : `Failed to download ${url}: ${cause}`\n }) {\n super({ name, message, cause });\n this[_a] = true;\n this.url = url;\n this.statusCode = statusCode;\n this.statusText = statusText;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker2);\n }\n};\n\n// src/is-browser-runtime.ts\nfunction isBrowserRuntime(globalThisAny = globalThis) {\n return globalThisAny.window != null;\n}\n\n// src/is-same-origin.ts\nfunction isSameOrigin(url, baseUrl) {\n try {\n return new URL(url).origin === new URL(baseUrl).origin;\n } catch (e) {\n return false;\n }\n}\n\n// src/validate-download-url.ts\nfunction validateDownloadUrl(url) {\n let parsed;\n try {\n parsed = new URL(url);\n } catch (e) {\n throw new DownloadError({\n url,\n message: `Invalid URL: ${url}`\n });\n }\n if (parsed.protocol === \"data:\") {\n return;\n }\n if (parsed.protocol !== \"http:\" && parsed.protocol !== \"https:\") {\n throw new DownloadError({\n url,\n message: `URL scheme must be http, https, or data, got ${parsed.protocol}`\n });\n }\n const hostname = parsed.hostname.toLowerCase().replace(/\\.+$/, \"\");\n if (!hostname) {\n throw new DownloadError({\n url,\n message: `URL must have a hostname`\n });\n }\n if (hostname === \"localhost\" || hostname.endsWith(\".local\") || hostname.endsWith(\".localhost\")) {\n throw new DownloadError({\n url,\n message: `URL with hostname ${hostname} is not allowed`\n });\n }\n if (hostname.startsWith(\"[\") && hostname.endsWith(\"]\")) {\n const ipv6 = hostname.slice(1, -1);\n if (isPrivateIPv6(ipv6)) {\n throw new DownloadError({\n url,\n message: `URL with IPv6 address ${hostname} is not allowed`\n });\n }\n return;\n }\n if (isIPv4(hostname)) {\n if (isPrivateIPv4(hostname)) {\n throw new DownloadError({\n url,\n message: `URL with IP address ${hostname} is not allowed`\n });\n }\n return;\n }\n}\nfunction validateDownloadAddress({\n address,\n family,\n hostname\n}) {\n const isUnsafe = family === 4 ? !isIPv4(address) || isPrivateIPv4(address) : family === 6 ? isPrivateIPv6(address) : true;\n if (isUnsafe) {\n throw new DownloadError({\n url: hostname,\n message: `Hostname ${hostname} resolved to disallowed IP address ${address}`\n });\n }\n}\nfunction isIPv4(hostname) {\n const parts = hostname.split(\".\");\n if (parts.length !== 4) return false;\n return parts.every((part) => {\n const num = Number(part);\n return Number.isInteger(num) && num >= 0 && num <= 255 && String(num) === part;\n });\n}\nfunction isPrivateIPv4(ip) {\n const parts = ip.split(\".\").map(Number);\n const [a, b, c] = parts;\n if (a === 0) return true;\n if (a === 10) return true;\n if (a === 100 && b >= 64 && b <= 127) return true;\n if (a === 127) return true;\n if (a === 169 && b === 254) return true;\n if (a === 172 && b >= 16 && b <= 31) return true;\n if (a === 192 && b === 0 && c === 0) return true;\n if (a === 192 && b === 0 && c === 2) return true;\n if (a === 192 && b === 168) return true;\n if (a === 198 && (b === 18 || b === 19)) return true;\n if (a === 198 && b === 51 && c === 100) return true;\n if (a === 203 && b === 0 && c === 113) return true;\n if (a >= 224) return true;\n return false;\n}\nfunction parseIPv6(ip) {\n let address = ip.toLowerCase();\n const zoneIndex = address.indexOf(\"%\");\n if (zoneIndex !== -1) {\n address = address.slice(0, zoneIndex);\n }\n const halves = address.split(\"::\");\n if (halves.length > 2) return null;\n const toGroups = (segment) => {\n if (segment === \"\") return [];\n const groups = [];\n const parts = segment.split(\":\");\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n if (part.includes(\".\")) {\n if (i !== parts.length - 1 || !isIPv4(part)) return null;\n const [a, b, c, d] = part.split(\".\").map(Number);\n groups.push(a << 8 | b, c << 8 | d);\n continue;\n }\n if (!/^[0-9a-f]{1,4}$/.test(part)) return null;\n groups.push(parseInt(part, 16));\n }\n return groups;\n };\n const head = toGroups(halves[0]);\n if (head === null) return null;\n if (halves.length === 2) {\n const tail = toGroups(halves[1]);\n if (tail === null) return null;\n const fill = 8 - head.length - tail.length;\n if (fill < 0) return null;\n return [...head, ...new Array(fill).fill(0), ...tail];\n }\n return head.length === 8 ? head : null;\n}\nfunction isPrivateIPv6(ip) {\n const groups = parseIPv6(ip);\n if (groups === null) return true;\n const topZero = (count) => groups.slice(0, count).every((group) => group === 0);\n if (topZero(7) && (groups[7] === 0 || groups[7] === 1)) return true;\n if ((groups[0] & 65024) === 64512) return true;\n if ((groups[0] & 65472) === 65152) return true;\n if ((groups[0] & 65472) === 65216) return true;\n if ((groups[0] & 65280) === 65280) return true;\n if (groups[0] === 8193 && groups[1] === 3512) return true;\n if (groups[0] === 16383 && (groups[1] & 61440) === 0) return true;\n const embedsIPv4 = (\n // ::/96 — IPv4-compatible (deprecated)\n topZero(6) || // ::ffff:0:0/96 — IPv4-mapped (ffff in group 5)\n topZero(5) && groups[5] === 65535 || // ::ffff:0:0/96 — IPv4-translated form (ffff in group 4, group 5 zero)\n topZero(4) && groups[4] === 65535 && groups[5] === 0 || // 64:ff9b::/96 — NAT64 well-known prefix\n groups[0] === 100 && groups[1] === 65435 && groups[2] === 0 && groups[3] === 0 && groups[4] === 0 && groups[5] === 0 || // 64:ff9b:1::/48 — NAT64 local-use prefix\n groups[0] === 100 && groups[1] === 65435 && groups[2] === 1\n );\n if (embedsIPv4) {\n const a = groups[6] >> 8 & 255;\n const b = groups[6] & 255;\n const c = groups[7] >> 8 & 255;\n const d = groups[7] & 255;\n return isPrivateIPv4(`${a}.${b}.${c}.${d}`);\n }\n return false;\n}\n\n// src/safe-node-fetch.ts\nfunction createSafeLookup(lookup) {\n return ((hostname, options, callback) => {\n lookup(hostname, { ...options, all: true }, (error, addresses) => {\n if (error) {\n callback(error);\n return;\n }\n try {\n const [firstAddress] = addresses;\n if (firstAddress == null) {\n throw new Error(`Hostname ${hostname} did not resolve to an address`);\n }\n for (const { address, family } of addresses) {\n validateDownloadAddress({ address, family, hostname });\n }\n if (options.all === true) {\n callback(null, addresses);\n } else {\n callback(\n null,\n firstAddress.address,\n firstAddress.family\n );\n }\n } catch (error2) {\n callback(\n error2 instanceof Error ? error2 : new Error(String(error2))\n );\n }\n });\n });\n}\nvar safeNodeFetchPromise;\nvar initialGlobalFetch = globalThis.fetch;\nvar initialGlobalFetchIsNodeDefault = isNodeDefaultFetch(initialGlobalFetch);\nfunction isNodeRuntime() {\n var _a3, _b3;\n const runtimeProcess = globalThis.process;\n return ((_a3 = runtimeProcess == null ? void 0 : runtimeProcess.release) == null ? void 0 : _a3.name) === \"node\" && ((_b3 = runtimeProcess.versions) == null ? void 0 : _b3.bun) == null;\n}\nasync function getDefaultDownloadFetch() {\n if (!isNodeRuntime() || !initialGlobalFetchIsNodeDefault || globalThis.fetch !== initialGlobalFetch) {\n return globalThis.fetch;\n }\n return safeNodeFetchPromise != null ? safeNodeFetchPromise : safeNodeFetchPromise = Promise.resolve().then(createSafeNodeFetch);\n}\nfunction isNodeDefaultFetch(fetch) {\n if (typeof fetch !== \"function\") {\n return false;\n }\n const source = Function.prototype.toString.call(fetch);\n return source.includes(\"internal/deps/undici\") || source.includes(\"lazy loading of undici\");\n}\nfunction createSafeNodeFetch() {\n const { createRequire } = loadBuiltinModule(\"node:module\");\n const { lookup } = loadBuiltinModule(\"node:dns\");\n const { Agent, fetch } = createRequire(getCurrentModulePath())(\n \"undici\"\n );\n const dispatcher = new Agent({\n connect: {\n lookup: createSafeLookup(lookup)\n }\n });\n return ((input, init) => fetch(\n input,\n {\n ...init,\n dispatcher\n }\n ));\n}\nfunction loadBuiltinModule(id) {\n var _a3;\n const processWithBuiltins = globalThis.process;\n const builtinModule = (_a3 = processWithBuiltins == null ? void 0 : processWithBuiltins.getBuiltinModule) == null ? void 0 : _a3.call(processWithBuiltins, id);\n if (builtinModule == null) {\n throw new Error(`Node.js built-in module ${id} is unavailable`);\n }\n return builtinModule;\n}\nfunction getCurrentModulePath() {\n const originalPrepareStackTrace = Error.prepareStackTrace;\n try {\n Error.prepareStackTrace = (_error, callSites) => callSites;\n const error = new Error(\"Capture current module path\");\n Error.captureStackTrace(error, getCurrentModulePath);\n const [caller] = error.stack;\n const fileName = caller == null ? void 0 : caller.getFileName();\n if (fileName == null) {\n throw new Error(\"Unable to determine the current module path\");\n }\n return fileName;\n } finally {\n Error.prepareStackTrace = originalPrepareStackTrace;\n }\n}\n\n// src/sanitize-request-headers.ts\nvar BLOCKED_REQUEST_HEADERS = [\n // Hop-by-hop / transport (RFC 7230 §6.1)\n \"connection\",\n \"keep-alive\",\n \"te\",\n \"trailer\",\n \"transfer-encoding\",\n \"upgrade\",\n // Host / virtual-host routing\n \"host\",\n // Proxy / origin spoofing\n \"forwarded\",\n \"proxy-authorization\",\n \"via\",\n \"x-forwarded-for\",\n \"x-forwarded-host\",\n \"x-forwarded-proto\",\n \"x-real-ip\",\n // Cloud metadata (GCP, AWS IMDSv1/v2, Azure, Alibaba, DigitalOcean)\n \"metadata\",\n \"metadata-flavor\",\n \"x-aws-ec2-metadata-token\",\n \"x-metadata-token\",\n // Session / cookie\n \"cookie\",\n \"set-cookie\"\n];\nfunction sanitizeRequestHeaders(input) {\n const headers = new Headers(input);\n for (const name3 of BLOCKED_REQUEST_HEADERS) {\n headers.delete(name3);\n }\n return headers;\n}\n\n// src/fetch-with-validated-redirects.ts\nvar MAX_DOWNLOAD_REDIRECTS = 10;\nvar REDIRECT_STATUS_CODES = /* @__PURE__ */ new Set([301, 302, 303, 307, 308]);\nasync function fetchWithValidatedRedirects({\n url,\n headers,\n abortSignal,\n maxRedirects = MAX_DOWNLOAD_REDIRECTS,\n fetch: customFetch,\n trustedOrigin\n}) {\n let currentHeaders = headers === void 0 ? void 0 : sanitizeRequestHeaders(headers);\n const perHopInit = (redirect) => {\n const init = { signal: abortSignal, redirect };\n if (currentHeaders !== void 0) {\n init.headers = new Headers(currentHeaders);\n }\n return init;\n };\n let currentUrl = url;\n for (let redirectCount = 0; redirectCount <= maxRedirects; redirectCount++) {\n const isTrustedHop = trustedOrigin !== void 0 && isSameOrigin(currentUrl, trustedOrigin);\n if (!isTrustedHop) {\n validateDownloadUrl(currentUrl);\n }\n const fetch = customFetch != null ? customFetch : isTrustedHop ? globalThis.fetch : await getDefaultDownloadFetch();\n const response = await fetch(currentUrl, perHopInit(\"manual\"));\n if (response.type === \"opaqueredirect\") {\n if (!isBrowserRuntime()) {\n throw new DownloadError({\n url,\n message: `Redirect from ${currentUrl} could not be validated and was blocked`\n });\n }\n return await fetch(currentUrl, perHopInit(\"follow\"));\n }\n const location = response.headers.get(\"location\");\n if (REDIRECT_STATUS_CODES.has(response.status) && location) {\n await cancelResponseBody(response);\n const nextUrl = new URL(location, currentUrl).toString();\n if (currentHeaders !== void 0 && !isSameOrigin(nextUrl, currentUrl)) {\n const userAgent = currentHeaders.get(\"user-agent\");\n currentHeaders = new Headers(\n userAgent == null ? void 0 : { \"user-agent\": userAgent }\n );\n }\n currentUrl = nextUrl;\n continue;\n }\n return response;\n }\n throw new DownloadError({\n url,\n message: `Too many redirects (max ${maxRedirects})`\n });\n}\n\n// src/read-response-with-size-limit.ts\nvar DEFAULT_MAX_DOWNLOAD_SIZE = 2 * 1024 * 1024 * 1024;\nasync function readResponseWithSizeLimit({\n response,\n url,\n maxBytes = DEFAULT_MAX_DOWNLOAD_SIZE\n}) {\n const contentLength = response.headers.get(\"content-length\");\n if (contentLength != null) {\n const length = parseInt(contentLength, 10);\n if (!isNaN(length) && length > maxBytes) {\n await cancelResponseBody(response);\n throw new DownloadError({\n url,\n message: `Download of ${url} exceeded maximum size of ${maxBytes} bytes (Content-Length: ${length}).`\n });\n }\n }\n const body = response.body;\n if (body == null) {\n return new Uint8Array(0);\n }\n const reader = body.getReader();\n const chunks = [];\n let totalBytes = 0;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n totalBytes += value.length;\n if (totalBytes > maxBytes) {\n throw new DownloadError({\n url,\n message: `Download of ${url} exceeded maximum size of ${maxBytes} bytes.`\n });\n }\n chunks.push(value);\n }\n } finally {\n try {\n await reader.cancel();\n } catch (e) {\n } finally {\n reader.releaseLock();\n }\n }\n const result = new Uint8Array(totalBytes);\n let offset = 0;\n for (const chunk of chunks) {\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n}\n\n// src/download-blob.ts\nasync function downloadBlob(url, options) {\n var _a3, _b3;\n try {\n const response = await fetchWithValidatedRedirects({\n url,\n abortSignal: options == null ? void 0 : options.abortSignal\n });\n if (!response.ok) {\n await cancelResponseBody(response);\n throw new DownloadError({\n url,\n statusCode: response.status,\n statusText: response.statusText\n });\n }\n const data = await readResponseWithSizeLimit({\n response,\n url,\n maxBytes: (_a3 = options == null ? void 0 : options.maxBytes) != null ? _a3 : DEFAULT_MAX_DOWNLOAD_SIZE\n });\n const contentType = (_b3 = response.headers.get(\"content-type\")) != null ? _b3 : void 0;\n return new Blob([data], contentType ? { type: contentType } : void 0);\n } catch (error) {\n if (DownloadError.isInstance(error)) {\n throw error;\n }\n throw new DownloadError({ url, cause: error });\n }\n}\n\n// src/embedding-model-capabilities.ts\nvar EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL = /* @__PURE__ */ Symbol.for(\n \"vercel.ai.embeddingModel.maxInputBytesPerCall\"\n);\n\n// src/extract-lines.ts\nfunction extractLines({\n text,\n startLine,\n endLine\n}) {\n if (startLine == null && endLine == null) return text;\n const lineEnding = text.includes(\"\\r\\n\") ? \"\\r\\n\" : text.includes(\"\\n\") ? \"\\n\" : text.includes(\"\\r\") ? \"\\r\" : \"\\n\";\n const lines = text.split(lineEnding);\n const start = Math.max(1, startLine != null ? startLine : 1) - 1;\n const end = Math.min(lines.length, endLine != null ? endLine : lines.length);\n return lines.slice(start, end).join(lineEnding);\n}\n\n// src/filter-nullable.ts\nfunction filterNullable(...values) {\n return values.filter((value) => value != null);\n}\n\n// src/generate-id.ts\nimport { InvalidArgumentError } from \"@ai-sdk/provider\";\nvar createIdGenerator = ({\n prefix,\n size = 16,\n alphabet = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n separator = \"-\"\n} = {}) => {\n const generator = () => {\n const alphabetLength = alphabet.length;\n const chars = new Array(size);\n for (let i = 0; i < size; i++) {\n chars[i] = alphabet[Math.random() * alphabetLength | 0];\n }\n return chars.join(\"\");\n };\n if (prefix == null) {\n return generator;\n }\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 return () => `${prefix}${separator}${generator()}`;\n};\nvar generateId = createIdGenerator();\n\n// src/get-error-message.ts\nimport { getErrorMessage } from \"@ai-sdk/provider\";\n\n// src/get-from-api.ts\nimport { APICallError as APICallError3 } from \"@ai-sdk/provider\";\nvar getOriginalFetch2 = () => globalThis.fetch;\nvar getFromApi = async ({\n url,\n headers = {},\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch,\n validateUrl,\n credentialedOrigin,\n trustedOrigin\n}) => {\n try {\n const requestFetch = fetch != null ? fetch : getOriginalFetch2();\n const outgoingHeaders = credentialedOrigin !== void 0 && !isSameOrigin(url, credentialedOrigin) ? {} : headers;\n const requestHeaders = withUserAgentSuffix(\n outgoingHeaders,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent()\n );\n const response = validateUrl ? await fetchWithValidatedRedirects({\n url,\n headers: requestHeaders,\n abortSignal,\n fetch,\n trustedOrigin\n }) : await requestFetch(url, {\n method: \"GET\",\n headers: requestHeaders,\n signal: abortSignal\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (isAbortError(error) || APICallError3.isInstance(error)) {\n throw error;\n }\n throw new APICallError3({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: {}\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError3.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError3({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: {}\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: {} });\n }\n};\n\n// src/inject-json-instruction.ts\nvar DEFAULT_SCHEMA_PREFIX = \"JSON schema:\";\nvar DEFAULT_SCHEMA_SUFFIX = \"You MUST answer with a JSON object that matches the JSON schema above.\";\nvar DEFAULT_GENERIC_SUFFIX = \"You MUST answer with JSON.\";\nfunction injectJsonInstruction({\n prompt,\n schema,\n schemaPrefix = schema != null ? DEFAULT_SCHEMA_PREFIX : void 0,\n schemaSuffix = schema != null ? DEFAULT_SCHEMA_SUFFIX : DEFAULT_GENERIC_SUFFIX\n}) {\n return [\n prompt != null && prompt.length > 0 ? prompt : void 0,\n prompt != null && prompt.length > 0 ? \"\" : void 0,\n // add a newline if prompt is not null\n schemaPrefix,\n schema != null ? JSON.stringify(schema) : void 0,\n schemaSuffix\n ].filter((line) => line != null).join(\"\\n\");\n}\nfunction injectJsonInstructionIntoMessages({\n messages,\n schema,\n schemaPrefix,\n schemaSuffix\n}) {\n var _a3, _b3;\n const systemMessage = ((_a3 = messages[0]) == null ? void 0 : _a3.role) === \"system\" ? { ...messages[0] } : { role: \"system\", content: \"\" };\n systemMessage.content = injectJsonInstruction({\n prompt: systemMessage.content,\n schema,\n schemaPrefix,\n schemaSuffix\n });\n return [\n systemMessage,\n ...((_b3 = messages[0]) == null ? void 0 : _b3.role) === \"system\" ? messages.slice(1) : messages\n ];\n}\n\n// src/is-buffer.ts\nfunction isBuffer(value) {\n var _a3, _b3;\n return (_b3 = (_a3 = globalThis.Buffer) == null ? void 0 : _a3.isBuffer(value)) != null ? _b3 : false;\n}\n\n// src/is-non-nullable.ts\nfunction isNonNullable(value) {\n return value != null;\n}\n\n// src/is-provider-reference.ts\nfunction isProviderReference(data) {\n return typeof data === \"object\" && data !== null && !(data instanceof Uint8Array) && !(data instanceof URL) && !(data instanceof ArrayBuffer) && !isBuffer(data) && !(\"type\" in data);\n}\n\n// src/is-record.ts\nfunction isRecord(value) {\n return value != null && typeof value === \"object\" && !Array.isArray(value);\n}\n\n// src/is-url-supported.ts\nfunction isUrlSupported({\n mediaType,\n url,\n supportedUrls\n}) {\n url = url.toLowerCase();\n mediaType = mediaType.toLowerCase();\n const isTopLevelOnly = !mediaType.includes(\"/\");\n return Object.entries(supportedUrls).map(([key, value]) => {\n const mediaType2 = key.toLowerCase();\n return mediaType2 === \"*\" || mediaType2 === \"*/*\" ? { mediaTypePrefix: \"\", regexes: value } : { mediaTypePrefix: mediaType2.replace(/\\*/, \"\"), regexes: value };\n }).filter(({ mediaTypePrefix }) => {\n if (mediaTypePrefix === \"\") {\n return true;\n }\n if (isTopLevelOnly) {\n return `${mediaType}/` === mediaTypePrefix;\n }\n return mediaType.startsWith(mediaTypePrefix);\n }).flatMap(({ regexes }) => regexes).some((pattern) => testRegExpFromStart(pattern, url));\n}\nfunction testRegExpFromStart(pattern, value) {\n if (!pattern.global && !pattern.sticky) {\n return pattern.test(value);\n }\n const lastIndex = pattern.lastIndex;\n pattern.lastIndex = 0;\n try {\n return pattern.test(value);\n } finally {\n pattern.lastIndex = lastIndex;\n }\n}\n\n// src/load-api-key.ts\nimport { LoadAPIKeyError } from \"@ai-sdk/provider\";\nfunction loadApiKey({\n apiKey,\n environmentVariableName,\n apiKeyParameterName = \"apiKey\",\n description\n}) {\n if (typeof apiKey === \"string\") {\n return apiKey;\n }\n if (apiKey != null) {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string.`\n });\n }\n if (typeof process === \"undefined\") {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter. Environment variables are not supported in this environment.`\n });\n }\n apiKey = process.env[environmentVariableName];\n if (apiKey == null) {\n throw new LoadAPIKeyError({\n message: `${description} API key is missing. Pass it using the '${apiKeyParameterName}' parameter or the ${environmentVariableName} environment variable.`\n });\n }\n if (typeof apiKey !== \"string\") {\n throw new LoadAPIKeyError({\n message: `${description} API key must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n });\n }\n return apiKey;\n}\n\n// src/load-optional-setting.ts\nfunction loadOptionalSetting({\n settingValue,\n environmentVariableName\n}) {\n if (typeof settingValue === \"string\") {\n return settingValue;\n }\n if (settingValue != null || typeof process === \"undefined\") {\n return void 0;\n }\n settingValue = process.env[environmentVariableName];\n if (settingValue == null || typeof settingValue !== \"string\") {\n return void 0;\n }\n return settingValue;\n}\n\n// src/load-setting.ts\nimport { LoadSettingError } from \"@ai-sdk/provider\";\nfunction loadSetting({\n settingValue,\n environmentVariableName,\n settingName,\n description\n}) {\n if (typeof settingValue === \"string\") {\n return settingValue;\n }\n if (settingValue != null) {\n throw new LoadSettingError({\n message: `${description} setting must be a string.`\n });\n }\n if (typeof process === \"undefined\") {\n throw new LoadSettingError({\n message: `${description} setting is missing. Pass it using the '${settingName}' parameter. Environment variables are not supported in this environment.`\n });\n }\n settingValue = process.env[environmentVariableName];\n if (settingValue == null) {\n throw new LoadSettingError({\n message: `${description} setting is missing. Pass it using the '${settingName}' parameter or the ${environmentVariableName} environment variable.`\n });\n }\n if (typeof settingValue !== \"string\") {\n throw new LoadSettingError({\n message: `${description} setting must be a string. The value of the ${environmentVariableName} environment variable is not a string.`\n });\n }\n return settingValue;\n}\n\n// src/map-reasoning-to-provider.ts\nfunction isCustomReasoning(reasoning) {\n return reasoning !== void 0 && reasoning !== \"provider-default\";\n}\nfunction mapReasoningToProviderEffort({\n reasoning,\n effortMap,\n warnings\n}) {\n const mapped = effortMap[reasoning];\n if (mapped == null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"reasoning\",\n details: `reasoning \"${reasoning}\" is not supported by this model.`\n });\n return void 0;\n }\n if (mapped !== reasoning) {\n warnings.push({\n type: \"compatibility\",\n feature: \"reasoning\",\n details: `reasoning \"${reasoning}\" is not directly supported by this model. mapped to effort \"${mapped}\".`\n });\n }\n return mapped;\n}\nvar DEFAULT_REASONING_BUDGET_PERCENTAGES = {\n minimal: 0.02,\n low: 0.1,\n medium: 0.3,\n high: 0.6,\n xhigh: 0.9\n};\nfunction mapReasoningToProviderBudget({\n reasoning,\n maxOutputTokens,\n maxReasoningBudget,\n minReasoningBudget = 1024,\n budgetPercentages = DEFAULT_REASONING_BUDGET_PERCENTAGES,\n warnings\n}) {\n const pct = budgetPercentages[reasoning];\n if (pct == null) {\n warnings.push({\n type: \"unsupported\",\n feature: \"reasoning\",\n details: `reasoning \"${reasoning}\" is not supported by this model.`\n });\n return void 0;\n }\n return Math.min(\n maxReasoningBudget,\n Math.max(minReasoningBudget, Math.round(maxOutputTokens * pct))\n );\n}\n\n// src/media-type-to-extension.ts\nfunction mediaTypeToExtension(mediaType) {\n var _a3;\n const [_type, subtype = \"\"] = mediaType.toLowerCase().split(\"/\");\n return (_a3 = {\n mpeg: \"mp3\",\n \"x-wav\": \"wav\",\n opus: \"ogg\",\n mp4: \"m4a\",\n \"x-m4a\": \"m4a\"\n }[subtype]) != null ? _a3 : subtype;\n}\n\n// src/normalize-batch-request-counts.ts\nfunction normalizeBatchRequestCounts({\n total,\n pending,\n completed,\n failed\n}) {\n if (isNonNegativeSafeInteger(total) && isNonNegativeSafeInteger(pending) && isNonNegativeSafeInteger(completed) && isNonNegativeSafeInteger(failed) && pending + completed + failed === total) {\n return {\n total,\n pending,\n completed,\n failed\n };\n }\n return void 0;\n}\nfunction isNonNegativeSafeInteger(value) {\n return value != null && Number.isSafeInteger(value) && value >= 0;\n}\n\n// src/parse-json.ts\nimport {\n JSONParseError,\n TypeValidationError as TypeValidationError3\n} from \"@ai-sdk/provider\";\n\n// src/secure-json-parse.ts\nvar suspectProtoRx = /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/;\nvar 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*:/;\nfunction _parse(text) {\n const obj = JSON.parse(text);\n if (obj === null || typeof obj !== \"object\") {\n return obj;\n }\n if (suspectProtoRx.test(text) === false && suspectConstructorRx.test(text) === false) {\n return obj;\n }\n return filter(obj);\n}\nfunction filter(obj) {\n let next = [obj];\n while (next.length) {\n const nodes = next;\n next = [];\n for (const node of nodes) {\n if (Object.prototype.hasOwnProperty.call(node, \"__proto__\")) {\n throw new SyntaxError(\"Object contains forbidden prototype property\");\n }\n if (Object.prototype.hasOwnProperty.call(node, \"constructor\") && node.constructor !== null && typeof node.constructor === \"object\" && Object.prototype.hasOwnProperty.call(node.constructor, \"prototype\")) {\n throw new SyntaxError(\"Object contains forbidden prototype property\");\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}\nfunction secureJsonParse(text) {\n const { stackTraceLimit } = Error;\n try {\n Error.stackTraceLimit = 0;\n } catch (e) {\n return _parse(text);\n }\n try {\n return _parse(text);\n } finally {\n Error.stackTraceLimit = stackTraceLimit;\n }\n}\n\n// src/validate-types.ts\nimport {\n TypeValidationError as TypeValidationError2\n} from \"@ai-sdk/provider\";\n\n// src/schema.ts\nimport { TypeValidationError } from \"@ai-sdk/provider\";\nimport { safeParseAsync } from \"zod/v4\";\nimport { toJSONSchema } from \"zod/v4/core\";\n\n// src/add-additional-properties-to-json-schema.ts\nfunction addAdditionalPropertiesToJsonSchema(jsonSchema2) {\n if (jsonSchema2.type === \"object\" || Array.isArray(jsonSchema2.type) && jsonSchema2.type.includes(\"object\")) {\n const { additionalProperties } = jsonSchema2;\n jsonSchema2.additionalProperties = additionalProperties != null && typeof additionalProperties !== \"boolean\" ? visit(additionalProperties) : false;\n const { properties } = jsonSchema2;\n if (properties != null) {\n for (const key of Object.keys(properties)) {\n properties[key] = visit(properties[key]);\n }\n }\n }\n if (jsonSchema2.items != null) {\n jsonSchema2.items = Array.isArray(jsonSchema2.items) ? jsonSchema2.items.map(visit) : visit(jsonSchema2.items);\n }\n if (jsonSchema2.anyOf != null) {\n jsonSchema2.anyOf = jsonSchema2.anyOf.map(visit);\n }\n if (jsonSchema2.allOf != null) {\n jsonSchema2.allOf = jsonSchema2.allOf.map(visit);\n }\n if (jsonSchema2.oneOf != null) {\n jsonSchema2.oneOf = jsonSchema2.oneOf.map(visit);\n }\n const { definitions } = jsonSchema2;\n if (definitions != null) {\n for (const key of Object.keys(definitions)) {\n definitions[key] = visit(definitions[key]);\n }\n }\n return jsonSchema2;\n}\nfunction visit(def) {\n if (typeof def === \"boolean\") return def;\n return addAdditionalPropertiesToJsonSchema(def);\n}\n\n// src/to-json-schema/zod3-to-json-schema/options.ts\nvar ignoreOverride = /* @__PURE__ */ Symbol(\n \"Let zodToJsonSchema decide on which parser to use\"\n);\nvar defaultOptions = {\n name: void 0,\n $refStrategy: \"root\",\n basePath: [\"#\"],\n effectStrategy: \"input\",\n pipeStrategy: \"all\",\n dateStrategy: \"format:date-time\",\n mapStrategy: \"entries\",\n removeAdditionalStrategy: \"passthrough\",\n allowedAdditionalProperties: true,\n rejectedAdditionalProperties: false,\n definitionPath: \"definitions\",\n strictUnions: false,\n definitions: {},\n errorMessages: false,\n patternStrategy: \"escape\",\n applyRegexFlags: false,\n emailStrategy: \"format:email\",\n base64Strategy: \"contentEncoding:base64\",\n nameStrategy: \"ref\"\n};\nvar getDefaultOptions = (options) => typeof options === \"string\" ? {\n ...defaultOptions,\n name: options\n} : {\n ...defaultOptions,\n ...options\n};\n\n// src/to-json-schema/zod3-to-json-schema/parsers/any.ts\nfunction parseAnyDef() {\n return {};\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/array.ts\nfunction parseArrayDef(def, refs) {\n var _a3, _b3, _c;\n const res = {\n type: \"array\"\n };\n if (((_a3 = def.type) == null ? void 0 : _a3._def) && ((_c = (_b3 = def.type) == null ? void 0 : _b3._def) == null ? void 0 : _c.typeName) !== \"ZodAny\") {\n res.items = parseDef(def.type._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\"]\n });\n }\n if (def.minLength) {\n res.minItems = def.minLength.value;\n }\n if (def.maxLength) {\n res.maxItems = def.maxLength.value;\n }\n if (def.exactLength) {\n res.minItems = def.exactLength.value;\n res.maxItems = def.exactLength.value;\n }\n return res;\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/bigint.ts\nfunction parseBigintDef(def) {\n const res = {\n type: \"integer\",\n format: \"int64\"\n };\n if (!def.checks) return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case \"max\":\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n break;\n case \"multipleOf\":\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/boolean.ts\nfunction parseBooleanDef() {\n return { type: \"boolean\" };\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/branded.ts\nfunction parseBrandedDef(_def, refs) {\n return parseDef(_def.type._def, refs);\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/catch.ts\nvar parseCatchDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n\n// src/to-json-schema/zod3-to-json-schema/parsers/date.ts\nfunction parseDateDef(def, refs, overrideDateStrategy) {\n const strategy = overrideDateStrategy != null ? overrideDateStrategy : refs.dateStrategy;\n if (Array.isArray(strategy)) {\n return {\n anyOf: strategy.map((item) => 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);\n }\n}\nvar integerDateParser = (def) => {\n const res = {\n type: \"integer\",\n format: \"unix-time\"\n };\n for (const check of def.checks) {\n switch (check.kind) {\n case \"min\":\n res.minimum = check.value;\n break;\n case \"max\":\n res.maximum = check.value;\n break;\n }\n }\n return res;\n};\n\n// src/to-json-schema/zod3-to-json-schema/parsers/default.ts\nfunction parseDefaultDef(_def, refs) {\n return {\n ...parseDef(_def.innerType._def, refs),\n default: _def.defaultValue()\n };\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/effects.ts\nfunction parseEffectsDef(_def, refs) {\n return refs.effectStrategy === \"input\" ? parseDef(_def.schema._def, refs) : parseAnyDef();\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/enum.ts\nfunction parseEnumDef(def) {\n return {\n type: \"string\",\n enum: Array.from(def.values)\n };\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/intersection.ts\nvar isJsonSchema7AllOfType = (type) => {\n if (\"type\" in type && type.type === \"string\") return false;\n return \"allOf\" in type;\n};\nfunction 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 const mergedAllOf = [];\n allOf.forEach((schema) => {\n if (isJsonSchema7AllOfType(schema)) {\n mergedAllOf.push(...schema.allOf);\n } else {\n let nestedSchema = schema;\n if (\"additionalProperties\" in schema && schema.additionalProperties === false) {\n const { additionalProperties: _additionalProperties, ...rest } = schema;\n nestedSchema = rest;\n }\n mergedAllOf.push(nestedSchema);\n }\n });\n return mergedAllOf.length ? { allOf: mergedAllOf } : void 0;\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/literal.ts\nfunction parseLiteralDef(def) {\n const parsedType = typeof def.value;\n if (parsedType !== \"bigint\" && parsedType !== \"number\" && parsedType !== \"boolean\" && parsedType !== \"string\") {\n return {\n type: Array.isArray(def.value) ? \"array\" : \"object\"\n };\n }\n return {\n type: parsedType === \"bigint\" ? \"integer\" : parsedType,\n const: def.value\n };\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/string.ts\nvar emojiRegex = void 0;\nvar 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 === void 0) {\n emojiRegex = RegExp(\n \"^(\\\\p{Extended_Pictographic}|\\\\p{Emoji_Component})+$\",\n \"u\"\n );\n }\n return emojiRegex;\n },\n /**\n * Unused\n */\n uuid: /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/,\n /**\n * Unused\n */\n ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,\n ipv4Cidr: /^(?:(?: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};\nfunction 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 res.minLength = typeof res.minLength === \"number\" ? Math.max(res.minLength, check.value) : check.value;\n break;\n case \"max\":\n res.maxLength = typeof res.maxLength === \"number\" ? Math.min(res.maxLength, check.value) : check.value;\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(\n res,\n RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`),\n check.message,\n refs\n );\n break;\n case \"endsWith\":\n addPattern(\n res,\n RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`),\n check.message,\n refs\n );\n break;\n case \"datetime\":\n addFormat(res, \"date-time\", check.message, refs);\n break;\n case \"date\":\n addFormat(res, \"date\", check.message, refs);\n break;\n case \"time\":\n addFormat(res, \"time\", check.message, refs);\n break;\n case \"duration\":\n addFormat(res, \"duration\", check.message, refs);\n break;\n case \"length\":\n res.minLength = typeof res.minLength === \"number\" ? Math.max(res.minLength, check.value) : check.value;\n res.maxLength = typeof res.maxLength === \"number\" ? Math.min(res.maxLength, check.value) : check.value;\n break;\n case \"includes\": {\n addPattern(\n res,\n RegExp(escapeLiteralCheckValue(check.value, refs)),\n check.message,\n refs\n );\n break;\n }\n case \"ip\": {\n if (check.version !== \"v6\") {\n addFormat(res, \"ipv4\", check.message, refs);\n }\n if (check.version !== \"v4\") {\n addFormat(res, \"ipv6\", check.message, refs);\n }\n break;\n }\n case \"base64url\":\n addPattern(res, zodPatterns.base64url, check.message, refs);\n break;\n case \"jwt\":\n addPattern(res, zodPatterns.jwt, check.message, refs);\n break;\n case \"cidr\": {\n if (check.version !== \"v6\") {\n addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);\n }\n if (check.version !== \"v4\") {\n addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);\n }\n break;\n }\n case \"emoji\":\n addPattern(res, zodPatterns.emoji(), check.message, refs);\n break;\n case \"ulid\": {\n addPattern(res, zodPatterns.ulid, check.message, refs);\n break;\n }\n case \"base64\": {\n switch (refs.base64Strategy) {\n case \"format:binary\": {\n addFormat(res, \"binary\", check.message, refs);\n break;\n }\n case \"contentEncoding:base64\": {\n res.contentEncoding = \"base64\";\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 /* @__PURE__ */ ((_) => {\n })(check);\n }\n }\n }\n return res;\n}\nfunction escapeLiteralCheckValue(literal, refs) {\n return refs.patternStrategy === \"escape\" ? escapeNonAlphaNumeric(literal) : literal;\n}\nvar ALPHA_NUMERIC = new Set(\n \"ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789\"\n);\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}\nfunction addFormat(schema, value, message, refs) {\n var _a3;\n if (schema.format || ((_a3 = schema.anyOf) == null ? void 0 : _a3.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 });\n delete schema.format;\n }\n schema.anyOf.push({\n format: value,\n ...message && refs.errorMessages && { errorMessage: { format: message } }\n });\n } else {\n schema.format = value;\n }\n}\nfunction addPattern(schema, regex, message, refs) {\n var _a3;\n if (schema.pattern || ((_a3 = schema.allOf) == null ? void 0 : _a3.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 });\n delete schema.pattern;\n }\n schema.allOf.push({\n pattern: stringifyRegExpWithFlags(regex, refs),\n ...message && refs.errorMessages && { errorMessage: { pattern: message } }\n });\n } else {\n schema.pattern = stringifyRegExpWithFlags(regex, refs);\n }\n}\nfunction stringifyRegExpWithFlags(regex, refs) {\n var _a3;\n if (!refs.applyRegexFlags || !regex.flags) {\n return regex.source;\n }\n const flags = {\n i: regex.flags.includes(\"i\"),\n // Case-insensitive\n m: regex.flags.includes(\"m\"),\n // `^` and `$` matches adjacent to newline characters\n s: regex.flags.includes(\"s\")\n // `.` matches newlines\n };\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 } else if (source[i + 1] === \"-\" && ((_a3 = source[i + 2]) == null ? void 0 : _a3.match(/[a-z]/))) {\n pattern += source[i];\n inCharRange = true;\n } else {\n pattern += `${source[i]}${source[i].toUpperCase()}`;\n }\n continue;\n }\n } else if (source[i].match(/[a-z]/)) {\n pattern += `[${source[i]}${source[i].toUpperCase()}]`;\n continue;\n }\n }\n if (flags.m) {\n if (source[i] === \"^\") {\n pattern += `(^|(?<=[\\r\n]))`;\n continue;\n } else if (source[i] === \"$\") {\n pattern += `($|(?=[\\r\n]))`;\n continue;\n }\n }\n 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 } else if (inCharGroup && source[i] === \"]\") {\n inCharGroup = false;\n } else if (!inCharGroup && source[i] === \"[\") {\n inCharGroup = true;\n }\n }\n try {\n new RegExp(pattern);\n } catch (e) {\n console.warn(\n `Could not convert regex pattern at ${refs.currentPath.join(\n \"/\"\n )} to a flag-independent form! Falling back to the flag-ignorant source`\n );\n return regex.source;\n }\n return pattern;\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/record.ts\nfunction parseRecordDef(def, refs) {\n var _a3, _b3, _c, _d, _e, _f;\n const schema = {\n type: \"object\",\n additionalProperties: (_a3 = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalProperties\"]\n })) != null ? _a3 : refs.allowedAdditionalProperties\n };\n if (((_b3 = def.keyType) == null ? void 0 : _b3._def.typeName) === \"ZodString\" && ((_c = def.keyType._def.checks) == null ? void 0 : _c.length)) {\n const { type: _type, ...keyType } = parseStringDef(def.keyType._def, refs);\n return {\n ...schema,\n propertyNames: keyType\n };\n } else if (((_d = def.keyType) == null ? void 0 : _d._def.typeName) === \"ZodEnum\") {\n return {\n ...schema,\n propertyNames: {\n enum: def.keyType._def.values\n }\n };\n } else if (((_e = def.keyType) == null ? void 0 : _e._def.typeName) === \"ZodBranded\" && def.keyType._def.type._def.typeName === \"ZodString\" && ((_f = def.keyType._def.type._def.checks) == null ? void 0 : _f.length)) {\n const { type: _type, ...keyType } = parseBrandedDef(\n def.keyType._def,\n refs\n );\n return {\n ...schema,\n propertyNames: keyType\n };\n }\n return schema;\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/map.ts\nfunction 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();\n const values = parseDef(def.valueType._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", \"items\", \"1\"]\n }) || parseAnyDef();\n return {\n type: \"array\",\n maxItems: 125,\n items: {\n type: \"array\",\n items: [keys, values],\n minItems: 2,\n maxItems: 2\n }\n };\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/native-enum.ts\nfunction 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(\n new Set(actualValues.map((values) => typeof values))\n );\n return {\n type: parsedTypes.length === 1 ? parsedTypes[0] === \"string\" ? \"string\" : \"number\" : [\"string\", \"number\"],\n enum: actualValues\n };\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/never.ts\nfunction parseNeverDef() {\n return { not: parseAnyDef() };\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/null.ts\nfunction parseNullDef() {\n return {\n type: \"null\"\n };\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/union.ts\nvar primitiveMappings = {\n ZodString: \"string\",\n ZodNumber: \"number\",\n ZodBigInt: \"integer\",\n ZodBoolean: \"boolean\",\n ZodNull: \"null\"\n};\nfunction parseUnionDef(def, refs) {\n const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;\n if (options.every(\n (x) => x._def.typeName in primitiveMappings && (!x._def.checks || !x._def.checks.length)\n )) {\n const types = options.reduce((types2, x) => {\n const type = primitiveMappings[x._def.typeName];\n return type && !types2.includes(type) ? [...types2, type] : types2;\n }, []);\n return {\n type: types.length > 1 ? types : types[0]\n };\n } else if (options.every((x) => x._def.typeName === \"ZodLiteral\" && !x.description)) {\n const types = options.reduce(\n (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) return [...acc, \"null\"];\n case \"symbol\":\n case \"undefined\":\n case \"function\":\n default:\n return acc;\n }\n },\n []\n );\n if (types.length === options.length) {\n const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);\n return {\n type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],\n enum: options.reduce(\n (acc, x) => {\n return acc.includes(x._def.value) ? acc : [...acc, x._def.value];\n },\n []\n )\n };\n }\n } else if (options.every((x) => x._def.typeName === \"ZodEnum\")) {\n return {\n type: \"string\",\n enum: options.reduce(\n (acc, x) => [\n ...acc,\n ...x._def.values.filter((x2) => !acc.includes(x2))\n ],\n []\n )\n };\n }\n return asAnyOf(def, refs);\n}\nvar asAnyOf = (def, refs) => {\n const anyOf = (def.options instanceof Map ? Array.from(def.options.values()) : def.options).map(\n (x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"anyOf\", `${i}`]\n })\n ).filter(\n (x) => !!x && (!refs.strictUnions || typeof x === \"object\" && Object.keys(x).length > 0)\n );\n return anyOf.length ? { anyOf } : void 0;\n};\n\n// src/to-json-schema/zod3-to-json-schema/parsers/nullable.ts\nfunction parseNullableDef(def, refs) {\n if ([\"ZodString\", \"ZodNumber\", \"ZodBigInt\", \"ZodBoolean\", \"ZodNull\"].includes(\n def.innerType._def.typeName\n ) && (!def.innerType._def.checks || !def.innerType._def.checks.length)) {\n return {\n type: [\n primitiveMappings[def.innerType._def.typeName],\n \"null\"\n ]\n };\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\n// src/to-json-schema/zod3-to-json-schema/parsers/number.ts\nfunction parseNumberDef(def) {\n const res = {\n type: \"number\"\n };\n if (!def.checks) return res;\n for (const check of def.checks) {\n switch (check.kind) {\n case \"int\":\n res.type = \"integer\";\n break;\n case \"min\":\n if (check.inclusive) {\n res.minimum = check.value;\n } else {\n res.exclusiveMinimum = check.value;\n }\n break;\n case \"max\":\n if (check.inclusive) {\n res.maximum = check.value;\n } else {\n res.exclusiveMaximum = check.value;\n }\n break;\n case \"multipleOf\":\n res.multipleOf = check.value;\n break;\n }\n }\n return res;\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/object.ts\nfunction parseObjectDef(def, refs) {\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 === void 0 || propDef._def === void 0) {\n continue;\n }\n const propOptional = safeIsOptional(propDef);\n const parsedDef = parseDef(propDef._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"properties\", propName],\n propertyPath: [...refs.currentPath, \"properties\", propName]\n });\n if (parsedDef === void 0) {\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 !== void 0) {\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\" ? refs.allowedAdditionalProperties : refs.rejectedAdditionalProperties;\n }\n}\nfunction safeIsOptional(schema) {\n try {\n return schema.isOptional();\n } catch (e) {\n return true;\n }\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/optional.ts\nvar parseOptionalDef = (def, refs) => {\n var _a3;\n if (refs.currentPath.toString() === ((_a3 = refs.propertyPath) == null ? void 0 : _a3.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 ? { anyOf: [{ not: parseAnyDef() }, innerSchema] } : parseAnyDef();\n};\n\n// src/to-json-schema/zod3-to-json-schema/parsers/pipeline.ts\nvar parsePipelineDef = (def, refs) => {\n if (refs.pipeStrategy === \"input\") {\n return parseDef(def.in._def, refs);\n } else if (refs.pipeStrategy === \"output\") {\n return parseDef(def.out._def, refs);\n }\n const inputSchema = parseDef(def.in._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", \"0\"]\n });\n const outputSchema = parseDef(def.out._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"allOf\", inputSchema ? \"1\" : \"0\"]\n });\n return {\n allOf: [inputSchema, outputSchema].filter(\n (schema) => schema !== void 0\n )\n };\n};\n\n// src/to-json-schema/zod3-to-json-schema/parsers/promise.ts\nfunction parsePromiseDef(def, refs) {\n return parseDef(def.type._def, refs);\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/set.ts\nfunction 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 schema.minItems = def.minSize.value;\n }\n if (def.maxSize) {\n schema.maxItems = def.maxSize.value;\n }\n return schema;\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/tuple.ts\nfunction parseTupleDef(def, refs) {\n if (def.rest) {\n return {\n type: \"array\",\n minItems: def.items.length,\n items: def.items.map(\n (x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`]\n })\n ).reduce(\n (acc, x) => x === void 0 ? acc : [...acc, x],\n []\n ),\n additionalItems: parseDef(def.rest._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"additionalItems\"]\n })\n };\n } else {\n return {\n type: \"array\",\n minItems: def.items.length,\n maxItems: def.items.length,\n items: def.items.map(\n (x, i) => parseDef(x._def, {\n ...refs,\n currentPath: [...refs.currentPath, \"items\", `${i}`]\n })\n ).reduce(\n (acc, x) => x === void 0 ? acc : [...acc, x],\n []\n )\n };\n }\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/undefined.ts\nfunction parseUndefinedDef() {\n return {\n not: parseAnyDef()\n };\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/unknown.ts\nfunction parseUnknownDef() {\n return parseAnyDef();\n}\n\n// src/to-json-schema/zod3-to-json-schema/parsers/readonly.ts\nvar parseReadonlyDef = (def, refs) => {\n return parseDef(def.innerType._def, refs);\n};\n\n// src/to-json-schema/zod3-to-json-schema/select-parser.ts\nvar selectParser = (def, typeName, refs) => {\n switch (typeName) {\n case \"ZodString\":\n return parseStringDef(def, refs);\n case \"ZodNumber\":\n return parseNumberDef(def);\n case \"ZodObject\":\n return parseObjectDef(def, refs);\n case \"ZodBigInt\":\n return parseBigintDef(def);\n case \"ZodBoolean\":\n return parseBooleanDef();\n case \"ZodDate\":\n return parseDateDef(def, refs);\n case \"ZodUndefined\":\n return parseUndefinedDef();\n case \"ZodNull\":\n return parseNullDef();\n case \"ZodArray\":\n return parseArrayDef(def, refs);\n case \"ZodUnion\":\n case \"ZodDiscriminatedUnion\":\n return parseUnionDef(def, refs);\n case \"ZodIntersection\":\n return parseIntersectionDef(def, refs);\n case \"ZodTuple\":\n return parseTupleDef(def, refs);\n case \"ZodRecord\":\n return parseRecordDef(def, refs);\n case \"ZodLiteral\":\n return parseLiteralDef(def);\n case \"ZodEnum\":\n return parseEnumDef(def);\n case \"ZodNativeEnum\":\n return parseNativeEnumDef(def);\n case \"ZodNullable\":\n return parseNullableDef(def, refs);\n case \"ZodOptional\":\n return parseOptionalDef(def, refs);\n case \"ZodMap\":\n return parseMapDef(def, refs);\n case \"ZodSet\":\n return parseSetDef(def, refs);\n case \"ZodLazy\":\n return () => def.getter()._def;\n case \"ZodPromise\":\n return parsePromiseDef(def, refs);\n case \"ZodNaN\":\n case \"ZodNever\":\n return parseNeverDef();\n case \"ZodEffects\":\n return parseEffectsDef(def, refs);\n case \"ZodAny\":\n return parseAnyDef();\n case \"ZodUnknown\":\n return parseUnknownDef();\n case \"ZodDefault\":\n return parseDefaultDef(def, refs);\n case \"ZodBranded\":\n return parseBrandedDef(def, refs);\n case \"ZodReadonly\":\n return parseReadonlyDef(def, refs);\n case \"ZodCatch\":\n return parseCatchDef(def, refs);\n case \"ZodPipeline\":\n return parsePipelineDef(def, refs);\n case \"ZodFunction\":\n case \"ZodVoid\":\n case \"ZodSymbol\":\n return void 0;\n default:\n return /* @__PURE__ */ ((_) => void 0)(typeName);\n }\n};\n\n// src/to-json-schema/zod3-to-json-schema/get-relative-path.ts\nvar getRelativePath = (pathA, pathB) => {\n let i = 0;\n for (; i < pathA.length && i < pathB.length; i++) {\n if (pathA[i] !== pathB[i]) break;\n }\n return [(pathA.length - i).toString(), ...pathB.slice(i)].join(\"/\");\n};\n\n// src/to-json-schema/zod3-to-json-schema/parse-def.ts\nfunction parseDef(def, refs, forceResolution = false) {\n var _a3;\n const seenItem = refs.seen.get(def);\n if (refs.override) {\n const overrideResult = (_a3 = refs.override) == null ? void 0 : _a3.call(\n refs,\n def,\n refs,\n seenItem,\n forceResolution\n );\n if (overrideResult !== ignoreOverride) {\n return overrideResult;\n }\n }\n if (seenItem && !forceResolution) {\n const seenSchema = get$ref(seenItem, refs);\n if (seenSchema !== void 0) {\n return seenSchema;\n }\n }\n const newItem = { def, path: refs.currentPath, jsonSchema: void 0 };\n refs.seen.set(def, newItem);\n const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);\n const jsonSchema2 = typeof jsonSchemaOrGetter === \"function\" ? parseDef(jsonSchemaOrGetter(), refs) : jsonSchemaOrGetter;\n if (jsonSchema2) {\n addMeta(def, refs, jsonSchema2);\n }\n if (refs.postProcess) {\n const postProcessResult = refs.postProcess(jsonSchema2, def, refs);\n newItem.jsonSchema = jsonSchema2;\n return postProcessResult;\n }\n newItem.jsonSchema = jsonSchema2;\n return jsonSchema2;\n}\nvar 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 && item.path.every((value, index) => refs.currentPath[index] === value)) {\n console.warn(\n `Recursive reference detected at ${refs.currentPath.join(\n \"/\"\n )}! Defaulting to any`\n );\n return parseAnyDef();\n }\n return refs.$refStrategy === \"seen\" ? parseAnyDef() : void 0;\n }\n }\n};\nvar addMeta = (def, refs, jsonSchema2) => {\n if (def.description) {\n jsonSchema2.description = def.description;\n }\n return jsonSchema2;\n};\n\n// src/to-json-schema/zod3-to-json-schema/refs.ts\nvar getRefs = (options) => {\n const _options = getDefaultOptions(options);\n const currentPath = _options.name !== void 0 ? [..._options.basePath, _options.definitionPath, _options.name] : _options.basePath;\n return {\n ..._options,\n currentPath,\n propertyPath: void 0,\n seen: new Map(\n Object.entries(_options.definitions).map(([name3, def]) => [\n def._def,\n {\n def: def._def,\n path: [..._options.basePath, _options.definitionPath, name3],\n // Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.\n jsonSchema: void 0\n }\n ])\n )\n };\n};\n\n// src/to-json-schema/zod3-to-json-schema/zod3-to-json-schema.ts\nvar zod3ToJsonSchema = (schema, options) => {\n var _a3;\n const refs = getRefs(options);\n let definitions = typeof options === \"object\" && options.definitions ? Object.entries(options.definitions).reduce(\n (acc, [name4, schema2]) => {\n var _a4;\n return {\n ...acc,\n [name4]: (_a4 = parseDef(\n schema2._def,\n {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name4]\n },\n true\n )) != null ? _a4 : parseAnyDef()\n };\n },\n {}\n ) : void 0;\n const name3 = typeof options === \"string\" ? options : (options == null ? void 0 : options.nameStrategy) === \"title\" ? void 0 : options == null ? void 0 : options.name;\n const main = (_a3 = parseDef(\n schema._def,\n name3 === void 0 ? refs : {\n ...refs,\n currentPath: [...refs.basePath, refs.definitionPath, name3]\n },\n false\n )) != null ? _a3 : parseAnyDef();\n const title = typeof options === \"object\" && options.name !== void 0 && options.nameStrategy === \"title\" ? options.name : void 0;\n if (title !== void 0) {\n main.title = title;\n }\n const combined = name3 === void 0 ? definitions ? {\n ...main,\n [refs.definitionPath]: definitions\n } : main : {\n $ref: [\n ...refs.$refStrategy === \"relative\" ? [] : refs.basePath,\n refs.definitionPath,\n name3\n ].join(\"/\"),\n [refs.definitionPath]: {\n ...definitions,\n [name3]: main\n }\n };\n combined.$schema = \"http://json-schema.org/draft-07/schema#\";\n return combined;\n};\n\n// src/schema.ts\nvar schemaSymbol = /* @__PURE__ */ Symbol.for(\"vercel.ai.schema\");\nfunction lazySchema(createSchema) {\n let schema;\n return () => {\n if (schema == null) {\n schema = createSchema();\n }\n return schema;\n };\n}\nfunction jsonSchema(jsonSchema2, {\n validate\n} = {}) {\n return {\n [schemaSymbol]: true,\n _type: void 0,\n // should never be used directly\n get jsonSchema() {\n if (typeof jsonSchema2 === \"function\") {\n jsonSchema2 = jsonSchema2();\n }\n return jsonSchema2;\n },\n validate\n };\n}\nfunction isSchema(value) {\n return typeof value === \"object\" && value !== null && schemaSymbol in value && value[schemaSymbol] === true && \"jsonSchema\" in value && \"validate\" in value;\n}\nfunction asSchema(schema) {\n return schema == null ? jsonSchema({\n type: \"object\",\n properties: {},\n additionalProperties: false\n }) : isSchema(schema) ? schema : \"~standard\" in schema ? schema[\"~standard\"].vendor === \"zod\" ? zodSchema(schema) : standardSchema(schema) : schema();\n}\nfunction standardSchema(standardSchema2) {\n return jsonSchema(\n () => {\n if (!hasStandardJsonSchema(standardSchema2)) {\n throw new Error(\n `Standard schema vendor '${standardSchema2[\"~standard\"].vendor}' does not support JSON Schema conversion.`\n );\n }\n return addAdditionalPropertiesToJsonSchema(\n standardSchema2[\"~standard\"].jsonSchema.input({\n target: \"draft-07\"\n })\n );\n },\n {\n validate: async (value) => {\n const result = await standardSchema2[\"~standard\"].validate(value);\n return \"value\" in result ? { success: true, value: result.value } : {\n success: false,\n error: new TypeValidationError({\n value,\n cause: result.issues\n })\n };\n }\n }\n );\n}\nfunction hasStandardJsonSchema(schema) {\n return schema[\"~standard\"].jsonSchema != null;\n}\nfunction zod3Schema(zodSchema2, options) {\n var _a3;\n const useReferences = (_a3 = options == null ? void 0 : options.useReferences) != null ? _a3 : false;\n return jsonSchema(\n // defer json schema creation to avoid unnecessary computation when only validation is needed\n () => zod3ToJsonSchema(zodSchema2, {\n $refStrategy: useReferences ? \"root\" : \"none\"\n }),\n {\n validate: async (value) => {\n const result = await zodSchema2.safeParseAsync(value);\n return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n }\n }\n );\n}\nfunction zod4Schema(zodSchema2, options) {\n var _a3;\n const useReferences = (_a3 = options == null ? void 0 : options.useReferences) != null ? _a3 : false;\n return jsonSchema(\n // defer json schema creation to avoid unnecessary computation when only validation is needed\n () => addAdditionalPropertiesToJsonSchema(\n toJSONSchema(zodSchema2, {\n target: \"draft-7\",\n io: \"input\",\n reused: useReferences ? \"ref\" : \"inline\"\n })\n ),\n {\n validate: async (value) => {\n const result = await safeParseAsync(zodSchema2, value);\n return result.success ? { success: true, value: result.data } : { success: false, error: result.error };\n }\n }\n );\n}\nfunction isZod4Schema(zodSchema2) {\n return \"_zod\" in zodSchema2;\n}\nfunction zodSchema(zodSchema2, options) {\n if (isZod4Schema(zodSchema2)) {\n return zod4Schema(zodSchema2, options);\n } else {\n return zod3Schema(zodSchema2, options);\n }\n}\n\n// src/validate-types.ts\nasync function validateTypes({\n value,\n schema,\n context\n}) {\n const result = await safeValidateTypes({ value, schema, context });\n if (!result.success) {\n throw TypeValidationError2.wrap({ value, cause: result.error, context });\n }\n return result.value;\n}\nasync function safeValidateTypes({\n value,\n schema,\n context\n}) {\n const actualSchema = asSchema(schema);\n try {\n if (actualSchema.validate == null) {\n return { success: true, value, rawValue: value };\n }\n const result = await actualSchema.validate(value);\n if (result.success) {\n return { success: true, value: result.value, rawValue: value };\n }\n return {\n success: false,\n error: TypeValidationError2.wrap({ value, cause: result.error, context }),\n rawValue: value\n };\n } catch (error) {\n return {\n success: false,\n error: TypeValidationError2.wrap({ value, cause: error, context }),\n rawValue: value\n };\n }\n}\n\n// src/parse-json.ts\nasync function parseJSON({\n text,\n schema\n}) {\n try {\n const value = secureJsonParse(text);\n if (schema == null) {\n return value;\n }\n return await validateTypes({ value, schema });\n } catch (error) {\n if (JSONParseError.isInstance(error) || TypeValidationError3.isInstance(error)) {\n throw error;\n }\n throw new JSONParseError({ text, cause: error });\n }\n}\nasync function safeParseJSON({\n text,\n schema\n}) {\n try {\n const value = secureJsonParse(text);\n if (schema == null) {\n return { success: true, value, rawValue: value };\n }\n return await safeValidateTypes({ value, schema });\n } catch (error) {\n return {\n success: false,\n error: JSONParseError.isInstance(error) ? error : new JSONParseError({ text, cause: error }),\n rawValue: void 0\n };\n }\n}\nfunction isParsableJson(input) {\n try {\n secureJsonParse(input);\n return true;\n } catch (e) {\n return false;\n }\n}\n\n// src/parse-json-event-stream.ts\nimport {\n EventSourceParserStream\n} from \"eventsource-parser/stream\";\nfunction parseJsonEventStream({\n stream,\n schema\n}) {\n return stream.pipeThrough(new TextDecoderStream()).pipeThrough(new EventSourceParserStream()).pipeThrough(\n new TransformStream({\n async transform({ data }, controller) {\n if (data === \"[DONE]\") {\n return;\n }\n controller.enqueue(await safeParseJSON({ text: data, schema }));\n }\n })\n );\n}\n\n// src/parse-provider-options.ts\nimport { InvalidArgumentError as InvalidArgumentError2 } from \"@ai-sdk/provider\";\nasync function parseProviderOptions({\n provider,\n providerOptions,\n schema\n}) {\n if ((providerOptions == null ? void 0 : providerOptions[provider]) == null) {\n return void 0;\n }\n const parsedProviderOptions = await safeValidateTypes({\n value: providerOptions[provider],\n schema\n });\n if (!parsedProviderOptions.success) {\n throw new InvalidArgumentError2({\n argument: \"providerOptions\",\n message: `invalid ${provider} provider options`,\n cause: parsedProviderOptions.error\n });\n }\n return parsedProviderOptions.value;\n}\n\n// src/post-multipart-stream-to-api.ts\nimport { APICallError as APICallError4 } from \"@ai-sdk/provider\";\nvar getOriginalFetch3 = () => globalThis.fetch;\nfunction escapeMultipartHeaderValue(value) {\n return value.replace(/[\\r\\n]/g, \"\").replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"');\n}\nfunction createMultipartBody(parts, boundary) {\n const encoder = new TextEncoder();\n let disposed = false;\n let activeReader;\n const enteredStreams = /* @__PURE__ */ new Set();\n async function* emitParts() {\n var _a3, _b3;\n for (const part of parts) {\n if (disposed) return;\n const disposition = `--${boundary}\\r\nContent-Disposition: form-data; name=\"${escapeMultipartHeaderValue(part.name)}\"`;\n if (part.type === \"field\") {\n yield encoder.encode(`${disposition}\\r\n\\r\n${part.value}\\r\n`);\n continue;\n }\n const filenameParameter = `; filename=\"${escapeMultipartHeaderValue(\n (_a3 = part.filename) != null ? _a3 : \"blob\"\n )}\"`;\n const mediaType = ((_b3 = part.mediaType) != null ? _b3 : \"application/octet-stream\").replace(\n /[\\r\\n]/g,\n \"\"\n );\n yield encoder.encode(\n `${disposition}${filenameParameter}\\r\nContent-Type: ${mediaType}\\r\n\\r\n`\n );\n if (part.content instanceof Uint8Array) {\n yield part.content;\n } else {\n const reader = part.content.getReader();\n activeReader = reader;\n enteredStreams.add(part.content);\n let finished = false;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done || disposed) {\n finished = done;\n break;\n }\n yield value;\n }\n } finally {\n activeReader = void 0;\n if (!finished) {\n await reader.cancel().catch(() => {\n });\n }\n reader.releaseLock();\n }\n if (disposed) return;\n }\n yield encoder.encode(\"\\r\\n\");\n }\n yield encoder.encode(`--${boundary}--\\r\n`);\n }\n return {\n stream: convertAsyncIteratorToReadableStream(emitParts()),\n async dispose(reason) {\n if (disposed) return;\n disposed = true;\n const reader = activeReader;\n if (reader != null) {\n await reader.cancel(reason).catch(() => {\n });\n }\n for (const part of parts) {\n if (part.type === \"file\" && !(part.content instanceof Uint8Array) && !enteredStreams.has(part.content)) {\n await part.content.cancel(reason).catch(() => {\n });\n }\n }\n }\n };\n}\nvar postMultipartStreamToApi = async ({\n url,\n headers = {},\n parts,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch = getOriginalFetch3()\n}) => {\n const boundary = `ai-sdk-multipart-${generateId()}`;\n const requestBodyValues = Object.fromEntries(\n parts.map((part) => {\n var _a3;\n return [\n part.name,\n part.type === \"field\" ? part.value : `<file:${(_a3 = part.filename) != null ? _a3 : part.name}>`\n ];\n })\n );\n const body = createMultipartBody(parts, boundary);\n try {\n const requestInit = {\n method: \"POST\",\n headers: withUserAgentSuffix(\n {\n ...headers,\n \"Content-Type\": `multipart/form-data; boundary=${boundary}`\n },\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent()\n ),\n body: body.stream,\n duplex: \"half\",\n signal: abortSignal\n };\n const response = await fetch(url, requestInit);\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues\n });\n } catch (error) {\n if (isAbortError(error) || APICallError4.isInstance(error)) {\n throw error;\n }\n throw new APICallError4({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError4.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError4({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues\n });\n }\n } catch (error) {\n await body.dispose(error);\n throw handleFetchError({ error, url, requestBodyValues });\n }\n};\n\n// src/post-to-api.ts\nimport { APICallError as APICallError5 } from \"@ai-sdk/provider\";\nvar getOriginalFetch4 = () => globalThis.fetch;\nvar postJsonToApi = async ({\n url,\n headers,\n body,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n}) => await postToApi({\n url,\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n body: {\n content: JSON.stringify(body),\n values: body\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n});\nvar postFormDataToApi = async ({\n url,\n headers,\n formData,\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n}) => await postToApi({\n url,\n headers,\n body: {\n content: formData,\n values: Object.fromEntries(formData.entries())\n },\n failedResponseHandler,\n successfulResponseHandler,\n abortSignal,\n fetch\n});\nvar postToApi = async ({\n url,\n headers = {},\n body,\n successfulResponseHandler,\n failedResponseHandler,\n abortSignal,\n fetch = getOriginalFetch4()\n}) => {\n try {\n const response = await fetch(url, {\n method: \"POST\",\n headers: withUserAgentSuffix(\n headers,\n `ai-sdk/provider-utils/${VERSION}`,\n getRuntimeEnvironmentUserAgent()\n ),\n body: body.content,\n signal: abortSignal\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!response.ok) {\n let errorInformation;\n try {\n errorInformation = await failedResponseHandler({\n response,\n url,\n requestBodyValues: body.values\n });\n } catch (error) {\n if (isAbortError(error) || APICallError5.isInstance(error)) {\n throw error;\n }\n throw new APICallError5({\n message: \"Failed to process error response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values\n });\n }\n throw errorInformation.value;\n }\n try {\n return await successfulResponseHandler({\n response,\n url,\n requestBodyValues: body.values\n });\n } catch (error) {\n if (error instanceof Error) {\n if (isAbortError(error) || APICallError5.isInstance(error)) {\n throw error;\n }\n }\n throw new APICallError5({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode: response.status,\n url,\n responseHeaders,\n requestBodyValues: body.values\n });\n }\n } catch (error) {\n throw handleFetchError({ error, url, requestBodyValues: body.values });\n }\n};\n\n// src/types/tool.ts\nfunction tool(tool2) {\n return tool2;\n}\nfunction dynamicTool(tool2) {\n return { ...tool2, type: \"dynamic\" };\n}\n\n// src/provider-defined-tool-factory.ts\nfunction createProviderDefinedToolFactory({\n id,\n inputSchema\n}) {\n return ({\n execute,\n outputSchema,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }) => tool({\n type: \"provider\",\n isProviderExecuted: false,\n id,\n args,\n inputSchema,\n outputSchema,\n execute,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable\n });\n}\nfunction createProviderDefinedToolFactoryWithOutputSchema({\n id,\n inputSchema,\n outputSchema\n}) {\n return ({\n execute,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }) => tool({\n type: \"provider\",\n isProviderExecuted: false,\n id,\n args,\n inputSchema,\n outputSchema,\n execute,\n needsApproval,\n toModelOutput,\n onInputStart,\n onInputDelta,\n onInputAvailable\n });\n}\n\n// src/provider-executed-tool-factory.ts\nfunction createProviderExecutedToolFactory({\n id,\n inputSchema,\n outputSchema,\n supportsDeferredResults\n}) {\n return ({\n onInputStart,\n onInputDelta,\n onInputAvailable,\n ...args\n }) => tool({\n type: \"provider\",\n isProviderExecuted: true,\n id,\n args,\n inputSchema,\n outputSchema,\n onInputStart,\n onInputDelta,\n onInputAvailable,\n supportsDeferredResults\n });\n}\n\n// src/resolve.ts\nasync function resolve(value) {\n if (typeof value === \"function\") {\n value = value();\n }\n return Promise.resolve(value);\n}\n\n// src/resolve-full-media-type.ts\nimport {\n UnsupportedFunctionalityError as UnsupportedFunctionalityError2\n} from \"@ai-sdk/provider\";\nfunction resolveFullMediaType({\n part\n}) {\n if (isFullMediaType(part.mediaType)) {\n return part.mediaType;\n }\n if (part.data.type === \"data\") {\n const detected = detectMediaType({\n data: part.data.data,\n topLevelType: getTopLevelMediaType(part.mediaType)\n });\n if (detected) {\n return detected;\n }\n throw new UnsupportedFunctionalityError2({\n functionality: `file of media type \"${part.mediaType}\" must specify subtype since it could not be auto-detected`\n });\n }\n throw new UnsupportedFunctionalityError2({\n functionality: `file of media type \"${part.mediaType}\" must specify subtype since it is not passed as inline bytes`\n });\n}\n\n// src/resolve-provider-reference.ts\nimport {\n NoSuchProviderReferenceError\n} from \"@ai-sdk/provider\";\nfunction resolveProviderReference({\n reference,\n provider\n}) {\n const id = reference[provider];\n if (id != null) {\n return id;\n }\n throw new NoSuchProviderReferenceError({\n provider,\n reference\n });\n}\n\n// src/retry-with-exponential-backoff.ts\nvar retryWithExponentialBackoff = ({\n maxRetries = 2,\n initialDelayInMs = 2e3,\n backoffFactor = 2,\n abortSignal,\n shouldRetry,\n getDelayInMs = ({ exponentialBackoffDelay }) => exponentialBackoffDelay,\n createRetryError = ({ message }) => new Error(message)\n}) => async (f) => retryWithExponentialBackoffInternal(f, {\n maxRetries,\n delayInMs: initialDelayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry,\n getDelayInMs,\n createRetryError\n});\nasync function retryWithExponentialBackoffInternal(f, {\n maxRetries,\n delayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry,\n getDelayInMs,\n createRetryError\n}, errors = []) {\n try {\n return await f();\n } catch (error) {\n if (isAbortError(error)) {\n throw error;\n }\n if (maxRetries === 0) {\n throw error;\n }\n const errorMessage = getErrorMessage(error);\n const newErrors = [...errors, error];\n const tryNumber = newErrors.length;\n if (tryNumber > maxRetries) {\n throw createRetryError({\n message: `Failed after ${tryNumber} attempts. Last error: ${errorMessage}`,\n reason: \"maxRetriesExceeded\",\n errors: newErrors\n });\n }\n if (await shouldRetry(error) && tryNumber <= maxRetries) {\n await delay(\n getDelayInMs({\n error,\n exponentialBackoffDelay: delayInMs\n }),\n { abortSignal }\n );\n return retryWithExponentialBackoffInternal(\n f,\n {\n maxRetries,\n delayInMs: backoffFactor * delayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry,\n getDelayInMs,\n createRetryError\n },\n newErrors\n );\n }\n if (tryNumber === 1) {\n throw error;\n }\n throw createRetryError({\n message: `Failed after ${tryNumber} attempts with non-retryable error: '${errorMessage}'`,\n reason: \"errorNotRetryable\",\n errors: newErrors\n });\n }\n}\n\n// src/response-handler.ts\nimport { APICallError as APICallError6, EmptyResponseBodyError } from \"@ai-sdk/provider\";\nvar textDecoder2 = new TextDecoder();\nfunction wrapResponseBodyStream({\n stream,\n url,\n requestBodyValues,\n statusCode,\n responseHeaders\n}) {\n const reader = stream.getReader();\n let readerReleased = false;\n const releaseReader = () => {\n if (!readerReleased) {\n reader.releaseLock();\n readerReleased = true;\n }\n };\n return new ReadableStream({\n async pull(controller) {\n try {\n const { done, value } = await reader.read();\n if (done) {\n releaseReader();\n controller.close();\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n releaseReader();\n if (isAbortError(error)) {\n controller.error(error);\n return;\n }\n controller.error(\n handleFetchError({\n error: new APICallError6({\n message: \"Failed to process successful response\",\n cause: error,\n statusCode,\n url,\n responseHeaders,\n requestBodyValues\n }),\n url,\n requestBodyValues\n })\n );\n }\n },\n async cancel(reason) {\n try {\n await reader.cancel(reason);\n } finally {\n releaseReader();\n }\n }\n });\n}\nasync function readResponseBodyAsText({\n response,\n url\n}) {\n return textDecoder2.decode(\n await readResponseWithSizeLimit({\n response,\n url\n })\n );\n}\nvar createJsonErrorResponseHandler = ({\n errorSchema,\n errorToMessage,\n isRetryable\n}) => async ({ response, url, requestBodyValues }) => {\n const responseBody = await readResponseBodyAsText({ response, url });\n const responseHeaders = extractResponseHeaders(response);\n if (responseBody.trim() === \"\") {\n return {\n responseHeaders,\n value: new APICallError6({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n })\n };\n }\n try {\n const parsedError = await parseJSON({\n text: responseBody,\n schema: errorSchema\n });\n return {\n responseHeaders,\n value: new APICallError6({\n message: errorToMessage(parsedError),\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n data: parsedError,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response, parsedError)\n })\n };\n } catch (e) {\n return {\n responseHeaders,\n value: new APICallError6({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n isRetryable: isRetryable == null ? void 0 : isRetryable(response)\n })\n };\n }\n};\nvar createEventSourceResponseHandler = (chunkSchema) => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n return {\n responseHeaders,\n value: parseJsonEventStream({\n stream: wrapResponseBodyStream({\n stream: response.body,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders\n }),\n schema: chunkSchema\n })\n };\n};\nvar createJsonResponseHandler = (responseSchema) => async ({ response, url, requestBodyValues }) => {\n const responseBody = await readResponseBodyAsText({ response, url });\n const parsedResult = await safeParseJSON({\n text: responseBody,\n schema: responseSchema\n });\n const responseHeaders = extractResponseHeaders(response);\n if (!parsedResult.success) {\n throw new APICallError6({\n message: \"Invalid JSON response\",\n cause: parsedResult.error,\n statusCode: response.status,\n responseHeaders,\n responseBody,\n url,\n requestBodyValues\n });\n }\n return {\n responseHeaders,\n value: parsedResult.value,\n rawValue: parsedResult.rawValue\n };\n};\nvar createJsonLinesResponseHandler = (responseSchema) => async ({ response }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n return {\n responseHeaders,\n value: parseJsonLines({\n stream: response.body,\n schema: responseSchema\n })\n };\n};\nasync function* parseJsonLines({\n stream,\n schema\n}) {\n const reader = stream.getReader();\n const decoder = new TextDecoder();\n let buffer = \"\";\n let finished = false;\n try {\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n finished = true;\n buffer += decoder.decode();\n break;\n }\n buffer += decoder.decode(value, { stream: true });\n let lineEnd = buffer.indexOf(\"\\n\");\n while (lineEnd !== -1) {\n const line = buffer.slice(0, lineEnd).replace(/\\r$/, \"\");\n buffer = buffer.slice(lineEnd + 1);\n if (line.trim().length > 0) {\n yield await parseJSON({ text: line, schema });\n }\n lineEnd = buffer.indexOf(\"\\n\");\n }\n }\n const finalLine = buffer.replace(/\\r$/, \"\");\n if (finalLine.trim().length > 0) {\n yield await parseJSON({ text: finalLine, schema });\n }\n } finally {\n if (!finished) {\n await reader.cancel().catch(() => {\n });\n }\n reader.releaseLock();\n }\n}\nvar createBinaryResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (!response.body) {\n throw new APICallError6({\n message: \"Response body is empty\",\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: void 0\n });\n }\n try {\n const buffer = await response.arrayBuffer();\n return {\n responseHeaders,\n value: new Uint8Array(buffer)\n };\n } catch (error) {\n throw new APICallError6({\n message: \"Failed to read response as array buffer\",\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody: void 0,\n cause: error\n });\n }\n};\nvar createBinaryStreamResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n if (response.body == null) {\n throw new EmptyResponseBodyError({});\n }\n return {\n responseHeaders,\n value: wrapResponseBodyStream({\n stream: response.body,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders\n })\n };\n};\nvar createStatusCodeErrorResponseHandler = () => async ({ response, url, requestBodyValues }) => {\n const responseHeaders = extractResponseHeaders(response);\n const responseBody = await readResponseBodyAsText({ response, url });\n return {\n responseHeaders,\n value: new APICallError6({\n message: response.statusText,\n url,\n requestBodyValues,\n statusCode: response.status,\n responseHeaders,\n responseBody\n })\n };\n};\n\n// src/is-json-serializable.ts\nfunction isJSONSerializable(value) {\n if (value === null || value === void 0) return true;\n const type = typeof value;\n if (type === \"string\" || type === \"number\" || type === \"boolean\") return true;\n if (type === \"function\" || type === \"symbol\" || type === \"bigint\")\n return false;\n if (Array.isArray(value)) {\n return value.every(isJSONSerializable);\n }\n if (Object.getPrototypeOf(value) === Object.prototype) {\n return Object.values(value).every(\n isJSONSerializable\n );\n }\n return false;\n}\n\n// src/serialization-error.ts\nimport { AISDKError as AISDKError2 } from \"@ai-sdk/provider\";\nvar name2 = \"AI_SerializationError\";\nvar marker3 = `vercel.ai.error.${name2}`;\nvar symbol2 = Symbol.for(marker3);\nvar _a2, _b2;\nvar SerializationError = class extends (_b2 = AISDKError2, _a2 = symbol2, _b2) {\n // used in isInstance\n constructor({\n message = \"Failed to serialize value.\",\n cause\n } = {}) {\n super({ name: name2, message, cause });\n this[_a2] = true;\n }\n static isInstance(error) {\n return AISDKError2.hasMarker(error, marker3);\n }\n};\n\n// src/serialize-model-options.ts\nfunction serializeModelOptions(options) {\n const serializableConfig = {};\n for (const [key, value] of Object.entries(options.config)) {\n if (key === \"headers\") {\n const resolvedHeaders = resolveSync(value);\n if (isJSONSerializable(resolvedHeaders)) {\n serializableConfig[key] = resolvedHeaders;\n }\n } else if (isJSONSerializable(value)) {\n serializableConfig[key] = value;\n }\n }\n return { modelId: options.modelId, config: serializableConfig };\n}\nfunction resolveSync(value) {\n let next = value;\n if (typeof value === \"function\") {\n next = value();\n }\n if (next instanceof Promise) {\n throw new SerializationError({\n message: \"Cannot serialize asynchronous model options.\"\n });\n }\n return next;\n}\n\n// src/streaming-tool-call-tracker.ts\nimport {\n InvalidResponseDataError\n} from \"@ai-sdk/provider\";\nvar StreamingToolCallTracker = class {\n constructor(controller, options = {}) {\n this.toolCalls = /* @__PURE__ */ new Set();\n this.toolCallsById = /* @__PURE__ */ new Map();\n this.toolCallsByIndex = /* @__PURE__ */ new Map();\n var _a3, _b3;\n this.controller = controller;\n this._generateId = (_a3 = options.generateId) != null ? _a3 : generateId;\n this.typeValidation = (_b3 = options.typeValidation) != null ? _b3 : \"none\";\n this.extractMetadata = options.extractMetadata;\n this.buildToolCallProviderMetadata = options.buildToolCallProviderMetadata;\n }\n /**\n * Process a tool call delta from a streaming response chunk.\n * Emits tool-input-start, tool-input-delta, tool-input-end, and tool-call\n * events as appropriate.\n */\n processDelta(toolCallDelta) {\n const { id, index } = toolCallDelta;\n let toolCall = id != null && id.length > 0 ? this.toolCallsById.get(id) : index != null ? this.toolCallsByIndex.get(index) : this.latestToolCall;\n if (toolCall == null) {\n toolCall = this.processNewToolCall(toolCallDelta);\n } else {\n this.processExistingToolCall(toolCall, toolCallDelta);\n }\n if (index != null) {\n this.toolCallsByIndex.set(index, toolCall);\n }\n this.latestToolCall = toolCall;\n }\n /**\n * Finalize any unfinished tool calls. Should be called during the stream's\n * flush handler to ensure all tool calls are properly completed.\n */\n flush() {\n for (const toolCall of this.toolCalls) {\n if (!toolCall.hasFinished) {\n this.finishToolCall(toolCall);\n }\n }\n }\n processNewToolCall(toolCallDelta) {\n var _a3, _b3, _c;\n if (this.typeValidation === \"required\") {\n if (toolCallDelta.type !== \"function\") {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`\n });\n }\n } else if (this.typeValidation === \"if-present\") {\n if (toolCallDelta.type != null && toolCallDelta.type !== \"function\") {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function' type.`\n });\n }\n }\n if (toolCallDelta.id == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'id' to be a string.`\n });\n }\n if (((_a3 = toolCallDelta.function) == null ? void 0 : _a3.name) == null) {\n throw new InvalidResponseDataError({\n data: toolCallDelta,\n message: `Expected 'function.name' to be a string.`\n });\n }\n this.controller.enqueue({\n type: \"tool-input-start\",\n id: toolCallDelta.id,\n toolName: toolCallDelta.function.name\n });\n const metadata = (_b3 = this.extractMetadata) == null ? void 0 : _b3.call(this, toolCallDelta);\n const toolCall = {\n id: toolCallDelta.id,\n type: \"function\",\n function: {\n name: toolCallDelta.function.name,\n arguments: (_c = toolCallDelta.function.arguments) != null ? _c : \"\"\n },\n hasFinished: false,\n metadata\n };\n this.toolCalls.add(toolCall);\n if (toolCall.id.length > 0) {\n this.toolCallsById.set(toolCall.id, toolCall);\n }\n if (toolCall.function.arguments.length > 0) {\n this.controller.enqueue({\n type: \"tool-input-delta\",\n id: toolCall.id,\n delta: toolCall.function.arguments\n });\n }\n return toolCall;\n }\n processExistingToolCall(toolCall, toolCallDelta) {\n var _a3;\n if (toolCall.hasFinished) {\n return;\n }\n if (((_a3 = toolCallDelta.function) == null ? void 0 : _a3.arguments) != null) {\n toolCall.function.arguments += toolCallDelta.function.arguments;\n this.controller.enqueue({\n type: \"tool-input-delta\",\n id: toolCall.id,\n delta: toolCallDelta.function.arguments\n });\n }\n }\n finishToolCall(toolCall) {\n var _a3, _b3;\n this.controller.enqueue({\n type: \"tool-input-end\",\n id: toolCall.id\n });\n const providerMetadata = (_a3 = this.buildToolCallProviderMetadata) == null ? void 0 : _a3.call(\n this,\n toolCall.metadata\n );\n this.controller.enqueue({\n type: \"tool-call\",\n toolCallId: (_b3 = toolCall.id) != null ? _b3 : this._generateId(),\n toolName: toolCall.function.name,\n input: toolCall.function.arguments,\n ...providerMetadata ? { providerMetadata } : {}\n });\n toolCall.hasFinished = true;\n }\n};\n\n// src/strip-file-extension.ts\nfunction stripFileExtension(filename) {\n const firstDotIndex = filename.indexOf(\".\");\n return firstDotIndex === -1 ? filename : filename.slice(0, firstDotIndex);\n}\n\n// src/transcription-stream-envelope.ts\nvar TRANSCRIPTION_STREAM_START_FRAME_TYPE = \"transcription-stream.start\";\nvar TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE = \"transcription-stream.audio-done\";\nfunction parseTranscriptionStreamClientFrame(text) {\n let value;\n try {\n value = secureJsonParse(text);\n } catch (e) {\n return { type: \"invalid\", message: \"malformed JSON\" };\n }\n if (value == null || typeof value !== \"object\" || Array.isArray(value)) {\n return { type: \"invalid\", message: \"frame must be a JSON object\" };\n }\n const frame = value;\n if (typeof frame.type !== \"string\") {\n return { type: \"invalid\", message: \"frame type must be a string\" };\n }\n switch (frame.type) {\n case TRANSCRIPTION_STREAM_START_FRAME_TYPE: {\n const inputAudioFormat = frame.inputAudioFormat;\n if (inputAudioFormat == null || typeof inputAudioFormat !== \"object\" || Array.isArray(inputAudioFormat) || typeof inputAudioFormat.type !== \"string\") {\n return {\n type: \"invalid\",\n message: \"start frame must have an inputAudioFormat object with a string type\"\n };\n }\n if (inputAudioFormat.rate !== void 0 && typeof inputAudioFormat.rate !== \"number\") {\n return {\n type: \"invalid\",\n message: \"inputAudioFormat.rate must be a number when present\"\n };\n }\n if (frame.providerOptions !== void 0 && (frame.providerOptions == null || typeof frame.providerOptions !== \"object\" || Array.isArray(frame.providerOptions))) {\n return {\n type: \"invalid\",\n message: \"providerOptions must be an object when present\"\n };\n }\n if (frame.includeRawChunks !== void 0 && typeof frame.includeRawChunks !== \"boolean\") {\n return {\n type: \"invalid\",\n message: \"includeRawChunks must be a boolean when present\"\n };\n }\n return {\n type: \"start\",\n frame\n };\n }\n case TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE:\n return { type: \"audio-done\" };\n default:\n return { type: \"unknown\" };\n }\n}\nfunction serializeTranscriptionStreamPart(part) {\n try {\n if (part.type === \"error\" && isError(part.error)) {\n return JSON.stringify({\n ...part,\n error: { name: part.error.name, message: part.error.message }\n });\n }\n return JSON.stringify(part);\n } catch (e) {\n return void 0;\n }\n}\nfunction isError(value) {\n return value instanceof Error || Object.prototype.toString.call(value) === \"[object Error]\";\n}\nfunction parseTranscriptionStreamPart(text) {\n let value;\n try {\n value = secureJsonParse(text);\n } catch (e) {\n return void 0;\n }\n if (value == null || typeof value !== \"object\" || Array.isArray(value)) {\n return void 0;\n }\n const part = value;\n switch (part.type) {\n case \"stream-start\":\n return Array.isArray(part.warnings) && part.warnings.every(isWarning) ? part : void 0;\n case \"transcript-delta\":\n return isString(part.delta) && isOptional(part.id, isString) && isOptional(part.providerMetadata, isRecord) ? part : void 0;\n case \"transcript-partial\":\n return isString(part.text) && isOptional(part.id, isString) && isOptional(part.startSecond, isNumber) && isOptional(part.durationInSeconds, isNumber) && isOptional(part.channelIndex, isNumber) && isOptional(part.providerMetadata, isRecord) ? part : void 0;\n case \"transcript-final\":\n return isString(part.text) && isOptional(part.id, isString) && isOptional(part.startSecond, isNumber) && isOptional(part.endSecond, isNumber) && isOptional(part.channelIndex, isNumber) && isOptional(part.providerMetadata, isRecord) ? part : void 0;\n case \"finish\":\n return isString(part.text) && Array.isArray(part.segments) && part.segments.every(isSegment) && isOptional(part.language, isString) && isOptional(part.durationInSeconds, isNumber) && isOptional(part.providerMetadata, isRecord) ? part : void 0;\n case \"response-metadata\": {\n if (!(isOptional(part.modelId, isString) && isOptional(part.headers, isRecord))) {\n return void 0;\n }\n const timestamp = part.timestamp;\n if (timestamp == null) {\n return { ...part, timestamp: void 0 };\n }\n if (typeof timestamp !== \"string\") {\n return void 0;\n }\n const revived = new Date(timestamp);\n return Number.isNaN(revived.getTime()) ? void 0 : { ...part, timestamp: revived };\n }\n case \"raw\":\n return \"rawValue\" in part ? part : void 0;\n case \"error\":\n return \"error\" in part ? part : void 0;\n default:\n return void 0;\n }\n}\nfunction isString(value) {\n return typeof value === \"string\";\n}\nfunction isNumber(value) {\n return typeof value === \"number\";\n}\nfunction isOptional(value, check) {\n return value === void 0 || check(value);\n}\nfunction isWarning(value) {\n return isRecord(value) && isString(value.type);\n}\nfunction isSegment(value) {\n return isRecord(value) && isString(value.text) && isNumber(value.startSecond) && isNumber(value.endSecond);\n}\n\n// src/validate-base-url.ts\nimport { InvalidArgumentError as InvalidArgumentError3 } from \"@ai-sdk/provider\";\nfunction validateBaseURL(baseURL) {\n if ((baseURL == null ? void 0 : baseURL.trim()) === \"\") {\n throw new InvalidArgumentError3({\n argument: \"baseURL\",\n message: \"baseURL must be a non-empty string.\"\n });\n }\n return baseURL;\n}\n\n// src/without-trailing-slash.ts\nfunction withoutTrailingSlash(url) {\n return url == null ? void 0 : url.replace(/\\/$/, \"\");\n}\n\n// src/types/executable-tool.ts\nfunction isExecutableTool(tool2) {\n return tool2 != null && typeof tool2.execute === \"function\";\n}\n\n// src/is-async-iterable.ts\nfunction isAsyncIterable(obj) {\n return obj != null && typeof obj[Symbol.asyncIterator] === \"function\";\n}\n\n// src/types/execute-tool.ts\nasync function* executeTool({\n tool: tool2,\n input,\n options\n}) {\n const result = tool2.execute(input, options);\n if (isAsyncIterable(result)) {\n let lastOutput;\n for await (const output of result) {\n lastOutput = output;\n yield { type: \"preliminary\", output };\n }\n yield { type: \"final\", output: lastOutput };\n } else {\n yield { type: \"final\", output: await result };\n }\n}\n\n// src/types/tool-caller.ts\nfunction toolCaller(tool2, definition) {\n return Object.defineProperty({ ...tool2 }, \"experimental_toolCaller\", {\n value: definition\n });\n}\nfunction getToolCaller(tool2) {\n return tool2 == null ? void 0 : tool2.experimental_toolCaller;\n}\n\n// src/index.ts\nimport { WORKFLOW_DESERIALIZE, WORKFLOW_SERIALIZE } from \"@workflow/serde\";\nimport {\n EventSourceParserStream as EventSourceParserStream2\n} from \"eventsource-parser/stream\";\nexport {\n DEFAULT_MAX_DOWNLOAD_SIZE,\n DelayedPromise,\n DownloadError,\n EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL as EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL,\n TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE as EXPERIMENTAL_TRANSCRIPTION_STREAM_AUDIO_DONE_FRAME_TYPE,\n TRANSCRIPTION_STREAM_START_FRAME_TYPE as EXPERIMENTAL_TRANSCRIPTION_STREAM_START_FRAME_TYPE,\n EventSourceParserStream2 as EventSourceParserStream,\n SerializationError,\n StreamingToolCallTracker,\n VERSION,\n WORKFLOW_DESERIALIZE,\n WORKFLOW_SERIALIZE,\n asArray,\n asSchema,\n cancelResponseBody,\n combineHeaders,\n connectToWebSocket,\n convertAsyncIteratorToReadableStream,\n convertBase64ToUint8Array,\n convertImageModelFileToDataUri,\n convertInlineFileDataToUint8Array,\n convertToBase64,\n convertToFormData,\n convertUint8ArrayToBase64,\n createBinaryResponseHandler,\n createBinaryStreamResponseHandler,\n createEventSourceResponseHandler,\n createIdGenerator,\n createJsonErrorResponseHandler,\n createJsonLinesResponseHandler,\n createJsonResponseHandler,\n createLanguageModelResponseMetadata,\n createNullLanguageModelUsage,\n createProviderDefinedToolFactory,\n createProviderDefinedToolFactoryWithOutputSchema,\n createProviderExecutedToolFactory,\n createProviderStreamError,\n createStatusCodeErrorResponseHandler,\n createToolNameMapping,\n delay,\n deleteFromApi,\n detectMediaType,\n downloadBlob,\n dynamicTool,\n executeTool,\n getToolCaller as experimental_getToolCaller,\n parseTranscriptionStreamClientFrame as experimental_parseTranscriptionStreamClientFrame,\n parseTranscriptionStreamPart as experimental_parseTranscriptionStreamPart,\n serializeTranscriptionStreamPart as experimental_serializeTranscriptionStreamPart,\n toolCaller as experimental_toolCaller,\n extractLines,\n extractResponseHeaders,\n fetchWithValidatedRedirects,\n filterNullable,\n generateId,\n getErrorMessage,\n getFromApi,\n getRuntimeEnvironmentUserAgent,\n getTopLevelMediaType,\n getWebSocketConstructor,\n injectJsonInstructionIntoMessages,\n isAbortError,\n isBrowserRuntime,\n isBuffer,\n isCustomReasoning,\n isExecutableTool,\n isFullMediaType,\n isNonNullable,\n isParsableJson,\n isProviderReference,\n isProviderStreamError,\n isRecord,\n isSameOrigin,\n isUrlSupported,\n jsonSchema,\n lazySchema,\n loadApiKey,\n loadOptionalSetting,\n loadSetting,\n mapReasoningToProviderBudget,\n mapReasoningToProviderEffort,\n mediaTypeToExtension,\n normalizeBatchRequestCounts,\n normalizeHeaders,\n parseJSON,\n parseJsonEventStream,\n parseProviderOptions,\n postFormDataToApi,\n postJsonToApi,\n postMultipartStreamToApi,\n postToApi,\n readResponseWithSizeLimit,\n readWebSocketMessageText,\n removeUndefinedEntries,\n resolve,\n resolveFullMediaType,\n resolveProviderReference,\n retryWithExponentialBackoff,\n safeParseJSON,\n safeValidateTypes,\n secureJsonParse,\n serializeModelOptions,\n stripFileExtension,\n toWebSocketUrl,\n tool,\n validateBaseURL,\n validateDownloadUrl,\n validateTypes,\n waitForWebSocketBufferDrain,\n withUserAgentSuffix,\n withoutTrailingSlash,\n zodSchema\n};\n//# sourceMappingURL=index.js.map","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name25 in all)\n __defProp(target, name25, { get: all[name25], enumerable: true });\n};\n\n// src/index.ts\nimport {\n createGateway,\n gateway as gateway2\n} from \"@ai-sdk/gateway\";\nimport {\n asSchema as asSchema8,\n createIdGenerator as createIdGenerator9,\n dynamicTool,\n experimental_toolCaller,\n generateId as generateId3,\n jsonSchema,\n parseJsonEventStream as parseJsonEventStream3,\n tool,\n zodSchema as zodSchema3\n} from \"@ai-sdk/provider-utils\";\n\n// src/agent/tool-loop-agent.ts\nimport {\n validateTypes as validateTypes3,\n withUserAgentSuffix as withUserAgentSuffix3\n} from \"@ai-sdk/provider-utils\";\n\n// src/generate-text/generate-text.ts\nimport {\n asArray as asArray5,\n createIdGenerator,\n getErrorMessage as getErrorMessage4,\n withUserAgentSuffix as withUserAgentSuffix2\n} from \"@ai-sdk/provider-utils\";\n\n// src/error/index.ts\nimport {\n AISDKError as AISDKError25,\n APICallError,\n EmptyResponseBodyError,\n InvalidPromptError,\n InvalidResponseDataError,\n JSONParseError,\n LoadAPIKeyError,\n LoadSettingError,\n NoContentGeneratedError,\n NoSuchModelError,\n NoSuchProviderReferenceError,\n TooManyEmbeddingValuesForCallError,\n TypeValidationError,\n UnsupportedFunctionalityError\n} from \"@ai-sdk/provider\";\n\n// src/error/invalid-argument-error.ts\nimport { AISDKError } from \"@ai-sdk/provider\";\nvar name = \"AI_InvalidArgumentError\";\nvar marker = `vercel.ai.error.${name}`;\nvar symbol = Symbol.for(marker);\nvar _a, _b;\nvar InvalidArgumentError = class extends (_b = AISDKError, _a = symbol, _b) {\n constructor({\n parameter,\n value,\n message\n }) {\n super({\n name,\n message: `Invalid argument for parameter ${parameter}: ${message}`\n });\n this[_a] = true;\n this.parameter = parameter;\n this.value = value;\n }\n static isInstance(error) {\n return AISDKError.hasMarker(error, marker);\n }\n};\n\n// src/error/invalid-stream-part-error.ts\nimport { AISDKError as AISDKError2 } from \"@ai-sdk/provider\";\nvar name2 = \"AI_InvalidStreamPartError\";\nvar marker2 = `vercel.ai.error.${name2}`;\nvar symbol2 = Symbol.for(marker2);\nvar _a2, _b2;\nvar InvalidStreamPartError = class extends (_b2 = AISDKError2, _a2 = symbol2, _b2) {\n constructor({\n chunk,\n message\n }) {\n super({ name: name2, message });\n this[_a2] = true;\n this.chunk = chunk;\n }\n static isInstance(error) {\n return AISDKError2.hasMarker(error, marker2);\n }\n};\n\n// src/error/invalid-tool-approval-error.ts\nimport { AISDKError as AISDKError3 } from \"@ai-sdk/provider\";\nvar name3 = \"AI_InvalidToolApprovalError\";\nvar marker3 = `vercel.ai.error.${name3}`;\nvar symbol3 = Symbol.for(marker3);\nvar _a3, _b3;\nvar InvalidToolApprovalError = class extends (_b3 = AISDKError3, _a3 = symbol3, _b3) {\n constructor({ approvalId }) {\n super({\n name: name3,\n message: `Tool approval response references unknown approvalId: \"${approvalId}\". No matching tool-approval-request found in message history.`\n });\n this[_a3] = true;\n this.approvalId = approvalId;\n }\n static isInstance(error) {\n return AISDKError3.hasMarker(error, marker3);\n }\n};\n\n// src/error/invalid-tool-approval-signature-error.ts\nimport { AISDKError as AISDKError4 } from \"@ai-sdk/provider\";\nvar name4 = \"AI_InvalidToolApprovalSignatureError\";\nvar marker4 = `vercel.ai.error.${name4}`;\nvar symbol4 = Symbol.for(marker4);\nvar _a4, _b4;\nvar InvalidToolApprovalSignatureError = class extends (_b4 = AISDKError4, _a4 = symbol4, _b4) {\n constructor({\n approvalId,\n toolCallId,\n reason\n }) {\n super({\n name: name4,\n message: `Tool approval signature verification failed for approval \"${approvalId}\" (tool call \"${toolCallId}\"): ${reason}`\n });\n this[_a4] = true;\n this.approvalId = approvalId;\n this.toolCallId = toolCallId;\n }\n static isInstance(error) {\n return AISDKError4.hasMarker(error, marker4);\n }\n};\n\n// src/error/invalid-tool-input-error.ts\nimport { AISDKError as AISDKError5, getErrorMessage } from \"@ai-sdk/provider\";\nvar name5 = \"AI_InvalidToolInputError\";\nvar marker5 = `vercel.ai.error.${name5}`;\nvar symbol5 = Symbol.for(marker5);\nvar _a5, _b5;\nvar InvalidToolInputError = class extends (_b5 = AISDKError5, _a5 = symbol5, _b5) {\n constructor({\n toolInput,\n toolName,\n cause,\n message = `Invalid input for tool ${toolName}: ${getErrorMessage(cause)}`\n }) {\n super({ name: name5, message, cause });\n this[_a5] = true;\n this.toolInput = toolInput;\n this.toolName = toolName;\n }\n static isInstance(error) {\n return AISDKError5.hasMarker(error, marker5);\n }\n};\n\n// src/error/tool-call-not-found-for-approval-error.ts\nimport { AISDKError as AISDKError6 } from \"@ai-sdk/provider\";\nvar name6 = \"AI_ToolCallNotFoundForApprovalError\";\nvar marker6 = `vercel.ai.error.${name6}`;\nvar symbol6 = Symbol.for(marker6);\nvar _a6, _b6;\nvar ToolCallNotFoundForApprovalError = class extends (_b6 = AISDKError6, _a6 = symbol6, _b6) {\n constructor({\n toolCallId,\n approvalId\n }) {\n super({\n name: name6,\n message: `Tool call \"${toolCallId}\" not found for approval request \"${approvalId}\".`\n });\n this[_a6] = true;\n this.toolCallId = toolCallId;\n this.approvalId = approvalId;\n }\n static isInstance(error) {\n return AISDKError6.hasMarker(error, marker6);\n }\n};\n\n// src/error/missing-tool-result-error.ts\nimport { AISDKError as AISDKError7 } from \"@ai-sdk/provider\";\nvar name7 = \"AI_MissingToolResultsError\";\nvar marker7 = `vercel.ai.error.${name7}`;\nvar symbol7 = Symbol.for(marker7);\nvar _a7, _b7;\nvar MissingToolResultsError = class extends (_b7 = AISDKError7, _a7 = symbol7, _b7) {\n constructor({ toolCallIds }) {\n super({\n name: name7,\n message: `Tool result${toolCallIds.length > 1 ? \"s are\" : \" is\"} missing for tool call${toolCallIds.length > 1 ? \"s\" : \"\"} ${toolCallIds.join(\n \", \"\n )}.`\n });\n this[_a7] = true;\n this.toolCallIds = toolCallIds;\n }\n static isInstance(error) {\n return AISDKError7.hasMarker(error, marker7);\n }\n};\n\n// src/error/no-image-generated-error.ts\nimport { AISDKError as AISDKError8 } from \"@ai-sdk/provider\";\nvar name8 = \"AI_NoImageGeneratedError\";\nvar marker8 = `vercel.ai.error.${name8}`;\nvar symbol8 = Symbol.for(marker8);\nvar _a8, _b8;\nvar NoImageGeneratedError = class extends (_b8 = AISDKError8, _a8 = symbol8, _b8) {\n constructor({\n message = \"No image generated.\",\n cause,\n responses\n }) {\n super({ name: name8, message, cause });\n this[_a8] = true;\n this.responses = responses;\n }\n static isInstance(error) {\n return AISDKError8.hasMarker(error, marker8);\n }\n};\n\n// src/error/no-object-generated-error.ts\nimport { AISDKError as AISDKError9 } from \"@ai-sdk/provider\";\nvar name9 = \"AI_NoObjectGeneratedError\";\nvar marker9 = `vercel.ai.error.${name9}`;\nvar symbol9 = Symbol.for(marker9);\nvar _a9, _b9;\nvar NoObjectGeneratedError = class extends (_b9 = AISDKError9, _a9 = symbol9, _b9) {\n constructor({\n message = \"No object generated.\",\n cause,\n text: text2,\n response,\n usage,\n finishReason\n }) {\n super({ name: name9, message, cause });\n this[_a9] = true;\n this.text = text2;\n this.response = response;\n this.usage = usage;\n this.finishReason = finishReason;\n }\n static isInstance(error) {\n return AISDKError9.hasMarker(error, marker9);\n }\n};\n\n// src/error/no-output-generated-error.ts\nimport { AISDKError as AISDKError10 } from \"@ai-sdk/provider\";\nvar name10 = \"AI_NoOutputGeneratedError\";\nvar marker10 = `vercel.ai.error.${name10}`;\nvar symbol10 = Symbol.for(marker10);\nvar _a10, _b10;\nvar NoOutputGeneratedError = class extends (_b10 = AISDKError10, _a10 = symbol10, _b10) {\n // used in isInstance\n constructor({\n message = \"No output generated.\",\n cause\n } = {}) {\n super({ name: name10, message, cause });\n this[_a10] = true;\n }\n static isInstance(error) {\n return AISDKError10.hasMarker(error, marker10);\n }\n};\n\n// src/error/no-speech-generated-error.ts\nimport { AISDKError as AISDKError11 } from \"@ai-sdk/provider\";\nvar name11 = \"AI_NoSpeechGeneratedError\";\nvar marker11 = `vercel.ai.error.${name11}`;\nvar symbol11 = Symbol.for(marker11);\nvar _a11, _b11;\nvar NoSpeechGeneratedError = class extends (_b11 = AISDKError11, _a11 = symbol11, _b11) {\n constructor(options) {\n super({\n name: name11,\n message: \"No speech audio generated.\"\n });\n this[_a11] = true;\n this.responses = options.responses;\n }\n static isInstance(error) {\n return AISDKError11.hasMarker(error, marker11);\n }\n};\n\n// src/error/no-transcript-generated-error.ts\nimport { AISDKError as AISDKError12 } from \"@ai-sdk/provider\";\nvar name12 = \"AI_NoTranscriptGeneratedError\";\nvar marker12 = `vercel.ai.error.${name12}`;\nvar symbol12 = Symbol.for(marker12);\nvar _a12, _b12;\nvar NoTranscriptGeneratedError = class extends (_b12 = AISDKError12, _a12 = symbol12, _b12) {\n constructor(options) {\n super({\n name: name12,\n message: \"No transcript generated.\"\n });\n this[_a12] = true;\n this.responses = options.responses;\n }\n static isInstance(error) {\n return AISDKError12.hasMarker(error, marker12);\n }\n};\n\n// src/error/no-translation-generated-error.ts\nimport { AISDKError as AISDKError13 } from \"@ai-sdk/provider\";\nvar name13 = \"AI_NoTranslationGeneratedError\";\nvar marker13 = `vercel.ai.error.${name13}`;\nvar symbol13 = Symbol.for(marker13);\nvar _a13, _b13;\nvar NoTranslationGeneratedError = class extends (_b13 = AISDKError13, _a13 = symbol13, _b13) {\n constructor(options) {\n super({\n name: name13,\n message: \"No translation generated.\"\n });\n this[_a13] = true;\n this.response = options.response;\n }\n static isInstance(error) {\n return AISDKError13.hasMarker(error, marker13);\n }\n};\n\n// src/error/no-video-generated-error.ts\nimport { AISDKError as AISDKError14 } from \"@ai-sdk/provider\";\nvar name14 = \"AI_NoVideoGeneratedError\";\nvar marker14 = `vercel.ai.error.${name14}`;\nvar symbol14 = Symbol.for(marker14);\nvar _a14, _b14;\nvar NoVideoGeneratedError = class extends (_b14 = AISDKError14, _a14 = symbol14, _b14) {\n constructor({\n message = \"No video generated.\",\n cause,\n responses\n }) {\n super({ name: name14, message, cause });\n this[_a14] = true;\n this.responses = responses;\n }\n static isInstance(error) {\n return AISDKError14.hasMarker(error, marker14);\n }\n /**\n * @deprecated use `isInstance` instead\n */\n static isNoVideoGeneratedError(error) {\n return error instanceof Error && error.name === name14 && typeof error.responses !== \"undefined\" ? true : false;\n }\n /**\n * @deprecated Do not use this method. It will be removed in the next major version.\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n stack: this.stack,\n cause: this.cause,\n responses: this.responses\n };\n }\n};\n\n// src/error/no-such-tool-error.ts\nimport { AISDKError as AISDKError15 } from \"@ai-sdk/provider\";\nvar name15 = \"AI_NoSuchToolError\";\nvar marker15 = `vercel.ai.error.${name15}`;\nvar symbol15 = Symbol.for(marker15);\nvar _a15, _b15;\nvar NoSuchToolError = class extends (_b15 = AISDKError15, _a15 = symbol15, _b15) {\n constructor({\n toolName,\n availableTools = void 0,\n message = `Model tried to call unavailable tool '${toolName}'. ${availableTools === void 0 ? \"No tools are available.\" : `Available tools: ${availableTools.join(\", \")}.`}`\n }) {\n super({ name: name15, message });\n this[_a15] = true;\n this.toolName = toolName;\n this.availableTools = availableTools;\n }\n static isInstance(error) {\n return AISDKError15.hasMarker(error, marker15);\n }\n};\n\n// src/error/stream-provider-error.ts\nimport { AISDKError as AISDKError16 } from \"@ai-sdk/provider\";\nvar name16 = \"AI_StreamProviderError\";\nvar marker16 = `vercel.ai.error.${name16}`;\nvar symbol16 = Symbol.for(marker16);\nvar _a16, _b16;\nvar StreamProviderError = class extends (_b16 = AISDKError16, _a16 = symbol16, _b16) {\n constructor({\n message,\n type,\n code,\n statusCode,\n isRetryable = isRetryableStatusCode(statusCode),\n data,\n cause\n }) {\n super({ name: name16, message, cause });\n this[_a16] = true;\n this.type = type;\n this.code = code;\n this.statusCode = statusCode;\n this.isRetryable = isRetryable;\n this.data = data;\n }\n static isInstance(error) {\n return AISDKError16.hasMarker(error, marker16);\n }\n};\nfunction isRetryableStatusCode(statusCode) {\n return statusCode != null && (statusCode === 408 || statusCode === 409 || statusCode === 429 || statusCode >= 500);\n}\n\n// src/error/tool-call-repair-error.ts\nimport { AISDKError as AISDKError17, getErrorMessage as getErrorMessage2 } from \"@ai-sdk/provider\";\nvar name17 = \"AI_ToolCallRepairError\";\nvar marker17 = `vercel.ai.error.${name17}`;\nvar symbol17 = Symbol.for(marker17);\nvar _a17, _b17;\nvar ToolCallRepairError = class extends (_b17 = AISDKError17, _a17 = symbol17, _b17) {\n constructor({\n cause,\n originalError,\n message = `Error repairing tool call: ${getErrorMessage2(cause)}`\n }) {\n super({ name: name17, message, cause });\n this[_a17] = true;\n this.originalError = originalError;\n }\n static isInstance(error) {\n return AISDKError17.hasMarker(error, marker17);\n }\n};\n\n// src/error/tool-choice-violation-error.ts\nimport {\n AISDKError as AISDKError18\n} from \"@ai-sdk/provider\";\nvar name18 = \"AI_ToolChoiceViolationError\";\nvar marker18 = `vercel.ai.error.${name18}`;\nvar symbol18 = Symbol.for(marker18);\nvar _a18, _b18;\nvar ToolChoiceViolationError = class extends (_b18 = AISDKError18, _a18 = symbol18, _b18) {\n constructor({\n toolChoice,\n finishReason,\n provider,\n modelId,\n content,\n message = toolChoice.type === \"required\" ? \"Model response did not contain a tool call even though tool choice was required.\" : `Model response did not contain a call to the required tool '${toolChoice.toolName}'.`\n }) {\n super({ name: name18, message });\n this[_a18] = true;\n this.toolChoice = toolChoice;\n this.finishReason = finishReason;\n this.provider = provider;\n this.modelId = modelId;\n this.content = content;\n }\n static isInstance(error) {\n return AISDKError18.hasMarker(error, marker18);\n }\n};\n\n// src/error/unsupported-model-version-error.ts\nimport { AISDKError as AISDKError19 } from \"@ai-sdk/provider\";\nvar UnsupportedModelVersionError = class extends AISDKError19 {\n constructor(options) {\n super({\n name: \"AI_UnsupportedModelVersionError\",\n message: `Unsupported model version ${options.version} for provider \"${options.provider}\" and model \"${options.modelId}\". AI SDK 5 only supports models that implement specification version \"v2\".`\n });\n this.version = options.version;\n this.provider = options.provider;\n this.modelId = options.modelId;\n }\n};\n\n// src/error/ui-message-stream-error.ts\nimport { AISDKError as AISDKError20 } from \"@ai-sdk/provider\";\nvar name19 = \"AI_UIMessageStreamError\";\nvar marker19 = `vercel.ai.error.${name19}`;\nvar symbol19 = Symbol.for(marker19);\nvar _a19, _b19;\nvar UIMessageStreamError = class extends (_b19 = AISDKError20, _a19 = symbol19, _b19) {\n constructor({\n chunkType,\n chunkId,\n message\n }) {\n super({ name: name19, message });\n this[_a19] = true;\n this.chunkType = chunkType;\n this.chunkId = chunkId;\n }\n static isInstance(error) {\n return AISDKError20.hasMarker(error, marker19);\n }\n};\n\n// src/prompt/invalid-data-content-error.ts\nimport { AISDKError as AISDKError21 } from \"@ai-sdk/provider\";\nvar name20 = \"AI_InvalidDataContentError\";\nvar marker20 = `vercel.ai.error.${name20}`;\nvar symbol20 = Symbol.for(marker20);\nvar _a20, _b20;\nvar InvalidDataContentError = class extends (_b20 = AISDKError21, _a20 = symbol20, _b20) {\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 super({ name: name20, message, cause });\n this[_a20] = true;\n this.content = content;\n }\n static isInstance(error) {\n return AISDKError21.hasMarker(error, marker20);\n }\n};\n\n// src/prompt/invalid-message-role-error.ts\nimport { AISDKError as AISDKError22 } from \"@ai-sdk/provider\";\nvar name21 = \"AI_InvalidMessageRoleError\";\nvar marker21 = `vercel.ai.error.${name21}`;\nvar symbol21 = Symbol.for(marker21);\nvar _a21, _b21;\nvar InvalidMessageRoleError = class extends (_b21 = AISDKError22, _a21 = symbol21, _b21) {\n constructor({\n role,\n message = `Invalid message role: '${role}'. Must be one of: \"system\", \"user\", \"assistant\", \"tool\".`\n }) {\n super({ name: name21, message });\n this[_a21] = true;\n this.role = role;\n }\n static isInstance(error) {\n return AISDKError22.hasMarker(error, marker21);\n }\n};\n\n// src/prompt/message-conversion-error.ts\nimport { AISDKError as AISDKError23 } from \"@ai-sdk/provider\";\nvar name22 = \"AI_MessageConversionError\";\nvar marker22 = `vercel.ai.error.${name22}`;\nvar symbol22 = Symbol.for(marker22);\nvar _a22, _b22;\nvar MessageConversionError = class extends (_b22 = AISDKError23, _a22 = symbol22, _b22) {\n constructor({\n originalMessage,\n message\n }) {\n super({ name: name22, message });\n this[_a22] = true;\n this.originalMessage = originalMessage;\n }\n static isInstance(error) {\n return AISDKError23.hasMarker(error, marker22);\n }\n};\n\n// src/error/index.ts\nimport { DownloadError } from \"@ai-sdk/provider-utils\";\n\n// src/util/retry-error.ts\nimport { AISDKError as AISDKError24 } from \"@ai-sdk/provider\";\nvar name23 = \"AI_RetryError\";\nvar marker23 = `vercel.ai.error.${name23}`;\nvar symbol23 = Symbol.for(marker23);\nvar _a23, _b23;\nvar RetryError = class extends (_b23 = AISDKError24, _a23 = symbol23, _b23) {\n constructor({\n message,\n reason,\n errors\n }) {\n super({ name: name23, message });\n this[_a23] = true;\n this.reason = reason;\n this.errors = errors;\n this.lastError = errors[errors.length - 1];\n }\n static isInstance(error) {\n return AISDKError24.hasMarker(error, marker23);\n }\n};\n\n// src/logger/log-warnings.ts\nfunction formatWarning({\n warning,\n provider,\n model\n}) {\n const scope = provider != null && model != null ? ` (${provider} / ${model})` : \"\";\n const prefix = `AI SDK Warning${scope}:`;\n switch (warning.type) {\n case \"unsupported\": {\n let message = `${prefix} The feature \"${warning.feature}\" is not supported.`;\n if (warning.details) {\n message += ` ${warning.details}`;\n }\n return message;\n }\n case \"compatibility\": {\n let message = `${prefix} The feature \"${warning.feature}\" is used in a compatibility mode.`;\n if (warning.details) {\n message += ` ${warning.details}`;\n }\n return message;\n }\n case \"deprecated\": {\n return `${prefix} Deprecated: \"${warning.setting}\". ${warning.message}`;\n }\n case \"other\": {\n return `${prefix} ${warning.message}`;\n }\n default: {\n return `${prefix} ${JSON.stringify(warning, null, 2)}`;\n }\n }\n}\nvar FIRST_WARNING_INFO_MESSAGE = \"AI SDK Warning System: To turn off warning logging, set the AI_SDK_LOG_WARNINGS global to false.\";\nvar hasLoggedBefore = false;\nfunction emitWarning({\n message,\n type\n}) {\n if (typeof process !== \"undefined\" && typeof process.emitWarning === \"function\") {\n process.emitWarning(message, { type });\n } else {\n console.warn(message);\n }\n}\nvar logWarnings = (options) => {\n if (options.warnings.length === 0) {\n return;\n }\n const logger = globalThis.AI_SDK_LOG_WARNINGS;\n if (logger === false) {\n return;\n }\n if (typeof logger === \"function\") {\n logger(options);\n return;\n }\n if (!hasLoggedBefore) {\n hasLoggedBefore = true;\n emitWarning({\n message: FIRST_WARNING_INFO_MESSAGE,\n type: \"Warning\"\n });\n }\n for (const warning of options.warnings) {\n const message = formatWarning({\n warning,\n provider: options.provider,\n model: options.model\n });\n emitWarning({\n message,\n type: warning.type === \"deprecated\" ? \"DeprecationWarning\" : \"Warning\"\n });\n }\n};\n\n// src/model/resolve-model.ts\nimport { gateway } from \"@ai-sdk/gateway\";\n\n// src/util/log-v2-compatibility-warning.ts\nfunction logV2CompatibilityWarning({\n provider,\n modelId\n}) {\n logWarnings({\n warnings: [\n {\n type: \"compatibility\",\n feature: \"specificationVersion\",\n details: `Using v2 specification compatibility mode. Some features may not be available.`\n }\n ],\n provider,\n model: modelId\n });\n}\n\n// src/model/as-embedding-model-v3.ts\nfunction asEmbeddingModelV3(model) {\n if (model.specificationVersion === \"v3\") {\n return model;\n }\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId\n });\n return new Proxy(model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v3\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-embedding-model-v4.ts\nfunction asEmbeddingModelV4(model) {\n if (model.specificationVersion === \"v4\") {\n return model;\n }\n const v3Model = model.specificationVersion === \"v2\" ? asEmbeddingModelV3(model) : model;\n return new Proxy(v3Model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v4\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-image-model-v3.ts\nfunction asImageModelV3(model) {\n if (model.specificationVersion === \"v3\") {\n return model;\n }\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId\n });\n return new Proxy(model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v3\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-image-model-v4.ts\nfunction asImageModelV4(model) {\n if (model.specificationVersion === \"v4\") {\n return model;\n }\n const v3Model = model.specificationVersion === \"v2\" ? asImageModelV3(model) : model;\n return new Proxy(v3Model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v4\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-language-model-v3.ts\nfunction asLanguageModelV3(model) {\n if (model.specificationVersion === \"v3\") {\n return model;\n }\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId\n });\n return new Proxy(model, {\n get(target, prop) {\n switch (prop) {\n case \"specificationVersion\":\n return \"v3\";\n case \"doGenerate\":\n return async (...args) => {\n const result = await target.doGenerate(...args);\n return {\n ...result,\n finishReason: convertV2FinishReasonToV3(result.finishReason),\n usage: convertV2UsageToV3(result.usage)\n };\n };\n case \"doStream\":\n return async (...args) => {\n const result = await target.doStream(...args);\n return {\n ...result,\n stream: convertV2StreamToV3(result.stream)\n };\n };\n default:\n return target[prop];\n }\n }\n });\n}\nfunction convertV2StreamToV3(stream) {\n return stream.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n switch (chunk.type) {\n case \"finish\":\n controller.enqueue({\n ...chunk,\n finishReason: convertV2FinishReasonToV3(chunk.finishReason),\n usage: convertV2UsageToV3(chunk.usage)\n });\n break;\n default:\n controller.enqueue(chunk);\n break;\n }\n }\n })\n );\n}\nfunction convertV2FinishReasonToV3(finishReason) {\n return {\n unified: finishReason === \"unknown\" ? \"other\" : finishReason,\n raw: void 0\n };\n}\nfunction convertV2UsageToV3(usage) {\n return {\n inputTokens: {\n total: usage.inputTokens,\n noCache: void 0,\n cacheRead: usage.cachedInputTokens,\n cacheWrite: void 0\n },\n outputTokens: {\n total: usage.outputTokens,\n text: void 0,\n reasoning: usage.reasoningTokens\n }\n };\n}\n\n// src/model/as-language-model-v4.ts\nfunction asLanguageModelV4(model) {\n if (model.specificationVersion === \"v4\") {\n return model;\n }\n const v3Model = model.specificationVersion === \"v2\" ? asLanguageModelV3(model) : model;\n return new Proxy(v3Model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v4\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-reranking-model-v4.ts\nfunction asRerankingModelV4(model) {\n if (model.specificationVersion === \"v4\") {\n return model;\n }\n return new Proxy(model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v4\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-speech-model-v3.ts\nfunction asSpeechModelV3(model) {\n if (model.specificationVersion === \"v3\") {\n return model;\n }\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId\n });\n return new Proxy(model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v3\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-speech-model-v4.ts\nfunction asSpeechModelV4(model) {\n if (model.specificationVersion === \"v4\") {\n return model;\n }\n const v3Model = model.specificationVersion === \"v2\" ? asSpeechModelV3(model) : model;\n return new Proxy(v3Model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v4\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-transcription-model-v3.ts\nfunction asTranscriptionModelV3(model) {\n if (model.specificationVersion === \"v3\") {\n return model;\n }\n logV2CompatibilityWarning({\n provider: model.provider,\n modelId: model.modelId\n });\n return new Proxy(model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v3\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-transcription-model-v4.ts\nfunction asTranscriptionModelV4(model) {\n if (model.specificationVersion === \"v4\") {\n return model;\n }\n const v3Model = model.specificationVersion === \"v2\" ? asTranscriptionModelV3(model) : model;\n return new Proxy(v3Model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v4\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-video-model-v4.ts\nfunction asVideoModelV4(model) {\n if (model.specificationVersion === \"v4\") {\n return model;\n }\n return new Proxy(model, {\n get(target, prop) {\n if (prop === \"specificationVersion\") return \"v4\";\n return target[prop];\n }\n });\n}\n\n// src/model/as-provider-v3.ts\nfunction asProviderV3(provider) {\n if (\"specificationVersion\" in provider && provider.specificationVersion === \"v3\") {\n return provider;\n }\n const v2Provider = provider;\n return {\n specificationVersion: \"v3\",\n languageModel: (modelId) => asLanguageModelV3(v2Provider.languageModel(modelId)),\n embeddingModel: (modelId) => asEmbeddingModelV3(v2Provider.textEmbeddingModel(modelId)),\n imageModel: (modelId) => asImageModelV3(v2Provider.imageModel(modelId)),\n transcriptionModel: v2Provider.transcriptionModel ? (modelId) => asTranscriptionModelV3(v2Provider.transcriptionModel(modelId)) : void 0,\n speechModel: v2Provider.speechModel ? (modelId) => asSpeechModelV3(v2Provider.speechModel(modelId)) : void 0,\n rerankingModel: void 0\n // v2 providers don't have reranking models\n };\n}\n\n// src/model/as-provider-v4.ts\nfunction asProviderV4(provider) {\n if (\"specificationVersion\" in provider && provider.specificationVersion === \"v4\") {\n return provider;\n }\n const v3Provider = !(\"specificationVersion\" in provider) || provider.specificationVersion !== \"v3\" ? asProviderV3(provider) : provider;\n return {\n specificationVersion: \"v4\",\n languageModel: (modelId) => asLanguageModelV4(v3Provider.languageModel(modelId)),\n embeddingModel: (modelId) => asEmbeddingModelV4(v3Provider.embeddingModel(modelId)),\n imageModel: (modelId) => asImageModelV4(v3Provider.imageModel(modelId)),\n transcriptionModel: v3Provider.transcriptionModel ? (modelId) => asTranscriptionModelV4(v3Provider.transcriptionModel(modelId)) : void 0,\n speechModel: v3Provider.speechModel ? (modelId) => asSpeechModelV4(v3Provider.speechModel(modelId)) : void 0,\n rerankingModel: v3Provider.rerankingModel ? (modelId) => asRerankingModelV4(v3Provider.rerankingModel(modelId)) : void 0\n };\n}\n\n// src/model/resolve-model.ts\nfunction resolveLanguageModel(model) {\n if (typeof model === \"string\") {\n return getGlobalProvider().languageModel(model);\n }\n if (![\"v4\", \"v3\", \"v2\"].includes(model.specificationVersion)) {\n const unsupportedModel = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId\n });\n }\n return asLanguageModelV4(model);\n}\nfunction resolveEmbeddingModel(model) {\n if (typeof model === \"string\") {\n return getGlobalProvider().embeddingModel(model);\n }\n if (![\"v4\", \"v3\", \"v2\"].includes(model.specificationVersion)) {\n const unsupportedModel = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId\n });\n }\n return asEmbeddingModelV4(model);\n}\nfunction resolveTranscriptionModel(model) {\n var _a25, _b25;\n if (typeof model === \"string\") {\n return (_b25 = (_a25 = getGlobalProvider()).transcriptionModel) == null ? void 0 : _b25.call(_a25, model);\n }\n if (![\"v4\", \"v3\", \"v2\"].includes(model.specificationVersion)) {\n const unsupportedModel = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId\n });\n }\n return asTranscriptionModelV4(model);\n}\nfunction resolveSpeechTranslationModel(model) {\n var _a25;\n if (typeof model === \"string\") {\n const provider = (_a25 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a25 : gateway;\n const speechTranslationModel = provider.speechTranslationModel;\n if (!speechTranslationModel) {\n throw new Error(\n \"The default provider does not support speech translation models. Please pass a provider model instance that implements the experimental speech translation model specification.\"\n );\n }\n return speechTranslationModel(model);\n }\n if (model.specificationVersion !== \"v4\") {\n const unsupportedModel = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId\n });\n }\n return model;\n}\nfunction resolveSpeechModel(model) {\n var _a25, _b25;\n if (typeof model === \"string\") {\n return (_b25 = (_a25 = getGlobalProvider()).speechModel) == null ? void 0 : _b25.call(_a25, model);\n }\n if (![\"v4\", \"v3\", \"v2\"].includes(model.specificationVersion)) {\n const unsupportedModel = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId\n });\n }\n return asSpeechModelV4(model);\n}\nfunction resolveImageModel(model) {\n if (typeof model === \"string\") {\n return getGlobalProvider().imageModel(model);\n }\n if (![\"v4\", \"v3\", \"v2\"].includes(model.specificationVersion)) {\n const unsupportedModel = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId\n });\n }\n return asImageModelV4(model);\n}\nfunction resolveVideoModel(model) {\n var _a25;\n if (typeof model === \"string\") {\n const provider = (_a25 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a25 : gateway;\n const videoModel = provider.videoModel;\n if (!videoModel) {\n throw new Error(\n 'The default provider does not support video models. Please use a Experimental_VideoModelV4 object from a provider (e.g., vertex.video(\"model-id\")).'\n );\n }\n return videoModel(model);\n }\n if (![\"v4\", \"v3\"].includes(model.specificationVersion)) {\n const unsupportedModel = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId\n });\n }\n return asVideoModelV4(model);\n}\nfunction resolveRerankingModel(model) {\n if (typeof model === \"string\") {\n const provider = getGlobalProvider();\n const rerankingModel = provider.rerankingModel;\n if (!rerankingModel) {\n throw new Error(\n 'The default provider does not support reranking models. Please use a RerankingModel object from a provider (e.g., gateway.rerankingModel(\"model-id\")).'\n );\n }\n return rerankingModel(model);\n }\n if (model.specificationVersion !== \"v4\" && model.specificationVersion !== \"v3\") {\n const unsupportedModel = model;\n throw new UnsupportedModelVersionError({\n version: unsupportedModel.specificationVersion,\n provider: unsupportedModel.provider,\n modelId: unsupportedModel.modelId\n });\n }\n return asRerankingModelV4(model);\n}\nfunction getGlobalProvider() {\n var _a25;\n const provider = (_a25 = globalThis.AI_SDK_DEFAULT_PROVIDER) != null ? _a25 : gateway;\n return asProviderV4(provider);\n}\n\n// src/prompt/clone-model-message.ts\nfunction cloneModelMessages(messages) {\n return messages.map((message) => cloneValue(message));\n}\nfunction cloneValue(value) {\n if (value instanceof URL) {\n return new URL(value.href);\n }\n if (Array.isArray(value)) {\n return value.map((item) => cloneValue(item));\n }\n if (value instanceof Uint8Array) {\n return new Uint8Array(value);\n }\n if (value instanceof ArrayBuffer) {\n return value.slice(0);\n }\n if (value instanceof Date) {\n return new Date(value);\n }\n if (value != null && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, value2]) => [key, cloneValue(value2)])\n );\n }\n return value;\n}\n\n// src/prompt/convert-to-language-model-prompt.ts\nimport {\n asArray,\n detectMediaType,\n isFullMediaType,\n isUrlSupported\n} from \"@ai-sdk/provider-utils\";\n\n// src/util/download/download.ts\nimport {\n cancelResponseBody,\n DownloadError as DownloadError2,\n readResponseWithSizeLimit,\n DEFAULT_MAX_DOWNLOAD_SIZE,\n fetchWithValidatedRedirects,\n withUserAgentSuffix,\n getRuntimeEnvironmentUserAgent\n} from \"@ai-sdk/provider-utils\";\n\n// src/version.ts\nvar VERSION = true ? \"7.0.90\" : \"0.0.0-test\";\n\n// src/util/download/download.ts\nvar download = async ({\n url,\n maxBytes,\n abortSignal\n}) => {\n var _a25;\n const urlText = url.toString();\n try {\n const headers = withUserAgentSuffix(\n {},\n `ai-sdk/${VERSION}`,\n getRuntimeEnvironmentUserAgent()\n );\n const response = await fetchWithValidatedRedirects({\n url: urlText,\n headers,\n abortSignal\n });\n if (!response.ok) {\n await cancelResponseBody(response);\n throw new DownloadError2({\n url: urlText,\n statusCode: response.status,\n statusText: response.statusText\n });\n }\n const data = await readResponseWithSizeLimit({\n response,\n url: urlText,\n maxBytes: maxBytes != null ? maxBytes : DEFAULT_MAX_DOWNLOAD_SIZE\n });\n return {\n data,\n mediaType: (_a25 = response.headers.get(\"content-type\")) != null ? _a25 : void 0\n };\n } catch (error) {\n if (DownloadError2.isInstance(error)) {\n throw error;\n }\n throw new DownloadError2({ url: urlText, cause: error });\n }\n};\n\n// src/util/download/download-function.ts\nvar createDefaultDownloadFunction = (download2 = download) => (requestedDownloads) => Promise.all(\n requestedDownloads.map(\n async (requestedDownload) => requestedDownload.isUrlSupportedByModel ? null : await download2(requestedDownload)\n )\n);\n\n// src/util/merge-objects.ts\nfunction mergeObjects(base, overrides) {\n if (base === void 0 && overrides === void 0) {\n return void 0;\n }\n if (base === void 0) {\n return overrides;\n }\n if (overrides === void 0) {\n return base;\n }\n const result = { ...base };\n for (const key in overrides) {\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n continue;\n }\n if (Object.prototype.hasOwnProperty.call(overrides, key)) {\n const overridesValue = overrides[key];\n if (overridesValue === void 0) continue;\n const baseValue = key in base ? base[key] : void 0;\n const isSourceObject = overridesValue !== null && typeof overridesValue === \"object\" && !Array.isArray(overridesValue) && !(overridesValue instanceof Date) && !(overridesValue instanceof RegExp);\n const isTargetObject = baseValue !== null && baseValue !== void 0 && typeof baseValue === \"object\" && !Array.isArray(baseValue) && !(baseValue instanceof Date) && !(baseValue instanceof RegExp);\n if (isSourceObject && isTargetObject) {\n result[key] = mergeObjects(\n baseValue,\n overridesValue\n );\n } else {\n result[key] = overridesValue;\n }\n }\n }\n return result;\n}\n\n// src/prompt/file-part-data.ts\nimport {\n isBuffer,\n isProviderReference\n} from \"@ai-sdk/provider-utils\";\n\n// src/prompt/split-data-url.ts\nfunction splitDataUrl(dataUrl) {\n try {\n const [header, base64Content] = dataUrl.split(\",\");\n return {\n mediaType: header.split(\";\")[0].split(\":\")[1],\n base64Content\n };\n } catch (e) {\n return {\n mediaType: void 0,\n base64Content: void 0\n };\n }\n}\n\n// src/prompt/file-part-data.ts\nfunction isTaggedFileData(value) {\n if (typeof value !== \"object\" || value === null) return false;\n const type = value.type;\n return type === \"data\" || type === \"url\" || type === \"reference\" || type === \"text\";\n}\nfunction convertUrlToFilePartData(url) {\n if (url.protocol === \"data:\") {\n const { mediaType, base64Content } = splitDataUrl(url.toString());\n if (mediaType == null || base64Content == null) {\n throw new InvalidDataContentError({\n content: url,\n message: `Invalid data URL format in content ${url.toString()}`\n });\n }\n return { data: { type: \"data\", data: base64Content }, mediaType };\n }\n return { data: { type: \"url\", url }, mediaType: void 0 };\n}\nfunction convertInlineDataToFilePartData(content) {\n if (content instanceof Uint8Array) {\n return { data: { type: \"data\", data: content }, mediaType: void 0 };\n }\n if (content instanceof ArrayBuffer) {\n return {\n data: { type: \"data\", data: new Uint8Array(content) },\n mediaType: void 0\n };\n }\n if (isBuffer(content)) {\n return {\n data: { type: \"data\", data: new Uint8Array(content) },\n mediaType: void 0\n };\n }\n return {\n data: { type: \"data\", data: content },\n mediaType: void 0\n };\n}\nfunction convertToLanguageModelV4FilePart(content) {\n if (isTaggedFileData(content)) {\n switch (content.type) {\n case \"data\":\n if (typeof content.data === \"string\" && content.data.startsWith(\"data:\")) {\n throw new InvalidDataContentError({\n content: content.data,\n message: 'Data URLs are not valid inline data. Pass them as { type: \"url\", url } instead.'\n });\n }\n return convertInlineDataToFilePartData(content.data);\n case \"url\":\n return convertUrlToFilePartData(content.url);\n case \"reference\":\n return {\n data: { type: \"reference\", reference: content.reference },\n mediaType: void 0\n };\n case \"text\":\n return {\n data: { type: \"text\", text: content.text },\n mediaType: void 0\n };\n }\n }\n if (content instanceof URL) {\n return convertUrlToFilePartData(content);\n }\n if (typeof content === \"string\") {\n try {\n return convertUrlToFilePartData(new URL(content));\n } catch (e) {\n return convertInlineDataToFilePartData(content);\n }\n }\n if (isProviderReference(content)) {\n return {\n data: { type: \"reference\", reference: content },\n mediaType: void 0\n };\n }\n return convertInlineDataToFilePartData(content);\n}\n\n// src/prompt/convert-to-language-model-prompt.ts\nasync function convertToLanguageModelPrompt({\n prompt,\n supportedUrls,\n download: download2 = createDefaultDownloadFunction(),\n // `provider` is only needed here to convert legacy tool output types via `mapToolResultOutput`.\n // TODO: remove in v8 when \"file-id\" and \"image-file-id\" types are removed\n provider\n}) {\n const downloadedAssets = await downloadAssets(\n prompt.messages,\n download2,\n supportedUrls\n );\n const approvalIdToToolCallId = /* @__PURE__ */ new Map();\n for (const message of prompt.messages) {\n if (message.role === \"assistant\" && Array.isArray(message.content)) {\n for (const part of message.content) {\n if (part.type === \"tool-approval-request\" && \"approvalId\" in part && \"toolCallId\" in part) {\n approvalIdToToolCallId.set(\n part.approvalId,\n part.toolCallId\n );\n }\n }\n }\n }\n const approvedToolCallIds = /* @__PURE__ */ new Set();\n for (const message of prompt.messages) {\n if (message.role === \"tool\") {\n for (const part of message.content) {\n if (part.type === \"tool-approval-response\") {\n const toolCallId = approvalIdToToolCallId.get(part.approvalId);\n if (toolCallId) {\n approvedToolCallIds.add(toolCallId);\n }\n }\n }\n }\n }\n const messages = [\n ...prompt.instructions != null ? typeof prompt.instructions === \"string\" ? [{ role: \"system\", content: prompt.instructions }] : asArray(prompt.instructions).map((message) => ({\n role: \"system\",\n content: message.content,\n providerOptions: message.providerOptions\n })) : [],\n ...prompt.messages.map(\n (message) => convertToLanguageModelMessage({ message, downloadedAssets, provider })\n )\n ];\n const combinedMessages = [];\n for (const message of messages) {\n if (message.role !== \"tool\") {\n combinedMessages.push(message);\n continue;\n }\n const lastCombinedMessage = combinedMessages.at(-1);\n if ((lastCombinedMessage == null ? void 0 : lastCombinedMessage.role) === \"tool\") {\n const lastContentPart = lastCombinedMessage.content.at(-1);\n if (lastContentPart != null && lastCombinedMessage.providerOptions != null) {\n lastContentPart.providerOptions = mergeObjects(\n lastCombinedMessage.providerOptions,\n lastContentPart.providerOptions\n );\n }\n lastCombinedMessage.content.push(...message.content);\n lastCombinedMessage.providerOptions = message.providerOptions;\n } else {\n combinedMessages.push(message);\n }\n }\n const toolCallIds = /* @__PURE__ */ new Set();\n for (const message of combinedMessages) {\n switch (message.role) {\n case \"assistant\": {\n for (const content of message.content) {\n if (content.type === \"tool-call\" && !content.providerExecuted) {\n toolCallIds.add(content.toolCallId);\n }\n }\n break;\n }\n case \"tool\": {\n for (const content of message.content) {\n if (content.type === \"tool-result\") {\n toolCallIds.delete(content.toolCallId);\n }\n }\n break;\n }\n case \"user\":\n case \"system\":\n for (const id of approvedToolCallIds) {\n toolCallIds.delete(id);\n }\n if (toolCallIds.size > 0) {\n throw new MissingToolResultsError({\n toolCallIds: Array.from(toolCallIds)\n });\n }\n break;\n }\n }\n for (const id of approvedToolCallIds) {\n toolCallIds.delete(id);\n }\n if (toolCallIds.size > 0) {\n throw new MissingToolResultsError({ toolCallIds: Array.from(toolCallIds) });\n }\n return combinedMessages.filter(\n // Filter out empty tool messages (e.g. if they only contained\n // tool-approval-response parts that were removed).\n // This prevents sending invalid empty messages to the provider.\n // Note: provider-executed tool-approval-response parts are preserved.\n (message) => message.role !== \"tool\" || message.content.length > 0\n );\n}\nfunction convertToLanguageModelMessage({\n message,\n downloadedAssets,\n // `provider` is only needed here to convert legacy tool output types via `mapToolResultOutput`.\n // TODO: remove in v8 when \"file-id\" and \"image-file-id\" types are removed\n provider\n}) {\n const warnings = [];\n const role = message.role;\n switch (role) {\n case \"system\": {\n return {\n role: \"system\",\n content: message.content,\n providerOptions: message.providerOptions\n };\n }\n case \"user\": {\n if (typeof message.content === \"string\") {\n return {\n role: \"user\",\n content: [{ type: \"text\", text: message.content }],\n providerOptions: message.providerOptions\n };\n }\n const converted = {\n role: \"user\",\n content: message.content.map((part) => {\n if (part.type === \"image\") {\n warnings.push({\n type: \"deprecated\",\n setting: '\"image\" content part',\n message: `The \"image\" content part type is deprecated. Use a \"file\" part with mediaType: 'image' (or a more specific image/* subtype) instead.`\n });\n }\n return convertImagePartToFilePart(part);\n }).map((part) => convertPartToLanguageModelPart(part, downloadedAssets)).filter((part) => part.type !== \"text\" || part.text !== \"\"),\n providerOptions: message.providerOptions\n };\n if (warnings.length > 0) {\n logWarnings({ warnings });\n }\n return converted;\n }\n case \"assistant\": {\n if (typeof message.content === \"string\") {\n return {\n role: \"assistant\",\n content: [{ type: \"text\", text: message.content }],\n providerOptions: message.providerOptions\n };\n }\n const converted = {\n role: \"assistant\",\n content: message.content.filter(\n // remove empty text parts (no text, and no provider options):\n (part) => part.type !== \"text\" || part.text !== \"\" || part.providerOptions != null\n ).filter(\n (part) => part.type !== \"tool-approval-request\"\n ).map((part) => {\n const providerOptions = part.providerOptions;\n switch (part.type) {\n case \"custom\": {\n return {\n type: \"custom\",\n kind: part.kind,\n providerOptions\n };\n }\n case \"file\": {\n const { data, mediaType } = convertToLanguageModelV4FilePart(\n part.data\n );\n return {\n type: \"file\",\n data,\n filename: part.filename,\n mediaType: mediaType != null ? mediaType : part.mediaType,\n providerOptions\n };\n }\n case \"reasoning\": {\n return {\n type: \"reasoning\",\n text: part.text,\n providerOptions\n };\n }\n case \"reasoning-file\": {\n const { data, mediaType } = convertToLanguageModelV4FilePart(\n part.data\n );\n if (data.type !== \"data\" && data.type !== \"url\") {\n throw new Error(\n `Unsupported reasoning-file data type: ${data.type}`\n );\n }\n return {\n type: \"reasoning-file\",\n data,\n mediaType: mediaType != null ? mediaType : part.mediaType,\n providerOptions\n };\n }\n case \"text\": {\n return {\n type: \"text\",\n text: part.text,\n providerOptions\n };\n }\n case \"tool-call\": {\n return {\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n providerExecuted: part.providerExecuted,\n providerOptions\n };\n }\n case \"tool-result\": {\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: mapToolResultOutput({\n output: part.output,\n provider,\n warnings,\n downloadedAssets\n }),\n providerOptions\n };\n }\n }\n }),\n providerOptions: message.providerOptions\n };\n if (warnings.length > 0) {\n logWarnings({ warnings });\n }\n return converted;\n }\n case \"tool\": {\n const converted = {\n role: \"tool\",\n content: message.content.filter(\n // Only include tool-approval-response for provider-executed tools\n (part) => part.type !== \"tool-approval-response\" || part.providerExecuted\n ).map((part) => {\n switch (part.type) {\n case \"tool-result\": {\n return {\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output: mapToolResultOutput({\n output: part.output,\n provider,\n warnings,\n downloadedAssets\n }),\n providerOptions: part.providerOptions\n };\n }\n case \"tool-approval-response\": {\n return {\n type: \"tool-approval-response\",\n approvalId: part.approvalId,\n approved: part.approved,\n reason: part.reason\n };\n }\n }\n }),\n providerOptions: message.providerOptions\n };\n if (warnings.length > 0) {\n logWarnings({ warnings });\n }\n return converted;\n }\n default: {\n const _exhaustiveCheck = role;\n throw new InvalidMessageRoleError({ role: _exhaustiveCheck });\n }\n }\n}\nfunction convertImagePartToFilePart(part) {\n var _a25;\n if (part.type !== \"image\") {\n return part;\n }\n return {\n type: \"file\",\n data: part.image,\n mediaType: (_a25 = part.mediaType) != null ? _a25 : \"image\",\n providerOptions: part.providerOptions\n };\n}\nasync function downloadAssets(messages, download2, supportedUrls) {\n const downloadableFiles = [];\n for (const message of messages) {\n if (message.role === \"user\" && Array.isArray(message.content)) {\n for (const part of message.content) {\n const filePart = convertImagePartToFilePart(part);\n if (filePart.type === \"file\") {\n downloadableFiles.push(filePart);\n }\n }\n }\n if (message.role === \"tool\") {\n for (const part of message.content) {\n if (part.type !== \"tool-result\") {\n continue;\n }\n if (part.output.type !== \"content\") {\n continue;\n }\n for (const contentPart of part.output.value) {\n if (contentPart.type === \"file\") {\n downloadableFiles.push(contentPart);\n }\n }\n }\n }\n if (message.role === \"assistant\" && Array.isArray(message.content)) {\n for (const part of message.content) {\n if (part.type !== \"tool-result\") {\n continue;\n }\n if (part.output.type !== \"content\") {\n continue;\n }\n for (const contentPart of part.output.value) {\n if (contentPart.type === \"file\") {\n downloadableFiles.push(contentPart);\n }\n }\n }\n }\n }\n const plannedDownloads = downloadableFiles.map((part) => {\n const mediaType = part.mediaType;\n const { data } = convertToLanguageModelV4FilePart(part.data);\n return { mediaType, data };\n }).filter((part) => part.data.type === \"url\").map((part) => ({\n url: part.data.url,\n isUrlSupportedByModel: part.mediaType != null && isUrlSupported({\n url: part.data.url.toString(),\n mediaType: part.mediaType,\n supportedUrls\n })\n }));\n const downloadedFiles = await download2(plannedDownloads);\n return Object.fromEntries(\n downloadedFiles.map(\n (file, index) => file == null ? null : [\n plannedDownloads[index].url.toString(),\n { data: file.data, mediaType: file.mediaType }\n ]\n ).filter((file) => file != null)\n );\n}\nfunction convertPartToLanguageModelPart(part, downloadedAssets) {\n if (part.type === \"text\") {\n return {\n type: \"text\",\n text: part.text,\n providerOptions: part.providerOptions\n };\n }\n const { data: normalizedData, mediaType: dataUrlMediaType } = convertToLanguageModelV4FilePart(part.data);\n let mediaType = dataUrlMediaType != null ? dataUrlMediaType : part.mediaType;\n let data = normalizedData;\n if (data.type === \"url\") {\n const downloadedFile = downloadedAssets[data.url.toString()];\n if (downloadedFile) {\n data = { type: \"data\", data: downloadedFile.data };\n if (downloadedFile.mediaType != null && (mediaType == null || !isFullMediaType(mediaType))) {\n mediaType = downloadedFile.mediaType;\n }\n }\n }\n if (data.type === \"data\" && (data.data instanceof Uint8Array || typeof data.data === \"string\")) {\n const imageMediaType = detectMediaType({\n data: data.data,\n topLevelType: \"image\"\n });\n if (imageMediaType != null) {\n mediaType = imageMediaType;\n }\n }\n if (mediaType == null) {\n throw new Error(`Media type is missing for file part`);\n }\n return {\n type: \"file\",\n mediaType,\n filename: part.filename,\n data,\n providerOptions: part.providerOptions\n };\n}\nfunction mapToolResultOutput({\n output,\n // `provider` is only needed here to convert legacy \"file-id\" and \"image-file-id\" types to provider references, in case they are using string ID values.\n // TODO: remove in v8 when \"file-id\" and \"image-file-id\" types are removed\n provider,\n warnings = [],\n downloadedAssets\n}) {\n if (output.type !== \"content\") {\n return output;\n }\n return {\n type: \"content\",\n value: output.value.map((item) => {\n var _a25;\n switch (item.type) {\n case \"file\": {\n const convertedPart = convertPartToLanguageModelPart(\n item,\n downloadedAssets\n );\n if (convertedPart.type !== \"file\") {\n throw new Error(\n \"Expected tool result file content to convert to file.\"\n );\n }\n return convertedPart;\n }\n case \"file-data\": {\n warnings.push({\n type: \"deprecated\",\n setting: '\"tool-result\" content of type \"file-data\"',\n message: `The \"file-data\" type for tool result content is deprecated. Use the \"file\" type with mediaType and { type: 'data', data } instead.`\n });\n return {\n type: \"file\",\n data: { type: \"data\", data: item.data },\n filename: item.filename,\n mediaType: item.mediaType,\n providerOptions: item.providerOptions\n };\n }\n case \"file-url\": {\n const mediaType = (_a25 = item.mediaType) != null ? _a25 : getMediaTypeFromUrl(item.url);\n let message = `The \"file-url\" type for tool result content is deprecated. Use the \"file\" type with mediaType and { type: 'url', url } instead.`;\n if (!item.mediaType) {\n const inferenceSuffix = mediaType === \"application/octet-stream\" ? `Unable to infer media type from URL. Defaulting to 'application/octet-stream'.` : `Inferred media type '${mediaType}' from URL.`;\n message = `The \"file-url\" tool result content part with URL \"${item.url}\" is missing a \"mediaType\". ${inferenceSuffix} ${message}`;\n }\n warnings.push({\n type: \"deprecated\",\n setting: '\"tool-result\" content of type \"file-url\"',\n message\n });\n return {\n type: \"file\",\n data: { type: \"url\", url: new URL(item.url) },\n mediaType,\n providerOptions: item.providerOptions\n };\n }\n case \"file-id\": {\n warnings.push({\n type: \"deprecated\",\n setting: '\"tool-result\" content of type \"file-id\"',\n message: `The \"file-id\" type for tool result content is deprecated. Use the \"file\" type with mediaType and { type: 'reference', reference } instead.`\n });\n return {\n type: \"file\",\n data: {\n type: \"reference\",\n reference: convertFileIdToProviderReference({\n fileId: item.fileId,\n provider\n })\n },\n mediaType: \"application\",\n providerOptions: item.providerOptions\n };\n }\n case \"file-reference\": {\n warnings.push({\n type: \"deprecated\",\n setting: '\"tool-result\" content of type \"file-reference\"',\n message: `The \"file-reference\" type for tool result content is deprecated. Use the \"file\" type with mediaType and { type: 'reference', reference } instead.`\n });\n return {\n type: \"file\",\n data: {\n type: \"reference\",\n reference: item.providerReference\n },\n mediaType: \"application\",\n providerOptions: item.providerOptions\n };\n }\n // The \"image-*\" types are legacy and deprecated.\n // TODO: remove migration in v8 in combination with the removal of these types from the provider utils.\n case \"image-data\": {\n warnings.push({\n type: \"deprecated\",\n setting: '\"tool-result\" content of type \"image-data\"',\n message: `The \"image-data\" type for tool result content is deprecated. Use the \"file\" type with mediaType and { type: 'data', data } instead.`\n });\n return {\n type: \"file\",\n data: { type: \"data\", data: item.data },\n mediaType: item.mediaType,\n providerOptions: item.providerOptions\n };\n }\n case \"image-url\": {\n warnings.push({\n type: \"deprecated\",\n setting: '\"tool-result\" content of type \"image-url\"',\n message: `The \"image-url\" type for tool result content is deprecated. Use the \"file\" type with mediaType 'image' (or a specific image/* subtype) and { type: 'url', url } instead.`\n });\n return {\n type: \"file\",\n data: { type: \"url\", url: new URL(item.url) },\n mediaType: \"image\",\n providerOptions: item.providerOptions\n };\n }\n case \"image-file-id\": {\n warnings.push({\n type: \"deprecated\",\n setting: '\"tool-result\" content of type \"image-file-id\"',\n message: `The \"image-file-id\" type for tool result content is deprecated. Use the \"file\" type with mediaType and { type: 'reference', reference } instead.`\n });\n return {\n type: \"file\",\n data: {\n type: \"reference\",\n reference: convertFileIdToProviderReference({\n fileId: item.fileId,\n provider\n })\n },\n mediaType: \"image\",\n providerOptions: item.providerOptions\n };\n }\n case \"image-file-reference\": {\n warnings.push({\n type: \"deprecated\",\n setting: '\"tool-result\" content of type \"image-file-reference\"',\n message: `The \"image-file-reference\" type for tool result content is deprecated. Use the \"file\" type with mediaType and { type: 'reference', reference } instead.`\n });\n return {\n type: \"file\",\n data: {\n type: \"reference\",\n reference: item.providerReference\n },\n mediaType: \"image\",\n providerOptions: item.providerOptions\n };\n }\n default:\n return item;\n }\n })\n };\n}\nfunction convertFileIdToProviderReference({\n fileId,\n provider\n}) {\n if (typeof fileId === \"object\") {\n return fileId;\n }\n if (provider == null) {\n throw new Error(\n \"Cannot convert string fileId to provider reference without a provider ID. Use a Record<string, string> fileId or switch to the file-reference type.\"\n );\n }\n return { [provider]: fileId };\n}\nvar URL_EXTENSION_TO_MEDIA_TYPE = {\n jpg: \"image/jpeg\",\n jpeg: \"image/jpeg\",\n png: \"image/png\",\n gif: \"image/gif\",\n webp: \"image/webp\",\n svg: \"image/svg+xml\",\n avif: \"image/avif\",\n heic: \"image/heic\",\n bmp: \"image/bmp\",\n tiff: \"image/tiff\",\n tif: \"image/tiff\",\n pdf: \"application/pdf\",\n mp4: \"video/mp4\",\n webm: \"video/webm\",\n mp3: \"audio/mpeg\",\n wav: \"audio/wav\",\n ogg: \"audio/ogg\"\n};\nfunction getMediaTypeFromUrl(url, fallbackMediaType = \"application/octet-stream\") {\n var _a25;\n try {\n const pathname = new URL(url).pathname;\n const fileExtension = (_a25 = pathname.split(\".\").pop()) == null ? void 0 : _a25.toLowerCase();\n if (fileExtension && Object.hasOwn(URL_EXTENSION_TO_MEDIA_TYPE, fileExtension)) {\n return URL_EXTENSION_TO_MEDIA_TYPE[fileExtension];\n }\n } catch (e) {\n }\n return fallbackMediaType;\n}\n\n// src/prompt/create-tool-model-output.ts\nimport { getErrorMessage as getErrorMessage3 } from \"@ai-sdk/provider\";\nasync function createToolModelOutput({\n toolCallId,\n input,\n output,\n tool: tool2,\n errorMode\n}) {\n if (errorMode === \"text\") {\n return { type: \"error-text\", value: getErrorMessage3(output) };\n } else if (errorMode === \"json\") {\n return { type: \"error-json\", value: toJSONValue(output) };\n }\n if (tool2 == null ? void 0 : tool2.toModelOutput) {\n return await tool2.toModelOutput({ toolCallId, input, output });\n }\n return typeof output === \"string\" ? { type: \"text\", value: output } : { type: \"json\", value: toJSONValue(output) };\n}\nfunction toJSONValue(value) {\n return value === void 0 ? null : value;\n}\n\n// src/prompt/prepare-language-model-call-options.ts\nfunction prepareLanguageModelCallOptions({\n maxOutputTokens,\n temperature,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n seed,\n stopSequences,\n reasoning\n}) {\n if (maxOutputTokens != null) {\n if (!Number.isInteger(maxOutputTokens)) {\n throw new InvalidArgumentError({\n parameter: \"maxOutputTokens\",\n value: maxOutputTokens,\n message: \"maxOutputTokens must be an integer\"\n });\n }\n if (maxOutputTokens < 1) {\n throw new InvalidArgumentError({\n parameter: \"maxOutputTokens\",\n value: maxOutputTokens,\n message: \"maxOutputTokens must be >= 1\"\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 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 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 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 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 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 return {\n maxOutputTokens,\n temperature,\n topP,\n topK,\n presencePenalty,\n frequencyPenalty,\n stopSequences,\n seed,\n reasoning\n };\n}\n\n// src/prompt/prepare-tool-choice.ts\nfunction prepareToolChoice({\n toolChoice\n}) {\n return toolChoice == null ? { type: \"auto\" } : typeof toolChoice === \"string\" ? { type: toolChoice } : { type: \"tool\", toolName: toolChoice.toolName };\n}\n\n// src/prompt/prepare-tools.ts\nimport {\n asSchema\n} from \"@ai-sdk/provider-utils\";\n\n// src/util/is-non-empty-object.ts\nfunction isNonEmptyObject(object3) {\n return object3 != null && Object.keys(object3).length > 0;\n}\n\n// src/prompt/prepare-tools.ts\nasync function prepareTools({\n tools,\n toolOrder,\n toolsContext = {},\n experimental_sandbox: sandbox\n}) {\n if (!isNonEmptyObject(tools)) {\n return void 0;\n }\n const languageModelTools = [];\n for (const [name25, tool2] of orderToolEntries({ tools, toolOrder })) {\n const toolType = tool2.type;\n switch (toolType) {\n case void 0:\n case \"dynamic\":\n case \"function\": {\n const description = resolveToolDescription({\n tool: tool2,\n toolName: name25,\n toolsContext,\n experimental_sandbox: sandbox\n });\n const providerOptions = tool2.providerOptions;\n const inputExamples = tool2.inputExamples;\n const strict = tool2.strict;\n languageModelTools.push({\n type: \"function\",\n name: name25,\n inputSchema: await asSchema(tool2.inputSchema).jsonSchema,\n ...description != null ? { description } : {},\n ...inputExamples != null ? { inputExamples } : {},\n ...providerOptions != null ? { providerOptions } : {},\n ...strict != null ? { strict } : {}\n });\n break;\n }\n case \"provider\": {\n languageModelTools.push({\n type: \"provider\",\n name: name25,\n id: tool2.id,\n args: tool2.args\n });\n break;\n }\n default: {\n const exhaustiveCheck = toolType;\n throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);\n }\n }\n }\n return languageModelTools;\n}\nfunction orderToolEntries({\n tools,\n toolOrder\n}) {\n if (toolOrder == null) {\n return Object.entries(tools);\n }\n const toolEntries = Object.entries(tools);\n const orderedTools = toolEntries.filter(([name25]) => toolOrder.includes(name25)).sort(\n ([nameA], [nameB]) => toolOrder.indexOf(nameA) - toolOrder.indexOf(nameB)\n );\n const unorderedTools = toolEntries.filter(([name25]) => !toolOrder.includes(name25)).sort(([nameA], [nameB]) => nameA < nameB ? -1 : nameA > nameB ? 1 : 0);\n return [...orderedTools, ...unorderedTools];\n}\nfunction resolveToolDescription({\n tool: tool2,\n toolName,\n toolsContext,\n experimental_sandbox: sandbox\n}) {\n return tool2.description === void 0 ? void 0 : typeof tool2.description === \"string\" ? tool2.description : tool2.description({\n context: toolsContext[toolName],\n experimental_sandbox: sandbox\n });\n}\n\n// src/prompt/request-options.ts\nfunction getTotalTimeoutMs(timeout) {\n if (timeout == null) {\n return void 0;\n }\n if (typeof timeout === \"number\") {\n return timeout;\n }\n return timeout.totalMs;\n}\nfunction getStepTimeoutMs(timeout) {\n if (timeout == null || typeof timeout === \"number\") {\n return void 0;\n }\n return timeout.stepMs;\n}\nfunction getFirstChunkTimeoutMs(timeout) {\n if (timeout == null || typeof timeout === \"number\") {\n return void 0;\n }\n return timeout.firstChunkMs;\n}\nfunction getChunkTimeoutMs(timeout) {\n if (timeout == null || typeof timeout === \"number\") {\n return void 0;\n }\n return timeout.chunkMs;\n}\nfunction getToolTimeoutMs(timeout, toolName) {\n var _a25, _b25;\n if (timeout == null || typeof timeout === \"number\") {\n return void 0;\n }\n return (_b25 = (_a25 = timeout.tools) == null ? void 0 : _a25[`${toolName}Ms`]) != null ? _b25 : timeout.toolMs;\n}\n\n// src/prompt/standardize-prompt.ts\nimport { InvalidPromptError as InvalidPromptError2 } from \"@ai-sdk/provider\";\nimport {\n asArray as asArray2,\n safeValidateTypes\n} from \"@ai-sdk/provider-utils\";\n\n// src/util/zod.ts\nimport {\n array,\n boolean,\n custom,\n discriminatedUnion,\n enum as enumType,\n instanceof as instanceOf,\n lazy,\n literal,\n looseObject,\n never,\n null as nullType,\n number,\n object,\n record,\n string,\n union,\n unknown\n} from \"zod/v4\";\nvar z = {\n array,\n boolean,\n custom,\n discriminatedUnion,\n enum: enumType,\n instanceof: instanceOf,\n lazy,\n literal,\n looseObject,\n never,\n null: nullType,\n number,\n object,\n record,\n string,\n union,\n unknown\n};\n\n// src/types/json-value.ts\nvar jsonValueSchema = z.lazy(\n () => z.union([\n z.null(),\n z.string(),\n z.number(),\n z.boolean(),\n z.record(z.string(), jsonValueSchema.optional()),\n z.array(jsonValueSchema)\n ])\n);\n\n// src/types/provider-metadata.ts\nvar providerMetadataSchema = z.record(\n z.string(),\n z.record(z.string(), jsonValueSchema.optional())\n);\n\n// src/prompt/content-part.ts\nimport {\n isBuffer as isBuffer2\n} from \"@ai-sdk/provider-utils\";\nvar fileInlineDataSchema = z.union([\n z.string(),\n z.instanceof(Uint8Array),\n z.instanceof(ArrayBuffer),\n z.custom(isBuffer2, { message: \"Must be a Buffer\" })\n]);\nvar providerReferenceSchema = z.record(z.string(), z.string());\nvar textPartSchema = z.object({\n type: z.literal(\"text\"),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional()\n});\nvar imagePartSchema = z.object({\n type: z.literal(\"image\"),\n image: z.union([\n fileInlineDataSchema,\n z.instanceof(URL),\n providerReferenceSchema\n ]),\n mediaType: z.string().optional(),\n providerOptions: providerMetadataSchema.optional()\n});\nvar taggedFileDataSchema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"data\"), data: fileInlineDataSchema }),\n z.object({ type: z.literal(\"url\"), url: z.instanceof(URL) }),\n z.object({\n type: z.literal(\"reference\"),\n reference: providerReferenceSchema\n }),\n z.object({ type: z.literal(\"text\"), text: z.string() })\n]);\nvar taggedReasoningFileDataSchema = z.discriminatedUnion(\"type\", [\n z.object({ type: z.literal(\"data\"), data: fileInlineDataSchema }),\n z.object({ type: z.literal(\"url\"), url: z.instanceof(URL) })\n]);\nvar filePartSchema = z.object({\n type: z.literal(\"file\"),\n data: z.union([\n taggedFileDataSchema,\n fileInlineDataSchema,\n z.instanceof(URL),\n providerReferenceSchema\n ]),\n filename: z.string().optional(),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional()\n});\nvar reasoningPartSchema = z.object({\n type: z.literal(\"reasoning\"),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional()\n});\nvar customPartSchema = z.object({\n type: z.literal(\"custom\"),\n kind: z.string().transform((value) => value),\n providerOptions: providerMetadataSchema.optional()\n});\nvar reasoningFilePartSchema = z.object({\n type: z.literal(\"reasoning-file\"),\n data: z.union([\n taggedReasoningFileDataSchema,\n fileInlineDataSchema,\n z.instanceof(URL)\n ]),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional()\n});\nvar toolCallPartSchema = z.object({\n type: z.literal(\"tool-call\"),\n toolCallId: z.string(),\n toolName: z.string(),\n input: z.unknown(),\n providerOptions: providerMetadataSchema.optional(),\n providerExecuted: z.boolean().optional()\n});\nvar outputSchema = z.discriminatedUnion(\n \"type\",\n [\n z.object({\n type: z.literal(\"text\"),\n value: z.string(),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"json\"),\n value: jsonValueSchema,\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"execution-denied\"),\n reason: z.string().optional(),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"error-text\"),\n value: z.string(),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"error-json\"),\n value: jsonValueSchema,\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"content\"),\n value: z.array(\n z.union([\n z.object({\n type: z.literal(\"text\"),\n text: z.string(),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"file\"),\n data: taggedFileDataSchema,\n mediaType: z.string(),\n filename: z.string().optional(),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n // Deprecated.\n type: z.literal(\"file-data\"),\n data: z.string(),\n mediaType: z.string(),\n filename: z.string().optional(),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n // Deprecated.\n type: z.literal(\"file-url\"),\n url: z.string(),\n mediaType: z.string().optional(),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n // Deprecated.\n type: z.literal(\"file-id\"),\n fileId: z.union([z.string(), z.record(z.string(), z.string())]),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n // Deprecated.\n type: z.literal(\"file-reference\"),\n providerReference: z.record(z.string(), z.string()),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n // Deprecated.\n type: z.literal(\"image-data\"),\n data: z.string(),\n mediaType: z.string(),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n // Deprecated.\n type: z.literal(\"image-url\"),\n url: z.string(),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n // Deprecated.\n type: z.literal(\"image-file-id\"),\n fileId: z.union([z.string(), z.record(z.string(), z.string())]),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n // Deprecated.\n type: z.literal(\"image-file-reference\"),\n providerReference: z.record(z.string(), z.string()),\n providerOptions: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"custom\"),\n providerOptions: providerMetadataSchema.optional()\n })\n ])\n )\n })\n ]\n);\nvar toolResultPartSchema = z.object({\n type: z.literal(\"tool-result\"),\n toolCallId: z.string(),\n toolName: z.string(),\n output: outputSchema,\n providerOptions: providerMetadataSchema.optional()\n});\nvar toolApprovalRequestSchema = z.object(\n {\n type: z.literal(\"tool-approval-request\"),\n approvalId: z.string(),\n toolCallId: z.string(),\n reason: z.string().optional()\n }\n);\nvar toolApprovalResponseSchema = z.object({\n type: z.literal(\"tool-approval-response\"),\n approvalId: z.string(),\n approved: z.boolean(),\n reason: z.string().optional()\n});\n\n// src/prompt/message.ts\nvar systemModelMessageSchema = z.object({\n role: z.literal(\"system\"),\n content: z.string(),\n providerOptions: providerMetadataSchema.optional()\n});\nvar userModelMessageSchema = 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});\nvar assistantModelMessageSchema = z.object({\n role: z.literal(\"assistant\"),\n content: z.union([\n z.string(),\n z.array(\n z.union([\n textPartSchema,\n customPartSchema,\n filePartSchema,\n reasoningPartSchema,\n reasoningFilePartSchema,\n toolCallPartSchema,\n toolResultPartSchema,\n toolApprovalRequestSchema\n ])\n )\n ]),\n providerOptions: providerMetadataSchema.optional()\n});\nvar toolModelMessageSchema = z.object({\n role: z.literal(\"tool\"),\n content: z.array(z.union([toolResultPartSchema, toolApprovalResponseSchema])),\n providerOptions: providerMetadataSchema.optional()\n});\nvar modelMessageSchema = z.union([\n systemModelMessageSchema,\n userModelMessageSchema,\n assistantModelMessageSchema,\n toolModelMessageSchema\n]);\n\n// src/prompt/standardize-prompt.ts\nasync function standardizePrompt({\n allowSystemInMessages = false,\n system,\n instructions = system,\n prompt,\n messages\n}) {\n if (prompt == null && messages == null) {\n throw new InvalidPromptError2({\n prompt,\n message: \"prompt or messages must be defined\"\n });\n }\n if (prompt != null && messages != null) {\n throw new InvalidPromptError2({\n prompt,\n message: \"prompt and messages cannot be defined at the same time\"\n });\n }\n if (typeof instructions !== \"string\" && !asArray2(instructions).every((message) => message.role === \"system\")) {\n throw new InvalidPromptError2({\n prompt,\n message: \"instructions must be a string, SystemModelMessage, or array of SystemModelMessage\"\n });\n }\n if (prompt != null && typeof prompt === \"string\") {\n messages = [{ role: \"user\", content: prompt }];\n } else if (prompt != null && Array.isArray(prompt)) {\n messages = prompt;\n } else if (messages == null) {\n throw new InvalidPromptError2({\n prompt,\n message: \"prompt or messages must be defined\"\n });\n }\n if (messages.length === 0) {\n throw new InvalidPromptError2({\n prompt,\n message: \"messages must not be empty\"\n });\n }\n if (!allowSystemInMessages && messages.some((message) => message.role === \"system\")) {\n throw new InvalidPromptError2({\n prompt,\n message: \"System messages are not allowed in the prompt or messages fields. Use the instructions option instead.\"\n });\n }\n const validationResult = await safeValidateTypes({\n value: messages,\n schema: z.array(modelMessageSchema)\n });\n if (!validationResult.success) {\n throw new InvalidPromptError2({\n prompt,\n message: \"The messages do not match the ModelMessage[] schema.\",\n cause: validationResult.error\n });\n }\n return { messages, instructions };\n}\n\n// src/prompt/wrap-gateway-error.ts\nimport { GatewayAuthenticationError } from \"@ai-sdk/gateway\";\nimport { AISDKError as AISDKError26 } from \"@ai-sdk/provider\";\nfunction wrapGatewayError(error) {\n if (!GatewayAuthenticationError.isInstance(error)) return error;\n const isProductionEnv = (process == null ? void 0 : process.env.NODE_ENV) === \"production\";\n const moreInfoURL = \"https://ai-sdk.dev/unauthenticated-ai-gateway\";\n if (isProductionEnv) {\n return new AISDKError26({\n name: \"GatewayError\",\n message: `Unauthenticated. Configure AI_GATEWAY_API_KEY or use a provider module. Learn more: ${moreInfoURL}`\n });\n }\n return Object.assign(\n new Error(`\\x1B[1m\\x1B[31mUnauthenticated request to AI Gateway.\\x1B[0m\n\nTo authenticate, set the \\x1B[33mAI_GATEWAY_API_KEY\\x1B[0m environment variable with your API key.\n\nAlternatively, you can use a provider module instead of the AI Gateway.\n\nLearn more: \\x1B[34m${moreInfoURL}\\x1B[0m\n\n`),\n { name: \"GatewayAuthenticationError\" }\n );\n}\n\n// src/types/usage.ts\nfunction asLanguageModelUsage(usage) {\n return {\n inputTokens: usage.inputTokens.total,\n inputTokenDetails: {\n noCacheTokens: usage.inputTokens.noCache,\n cacheReadTokens: usage.inputTokens.cacheRead,\n cacheWriteTokens: usage.inputTokens.cacheWrite\n },\n outputTokens: usage.outputTokens.total,\n outputTokenDetails: {\n textTokens: usage.outputTokens.text,\n reasoningTokens: usage.outputTokens.reasoning\n },\n totalTokens: addTokenCounts(\n usage.inputTokens.total,\n usage.outputTokens.total\n ),\n raw: usage.raw\n };\n}\nfunction createNullLanguageModelUsage() {\n return {\n inputTokens: void 0,\n inputTokenDetails: {\n noCacheTokens: void 0,\n cacheReadTokens: void 0,\n cacheWriteTokens: void 0\n },\n outputTokens: void 0,\n outputTokenDetails: {\n textTokens: void 0,\n reasoningTokens: void 0\n },\n totalTokens: void 0,\n raw: void 0\n };\n}\nfunction addLanguageModelUsage(usage1, usage2) {\n var _a25, _b25, _c, _d, _e, _f, _g, _h, _i, _j;\n return {\n inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),\n inputTokenDetails: {\n noCacheTokens: addTokenCounts(\n (_a25 = usage1.inputTokenDetails) == null ? void 0 : _a25.noCacheTokens,\n (_b25 = usage2.inputTokenDetails) == null ? void 0 : _b25.noCacheTokens\n ),\n cacheReadTokens: addTokenCounts(\n (_c = usage1.inputTokenDetails) == null ? void 0 : _c.cacheReadTokens,\n (_d = usage2.inputTokenDetails) == null ? void 0 : _d.cacheReadTokens\n ),\n cacheWriteTokens: addTokenCounts(\n (_e = usage1.inputTokenDetails) == null ? void 0 : _e.cacheWriteTokens,\n (_f = usage2.inputTokenDetails) == null ? void 0 : _f.cacheWriteTokens\n )\n },\n outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),\n outputTokenDetails: {\n textTokens: addTokenCounts(\n (_g = usage1.outputTokenDetails) == null ? void 0 : _g.textTokens,\n (_h = usage2.outputTokenDetails) == null ? void 0 : _h.textTokens\n ),\n reasoningTokens: addTokenCounts(\n (_i = usage1.outputTokenDetails) == null ? void 0 : _i.reasoningTokens,\n (_j = usage2.outputTokenDetails) == null ? void 0 : _j.reasoningTokens\n )\n },\n totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens)\n };\n}\nfunction addTokenCounts(tokenCount1, tokenCount2) {\n return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);\n}\nfunction addImageModelUsage(usage1, usage2) {\n return {\n inputTokens: addTokenCounts(usage1.inputTokens, usage2.inputTokens),\n outputTokens: addTokenCounts(usage1.outputTokens, usage2.outputTokens),\n totalTokens: addTokenCounts(usage1.totalTokens, usage2.totalTokens)\n };\n}\n\n// src/util/get-own.ts\nfunction getOwn(obj, key) {\n return obj != null && Object.hasOwn(obj, key) ? obj[key] : void 0;\n}\n\n// src/util/merge-abort-signals.ts\nimport { filterNullable } from \"@ai-sdk/provider-utils\";\nfunction mergeAbortSignals(...signals) {\n const validSignals = filterNullable(...signals).map(\n (signal) => signal instanceof AbortSignal ? signal : AbortSignal.timeout(signal)\n );\n return validSignals.length === 0 ? void 0 : validSignals.length === 1 ? validSignals[0] : AbortSignal.any(validSignals);\n}\n\n// src/util/now.ts\nfunction now() {\n var _a25, _b25;\n return (_b25 = (_a25 = globalThis == null ? void 0 : globalThis.performance) == null ? void 0 : _a25.now()) != null ? _b25 : Date.now();\n}\n\n// src/util/notify.ts\nimport { asArray as asArray3 } from \"@ai-sdk/provider-utils\";\nasync function notify(options) {\n await Promise.all(\n asArray3(options.callbacks).map(async (callback) => {\n try {\n await (callback == null ? void 0 : callback(options.event));\n } catch (e) {\n }\n })\n );\n}\n\n// src/util/retry-with-exponential-backoff.ts\nimport { APICallError as APICallError2 } from \"@ai-sdk/provider\";\nimport { GatewayError } from \"@ai-sdk/gateway\";\nimport {\n retryWithExponentialBackoff\n} from \"@ai-sdk/provider-utils\";\nfunction getRetryDelayInMs({\n error,\n exponentialBackoffDelay\n}) {\n const headers = APICallError2.isInstance(error) ? error.responseHeaders : APICallError2.isInstance(error.cause) ? error.cause.responseHeaders : void 0;\n if (!headers) return exponentialBackoffDelay;\n let ms;\n const retryAfterMs = headers[\"retry-after-ms\"];\n if (retryAfterMs) {\n const timeoutMs = parseFloat(retryAfterMs);\n if (!Number.isNaN(timeoutMs)) {\n ms = timeoutMs;\n }\n }\n const retryAfter = headers[\"retry-after\"];\n if (retryAfter && ms === void 0) {\n const timeoutSeconds = parseFloat(retryAfter);\n if (!Number.isNaN(timeoutSeconds)) {\n ms = timeoutSeconds * 1e3;\n } else {\n ms = Date.parse(retryAfter) - Date.now();\n }\n }\n if (ms != null && !Number.isNaN(ms) && 0 <= ms && (ms < 60 * 1e3 || ms < exponentialBackoffDelay)) {\n return ms;\n }\n return exponentialBackoffDelay;\n}\nvar retryWithExponentialBackoffRespectingRetryHeaders = ({\n maxRetries = 2,\n initialDelayInMs = 2e3,\n backoffFactor = 2,\n abortSignal\n} = {}) => retryWithExponentialBackoff({\n maxRetries,\n initialDelayInMs,\n backoffFactor,\n abortSignal,\n shouldRetry: (error) => error instanceof Error && (APICallError2.isInstance(error) && error.isRetryable === true || GatewayError.isInstance(error) && error.isRetryable === true),\n getDelayInMs: ({ error, exponentialBackoffDelay }) => getRetryDelayInMs({\n error,\n exponentialBackoffDelay\n }),\n createRetryError: ({ message, reason, errors }) => new RetryError({ message, reason, errors })\n});\n\n// src/util/prepare-retries.ts\nfunction prepareRetries({\n maxRetries,\n abortSignal\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 if (maxRetries < 0) {\n throw new InvalidArgumentError({\n parameter: \"maxRetries\",\n value: maxRetries,\n message: \"maxRetries must be >= 0\"\n });\n }\n }\n const maxRetriesResult = maxRetries != null ? maxRetries : 2;\n return {\n maxRetries: maxRetriesResult,\n retry: retryWithExponentialBackoffRespectingRetryHeaders({\n maxRetries: maxRetriesResult,\n abortSignal\n })\n };\n}\n\n// src/util/set-abort-timeout.ts\nfunction setAbortTimeout({\n abortController,\n label,\n timeoutMs\n}) {\n if (abortController == null || timeoutMs == null) {\n return void 0;\n }\n return setTimeout(\n () => abortController.abort(\n new DOMException(\n `${label} timeout of ${timeoutMs}ms exceeded`,\n \"TimeoutError\"\n )\n ),\n timeoutMs\n );\n}\n\n// src/generate-text/calculate-tokens-per-second.ts\nfunction calculateTokensPerSecond({\n tokens,\n durationMs\n}) {\n const tokenRate = 1e3 * (tokens != null ? tokens : 0) / (durationMs != null ? durationMs : 0);\n return Number.isFinite(tokenRate) ? tokenRate : 0;\n}\n\n// src/generate-text/collect-tool-approvals.ts\nfunction collectToolApprovals({\n messages\n}) {\n const lastMessage = messages.at(-1);\n if ((lastMessage == null ? void 0 : lastMessage.role) != \"tool\") {\n return {\n approvedToolApprovals: [],\n deniedToolApprovals: []\n };\n }\n const toolCallsByToolCallId = /* @__PURE__ */ Object.create(null);\n for (const message of messages) {\n if (message.role === \"assistant\" && typeof message.content !== \"string\") {\n const content = message.content;\n for (const part of content) {\n if (part.type === \"tool-call\") {\n toolCallsByToolCallId[part.toolCallId] = part;\n }\n }\n }\n }\n const toolApprovalRequestsByApprovalId = /* @__PURE__ */ Object.create(null);\n for (const message of messages) {\n if (message.role === \"assistant\" && typeof message.content !== \"string\") {\n const content = message.content;\n for (const part of content) {\n if (part.type === \"tool-approval-request\") {\n toolApprovalRequestsByApprovalId[part.approvalId] = part;\n }\n }\n }\n }\n const toolResults = /* @__PURE__ */ Object.create(null);\n for (const part of lastMessage.content) {\n if (part.type === \"tool-result\") {\n toolResults[part.toolCallId] = part;\n }\n }\n const approvedToolApprovals = [];\n const deniedToolApprovals = [];\n const approvalResponses = lastMessage.content.filter(\n (part) => part.type === \"tool-approval-response\"\n );\n for (const approvalResponse of approvalResponses) {\n const approvalRequest = toolApprovalRequestsByApprovalId[approvalResponse.approvalId];\n if (approvalRequest == null) {\n throw new InvalidToolApprovalError({\n approvalId: approvalResponse.approvalId\n });\n }\n const existingToolResult = toolResults[approvalRequest.toolCallId];\n if (existingToolResult != null && (approvalResponse.approved || existingToolResult.output.type !== \"execution-denied\")) {\n continue;\n }\n const toolCall = toolCallsByToolCallId[approvalRequest.toolCallId];\n if (toolCall == null) {\n throw new ToolCallNotFoundForApprovalError({\n toolCallId: approvalRequest.toolCallId,\n approvalId: approvalRequest.approvalId\n });\n }\n const approval = {\n approvalRequest,\n approvalResponse,\n toolCall,\n ...existingToolResult != null ? { existingToolResult } : {}\n };\n if (approvalResponse.approved) {\n approvedToolApprovals.push(approval);\n } else {\n deniedToolApprovals.push(approval);\n }\n }\n return { approvedToolApprovals, deniedToolApprovals };\n}\n\n// src/generate-text/generated-file.ts\nimport {\n convertBase64ToUint8Array,\n convertUint8ArrayToBase64\n} from \"@ai-sdk/provider-utils\";\nvar DefaultGeneratedFile = class {\n constructor({\n data,\n mediaType,\n providerMetadata\n }) {\n const isUint8Array = data instanceof Uint8Array;\n this.base64Data = isUint8Array ? void 0 : data;\n this.uint8ArrayData = isUint8Array ? data : void 0;\n this.mediaType = mediaType;\n this.providerMetadata = providerMetadata;\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 // 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};\nvar DefaultGeneratedFileWithType = class extends DefaultGeneratedFile {\n constructor(options) {\n super(options);\n this.type = \"file\";\n }\n};\n\n// src/generate-text/convert-language-model-content.ts\nfunction convertLanguageModelContent({\n content,\n toolCalls,\n toolOutputs,\n toolApprovalRequests,\n toolApprovalResponses,\n tools\n}) {\n const contentParts = [];\n const toolOutputsWithApprovalResponses = [];\n const toolOutputsWithoutApprovalResponses = [];\n const toolCallIdsWithApprovalResponses = new Set(\n toolApprovalResponses.map(\n (toolApprovalResponse) => toolApprovalResponse.toolCall.toolCallId\n )\n );\n for (const part of content) {\n switch (part.type) {\n case \"text\":\n case \"reasoning\":\n case \"custom\":\n case \"source\":\n contentParts.push(part);\n break;\n case \"file\":\n case \"reasoning-file\": {\n contentParts.push({\n type: part.type,\n file: new DefaultGeneratedFile({\n data: part.data.type === \"data\" ? part.data.data : part.data.url.toString(),\n mediaType: part.mediaType\n }),\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n });\n break;\n }\n case \"tool-call\": {\n const toolCall = toolCalls.find(\n (toolCall2) => toolCall2.toolCallId === part.toolCallId\n );\n if (toolCall == null) {\n throw new Error(`Tool call ${part.toolCallId} not found.`);\n }\n contentParts.push(toolCall);\n break;\n }\n case \"tool-result\": {\n const toolCall = toolCalls.find(\n (toolCall2) => toolCall2.toolCallId === part.toolCallId\n );\n if (toolCall == null) {\n const tool2 = getOwn(tools, part.toolName);\n const supportsDeferredResults = (tool2 == null ? void 0 : tool2.type) === \"provider\" && tool2.supportsDeferredResults;\n if (!supportsDeferredResults) {\n throw new Error(`Tool call ${part.toolCallId} not found.`);\n }\n if (part.isError) {\n contentParts.push({\n type: \"tool-error\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: void 0,\n error: part.result,\n providerExecuted: true,\n dynamic: part.dynamic,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n ...(tool2 == null ? void 0 : tool2.metadata) != null ? { toolMetadata: tool2.metadata } : {}\n });\n } else {\n contentParts.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: void 0,\n output: part.result,\n providerExecuted: true,\n dynamic: part.dynamic,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n ...(tool2 == null ? void 0 : tool2.metadata) != null ? { toolMetadata: tool2.metadata } : {}\n });\n }\n break;\n }\n if (part.isError) {\n contentParts.push({\n type: \"tool-error\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: toolCall.input,\n error: part.result,\n providerExecuted: true,\n dynamic: toolCall.dynamic,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n ...toolCall.toolMetadata != null ? { toolMetadata: toolCall.toolMetadata } : {}\n });\n } else {\n contentParts.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: toolCall.input,\n output: part.result,\n providerExecuted: true,\n dynamic: toolCall.dynamic,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n ...toolCall.toolMetadata != null ? { toolMetadata: toolCall.toolMetadata } : {}\n });\n }\n break;\n }\n case \"tool-approval-request\": {\n const toolCall = toolCalls.find(\n (toolCall2) => toolCall2.toolCallId === part.toolCallId\n );\n if (toolCall == null) {\n throw new ToolCallNotFoundForApprovalError({\n toolCallId: part.toolCallId,\n approvalId: part.approvalId\n });\n }\n contentParts.push({\n type: \"tool-approval-request\",\n approvalId: part.approvalId,\n toolCall\n });\n break;\n }\n }\n }\n for (const toolOutput of toolOutputs) {\n if (toolCallIdsWithApprovalResponses.has(toolOutput.toolCallId)) {\n toolOutputsWithApprovalResponses.push(toolOutput);\n } else {\n toolOutputsWithoutApprovalResponses.push(toolOutput);\n }\n }\n return [\n ...contentParts,\n ...toolOutputsWithoutApprovalResponses,\n ...toolApprovalRequests,\n ...toolApprovalResponses,\n ...toolOutputsWithApprovalResponses\n ];\n}\n\n// src/generate-text/execute-tool-call.ts\nimport {\n executeTool,\n isExecutableTool\n} from \"@ai-sdk/provider-utils\";\n\n// src/generate-text/validate-tool-context.ts\nimport { validateTypes } from \"@ai-sdk/provider-utils\";\nasync function validateToolContext({\n toolName,\n context,\n contextSchema\n}) {\n if (contextSchema == null) {\n return context;\n }\n return await validateTypes({\n value: context,\n schema: contextSchema,\n context: {\n field: \"tool context\",\n entityName: toolName\n }\n });\n}\n\n// src/generate-text/execute-tool-call.ts\nasync function executeToolCall({\n toolCall,\n tools,\n toolsContext,\n callId,\n messages,\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n onPreliminaryToolResult,\n onToolExecutionStart,\n onToolExecutionEnd,\n executeToolInTelemetryContext = async ({ execute }) => await execute(),\n runInTracingChannelSpan = async ({ execute }) => await execute()\n}) {\n const { toolName, toolCallId, input } = toolCall;\n const tool2 = getOwn(tools, toolName);\n if (!isExecutableTool(tool2)) {\n return void 0;\n }\n const context = await validateToolContext({\n toolName,\n context: getOwn(toolsContext, toolName),\n contextSchema: tool2.contextSchema\n });\n const toolExecutionContext = {\n toolCall,\n messages,\n toolContext: context\n };\n const baseCallbackEvent = {\n callId,\n ...toolExecutionContext\n };\n return await runInTracingChannelSpan({\n type: \"executeTool\",\n event: baseCallbackEvent,\n execute: async () => {\n let output;\n await notify({\n event: baseCallbackEvent,\n callbacks: onToolExecutionStart\n });\n const toolTimeoutMs = getToolTimeoutMs(timeout, toolName);\n const toolAbortSignal = mergeAbortSignals(abortSignal, toolTimeoutMs);\n let toolExecutionMs = 0;\n try {\n await executeToolInTelemetryContext({\n callId,\n toolCallId,\n ...toolExecutionContext,\n execute: async () => {\n const startTime = now();\n try {\n const stream = executeTool({\n tool: tool2,\n input,\n options: {\n toolCallId,\n messages,\n abortSignal: toolAbortSignal,\n context,\n experimental_sandbox: sandbox\n }\n });\n for await (const part of stream) {\n if (part.type === \"preliminary\") {\n onPreliminaryToolResult == null ? void 0 : onPreliminaryToolResult({\n ...toolCall,\n type: \"tool-result\",\n output: part.output,\n preliminary: true\n });\n } else {\n output = part.output;\n }\n }\n } finally {\n toolExecutionMs = now() - startTime;\n }\n }\n });\n } catch (error) {\n const toolError = {\n type: \"tool-error\",\n toolCallId,\n toolName,\n input,\n error,\n dynamic: tool2.type === \"dynamic\",\n ...toolCall.providerMetadata != null ? { providerMetadata: toolCall.providerMetadata } : {},\n ...toolCall.toolMetadata != null ? { toolMetadata: toolCall.toolMetadata } : {}\n };\n await notify({\n event: {\n ...baseCallbackEvent,\n toolOutput: toolError,\n toolExecutionMs\n },\n callbacks: onToolExecutionEnd\n });\n return {\n output: toolError,\n toolExecutionMs\n };\n }\n const toolResult = {\n type: \"tool-result\",\n toolCallId,\n toolName,\n input,\n output,\n dynamic: tool2.type === \"dynamic\",\n ...toolCall.providerMetadata != null ? { providerMetadata: toolCall.providerMetadata } : {},\n ...toolCall.toolMetadata != null ? { toolMetadata: toolCall.toolMetadata } : {}\n };\n await notify({\n event: {\n ...baseCallbackEvent,\n toolOutput: toolResult,\n toolExecutionMs\n },\n callbacks: onToolExecutionEnd\n });\n return {\n output: toolResult,\n toolExecutionMs\n };\n }\n });\n}\n\n// src/generate-text/filter-active-tools.ts\nfunction filterActiveTools({\n tools,\n activeTools\n}) {\n if (tools == null || activeTools == null) {\n return tools;\n }\n return Object.fromEntries(\n Object.entries(tools).filter(([name25]) => activeTools.includes(name25))\n );\n}\n\n// src/generate-text/is-tool-execution-allowed-finish-reason.ts\nfunction isToolExecutionAllowedFinishReason(finishReason) {\n return finishReason === \"stop\" || finishReason === \"tool-calls\";\n}\n\n// src/generate-text/output.ts\nvar output_exports = {};\n__export(output_exports, {\n array: () => array2,\n choice: () => choice,\n json: () => json,\n object: () => object2,\n text: () => text\n});\nimport {\n TypeValidationError as TypeValidationError2\n} from \"@ai-sdk/provider\";\nimport {\n asSchema as asSchema2,\n resolve,\n safeParseJSON as safeParseJSON2,\n safeValidateTypes as safeValidateTypes2\n} from \"@ai-sdk/provider-utils\";\n\n// src/util/parse-partial-json.ts\nimport { safeParseJSON } from \"@ai-sdk/provider-utils\";\n\n// src/util/fix-json.ts\nfunction fixJson(input) {\n const stack = [\"ROOT\"];\n let lastValidIndex = -1;\n let literalStart = null;\n let unicodeEscapeDigits = 0;\n function isHexDigit(char) {\n return char >= \"0\" && char <= \"9\" || char >= \"A\" && char <= \"F\" || char >= \"a\" && char <= \"f\";\n }\n function processValueStart(char, i, swapState) {\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 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 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 case \"{\": {\n lastValidIndex = i;\n stack.pop();\n stack.push(swapState);\n stack.push(\"INSIDE_OBJECT_START\");\n break;\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 function processAfterObjectValue(char, i) {\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 function processAfterArrayValue(char, i) {\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 for (let i = 0; i < input.length; i++) {\n const char = input[i];\n const currentState = stack[stack.length - 1];\n switch (currentState) {\n case \"ROOT\":\n processValueStart(char, i, \"FINISH\");\n break;\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 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 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 case \"INSIDE_OBJECT_AFTER_KEY\": {\n switch (char) {\n case \":\": {\n stack.pop();\n stack.push(\"INSIDE_OBJECT_BEFORE_VALUE\");\n break;\n }\n }\n break;\n }\n case \"INSIDE_OBJECT_BEFORE_VALUE\": {\n processValueStart(char, i, \"INSIDE_OBJECT_AFTER_VALUE\");\n break;\n }\n case \"INSIDE_OBJECT_AFTER_VALUE\": {\n processAfterObjectValue(char, i);\n break;\n }\n case \"INSIDE_STRING\": {\n switch (char) {\n case '\"': {\n stack.pop();\n lastValidIndex = i;\n break;\n }\n case \"\\\\\": {\n stack.push(\"INSIDE_STRING_ESCAPE\");\n break;\n }\n default: {\n lastValidIndex = i;\n }\n }\n break;\n }\n case \"INSIDE_ARRAY_START\": {\n switch (char) {\n case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n default: {\n lastValidIndex = i;\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n }\n break;\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 case \"]\": {\n lastValidIndex = i;\n stack.pop();\n break;\n }\n default: {\n lastValidIndex = i;\n break;\n }\n }\n break;\n }\n case \"INSIDE_ARRAY_AFTER_COMMA\": {\n processValueStart(char, i, \"INSIDE_ARRAY_AFTER_VALUE\");\n break;\n }\n case \"INSIDE_STRING_ESCAPE\": {\n stack.pop();\n if (char === \"u\") {\n unicodeEscapeDigits = 0;\n stack.push(\"INSIDE_STRING_UNICODE_ESCAPE\");\n } else {\n lastValidIndex = i;\n }\n break;\n }\n case \"INSIDE_STRING_UNICODE_ESCAPE\": {\n if (isHexDigit(char)) {\n unicodeEscapeDigits++;\n if (unicodeEscapeDigits === 4) {\n stack.pop();\n lastValidIndex = i;\n }\n }\n break;\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 case \"e\":\n case \"E\":\n case \"-\":\n case \".\": {\n break;\n }\n case \",\": {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n break;\n }\n case \"}\": {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_OBJECT_AFTER_VALUE\") {\n processAfterObjectValue(char, i);\n }\n break;\n }\n case \"]\": {\n stack.pop();\n if (stack[stack.length - 1] === \"INSIDE_ARRAY_AFTER_VALUE\") {\n processAfterArrayValue(char, i);\n }\n break;\n }\n default: {\n stack.pop();\n break;\n }\n }\n break;\n }\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart, i + 1);\n if (!\"false\".startsWith(partialLiteral) && !\"true\".startsWith(partialLiteral) && !\"null\".startsWith(partialLiteral)) {\n stack.pop();\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 break;\n }\n }\n }\n let result = input.slice(0, lastValidIndex + 1);\n for (let i = stack.length - 1; i >= 0; i--) {\n const state = stack[i];\n switch (state) {\n case \"INSIDE_STRING\": {\n result += '\"';\n break;\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 case \"INSIDE_ARRAY_START\":\n case \"INSIDE_ARRAY_AFTER_COMMA\":\n case \"INSIDE_ARRAY_AFTER_VALUE\": {\n result += \"]\";\n break;\n }\n case \"INSIDE_LITERAL\": {\n const partialLiteral = input.substring(literalStart, input.length);\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 return result;\n}\n\n// src/util/parse-partial-json.ts\nasync function parsePartialJson(jsonText) {\n if (jsonText === void 0) {\n return { value: void 0, state: \"undefined-input\" };\n }\n let result = await safeParseJSON({ text: jsonText });\n if (result.success) {\n return { value: result.value, state: \"successful-parse\" };\n }\n result = await safeParseJSON({ text: fixJson(jsonText) });\n if (result.success) {\n return { value: result.value, state: \"repaired-parse\" };\n }\n return { value: void 0, state: \"failed-parse\" };\n}\n\n// src/generate-text/output.ts\nvar text = () => ({\n name: \"text\",\n responseFormat: Promise.resolve({ type: \"text\" }),\n async parseCompleteOutput({ text: text2 }) {\n return text2;\n },\n async parsePartialOutput({ text: text2 }) {\n return { partial: text2 };\n },\n createElementStreamTransform() {\n return void 0;\n }\n});\nvar object2 = ({\n schema: inputSchema,\n name: name25,\n description\n}) => {\n const schema = asSchema2(inputSchema);\n return {\n name: \"object\",\n responseFormat: resolve(schema.jsonSchema).then((jsonSchema2) => ({\n type: \"json\",\n schema: jsonSchema2,\n ...name25 != null && { name: name25 },\n ...description != null && { description }\n })),\n async parseCompleteOutput({ text: text2 }, context) {\n const parseResult = await safeParseJSON2({ text: text2 });\n if (!parseResult.success) {\n throw new NoObjectGeneratedError({\n message: \"No object generated: could not parse the response.\",\n cause: parseResult.error,\n text: text2,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n const validationResult = await safeValidateTypes2({\n value: parseResult.value,\n schema\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: text2,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n return validationResult.value;\n },\n async parsePartialOutput({ text: text2 }) {\n const result = await parsePartialJson(text2);\n switch (result.state) {\n case \"failed-parse\":\n case \"undefined-input\": {\n return void 0;\n }\n case \"repaired-parse\":\n case \"successful-parse\": {\n return {\n // Note: currently no validation of partial results:\n partial: result.value\n };\n }\n }\n },\n createElementStreamTransform() {\n return void 0;\n }\n };\n};\nvar array2 = ({\n element: inputElementSchema,\n name: name25,\n description\n}) => {\n const elementSchema = asSchema2(inputElementSchema);\n return {\n name: \"array\",\n // JSON schema that describes an array of elements:\n responseFormat: resolve(elementSchema.jsonSchema).then((jsonSchema2) => {\n const {\n $schema: _$schema,\n definitions,\n $defs,\n ...itemSchema\n } = jsonSchema2;\n return {\n type: \"json\",\n schema: {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n ...definitions != null && { definitions },\n ...$defs != null && { $defs },\n type: \"object\",\n properties: {\n elements: { type: \"array\", items: itemSchema }\n },\n required: [\"elements\"],\n additionalProperties: false\n },\n ...name25 != null && { name: name25 },\n ...description != null && { description }\n };\n }),\n async parseCompleteOutput({ text: text2 }, context) {\n const parseResult = await safeParseJSON2({ text: text2 });\n if (!parseResult.success) {\n throw new NoObjectGeneratedError({\n message: \"No object generated: could not parse the response.\",\n cause: parseResult.error,\n text: text2,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n const outerValue = parseResult.value;\n if (outerValue == null || typeof outerValue !== \"object\" || !(\"elements\" in outerValue) || !Array.isArray(outerValue.elements)) {\n throw new NoObjectGeneratedError({\n message: \"No object generated: response did not match schema.\",\n cause: new TypeValidationError2({\n value: outerValue,\n cause: \"response must be an object with an elements array\"\n }),\n text: text2,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n const validatedElements = [];\n for (const element of outerValue.elements) {\n const validationResult = await safeValidateTypes2({\n value: element,\n schema: elementSchema\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: text2,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n validatedElements.push(validationResult.value);\n }\n return validatedElements;\n },\n async parsePartialOutput({ text: text2 }) {\n const result = await parsePartialJson(text2);\n switch (result.state) {\n case \"failed-parse\":\n case \"undefined-input\": {\n return void 0;\n }\n case \"repaired-parse\":\n case \"successful-parse\": {\n const outerValue = result.value;\n if (outerValue == null || typeof outerValue !== \"object\" || !(\"elements\" in outerValue) || !Array.isArray(outerValue.elements)) {\n return void 0;\n }\n const rawElements = result.state === \"repaired-parse\" && outerValue.elements.length > 0 ? outerValue.elements.slice(0, -1) : outerValue.elements;\n const parsedElements = [];\n for (const rawElement of rawElements) {\n const validationResult = await safeValidateTypes2({\n value: rawElement,\n schema: elementSchema\n });\n if (validationResult.success) {\n parsedElements.push(validationResult.value);\n }\n }\n return { partial: parsedElements };\n }\n }\n },\n createElementStreamTransform() {\n let publishedElements = 0;\n return new TransformStream({\n transform({ partialOutput }, controller) {\n if (partialOutput != null) {\n for (; publishedElements < partialOutput.length; publishedElements++) {\n controller.enqueue(partialOutput[publishedElements]);\n }\n }\n }\n });\n }\n };\n};\nvar choice = ({\n options: choiceOptions,\n name: name25,\n description\n}) => {\n return {\n name: \"choice\",\n // JSON schema that describes an enumeration:\n responseFormat: Promise.resolve({\n type: \"json\",\n schema: {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n type: \"object\",\n properties: {\n result: { type: \"string\", enum: choiceOptions }\n },\n required: [\"result\"],\n additionalProperties: false\n },\n ...name25 != null && { name: name25 },\n ...description != null && { description }\n }),\n async parseCompleteOutput({ text: text2 }, context) {\n const parseResult = await safeParseJSON2({ text: text2 });\n if (!parseResult.success) {\n throw new NoObjectGeneratedError({\n message: \"No object generated: could not parse the response.\",\n cause: parseResult.error,\n text: text2,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n const outerValue = parseResult.value;\n if (outerValue == null || typeof outerValue !== \"object\" || !(\"result\" in outerValue) || typeof outerValue.result !== \"string\" || !choiceOptions.includes(outerValue.result)) {\n throw new NoObjectGeneratedError({\n message: \"No object generated: response did not match schema.\",\n cause: new TypeValidationError2({\n value: outerValue,\n cause: \"response must be an object that contains a choice value.\"\n }),\n text: text2,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n return outerValue.result;\n },\n async parsePartialOutput({ text: text2 }) {\n const result = await parsePartialJson(text2);\n switch (result.state) {\n case \"failed-parse\":\n case \"undefined-input\": {\n return void 0;\n }\n case \"repaired-parse\":\n case \"successful-parse\": {\n const outerValue = result.value;\n if (outerValue == null || typeof outerValue !== \"object\" || !(\"result\" in outerValue) || typeof outerValue.result !== \"string\") {\n return void 0;\n }\n const potentialMatches = choiceOptions.filter(\n (choiceOption) => choiceOption.startsWith(outerValue.result)\n );\n if (result.state === \"successful-parse\") {\n return potentialMatches.includes(outerValue.result) ? { partial: outerValue.result } : void 0;\n } else {\n return potentialMatches.length === 1 ? { partial: potentialMatches[0] } : void 0;\n }\n }\n }\n },\n createElementStreamTransform() {\n return void 0;\n }\n };\n};\nvar json = ({\n name: name25,\n description\n} = {}) => {\n return {\n name: \"json\",\n responseFormat: Promise.resolve({\n type: \"json\",\n ...name25 != null && { name: name25 },\n ...description != null && { description }\n }),\n async parseCompleteOutput({ text: text2 }, context) {\n const parseResult = await safeParseJSON2({ text: text2 });\n if (!parseResult.success) {\n throw new NoObjectGeneratedError({\n message: \"No object generated: could not parse the response.\",\n cause: parseResult.error,\n text: text2,\n response: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n return parseResult.value;\n },\n async parsePartialOutput({ text: text2 }) {\n const result = await parsePartialJson(text2);\n switch (result.state) {\n case \"failed-parse\":\n case \"undefined-input\": {\n return void 0;\n }\n case \"repaired-parse\":\n case \"successful-parse\": {\n return result.value === void 0 ? void 0 : { partial: result.value };\n }\n }\n },\n createElementStreamTransform() {\n return void 0;\n }\n };\n};\n\n// src/generate-text/parse-tool-call.ts\nimport {\n asSchema as asSchema3,\n safeParseJSON as safeParseJSON3,\n safeValidateTypes as safeValidateTypes3\n} from \"@ai-sdk/provider-utils\";\nasync function parseToolCall({\n toolCall,\n tools,\n repairToolCall,\n refineToolInput,\n messages,\n instructions\n}) {\n try {\n if (tools == null) {\n if (toolCall.providerExecuted && toolCall.dynamic) {\n return await refineParsedToolCallInput({\n toolCall: await parseProviderExecutedDynamicToolCall(toolCall),\n refineToolInput\n });\n }\n throw new NoSuchToolError({ toolName: toolCall.toolName });\n }\n try {\n return await refineParsedToolCallInput({\n toolCall: await doParseToolCall({ toolCall, tools }),\n refineToolInput\n });\n } catch (error) {\n if (repairToolCall == null || !(NoSuchToolError.isInstance(error) || InvalidToolInputError.isInstance(error))) {\n throw error;\n }\n let repairedToolCall = null;\n try {\n repairedToolCall = await repairToolCall({\n toolCall,\n tools,\n inputSchema: async ({ toolName }) => {\n var _a25;\n const inputSchema = (_a25 = getOwn(tools, toolName)) == null ? void 0 : _a25.inputSchema;\n return await asSchema3(inputSchema).jsonSchema;\n },\n instructions,\n system: instructions,\n messages,\n error\n });\n } catch (repairError) {\n throw new ToolCallRepairError({\n cause: repairError,\n originalError: error\n });\n }\n if (repairedToolCall == null) {\n throw error;\n }\n return await refineParsedToolCallInput({\n toolCall: await doParseToolCall({ toolCall: repairedToolCall, tools }),\n refineToolInput\n });\n }\n } catch (error) {\n const parsedInput = await safeParseJSON3({ text: toolCall.input });\n const input = parsedInput.success ? parsedInput.value : toolCall.input;\n const tool2 = getOwn(tools, toolCall.toolName);\n return {\n type: \"tool-call\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input,\n dynamic: true,\n invalid: true,\n error,\n title: tool2 == null ? void 0 : tool2.title,\n providerExecuted: toolCall.providerExecuted,\n providerMetadata: toolCall.providerMetadata,\n ...(tool2 == null ? void 0 : tool2.metadata) != null ? { toolMetadata: tool2.metadata } : {}\n };\n }\n}\nasync function refineParsedToolCallInput({\n toolCall,\n refineToolInput\n}) {\n const refine = getOwn(refineToolInput, toolCall.toolName);\n if (refine == null) {\n return toolCall;\n }\n return {\n ...toolCall,\n input: await refine(toolCall.input)\n };\n}\nasync function parseProviderExecutedDynamicToolCall(toolCall) {\n const parseResult = toolCall.input.trim() === \"\" ? { success: true, value: {} } : await safeParseJSON3({ text: toolCall.input });\n if (parseResult.success === false) {\n throw new InvalidToolInputError({\n toolName: toolCall.toolName,\n toolInput: toolCall.input,\n cause: parseResult.error\n });\n }\n return {\n type: \"tool-call\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: parseResult.value,\n providerExecuted: true,\n dynamic: true,\n providerMetadata: toolCall.providerMetadata\n };\n}\nasync function doParseToolCall({\n toolCall,\n tools\n}) {\n const toolName = toolCall.toolName;\n const tool2 = getOwn(tools, toolName);\n if (tool2 == null) {\n if (toolCall.providerExecuted && toolCall.dynamic) {\n return await parseProviderExecutedDynamicToolCall(toolCall);\n }\n throw new NoSuchToolError({\n toolName: toolCall.toolName,\n availableTools: Object.keys(tools)\n });\n }\n const schema = asSchema3(tool2.inputSchema);\n const parseResult = toolCall.input.trim() === \"\" ? await safeValidateTypes3({ value: {}, schema }) : await safeParseJSON3({ text: toolCall.input, schema });\n if (parseResult.success === false) {\n throw new InvalidToolInputError({\n toolName,\n toolInput: toolCall.input,\n cause: parseResult.error\n });\n }\n return tool2.type === \"dynamic\" ? {\n type: \"tool-call\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: parseResult.value,\n providerExecuted: toolCall.providerExecuted,\n providerMetadata: toolCall.providerMetadata,\n ...tool2.metadata != null ? { toolMetadata: tool2.metadata } : {},\n dynamic: true,\n title: tool2.title\n } : {\n type: \"tool-call\",\n toolCallId: toolCall.toolCallId,\n toolName,\n input: parseResult.value,\n providerExecuted: toolCall.providerExecuted,\n providerMetadata: toolCall.providerMetadata,\n ...tool2.metadata != null ? { toolMetadata: tool2.metadata } : {},\n title: tool2.title\n };\n}\n\n// src/generate-text/prepare-step-call-settings.ts\nfunction prepareStepCallSettings({\n callSettings,\n stepSettings\n}) {\n var _a25, _b25, _c, _d, _e, _f, _g, _h, _i;\n return prepareLanguageModelCallOptions({\n maxOutputTokens: (_a25 = stepSettings == null ? void 0 : stepSettings.maxOutputTokens) != null ? _a25 : callSettings.maxOutputTokens,\n temperature: (_b25 = stepSettings == null ? void 0 : stepSettings.temperature) != null ? _b25 : callSettings.temperature,\n topP: (_c = stepSettings == null ? void 0 : stepSettings.topP) != null ? _c : callSettings.topP,\n topK: (_d = stepSettings == null ? void 0 : stepSettings.topK) != null ? _d : callSettings.topK,\n presencePenalty: (_e = stepSettings == null ? void 0 : stepSettings.presencePenalty) != null ? _e : callSettings.presencePenalty,\n frequencyPenalty: (_f = stepSettings == null ? void 0 : stepSettings.frequencyPenalty) != null ? _f : callSettings.frequencyPenalty,\n stopSequences: (_g = stepSettings == null ? void 0 : stepSettings.stopSequences) != null ? _g : callSettings.stopSequences,\n seed: (_h = stepSettings == null ? void 0 : stepSettings.seed) != null ? _h : callSettings.seed,\n reasoning: (_i = stepSettings == null ? void 0 : stepSettings.reasoning) != null ? _i : callSettings.reasoning\n });\n}\n\n// src/generate-text/reasoning-output.ts\nfunction unwrapReasoningFileData(data) {\n if (typeof data === \"object\" && data !== null && \"type\" in data) {\n return data.type === \"data\" ? data.data : data.url;\n }\n return data;\n}\nfunction convertFromReasoningOutputs(parts) {\n return parts.map((part) => {\n if (part.type === \"reasoning\") {\n return {\n type: \"reasoning\",\n text: part.text,\n ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n };\n }\n return {\n type: \"reasoning-file\",\n data: part.file.base64,\n mediaType: part.file.mediaType,\n ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n };\n });\n}\nfunction convertToReasoningOutputs(parts) {\n return parts.map((part) => {\n if (part.type === \"reasoning\") {\n return {\n type: \"reasoning\",\n text: part.text,\n ...part.providerOptions != null ? { providerMetadata: part.providerOptions } : {}\n };\n }\n const rawData = unwrapReasoningFileData(part.data);\n const fileData = rawData instanceof ArrayBuffer ? new Uint8Array(rawData) : rawData instanceof URL ? rawData.toString() : rawData;\n return {\n type: \"reasoning-file\",\n file: new DefaultGeneratedFile({\n data: fileData,\n mediaType: part.mediaType\n }),\n ...part.providerOptions != null ? { providerMetadata: part.providerOptions } : {}\n };\n });\n}\n\n// src/generate-text/resolve-tool-approval.ts\nasync function resolveToolApproval({\n tools,\n toolCall,\n toolApproval,\n messages,\n toolsContext,\n runtimeContext\n}) {\n if (toolApproval != null && typeof toolApproval === \"function\") {\n return normalizeToolApprovalStatus(\n await toolApproval({\n toolCall,\n tools,\n toolsContext,\n messages,\n runtimeContext\n })\n );\n }\n const toolName = toolCall.toolName;\n const tool2 = getOwn(tools, toolName);\n const input = toolCall.input;\n const userDefinedToolApprovalStatus = getOwn(toolApproval, toolName);\n if (userDefinedToolApprovalStatus != null) {\n const approvalStatus = typeof userDefinedToolApprovalStatus === \"function\" ? await userDefinedToolApprovalStatus(input, {\n toolCallId: toolCall.toolCallId,\n messages,\n toolContext: await validateToolContext({\n toolName,\n context: getOwn(toolsContext, toolName),\n contextSchema: tool2 == null ? void 0 : tool2.contextSchema\n }),\n runtimeContext\n }) : userDefinedToolApprovalStatus;\n return normalizeToolApprovalStatus(approvalStatus);\n }\n if ((tool2 == null ? void 0 : tool2.needsApproval) == null) {\n return { type: \"not-applicable\" };\n }\n const needsApproval = typeof tool2.needsApproval === \"function\" ? await tool2.needsApproval(input, {\n toolCallId: toolCall.toolCallId,\n messages,\n context: await validateToolContext({\n toolName,\n context: getOwn(toolsContext, toolName),\n contextSchema: tool2 == null ? void 0 : tool2.contextSchema\n })\n }) : tool2.needsApproval;\n return needsApproval ? { type: \"user-approval\" } : { type: \"not-applicable\" };\n}\nfunction normalizeToolApprovalStatus(status) {\n return status === void 0 ? { type: \"not-applicable\" } : typeof status === \"string\" ? { type: status } : status;\n}\n\n// src/telemetry/create-telemetry-dispatcher.ts\nimport { asArray as asArray4 } from \"@ai-sdk/provider-utils\";\n\n// src/util/merge-callbacks.ts\nfunction mergeCallbacks(...callbacks) {\n return async (event) => {\n await Promise.allSettled(\n callbacks.map(async (callback) => {\n await (callback == null ? void 0 : callback(event));\n })\n );\n };\n}\n\n// src/telemetry/tracing-channel.ts\nvar AI_SDK_TELEMETRY_TRACING_CHANNEL = \"ai:telemetry\";\n\n// src/util/is-node-runtime.ts\nfunction isNodeRuntime() {\n var _a25;\n return typeof process !== \"undefined\" && ((_a25 = process.release) == null ? void 0 : _a25.name) === \"node\";\n}\n\n// src/telemetry/tracing-channel-publisher.ts\nvar diagnosticsChannelPromise;\nasync function loadDiagnosticsChannel() {\n if (!isNodeRuntime()) {\n return void 0;\n }\n if (diagnosticsChannelPromise == null) {\n diagnosticsChannelPromise = Promise.resolve(\n loadBuiltinModule(\"node:diagnostics_channel\")\n );\n }\n return diagnosticsChannelPromise;\n}\nfunction loadBuiltinModule(id) {\n var _a25;\n const processWithBuiltins = globalThis.process;\n try {\n return (_a25 = processWithBuiltins == null ? void 0 : processWithBuiltins.getBuiltinModule) == null ? void 0 : _a25.call(processWithBuiltins, id);\n } catch (e) {\n return void 0;\n }\n}\nasync function runWithTracingChannelSpan(message, execute) {\n var _a25;\n const diagnosticsChannel = await loadDiagnosticsChannel();\n const tracingChannel = (_a25 = diagnosticsChannel == null ? void 0 : diagnosticsChannel.tracingChannel) == null ? void 0 : _a25.call(\n diagnosticsChannel,\n AI_SDK_TELEMETRY_TRACING_CHANNEL\n );\n if (tracingChannel == null || tracingChannel.hasSubscribers === false) {\n return await execute();\n }\n let executePromise;\n let executionResult;\n let executionError;\n let hasExecutionResult = false;\n let hasExecutionError = false;\n const tracedExecute = () => {\n try {\n executePromise = Promise.resolve(execute());\n } catch (error) {\n executePromise = Promise.reject(error);\n }\n executePromise = executePromise.then(\n (result) => {\n executionResult = result;\n hasExecutionResult = true;\n return result;\n },\n (error) => {\n executionError = error;\n hasExecutionError = true;\n throw error;\n }\n );\n return executePromise;\n };\n try {\n return await tracingChannel.tracePromise(tracedExecute, message);\n } catch (e) {\n if (hasExecutionError) {\n throw executionError;\n }\n if (hasExecutionResult) {\n return executionResult;\n }\n if (executePromise != null) {\n return await executePromise;\n }\n return await execute();\n }\n}\nfunction openTelemetryChannelSpanContext({\n message,\n completion\n}) {\n var _a25;\n if (!isNodeRuntime()) {\n return void 0;\n }\n const diagnosticsChannel = loadBuiltinModule(\n \"node:diagnostics_channel\"\n );\n const asyncHooks = loadBuiltinModule(\"node:async_hooks\");\n const tracingChannel = (_a25 = diagnosticsChannel == null ? void 0 : diagnosticsChannel.tracingChannel) == null ? void 0 : _a25.call(\n diagnosticsChannel,\n AI_SDK_TELEMETRY_TRACING_CHANNEL\n );\n if (tracingChannel == null || tracingChannel.hasSubscribers === false || asyncHooks == null) {\n Promise.resolve(completion).catch(() => {\n });\n return void 0;\n }\n const context = message;\n let asyncResource;\n let asyncEndPublished = false;\n const safePublish = (publish) => {\n try {\n publish();\n } catch (e) {\n }\n };\n const publishAsyncEnd = ({\n result,\n error\n }) => {\n if (asyncEndPublished) {\n return;\n }\n asyncEndPublished = true;\n if (error !== void 0) {\n context.error = error;\n safePublish(() => tracingChannel.error.publish(context));\n }\n if (result !== void 0) {\n context.result = result;\n }\n safePublish(() => tracingChannel.asyncEnd.publish(context));\n };\n safePublish(() => {\n tracingChannel.start.runStores(context, () => {\n asyncResource = new asyncHooks.AsyncResource(\"ai.telemetry\");\n });\n });\n safePublish(() => tracingChannel.end.publish(context));\n void Promise.resolve(completion).then(\n (result) => publishAsyncEnd({ result }),\n (error) => publishAsyncEnd({ error })\n );\n return {\n run: (execute) => asyncResource == null ? execute() : asyncResource.runInAsyncScope(execute)\n };\n}\n\n// src/telemetry/telemetry-registry.ts\nfunction registerTelemetry(...integrations) {\n if (!globalThis.AI_SDK_TELEMETRY_INTEGRATIONS) {\n globalThis.AI_SDK_TELEMETRY_INTEGRATIONS = [];\n }\n globalThis.AI_SDK_TELEMETRY_INTEGRATIONS.push(...integrations);\n}\nfunction getGlobalTelemetryIntegrations() {\n var _a25;\n return (_a25 = globalThis.AI_SDK_TELEMETRY_INTEGRATIONS) != null ? _a25 : [];\n}\n\n// src/telemetry/create-telemetry-dispatcher.ts\nfunction augmentEvent(event, telemetry) {\n return Object.assign(\n Object.create(Object.getPrototypeOf(event)),\n event,\n telemetry\n );\n}\nfunction createTelemetryDispatcher({\n telemetry\n}) {\n if ((telemetry == null ? void 0 : telemetry.isEnabled) === false) {\n return {};\n }\n const localIntegrations = telemetry == null ? void 0 : telemetry.integrations;\n const integrations = localIntegrations != null ? asArray4(localIntegrations) : getGlobalTelemetryIntegrations();\n const telemetryMetadata = {\n recordInputs: telemetry == null ? void 0 : telemetry.recordInputs,\n recordOutputs: telemetry == null ? void 0 : telemetry.recordOutputs,\n functionId: telemetry == null ? void 0 : telemetry.functionId\n };\n const mergeTelemetryCallback = (key) => {\n const integrationCallbacks = integrations.map((integration) => {\n var _a25;\n return (_a25 = integration[key]) == null ? void 0 : _a25.bind(integration);\n }).filter(Boolean).map(\n (callback) => ((event) => callback(augmentEvent(event, telemetryMetadata)))\n );\n const mergedIntegrationCallback = mergeCallbacks(...integrationCallbacks);\n return async (event) => {\n await mergedIntegrationCallback(event);\n };\n };\n const executeLanguageModelCallWrappers = integrations.map((integration) => {\n var _a25;\n return (_a25 = integration.executeLanguageModelCall) == null ? void 0 : _a25.bind(integration);\n }).filter(Boolean);\n const executeToolWrappers = integrations.map((integration) => {\n var _a25;\n return (_a25 = integration.executeTool) == null ? void 0 : _a25.bind(integration);\n }).filter(Boolean);\n return {\n runInTracingChannelSpan: async ({ type, event, execute }) => await runWithTracingChannelSpan(\n {\n type,\n event: augmentEvent(event, telemetryMetadata)\n },\n execute\n ),\n startTracingChannelContext: ({ type, event, completion }) => openTelemetryChannelSpanContext({\n message: {\n type,\n event: augmentEvent(event, telemetryMetadata)\n },\n completion\n }),\n onStart: mergeTelemetryCallback(\"onStart\"),\n onStepStart: mergeTelemetryCallback(\"onStepStart\"),\n onLanguageModelCallStart: mergeTelemetryCallback(\n \"onLanguageModelCallStart\"\n ),\n onLanguageModelCallEnd: mergeTelemetryCallback(\"onLanguageModelCallEnd\"),\n onToolExecutionStart: mergeTelemetryCallback(\"onToolExecutionStart\"),\n onToolExecutionEnd: mergeTelemetryCallback(\"onToolExecutionEnd\"),\n // Fan out step-end events to both the new `onStepEnd` callback and the\n // deprecated `onStepFinish` callback so integrations that still implement\n // only `onStepFinish` keep receiving step-end events during the deprecation\n // window.\n onStepEnd: mergeCallbacks(\n mergeTelemetryCallback(\"onStepEnd\"),\n mergeTelemetryCallback(\"onStepFinish\")\n ),\n onObjectStepStart: mergeTelemetryCallback(\"onObjectStepStart\"),\n onObjectStepEnd: mergeTelemetryCallback(\"onObjectStepEnd\"),\n onEmbedStart: mergeTelemetryCallback(\"onEmbedStart\"),\n onEmbedEnd: mergeTelemetryCallback(\"onEmbedEnd\"),\n onRerankStart: mergeTelemetryCallback(\"onRerankStart\"),\n onRerankEnd: mergeTelemetryCallback(\"onRerankEnd\"),\n onEnd: mergeTelemetryCallback(\"onEnd\"),\n onAbort: mergeTelemetryCallback(\"onAbort\"),\n onError: mergeTelemetryCallback(\"onError\"),\n /**\n * Runs provider calls inside integration-specific context so\n * auto-instrumented provider requests can be associated with model work.\n */\n executeLanguageModelCall: async ({ execute, ...event }) => {\n const augmentedEvent = augmentEvent(event, telemetryMetadata);\n let wrappedExecute = execute;\n for (const executeWrapper of executeLanguageModelCallWrappers) {\n const innerExecute = wrappedExecute;\n wrappedExecute = () => executeWrapper({ ...augmentedEvent, execute: innerExecute });\n }\n return await runWithTracingChannelSpan(\n { type: \"languageModelCall\", event: augmentedEvent },\n wrappedExecute\n );\n },\n /**\n * Composes all `executeTool` wrappers around the original tool execution.\n * Each wrapper receives an `execute` function that calls the next wrapper in\n * the chain, so integrations can establish nested telemetry context before\n * delegating to the underlying tool.\n */\n executeTool: async ({ execute, ...event }) => {\n const augmentedEvent = augmentEvent(event, telemetryMetadata);\n let wrappedExecute = execute;\n for (const executeWrapper of executeToolWrappers) {\n const innerExecute = wrappedExecute;\n wrappedExecute = () => executeWrapper({ ...augmentedEvent, execute: innerExecute });\n }\n return await wrappedExecute();\n }\n };\n}\n\n// src/generate-text/reasoning.ts\nfunction asReasoningText(reasoningParts) {\n const reasoningText = reasoningParts.map((part) => \"text\" in part ? part.text : \"\").join(\"\");\n return reasoningText.length > 0 ? reasoningText : void 0;\n}\n\n// src/generate-text/step-result.ts\nvar DefaultStepResult = class {\n constructor({\n callId,\n stepNumber,\n provider,\n modelId,\n runtimeContext,\n toolsContext,\n content,\n finishReason,\n rawFinishReason,\n usage,\n performance,\n warnings,\n request,\n response,\n providerMetadata\n }) {\n this.callId = callId;\n this.stepNumber = stepNumber;\n this.model = { provider, modelId };\n this.runtimeContext = runtimeContext;\n this.toolsContext = toolsContext;\n this.content = content;\n this.finishReason = finishReason;\n this.rawFinishReason = rawFinishReason;\n this.usage = usage;\n this.performance = performance;\n this.warnings = warnings;\n this.request = request;\n this.response = response;\n this.providerMetadata = providerMetadata;\n }\n get text() {\n return this.content.filter((part) => part.type === \"text\").map((part) => part.text).join(\"\");\n }\n get reasoning() {\n return convertFromReasoningOutputs(\n this.content.filter(\n (part) => part.type === \"reasoning\" || part.type === \"reasoning-file\"\n )\n );\n }\n get reasoningText() {\n return asReasoningText(this.reasoning);\n }\n get files() {\n return this.content.filter((part) => part.type === \"file\").map((part) => part.file);\n }\n get sources() {\n return this.content.filter((part) => part.type === \"source\");\n }\n get toolCalls() {\n return this.content.filter((part) => part.type === \"tool-call\");\n }\n get staticToolCalls() {\n return this.toolCalls.filter(\n (toolCall) => toolCall.dynamic !== true\n );\n }\n get dynamicToolCalls() {\n return this.toolCalls.filter(\n (toolCall) => toolCall.dynamic === true\n );\n }\n get toolResults() {\n return this.content.filter((part) => part.type === \"tool-result\");\n }\n get staticToolResults() {\n return this.toolResults.filter(\n (toolResult) => toolResult.dynamic !== true\n );\n }\n get dynamicToolResults() {\n return this.toolResults.filter(\n (toolResult) => toolResult.dynamic === true\n );\n }\n};\n\n// src/generate-text/restricted-telemetry-dispatcher.ts\nfunction filterIncludedContext({\n context,\n includeContext\n}) {\n if (context == null) {\n return {};\n }\n return Object.fromEntries(\n Object.entries(context).filter(\n ([key]) => (includeContext == null ? void 0 : includeContext[key]) === true\n )\n );\n}\nfunction restrictStepResult({\n step,\n includeRuntimeContext,\n includeToolsContext\n}) {\n return new DefaultStepResult({\n callId: step.callId,\n stepNumber: step.stepNumber,\n provider: step.model.provider,\n modelId: step.model.modelId,\n runtimeContext: filterIncludedContext({\n context: step.runtimeContext,\n includeContext: includeRuntimeContext\n }),\n toolsContext: filterToolsContext({\n toolsContext: step.toolsContext,\n includeToolsContext\n }),\n content: step.content,\n finishReason: step.finishReason,\n rawFinishReason: step.rawFinishReason,\n usage: step.usage,\n performance: step.performance,\n warnings: step.warnings,\n request: step.request,\n response: step.response,\n providerMetadata: step.providerMetadata\n });\n}\nfunction filterToolsContext({\n toolsContext,\n includeToolsContext\n}) {\n if (includeToolsContext == null) {\n return {};\n }\n return Object.fromEntries(\n Object.entries(toolsContext).map(([toolName, toolContext]) => [\n toolName,\n filterToolContext({\n toolName,\n toolContext,\n includeToolsContext\n })\n ])\n );\n}\nfunction filterToolContext({\n toolName,\n toolContext,\n includeToolsContext\n}) {\n const includeToolContext = includeToolsContext == null ? void 0 : includeToolsContext[toolName];\n return filterIncludedContext({\n context: toolContext,\n includeContext: includeToolContext\n });\n}\nfunction createRestrictedTelemetryDispatcher({\n telemetry,\n includeRuntimeContext,\n includeToolsContext\n}) {\n const telemetryDispatcher = createTelemetryDispatcher({ telemetry });\n return {\n ...telemetryDispatcher,\n onStart: (event) => {\n var _a25;\n return (_a25 = telemetryDispatcher.onStart) == null ? void 0 : _a25.call(telemetryDispatcher, {\n ...event,\n runtimeContext: filterIncludedContext({\n context: event.runtimeContext,\n includeContext: includeRuntimeContext\n }),\n toolsContext: filterToolsContext({\n toolsContext: event.toolsContext,\n includeToolsContext\n })\n });\n },\n onStepStart: (event) => {\n var _a25;\n return (_a25 = telemetryDispatcher.onStepStart) == null ? void 0 : _a25.call(telemetryDispatcher, {\n ...event,\n runtimeContext: filterIncludedContext({\n context: event.runtimeContext,\n includeContext: includeRuntimeContext\n }),\n steps: event.steps.map(\n (step) => restrictStepResult({\n step,\n includeRuntimeContext,\n includeToolsContext\n })\n ),\n toolsContext: filterToolsContext({\n toolsContext: event.toolsContext,\n includeToolsContext\n })\n });\n },\n onStepEnd: (event) => {\n var _a25;\n return (_a25 = telemetryDispatcher.onStepEnd) == null ? void 0 : _a25.call(\n telemetryDispatcher,\n restrictStepResult({\n step: event,\n includeRuntimeContext,\n includeToolsContext\n })\n );\n },\n onStepFinish: (event) => {\n var _a25;\n return (_a25 = telemetryDispatcher.onStepEnd) == null ? void 0 : _a25.call(\n telemetryDispatcher,\n restrictStepResult({\n step: event,\n includeRuntimeContext,\n includeToolsContext\n })\n );\n },\n onEnd: (event) => {\n var _a25;\n return (_a25 = telemetryDispatcher.onEnd) == null ? void 0 : _a25.call(\n telemetryDispatcher,\n ((restrictedSteps) => {\n return {\n ...event,\n runtimeContext: filterIncludedContext({\n context: event.runtimeContext,\n includeContext: includeRuntimeContext\n }),\n steps: restrictedSteps,\n finalStep: restrictedSteps.at(-1),\n toolsContext: filterToolsContext({\n toolsContext: event.toolsContext,\n includeToolsContext\n })\n };\n })(\n event.steps.map(\n (step) => restrictStepResult({\n step,\n includeRuntimeContext,\n includeToolsContext\n })\n )\n )\n );\n },\n onAbort: (event) => {\n var _a25;\n return (_a25 = telemetryDispatcher.onAbort) == null ? void 0 : _a25.call(telemetryDispatcher, {\n ...event,\n steps: event.steps.map(\n (step) => restrictStepResult({\n step,\n includeRuntimeContext,\n includeToolsContext\n })\n )\n });\n },\n onToolExecutionStart: (event) => {\n var _a25;\n return (_a25 = telemetryDispatcher.onToolExecutionStart) == null ? void 0 : _a25.call(telemetryDispatcher, {\n ...event,\n toolContext: filterToolContext({\n toolName: event.toolCall.toolName,\n toolContext: event.toolContext,\n includeToolsContext\n })\n });\n },\n onToolExecutionEnd: (event) => {\n var _a25;\n return (_a25 = telemetryDispatcher.onToolExecutionEnd) == null ? void 0 : _a25.call(telemetryDispatcher, {\n ...event,\n toolContext: filterToolContext({\n toolName: event.toolCall.toolName,\n toolContext: event.toolContext,\n includeToolsContext\n })\n });\n }\n };\n}\n\n// src/generate-text/stop-condition.ts\nfunction isStepCount(stepCount) {\n return ({ steps }) => steps.length === stepCount;\n}\nfunction isLoopFinished() {\n return () => false;\n}\nfunction hasToolCall(...toolName) {\n return ({ steps }) => {\n var _a25, _b25, _c;\n return (_c = (_b25 = (_a25 = steps[steps.length - 1]) == null ? void 0 : _a25.toolCalls) == null ? void 0 : _b25.some(\n (toolCall) => toolName.includes(toolCall.toolName)\n )) != null ? _c : false;\n };\n}\nasync function isStopConditionMet({\n stopConditions,\n steps\n}) {\n return (await Promise.all(stopConditions.map((condition) => condition({ steps })))).some((result) => result);\n}\n\n// src/generate-text/sum-token-counts.ts\nfunction sumTokenCounts(tokenCount1, tokenCount2) {\n return tokenCount1 == null && tokenCount2 == null ? void 0 : (tokenCount1 != null ? tokenCount1 : 0) + (tokenCount2 != null ? tokenCount2 : 0);\n}\n\n// src/generate-text/to-response-messages.ts\nasync function toResponseMessages({\n content: inputContent,\n tools\n}) {\n const responseMessages = [];\n const toolCallOrder = /* @__PURE__ */ new Map();\n const content = [];\n for (const part of inputContent) {\n if (part.type === \"source\") {\n continue;\n }\n if ((part.type === \"tool-result\" || part.type === \"tool-error\") && !part.providerExecuted) {\n continue;\n }\n if (part.type === \"text\" && part.text.length === 0) {\n continue;\n }\n switch (part.type) {\n case \"text\":\n content.push({\n type: \"text\",\n text: part.text,\n providerOptions: part.providerMetadata\n });\n break;\n case \"custom\":\n content.push({\n type: \"custom\",\n kind: part.kind,\n providerOptions: part.providerMetadata\n });\n break;\n case \"reasoning\":\n content.push({\n type: \"reasoning\",\n text: part.text,\n providerOptions: part.providerMetadata\n });\n break;\n case \"file\":\n content.push({\n type: \"file\",\n data: part.file.base64,\n mediaType: part.file.mediaType,\n providerOptions: part.providerMetadata\n });\n break;\n case \"reasoning-file\":\n content.push({\n type: \"reasoning-file\",\n data: part.file.base64,\n mediaType: part.file.mediaType,\n providerOptions: part.providerMetadata\n });\n break;\n case \"tool-call\":\n if (!toolCallOrder.has(part.toolCallId)) {\n toolCallOrder.set(part.toolCallId, toolCallOrder.size);\n }\n content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.invalid && typeof part.input !== \"object\" ? {} : part.input,\n providerExecuted: part.providerExecuted,\n providerOptions: part.providerMetadata\n });\n break;\n case \"tool-result\": {\n const output = await createToolModelOutput({\n toolCallId: part.toolCallId,\n input: part.input,\n tool: getOwn(tools, part.toolName),\n output: part.output,\n errorMode: \"none\"\n });\n content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output,\n providerOptions: part.providerMetadata\n });\n break;\n }\n case \"tool-error\": {\n const output = await createToolModelOutput({\n toolCallId: part.toolCallId,\n input: part.input,\n tool: getOwn(tools, part.toolName),\n output: part.error,\n errorMode: \"json\"\n });\n content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output,\n providerOptions: part.providerMetadata\n });\n break;\n }\n case \"tool-approval-request\":\n content.push({\n type: \"tool-approval-request\",\n approvalId: part.approvalId,\n toolCallId: part.toolCall.toolCallId,\n ...part.reason != null ? { reason: part.reason } : {},\n isAutomatic: part.isAutomatic,\n ...part.signature != null ? { signature: part.signature } : {}\n });\n break;\n }\n }\n if (content.length > 0) {\n responseMessages.push({\n role: \"assistant\",\n content\n });\n }\n const toolResultContent = [];\n for (const part of inputContent) {\n if (part.type !== \"tool-approval-response\" && part.type !== \"tool-result\" && part.type !== \"tool-error\") {\n continue;\n }\n if (part.type === \"tool-approval-response\") {\n toolResultContent.push({\n type: \"tool-approval-response\",\n approvalId: part.approvalId,\n approved: part.approved,\n reason: part.reason,\n providerExecuted: part.providerExecuted\n });\n if (part.approved === false) {\n toolResultContent.push({\n type: \"tool-result\",\n toolCallId: part.toolCall.toolCallId,\n toolName: part.toolCall.toolName,\n output: {\n type: \"execution-denied\",\n reason: part.reason\n }\n });\n }\n continue;\n }\n if (part.providerExecuted) {\n continue;\n }\n const output = await createToolModelOutput({\n toolCallId: part.toolCallId,\n input: part.input,\n tool: getOwn(tools, part.toolName),\n output: part.type === \"tool-result\" ? part.output : part.error,\n errorMode: part.type === \"tool-error\" ? \"text\" : \"none\"\n });\n toolResultContent.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n output,\n ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n });\n }\n if (toolResultContent.length > 0) {\n responseMessages.push({\n role: \"tool\",\n content: sortToolResultContentByToolCallOrder({\n toolResultContent,\n toolCallOrder\n })\n });\n }\n return responseMessages;\n}\nfunction sortToolResultContentByToolCallOrder({\n toolResultContent,\n toolCallOrder\n}) {\n const sortedToolResults = toolResultContent.filter((part) => part.type === \"tool-result\").map((part, index) => ({ part, index })).sort((a, b) => {\n const aOrder = toolCallOrder.get(a.part.toolCallId);\n const bOrder = toolCallOrder.get(b.part.toolCallId);\n if (aOrder == null && bOrder == null) {\n return a.index - b.index;\n }\n if (aOrder == null) {\n return 1;\n }\n if (bOrder == null) {\n return -1;\n }\n return aOrder - bOrder || a.index - b.index;\n }).map(({ part }) => part);\n let toolResultIndex = 0;\n return toolResultContent.map(\n (part) => part.type === \"tool-result\" ? sortedToolResults[toolResultIndex++] : part\n );\n}\n\n// src/generate-text/tool-caller-configuration.ts\nimport {\n experimental_getToolCaller\n} from \"@ai-sdk/provider-utils\";\nvar DIRECT_TOOL_CALL = \"AI_SDK_DIRECT_TOOL_CALL\";\nfunction resolveToolCallerConfiguration({\n tools,\n toolCallers\n}) {\n if (tools == null || toolCallers == null) {\n return void 0;\n }\n const resolved = {};\n for (const [toolName, callers] of Object.entries(toolCallers)) {\n if (!Object.prototype.hasOwnProperty.call(tools, toolName)) {\n throw new InvalidArgumentError({\n parameter: \"experimental_toolCallers\",\n value: toolCallers,\n message: `unknown tool \"${toolName}\".`\n });\n }\n if (!Array.isArray(callers)) {\n throw new InvalidArgumentError({\n parameter: \"experimental_toolCallers\",\n value: toolCallers,\n message: `callers for tool \"${toolName}\" must be an array.`\n });\n }\n resolved[toolName] = callers.map((caller) => {\n if (caller === DIRECT_TOOL_CALL) {\n return caller;\n }\n if (typeof caller !== \"string\" || !Object.prototype.hasOwnProperty.call(tools, caller) || experimental_getToolCaller(tools[caller]) == null) {\n throw new InvalidArgumentError({\n parameter: \"experimental_toolCallers\",\n value: toolCallers,\n message: `tool \"${toolName}\" contains an invalid caller.`\n });\n }\n return caller;\n });\n }\n return resolved;\n}\nfunction prepareToolsForToolCallers({\n tools,\n toolCallers\n}) {\n var _a25, _b25;\n if (tools == null || toolCallers == null) {\n return { executionTools: tools, modelTools: tools };\n }\n const executionTools = { ...tools };\n const modelTools = { ...tools };\n const localToolsByCaller = /* @__PURE__ */ new Map();\n for (const [toolName, callerNames] of Object.entries(toolCallers)) {\n const tool2 = executionTools[toolName];\n if (tool2 == null) {\n continue;\n }\n let availableDirectly = false;\n let availableToProvider = false;\n let preparedTool = tool2;\n for (const callerName of callerNames) {\n if (callerName === DIRECT_TOOL_CALL) {\n availableDirectly = true;\n continue;\n }\n const caller = experimental_getToolCaller(executionTools[callerName]);\n if (caller == null) {\n continue;\n }\n if (caller.type === \"provider\") {\n availableToProvider = true;\n preparedTool = {\n ...preparedTool,\n providerOptions: caller.prepareProviderOptions(\n preparedTool.providerOptions\n )\n };\n } else {\n const localTools = (_a25 = localToolsByCaller.get(callerName)) != null ? _a25 : {};\n localTools[toolName] = preparedTool;\n localToolsByCaller.set(callerName, localTools);\n }\n }\n executionTools[toolName] = preparedTool;\n if (availableDirectly || availableToProvider) {\n modelTools[toolName] = preparedTool;\n } else {\n delete modelTools[toolName];\n }\n }\n for (const [callerName, callerTool] of Object.entries(executionTools)) {\n const caller = experimental_getToolCaller(callerTool);\n if ((caller == null ? void 0 : caller.type) !== \"local\") {\n continue;\n }\n const boundCaller = caller.bind((_b25 = localToolsByCaller.get(callerName)) != null ? _b25 : {});\n executionTools[callerName] = boundCaller;\n if (Object.prototype.hasOwnProperty.call(modelTools, callerName)) {\n modelTools[callerName] = boundCaller;\n }\n }\n return { executionTools, modelTools };\n}\n\n// src/generate-text/tool-approval-signature.ts\nimport { convertBase64ToUint8Array as convertBase64ToUint8Array2 } from \"@ai-sdk/provider-utils\";\n\n// src/util/canonical-hash.ts\nimport { convertUint8ArrayToBase64 as convertUint8ArrayToBase642 } from \"@ai-sdk/provider-utils\";\nvar encoder = new TextEncoder();\nfunction canonicalJSON(value) {\n if (value === null || value === void 0) {\n return JSON.stringify(value);\n }\n if (typeof value !== \"object\") {\n return JSON.stringify(value);\n }\n if (Array.isArray(value)) {\n return `[${value.map((element) => element === void 0 ? \"null\" : canonicalJSON(element)).join(\",\")}]`;\n }\n const keys = Object.keys(value).sort();\n const entries = keys.map(\n (k) => `${JSON.stringify(k)}:${canonicalJSON(value[k])}`\n );\n return `{${entries.join(\",\")}}`;\n}\nfunction toBase64url(bytes) {\n return convertUint8ArrayToBase642(bytes).replace(/\\+/g, \"-\").replace(/\\//g, \"_\").replace(/=+$/g, \"\");\n}\nasync function hashCanonical(value) {\n const digest = await crypto.subtle.digest(\n \"SHA-256\",\n encoder.encode(canonicalJSON(value))\n );\n return toBase64url(new Uint8Array(digest));\n}\n\n// src/generate-text/tool-approval-signature.ts\nvar encoder2 = new TextEncoder();\nfunction fromBase64url(str) {\n return convertBase64ToUint8Array2(str);\n}\nasync function importKey(secret) {\n const keyData = typeof secret === \"string\" ? encoder2.encode(secret) : secret;\n return crypto.subtle.importKey(\n \"raw\",\n keyData,\n { name: \"HMAC\", hash: \"SHA-256\" },\n false,\n [\"sign\", \"verify\"]\n );\n}\nfunction buildPayload(approvalId, toolCallId, toolName, inputDigest) {\n return encoder2.encode(\n JSON.stringify([\n \"ai-sdk-tool-approval-v1\",\n approvalId,\n toolCallId,\n toolName,\n inputDigest\n ])\n );\n}\nfunction buildLegacyPayload(approvalId, toolCallId, toolName, inputDigest) {\n return encoder2.encode(\n `${approvalId}\n${toolCallId}\n${toolName}\n${inputDigest}`\n );\n}\nasync function signToolApproval({\n secret,\n approvalId,\n toolCallId,\n toolName,\n input\n}) {\n const key = await importKey(secret);\n const inputDigest = await hashCanonical(input);\n const payload = buildPayload(approvalId, toolCallId, toolName, inputDigest);\n const sig = await crypto.subtle.sign(\"HMAC\", key, payload);\n return toBase64url(new Uint8Array(sig));\n}\nasync function verifyToolApprovalSignature({\n secret,\n signature,\n approvalId,\n toolCallId,\n toolName,\n input\n}) {\n const key = await importKey(secret);\n const inputDigest = await hashCanonical(input);\n const sigBytes = fromBase64url(signature);\n const payload = buildPayload(approvalId, toolCallId, toolName, inputDigest);\n if (await crypto.subtle.verify(\"HMAC\", key, sigBytes, payload)) {\n return true;\n }\n if (!approvalId.includes(\"\\n\") && !toolCallId.includes(\"\\n\") && !toolName.includes(\"\\n\")) {\n const legacyPayload = buildLegacyPayload(\n approvalId,\n toolCallId,\n toolName,\n inputDigest\n );\n return crypto.subtle.verify(\"HMAC\", key, sigBytes, legacyPayload);\n }\n return false;\n}\nasync function maybeSignApproval({\n secret,\n approvalId,\n toolCallId,\n toolName,\n input\n}) {\n if (secret == null) return void 0;\n return signToolApproval({ secret, approvalId, toolCallId, toolName, input });\n}\n\n// src/generate-text/validate-tool-approvals.ts\nimport {\n asSchema as asSchema4,\n isExecutableTool as isExecutableTool2,\n safeValidateTypes as safeValidateTypes4\n} from \"@ai-sdk/provider-utils\";\nasync function validateApprovedToolApprovals({\n approvedToolApprovals,\n tools,\n toolApproval,\n messages,\n toolsContext,\n runtimeContext,\n toolApprovalSecret\n}) {\n var _a25;\n const approved = [];\n const denied = [];\n const invalid = [];\n for (const approval of approvedToolApprovals) {\n const { toolCall, approvalRequest } = approval;\n const tool2 = getOwn(tools, toolCall.toolName);\n if (toolApprovalSecret != null) {\n if (approvalRequest.signature == null) {\n throw new InvalidToolApprovalSignatureError({\n approvalId: approvalRequest.approvalId,\n toolCallId: toolCall.toolCallId,\n reason: \"missing signature\"\n });\n }\n const valid = await verifyToolApprovalSignature({\n secret: toolApprovalSecret,\n signature: approvalRequest.signature,\n approvalId: approvalRequest.approvalId,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: toolCall.input\n });\n if (!valid) {\n throw new InvalidToolApprovalSignatureError({\n approvalId: approvalRequest.approvalId,\n toolCallId: toolCall.toolCallId,\n reason: \"invalid signature\"\n });\n }\n }\n if (isExecutableTool2(tool2) && tool2.inputSchema != null) {\n const validation = await safeValidateTypes4({\n value: toolCall.input,\n schema: asSchema4(tool2.inputSchema)\n });\n if (!validation.success) {\n invalid.push({\n ...approval,\n error: new InvalidToolInputError({\n toolName: toolCall.toolName,\n toolInput: JSON.stringify(toolCall.input),\n cause: validation.error\n })\n });\n continue;\n }\n }\n const approvalStatus = await resolveToolApproval({\n tools,\n toolApproval,\n toolCall,\n messages,\n toolsContext,\n runtimeContext\n });\n if (approvalStatus.type === \"denied\") {\n denied.push({\n ...approval,\n approvalResponse: {\n ...approval.approvalResponse,\n approved: false,\n reason: (_a25 = approvalStatus.reason) != null ? _a25 : approval.approvalResponse.reason\n }\n });\n } else {\n approved.push(approval);\n }\n }\n return {\n approvedToolApprovals: approved,\n deniedToolApprovals: denied,\n invalidToolApprovals: invalid\n };\n}\n\n// src/generate-text/generate-text.ts\nvar originalGenerateId = createIdGenerator({\n prefix: \"aitxt\",\n size: 24\n});\nvar originalGenerateCallId = createIdGenerator({\n prefix: \"call\",\n size: 24\n});\nasync function generateText({\n model: modelArg,\n tools,\n toolChoice,\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages,\n maxRetries: maxRetriesArg,\n abortSignal,\n timeout,\n headers,\n stopWhen = isStepCount(1),\n experimental_sandbox: sandbox,\n output,\n toolApproval,\n experimental_toolCallers,\n experimental_toolApprovalSecret,\n experimental_telemetry,\n telemetry = experimental_telemetry,\n providerOptions,\n activeTools,\n toolOrder,\n prepareStep,\n experimental_repairToolCall,\n repairToolCall = experimental_repairToolCall,\n experimental_refineToolInput: refineToolInput,\n experimental_download: download2,\n runtimeContext = {},\n toolsContext = {},\n experimental_include,\n include = experimental_include,\n _internal: {\n generateId: generateId4 = originalGenerateId,\n generateCallId = originalGenerateCallId,\n now: now2 = now\n } = {},\n onStart,\n experimental_onStart,\n onStepStart,\n experimental_onStepStart,\n onLanguageModelCallStart,\n experimental_onLanguageModelCallStart,\n onLanguageModelCallEnd,\n experimental_onLanguageModelCallEnd,\n onToolExecutionStart,\n onToolExecutionEnd,\n experimental_onToolCallStart,\n experimental_onToolCallFinish,\n onStepEnd,\n onStepFinish,\n onFinish,\n onEnd = onFinish,\n ...settings\n}) {\n var _a25, _b25, _c, _d;\n include = {\n requestBody: (_a25 = include == null ? void 0 : include.requestBody) != null ? _a25 : false,\n requestMessages: (_b25 = include == null ? void 0 : include.requestMessages) != null ? _b25 : false,\n responseBody: (_c = include == null ? void 0 : include.responseBody) != null ? _c : false\n };\n const model = resolveLanguageModel(modelArg);\n const resolvedToolCallers = resolveToolCallerConfiguration({\n tools,\n toolCallers: experimental_toolCallers\n });\n const stopConditions = asArray5(stopWhen);\n const resolvedOnStart = onStart != null ? onStart : experimental_onStart;\n const resolvedOnStepStart = onStepStart != null ? onStepStart : experimental_onStepStart;\n const resolvedOnLanguageModelCallStart = onLanguageModelCallStart != null ? onLanguageModelCallStart : experimental_onLanguageModelCallStart;\n const resolvedOnLanguageModelCallEnd = onLanguageModelCallEnd != null ? onLanguageModelCallEnd : experimental_onLanguageModelCallEnd;\n const resolvedOnToolExecutionStart = onToolExecutionStart != null ? onToolExecutionStart : experimental_onToolCallStart;\n const resolvedOnToolExecutionEnd = onToolExecutionEnd != null ? onToolExecutionEnd : experimental_onToolCallFinish;\n const resolvedOnStepEnd = onStepEnd != null ? onStepEnd : onStepFinish;\n const unsupportedTimeoutWarnings = [];\n if (getFirstChunkTimeoutMs(timeout) != null) {\n unsupportedTimeoutWarnings.push({\n type: \"unsupported\",\n feature: \"timeout.firstChunkMs\",\n details: \"The firstChunkMs timeout is only supported by streaming functions.\"\n });\n }\n if (getChunkTimeoutMs(timeout) != null) {\n unsupportedTimeoutWarnings.push({\n type: \"unsupported\",\n feature: \"timeout.chunkMs\",\n details: \"The chunkMs timeout is only supported by streaming functions.\"\n });\n }\n if (unsupportedTimeoutWarnings.length > 0) {\n logWarnings({\n warnings: unsupportedTimeoutWarnings,\n provider: model.provider,\n model: model.modelId\n });\n }\n const totalTimeoutMs = getTotalTimeoutMs(timeout);\n const stepTimeoutMs = getStepTimeoutMs(timeout);\n const stepAbortController = stepTimeoutMs != null ? new AbortController() : void 0;\n const mergedAbortSignal = mergeAbortSignals(\n abortSignal,\n totalTimeoutMs,\n stepAbortController == null ? void 0 : stepAbortController.signal\n );\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal: mergedAbortSignal\n });\n const callSettings = prepareLanguageModelCallOptions(settings);\n const headersWithUserAgent = withUserAgentSuffix2(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const initialPrompt = await standardizePrompt({\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages\n });\n const callId = generateCallId();\n const telemetryDispatcher = createRestrictedTelemetryDispatcher({\n telemetry,\n includeRuntimeContext: telemetry == null ? void 0 : telemetry.includeRuntimeContext,\n includeToolsContext: telemetry == null ? void 0 : telemetry.includeToolsContext\n });\n const runInTracingChannelSpan = (_d = telemetryDispatcher.runInTracingChannelSpan) != null ? _d : (async ({ execute }) => await execute());\n const generateTextStartEvent = {\n callId,\n operationId: \"ai.generateText\",\n provider: model.provider,\n modelId: model.modelId,\n instructions: initialPrompt.instructions,\n messages: initialPrompt.messages,\n tools,\n toolChoice,\n activeTools,\n toolOrder,\n maxOutputTokens: callSettings.maxOutputTokens,\n temperature: callSettings.temperature,\n topP: callSettings.topP,\n topK: callSettings.topK,\n presencePenalty: callSettings.presencePenalty,\n frequencyPenalty: callSettings.frequencyPenalty,\n stopSequences: callSettings.stopSequences,\n seed: callSettings.seed,\n reasoning: callSettings.reasoning,\n maxRetries,\n timeout,\n headers: headersWithUserAgent,\n providerOptions,\n output,\n runtimeContext,\n toolsContext\n };\n const executeGenerateText = async () => {\n var _a26;\n await notify({\n event: generateTextStartEvent,\n callbacks: [resolvedOnStart, telemetryDispatcher.onStart]\n });\n try {\n const initialMessages = initialPrompt.messages;\n const initialResponseMessages = [];\n const {\n approvedToolApprovals,\n deniedToolApprovals: collectedDeniedToolApprovals\n } = collectToolApprovals({ messages: initialMessages });\n const {\n approvedToolApprovals: localApprovedToolApprovals,\n deniedToolApprovals: revalidationDeniedToolApprovals,\n invalidToolApprovals\n } = await validateApprovedToolApprovals({\n approvedToolApprovals: approvedToolApprovals.filter(\n (toolApproval2) => !toolApproval2.toolCall.providerExecuted\n ),\n tools,\n toolApproval,\n messages: initialMessages,\n toolsContext,\n runtimeContext,\n toolApprovalSecret: experimental_toolApprovalSecret\n });\n const deniedToolApprovals = [\n ...collectedDeniedToolApprovals,\n ...revalidationDeniedToolApprovals\n ];\n const deniedToolApprovalsWithoutResults = deniedToolApprovals.filter(\n (toolApproval2) => toolApproval2.existingToolResult == null\n );\n if (deniedToolApprovalsWithoutResults.length > 0 || localApprovedToolApprovals.length > 0 || invalidToolApprovals.length > 0) {\n const toolResults2 = await executeTools({\n toolCalls: localApprovedToolApprovals.map(\n (toolApproval2) => toolApproval2.toolCall\n ),\n tools,\n callId,\n messages: initialMessages,\n abortSignal: mergedAbortSignal,\n timeout,\n experimental_sandbox: sandbox,\n toolsContext,\n onToolExecutionStart: (event) => notify({\n event,\n callbacks: [\n resolvedOnToolExecutionStart,\n telemetryDispatcher.onToolExecutionStart\n ]\n }),\n onToolExecutionEnd: (event) => notify({\n event,\n callbacks: [\n resolvedOnToolExecutionEnd,\n telemetryDispatcher.onToolExecutionEnd\n ]\n }),\n executeToolInTelemetryContext: telemetryDispatcher.executeTool,\n runInTracingChannelSpan\n });\n const toolContent = [];\n for (const result of toolResults2) {\n const output2 = result.output;\n const modelOutput = await createToolModelOutput({\n toolCallId: output2.toolCallId,\n input: output2.input,\n tool: getOwn(tools, output2.toolName),\n output: output2.type === \"tool-result\" ? output2.output : output2.error,\n errorMode: output2.type === \"tool-error\" ? \"text\" : \"none\"\n });\n toolContent.push({\n type: \"tool-result\",\n toolCallId: output2.toolCallId,\n toolName: output2.toolName,\n output: modelOutput\n });\n }\n for (const toolApproval2 of invalidToolApprovals) {\n toolContent.push({\n type: \"tool-result\",\n toolCallId: toolApproval2.toolCall.toolCallId,\n toolName: toolApproval2.toolCall.toolName,\n output: await createToolModelOutput({\n toolCallId: toolApproval2.toolCall.toolCallId,\n input: toolApproval2.toolCall.input,\n tool: getOwn(tools, toolApproval2.toolCall.toolName),\n output: toolApproval2.error,\n errorMode: \"text\"\n })\n });\n }\n for (const toolApproval2 of deniedToolApprovalsWithoutResults) {\n toolContent.push({\n type: \"tool-result\",\n toolCallId: toolApproval2.toolCall.toolCallId,\n toolName: toolApproval2.toolCall.toolName,\n output: {\n type: \"execution-denied\",\n reason: toolApproval2.approvalResponse.reason,\n // For provider-executed tools, include approvalId so provider can correlate\n ...toolApproval2.toolCall.providerExecuted && {\n providerOptions: {\n openai: {\n approvalId: toolApproval2.approvalResponse.approvalId\n }\n }\n }\n }\n });\n }\n initialResponseMessages.push({\n role: \"tool\",\n content: toolContent\n });\n }\n const callSettings2 = prepareLanguageModelCallOptions(settings);\n let currentModelResponse;\n let clientToolCalls = [];\n let clientToolOutputs = [];\n let toolApprovalResponses = [];\n let deniedToolApprovalResponses = [];\n const steps = [];\n let instructionsForNextStep = initialPrompt.instructions;\n let messagesForNextStep = [\n ...initialMessages,\n ...initialResponseMessages\n ];\n const pendingDeferredToolCalls = /* @__PURE__ */ new Map();\n do {\n if (steps.length > 0) {\n mergedAbortSignal == null ? void 0 : mergedAbortSignal.throwIfAborted();\n }\n const stepTimeoutId = setAbortTimeout({\n abortController: stepAbortController,\n label: \"Step\",\n timeoutMs: stepTimeoutMs\n });\n const stepNumber = steps.length;\n try {\n await runInTracingChannelSpan({\n type: \"step\",\n event: { callId, stepNumber },\n execute: async () => {\n var _a27, _b26, _c2, _d2, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q;\n const accumulatedResponseMessages = [\n ...initialResponseMessages,\n ...steps.flatMap((step) => step.response.messages)\n ];\n const stepInputMessages = messagesForNextStep;\n const prepareStepResult = await (prepareStep == null ? void 0 : prepareStep({\n model,\n steps,\n stepNumber: steps.length,\n instructions: instructionsForNextStep,\n initialInstructions: initialPrompt.instructions,\n messages: stepInputMessages,\n initialMessages,\n responseMessages: accumulatedResponseMessages,\n runtimeContext,\n toolsContext,\n experimental_sandbox: sandbox\n }));\n const stepSandbox = (_a27 = prepareStepResult == null ? void 0 : prepareStepResult.experimental_sandbox) != null ? _a27 : sandbox;\n const stepModel = resolveLanguageModel(\n (_b26 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _b26 : model\n );\n const stepInstructions = (_d2 = (_c2 = prepareStepResult == null ? void 0 : prepareStepResult.instructions) != null ? _c2 : prepareStepResult == null ? void 0 : prepareStepResult.system) != null ? _d2 : instructionsForNextStep;\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: {\n instructions: stepInstructions,\n messages: (_e = prepareStepResult == null ? void 0 : prepareStepResult.messages) != null ? _e : stepInputMessages\n },\n supportedUrls: await stepModel.supportedUrls,\n download: download2,\n provider: stepModel.provider.split(\".\")[0]\n });\n runtimeContext = (_f = prepareStepResult == null ? void 0 : prepareStepResult.runtimeContext) != null ? _f : runtimeContext;\n toolsContext = (_g = prepareStepResult == null ? void 0 : prepareStepResult.toolsContext) != null ? _g : toolsContext;\n const stepActiveTools = filterActiveTools({\n tools,\n activeTools: (_h = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _h : activeTools\n });\n const {\n executionTools: stepExecutionTools,\n modelTools: stepModelTools\n } = prepareToolsForToolCallers({\n tools: stepActiveTools,\n toolCallers: resolvedToolCallers\n });\n const stepToolOrder = (_i = prepareStepResult == null ? void 0 : prepareStepResult.toolOrder) != null ? _i : toolOrder;\n const stepTools = await prepareTools({\n tools: stepModelTools,\n toolOrder: stepToolOrder,\n // active tools context is a subset of the tools context, so we can cast to the unknown type\n toolsContext,\n experimental_sandbox: stepSandbox\n });\n const stepToolChoice = prepareToolChoice({\n toolChoice: (_j = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _j : toolChoice\n });\n const stepMessages = (_k = prepareStepResult == null ? void 0 : prepareStepResult.messages) != null ? _k : stepInputMessages;\n const stepProviderOptions = mergeObjects(\n providerOptions,\n prepareStepResult == null ? void 0 : prepareStepResult.providerOptions\n );\n const stepCallSettings = prepareStepCallSettings({\n callSettings: callSettings2,\n stepSettings: prepareStepResult\n });\n await notify({\n event: {\n callId,\n provider: stepModel.provider,\n modelId: stepModel.modelId,\n stepNumber,\n instructions: stepInstructions,\n messages: stepMessages,\n tools,\n toolChoice: (_l = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _l : toolChoice,\n activeTools: (_m = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _m : activeTools,\n toolOrder: stepToolOrder,\n steps: [...steps],\n providerOptions: stepProviderOptions,\n output,\n runtimeContext,\n promptMessages,\n stepTools,\n stepToolChoice,\n toolsContext\n },\n callbacks: [\n resolvedOnStepStart,\n telemetryDispatcher.onStepStart\n ]\n });\n const languageModelCallContext = {\n provider: stepModel.provider,\n modelId: stepModel.modelId,\n instructions: stepInstructions,\n messages: stepMessages,\n tools: stepTools,\n ...stepCallSettings\n };\n const languageModelCallStartEvent = {\n callId,\n ...languageModelCallContext\n };\n const stepStartTimestampMs = now2();\n await notify({\n event: languageModelCallStartEvent,\n callbacks: [\n resolvedOnLanguageModelCallStart,\n telemetryDispatcher.onLanguageModelCallStart\n ]\n });\n const executeLanguageModelCallInTelemetryContext = (_n = telemetryDispatcher.executeLanguageModelCall) != null ? _n : (async ({ execute }) => await execute());\n currentModelResponse = await retry(async () => {\n var _a28, _b27, _c3, _d3, _e2, _f2, _g2, _h2;\n const result = await executeLanguageModelCallInTelemetryContext(\n {\n ...languageModelCallStartEvent,\n execute: async () => await stepModel.doGenerate({\n ...stepCallSettings,\n tools: stepTools,\n toolChoice: stepToolChoice,\n responseFormat: await (output == null ? void 0 : output.responseFormat),\n prompt: promptMessages,\n providerOptions: stepProviderOptions,\n abortSignal: mergedAbortSignal,\n headers: headersWithUserAgent\n })\n }\n );\n const responseData = {\n id: (_b27 = (_a28 = result.response) == null ? void 0 : _a28.id) != null ? _b27 : generateId4(),\n timestamp: (_d3 = (_c3 = result.response) == null ? void 0 : _c3.timestamp) != null ? _d3 : /* @__PURE__ */ new Date(),\n modelId: (_f2 = (_e2 = result.response) == null ? void 0 : _e2.modelId) != null ? _f2 : stepModel.modelId,\n headers: (_g2 = result.response) == null ? void 0 : _g2.headers,\n body: (_h2 = result.response) == null ? void 0 : _h2.body\n };\n return { ...result, response: responseData };\n });\n const responseTimeMs = now2() - stepStartTimestampMs;\n const stepUsage = asLanguageModelUsage(\n currentModelResponse.usage\n );\n const stepToolCalls = await Promise.all(\n currentModelResponse.content.filter(\n (part) => part.type === \"tool-call\"\n ).map(\n (toolCall) => parseToolCall({\n toolCall,\n tools: stepExecutionTools,\n repairToolCall,\n refineToolInput,\n instructions: stepInstructions,\n messages: stepMessages\n })\n )\n );\n const toolApprovalRequests = {};\n const stepToolApprovalResponses = {};\n const blockedToolCallIds = /* @__PURE__ */ new Set();\n const modelCallContent = convertLanguageModelContent({\n content: currentModelResponse.content,\n toolCalls: stepToolCalls,\n toolOutputs: [],\n toolApprovalRequests: [],\n toolApprovalResponses: [],\n tools\n });\n await notify({\n event: {\n callId,\n provider: stepModel.provider,\n modelId: currentModelResponse.response.modelId,\n finishReason: currentModelResponse.finishReason.unified,\n usage: stepUsage,\n content: modelCallContent,\n responseId: currentModelResponse.response.id,\n ...currentModelResponse.providerMetadata != null ? {\n providerMetadata: currentModelResponse.providerMetadata\n } : {},\n performance: {\n responseTimeMs,\n effectiveOutputTokensPerSecond: calculateTokensPerSecond({\n tokens: stepUsage.outputTokens,\n durationMs: responseTimeMs\n }),\n outputTokensPerSecond: void 0,\n inputTokensPerSecond: void 0,\n effectiveTotalTokensPerSecond: calculateTokensPerSecond({\n tokens: sumTokenCounts(\n stepUsage.inputTokens,\n stepUsage.outputTokens\n ),\n durationMs: responseTimeMs\n }),\n timeToFirstOutputMs: void 0\n }\n },\n callbacks: [\n resolvedOnLanguageModelCallEnd,\n telemetryDispatcher.onLanguageModelCallEnd\n ]\n });\n const enforcedToolChoice = stepToolChoice.type === \"required\" || stepToolChoice.type === \"tool\" ? stepToolChoice : void 0;\n if (enforcedToolChoice != null && !stepToolCalls.some(\n (toolCall) => enforcedToolChoice.type === \"required\" || toolCall.toolName === enforcedToolChoice.toolName\n )) {\n throw new ToolChoiceViolationError({\n toolChoice: enforcedToolChoice,\n finishReason: currentModelResponse.finishReason.unified,\n provider: stepModel.provider,\n modelId: stepModel.modelId,\n content: currentModelResponse.content\n });\n }\n for (const toolCall of stepToolCalls) {\n if (toolCall.invalid) {\n continue;\n }\n const tool2 = getOwn(stepExecutionTools, toolCall.toolName);\n if (tool2 == null) {\n continue;\n }\n if (tool2.onInputStart != null) {\n await tool2.onInputStart({\n toolCallId: toolCall.toolCallId,\n messages: stepMessages,\n abortSignal: mergedAbortSignal,\n context: runtimeContext\n });\n }\n if ((tool2 == null ? void 0 : tool2.onInputAvailable) != null) {\n await tool2.onInputAvailable({\n input: toolCall.input,\n toolCallId: toolCall.toolCallId,\n messages: stepMessages,\n abortSignal: mergedAbortSignal,\n context: runtimeContext\n });\n }\n const toolApprovalStatus = await resolveToolApproval({\n tools: stepExecutionTools,\n toolApproval,\n toolCall,\n messages: stepMessages,\n toolsContext,\n runtimeContext\n });\n if (toolApprovalStatus.type === \"not-applicable\") {\n continue;\n }\n const approvalId = generateId4();\n const signature = await maybeSignApproval({\n secret: experimental_toolApprovalSecret,\n approvalId,\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: toolCall.input\n });\n switch (toolApprovalStatus.type) {\n case \"user-approval\": {\n toolApprovalRequests[toolCall.toolCallId] = {\n type: \"tool-approval-request\",\n approvalId,\n toolCall,\n ...toolApprovalStatus.reason != null ? { reason: toolApprovalStatus.reason } : {},\n ...signature != null ? { signature } : {}\n };\n blockedToolCallIds.add(toolCall.toolCallId);\n break;\n }\n case \"approved\": {\n toolApprovalRequests[toolCall.toolCallId] = {\n type: \"tool-approval-request\",\n approvalId,\n toolCall,\n isAutomatic: true,\n ...signature != null ? { signature } : {}\n };\n stepToolApprovalResponses[toolCall.toolCallId] = {\n type: \"tool-approval-response\",\n approvalId,\n toolCall,\n approved: true,\n reason: toolApprovalStatus.reason,\n providerExecuted: toolCall.providerExecuted\n };\n break;\n }\n case \"denied\": {\n toolApprovalRequests[toolCall.toolCallId] = {\n type: \"tool-approval-request\",\n approvalId,\n toolCall,\n isAutomatic: true,\n ...signature != null ? { signature } : {}\n };\n stepToolApprovalResponses[toolCall.toolCallId] = {\n type: \"tool-approval-response\",\n approvalId,\n toolCall,\n approved: false,\n reason: toolApprovalStatus.reason,\n providerExecuted: toolCall.providerExecuted\n };\n blockedToolCallIds.add(toolCall.toolCallId);\n break;\n }\n }\n }\n const invalidToolCalls = stepToolCalls.filter(\n (toolCall) => toolCall.invalid && toolCall.dynamic && !toolCall.providerExecuted\n );\n clientToolOutputs = [];\n for (const toolCall of invalidToolCalls) {\n clientToolOutputs.push({\n type: \"tool-error\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: toolCall.input,\n error: getErrorMessage4(toolCall.error),\n dynamic: true\n });\n }\n clientToolCalls = stepToolCalls.filter(\n (toolCall) => !toolCall.providerExecuted\n );\n toolApprovalResponses = Object.values(stepToolApprovalResponses);\n deniedToolApprovalResponses = toolApprovalResponses.filter(\n (toolApprovalResponse) => toolApprovalResponse.approved === false\n );\n const toolExecutionMs = {};\n if (stepExecutionTools != null && isToolExecutionAllowedFinishReason(\n currentModelResponse.finishReason.unified\n )) {\n const toolExecutionResults = await executeTools({\n toolCalls: clientToolCalls.filter(\n (toolCall) => !toolCall.invalid && !blockedToolCallIds.has(toolCall.toolCallId)\n ),\n tools: stepExecutionTools,\n callId,\n messages: stepMessages,\n abortSignal: mergedAbortSignal,\n timeout,\n experimental_sandbox: stepSandbox,\n toolsContext,\n onToolExecutionStart: (event) => notify({\n event,\n callbacks: [\n resolvedOnToolExecutionStart,\n telemetryDispatcher.onToolExecutionStart\n ]\n }),\n onToolExecutionEnd: (event) => notify({\n event,\n callbacks: [\n resolvedOnToolExecutionEnd,\n telemetryDispatcher.onToolExecutionEnd\n ]\n }),\n executeToolInTelemetryContext: telemetryDispatcher.executeTool,\n runInTracingChannelSpan\n });\n for (const result of toolExecutionResults) {\n toolExecutionMs[result.output.toolCallId] = result.toolExecutionMs;\n clientToolOutputs.push(result.output);\n }\n }\n const stepTimeMs = now2() - stepStartTimestampMs;\n const stepPerformance = {\n effectiveOutputTokensPerSecond: calculateTokensPerSecond({\n tokens: stepUsage.outputTokens,\n durationMs: responseTimeMs\n }),\n outputTokensPerSecond: void 0,\n inputTokensPerSecond: void 0,\n effectiveTotalTokensPerSecond: calculateTokensPerSecond({\n tokens: sumTokenCounts(\n stepUsage.inputTokens,\n stepUsage.outputTokens\n ),\n durationMs: responseTimeMs\n }),\n stepTimeMs,\n responseTimeMs,\n toolExecutionMs,\n timeToFirstOutputMs: void 0\n };\n for (const toolCall of stepToolCalls) {\n if (!toolCall.providerExecuted) continue;\n const tool2 = getOwn(stepExecutionTools, toolCall.toolName);\n if ((tool2 == null ? void 0 : tool2.type) === \"provider\" && tool2.supportsDeferredResults) {\n const hasResultInResponse = currentModelResponse.content.some(\n (part) => part.type === \"tool-result\" && part.toolCallId === toolCall.toolCallId\n );\n if (!hasResultInResponse) {\n pendingDeferredToolCalls.set(toolCall.toolCallId, {\n toolName: toolCall.toolName\n });\n }\n }\n }\n for (const part of currentModelResponse.content) {\n if (part.type === \"tool-result\") {\n pendingDeferredToolCalls.delete(part.toolCallId);\n }\n }\n const stepContent = convertLanguageModelContent({\n content: currentModelResponse.content,\n toolCalls: stepToolCalls,\n toolOutputs: clientToolOutputs,\n toolApprovalRequests: Object.values(toolApprovalRequests),\n toolApprovalResponses,\n tools\n });\n const stepResponseMessages = await toResponseMessages({\n content: stepContent,\n tools\n });\n const stepRequest = {\n ...currentModelResponse.request,\n body: include.requestBody ? (_o = currentModelResponse.request) == null ? void 0 : _o.body : void 0,\n messages: include.requestMessages ? cloneModelMessages(stepMessages) : void 0\n };\n const stepResponse = {\n ...currentModelResponse.response,\n // deep clone msgs to avoid mutating step results in multi-step:\n messages: cloneModelMessages(stepResponseMessages),\n // Conditionally include response body:\n body: include.responseBody ? (_p = currentModelResponse.response) == null ? void 0 : _p.body : void 0\n };\n const currentStepResult = new DefaultStepResult({\n callId,\n stepNumber,\n provider: stepModel.provider,\n modelId: stepModel.modelId,\n runtimeContext,\n content: stepContent,\n finishReason: currentModelResponse.finishReason.unified,\n rawFinishReason: currentModelResponse.finishReason.raw,\n usage: stepUsage,\n performance: stepPerformance,\n warnings: currentModelResponse.warnings,\n providerMetadata: currentModelResponse.providerMetadata,\n request: stepRequest,\n response: stepResponse,\n toolsContext\n });\n logWarnings({\n warnings: (_q = currentModelResponse.warnings) != null ? _q : [],\n provider: stepModel.provider,\n model: stepModel.modelId\n });\n steps.push(currentStepResult);\n instructionsForNextStep = stepInstructions;\n messagesForNextStep = [...stepMessages, ...stepResponseMessages];\n await notify({\n event: currentStepResult,\n callbacks: [resolvedOnStepEnd, telemetryDispatcher.onStepEnd]\n });\n return currentStepResult;\n }\n });\n } finally {\n if (stepTimeoutId != null) {\n clearTimeout(stepTimeoutId);\n }\n }\n } while (\n // Continue only after all client tool calls have been executed or denied,\n // and if there are client results or pending deferred provider results.\n clientToolOutputs.length + deniedToolApprovalResponses.length === clientToolCalls.length && (clientToolCalls.length > 0 || pendingDeferredToolCalls.size > 0) && // continue until a stop condition is met:\n !await isStopConditionMet({ stopConditions, steps })\n );\n const lastStep = steps[steps.length - 1];\n const totalUsage = steps.reduce(\n (totalUsage2, step) => {\n return addLanguageModelUsage(totalUsage2, step.usage);\n },\n {\n inputTokens: void 0,\n inputTokenDetails: {\n noCacheTokens: void 0,\n cacheReadTokens: void 0,\n cacheWriteTokens: void 0\n },\n outputTokens: void 0,\n outputTokenDetails: {\n textTokens: void 0,\n reasoningTokens: void 0\n },\n totalTokens: void 0\n }\n );\n const files = steps.flatMap((step) => step.files);\n const sources = steps.flatMap((step) => step.sources);\n const toolCalls = steps.flatMap((step) => step.toolCalls);\n const staticToolCalls = steps.flatMap((step) => step.staticToolCalls);\n const dynamicToolCalls = steps.flatMap((step) => step.dynamicToolCalls);\n const toolResults = steps.flatMap((step) => step.toolResults);\n const staticToolResults = steps.flatMap((step) => step.staticToolResults);\n const dynamicToolResults = steps.flatMap((step) => step.dynamicToolResults);\n const warnings = steps.flatMap((step) => {\n var _a27;\n return (_a27 = step.warnings) != null ? _a27 : [];\n });\n const onEndEvent = {\n callId,\n stepNumber: lastStep.stepNumber,\n model: lastStep.model,\n runtimeContext: lastStep.runtimeContext,\n finishReason: lastStep.finishReason,\n rawFinishReason: lastStep.rawFinishReason,\n usage: totalUsage,\n totalUsage,\n content: steps.flatMap((step) => step.content),\n text: lastStep.text,\n reasoning: lastStep.reasoning,\n reasoningText: lastStep.reasoningText,\n files,\n sources,\n toolCalls,\n staticToolCalls,\n dynamicToolCalls,\n toolResults,\n staticToolResults,\n dynamicToolResults,\n responseMessages: [\n ...initialResponseMessages,\n ...steps.flatMap((step) => step.response.messages)\n ],\n warnings,\n request: lastStep.request,\n response: lastStep.response,\n providerMetadata: lastStep.providerMetadata,\n steps,\n finalStep: lastStep,\n toolsContext\n };\n await notify({\n event: onEndEvent,\n callbacks: [onEnd, telemetryDispatcher.onEnd]\n });\n let resolvedOutput;\n if (lastStep.finishReason === \"stop\" || lastStep.finishReason !== \"tool-calls\" && lastStep.text.length > 0) {\n const outputSpecification = output != null ? output : text();\n resolvedOutput = await outputSpecification.parseCompleteOutput(\n { text: lastStep.text },\n {\n response: lastStep.response,\n usage: lastStep.usage,\n finishReason: lastStep.finishReason\n }\n );\n }\n return new DefaultGenerateTextResult({\n initialResponseMessages,\n steps,\n totalUsage,\n output: resolvedOutput\n });\n } catch (error) {\n await ((_a26 = telemetryDispatcher.onError) == null ? void 0 : _a26.call(telemetryDispatcher, { callId, error }));\n throw wrapGatewayError(error);\n }\n };\n return await runInTracingChannelSpan({\n type: \"generateText\",\n event: generateTextStartEvent,\n execute: executeGenerateText\n });\n}\nasync function executeTools({\n toolCalls,\n tools,\n callId,\n messages,\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n toolsContext,\n onToolExecutionStart,\n onToolExecutionEnd,\n executeToolInTelemetryContext,\n runInTracingChannelSpan\n}) {\n const toolResults = await Promise.all(\n toolCalls.map(\n async (toolCall) => await executeToolCall({\n toolCall,\n tools,\n callId,\n messages,\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n toolsContext,\n onToolExecutionStart,\n onToolExecutionEnd,\n executeToolInTelemetryContext,\n runInTracingChannelSpan\n })\n )\n );\n return toolResults.filter(\n (result) => result != null\n );\n}\nvar DefaultGenerateTextResult = class {\n constructor(options) {\n this.initialResponseMessages = options.initialResponseMessages;\n this.steps = options.steps;\n this._output = options.output;\n this.totalUsage = options.totalUsage;\n }\n get finalStep() {\n return this.steps.at(-1);\n }\n get content() {\n return this.steps.flatMap((step) => step.content);\n }\n get text() {\n return this.finalStep.text;\n }\n get files() {\n return this.steps.flatMap((step) => step.files);\n }\n get reasoningText() {\n return this.finalStep.reasoningText;\n }\n get reasoning() {\n return convertToReasoningOutputs(this.finalStep.reasoning);\n }\n get toolCalls() {\n return this.steps.flatMap((step) => step.toolCalls);\n }\n get staticToolCalls() {\n return this.steps.flatMap((step) => step.staticToolCalls);\n }\n get dynamicToolCalls() {\n return this.steps.flatMap((step) => step.dynamicToolCalls);\n }\n get toolResults() {\n return this.steps.flatMap((step) => step.toolResults);\n }\n get staticToolResults() {\n return this.steps.flatMap((step) => step.staticToolResults);\n }\n get dynamicToolResults() {\n return this.steps.flatMap((step) => step.dynamicToolResults);\n }\n get sources() {\n return this.steps.flatMap((step) => step.sources);\n }\n get finishReason() {\n return this.finalStep.finishReason;\n }\n get rawFinishReason() {\n return this.finalStep.rawFinishReason;\n }\n get warnings() {\n return this.steps.flatMap((step) => {\n var _a25;\n return (_a25 = step.warnings) != null ? _a25 : [];\n });\n }\n get providerMetadata() {\n return this.finalStep.providerMetadata;\n }\n get response() {\n return this.finalStep.response;\n }\n get responseMessages() {\n return [\n ...this.initialResponseMessages,\n ...this.steps.flatMap((step) => step.response.messages)\n ];\n }\n get request() {\n return this.finalStep.request;\n }\n get usage() {\n return this.totalUsage;\n }\n get output() {\n if (this._output == null) {\n throw new NoOutputGeneratedError();\n }\n return this._output;\n }\n};\n\n// src/generate-text/stream-text.ts\nimport {\n getErrorMessage as getErrorMessage6,\n UnsupportedFunctionalityError as UnsupportedFunctionalityError2\n} from \"@ai-sdk/provider\";\nimport {\n asArray as asArray6,\n createIdGenerator as createIdGenerator3,\n DelayedPromise,\n filterNullable as filterNullable2,\n isAbortError\n} from \"@ai-sdk/provider-utils\";\n\n// src/util/prepare-headers.ts\nfunction prepareHeaders(headers, defaultHeaders) {\n const responseHeaders = new Headers(headers != null ? headers : {});\n for (const [key, value] of Object.entries(defaultHeaders)) {\n if (!responseHeaders.has(key)) {\n responseHeaders.set(key, value);\n }\n }\n return responseHeaders;\n}\n\n// src/text-stream/create-text-stream-response.ts\nfunction createTextStreamResponse({\n status,\n statusText,\n headers,\n stream\n}) {\n return new Response(stream.pipeThrough(new TextEncoderStream()), {\n status: status != null ? status : 200,\n statusText,\n headers: prepareHeaders(headers, {\n \"content-type\": \"text/plain; charset=utf-8\"\n })\n });\n}\n\n// src/util/write-to-server-response.ts\nfunction writeToServerResponse({\n response,\n status,\n statusText,\n headers,\n stream\n}) {\n const statusCode = status != null ? status : 200;\n if (statusText !== void 0) {\n response.writeHead(statusCode, statusText, headers);\n } else {\n response.writeHead(statusCode, 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 const canContinue = response.write(value);\n const flush = response.flush;\n if (typeof flush === \"function\") {\n flush.call(response);\n }\n if (!canContinue) {\n await new Promise((resolve3) => {\n response.once(\"drain\", resolve3);\n });\n }\n }\n } catch (error) {\n throw error;\n } finally {\n response.end();\n }\n };\n return read();\n}\n\n// src/text-stream/pipe-text-stream-to-response.ts\nfunction pipeTextStreamToResponse({\n response,\n status,\n statusText,\n headers,\n stream\n}) {\n return writeToServerResponse({\n response,\n status,\n statusText,\n headers: Object.fromEntries(\n prepareHeaders(headers, {\n \"content-type\": \"text/plain; charset=utf-8\"\n }).entries()\n ),\n stream: stream.pipeThrough(new TextEncoderStream())\n });\n}\n\n// src/text-stream/to-text-stream.ts\nfunction toTextStream({\n stream\n}) {\n return stream.pipeThrough(\n new TransformStream({\n transform(part, controller) {\n if (part.type === \"text-delta\") {\n controller.enqueue(part.text);\n }\n }\n })\n );\n}\n\n// src/ui-message-stream/json-to-sse-transform-stream.ts\nvar JsonToSseTransformStream = class extends TransformStream {\n constructor() {\n super({\n transform(part, controller) {\n controller.enqueue(`data: ${JSON.stringify(part)}\n\n`);\n },\n flush(controller) {\n controller.enqueue(\"data: [DONE]\\n\\n\");\n }\n });\n }\n};\n\n// src/ui-message-stream/ui-message-stream-headers.ts\nvar UI_MESSAGE_STREAM_HEADERS = {\n \"content-type\": \"text/event-stream\",\n \"cache-control\": \"no-cache\",\n connection: \"keep-alive\",\n \"x-vercel-ai-ui-message-stream\": \"v1\",\n \"x-accel-buffering\": \"no\"\n // disable nginx buffering\n};\n\n// src/ui-message-stream/create-ui-message-stream-response.ts\nfunction createUIMessageStreamResponse({\n status,\n statusText,\n headers,\n stream,\n consumeSseStream\n}) {\n let sseStream = stream.pipeThrough(new JsonToSseTransformStream());\n if (consumeSseStream) {\n const [stream1, stream2] = sseStream.tee();\n sseStream = stream1;\n consumeSseStream({ stream: stream2 });\n }\n return new Response(sseStream.pipeThrough(new TextEncoderStream()), {\n status,\n statusText,\n headers: prepareHeaders(headers, UI_MESSAGE_STREAM_HEADERS)\n });\n}\n\n// src/ui-message-stream/pipe-ui-message-stream-to-response.ts\nfunction pipeUIMessageStreamToResponse({\n response,\n status,\n statusText,\n headers,\n stream,\n consumeSseStream\n}) {\n let sseStream = stream.pipeThrough(new JsonToSseTransformStream());\n if (consumeSseStream) {\n const [stream1, stream2] = sseStream.tee();\n sseStream = stream1;\n consumeSseStream({ stream: stream2 });\n }\n return writeToServerResponse({\n response,\n status,\n statusText,\n headers: Object.fromEntries(\n prepareHeaders(headers, UI_MESSAGE_STREAM_HEADERS).entries()\n ),\n stream: sseStream.pipeThrough(new TextEncoderStream())\n });\n}\n\n// src/ui-message-stream/get-response-ui-message-id.ts\nfunction getResponseUIMessageId({\n originalMessages,\n responseMessageId\n}) {\n if (originalMessages == null) {\n return void 0;\n }\n const lastMessage = originalMessages[originalMessages.length - 1];\n return (lastMessage == null ? void 0 : lastMessage.role) === \"assistant\" ? lastMessage.id : typeof responseMessageId === \"function\" ? responseMessageId() : responseMessageId;\n}\n\n// src/ui/process-ui-message-stream.ts\nimport { validateTypes as validateTypes2 } from \"@ai-sdk/provider-utils\";\n\n// src/ui-message-stream/ui-message-chunks.ts\nimport { lazySchema, zodSchema } from \"@ai-sdk/provider-utils\";\nvar toolMetadataSchema = z.record(\n z.string(),\n jsonValueSchema.optional()\n);\nvar uiMessageChunkSchema = lazySchema(\n () => zodSchema(\n z.union([\n z.looseObject({\n type: z.literal(\"text-start\"),\n id: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"text-delta\"),\n id: z.string(),\n delta: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"text-end\"),\n id: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"error\"),\n errorText: z.string()\n }),\n z.looseObject({\n type: z.literal(\"tool-input-start\"),\n toolCallId: z.string(),\n toolName: z.string(),\n providerExecuted: z.boolean().optional(),\n providerMetadata: providerMetadataSchema.optional(),\n toolMetadata: toolMetadataSchema.optional(),\n dynamic: z.boolean().optional(),\n title: z.string().optional()\n }),\n z.looseObject({\n type: z.literal(\"tool-input-delta\"),\n toolCallId: z.string(),\n inputTextDelta: z.string()\n }),\n z.looseObject({\n type: z.literal(\"tool-input-available\"),\n toolCallId: z.string(),\n toolName: z.string(),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n providerMetadata: providerMetadataSchema.optional(),\n toolMetadata: toolMetadataSchema.optional(),\n dynamic: z.boolean().optional(),\n title: z.string().optional()\n }),\n z.looseObject({\n type: z.literal(\"tool-input-error\"),\n toolCallId: z.string(),\n toolName: z.string(),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n providerMetadata: providerMetadataSchema.optional(),\n toolMetadata: toolMetadataSchema.optional(),\n dynamic: z.boolean().optional(),\n errorText: z.string(),\n title: z.string().optional()\n }),\n z.looseObject({\n type: z.literal(\"tool-approval-request\"),\n approvalId: z.string(),\n toolCallId: z.string(),\n approvalDescriptor: z.unknown().optional(),\n reason: z.string().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n }),\n z.looseObject({\n type: z.literal(\"tool-approval-response\"),\n approvalId: z.string(),\n approved: z.boolean(),\n reason: z.string().optional(),\n providerExecuted: z.boolean().optional(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"tool-output-available\"),\n toolCallId: z.string(),\n output: z.unknown(),\n providerExecuted: z.boolean().optional(),\n providerMetadata: providerMetadataSchema.optional(),\n toolMetadata: toolMetadataSchema.optional(),\n dynamic: z.boolean().optional(),\n preliminary: z.boolean().optional()\n }),\n z.looseObject({\n type: z.literal(\"tool-output-error\"),\n toolCallId: z.string(),\n errorText: z.string(),\n providerExecuted: z.boolean().optional(),\n providerMetadata: providerMetadataSchema.optional(),\n toolMetadata: toolMetadataSchema.optional(),\n dynamic: z.boolean().optional()\n }),\n z.looseObject({\n type: z.literal(\"tool-output-denied\"),\n toolCallId: z.string()\n }),\n z.looseObject({\n type: z.literal(\"reasoning-start\"),\n id: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"reasoning-delta\"),\n id: z.string(),\n delta: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"reasoning-end\"),\n id: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"custom\"),\n kind: z.string().transform((value) => value),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"source-url\"),\n sourceId: z.string(),\n url: z.string(),\n title: z.string().optional(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"source-document\"),\n sourceId: z.string(),\n mediaType: z.string(),\n title: z.string(),\n filename: z.string().optional(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"file\"),\n url: z.string(),\n mediaType: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.literal(\"reasoning-file\"),\n url: z.string(),\n mediaType: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.looseObject({\n type: z.custom(\n (value) => typeof value === \"string\" && value.startsWith(\"data-\"),\n { message: 'Type must start with \"data-\"' }\n ),\n id: z.string().optional(),\n data: z.unknown(),\n transient: z.boolean().optional()\n }),\n z.looseObject({\n type: z.literal(\"start-step\")\n }),\n z.looseObject({\n type: z.literal(\"finish-step\")\n }),\n z.looseObject({\n type: z.literal(\"reset-step\")\n }),\n z.looseObject({\n type: z.literal(\"start\"),\n messageId: z.string().optional(),\n messageMetadata: z.unknown().optional()\n }),\n z.looseObject({\n type: z.literal(\"finish\"),\n finishReason: z.enum([\n \"stop\",\n \"length\",\n \"content-filter\",\n \"tool-calls\",\n \"error\",\n \"other\"\n ]).optional(),\n messageMetadata: z.unknown().optional()\n }),\n z.looseObject({\n type: z.literal(\"abort\"),\n reason: z.string().optional()\n }),\n z.looseObject({\n type: z.literal(\"message-metadata\"),\n messageMetadata: z.unknown()\n })\n ])\n )\n);\nfunction isDataUIMessageChunk(chunk) {\n return chunk.type.startsWith(\"data-\");\n}\n\n// src/util/create-id-map.ts\nfunction createIdMap() {\n return /* @__PURE__ */ Object.create(null);\n}\n\n// src/ui/ui-messages.ts\nfunction isDataUIPart(part) {\n return part.type.startsWith(\"data-\");\n}\nfunction isTextUIPart(part) {\n return part.type === \"text\";\n}\nfunction isCustomContentUIPart(part) {\n return part.type === \"custom\";\n}\nfunction isFileUIPart(part) {\n return part.type === \"file\";\n}\nfunction isReasoningFileUIPart(part) {\n return part.type === \"reasoning-file\";\n}\nfunction isReasoningUIPart(part) {\n return part.type === \"reasoning\";\n}\nfunction isStaticToolUIPart(part) {\n return part.type.startsWith(\"tool-\");\n}\nfunction isDynamicToolUIPart(part) {\n return part.type === \"dynamic-tool\";\n}\nfunction isToolUIPart(part) {\n return isStaticToolUIPart(part) || isDynamicToolUIPart(part);\n}\nfunction getStaticToolName(part) {\n return part.type.split(\"-\").slice(1).join(\"-\");\n}\nfunction getToolName(part) {\n return isDynamicToolUIPart(part) ? part.toolName : getStaticToolName(part);\n}\nvar getToolOrDynamicToolName = getToolName;\n\n// src/ui/process-ui-message-stream.ts\nfunction createStreamingUIMessageState({\n lastMessage,\n messageId\n}) {\n return {\n message: (lastMessage == null ? void 0 : lastMessage.role) === \"assistant\" ? lastMessage : {\n id: messageId,\n metadata: void 0,\n role: \"assistant\",\n parts: []\n },\n activeTextParts: createIdMap(),\n activeReasoningParts: createIdMap(),\n partialToolCalls: createIdMap()\n };\n}\nfunction processUIMessageStream({\n stream,\n messageMetadataSchema,\n dataPartSchemas,\n runUpdateMessageJob,\n onError,\n onToolCall,\n onData\n}) {\n return stream.pipeThrough(\n new TransformStream({\n async transform(chunk, controller) {\n await runUpdateMessageJob(async ({ state, write }) => {\n var _a25, _b25, _c, _d;\n function getCurrentStepParts() {\n const parts = state.message.parts;\n let currentStepStartIndex = parts.length - 1;\n while (currentStepStartIndex >= 0 && parts[currentStepStartIndex].type !== \"step-start\") {\n currentStepStartIndex--;\n }\n return parts.slice(currentStepStartIndex + 1);\n }\n function getCurrentStepToolInvocations() {\n return getCurrentStepParts().filter(isToolUIPart);\n }\n function getToolInvocation(toolCallId) {\n const toolInvocations = getCurrentStepToolInvocations();\n let toolInvocation = toolInvocations.find(\n (invocation) => invocation.toolCallId === toolCallId\n );\n if (toolInvocation == null) {\n const parts = state.message.parts;\n for (let i = parts.length - 1; i >= 0; i--) {\n const part = parts[i];\n if (isToolUIPart(part) && part.toolCallId === toolCallId) {\n toolInvocation = part;\n break;\n }\n }\n }\n if (toolInvocation == null) {\n throw new UIMessageStreamError({\n chunkType: \"tool-invocation\",\n chunkId: toolCallId,\n message: `No tool invocation found for tool call ID \"${toolCallId}\".`\n });\n }\n return toolInvocation;\n }\n function getToolInvocationByApprovalId(approvalId) {\n const toolInvocations = state.message.parts.filter(isToolUIPart);\n const toolInvocation = toolInvocations.find(\n (invocation) => {\n var _a26;\n return ((_a26 = invocation.approval) == null ? void 0 : _a26.id) === approvalId;\n }\n );\n if (toolInvocation == null) {\n throw new UIMessageStreamError({\n chunkType: \"tool-approval-response\",\n chunkId: approvalId,\n message: `No tool invocation found for approval ID \"${approvalId}\".`\n });\n }\n return toolInvocation;\n }\n function updateToolPart(options, existingPart) {\n var _a26;\n const part = existingPart != null ? existingPart : getCurrentStepParts().find(\n (part2) => isStaticToolUIPart(part2) && part2.toolCallId === options.toolCallId\n );\n const anyOptions = options;\n const anyPart = part;\n if (part != null) {\n part.state = options.state;\n anyPart.input = anyOptions.input;\n anyPart.output = anyOptions.output;\n anyPart.errorText = anyOptions.errorText;\n anyPart.rawInput = anyOptions.rawInput;\n anyPart.preliminary = anyOptions.preliminary;\n if (options.title !== void 0) {\n anyPart.title = options.title;\n }\n if (options.toolMetadata !== void 0) {\n anyPart.toolMetadata = options.toolMetadata;\n }\n anyPart.providerExecuted = (_a26 = anyOptions.providerExecuted) != null ? _a26 : part.providerExecuted;\n const providerMetadata = anyOptions.providerMetadata;\n if (providerMetadata != null) {\n if (options.state === \"output-available\" || options.state === \"output-error\") {\n const resultPart = part;\n resultPart.resultProviderMetadata = providerMetadata;\n } else {\n part.callProviderMetadata = providerMetadata;\n }\n }\n } else {\n state.message.parts.push({\n type: `tool-${options.toolName}`,\n toolCallId: options.toolCallId,\n state: options.state,\n title: options.title,\n ...options.toolMetadata !== void 0 ? { toolMetadata: options.toolMetadata } : {},\n input: anyOptions.input,\n output: anyOptions.output,\n rawInput: anyOptions.rawInput,\n errorText: anyOptions.errorText,\n providerExecuted: anyOptions.providerExecuted,\n preliminary: anyOptions.preliminary,\n ...anyOptions.providerMetadata != null && (options.state === \"output-available\" || options.state === \"output-error\") ? { resultProviderMetadata: anyOptions.providerMetadata } : {},\n ...anyOptions.providerMetadata != null && !(options.state === \"output-available\" || options.state === \"output-error\") ? { callProviderMetadata: anyOptions.providerMetadata } : {}\n });\n }\n }\n function updateDynamicToolPart(options, existingPart) {\n var _a26, _b26;\n const part = existingPart != null ? existingPart : getCurrentStepParts().find(\n (part2) => part2.type === \"dynamic-tool\" && part2.toolCallId === options.toolCallId\n );\n const anyOptions = options;\n const anyPart = part;\n if (part != null) {\n part.state = options.state;\n anyPart.toolName = options.toolName;\n anyPart.input = anyOptions.input;\n anyPart.output = anyOptions.output;\n anyPart.errorText = anyOptions.errorText;\n anyPart.rawInput = (_a26 = anyOptions.rawInput) != null ? _a26 : anyPart.rawInput;\n anyPart.preliminary = anyOptions.preliminary;\n if (options.title !== void 0) {\n anyPart.title = options.title;\n }\n if (options.toolMetadata !== void 0) {\n anyPart.toolMetadata = options.toolMetadata;\n }\n anyPart.providerExecuted = (_b26 = anyOptions.providerExecuted) != null ? _b26 : part.providerExecuted;\n const providerMetadata = anyOptions.providerMetadata;\n if (providerMetadata != null) {\n if (options.state === \"output-available\" || options.state === \"output-error\") {\n const resultPart = part;\n resultPart.resultProviderMetadata = providerMetadata;\n } else {\n part.callProviderMetadata = providerMetadata;\n }\n }\n } else {\n state.message.parts.push({\n type: \"dynamic-tool\",\n toolName: options.toolName,\n toolCallId: options.toolCallId,\n state: options.state,\n input: anyOptions.input,\n output: anyOptions.output,\n errorText: anyOptions.errorText,\n preliminary: anyOptions.preliminary,\n providerExecuted: anyOptions.providerExecuted,\n title: options.title,\n ...options.toolMetadata !== void 0 ? { toolMetadata: options.toolMetadata } : {},\n ...anyOptions.providerMetadata != null && (options.state === \"output-available\" || options.state === \"output-error\") ? { resultProviderMetadata: anyOptions.providerMetadata } : {},\n ...anyOptions.providerMetadata != null && !(options.state === \"output-available\" || options.state === \"output-error\") ? { callProviderMetadata: anyOptions.providerMetadata } : {}\n });\n }\n }\n async function updateMessageMetadata(metadata) {\n if (metadata != null) {\n const mergedMetadata = state.message.metadata != null ? mergeObjects(state.message.metadata, metadata) : metadata;\n if (messageMetadataSchema != null) {\n await validateTypes2({\n value: mergedMetadata,\n schema: messageMetadataSchema,\n context: {\n field: \"message.metadata\",\n entityId: state.message.id\n }\n });\n }\n state.message.metadata = mergedMetadata;\n }\n }\n switch (chunk.type) {\n case \"text-start\": {\n const textPart = {\n type: \"text\",\n text: \"\",\n providerMetadata: chunk.providerMetadata,\n state: \"streaming\"\n };\n state.activeTextParts[chunk.id] = textPart;\n state.message.parts.push(textPart);\n write();\n break;\n }\n case \"text-delta\": {\n const textPart = state.activeTextParts[chunk.id];\n if (textPart == null) {\n throw new UIMessageStreamError({\n chunkType: \"text-delta\",\n chunkId: chunk.id,\n message: `Received text-delta for missing text part with ID \"${chunk.id}\". Ensure a \"text-start\" chunk is sent before any \"text-delta\" chunks.`\n });\n }\n textPart.text += chunk.delta;\n textPart.providerMetadata = (_a25 = chunk.providerMetadata) != null ? _a25 : textPart.providerMetadata;\n write();\n break;\n }\n case \"text-end\": {\n const textPart = state.activeTextParts[chunk.id];\n if (textPart == null) {\n throw new UIMessageStreamError({\n chunkType: \"text-end\",\n chunkId: chunk.id,\n message: `Received text-end for missing text part with ID \"${chunk.id}\". Ensure a \"text-start\" chunk is sent before any \"text-end\" chunks.`\n });\n }\n textPart.state = \"done\";\n textPart.providerMetadata = (_b25 = chunk.providerMetadata) != null ? _b25 : textPart.providerMetadata;\n delete state.activeTextParts[chunk.id];\n write();\n break;\n }\n case \"custom\": {\n const customPart = {\n type: \"custom\",\n kind: chunk.kind,\n providerMetadata: chunk.providerMetadata\n };\n state.message.parts.push(customPart);\n write();\n break;\n }\n case \"reasoning-start\": {\n const reasoningPart = {\n type: \"reasoning\",\n id: chunk.id,\n text: \"\",\n providerMetadata: chunk.providerMetadata,\n state: \"streaming\"\n };\n state.activeReasoningParts[chunk.id] = reasoningPart;\n state.message.parts.push(reasoningPart);\n write();\n break;\n }\n case \"reasoning-delta\": {\n const reasoningPart = state.activeReasoningParts[chunk.id];\n if (reasoningPart == null) {\n throw new UIMessageStreamError({\n chunkType: \"reasoning-delta\",\n chunkId: chunk.id,\n message: `Received reasoning-delta for missing reasoning part with ID \"${chunk.id}\". Ensure a \"reasoning-start\" chunk is sent before any \"reasoning-delta\" chunks.`\n });\n }\n reasoningPart.text += chunk.delta;\n reasoningPart.providerMetadata = (_c = chunk.providerMetadata) != null ? _c : reasoningPart.providerMetadata;\n write();\n break;\n }\n case \"reasoning-end\": {\n const reasoningPart = state.activeReasoningParts[chunk.id];\n if (reasoningPart == null) {\n throw new UIMessageStreamError({\n chunkType: \"reasoning-end\",\n chunkId: chunk.id,\n message: `Received reasoning-end for missing reasoning part with ID \"${chunk.id}\". Ensure a \"reasoning-start\" chunk is sent before any \"reasoning-end\" chunks.`\n });\n }\n reasoningPart.providerMetadata = (_d = chunk.providerMetadata) != null ? _d : reasoningPart.providerMetadata;\n reasoningPart.state = \"done\";\n delete state.activeReasoningParts[chunk.id];\n write();\n break;\n }\n case \"file\":\n case \"reasoning-file\": {\n state.message.parts.push({\n type: chunk.type,\n mediaType: chunk.mediaType,\n url: chunk.url,\n ...chunk.providerMetadata != null ? { providerMetadata: chunk.providerMetadata } : {}\n });\n write();\n break;\n }\n case \"source-url\": {\n state.message.parts.push({\n type: \"source-url\",\n sourceId: chunk.sourceId,\n url: chunk.url,\n title: chunk.title,\n providerMetadata: chunk.providerMetadata\n });\n write();\n break;\n }\n case \"source-document\": {\n state.message.parts.push({\n type: \"source-document\",\n sourceId: chunk.sourceId,\n mediaType: chunk.mediaType,\n title: chunk.title,\n filename: chunk.filename,\n providerMetadata: chunk.providerMetadata\n });\n write();\n break;\n }\n case \"tool-input-start\": {\n const toolInvocations = getCurrentStepParts().filter(isStaticToolUIPart);\n state.partialToolCalls[chunk.toolCallId] = {\n text: \"\",\n toolName: chunk.toolName,\n index: toolInvocations.length,\n dynamic: chunk.dynamic,\n title: chunk.title,\n toolMetadata: chunk.toolMetadata\n };\n if (chunk.dynamic) {\n updateDynamicToolPart({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n state: \"input-streaming\",\n input: void 0,\n providerExecuted: chunk.providerExecuted,\n title: chunk.title,\n toolMetadata: chunk.toolMetadata,\n providerMetadata: chunk.providerMetadata\n });\n } else {\n updateToolPart({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n state: \"input-streaming\",\n input: void 0,\n providerExecuted: chunk.providerExecuted,\n title: chunk.title,\n toolMetadata: chunk.toolMetadata,\n providerMetadata: chunk.providerMetadata\n });\n }\n write();\n break;\n }\n case \"tool-input-delta\": {\n const partialToolCall = state.partialToolCalls[chunk.toolCallId];\n if (partialToolCall == null) {\n throw new UIMessageStreamError({\n chunkType: \"tool-input-delta\",\n chunkId: chunk.toolCallId,\n message: `Received tool-input-delta for missing tool call with ID \"${chunk.toolCallId}\". Ensure a \"tool-input-start\" chunk is sent before any \"tool-input-delta\" chunks.`\n });\n }\n partialToolCall.text += chunk.inputTextDelta;\n const { value: partialArgs } = await parsePartialJson(\n partialToolCall.text\n );\n if (partialToolCall.dynamic) {\n updateDynamicToolPart({\n toolCallId: chunk.toolCallId,\n toolName: partialToolCall.toolName,\n state: \"input-streaming\",\n input: partialArgs,\n title: partialToolCall.title,\n toolMetadata: partialToolCall.toolMetadata\n });\n } else {\n updateToolPart({\n toolCallId: chunk.toolCallId,\n toolName: partialToolCall.toolName,\n state: \"input-streaming\",\n input: partialArgs,\n title: partialToolCall.title,\n toolMetadata: partialToolCall.toolMetadata\n });\n }\n write();\n break;\n }\n case \"tool-input-available\": {\n if (chunk.dynamic) {\n updateDynamicToolPart({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n state: \"input-available\",\n input: chunk.input,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n title: chunk.title,\n toolMetadata: chunk.toolMetadata\n });\n } else {\n updateToolPart({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n state: \"input-available\",\n input: chunk.input,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n title: chunk.title,\n toolMetadata: chunk.toolMetadata\n });\n }\n write();\n if (onToolCall && !chunk.providerExecuted) {\n await onToolCall({\n toolCall: chunk\n });\n }\n break;\n }\n case \"tool-input-error\": {\n const existingPart = getCurrentStepParts().filter(isToolUIPart).find((p) => p.toolCallId === chunk.toolCallId);\n const isDynamic = existingPart != null ? existingPart.type === \"dynamic-tool\" : !!chunk.dynamic;\n if (isDynamic) {\n updateDynamicToolPart({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n state: \"output-error\",\n input: chunk.input,\n errorText: chunk.errorText,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n toolMetadata: chunk.toolMetadata\n });\n } else {\n updateToolPart({\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n state: \"output-error\",\n input: void 0,\n rawInput: chunk.input,\n errorText: chunk.errorText,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n toolMetadata: chunk.toolMetadata\n });\n }\n write();\n break;\n }\n case \"tool-approval-request\": {\n const toolInvocation = getToolInvocation(chunk.toolCallId);\n toolInvocation.state = \"approval-requested\";\n toolInvocation.approval = {\n id: chunk.approvalId,\n ...chunk.approvalDescriptor != null ? { descriptor: chunk.approvalDescriptor } : {},\n ...chunk.reason != null ? { requestReason: chunk.reason } : {},\n ...chunk.isAutomatic === true ? { isAutomatic: true } : {},\n ...chunk.signature != null ? { signature: chunk.signature } : {}\n };\n write();\n break;\n }\n case \"tool-approval-response\": {\n const toolInvocation = getToolInvocationByApprovalId(\n chunk.approvalId\n );\n const approval = toolInvocation.approval == null ? { id: chunk.approvalId } : toolInvocation.approval;\n toolInvocation.state = \"approval-responded\";\n toolInvocation.approval = {\n ...approval,\n id: chunk.approvalId,\n approved: chunk.approved,\n ...chunk.reason != null ? { reason: chunk.reason } : {}\n };\n if (chunk.providerExecuted != null) {\n toolInvocation.providerExecuted = chunk.providerExecuted;\n }\n if (chunk.providerMetadata != null) {\n toolInvocation.callProviderMetadata = chunk.providerMetadata;\n }\n write();\n break;\n }\n case \"tool-output-denied\": {\n const toolInvocation = getToolInvocation(chunk.toolCallId);\n toolInvocation.state = \"output-denied\";\n write();\n break;\n }\n case \"tool-output-available\": {\n const toolInvocation = getToolInvocation(chunk.toolCallId);\n if (toolInvocation.type === \"dynamic-tool\") {\n updateDynamicToolPart(\n {\n toolCallId: chunk.toolCallId,\n toolName: toolInvocation.toolName,\n state: \"output-available\",\n input: toolInvocation.input,\n output: chunk.output,\n preliminary: chunk.preliminary,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n title: toolInvocation.title,\n toolMetadata: toolInvocation.toolMetadata\n },\n toolInvocation\n );\n } else {\n updateToolPart(\n {\n toolCallId: chunk.toolCallId,\n toolName: getStaticToolName(toolInvocation),\n state: \"output-available\",\n input: toolInvocation.input,\n output: chunk.output,\n providerExecuted: chunk.providerExecuted,\n preliminary: chunk.preliminary,\n providerMetadata: chunk.providerMetadata,\n title: toolInvocation.title,\n toolMetadata: toolInvocation.toolMetadata\n },\n toolInvocation\n );\n }\n write();\n break;\n }\n case \"tool-output-error\": {\n const toolInvocation = getToolInvocation(chunk.toolCallId);\n if (toolInvocation.type === \"dynamic-tool\") {\n updateDynamicToolPart(\n {\n toolCallId: chunk.toolCallId,\n toolName: toolInvocation.toolName,\n state: \"output-error\",\n input: toolInvocation.input,\n errorText: chunk.errorText,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n title: toolInvocation.title,\n toolMetadata: toolInvocation.toolMetadata\n },\n toolInvocation\n );\n } else {\n updateToolPart(\n {\n toolCallId: chunk.toolCallId,\n toolName: getStaticToolName(toolInvocation),\n state: \"output-error\",\n input: toolInvocation.input,\n rawInput: toolInvocation.rawInput,\n errorText: chunk.errorText,\n providerExecuted: chunk.providerExecuted,\n providerMetadata: chunk.providerMetadata,\n title: toolInvocation.title,\n toolMetadata: toolInvocation.toolMetadata\n },\n toolInvocation\n );\n }\n write();\n break;\n }\n case \"start-step\": {\n state.message.parts.push({ type: \"step-start\" });\n break;\n }\n case \"finish-step\": {\n break;\n }\n case \"reset-step\": {\n const currentStepParts = getCurrentStepParts();\n state.activeTextParts = createIdMap();\n state.activeReasoningParts = createIdMap();\n state.partialToolCalls = createIdMap();\n if (currentStepParts.length > 0) {\n state.message.parts.splice(\n state.message.parts.length - currentStepParts.length,\n currentStepParts.length\n );\n write();\n }\n break;\n }\n case \"start\": {\n if (chunk.messageId != null) {\n state.message.id = chunk.messageId;\n }\n await updateMessageMetadata(chunk.messageMetadata);\n if (chunk.messageId != null || chunk.messageMetadata != null) {\n write({ updateStatus: false });\n }\n break;\n }\n case \"finish\": {\n if (chunk.finishReason != null) {\n state.finishReason = chunk.finishReason;\n }\n await updateMessageMetadata(chunk.messageMetadata);\n if (chunk.messageMetadata != null) {\n write();\n }\n break;\n }\n case \"message-metadata\": {\n await updateMessageMetadata(chunk.messageMetadata);\n if (chunk.messageMetadata != null) {\n write();\n }\n break;\n }\n case \"error\": {\n onError == null ? void 0 : onError(new Error(chunk.errorText));\n break;\n }\n default: {\n if (isDataUIMessageChunk(chunk)) {\n if ((dataPartSchemas == null ? void 0 : dataPartSchemas[chunk.type]) != null) {\n const partIdx = state.message.parts.findIndex(\n (p) => \"id\" in p && \"data\" in p && p.id === chunk.id && p.type === chunk.type\n );\n const actualPartIdx = partIdx >= 0 ? partIdx : state.message.parts.length;\n await validateTypes2({\n value: chunk.data,\n schema: dataPartSchemas[chunk.type],\n context: {\n field: `message.parts[${actualPartIdx}].data`,\n entityName: chunk.type,\n entityId: chunk.id\n }\n });\n }\n const dataChunk = chunk;\n if (dataChunk.transient) {\n onData == null ? void 0 : onData(dataChunk);\n break;\n }\n const existingUIPart = dataChunk.id != null ? state.message.parts.find(\n (chunkArg) => dataChunk.type === chunkArg.type && dataChunk.id === chunkArg.id\n ) : void 0;\n if (existingUIPart != null) {\n existingUIPart.data = dataChunk.data;\n } else {\n state.message.parts.push(dataChunk);\n }\n onData == null ? void 0 : onData(dataChunk);\n write();\n }\n }\n }\n controller.enqueue(chunk);\n });\n }\n })\n );\n}\n\n// src/ui-message-stream/handle-ui-message-stream-finish.ts\nfunction handleUIMessageStreamFinish({\n messageId,\n originalMessages = [],\n onStepEnd,\n onStepFinish,\n onEnd,\n onFinish,\n onError,\n stream,\n getOutcome\n}) {\n let lastMessage = originalMessages == null ? void 0 : originalMessages[originalMessages.length - 1];\n if ((lastMessage == null ? void 0 : lastMessage.role) !== \"assistant\") {\n lastMessage = void 0;\n } else {\n messageId = lastMessage.id;\n }\n let isAborted = false;\n let hasProcessingFailure = false;\n let processingError;\n const recordProcessingFailure = (error) => {\n hasProcessingFailure = true;\n processingError = error;\n };\n const idInjectedStream = stream.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n try {\n let outputChunk = chunk;\n if (chunk.type === \"start\") {\n const startChunk = chunk;\n if (startChunk.messageId == null && messageId != null) {\n outputChunk = {\n ...startChunk,\n messageId\n };\n }\n }\n if (chunk.type === \"abort\") {\n isAborted = true;\n }\n controller.enqueue(outputChunk);\n } catch (error) {\n recordProcessingFailure(error);\n throw error;\n }\n }\n })\n );\n const resolvedOnStepEnd = onStepEnd != null ? onStepEnd : onStepFinish;\n const resolvedOnEnd = onEnd != null ? onEnd : onFinish;\n if (resolvedOnEnd == null && resolvedOnStepEnd == null) {\n return idInjectedStream;\n }\n const state = createStreamingUIMessageState({\n lastMessage: lastMessage ? structuredClone(lastMessage) : void 0,\n messageId: messageId != null ? messageId : \"\"\n // will be overridden by the stream\n });\n const runUpdateMessageJob = async (job) => {\n try {\n await job({ state, write: () => {\n } });\n } catch (error) {\n recordProcessingFailure(error);\n throw error;\n }\n };\n let finishCalled = false;\n const callOnEnd = async () => {\n var _a25;\n if (finishCalled || !resolvedOnEnd) {\n return;\n }\n finishCalled = true;\n const isContinuation = state.message.id === (lastMessage == null ? void 0 : lastMessage.id);\n const declaredOutcome = (_a25 = getOutcome == null ? void 0 : getOutcome()) != null ? _a25 : { status: \"unknown\" };\n const outcome = hasProcessingFailure ? { status: \"failed\", error: processingError } : declaredOutcome.status === \"unknown\" && isAborted ? { status: \"aborted\" } : declaredOutcome;\n await resolvedOnEnd({\n isAborted: isAborted || outcome.status === \"aborted\",\n isContinuation,\n outcome,\n responseMessage: state.message,\n messages: [\n ...isContinuation ? originalMessages.slice(0, -1) : originalMessages,\n state.message\n ],\n finishReason: state.finishReason\n });\n };\n const callOnStepFinish = async () => {\n if (!resolvedOnStepEnd) {\n return;\n }\n const isContinuation = state.message.id === (lastMessage == null ? void 0 : lastMessage.id);\n try {\n await resolvedOnStepEnd({\n isContinuation,\n responseMessage: structuredClone(state.message),\n messages: [\n ...isContinuation ? originalMessages.slice(0, -1) : originalMessages,\n structuredClone(state.message)\n ]\n });\n } catch (error) {\n onError(error);\n }\n };\n return processUIMessageStream({\n stream: idInjectedStream,\n runUpdateMessageJob,\n onError\n }).pipeThrough(\n new TransformStream({\n async transform(chunk, controller) {\n if (chunk.type === \"finish-step\") {\n await callOnStepFinish();\n }\n controller.enqueue(chunk);\n },\n // @ts-expect-error cancel is still new and missing from types https://developer.mozilla.org/en-US/docs/Web/API/TransformStream#browser_compatibility\n async cancel() {\n await callOnEnd();\n },\n async flush() {\n await callOnEnd();\n }\n })\n );\n}\n\n// src/ui-message-stream/to-ui-message-chunk.ts\nfunction toUIMessageChunk(part, {\n tools,\n sendReasoning = true,\n sendSources = false,\n sendStart = true,\n sendFinish = true,\n onError = () => \"An error occurred.\",\n // prevent leaking server error details to the client by default\n messageMetadata,\n responseMessageId\n} = {}) {\n const isDynamic = (toolPart) => {\n const tool2 = tools == null ? void 0 : tools[toolPart.toolName];\n if (tool2 == null) {\n return toolPart.dynamic;\n }\n return (tool2 == null ? void 0 : tool2.type) === \"dynamic\" ? true : void 0;\n };\n const partType = part.type;\n switch (partType) {\n case \"text-start\": {\n return {\n type: \"text-start\",\n id: part.id,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n };\n }\n case \"text-delta\": {\n return {\n type: \"text-delta\",\n id: part.id,\n delta: part.text,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n };\n }\n case \"text-end\": {\n return {\n type: \"text-end\",\n id: part.id,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n };\n }\n case \"reasoning-start\":\n case \"reasoning-end\": {\n if (!sendReasoning) {\n return void 0;\n }\n return {\n type: partType,\n id: part.id,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n };\n }\n case \"reasoning-delta\": {\n if (!sendReasoning) {\n return void 0;\n }\n return {\n type: \"reasoning-delta\",\n id: part.id,\n delta: part.text,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n };\n }\n case \"file\":\n case \"reasoning-file\": {\n if (partType === \"reasoning-file\" && !sendReasoning) {\n return void 0;\n }\n return {\n type: part.type,\n mediaType: part.file.mediaType,\n url: `data:${part.file.mediaType};base64,${part.file.base64}`,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n };\n }\n case \"source\": {\n if (!sendSources) {\n return void 0;\n }\n if (part.sourceType === \"url\") {\n return {\n type: \"source-url\",\n sourceId: part.id,\n url: part.url,\n title: part.title,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n };\n }\n if (part.sourceType === \"document\") {\n return {\n type: \"source-document\",\n sourceId: part.id,\n mediaType: part.mediaType,\n title: part.title,\n filename: part.filename,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n };\n }\n return void 0;\n }\n case \"custom\": {\n return {\n type: \"custom\",\n kind: part.kind,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n };\n }\n case \"tool-input-start\": {\n const dynamic = isDynamic(part);\n return {\n type: \"tool-input-start\",\n toolCallId: part.id,\n toolName: part.toolName,\n ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n ...part.toolMetadata != null ? { toolMetadata: part.toolMetadata } : {},\n ...dynamic != null ? { dynamic } : {},\n ...part.title != null ? { title: part.title } : {}\n };\n }\n case \"tool-input-delta\": {\n return {\n type: \"tool-input-delta\",\n toolCallId: part.id,\n inputTextDelta: part.delta\n };\n }\n case \"tool-call\": {\n const dynamic = isDynamic(part);\n if (part.invalid) {\n return {\n type: \"tool-input-error\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n ...part.toolMetadata != null ? { toolMetadata: part.toolMetadata } : {},\n ...dynamic != null ? { dynamic } : {},\n errorText: onError(part.error),\n ...part.title != null ? { title: part.title } : {}\n };\n }\n return {\n type: \"tool-input-available\",\n toolCallId: part.toolCallId,\n toolName: part.toolName,\n input: part.input,\n ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n ...part.toolMetadata != null ? { toolMetadata: part.toolMetadata } : {},\n ...dynamic != null ? { dynamic } : {},\n ...part.title != null ? { title: part.title } : {}\n };\n }\n case \"tool-approval-request\": {\n return {\n type: \"tool-approval-request\",\n approvalId: part.approvalId,\n toolCallId: part.toolCall.toolCallId,\n ...part.reason != null ? { reason: part.reason } : {},\n ...part.isAutomatic != null ? { isAutomatic: part.isAutomatic } : {},\n ...part.signature != null ? { signature: part.signature } : {}\n };\n }\n case \"tool-approval-response\": {\n return {\n type: \"tool-approval-response\",\n approvalId: part.approvalId,\n approved: part.approved,\n ...part.reason != null ? { reason: part.reason } : {},\n ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {}\n };\n }\n case \"tool-result\": {\n const dynamic = isDynamic(part);\n return {\n type: \"tool-output-available\",\n toolCallId: part.toolCallId,\n // UI stream chunks are serialized as JSON, which drops undefined\n // properties. Use null so tool outputs always keep the output field.\n output: part.output === void 0 ? null : part.output,\n ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n ...part.toolMetadata != null ? { toolMetadata: part.toolMetadata } : {},\n ...part.preliminary != null ? { preliminary: part.preliminary } : {},\n ...dynamic != null ? { dynamic } : {}\n };\n }\n case \"tool-error\": {\n const dynamic = isDynamic(part);\n return {\n type: \"tool-output-error\",\n toolCallId: part.toolCallId,\n errorText: part.providerExecuted ? typeof part.error === \"string\" ? part.error : JSON.stringify(part.error) : onError(part.error),\n ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},\n ...part.toolMetadata != null ? { toolMetadata: part.toolMetadata } : {},\n ...dynamic != null ? { dynamic } : {}\n };\n }\n case \"tool-output-denied\": {\n return {\n type: \"tool-output-denied\",\n toolCallId: part.toolCallId\n };\n }\n case \"error\": {\n return {\n type: \"error\",\n errorText: onError(part.error)\n };\n }\n case \"start-step\": {\n return { type: \"start-step\" };\n }\n case \"finish-step\": {\n return { type: \"finish-step\" };\n }\n case \"start\": {\n if (!sendStart) {\n return void 0;\n }\n return {\n type: \"start\",\n ...messageMetadata != null ? { messageMetadata } : {},\n ...responseMessageId != null ? { messageId: responseMessageId } : {}\n };\n }\n case \"finish\": {\n if (!sendFinish) {\n return void 0;\n }\n return {\n type: \"finish\",\n finishReason: part.finishReason,\n ...messageMetadata != null ? { messageMetadata } : {}\n };\n }\n case \"abort\": {\n return part;\n }\n case \"tool-input-end\":\n case \"raw\": {\n return void 0;\n }\n default: {\n const exhaustiveCheck = partType;\n throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n }\n }\n}\n\n// src/ui-message-stream/to-ui-message-stream.ts\nfunction toUIMessageStream({\n stream,\n tools,\n sendReasoning = true,\n sendSources = false,\n sendStart = true,\n sendFinish = true,\n onError = () => \"An error occurred.\",\n // prevent leaking server error details to the client by default\n messageMetadata,\n originalMessages,\n generateMessageId,\n onEnd,\n onFinish\n}) {\n let outcome = { status: \"unknown\" };\n let hasFatalFailure = false;\n const setSourceOutcome = (newOutcome) => {\n if (!hasFatalFailure && outcome.status !== \"completed\" && outcome.status !== \"aborted\" && newOutcome.status !== \"unknown\" && (outcome.status === \"unknown\" || newOutcome.status !== \"failed\")) {\n outcome = newOutcome;\n }\n };\n const failOutcome = (error) => {\n hasFatalFailure = true;\n outcome = { status: \"failed\", error };\n };\n const responseMessageId = generateMessageId != null ? getResponseUIMessageId({\n originalMessages,\n responseMessageId: generateMessageId\n }) : void 0;\n const sourceReader = stream.getReader();\n let sourceReaderReleased = false;\n let sourceStreamCancelled = false;\n const releaseSourceReader = () => {\n if (!sourceReaderReleased) {\n sourceReader.releaseLock();\n sourceReaderReleased = true;\n }\n };\n const sourceStream = new ReadableStream({\n async pull(controller) {\n try {\n const { done, value } = await sourceReader.read();\n if (done) {\n releaseSourceReader();\n if (!sourceStreamCancelled) {\n controller.close();\n }\n } else {\n controller.enqueue(value);\n }\n } catch (error) {\n releaseSourceReader();\n if (!sourceStreamCancelled) {\n failOutcome(error);\n controller.error(error);\n }\n }\n },\n async cancel(reason) {\n sourceStreamCancelled = true;\n if (sourceReaderReleased) {\n return;\n }\n try {\n await sourceReader.cancel(reason);\n } finally {\n releaseSourceReader();\n }\n }\n });\n const uiMessageChunkStream = sourceStream.pipeThrough(\n new TransformStream({\n transform: async (part, controller) => {\n try {\n const messageMetadataValue = messageMetadata == null ? void 0 : messageMetadata({ part });\n const uiMessageChunk = toUIMessageChunk(part, {\n tools,\n sendReasoning,\n sendSources,\n sendStart,\n sendFinish,\n onError,\n messageMetadata: messageMetadataValue,\n responseMessageId\n });\n if (uiMessageChunk != null) {\n controller.enqueue(uiMessageChunk);\n }\n if (messageMetadataValue != null && part.type !== \"start\" && part.type !== \"finish\") {\n controller.enqueue({\n type: \"message-metadata\",\n messageMetadata: messageMetadataValue\n });\n }\n if (part.type === \"finish\") {\n setSourceOutcome({ status: \"completed\" });\n } else if (part.type === \"abort\") {\n setSourceOutcome({ status: \"aborted\" });\n } else if (part.type === \"error\") {\n setSourceOutcome({ status: \"failed\", error: part.error });\n }\n } catch (error) {\n failOutcome(error);\n throw error;\n }\n }\n })\n );\n return handleUIMessageStreamFinish({\n stream: uiMessageChunkStream,\n messageId: responseMessageId != null ? responseMessageId : generateMessageId == null ? void 0 : generateMessageId(),\n originalMessages,\n onEnd: onEnd != null ? onEnd : onFinish,\n onError,\n getOutcome: () => outcome\n });\n}\n\n// src/util/async-iterable-stream.ts\nfunction createAsyncIterableStream(source) {\n return asAsyncIterableStream(source.pipeThrough(new TransformStream()));\n}\nfunction asAsyncIterableStream(stream) {\n stream[Symbol.asyncIterator] = function() {\n const reader = this.getReader();\n let finished = false;\n async function cleanup(cancelStream) {\n var _a25;\n if (finished) return;\n finished = true;\n try {\n if (cancelStream) {\n await ((_a25 = reader.cancel) == null ? void 0 : _a25.call(reader));\n }\n } finally {\n try {\n reader.releaseLock();\n } catch (e) {\n }\n }\n }\n return {\n /**\n * Reads the next chunk from the stream.\n * @returns A promise resolving to the next IteratorResult.\n */\n async next() {\n if (finished) {\n return { done: true, value: void 0 };\n }\n let result;\n try {\n result = await reader.read();\n } catch (error) {\n await cleanup(false);\n throw error;\n }\n const { done, value } = result;\n if (done) {\n await cleanup(true);\n return { done: true, value: void 0 };\n }\n return { done: false, value };\n },\n /**\n * May be called on early exit (e.g., break from for-await) or after completion.\n * Ensures the stream is cancelled and resources are released.\n * @returns A promise resolving to a completed IteratorResult.\n */\n async return() {\n await cleanup(true);\n return { done: true, value: void 0 };\n },\n /**\n * Called on early exit with error.\n * Ensures the stream is cancelled and resources are released, then rethrows the error.\n * @param err The error to throw.\n * @returns A promise that rejects with the provided error.\n */\n async throw(err) {\n await cleanup(true);\n throw err;\n }\n };\n };\n return stream;\n}\n\n// src/util/consume-stream.ts\nasync function consumeStream({\n stream,\n onError,\n abortSignal\n}) {\n const reader = stream.getReader();\n const cancelOnAbort = () => {\n reader.cancel().catch(() => {\n });\n };\n if (abortSignal == null ? void 0 : abortSignal.aborted) {\n cancelOnAbort();\n } else {\n abortSignal == null ? void 0 : abortSignal.addEventListener(\"abort\", cancelOnAbort, { once: true });\n }\n try {\n while (true) {\n const { done } = await reader.read();\n if (done) break;\n }\n } catch (error) {\n onError == null ? void 0 : onError(error);\n } finally {\n abortSignal == null ? void 0 : abortSignal.removeEventListener(\"abort\", cancelOnAbort);\n reader.releaseLock();\n }\n}\n\n// src/util/create-resolvable-promise.ts\nfunction createResolvablePromise() {\n let resolve3;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve3 = res;\n reject = rej;\n });\n return {\n promise,\n resolve: resolve3,\n reject\n };\n}\n\n// src/util/create-stitchable-stream.ts\nfunction createStitchableStream() {\n let innerStreams = [];\n let controller = null;\n let isClosed = false;\n let isCancelled = false;\n let waitForNewStream = createResolvablePromise();\n const terminate = () => {\n if (isCancelled) {\n return;\n }\n isClosed = true;\n waitForNewStream.resolve();\n innerStreams.forEach(({ reader, onCancel }) => {\n onCancel == null ? void 0 : onCancel();\n reader.cancel();\n });\n innerStreams = [];\n controller == null ? void 0 : controller.close();\n };\n const processPull = async () => {\n var _a25;\n if (isCancelled) {\n return;\n }\n if (isClosed && innerStreams.length === 0) {\n controller == null ? void 0 : controller.close();\n return;\n }\n if (innerStreams.length === 0) {\n waitForNewStream = createResolvablePromise();\n await waitForNewStream.promise;\n return await processPull();\n }\n const currentStream = innerStreams[0];\n try {\n const { value, done } = await currentStream.reader.read();\n if (isCancelled) {\n return;\n }\n if (done) {\n innerStreams.shift();\n if (innerStreams.length === 0 && isClosed) {\n controller == null ? void 0 : controller.close();\n } else {\n await processPull();\n }\n } else {\n controller == null ? void 0 : controller.enqueue(value);\n }\n } catch (error) {\n if (isCancelled) {\n return;\n }\n (_a25 = currentStream.onError) == null ? void 0 : _a25.call(currentStream, error);\n controller == null ? void 0 : controller.error(error);\n innerStreams.shift();\n terminate();\n }\n };\n return {\n stream: new ReadableStream({\n start(controllerParam) {\n controller = controllerParam;\n },\n pull: processPull,\n async cancel() {\n isCancelled = true;\n isClosed = true;\n waitForNewStream.resolve();\n for (const { reader, onCancel } of innerStreams) {\n onCancel == null ? void 0 : onCancel();\n await reader.cancel();\n }\n innerStreams = [];\n }\n }),\n addStream: (innerStream, callbacks) => {\n var _a25;\n if (isCancelled) {\n (_a25 = callbacks == null ? void 0 : callbacks.onCancel) == null ? void 0 : _a25.call(callbacks);\n void innerStream.cancel().catch(() => {\n });\n return;\n }\n if (isClosed) {\n throw new Error(\"Cannot add inner stream: outer stream is closed\");\n }\n innerStreams.push({\n reader: innerStream.getReader(),\n ...callbacks\n });\n waitForNewStream.resolve();\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 if (isCancelled) {\n return;\n }\n isClosed = true;\n waitForNewStream.resolve();\n if (innerStreams.length === 0) {\n controller == null ? void 0 : controller.close();\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 };\n}\n\n// src/generate-text/execute-tools-from-stream.ts\nfunction executeToolsFromStream({\n stream,\n tools,\n callId,\n messages,\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n toolsContext,\n toolApproval,\n runtimeContext,\n toolApprovalSecret,\n generateId: generateId4,\n onToolExecutionStart,\n onToolExecutionEnd,\n executeToolInTelemetryContext,\n runInTracingChannelSpan\n}) {\n const toolCallsToExecute = [];\n return stream.pipeThrough(\n new TransformStream({\n async transform(chunk, controller) {\n controller.enqueue(chunk);\n const chunkType = chunk.type;\n switch (chunkType) {\n case \"tool-call\": {\n if (chunk.invalid) {\n return;\n }\n const tool2 = getOwn(tools, chunk.toolName);\n if (tool2 == null) {\n return;\n }\n const toolApprovalStatus = await resolveToolApproval({\n tools,\n toolCall: chunk,\n toolApproval,\n messages,\n toolsContext,\n runtimeContext\n });\n if (toolApprovalStatus.type === \"not-applicable\") {\n if (tool2.execute != null && chunk.providerExecuted !== true) {\n toolCallsToExecute.push(chunk);\n }\n return;\n }\n const approvalId = generateId4();\n const signature = await maybeSignApproval({\n secret: toolApprovalSecret,\n approvalId,\n toolCallId: chunk.toolCallId,\n toolName: chunk.toolName,\n input: chunk.input\n });\n switch (toolApprovalStatus.type) {\n case \"user-approval\": {\n controller.enqueue({\n type: \"tool-approval-request\",\n approvalId,\n toolCall: chunk,\n ...toolApprovalStatus.reason != null ? { reason: toolApprovalStatus.reason } : {},\n ...signature != null ? { signature } : {}\n });\n return;\n }\n case \"denied\": {\n controller.enqueue({\n type: \"tool-approval-request\",\n approvalId,\n toolCall: chunk,\n isAutomatic: true,\n ...signature != null ? { signature } : {}\n });\n controller.enqueue({\n type: \"tool-approval-response\",\n approvalId,\n approved: false,\n toolCall: chunk,\n reason: toolApprovalStatus.reason,\n providerExecuted: chunk.providerExecuted\n });\n return;\n }\n case \"approved\": {\n controller.enqueue({\n type: \"tool-approval-request\",\n approvalId,\n toolCall: chunk,\n isAutomatic: true,\n ...signature != null ? { signature } : {}\n });\n controller.enqueue({\n type: \"tool-approval-response\",\n approvalId,\n approved: true,\n toolCall: chunk,\n reason: toolApprovalStatus.reason,\n providerExecuted: chunk.providerExecuted\n });\n break;\n }\n }\n if (tool2.execute != null && chunk.providerExecuted !== true) {\n toolCallsToExecute.push(chunk);\n }\n return;\n }\n case \"model-call-end\": {\n if (!isToolExecutionAllowedFinishReason(chunk.finishReason)) {\n return;\n }\n await Promise.all(\n toolCallsToExecute.map(async (toolCall) => {\n try {\n const result = await executeToolCall({\n toolCall,\n tools,\n callId,\n messages,\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n toolsContext,\n onToolExecutionStart,\n onToolExecutionEnd,\n executeToolInTelemetryContext,\n runInTracingChannelSpan,\n onPreliminaryToolResult: (result2) => {\n controller.enqueue(result2);\n }\n });\n if (result != null) {\n controller.enqueue({\n type: \"tool-execution-end\",\n toolCallId: result.output.toolCallId,\n toolExecutionMs: result.toolExecutionMs\n });\n controller.enqueue(result.output);\n }\n } catch (error) {\n controller.enqueue({\n type: \"error\",\n error\n });\n }\n })\n );\n return;\n }\n }\n }\n })\n );\n}\n\n// src/generate-text/invoke-tool-callbacks-from-stream.ts\nfunction invokeToolCallbacksFromStream({\n stream,\n tools,\n stepInputMessages,\n abortSignal,\n runtimeContext\n}) {\n if (tools == null) return stream;\n const ongoingToolCallToolNames = createIdMap();\n return stream.pipeThrough(\n new TransformStream({\n async transform(chunk, controller) {\n controller.enqueue(chunk);\n switch (chunk.type) {\n case \"tool-input-start\": {\n ongoingToolCallToolNames[chunk.id] = chunk.toolName;\n const tool2 = getOwn(tools, chunk.toolName);\n if ((tool2 == null ? void 0 : tool2.onInputStart) != null) {\n await tool2.onInputStart({\n toolCallId: chunk.id,\n messages: stepInputMessages,\n abortSignal,\n context: runtimeContext\n });\n }\n break;\n }\n case \"tool-input-delta\": {\n const toolName = ongoingToolCallToolNames[chunk.id];\n const tool2 = getOwn(tools, toolName);\n if ((tool2 == null ? void 0 : tool2.onInputDelta) != null) {\n await tool2.onInputDelta({\n inputTextDelta: chunk.delta,\n toolCallId: chunk.id,\n messages: stepInputMessages,\n abortSignal,\n context: runtimeContext\n });\n }\n break;\n }\n case \"tool-call\": {\n const toolName = ongoingToolCallToolNames[chunk.toolCallId];\n const tool2 = getOwn(tools, toolName);\n delete ongoingToolCallToolNames[chunk.toolCallId];\n if ((tool2 == null ? void 0 : tool2.onInputAvailable) != null) {\n await tool2.onInputAvailable({\n input: chunk.input,\n toolCallId: chunk.toolCallId,\n messages: stepInputMessages,\n abortSignal,\n context: runtimeContext\n });\n }\n }\n }\n }\n })\n );\n}\n\n// src/generate-text/stream-language-model-call.ts\nimport {\n getErrorMessage as getErrorMessage5\n} from \"@ai-sdk/provider\";\nimport {\n createIdGenerator as createIdGenerator2\n} from \"@ai-sdk/provider-utils\";\n\n// src/prompt/normalize-stream-provider-error.ts\nimport { AISDKError as AISDKError27 } from \"@ai-sdk/provider\";\nimport { isProviderStreamError } from \"@ai-sdk/provider-utils\";\nfunction normalizeStreamProviderError(error) {\n var _a25, _b25, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p;\n if (isError(error) || AISDKError27.isInstance(error) || StreamProviderError.isInstance(error)) {\n return error;\n }\n const outer = asRecord(error);\n if (outer == null) {\n return error;\n }\n const providerStreamError = isProviderStreamError(error);\n const details = providerStreamError ? outer : (_c = (_b25 = asRecord((_a25 = asRecord(outer.response)) == null ? void 0 : _a25.error)) != null ? _b25 : asRecord(outer.error)) != null ? _c : outer;\n if (typeof details.message !== \"string\") {\n return error;\n }\n const type = (_d = getString(details.type)) != null ? _d : getString(outer.type);\n const code = (_e = getStringOrNumber(details.code)) != null ? _e : getStringOrNumber(outer.code);\n const explicitStatusCode = (_l = (_k = (_j = (_i = (_h = (_g = (_f = getHttpStatusCode(details.statusCode)) != null ? _f : getHttpStatusCode(outer.statusCode)) != null ? _g : getHttpStatusCode(details.status_code)) != null ? _h : getHttpStatusCode(outer.status_code)) != null ? _i : getHttpStatusCode(details.status)) != null ? _j : getHttpStatusCode(outer.status)) != null ? _k : getHttpStatusCode(details.code)) != null ? _l : getHttpStatusCode(outer.code);\n const messageMetadata = inferExactMessageMetadata(details.message);\n const statusCode = explicitStatusCode != null ? explicitStatusCode : messageMetadata == null ? void 0 : messageMetadata.statusCode;\n const explicitRetryability = (_o = (_n = (_m = getBoolean(details.isRetryable)) != null ? _m : getBoolean(outer.isRetryable)) != null ? _n : getBoolean(details.is_retryable)) != null ? _o : getBoolean(outer.is_retryable);\n return new StreamProviderError({\n message: details.message,\n type,\n code,\n statusCode,\n isRetryable: (_p = explicitRetryability != null ? explicitRetryability : messageMetadata == null ? void 0 : messageMetadata.isRetryable) != null ? _p : isRetryableStatusCode2(statusCode),\n data: providerStreamError ? error.data : error\n });\n}\nfunction inferExactMessageMetadata(message) {\n switch (message.trim().toLowerCase()) {\n case \"overloaded\":\n case \"overloaded error\":\n case \"model overloaded\":\n return { statusCode: 503, isRetryable: true };\n case \"internal server error\":\n return { statusCode: 500, isRetryable: true };\n case \"service unavailable\":\n return { statusCode: 503, isRetryable: true };\n default:\n return void 0;\n }\n}\nfunction isRetryableStatusCode2(statusCode) {\n return statusCode != null && (statusCode === 408 || statusCode === 409 || statusCode === 429 || statusCode >= 500);\n}\nfunction asRecord(value) {\n return typeof value === \"object\" && value != null ? value : void 0;\n}\nfunction isError(value) {\n return value instanceof Error || Object.prototype.toString.call(value) === \"[object Error]\";\n}\nfunction getString(value) {\n return typeof value === \"string\" ? value : void 0;\n}\nfunction getStringOrNumber(value) {\n return typeof value === \"string\" || typeof value === \"number\" ? value : void 0;\n}\nfunction getBoolean(value) {\n return typeof value === \"boolean\" ? value : void 0;\n}\nfunction getHttpStatusCode(value) {\n const statusCode = typeof value === \"string\" && /^\\d{3}$/.test(value) ? Number(value) : value;\n return typeof statusCode === \"number\" && Number.isInteger(statusCode) && statusCode >= 400 && statusCode <= 599 ? statusCode : void 0;\n}\n\n// src/generate-text/stream-language-model-call.ts\nvar originalGenerateId2 = createIdGenerator2({\n prefix: \"aitxt\",\n size: 24\n});\nvar originalGenerateCallId2 = createIdGenerator2({\n prefix: \"call\",\n size: 24\n});\nasync function streamLanguageModelCall({\n model,\n tools,\n toolOrder,\n output,\n toolChoice,\n prompt,\n system,\n instructions,\n messages,\n allowSystemInMessages,\n download: download2,\n abortSignal,\n headers,\n includeRawChunks,\n providerOptions,\n repairToolCall,\n refineToolInput,\n executeLanguageModelCallInTelemetryContext = async ({ execute }) => await execute(),\n callId,\n toolsContext,\n experimental_sandbox: sandbox,\n _internal: {\n generateId: generateId4 = originalGenerateId2,\n generateCallId = originalGenerateCallId2,\n now: now2 = now\n } = {},\n onStart,\n onLanguageModelCallStart,\n onLanguageModelCallEnd,\n ...callSettings\n}) {\n const resolvedModel = resolveLanguageModel(model);\n const effectiveCallId = callId != null ? callId : generateCallId();\n const standardizedPrompt = await standardizePrompt({\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages\n });\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: {\n instructions: standardizedPrompt.instructions,\n messages: standardizedPrompt.messages\n },\n supportedUrls: await resolvedModel.supportedUrls,\n download: download2,\n provider: resolvedModel.provider.split(\".\")[0]\n });\n const stepTools = await prepareTools({\n tools,\n toolOrder,\n toolsContext,\n experimental_sandbox: sandbox\n });\n const stepToolChoice = prepareToolChoice({\n toolChoice\n });\n await notify({\n event: { promptMessages },\n callbacks: onStart\n });\n const languageModelCallContext = {\n provider: resolvedModel.provider,\n modelId: resolvedModel.modelId,\n instructions: standardizedPrompt.instructions,\n messages: standardizedPrompt.messages,\n tools: stepTools,\n ...callSettings\n };\n const languageModelCallStartEvent = {\n callId: effectiveCallId,\n ...languageModelCallContext\n };\n await notify({\n event: languageModelCallStartEvent,\n callbacks: onLanguageModelCallStart\n });\n const callStartTimestampMs = now2();\n const {\n stream: languageModelStream,\n response,\n request\n } = await executeLanguageModelCallInTelemetryContext({\n ...languageModelCallStartEvent,\n execute: async () => await resolvedModel.doStream({\n ...callSettings,\n tools: stepTools,\n toolChoice: stepToolChoice,\n responseFormat: await (output == null ? void 0 : output.responseFormat),\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers,\n includeRawChunks\n })\n });\n const standardizedStream = languageModelStream.pipeThrough(\n createLanguageModelV4StreamPartToLanguageModelStreamPartTransform({\n tools,\n instructions: standardizedPrompt.instructions,\n messages: standardizedPrompt.messages,\n repairToolCall,\n refineToolInput,\n callId: effectiveCallId,\n provider: resolvedModel.provider,\n modelId: resolvedModel.modelId,\n generateId: generateId4,\n now: now2,\n callStartTimestampMs,\n onLanguageModelCallEnd\n })\n );\n return {\n stream: createAsyncIterableStream(standardizedStream),\n response,\n request\n };\n}\nfunction createLanguageModelV4StreamPartToLanguageModelStreamPartTransform({\n tools,\n instructions,\n messages,\n repairToolCall,\n refineToolInput,\n callId,\n provider,\n modelId,\n generateId: generateId4,\n now: now2,\n callStartTimestampMs,\n onLanguageModelCallEnd\n}) {\n const toolCallsByToolCallId = /* @__PURE__ */ new Map();\n const modelCallContent = [];\n const textPartIndexes = /* @__PURE__ */ new Map();\n const reasoningPartIndexes = /* @__PURE__ */ new Map();\n let responseId = generateId4();\n let responseModelId = modelId;\n let timeToFirstOutputMs;\n let previousOutputChunkTimestampMs;\n const timeBetweenOutputChunksMs = [];\n return new TransformStream({\n async transform(chunk, controller) {\n var _a25, _b25, _c;\n if (isOutputChunk(chunk)) {\n const outputChunkTimestampMs = now2();\n if (timeToFirstOutputMs == null) {\n timeToFirstOutputMs = outputChunkTimestampMs - callStartTimestampMs;\n } else if (previousOutputChunkTimestampMs != null) {\n timeBetweenOutputChunksMs.push(\n outputChunkTimestampMs - previousOutputChunkTimestampMs\n );\n }\n previousOutputChunkTimestampMs = outputChunkTimestampMs;\n }\n switch (chunk.type) {\n case \"error\":\n controller.enqueue({\n type: \"error\",\n error: normalizeStreamProviderError(chunk.error)\n });\n break;\n case \"text-start\":\n upsertTextContentPart({\n content: modelCallContent,\n partIndexes: textPartIndexes,\n id: chunk.id,\n type: \"text\",\n providerMetadata: chunk.providerMetadata\n });\n controller.enqueue(chunk);\n break;\n case \"text-delta\":\n upsertTextContentPart({\n content: modelCallContent,\n partIndexes: textPartIndexes,\n id: chunk.id,\n type: \"text\",\n textDelta: chunk.delta,\n providerMetadata: chunk.providerMetadata\n });\n controller.enqueue({\n type: \"text-delta\",\n id: chunk.id,\n text: chunk.delta,\n providerMetadata: chunk.providerMetadata\n });\n break;\n case \"text-end\":\n upsertTextContentPart({\n content: modelCallContent,\n partIndexes: textPartIndexes,\n id: chunk.id,\n type: \"text\",\n providerMetadata: chunk.providerMetadata\n });\n textPartIndexes.delete(chunk.id);\n controller.enqueue(chunk);\n break;\n case \"reasoning-start\":\n upsertTextContentPart({\n content: modelCallContent,\n partIndexes: reasoningPartIndexes,\n id: chunk.id,\n type: \"reasoning\",\n providerMetadata: chunk.providerMetadata\n });\n controller.enqueue(chunk);\n break;\n case \"reasoning-delta\":\n upsertTextContentPart({\n content: modelCallContent,\n partIndexes: reasoningPartIndexes,\n id: chunk.id,\n type: \"reasoning\",\n textDelta: chunk.delta,\n providerMetadata: chunk.providerMetadata\n });\n controller.enqueue({\n type: \"reasoning-delta\",\n id: chunk.id,\n text: chunk.delta,\n providerMetadata: chunk.providerMetadata\n });\n break;\n case \"reasoning-end\":\n upsertTextContentPart({\n content: modelCallContent,\n partIndexes: reasoningPartIndexes,\n id: chunk.id,\n type: \"reasoning\",\n providerMetadata: chunk.providerMetadata\n });\n reasoningPartIndexes.delete(chunk.id);\n controller.enqueue(chunk);\n break;\n case \"file\":\n case \"reasoning-file\": {\n const file = new DefaultGeneratedFileWithType({\n data: chunk.data.type === \"data\" ? chunk.data.data : chunk.data.url.toString(),\n mediaType: chunk.mediaType\n });\n modelCallContent.push({\n type: chunk.type,\n file,\n ...chunk.providerMetadata != null ? { providerMetadata: chunk.providerMetadata } : {}\n });\n controller.enqueue({\n type: chunk.type,\n file,\n providerMetadata: chunk.providerMetadata\n });\n break;\n }\n case \"finish\": {\n const usage = asLanguageModelUsage(chunk.usage);\n const responseTimeMs = now2() - callStartTimestampMs;\n const performance = {\n responseTimeMs,\n effectiveOutputTokensPerSecond: calculateTokensPerSecond({\n tokens: usage.outputTokens,\n durationMs: responseTimeMs\n }),\n outputTokensPerSecond: timeToFirstOutputMs == null ? void 0 : calculateTokensPerSecond({\n tokens: usage.outputTokens,\n durationMs: responseTimeMs - timeToFirstOutputMs\n }),\n inputTokensPerSecond: timeToFirstOutputMs == null ? void 0 : calculateTokensPerSecond({\n tokens: usage.inputTokens,\n durationMs: timeToFirstOutputMs\n }),\n effectiveTotalTokensPerSecond: calculateTokensPerSecond({\n tokens: sumTokenCounts(usage.inputTokens, usage.outputTokens),\n durationMs: responseTimeMs\n }),\n timeToFirstOutputMs,\n timeBetweenOutputChunksMs: timeBetweenOutputChunksMs.length > 0 ? calculateOutputChunkTimingStats(timeBetweenOutputChunksMs) : void 0\n };\n await notify({\n event: {\n callId,\n provider,\n modelId: responseModelId,\n finishReason: chunk.finishReason.unified,\n usage,\n content: modelCallContent,\n responseId,\n ...chunk.providerMetadata != null ? { providerMetadata: chunk.providerMetadata } : {},\n performance\n },\n callbacks: onLanguageModelCallEnd\n });\n controller.enqueue({\n type: \"model-call-end\",\n finishReason: chunk.finishReason.unified,\n rawFinishReason: chunk.finishReason.raw,\n usage,\n providerMetadata: chunk.providerMetadata,\n performance\n });\n break;\n }\n case \"tool-call\": {\n try {\n const toolCall = await parseToolCall({\n toolCall: chunk,\n tools,\n repairToolCall,\n refineToolInput,\n instructions,\n messages\n });\n toolCallsByToolCallId.set(toolCall.toolCallId, toolCall);\n controller.enqueue(toolCall);\n modelCallContent.push(toolCall);\n if (toolCall.invalid) {\n if (!toolCall.providerExecuted) {\n controller.enqueue({\n type: \"tool-error\",\n toolCallId: toolCall.toolCallId,\n toolName: toolCall.toolName,\n input: toolCall.input,\n error: getErrorMessage5(toolCall.error),\n dynamic: true,\n title: toolCall.title,\n ...toolCall.toolMetadata != null ? { toolMetadata: toolCall.toolMetadata } : {}\n });\n }\n break;\n }\n } catch (error) {\n controller.enqueue({ type: \"error\", error });\n }\n break;\n }\n case \"tool-approval-request\": {\n const toolCall = toolCallsByToolCallId.get(chunk.toolCallId);\n if (toolCall == null) {\n controller.enqueue({\n type: \"error\",\n error: new ToolCallNotFoundForApprovalError({\n toolCallId: chunk.toolCallId,\n approvalId: chunk.approvalId\n })\n });\n break;\n }\n const toolApprovalRequest = {\n type: \"tool-approval-request\",\n approvalId: chunk.approvalId,\n toolCall\n };\n controller.enqueue(toolApprovalRequest);\n modelCallContent.push(toolApprovalRequest);\n break;\n }\n case \"tool-result\": {\n const toolName = chunk.toolName;\n const toolCall = toolCallsByToolCallId.get(chunk.toolCallId);\n const toolResultPart = chunk.isError ? {\n type: \"tool-error\",\n toolCallId: chunk.toolCallId,\n toolName,\n input: toolCall == null ? void 0 : toolCall.input,\n providerExecuted: true,\n error: chunk.result,\n dynamic: chunk.dynamic,\n ...chunk.providerMetadata != null ? { providerMetadata: chunk.providerMetadata } : {},\n ...(toolCall == null ? void 0 : toolCall.toolMetadata) != null ? { toolMetadata: toolCall.toolMetadata } : {}\n } : {\n type: \"tool-result\",\n toolCallId: chunk.toolCallId,\n toolName,\n input: toolCall == null ? void 0 : toolCall.input,\n output: chunk.result,\n providerExecuted: true,\n dynamic: chunk.dynamic,\n ...chunk.providerMetadata != null ? { providerMetadata: chunk.providerMetadata } : {},\n ...(toolCall == null ? void 0 : toolCall.toolMetadata) != null ? { toolMetadata: toolCall.toolMetadata } : {}\n };\n controller.enqueue(toolResultPart);\n modelCallContent.push(toolResultPart);\n break;\n }\n case \"tool-input-start\": {\n const tool2 = getOwn(tools, chunk.toolName);\n controller.enqueue({\n ...chunk,\n dynamic: (_a25 = chunk.dynamic) != null ? _a25 : (tool2 == null ? void 0 : tool2.type) === \"dynamic\",\n title: tool2 == null ? void 0 : tool2.title,\n ...(tool2 == null ? void 0 : tool2.metadata) != null ? { toolMetadata: tool2.metadata } : {}\n });\n break;\n }\n case \"stream-start\": {\n controller.enqueue({\n type: \"model-call-start\",\n warnings: chunk.warnings\n });\n break;\n }\n case \"response-metadata\": {\n responseId = (_b25 = chunk.id) != null ? _b25 : responseId;\n responseModelId = (_c = chunk.modelId) != null ? _c : responseModelId;\n controller.enqueue({\n type: \"model-call-response-metadata\",\n id: chunk.id,\n timestamp: chunk.timestamp,\n modelId: chunk.modelId\n });\n break;\n }\n default:\n if (chunk.type === \"custom\" || chunk.type === \"source\") {\n modelCallContent.push(chunk);\n }\n controller.enqueue(chunk);\n break;\n }\n }\n });\n}\nfunction isOutputChunk(chunk) {\n return chunk.type === \"text-delta\" && chunk.delta.length > 0 || chunk.type === \"reasoning-delta\" && chunk.delta.length > 0 || chunk.type === \"tool-input-delta\" && chunk.delta.length > 0 || chunk.type === \"file\" || chunk.type === \"reasoning-file\" || chunk.type === \"tool-call\";\n}\nfunction calculateOutputChunkTimingStats(timingsMs) {\n const sortedTimingsMs = [...timingsMs].sort((a, b) => a - b);\n const sum = timingsMs.reduce((sum2, timingMs) => sum2 + timingMs, 0);\n return {\n min: sortedTimingsMs[0],\n p10: calculateNearestRankPercentile(sortedTimingsMs, 0.1),\n median: calculateNearestRankPercentile(sortedTimingsMs, 0.5),\n avg: sum / timingsMs.length,\n p90: calculateNearestRankPercentile(sortedTimingsMs, 0.9),\n max: sortedTimingsMs[sortedTimingsMs.length - 1]\n };\n}\nfunction calculateNearestRankPercentile(sortedValues, percentile) {\n return sortedValues[Math.ceil(percentile * sortedValues.length) - 1];\n}\nfunction upsertTextContentPart({\n content,\n partIndexes,\n id,\n type,\n textDelta,\n providerMetadata\n}) {\n let partIndex = partIndexes.get(id);\n if (partIndex == null) {\n partIndex = content.push({\n type,\n text: \"\",\n ...providerMetadata != null ? { providerMetadata } : {}\n }) - 1;\n partIndexes.set(id, partIndex);\n }\n const part = content[partIndex];\n if (textDelta != null) {\n part.text += textDelta;\n }\n if (providerMetadata != null) {\n part.providerMetadata = providerMetadata;\n }\n}\n\n// src/generate-text/stream-text.ts\nvar originalGenerateId3 = createIdGenerator3({\n prefix: \"aitxt\",\n size: 24\n});\nvar originalGenerateCallId3 = createIdGenerator3({\n prefix: \"call\",\n size: 24\n});\nvar isOutputChunkType = {\n file: true,\n custom: false,\n source: false,\n \"text-start\": false,\n \"text-end\": false,\n \"text-delta\": true,\n \"reasoning-start\": false,\n \"reasoning-end\": false,\n \"reasoning-delta\": true,\n \"reasoning-file\": true,\n \"tool-input-start\": false,\n \"tool-input-end\": false,\n \"tool-input-delta\": true,\n \"tool-approval-request\": false,\n \"tool-approval-response\": false,\n \"tool-call\": true,\n \"tool-result\": false,\n \"tool-error\": false,\n \"tool-execution-end\": false,\n \"model-call-start\": false,\n \"model-call-response-metadata\": false,\n \"model-call-end\": false,\n error: false,\n raw: false\n};\nfunction isOutputChunk2(chunk) {\n if (!isOutputChunkType[chunk.type]) {\n return false;\n }\n switch (chunk.type) {\n case \"text-delta\":\n case \"reasoning-delta\":\n return chunk.text.length > 0;\n case \"tool-input-delta\":\n return chunk.delta.length > 0;\n case \"file\":\n case \"reasoning-file\":\n case \"tool-call\":\n return true;\n default:\n return false;\n }\n}\nfunction streamText({\n model,\n tools,\n toolChoice,\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages,\n maxRetries,\n abortSignal,\n timeout,\n headers,\n stopWhen = isStepCount(1),\n experimental_sandbox: sandbox,\n output,\n toolApproval,\n experimental_toolCallers,\n experimental_toolApprovalSecret,\n experimental_telemetry,\n telemetry = experimental_telemetry,\n prepareStep,\n providerOptions,\n activeTools,\n toolOrder,\n experimental_repairToolCall,\n repairToolCall = experimental_repairToolCall,\n experimental_refineToolInput: refineToolInput,\n experimental_transform: transform,\n experimental_download: download2,\n includeRawChunks,\n onChunk,\n onError = ({ error }) => {\n console.error(error);\n },\n onFinish,\n onEnd = onFinish,\n onAbort,\n onStepEnd,\n onStepFinish,\n onStart,\n experimental_onStart,\n onStepStart,\n experimental_onStepStart,\n onLanguageModelCallStart,\n experimental_onLanguageModelCallStart,\n onLanguageModelCallEnd,\n experimental_onLanguageModelCallEnd,\n onToolExecutionStart,\n onToolExecutionEnd,\n experimental_onToolCallStart,\n experimental_onToolCallFinish,\n runtimeContext = {},\n toolsContext = {},\n experimental_include,\n include = experimental_include,\n _internal: {\n now: now2 = now,\n generateId: generateId4 = originalGenerateId3,\n generateCallId = originalGenerateCallId3\n } = {},\n ...settings\n}) {\n var _a25, _b25, _c, _d;\n const totalTimeoutMs = getTotalTimeoutMs(timeout);\n const stepTimeoutMs = getStepTimeoutMs(timeout);\n const firstChunkTimeoutMs = getFirstChunkTimeoutMs(timeout);\n const chunkTimeoutMs = getChunkTimeoutMs(timeout);\n const stepAbortController = stepTimeoutMs != null ? new AbortController() : void 0;\n const firstChunkAbortController = firstChunkTimeoutMs != null ? new AbortController() : void 0;\n const chunkAbortController = chunkTimeoutMs != null ? new AbortController() : void 0;\n const resolvedOnStart = onStart != null ? onStart : experimental_onStart;\n const resolvedOnStepStart = onStepStart != null ? onStepStart : experimental_onStepStart;\n const resolvedOnLanguageModelCallStart = onLanguageModelCallStart != null ? onLanguageModelCallStart : experimental_onLanguageModelCallStart;\n const resolvedOnLanguageModelCallEnd = onLanguageModelCallEnd != null ? onLanguageModelCallEnd : experimental_onLanguageModelCallEnd;\n const resolvedOnToolExecutionStart = onToolExecutionStart != null ? onToolExecutionStart : experimental_onToolCallStart;\n const resolvedOnToolExecutionEnd = onToolExecutionEnd != null ? onToolExecutionEnd : experimental_onToolCallFinish;\n const resolvedOnStepEnd = onStepEnd != null ? onStepEnd : onStepFinish;\n return new DefaultStreamTextResult({\n model: resolveLanguageModel(model),\n telemetry,\n headers,\n settings,\n maxRetries,\n abortSignal: mergeAbortSignals(\n abortSignal,\n totalTimeoutMs,\n stepAbortController == null ? void 0 : stepAbortController.signal,\n firstChunkAbortController == null ? void 0 : firstChunkAbortController.signal,\n chunkAbortController == null ? void 0 : chunkAbortController.signal\n ),\n stepTimeoutMs,\n stepAbortController,\n firstChunkTimeoutMs,\n firstChunkAbortController,\n chunkTimeoutMs,\n chunkAbortController,\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages,\n experimental_sandbox: sandbox,\n tools,\n toolsContext,\n runtimeContext,\n toolChoice,\n transforms: asArray6(transform),\n activeTools,\n toolOrder,\n repairToolCall,\n refineToolInput,\n stopConditions: asArray6(stopWhen),\n output,\n toolApproval,\n experimental_toolCallers,\n experimental_toolApprovalSecret,\n providerOptions,\n prepareStep,\n timeout,\n onChunk,\n onError,\n onEnd,\n onAbort,\n onStepFinish: resolvedOnStepEnd,\n onStart: resolvedOnStart,\n onStepStart: resolvedOnStepStart,\n onLanguageModelCallStart: resolvedOnLanguageModelCallStart,\n onLanguageModelCallEnd: resolvedOnLanguageModelCallEnd,\n onToolExecutionStart: resolvedOnToolExecutionStart,\n onToolExecutionEnd: resolvedOnToolExecutionEnd,\n now: now2,\n generateId: generateId4,\n generateCallId,\n download: download2,\n // assign default values to include:\n include: {\n requestBody: (_a25 = include == null ? void 0 : include.requestBody) != null ? _a25 : false,\n requestMessages: (_b25 = include == null ? void 0 : include.requestMessages) != null ? _b25 : false,\n rawChunks: (_d = (_c = include == null ? void 0 : include.rawChunks) != null ? _c : includeRawChunks) != null ? _d : false\n }\n });\n}\nasync function markPromiseAsHandled(promise) {\n try {\n await promise;\n } catch (e) {\n }\n}\nfunction createOutputTransformStream(output) {\n let firstTextChunkId = void 0;\n let text2 = \"\";\n let textChunk = \"\";\n let textProviderMetadata = void 0;\n let lastPublishedValue = \"\";\n function publishTextChunk({\n controller,\n partialOutput = void 0\n }) {\n controller.enqueue({\n part: {\n type: \"text-delta\",\n id: firstTextChunkId,\n text: textChunk,\n providerMetadata: textProviderMetadata\n },\n partialOutput\n });\n textChunk = \"\";\n }\n return new TransformStream({\n async transform(chunk, controller) {\n var _a25;\n if (chunk.type === \"finish-step\" && textChunk.length > 0) {\n publishTextChunk({ controller });\n }\n if (chunk.type !== \"text-delta\" && chunk.type !== \"text-start\" && chunk.type !== \"text-end\") {\n controller.enqueue({ part: chunk, partialOutput: void 0 });\n return;\n }\n if (firstTextChunkId == null) {\n firstTextChunkId = chunk.id;\n } else if (chunk.id !== firstTextChunkId) {\n controller.enqueue({ part: chunk, partialOutput: void 0 });\n return;\n }\n if (chunk.type === \"text-start\") {\n controller.enqueue({ part: chunk, partialOutput: void 0 });\n return;\n }\n if (chunk.type === \"text-end\") {\n if (textChunk.length > 0) {\n publishTextChunk({ controller });\n }\n controller.enqueue({ part: chunk, partialOutput: void 0 });\n return;\n }\n text2 += chunk.text;\n textChunk += chunk.text;\n textProviderMetadata = (_a25 = chunk.providerMetadata) != null ? _a25 : textProviderMetadata;\n if (chunk.text.length === 0 && chunk.providerMetadata != null) {\n controller.enqueue({ part: chunk, partialOutput: void 0 });\n return;\n }\n const result = await output.parsePartialOutput({ text: text2 });\n if (result !== void 0) {\n const currentValue = typeof result.partial === \"string\" ? result.partial : JSON.stringify(result.partial);\n if (currentValue !== lastPublishedValue) {\n publishTextChunk({ controller, partialOutput: result.partial });\n lastPublishedValue = currentValue;\n }\n }\n }\n });\n}\nvar DefaultStreamTextResult = class {\n constructor({\n model,\n telemetry,\n headers,\n settings,\n maxRetries: maxRetriesArg,\n abortSignal,\n stepTimeoutMs,\n stepAbortController,\n firstChunkTimeoutMs,\n firstChunkAbortController,\n chunkTimeoutMs,\n chunkAbortController,\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages,\n experimental_sandbox: sandbox,\n tools,\n toolChoice,\n transforms,\n activeTools,\n toolOrder,\n repairToolCall,\n refineToolInput,\n stopConditions,\n output,\n toolApproval,\n experimental_toolCallers,\n experimental_toolApprovalSecret,\n providerOptions,\n prepareStep,\n now: now2,\n generateId: generateId4,\n generateCallId,\n timeout,\n onChunk,\n onError,\n onEnd,\n onAbort,\n onStepFinish,\n onStart,\n onStepStart,\n onLanguageModelCallStart,\n onLanguageModelCallEnd,\n onToolExecutionStart,\n onToolExecutionEnd,\n runtimeContext,\n toolsContext,\n download: download2,\n include\n }) {\n this._totalUsage = new DelayedPromise();\n this._finishReason = new DelayedPromise();\n this._rawFinishReason = new DelayedPromise();\n this._steps = new DelayedPromise();\n this._initialResponseMessages = new DelayedPromise();\n this.outputSpecification = output;\n this.tools = tools;\n const resolvedToolCallers = resolveToolCallerConfiguration({\n tools,\n toolCallers: experimental_toolCallers\n });\n const telemetryDispatcher = createRestrictedTelemetryDispatcher({\n telemetry,\n includeRuntimeContext: telemetry == null ? void 0 : telemetry.includeRuntimeContext,\n includeToolsContext: telemetry == null ? void 0 : telemetry.includeToolsContext\n });\n let stepFinish;\n let recordedContent = [];\n let recordedFinishReason = void 0;\n let recordedRawFinishReason = void 0;\n let recordedTotalUsage = void 0;\n let recordedRequest = {};\n let recordedRequestMessages = [];\n let recordedWarnings = [];\n const recordedSteps = [];\n const initialResponseMessages = [];\n let stepMessagesForNextStep;\n let currentStepMessages = [];\n const createPartIdReserver = () => {\n const usedIds = /* @__PURE__ */ new Set();\n return (id) => {\n if (!usedIds.has(id)) {\n usedIds.add(id);\n return id;\n }\n const generatedId = generateId4();\n let uniqueId = generatedId;\n let suffix = 0;\n while (usedIds.has(uniqueId)) {\n uniqueId = `${generatedId}-${++suffix}`;\n }\n usedIds.add(uniqueId);\n return uniqueId;\n };\n };\n const reserveTextPartId = createPartIdReserver();\n const reserveReasoningPartId = createPartIdReserver();\n const pendingDeferredToolCalls = /* @__PURE__ */ new Map();\n let activeTextContent = createIdMap();\n let activeReasoningContent = createIdMap();\n let recordedNoOutputError;\n const eventProcessor = new TransformStream({\n async transform(chunk, controller) {\n var _a25, _b25, _c, _d;\n controller.enqueue(chunk);\n const { part } = chunk;\n await notify({\n event: { chunk: part },\n callbacks: onChunk\n });\n if (part.type === \"error\") {\n const error = wrapGatewayError(part.error);\n if (NoOutputGeneratedError.isInstance(error)) {\n recordedNoOutputError = error;\n }\n await notify({\n event: { error },\n callbacks: onError\n });\n }\n if (part.type === \"custom\" || part.type === \"source\" || part.type === \"tool-call\" || part.type === \"tool-approval-request\" || part.type === \"tool-approval-response\" || part.type === \"tool-error\") {\n recordedContent.push(part);\n }\n if (part.type === \"text-start\") {\n activeTextContent[part.id] = {\n type: \"text\",\n text: \"\",\n providerMetadata: part.providerMetadata\n };\n recordedContent.push(activeTextContent[part.id]);\n }\n if (part.type === \"text-delta\") {\n const activeText = activeTextContent[part.id];\n if (activeText == null) {\n controller.enqueue({\n part: {\n type: \"error\",\n error: `text part ${part.id} not found`\n },\n partialOutput: void 0\n });\n return;\n }\n activeText.text += part.text;\n activeText.providerMetadata = (_a25 = part.providerMetadata) != null ? _a25 : activeText.providerMetadata;\n }\n if (part.type === \"text-end\") {\n const activeText = activeTextContent[part.id];\n if (activeText == null) {\n controller.enqueue({\n part: {\n type: \"error\",\n error: `text part ${part.id} not found`\n },\n partialOutput: void 0\n });\n return;\n }\n activeText.providerMetadata = (_b25 = part.providerMetadata) != null ? _b25 : activeText.providerMetadata;\n delete activeTextContent[part.id];\n }\n if (part.type === \"reasoning-start\") {\n activeReasoningContent[part.id] = {\n type: \"reasoning\",\n text: \"\",\n providerMetadata: part.providerMetadata\n };\n recordedContent.push(activeReasoningContent[part.id]);\n }\n if (part.type === \"reasoning-delta\") {\n const activeReasoning = activeReasoningContent[part.id];\n if (activeReasoning == null) {\n controller.enqueue({\n part: {\n type: \"error\",\n error: `reasoning part ${part.id} not found`\n },\n partialOutput: void 0\n });\n return;\n }\n activeReasoning.text += part.text;\n activeReasoning.providerMetadata = (_c = part.providerMetadata) != null ? _c : activeReasoning.providerMetadata;\n }\n if (part.type === \"reasoning-end\") {\n const activeReasoning = activeReasoningContent[part.id];\n if (activeReasoning == null) {\n controller.enqueue({\n part: {\n type: \"error\",\n error: `reasoning part ${part.id} not found`\n },\n partialOutput: void 0\n });\n return;\n }\n activeReasoning.providerMetadata = (_d = part.providerMetadata) != null ? _d : activeReasoning.providerMetadata;\n delete activeReasoningContent[part.id];\n }\n if (part.type === \"file\" || part.type === \"reasoning-file\") {\n recordedContent.push({\n type: part.type,\n file: part.file,\n ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}\n });\n }\n if (part.type === \"tool-result\" && !part.preliminary) {\n recordedContent.push(part);\n }\n if (part.type === \"start-step\") {\n recordedContent = [];\n activeReasoningContent = createIdMap();\n activeTextContent = createIdMap();\n recordedRequest = part.request;\n recordedWarnings = part.warnings;\n }\n if (part.type === \"finish-step\") {\n const stepResponseMessages = await toResponseMessages({\n content: recordedContent,\n tools\n });\n const currentStepResult = new DefaultStepResult({\n callId,\n stepNumber: recordedSteps.length,\n provider: model.provider,\n modelId: model.modelId,\n runtimeContext,\n toolsContext,\n content: recordedContent,\n finishReason: part.finishReason,\n rawFinishReason: part.rawFinishReason,\n usage: part.usage,\n performance: part.performance,\n warnings: recordedWarnings,\n request: {\n ...recordedRequest,\n messages: include.requestMessages ? cloneModelMessages(recordedRequestMessages) : void 0\n },\n response: {\n ...part.response,\n messages: cloneModelMessages(stepResponseMessages)\n },\n providerMetadata: part.providerMetadata\n });\n await notify({\n event: currentStepResult,\n callbacks: [onStepFinish, telemetryDispatcher.onStepEnd]\n });\n logWarnings({\n warnings: recordedWarnings,\n provider: model.provider,\n model: model.modelId\n });\n recordedSteps.push(currentStepResult);\n stepMessagesForNextStep = [\n ...currentStepMessages,\n ...stepResponseMessages\n ];\n stepFinish.resolve();\n }\n if (part.type === \"finish\") {\n recordedTotalUsage = part.totalUsage;\n recordedFinishReason = part.finishReason;\n recordedRawFinishReason = part.rawFinishReason;\n }\n },\n async flush(controller) {\n try {\n if (recordedSteps.length === 0 || recordedNoOutputError != null) {\n const error = (abortSignal == null ? void 0 : abortSignal.aborted) ? abortSignal.reason : recordedNoOutputError != null ? recordedNoOutputError : new NoOutputGeneratedError({\n message: \"No output generated. Check the stream for errors.\"\n });\n self.rejectResultPromises(error);\n return;\n }\n const finishReason = recordedFinishReason != null ? recordedFinishReason : \"other\";\n const totalUsage = recordedTotalUsage != null ? recordedTotalUsage : createNullLanguageModelUsage();\n self._finishReason.resolve(finishReason);\n self._rawFinishReason.resolve(recordedRawFinishReason);\n self._totalUsage.resolve(totalUsage);\n self._steps.resolve(recordedSteps);\n const finalStep = recordedSteps[recordedSteps.length - 1];\n const content = recordedSteps.flatMap((step) => step.content);\n const files = recordedSteps.flatMap((step) => step.files);\n const sources = recordedSteps.flatMap((step) => step.sources);\n const toolCalls = recordedSteps.flatMap((step) => step.toolCalls);\n const staticToolCalls = recordedSteps.flatMap(\n (step) => step.staticToolCalls\n );\n const dynamicToolCalls = recordedSteps.flatMap(\n (step) => step.dynamicToolCalls\n );\n const toolResults = recordedSteps.flatMap((step) => step.toolResults);\n const staticToolResults = recordedSteps.flatMap(\n (step) => step.staticToolResults\n );\n const dynamicToolResults = recordedSteps.flatMap(\n (step) => step.dynamicToolResults\n );\n const warnings = recordedSteps.flatMap((step) => {\n var _a25;\n return (_a25 = step.warnings) != null ? _a25 : [];\n });\n const onEndWithOutput = onEnd == null ? void 0 : async (event) => {\n const parsedOutput = output == null ? void 0 : await self.getOutputPromise().catch(() => void 0);\n await onEnd({\n ...event,\n ...output != null ? { output: parsedOutput } : {}\n });\n };\n const onEndEvent = {\n callId,\n toolsContext: finalStep.toolsContext,\n stepNumber: finalStep.stepNumber,\n model: finalStep.model,\n runtimeContext: finalStep.runtimeContext,\n finishReason: finalStep.finishReason,\n rawFinishReason: finalStep.rawFinishReason,\n usage: totalUsage,\n totalUsage,\n content,\n text: finalStep.text,\n reasoning: finalStep.reasoning,\n reasoningText: finalStep.reasoningText,\n files,\n sources,\n toolCalls,\n staticToolCalls,\n dynamicToolCalls,\n toolResults,\n staticToolResults,\n dynamicToolResults,\n responseMessages: [\n ...initialResponseMessages,\n ...recordedSteps.flatMap((step) => step.response.messages)\n ],\n warnings,\n request: finalStep.request,\n response: finalStep.response,\n providerMetadata: finalStep.providerMetadata,\n steps: recordedSteps,\n finalStep\n };\n await Promise.all([\n notify({\n event: onEndEvent,\n callbacks: onEndWithOutput\n }),\n notify({\n event: onEndEvent,\n callbacks: telemetryDispatcher.onEnd\n })\n ]);\n } catch (error) {\n controller.error(error);\n }\n }\n });\n const stitchableStream = createStitchableStream();\n this.addStream = stitchableStream.addStream;\n this.closeStream = stitchableStream.close;\n const reader = stitchableStream.stream.getReader();\n let stream = new ReadableStream({\n async start(controller) {\n controller.enqueue({ type: \"start\" });\n },\n async pull(controller) {\n async function abort() {\n await notify({\n event: {\n callId,\n steps: recordedSteps,\n ...(abortSignal == null ? void 0 : abortSignal.reason) !== void 0 ? { reason: abortSignal.reason } : {}\n },\n callbacks: [onAbort, telemetryDispatcher.onAbort]\n });\n controller.enqueue({\n type: \"abort\",\n // The `reason` is usually of type DOMException, but it can also be of any type,\n // so we use getErrorMessage for serialization because it is already designed to accept values of the unknown type.\n // See: https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal/reason\n ...(abortSignal == null ? void 0 : abortSignal.reason) !== void 0 ? { reason: getErrorMessage6(abortSignal.reason) } : {}\n });\n controller.close();\n }\n try {\n const { done, value } = await reader.read();\n if (done) {\n controller.close();\n return;\n }\n if (abortSignal == null ? void 0 : abortSignal.aborted) {\n await abort();\n return;\n }\n controller.enqueue(value);\n } catch (error) {\n if (isAbortError(error) && (abortSignal == null ? void 0 : abortSignal.aborted)) {\n await abort();\n } else {\n controller.error(error);\n }\n }\n },\n cancel(reason) {\n return stitchableStream.stream.cancel(reason);\n }\n });\n let isRunning = true;\n stream = stream.pipeThrough(\n new TransformStream({\n async transform(chunk, controller) {\n if (isRunning) {\n controller.enqueue(chunk);\n }\n }\n })\n );\n for (const transform of transforms) {\n stream = stream.pipeThrough(\n transform({\n tools,\n stopStream() {\n stitchableStream.terminate();\n isRunning = false;\n }\n })\n );\n }\n this.baseStream = stream.pipeThrough(createOutputTransformStream(output != null ? output : text())).pipeThrough(eventProcessor);\n const { maxRetries } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const callSettings = prepareLanguageModelCallOptions(settings);\n const self = this;\n const callId = generateCallId();\n (async () => {\n var _a25;\n const initialPrompt = await standardizePrompt({\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages\n });\n const startEvent = {\n callId,\n operationId: \"ai.streamText\",\n provider: model.provider,\n modelId: model.modelId,\n instructions: initialPrompt.instructions,\n messages: initialPrompt.messages,\n tools,\n toolChoice,\n activeTools,\n toolOrder,\n maxOutputTokens: callSettings.maxOutputTokens,\n temperature: callSettings.temperature,\n topP: callSettings.topP,\n topK: callSettings.topK,\n presencePenalty: callSettings.presencePenalty,\n frequencyPenalty: callSettings.frequencyPenalty,\n stopSequences: callSettings.stopSequences,\n seed: callSettings.seed,\n reasoning: callSettings.reasoning,\n maxRetries,\n timeout,\n headers,\n providerOptions,\n output,\n runtimeContext,\n toolsContext\n };\n const streamTextTracingChannelContext = (_a25 = telemetryDispatcher.startTracingChannelContext) == null ? void 0 : _a25.call(telemetryDispatcher, {\n type: \"streamText\",\n event: startEvent,\n completion: self._totalUsage.promise.then(() => void 0)\n });\n const runInStreamTextTracingChannelContext = (execute) => {\n var _a26;\n return (_a26 = streamTextTracingChannelContext == null ? void 0 : streamTextTracingChannelContext.run(execute)) != null ? _a26 : execute();\n };\n const runInTracingChannelSpanInStreamText = telemetryDispatcher.runInTracingChannelSpan == null ? void 0 : (options) => runInStreamTextTracingChannelContext(\n () => telemetryDispatcher.runInTracingChannelSpan(options)\n );\n await notify({\n event: startEvent,\n callbacks: [onStart, telemetryDispatcher.onStart]\n });\n const initialMessages = initialPrompt.messages;\n let instructionsForNextStep = initialPrompt.instructions;\n const { approvedToolApprovals, deniedToolApprovals } = collectToolApprovals({ messages: initialMessages });\n if (deniedToolApprovals.length > 0 || approvedToolApprovals.length > 0) {\n const {\n approvedToolApprovals: localApprovedToolApprovals,\n deniedToolApprovals: revalidationDeniedToolApprovals,\n invalidToolApprovals\n } = await validateApprovedToolApprovals({\n approvedToolApprovals: approvedToolApprovals.filter(\n (toolApproval2) => !toolApproval2.toolCall.providerExecuted\n ),\n tools,\n toolApproval,\n messages: initialMessages,\n toolsContext,\n runtimeContext,\n toolApprovalSecret: experimental_toolApprovalSecret\n });\n const localDeniedToolApprovals = [\n ...deniedToolApprovals.filter(\n (toolApproval2) => !toolApproval2.toolCall.providerExecuted\n ),\n ...revalidationDeniedToolApprovals\n ];\n const localDeniedToolApprovalsWithoutResults = localDeniedToolApprovals.filter(\n (toolApproval2) => toolApproval2.existingToolResult == null\n );\n const deniedProviderExecutedToolApprovals = deniedToolApprovals.filter(\n (toolApproval2) => toolApproval2.toolCall.providerExecuted\n );\n let toolExecutionStepStreamController;\n const toolExecutionStepStream = new ReadableStream({\n start(controller) {\n toolExecutionStepStreamController = controller;\n }\n });\n self.addStream(toolExecutionStepStream);\n try {\n for (const toolApproval2 of [\n ...localDeniedToolApprovals,\n ...deniedProviderExecutedToolApprovals\n ]) {\n toolExecutionStepStreamController == null ? void 0 : toolExecutionStepStreamController.enqueue({\n type: \"tool-output-denied\",\n toolCallId: toolApproval2.toolCall.toolCallId,\n toolName: toolApproval2.toolCall.toolName\n });\n }\n for (const toolApproval2 of invalidToolApprovals) {\n toolExecutionStepStreamController == null ? void 0 : toolExecutionStepStreamController.enqueue({\n type: \"tool-error\",\n toolCallId: toolApproval2.toolCall.toolCallId,\n toolName: toolApproval2.toolCall.toolName,\n input: toolApproval2.toolCall.input,\n error: getErrorMessage6(toolApproval2.error),\n title: toolApproval2.toolCall.title,\n ...toolApproval2.toolCall.dynamic === true ? { dynamic: true } : {},\n ...toolApproval2.toolCall.toolMetadata != null ? { toolMetadata: toolApproval2.toolCall.toolMetadata } : {}\n });\n }\n const toolOutputs = [];\n await Promise.all(\n localApprovedToolApprovals.map(async (toolApproval2) => {\n const result = await executeToolCall({\n toolCall: toolApproval2.toolCall,\n tools,\n callId,\n messages: initialMessages,\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n toolsContext,\n onToolExecutionStart: filterNullable2(\n onToolExecutionStart,\n telemetryDispatcher.onToolExecutionStart\n ),\n onToolExecutionEnd: filterNullable2(\n onToolExecutionEnd,\n telemetryDispatcher.onToolExecutionEnd\n ),\n executeToolInTelemetryContext: telemetryDispatcher.executeTool,\n runInTracingChannelSpan: runInTracingChannelSpanInStreamText,\n onPreliminaryToolResult: (result2) => {\n toolExecutionStepStreamController == null ? void 0 : toolExecutionStepStreamController.enqueue(result2);\n }\n });\n if (result != null) {\n toolExecutionStepStreamController == null ? void 0 : toolExecutionStepStreamController.enqueue(result.output);\n toolOutputs.push(result.output);\n }\n })\n );\n if (toolOutputs.length > 0 || localDeniedToolApprovalsWithoutResults.length > 0 || invalidToolApprovals.length > 0) {\n const localToolContent = [];\n for (const output2 of toolOutputs) {\n localToolContent.push({\n type: \"tool-result\",\n toolCallId: output2.toolCallId,\n toolName: output2.toolName,\n output: await createToolModelOutput({\n toolCallId: output2.toolCallId,\n input: output2.input,\n tool: getOwn(tools, output2.toolName),\n output: output2.type === \"tool-result\" ? output2.output : output2.error,\n errorMode: output2.type === \"tool-error\" ? \"text\" : \"none\"\n })\n });\n }\n for (const toolApproval2 of invalidToolApprovals) {\n localToolContent.push({\n type: \"tool-result\",\n toolCallId: toolApproval2.toolCall.toolCallId,\n toolName: toolApproval2.toolCall.toolName,\n output: await createToolModelOutput({\n toolCallId: toolApproval2.toolCall.toolCallId,\n input: toolApproval2.toolCall.input,\n tool: getOwn(tools, toolApproval2.toolCall.toolName),\n output: toolApproval2.error,\n errorMode: \"text\"\n })\n });\n }\n for (const toolApproval2 of localDeniedToolApprovalsWithoutResults) {\n localToolContent.push({\n type: \"tool-result\",\n toolCallId: toolApproval2.toolCall.toolCallId,\n toolName: toolApproval2.toolCall.toolName,\n output: {\n type: \"execution-denied\",\n reason: toolApproval2.approvalResponse.reason\n }\n });\n }\n initialResponseMessages.push({\n role: \"tool\",\n content: localToolContent\n });\n }\n } finally {\n toolExecutionStepStreamController == null ? void 0 : toolExecutionStepStreamController.close();\n }\n }\n self._initialResponseMessages.resolve(initialResponseMessages);\n async function streamStep({\n currentStep,\n usage\n }) {\n var _a26, _b25, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l;\n const stepTimeoutId = setAbortTimeout({\n abortController: stepAbortController,\n label: \"Step\",\n timeoutMs: stepTimeoutMs\n });\n let firstChunkTimeoutId = void 0;\n function startFirstChunkTimeout() {\n if (abortSignal == null ? void 0 : abortSignal.aborted) {\n return;\n }\n firstChunkTimeoutId = setAbortTimeout({\n abortController: firstChunkAbortController,\n label: \"First chunk\",\n timeoutMs: firstChunkTimeoutMs\n });\n }\n function clearFirstChunkTimeout() {\n if (firstChunkTimeoutId != null) {\n clearTimeout(firstChunkTimeoutId);\n firstChunkTimeoutId = void 0;\n }\n }\n let chunkTimeoutId = void 0;\n function resetChunkTimeout() {\n if (chunkTimeoutId != null) {\n clearTimeout(chunkTimeoutId);\n }\n chunkTimeoutId = setAbortTimeout({\n abortController: chunkAbortController,\n label: \"Chunk\",\n timeoutMs: chunkTimeoutMs\n });\n }\n function clearChunkTimeout() {\n if (chunkTimeoutId != null) {\n clearTimeout(chunkTimeoutId);\n chunkTimeoutId = void 0;\n }\n }\n function clearStepTimeout() {\n if (stepTimeoutId != null) {\n clearTimeout(stepTimeoutId);\n }\n }\n function clearStepTimeouts() {\n clearStepTimeout();\n clearFirstChunkTimeout();\n clearChunkTimeout();\n }\n function cleanupStepTimeouts() {\n abortSignal == null ? void 0 : abortSignal.removeEventListener(\"abort\", cleanupStepTimeouts);\n clearStepTimeouts();\n }\n abortSignal == null ? void 0 : abortSignal.addEventListener(\"abort\", cleanupStepTimeouts, {\n once: true\n });\n try {\n stepFinish = new DelayedPromise();\n const stepTracingChannelContext = (_a26 = telemetryDispatcher.startTracingChannelContext) == null ? void 0 : _a26.call(telemetryDispatcher, {\n type: \"step\",\n event: { callId, stepNumber: currentStep },\n completion: stepFinish.promise\n });\n const runInStepTracingChannelContext = (execute) => {\n var _a27;\n return (_a27 = stepTracingChannelContext == null ? void 0 : stepTracingChannelContext.run(execute)) != null ? _a27 : execute();\n };\n const responseMessagesFromPreviousSteps = recordedSteps.flatMap(\n (step) => step.response.messages\n );\n const accumulatedResponseMessages = [\n ...initialResponseMessages,\n ...responseMessagesFromPreviousSteps\n ];\n const stepInputMessages = stepMessagesForNextStep != null ? stepMessagesForNextStep : [\n ...initialMessages,\n ...initialResponseMessages\n ];\n const prepareStepResult = await (prepareStep == null ? void 0 : prepareStep({\n model,\n steps: recordedSteps,\n stepNumber: recordedSteps.length,\n instructions: instructionsForNextStep,\n initialInstructions: initialPrompt.instructions,\n messages: stepInputMessages,\n initialMessages,\n responseMessages: accumulatedResponseMessages,\n toolsContext,\n runtimeContext,\n experimental_sandbox: sandbox\n }));\n const stepSandbox = (_b25 = prepareStepResult == null ? void 0 : prepareStepResult.experimental_sandbox) != null ? _b25 : sandbox;\n runtimeContext = (_c = prepareStepResult == null ? void 0 : prepareStepResult.runtimeContext) != null ? _c : runtimeContext;\n toolsContext = (_d = prepareStepResult == null ? void 0 : prepareStepResult.toolsContext) != null ? _d : toolsContext;\n const stepModel = resolveLanguageModel(\n (_e = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _e : model\n );\n const stepActiveTools = filterActiveTools({\n tools,\n activeTools: (_f = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _f : activeTools\n });\n const {\n executionTools: stepExecutionTools,\n modelTools: stepModelTools\n } = prepareToolsForToolCallers({\n tools: stepActiveTools,\n toolCallers: resolvedToolCallers\n });\n const stepToolOrder = (_g = prepareStepResult == null ? void 0 : prepareStepResult.toolOrder) != null ? _g : toolOrder;\n const stepTools = await prepareTools({\n tools: stepModelTools,\n toolOrder: stepToolOrder,\n // active tools context is a subset of the tools context, so we can cast to the unknown type\n toolsContext,\n experimental_sandbox: stepSandbox\n });\n const stepToolChoice = prepareToolChoice({\n toolChoice: (_h = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _h : toolChoice\n });\n const stepMessages = (_i = prepareStepResult == null ? void 0 : prepareStepResult.messages) != null ? _i : stepInputMessages;\n currentStepMessages = stepMessages;\n const stepInstructions = (_k = (_j = prepareStepResult == null ? void 0 : prepareStepResult.instructions) != null ? _j : prepareStepResult == null ? void 0 : prepareStepResult.system) != null ? _k : instructionsForNextStep;\n instructionsForNextStep = stepInstructions;\n const stepProviderOptions = mergeObjects(\n providerOptions,\n prepareStepResult == null ? void 0 : prepareStepResult.providerOptions\n );\n const stepCallSettings = prepareStepCallSettings({\n callSettings,\n stepSettings: prepareStepResult\n });\n const stepStartTimestampMs = now2();\n const { retry } = prepareRetries({ maxRetries, abortSignal });\n const {\n stream: languageModelStream,\n request,\n response\n } = await runInStepTracingChannelContext(\n () => retry(\n async () => {\n var _a27, _b26;\n return streamLanguageModelCall({\n model: (_a27 = prepareStepResult == null ? void 0 : prepareStepResult.model) != null ? _a27 : model,\n tools: stepModelTools,\n toolOrder: stepToolOrder,\n toolChoice: (_b26 = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _b26 : toolChoice,\n instructions: stepInstructions,\n messages: stepMessages,\n allowSystemInMessages,\n repairToolCall,\n refineToolInput,\n abortSignal,\n headers,\n includeRawChunks: include.rawChunks,\n providerOptions: stepProviderOptions,\n download: download2,\n output,\n callId,\n executeLanguageModelCallInTelemetryContext: telemetryDispatcher.executeLanguageModelCall,\n toolsContext,\n experimental_sandbox: stepSandbox,\n onLanguageModelCallStart: filterNullable2(\n onLanguageModelCallStart,\n telemetryDispatcher.onLanguageModelCallStart\n ),\n onLanguageModelCallEnd: filterNullable2(\n onLanguageModelCallEnd,\n telemetryDispatcher.onLanguageModelCallEnd\n ),\n onStart: async ({ promptMessages }) => {\n var _a28, _b27;\n await notify({\n event: {\n callId,\n provider: stepModel.provider,\n modelId: stepModel.modelId,\n stepNumber: recordedSteps.length,\n instructions: stepInstructions,\n messages: stepMessages,\n tools,\n toolChoice: (_a28 = prepareStepResult == null ? void 0 : prepareStepResult.toolChoice) != null ? _a28 : toolChoice,\n activeTools: (_b27 = prepareStepResult == null ? void 0 : prepareStepResult.activeTools) != null ? _b27 : activeTools,\n toolOrder: stepToolOrder,\n steps: [...recordedSteps],\n providerOptions: stepProviderOptions,\n runtimeContext,\n toolsContext,\n output,\n promptMessages,\n stepTools,\n stepToolChoice\n },\n callbacks: [onStepStart, telemetryDispatcher.onStepStart]\n });\n },\n _internal: {\n now: now2\n },\n ...stepCallSettings\n });\n }\n )\n );\n startFirstChunkTimeout();\n const streamAfterToolCallbackInvocation = invokeToolCallbacksFromStream({\n stream: languageModelStream,\n tools: stepExecutionTools,\n stepInputMessages: stepMessages,\n abortSignal,\n runtimeContext\n });\n const runInTracingChannelSpanInStep = telemetryDispatcher.runInTracingChannelSpan == null ? void 0 : (options) => runInStepTracingChannelContext(\n () => telemetryDispatcher.runInTracingChannelSpan(options)\n );\n const streamWithToolResults = executeToolsFromStream({\n stream: streamAfterToolCallbackInvocation,\n tools: stepExecutionTools,\n callId,\n messages: stepMessages,\n abortSignal,\n timeout,\n experimental_sandbox: stepSandbox,\n toolsContext,\n toolApproval,\n runtimeContext,\n toolApprovalSecret: experimental_toolApprovalSecret,\n generateId: generateId4,\n // the callbacks need to be passed down and handled by executeToolCall\n // to guarantee that the onToolExecutionStart callback is invoked before the tool execute function\n onToolExecutionStart: filterNullable2(\n onToolExecutionStart,\n telemetryDispatcher.onToolExecutionStart\n ),\n onToolExecutionEnd: filterNullable2(\n onToolExecutionEnd,\n telemetryDispatcher.onToolExecutionEnd\n ),\n executeToolInTelemetryContext: telemetryDispatcher.executeTool,\n runInTracingChannelSpan: runInTracingChannelSpanInStep\n });\n const stepRequest = {\n ...request,\n body: include.requestBody ? request == null ? void 0 : request.body : void 0,\n messages: include.requestMessages ? cloneModelMessages(stepMessages) : void 0\n };\n recordedRequestMessages = (_l = stepRequest.messages) != null ? _l : [];\n const stepToolCalls = [];\n const stepToolOutputs = [];\n const stepToolApprovalResponses = [];\n let warnings;\n let stepFinishReason = \"other\";\n let stepRawFinishReason = void 0;\n let hasReceivedTerminalChunk = false;\n let hasReceivedOutputChunk = false;\n let stepUsage = createNullLanguageModelUsage();\n let stepProviderMetadata;\n let stepFirstChunk = true;\n let modelCallPerformance = {\n responseTimeMs: 0,\n effectiveOutputTokensPerSecond: 0,\n outputTokensPerSecond: void 0,\n inputTokensPerSecond: void 0,\n effectiveTotalTokensPerSecond: 0,\n timeToFirstOutputMs: void 0,\n timeBetweenOutputChunksMs: void 0\n };\n const toolExecutionMs = {};\n let stepResponse = {\n id: generateId4(),\n timestamp: /* @__PURE__ */ new Date(),\n modelId: model.modelId\n };\n const textPartIds = /* @__PURE__ */ new Map();\n const reasoningPartIds = /* @__PURE__ */ new Map();\n self.addStream(\n streamWithToolResults.pipeThrough(\n new TransformStream({\n async transform(chunk, controller) {\n var _a27, _b26, _c2, _d2, _e2, _f2, _g2;\n if (chunk.type === \"model-call-start\") {\n warnings = chunk.warnings;\n return;\n }\n if (stepFirstChunk) {\n stepFirstChunk = false;\n controller.enqueue({\n type: \"start-step\",\n request: stepRequest,\n warnings: warnings != null ? warnings : []\n });\n }\n const chunkType = chunk.type;\n if (isOutputChunk2(chunk)) {\n if (!hasReceivedOutputChunk) {\n clearFirstChunkTimeout();\n }\n hasReceivedOutputChunk = true;\n resetChunkTimeout();\n }\n switch (chunkType) {\n case \"file\":\n case \"custom\":\n case \"source\":\n case \"reasoning-file\":\n case \"tool-input-start\":\n case \"tool-input-end\":\n case \"tool-input-delta\":\n case \"tool-approval-request\": {\n controller.enqueue(chunk);\n break;\n }\n case \"text-start\": {\n const id = reserveTextPartId(chunk.id);\n textPartIds.set(chunk.id, id);\n controller.enqueue({ ...chunk, id });\n break;\n }\n case \"text-delta\": {\n if (chunk.text.length > 0 || chunk.providerMetadata != null) {\n controller.enqueue({\n ...chunk,\n id: (_a27 = textPartIds.get(chunk.id)) != null ? _a27 : chunk.id\n });\n }\n break;\n }\n case \"text-end\": {\n controller.enqueue({\n ...chunk,\n id: (_b26 = textPartIds.get(chunk.id)) != null ? _b26 : chunk.id\n });\n textPartIds.delete(chunk.id);\n break;\n }\n case \"reasoning-start\": {\n const id = reserveReasoningPartId(chunk.id);\n reasoningPartIds.set(chunk.id, id);\n controller.enqueue({ ...chunk, id });\n break;\n }\n case \"reasoning-delta\": {\n controller.enqueue({\n ...chunk,\n id: (_c2 = reasoningPartIds.get(chunk.id)) != null ? _c2 : chunk.id\n });\n break;\n }\n case \"reasoning-end\": {\n controller.enqueue({\n ...chunk,\n id: (_d2 = reasoningPartIds.get(chunk.id)) != null ? _d2 : chunk.id\n });\n reasoningPartIds.delete(chunk.id);\n break;\n }\n case \"tool-call\": {\n controller.enqueue(chunk);\n stepToolCalls.push(chunk);\n break;\n }\n case \"tool-approval-response\": {\n controller.enqueue(chunk);\n stepToolApprovalResponses.push(chunk);\n break;\n }\n case \"tool-result\": {\n controller.enqueue(chunk);\n if (!chunk.preliminary) {\n stepToolOutputs.push(chunk);\n }\n break;\n }\n case \"tool-error\": {\n controller.enqueue(chunk);\n stepToolOutputs.push(chunk);\n break;\n }\n case \"tool-execution-end\": {\n toolExecutionMs[chunk.toolCallId] = chunk.toolExecutionMs;\n break;\n }\n case \"model-call-response-metadata\": {\n stepResponse = {\n id: (_e2 = chunk.id) != null ? _e2 : stepResponse.id,\n timestamp: (_f2 = chunk.timestamp) != null ? _f2 : stepResponse.timestamp,\n modelId: (_g2 = chunk.modelId) != null ? _g2 : stepResponse.modelId\n };\n break;\n }\n case \"model-call-end\": {\n hasReceivedTerminalChunk = true;\n stepUsage = chunk.usage;\n stepFinishReason = chunk.finishReason;\n stepRawFinishReason = chunk.rawFinishReason;\n stepProviderMetadata = chunk.providerMetadata;\n modelCallPerformance = chunk.performance;\n break;\n }\n case \"error\": {\n hasReceivedTerminalChunk = true;\n controller.enqueue(chunk);\n stepFinishReason = \"error\";\n break;\n }\n case \"raw\": {\n if (include.rawChunks) {\n controller.enqueue(chunk);\n }\n break;\n }\n default: {\n const exhaustiveCheck = chunkType;\n throw new Error(`Unknown chunk type: ${exhaustiveCheck}`);\n }\n }\n },\n // invoke onEnd callback and resolve toolResults promise when the stream is about to close:\n async flush(controller) {\n if (!hasReceivedTerminalChunk && !hasReceivedOutputChunk) {\n controller.enqueue({\n type: \"error\",\n error: new NoOutputGeneratedError({\n message: \"No output generated. The model stream ended without a finish chunk.\"\n })\n });\n cleanupStepTimeouts();\n self.closeStream();\n return;\n }\n const stepTimeMs = now2() - stepStartTimestampMs;\n const finishStepPart = {\n type: \"finish-step\",\n finishReason: stepFinishReason,\n rawFinishReason: stepRawFinishReason,\n usage: stepUsage,\n performance: {\n stepTimeMs,\n toolExecutionMs,\n ...modelCallPerformance\n },\n providerMetadata: stepProviderMetadata,\n response: {\n ...stepResponse,\n headers: response == null ? void 0 : response.headers\n }\n };\n controller.enqueue(finishStepPart);\n const combinedUsage = addLanguageModelUsage(usage, stepUsage);\n await stepFinish.promise;\n const clientToolCalls = stepToolCalls.filter(\n (toolCall) => toolCall.providerExecuted !== true\n );\n const clientToolOutputs = stepToolOutputs.filter(\n (toolOutput) => toolOutput.providerExecuted !== true\n );\n const deniedToolApprovalResponses = stepToolApprovalResponses.filter(\n (toolApprovalResponse) => toolApprovalResponse.approved === false\n );\n for (const toolCall of stepToolCalls) {\n if (toolCall.providerExecuted !== true) continue;\n const tool2 = getOwn(stepExecutionTools, toolCall.toolName);\n if ((tool2 == null ? void 0 : tool2.type) === \"provider\" && tool2.supportsDeferredResults) {\n const hasResultInStep = stepToolOutputs.some(\n (output2) => (output2.type === \"tool-result\" || output2.type === \"tool-error\") && output2.toolCallId === toolCall.toolCallId\n );\n if (!hasResultInStep) {\n pendingDeferredToolCalls.set(toolCall.toolCallId, {\n toolName: toolCall.toolName\n });\n }\n }\n }\n for (const output2 of stepToolOutputs) {\n if (output2.type === \"tool-result\" || output2.type === \"tool-error\") {\n pendingDeferredToolCalls.delete(output2.toolCallId);\n }\n }\n cleanupStepTimeouts();\n if (\n // Continue only after all client tool calls have been executed or denied,\n // and if there are client results or pending deferred provider results.\n clientToolCalls.length === clientToolOutputs.length + deniedToolApprovalResponses.length && (clientToolCalls.length > 0 || pendingDeferredToolCalls.size > 0) && // continue until a stop condition is met:\n !await isStopConditionMet({\n stopConditions,\n steps: recordedSteps\n })\n ) {\n try {\n await runInStreamTextTracingChannelContext(\n () => streamStep({\n currentStep: currentStep + 1,\n usage: combinedUsage\n })\n );\n } catch (error) {\n controller.enqueue({\n type: \"error\",\n error\n });\n self.closeStream();\n }\n } else {\n controller.enqueue({\n type: \"finish\",\n finishReason: stepFinishReason,\n rawFinishReason: stepRawFinishReason,\n totalUsage: combinedUsage\n });\n self.closeStream();\n }\n }\n })\n ),\n {\n onError: cleanupStepTimeouts,\n onCancel: cleanupStepTimeouts\n }\n );\n } catch (error) {\n cleanupStepTimeouts();\n throw error;\n }\n }\n await runInStreamTextTracingChannelContext(\n () => (\n // add the initial stream to the stitchable stream\n streamStep({\n currentStep: 0,\n usage: createNullLanguageModelUsage()\n })\n )\n );\n })().catch(async (error) => {\n var _a25;\n await ((_a25 = telemetryDispatcher.onError) == null ? void 0 : _a25.call(telemetryDispatcher, { callId, error }));\n self._initialResponseMessages.reject(error);\n markPromiseAsHandled(self._initialResponseMessages.promise);\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 get steps() {\n this.consumeStream();\n return this._steps.promise;\n }\n get finalStep() {\n return this.steps.then((steps) => steps.at(-1));\n }\n get content() {\n return this.steps.then((steps) => steps.flatMap((step) => step.content));\n }\n get warnings() {\n return this.steps.then((steps) => steps.flatMap((step) => {\n var _a25;\n return (_a25 = step.warnings) != null ? _a25 : [];\n }));\n }\n get providerMetadata() {\n return this.finalStep.then((step) => step.providerMetadata);\n }\n get text() {\n return this.finalStep.then((step) => step.text);\n }\n get reasoningText() {\n return this.finalStep.then((step) => step.reasoningText);\n }\n get reasoning() {\n return this.finalStep.then(\n (step) => convertToReasoningOutputs(step.reasoning)\n );\n }\n get sources() {\n return this.steps.then((steps) => steps.flatMap((step) => step.sources));\n }\n get files() {\n return this.steps.then((steps) => steps.flatMap((step) => step.files));\n }\n get toolCalls() {\n return this.steps.then((steps) => steps.flatMap((step) => step.toolCalls));\n }\n get staticToolCalls() {\n return this.steps.then(\n (steps) => steps.flatMap((step) => step.staticToolCalls)\n );\n }\n get dynamicToolCalls() {\n return this.steps.then(\n (steps) => steps.flatMap((step) => step.dynamicToolCalls)\n );\n }\n get toolResults() {\n return this.steps.then((steps) => steps.flatMap((step) => step.toolResults));\n }\n get staticToolResults() {\n return this.steps.then(\n (steps) => steps.flatMap((step) => step.staticToolResults)\n );\n }\n get dynamicToolResults() {\n return this.steps.then(\n (steps) => steps.flatMap((step) => step.dynamicToolResults)\n );\n }\n get usage() {\n return this.totalUsage;\n }\n get request() {\n return this.finalStep.then((step) => step.request);\n }\n get response() {\n return this.finalStep.then((step) => step.response);\n }\n get responseMessages() {\n return Promise.all([\n this._initialResponseMessages.promise,\n this.steps\n ]).then(([initialResponseMessages, steps]) => [\n ...initialResponseMessages,\n ...steps.flatMap((step) => step.response.messages)\n ]);\n }\n get totalUsage() {\n this.consumeStream();\n return this._totalUsage.promise;\n }\n get finishReason() {\n this.consumeStream();\n return this._finishReason.promise;\n }\n get rawFinishReason() {\n this.consumeStream();\n return this._rawFinishReason.promise;\n }\n /**\n * Split out a new stream from the original stream.\n * The original stream is replaced to allow for further splitting,\n * since we do not know how many times the stream will be split.\n *\n * Note: this leads to buffering the stream content on the server.\n * However, the LLM results are expected to be small enough to not cause issues.\n */\n teeStream() {\n const [stream1, stream2] = this.baseStream.tee();\n this.baseStream = stream2;\n return stream1;\n }\n get textStream() {\n return createAsyncIterableStream(toTextStream({ stream: this.stream }));\n }\n get stream() {\n return createAsyncIterableStream(\n this.teeStream().pipeThrough(\n new TransformStream({\n transform({ part }, controller) {\n controller.enqueue(part);\n }\n })\n )\n );\n }\n get fullStream() {\n return this.stream;\n }\n rejectResultPromises(error) {\n this.rejectResultPromise({ delayedPromise: this._finishReason, error });\n this.rejectResultPromise({ delayedPromise: this._rawFinishReason, error });\n this.rejectResultPromise({ delayedPromise: this._totalUsage, error });\n this.rejectResultPromise({ delayedPromise: this._steps, error });\n this.rejectResultPromise({\n delayedPromise: this._initialResponseMessages,\n error\n });\n }\n rejectResultPromise({\n delayedPromise,\n error\n }) {\n if (delayedPromise.isPending()) {\n delayedPromise.reject(error);\n markPromiseAsHandled(delayedPromise.promise);\n }\n }\n async consumeStream(options) {\n var _a25;\n try {\n await consumeStream({\n stream: this.stream,\n onError: (error) => {\n var _a26;\n this.rejectResultPromises(error);\n (_a26 = options == null ? void 0 : options.onError) == null ? void 0 : _a26.call(options, error);\n }\n });\n } catch (error) {\n this.rejectResultPromises(error);\n (_a25 = options == null ? void 0 : options.onError) == null ? void 0 : _a25.call(options, error);\n }\n }\n get experimental_partialOutputStream() {\n return this.partialOutputStream;\n }\n get partialOutputStream() {\n return createAsyncIterableStream(\n this.teeStream().pipeThrough(\n new TransformStream({\n transform({ partialOutput }, controller) {\n if (partialOutput != null) {\n controller.enqueue(partialOutput);\n }\n }\n })\n )\n );\n }\n get elementStream() {\n var _a25, _b25, _c;\n const transform = (_a25 = this.outputSpecification) == null ? void 0 : _a25.createElementStreamTransform();\n if (transform == null) {\n throw new UnsupportedFunctionalityError2({\n functionality: `element streams in ${(_c = (_b25 = this.outputSpecification) == null ? void 0 : _b25.name) != null ? _c : \"text\"} mode`\n });\n }\n return createAsyncIterableStream(this.teeStream().pipeThrough(transform));\n }\n getOutputPromise() {\n if (this.outputPromise == null) {\n this.outputPromise = this.finalStep.then((step) => {\n var _a25;\n const output = (_a25 = this.outputSpecification) != null ? _a25 : text();\n return output.parseCompleteOutput(\n { text: step.text },\n {\n response: step.response,\n usage: step.usage,\n finishReason: step.finishReason\n }\n );\n });\n }\n return this.outputPromise;\n }\n get output() {\n return this.getOutputPromise();\n }\n toUIMessageStream({\n originalMessages,\n generateMessageId,\n onEnd,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendStart,\n sendFinish,\n onError\n } = {}) {\n return createAsyncIterableStream(\n toUIMessageStream({\n stream: this.stream,\n tools: this.tools,\n originalMessages,\n generateMessageId,\n onEnd: onEnd != null ? onEnd : onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendStart,\n sendFinish,\n onError\n })\n );\n }\n pipeUIMessageStreamToResponse(response, {\n originalMessages,\n generateMessageId,\n onEnd,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n } = {}) {\n return pipeUIMessageStreamToResponse({\n response,\n stream: this.toUIMessageStream({\n originalMessages,\n generateMessageId,\n onEnd: onEnd != null ? onEnd : onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError\n }),\n ...init\n });\n }\n pipeTextStreamToResponse(response, init) {\n return pipeTextStreamToResponse({\n response,\n stream: this.textStream,\n ...init\n });\n }\n toUIMessageStreamResponse({\n originalMessages,\n generateMessageId,\n onEnd,\n onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError,\n ...init\n } = {}) {\n return createUIMessageStreamResponse({\n stream: this.toUIMessageStream({\n originalMessages,\n generateMessageId,\n onEnd: onEnd != null ? onEnd : onFinish,\n messageMetadata,\n sendReasoning,\n sendSources,\n sendFinish,\n sendStart,\n onError\n }),\n ...init\n });\n }\n toTextStreamResponse(init) {\n return createTextStreamResponse({\n stream: this.textStream,\n ...init\n });\n }\n};\n\n// src/agent/tool-loop-agent.ts\nvar ToolLoopAgent = class {\n constructor(settings) {\n this.version = \"agent-v1\";\n const { onFinish, onEnd = onFinish } = settings;\n this.settings = { ...settings, onEnd };\n }\n /**\n * The id of the agent.\n */\n get id() {\n return this.settings.id;\n }\n /**\n * The tools that the agent can use.\n */\n get tools() {\n return this.settings.tools;\n }\n async prepareCall(options) {\n var _a25, _b25, _c, _d;\n if (this.settings.callOptionsSchema != null && options.options !== void 0) {\n const validatedOptions = await validateTypes3({\n value: options.options,\n schema: this.settings.callOptionsSchema,\n context: { field: \"options\" }\n });\n options = { ...options, options: validatedOptions };\n }\n const {\n onStart: _settingsStableOnStart,\n experimental_onStart: _settingsExperimentalOnStart,\n onStepStart: _settingsStableOnStepStart,\n experimental_onStepStart: _settingsExperimentalOnStepStart,\n onToolExecutionStart: _settingsOnToolExecutionStart,\n onToolExecutionEnd: _settingsOnToolExecutionEnd,\n onStepEnd: _settingsOnStepEnd,\n onStepFinish: _settingsOnStepFinish,\n onFinish: _settingsOnFinish,\n onEnd: _settingsOnEnd,\n ...settingsWithoutCallbacks\n } = this.settings;\n const baseCallArgs = {\n ...settingsWithoutCallbacks,\n stopWhen: (_a25 = this.settings.stopWhen) != null ? _a25 : isStepCount(20),\n ...options\n };\n const preparedCallArgs = (_d = await ((_c = (_b25 = this.settings).prepareCall) == null ? void 0 : _c.call(\n _b25,\n baseCallArgs\n ))) != null ? _d : baseCallArgs;\n const {\n instructions,\n allowSystemInMessages,\n messages,\n prompt,\n runtimeContext,\n ...callArgs\n } = preparedCallArgs;\n const promptArgs = {\n instructions,\n allowSystemInMessages,\n messages,\n prompt\n };\n if (runtimeContext === void 0) {\n return {\n ...callArgs,\n ...promptArgs\n };\n }\n return {\n ...callArgs,\n runtimeContext,\n ...promptArgs\n };\n }\n /**\n * Tags outgoing requests so usage can be attributed to ToolLoopAgent. Chains\n * with the `ai/<version>` and `ai-sdk/<provider>/<version>` suffixes added\n * downstream by generateText/streamText and the provider.\n */\n agentHeaders(preparedCall) {\n var _a25;\n return withUserAgentSuffix3(\n (_a25 = preparedCall.headers) != null ? _a25 : {},\n \"ai-sdk-agent/tool-loop\"\n );\n }\n /**\n * Generates an output from the agent (non-streaming).\n */\n async generate({\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n onStart,\n experimental_onStart,\n onStepStart,\n experimental_onStepStart,\n onToolExecutionStart,\n onToolExecutionEnd,\n onStepEnd,\n onStepFinish,\n onFinish,\n onEnd = onFinish,\n ...options\n }) {\n var _a25, _b25, _c;\n const generate = generateText;\n const preparedCall = await this.prepareCall({\n ...options,\n experimental_sandbox: sandbox\n });\n const callbackArgs = {\n abortSignal,\n timeout: timeout != null ? timeout : preparedCall.timeout,\n experimental_sandbox: sandbox,\n onStart: mergeCallbacks(\n (_a25 = this.settings.onStart) != null ? _a25 : this.settings.experimental_onStart,\n onStart != null ? onStart : experimental_onStart\n ),\n onStepStart: mergeCallbacks(\n (_b25 = this.settings.onStepStart) != null ? _b25 : this.settings.experimental_onStepStart,\n onStepStart != null ? onStepStart : experimental_onStepStart\n ),\n onToolExecutionStart: mergeCallbacks(\n this.settings.onToolExecutionStart,\n onToolExecutionStart\n ),\n onToolExecutionEnd: mergeCallbacks(\n this.settings.onToolExecutionEnd,\n onToolExecutionEnd\n ),\n onStepEnd: mergeCallbacks(\n (_c = this.settings.onStepEnd) != null ? _c : this.settings.onStepFinish,\n onStepEnd != null ? onStepEnd : onStepFinish\n ),\n onEnd: mergeCallbacks(this.settings.onEnd, onEnd)\n };\n return await generate({\n ...preparedCall,\n ...callbackArgs,\n headers: this.agentHeaders(preparedCall)\n });\n }\n /**\n * Streams an output from the agent (streaming).\n */\n async stream({\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n experimental_transform,\n onStart,\n experimental_onStart,\n onStepStart,\n experimental_onStepStart,\n onToolExecutionStart,\n onToolExecutionEnd,\n onStepEnd,\n onStepFinish,\n onFinish,\n onEnd = onFinish,\n ...options\n }) {\n var _a25, _b25, _c;\n const stream = streamText;\n const preparedCall = await this.prepareCall({\n ...options,\n experimental_sandbox: sandbox\n });\n const callbackArgs = {\n abortSignal,\n timeout: timeout != null ? timeout : preparedCall.timeout,\n experimental_sandbox: sandbox,\n experimental_transform,\n onStart: mergeCallbacks(\n (_a25 = this.settings.onStart) != null ? _a25 : this.settings.experimental_onStart,\n onStart != null ? onStart : experimental_onStart\n ),\n onStepStart: mergeCallbacks(\n (_b25 = this.settings.onStepStart) != null ? _b25 : this.settings.experimental_onStepStart,\n onStepStart != null ? onStepStart : experimental_onStepStart\n ),\n onToolExecutionStart: mergeCallbacks(\n this.settings.onToolExecutionStart,\n onToolExecutionStart\n ),\n onToolExecutionEnd: mergeCallbacks(\n this.settings.onToolExecutionEnd,\n onToolExecutionEnd\n ),\n onStepEnd: mergeCallbacks(\n (_c = this.settings.onStepEnd) != null ? _c : this.settings.onStepFinish,\n onStepEnd != null ? onStepEnd : onStepFinish\n ),\n onEnd: mergeCallbacks(this.settings.onEnd, onEnd)\n };\n return await stream({\n ...preparedCall,\n ...callbackArgs,\n headers: this.agentHeaders(preparedCall)\n });\n }\n};\n\n// src/ui-message-stream/create-ui-message-stream.ts\nimport {\n generateId as generateIdFunc\n} from \"@ai-sdk/provider-utils\";\nfunction createUIMessageStream({\n execute,\n onError = () => \"An error occurred.\",\n // prevent leaking server error details to the client by default\n originalMessages,\n onStepEnd,\n onStepFinish,\n onEnd,\n onFinish,\n generateId: generateId4 = generateIdFunc\n}) {\n let controller;\n const ongoingStreamPromises = [];\n let outcome = { status: \"unknown\" };\n const stream = new ReadableStream({\n start(controllerArg) {\n controller = controllerArg;\n }\n });\n function safeEnqueue(data) {\n try {\n controller.enqueue(data);\n } catch (e) {\n }\n }\n function setOutcome(newOutcome) {\n if (outcome.status === \"unknown\" && newOutcome.status !== \"unknown\") {\n outcome = newOutcome;\n }\n }\n function failOutcome(error) {\n outcome = { status: \"failed\", error };\n }\n function safeError(error) {\n try {\n controller.error(error);\n } catch (e) {\n }\n }\n function handleError(error) {\n failOutcome(error);\n let errorText;\n try {\n errorText = onError(error);\n } catch (onErrorError) {\n failOutcome(onErrorError);\n safeError(onErrorError);\n return;\n }\n safeEnqueue({\n type: \"error\",\n errorText\n });\n }\n try {\n const result = execute({\n writer: {\n write(part) {\n safeEnqueue(part);\n },\n merge(streamArg) {\n ongoingStreamPromises.push(\n (async () => {\n const reader = streamArg.getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) break;\n safeEnqueue(value);\n }\n })().catch((error) => {\n handleError(error);\n })\n );\n },\n setOutcome,\n onError\n }\n });\n if (result) {\n ongoingStreamPromises.push(\n result.catch((error) => {\n handleError(error);\n })\n );\n }\n } catch (error) {\n handleError(error);\n }\n const waitForStreams = (async () => {\n while (ongoingStreamPromises.length > 0) {\n await ongoingStreamPromises.shift();\n }\n })();\n waitForStreams.finally(() => {\n try {\n controller.close();\n } catch (e) {\n }\n });\n return handleUIMessageStreamFinish({\n stream,\n messageId: generateId4(),\n originalMessages,\n onStepEnd: onStepEnd != null ? onStepEnd : onStepFinish,\n onEnd: onEnd != null ? onEnd : onFinish,\n onError,\n getOutcome: () => outcome\n });\n}\n\n// src/ui-message-stream/read-ui-message-stream.ts\nfunction createUIMessageSnapshot(message) {\n const textByPartIndex = /* @__PURE__ */ new Map();\n const messageWithoutText = {\n ...message,\n parts: message.parts.map((part, index) => {\n if (part.type === \"text\" || part.type === \"reasoning\") {\n textByPartIndex.set(index, part.text);\n return { ...part, text: \"\" };\n }\n return part;\n })\n };\n const snapshot = structuredClone(messageWithoutText);\n for (const [index, text2] of textByPartIndex) {\n const part = snapshot.parts[index];\n if (part.type === \"text\" || part.type === \"reasoning\") {\n part.text = text2;\n }\n }\n return snapshot;\n}\nfunction readUIMessageStream({\n message,\n stream,\n onError,\n terminateOnError = false\n}) {\n var _a25;\n let controller;\n let hasErrored = false;\n const outputStream = new ReadableStream({\n start(controllerParam) {\n controller = controllerParam;\n }\n });\n const state = createStreamingUIMessageState({\n messageId: (_a25 = message == null ? void 0 : message.id) != null ? _a25 : \"\",\n lastMessage: message\n });\n const handleError = (error) => {\n onError == null ? void 0 : onError(error);\n if (!hasErrored && terminateOnError) {\n hasErrored = true;\n controller == null ? void 0 : controller.error(error);\n }\n };\n consumeStream({\n stream: processUIMessageStream({\n stream,\n runUpdateMessageJob(job) {\n return job({\n state,\n write: () => {\n controller == null ? void 0 : controller.enqueue(createUIMessageSnapshot(state.message));\n }\n });\n },\n onError: handleError\n }),\n onError: handleError\n }).finally(() => {\n if (!hasErrored) {\n controller == null ? void 0 : controller.close();\n }\n });\n return createAsyncIterableStream(outputStream);\n}\n\n// src/ui/convert-to-model-messages.ts\nimport {\n isNonNullable\n} from \"@ai-sdk/provider-utils\";\nasync function convertToModelMessages(messages, options) {\n const modelMessages = [];\n if (options == null ? void 0 : options.ignoreIncompleteToolCalls) {\n messages = messages.map((message) => ({\n ...message,\n parts: message.parts.filter(\n (part) => !isToolUIPart(part) || part.state === \"approval-responded\" || part.state === \"output-available\" && part.preliminary !== true || part.state === \"output-error\" || part.state === \"output-denied\"\n )\n }));\n }\n for (const message of messages) {\n switch (message.role) {\n case \"system\": {\n const textParts = message.parts.filter(\n (part) => part.type === \"text\"\n );\n const providerMetadata = textParts.reduce((acc, part) => {\n if (part.providerMetadata != null) {\n return { ...acc, ...part.providerMetadata };\n }\n return acc;\n }, {});\n modelMessages.push({\n role: \"system\",\n content: textParts.map((part) => part.text).join(\"\"),\n ...Object.keys(providerMetadata).length > 0 ? { providerOptions: providerMetadata } : {}\n });\n break;\n }\n case \"user\": {\n modelMessages.push({\n role: \"user\",\n content: message.parts.map((part) => {\n var _a25;\n if (isTextUIPart(part)) {\n return {\n type: \"text\",\n text: part.text,\n ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n };\n }\n if (isFileUIPart(part)) {\n return {\n type: \"file\",\n mediaType: part.mediaType,\n filename: part.filename,\n data: part.providerReference != null ? {\n type: \"reference\",\n reference: part.providerReference\n } : { type: \"url\", url: new URL(part.url) },\n ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n };\n }\n if (isDataUIPart(part)) {\n return (_a25 = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _a25.call(\n options,\n part\n );\n }\n }).filter(isNonNullable)\n });\n break;\n }\n case \"assistant\": {\n if (message.parts != null) {\n let block = [];\n async function processBlock() {\n var _a25, _b25, _c, _d, _e, _f, _g;\n if (block.length === 0) {\n return;\n }\n const content = [];\n for (const part of block) {\n if (isTextUIPart(part)) {\n content.push({\n type: \"text\",\n text: part.text,\n ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n });\n } else if (isCustomContentUIPart(part)) {\n content.push({\n type: \"custom\",\n kind: part.kind,\n ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n });\n } else if (isFileUIPart(part)) {\n content.push({\n type: \"file\",\n mediaType: part.mediaType,\n filename: part.filename,\n data: part.providerReference != null ? {\n type: \"reference\",\n reference: part.providerReference\n } : { type: \"url\", url: new URL(part.url) },\n ...part.providerMetadata != null ? { providerOptions: part.providerMetadata } : {}\n });\n } else if (isReasoningFileUIPart(part)) {\n content.push({\n type: \"reasoning-file\",\n data: { type: \"url\", url: new URL(part.url) },\n mediaType: part.mediaType,\n providerOptions: part.providerMetadata\n });\n } else if (isReasoningUIPart(part)) {\n content.push({\n type: \"reasoning\",\n text: part.text,\n providerOptions: part.providerMetadata\n });\n } else if (isToolUIPart(part)) {\n const toolName = getToolName(part);\n if (part.state !== \"input-streaming\") {\n content.push({\n type: \"tool-call\",\n toolCallId: part.toolCallId,\n toolName,\n input: part.state === \"output-error\" ? (_a25 = part.input) != null ? _a25 : \"rawInput\" in part ? part.rawInput : void 0 : part.input,\n providerExecuted: part.providerExecuted,\n ...part.callProviderMetadata != null ? { providerOptions: part.callProviderMetadata } : {}\n });\n if (part.approval != null) {\n content.push({\n type: \"tool-approval-request\",\n approvalId: part.approval.id,\n toolCallId: part.toolCallId,\n isAutomatic: part.approval.isAutomatic,\n ...part.approval.requestReason != null ? { reason: part.approval.requestReason } : {},\n ...part.approval.signature != null ? { signature: part.approval.signature } : {}\n });\n }\n if (part.providerExecuted === true && part.state !== \"approval-responded\" && (part.state === \"output-available\" || part.state === \"output-error\")) {\n const resultProviderMetadata = (_b25 = part.resultProviderMetadata) != null ? _b25 : part.callProviderMetadata;\n content.push({\n type: \"tool-result\",\n toolCallId: part.toolCallId,\n toolName,\n output: await createToolModelOutput({\n toolCallId: part.toolCallId,\n input: part.input,\n output: part.state === \"output-error\" ? part.errorText : part.output,\n tool: getOwn(options == null ? void 0 : options.tools, toolName),\n errorMode: part.state === \"output-error\" ? \"json\" : \"none\"\n }),\n ...resultProviderMetadata != null ? { providerOptions: resultProviderMetadata } : {}\n });\n }\n }\n } else if (isDataUIPart(part)) {\n const dataPart = (_c = options == null ? void 0 : options.convertDataPart) == null ? void 0 : _c.call(\n options,\n part\n );\n if (dataPart != null) {\n content.push(dataPart);\n }\n } else {\n const _exhaustiveCheck = part;\n throw new Error(`Unsupported part: ${_exhaustiveCheck}`);\n }\n }\n if (content.length > 0) {\n modelMessages.push({\n role: \"assistant\",\n content\n });\n }\n const toolParts = block.filter(\n (part) => {\n var _a26;\n return isToolUIPart(part) && (part.providerExecuted !== true || ((_a26 = part.approval) == null ? void 0 : _a26.approved) != null);\n }\n );\n if (toolParts.length > 0) {\n {\n const content2 = [];\n for (const toolPart of toolParts) {\n if (((_d = toolPart.approval) == null ? void 0 : _d.approved) != null) {\n content2.push({\n type: \"tool-approval-response\",\n approvalId: toolPart.approval.id,\n approved: toolPart.approval.approved,\n reason: toolPart.approval.reason,\n providerExecuted: toolPart.providerExecuted\n });\n }\n if (toolPart.state === \"approval-responded\" && ((_e = toolPart.approval) == null ? void 0 : _e.approved) === false) {\n content2.push({\n type: \"tool-result\",\n toolCallId: toolPart.toolCallId,\n toolName: getToolName(toolPart),\n output: {\n type: \"execution-denied\",\n reason: toolPart.approval.reason\n },\n ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {}\n });\n }\n if (toolPart.providerExecuted === true) {\n continue;\n }\n switch (toolPart.state) {\n case \"output-denied\": {\n content2.push({\n type: \"tool-result\",\n toolCallId: toolPart.toolCallId,\n toolName: getToolName(toolPart),\n output: {\n type: \"error-text\",\n value: (_g = (_f = toolPart.approval) == null ? void 0 : _f.reason) != null ? _g : \"Tool call execution denied.\"\n },\n ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {}\n });\n break;\n }\n case \"output-error\":\n case \"output-available\": {\n const toolName = getToolName(toolPart);\n content2.push({\n type: \"tool-result\",\n toolCallId: toolPart.toolCallId,\n toolName,\n output: await createToolModelOutput({\n toolCallId: toolPart.toolCallId,\n input: toolPart.input,\n output: toolPart.state === \"output-error\" ? toolPart.errorText : toolPart.output,\n tool: getOwn(options == null ? void 0 : options.tools, toolName),\n errorMode: toolPart.state === \"output-error\" ? \"text\" : \"none\"\n }),\n ...toolPart.callProviderMetadata != null ? { providerOptions: toolPart.callProviderMetadata } : {}\n });\n break;\n }\n }\n }\n if (content2.length > 0) {\n modelMessages.push({\n role: \"tool\",\n content: content2\n });\n }\n }\n }\n block = [];\n }\n for (const part of message.parts) {\n if (isCustomContentUIPart(part) || isTextUIPart(part) || isReasoningUIPart(part) || isReasoningFileUIPart(part) || isFileUIPart(part) || isToolUIPart(part) || isDataUIPart(part)) {\n block.push(part);\n } else if (part.type === \"step-start\") {\n await processBlock();\n }\n }\n await processBlock();\n break;\n }\n break;\n }\n default: {\n const _exhaustiveCheck = message.role;\n throw new MessageConversionError({\n originalMessage: message,\n message: `Unsupported role: ${_exhaustiveCheck}`\n });\n }\n }\n }\n return modelMessages;\n}\n\n// src/ui/validate-ui-messages.ts\nimport { TypeValidationError as TypeValidationError3 } from \"@ai-sdk/provider\";\nimport {\n lazySchema as lazySchema2,\n safeValidateTypes as safeValidateTypes5,\n validateTypes as validateTypes4,\n zodSchema as zodSchema2\n} from \"@ai-sdk/provider-utils\";\nvar toolMetadataSchema2 = z.record(\n z.string(),\n jsonValueSchema.optional()\n);\nvar providerReferenceSchema2 = z.record(z.string(), z.string());\nfunction isEmptyObject(value) {\n return value != null && typeof value === \"object\" && !Array.isArray(value) && Object.keys(value).length === 0;\n}\nfunction asDynamicToolPart(toolPart) {\n const { type, ...part } = toolPart;\n return {\n ...part,\n type: \"dynamic-tool\",\n toolName: type.slice(5)\n };\n}\nvar uiMessagesSchema = lazySchema2(\n () => zodSchema2(\n z.array(\n z.object({\n id: z.string(),\n role: z.enum([\"system\", \"user\", \"assistant\"]),\n metadata: z.unknown().optional(),\n parts: z.array(\n z.union([\n z.object({\n type: z.literal(\"text\"),\n text: z.string(),\n state: z.enum([\"streaming\", \"done\"]).optional(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"reasoning\"),\n id: z.string().optional(),\n text: z.string(),\n state: z.enum([\"streaming\", \"done\"]).optional(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"custom\"),\n kind: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"source-url\"),\n sourceId: z.string(),\n url: z.string(),\n title: z.string().optional(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"source-document\"),\n sourceId: z.string(),\n mediaType: z.string(),\n title: z.string(),\n filename: z.string().optional(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"file\"),\n mediaType: z.string(),\n filename: z.string().optional(),\n url: z.string(),\n providerReference: providerReferenceSchema2.optional(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"reasoning-file\"),\n mediaType: z.string(),\n url: z.string(),\n providerMetadata: providerMetadataSchema.optional()\n }),\n z.object({\n type: z.literal(\"step-start\")\n }),\n z.object({\n type: z.string().startsWith(\"data-\"),\n id: z.string().optional(),\n data: z.unknown()\n }),\n z.object({\n type: z.literal(\"dynamic-tool\"),\n toolName: z.string(),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"input-streaming\"),\n input: z.unknown().optional(),\n providerExecuted: z.boolean().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n approval: z.never().optional()\n }),\n z.object({\n type: z.literal(\"dynamic-tool\"),\n toolName: z.string(),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"input-available\"),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n approval: z.never().optional()\n }),\n z.object({\n type: z.literal(\"dynamic-tool\"),\n toolName: z.string(),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"approval-requested\"),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n approval: z.object({\n id: z.string(),\n approved: z.never().optional(),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.never().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n })\n }),\n z.object({\n type: z.literal(\"dynamic-tool\"),\n toolName: z.string(),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"approval-responded\"),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n approval: z.object({\n id: z.string(),\n approved: z.boolean(),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.string().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n })\n }),\n z.object({\n type: z.literal(\"dynamic-tool\"),\n toolName: z.string(),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"output-available\"),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n output: z.unknown(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n resultProviderMetadata: providerMetadataSchema.optional(),\n preliminary: z.boolean().optional(),\n approval: z.object({\n id: z.string(),\n approved: z.literal(true),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.string().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n }).optional()\n }),\n z.object({\n type: z.literal(\"dynamic-tool\"),\n toolName: z.string(),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"output-error\"),\n input: z.unknown().optional(),\n rawInput: z.unknown().optional(),\n providerExecuted: z.boolean().optional(),\n output: z.never().optional(),\n errorText: z.string(),\n callProviderMetadata: providerMetadataSchema.optional(),\n resultProviderMetadata: providerMetadataSchema.optional(),\n approval: z.object({\n id: z.string(),\n approved: z.literal(true),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.string().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n }).optional()\n }),\n z.object({\n type: z.literal(\"dynamic-tool\"),\n toolName: z.string(),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"output-denied\"),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n approval: z.object({\n id: z.string(),\n approved: z.literal(false),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.string().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n })\n }),\n z.object({\n type: z.string().startsWith(\"tool-\"),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"input-streaming\"),\n providerExecuted: z.boolean().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n input: z.unknown().optional(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n approval: z.never().optional()\n }),\n z.object({\n type: z.string().startsWith(\"tool-\"),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"input-available\"),\n providerExecuted: z.boolean().optional(),\n input: z.unknown(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n approval: z.never().optional()\n }),\n z.object({\n type: z.string().startsWith(\"tool-\"),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"approval-requested\"),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n approval: z.object({\n id: z.string(),\n approved: z.never().optional(),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.never().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n })\n }),\n z.object({\n type: z.string().startsWith(\"tool-\"),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"approval-responded\"),\n input: z.unknown(),\n providerExecuted: z.boolean().optional(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n approval: z.object({\n id: z.string(),\n approved: z.boolean(),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.string().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n })\n }),\n z.object({\n type: z.string().startsWith(\"tool-\"),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"output-available\"),\n providerExecuted: z.boolean().optional(),\n input: z.unknown(),\n output: z.unknown(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n resultProviderMetadata: providerMetadataSchema.optional(),\n preliminary: z.boolean().optional(),\n approval: z.object({\n id: z.string(),\n approved: z.literal(true),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.string().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n }).optional()\n }),\n z.object({\n type: z.string().startsWith(\"tool-\"),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"output-error\"),\n providerExecuted: z.boolean().optional(),\n input: z.unknown().optional(),\n rawInput: z.unknown().optional(),\n output: z.never().optional(),\n errorText: z.string(),\n callProviderMetadata: providerMetadataSchema.optional(),\n resultProviderMetadata: providerMetadataSchema.optional(),\n approval: z.object({\n id: z.string(),\n approved: z.literal(true),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.string().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n }).optional()\n }),\n z.object({\n type: z.string().startsWith(\"tool-\"),\n toolCallId: z.string(),\n toolMetadata: toolMetadataSchema2.optional(),\n state: z.literal(\"output-denied\"),\n providerExecuted: z.boolean().optional(),\n input: z.unknown(),\n output: z.never().optional(),\n errorText: z.never().optional(),\n callProviderMetadata: providerMetadataSchema.optional(),\n approval: z.object({\n id: z.string(),\n approved: z.literal(false),\n descriptor: z.unknown().optional(),\n requestReason: z.string().optional(),\n reason: z.string().optional(),\n isAutomatic: z.boolean().optional(),\n signature: z.string().optional()\n })\n })\n ])\n )\n }).superRefine((message, context) => {\n if (message.role !== \"assistant\" && message.parts.length === 0) {\n context.addIssue({\n origin: \"array\",\n code: \"too_small\",\n minimum: 1,\n inclusive: true,\n input: message.parts,\n path: [\"parts\"],\n message: \"Message must contain at least one part\"\n });\n }\n })\n ).nonempty(\"Messages array must not be empty\")\n )\n);\nasync function safeValidateUIMessagesInternal({\n messages,\n metadataSchema,\n dataSchemas,\n tools\n}, {\n convertMissingTerminalToolsToDynamic\n}) {\n try {\n if (messages == null) {\n return {\n success: false,\n error: new InvalidArgumentError({\n parameter: \"messages\",\n value: messages,\n message: \"messages parameter must be provided\"\n })\n };\n }\n const validatedMessages = await validateTypes4({\n value: messages,\n schema: uiMessagesSchema\n });\n if (metadataSchema) {\n for (const [msgIdx, message] of validatedMessages.entries()) {\n await validateTypes4({\n value: message.metadata,\n schema: metadataSchema,\n context: {\n field: `messages[${msgIdx}].metadata`,\n entityId: message.id\n }\n });\n }\n }\n const shouldValidateToolParts = tools != null || convertMissingTerminalToolsToDynamic;\n if (dataSchemas || shouldValidateToolParts) {\n for (const [msgIdx, message] of validatedMessages.entries()) {\n for (const [partIdx, part] of message.parts.entries()) {\n if (dataSchemas && part.type.startsWith(\"data-\")) {\n const dataPart = part;\n const dataName = dataPart.type.slice(5);\n const dataSchema = dataSchemas[dataName];\n if (!dataSchema) {\n return {\n success: false,\n error: new TypeValidationError3({\n value: dataPart.data,\n cause: `No data schema found for data part ${dataName}`,\n context: {\n field: `messages[${msgIdx}].parts[${partIdx}].data`,\n entityName: dataName,\n entityId: dataPart.id\n }\n })\n };\n }\n await validateTypes4({\n value: dataPart.data,\n schema: dataSchema,\n context: {\n field: `messages[${msgIdx}].parts[${partIdx}].data`,\n entityName: dataName,\n entityId: dataPart.id\n }\n });\n }\n if (shouldValidateToolParts && part.type.startsWith(\"tool-\")) {\n const toolPart = part;\n const toolName = toolPart.type.slice(5);\n const tool2 = tools == null ? void 0 : getOwn(tools, toolName);\n const isTerminal = toolPart.state === \"output-available\" || toolPart.state === \"output-error\" || toolPart.state === \"output-denied\";\n if (!tool2 && isTerminal) {\n if (tools != null || convertMissingTerminalToolsToDynamic) {\n message.parts[partIdx] = asDynamicToolPart(\n toolPart\n );\n }\n continue;\n }\n if (!tool2) {\n return {\n success: false,\n error: new TypeValidationError3({\n value: toolPart.input,\n cause: `No tool schema found for tool part ${toolName}`,\n context: {\n field: `messages[${msgIdx}].parts[${partIdx}].input`,\n entityName: toolName,\n entityId: toolPart.toolCallId\n }\n })\n };\n }\n const inputValidationContext = {\n field: `messages[${msgIdx}].parts[${partIdx}].input`,\n entityName: toolName,\n entityId: toolPart.toolCallId\n };\n let convertToDynamic = false;\n if (toolPart.state === \"output-error\") {\n if (toolPart.input !== void 0) {\n const result = await safeValidateTypes5({\n value: toolPart.input,\n schema: tool2.inputSchema,\n context: inputValidationContext\n });\n convertToDynamic = !result.success;\n }\n } else if (toolPart.state === \"output-available\") {\n const result = await safeValidateTypes5({\n value: toolPart.input,\n schema: tool2.inputSchema,\n context: inputValidationContext\n });\n if (!result.success) {\n if (isEmptyObject(toolPart.input)) {\n convertToDynamic = true;\n } else {\n throw result.error;\n }\n }\n } else if (toolPart.state === \"input-available\" || toolPart.state === \"approval-requested\" || toolPart.state === \"approval-responded\" || toolPart.state === \"output-denied\") {\n await validateTypes4({\n value: toolPart.input,\n schema: tool2.inputSchema,\n context: inputValidationContext\n });\n }\n if (toolPart.state === \"output-available\" && tool2.outputSchema) {\n await validateTypes4({\n value: toolPart.output,\n schema: tool2.outputSchema,\n context: {\n field: `messages[${msgIdx}].parts[${partIdx}].output`,\n entityName: toolName,\n entityId: toolPart.toolCallId\n }\n });\n }\n if (convertToDynamic) {\n message.parts[partIdx] = asDynamicToolPart(\n toolPart\n );\n }\n }\n }\n }\n }\n return {\n success: true,\n data: validatedMessages\n };\n } catch (error) {\n const err = error;\n return {\n success: false,\n error: err\n };\n }\n}\nasync function safeValidateUIMessages(options) {\n return safeValidateUIMessagesInternal(options, {\n convertMissingTerminalToolsToDynamic: false\n });\n}\nasync function validateUIMessages(options) {\n const response = await safeValidateUIMessages(options);\n if (!response.success) throw response.error;\n return response.data;\n}\nasync function validateUIMessagesForAgent(options) {\n const response = await safeValidateUIMessagesInternal(options, {\n // Agent tool sets can include ephemeral tools (for example, tools from a\n // disconnected MCP server), so terminal history is converted to dynamic\n // tool parts when those tools are no longer registered.\n convertMissingTerminalToolsToDynamic: true\n });\n if (!response.success) throw response.error;\n return response.data;\n}\n\n// src/agent/create-agent-ui-stream.ts\nasync function createAgentUIStream({\n agent,\n uiMessages,\n options,\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n experimental_transform,\n onStepEnd,\n onStepFinish,\n ...uiMessageStreamOptions\n}) {\n var _a25;\n const validatedMessages = await validateUIMessagesForAgent({\n messages: uiMessages,\n // tools are compatible; the casting is required because the context param is\n // not available in ui messages\n tools: agent.tools\n });\n const modelMessages = await convertToModelMessages(validatedMessages, {\n tools: agent.tools\n });\n const result = await agent.stream({\n prompt: modelMessages,\n options,\n abortSignal,\n timeout,\n experimental_sandbox: sandbox,\n experimental_transform,\n onStepEnd: onStepEnd != null ? onStepEnd : onStepFinish\n });\n const originalMessages = (_a25 = uiMessageStreamOptions.originalMessages) != null ? _a25 : validatedMessages;\n return createAsyncIterableStream(\n toUIMessageStream({\n ...uiMessageStreamOptions,\n originalMessages,\n stream: result.stream,\n tools: agent.tools\n })\n );\n}\n\n// src/agent/create-agent-ui-stream-response.ts\nasync function createAgentUIStreamResponse({\n headers,\n status,\n statusText,\n consumeSseStream,\n ...options\n}) {\n return createUIMessageStreamResponse({\n headers,\n status,\n statusText,\n consumeSseStream,\n stream: await createAgentUIStream(options)\n });\n}\n\n// src/agent/pipe-agent-ui-stream-to-response.ts\nasync function pipeAgentUIStreamToResponse({\n response,\n headers,\n status,\n statusText,\n consumeSseStream,\n ...options\n}) {\n return pipeUIMessageStreamToResponse({\n response,\n headers,\n status,\n statusText,\n consumeSseStream,\n stream: await createAgentUIStream(options)\n });\n}\n\n// src/batch/batch.ts\nimport {\n UnsupportedFunctionalityError as UnsupportedFunctionalityError3\n} from \"@ai-sdk/provider\";\nimport { withUserAgentSuffix as withUserAgentSuffix4 } from \"@ai-sdk/provider-utils\";\nasync function startTextBatch({\n model: modelArg,\n requests,\n tools,\n toolChoice,\n toolOrder,\n toolsContext,\n providerOptions,\n webhookUrl,\n abortSignal,\n headers,\n timeout\n}) {\n validateRequests(requests);\n const model = resolveBatchLanguageModel(modelArg);\n const operationAbortSignal = mergeAbortSignals(\n abortSignal,\n getTotalTimeoutMs(timeout)\n );\n const supportedUrls = await model.supportedUrls;\n const preparedTools = await prepareTools({\n tools,\n toolOrder,\n toolsContext\n });\n const preparedToolChoice = prepareToolChoice({ toolChoice });\n operationAbortSignal == null ? void 0 : operationAbortSignal.throwIfAborted();\n const normalizedRequests = [];\n for (const request of requests) {\n const standardizedPrompt = await standardizePrompt(request);\n normalizedRequests.push({\n id: request.id,\n options: {\n ...prepareLanguageModelCallOptions(request),\n prompt: await convertToLanguageModelPrompt({\n prompt: standardizedPrompt,\n supportedUrls,\n download: void 0,\n provider: model.provider.split(\".\")[0]\n }),\n tools: preparedTools,\n toolChoice: preparedToolChoice,\n providerOptions: request.providerOptions\n }\n });\n operationAbortSignal == null ? void 0 : operationAbortSignal.throwIfAborted();\n }\n const headersWithUserAgent = withUserAgentSuffix4(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n try {\n const result = await model.experimental_doStartBatch({\n requests: normalizedRequests,\n providerOptions,\n abortSignal: operationAbortSignal,\n headers: headersWithUserAgent,\n ...webhookUrl != null && { webhookUrl }\n });\n const { batchId, warnings, ...status } = result;\n logWarnings({\n warnings: warnings.map(({ warning }) => warning),\n provider: model.provider,\n model: model.modelId\n });\n return {\n version: 1,\n type: \"text\",\n id: batchId,\n provider: model.provider,\n modelId: model.modelId,\n ...status,\n warnings\n };\n } catch (error) {\n throw wrapGatewayError(error);\n }\n}\nasync function getBatchStatus({\n model: modelArg,\n batch,\n providerOptions,\n maxRetries,\n abortSignal,\n headers,\n timeout\n}) {\n const model = resolveBatchLanguageModel(modelArg);\n validateBatchReference({ model, batch });\n const operationAbortSignal = mergeAbortSignals(\n abortSignal,\n getTotalTimeoutMs(timeout)\n );\n const { retry } = prepareRetries({\n maxRetries,\n abortSignal: operationAbortSignal\n });\n try {\n const status = await retry(\n () => model.experimental_doGetBatchStatus({\n batchId: batch.id,\n providerOptions,\n abortSignal: operationAbortSignal,\n headers: withUserAgentSuffix4(headers != null ? headers : {}, `ai/${VERSION}`)\n })\n );\n return status;\n } catch (error) {\n throw wrapGatewayError(error);\n }\n}\nfunction getBatchResults({\n model: modelArg,\n batch,\n tools,\n providerOptions,\n maxRetries,\n abortSignal,\n headers,\n timeout\n}) {\n const model = resolveBatchLanguageModel(modelArg);\n validateBatchReference({ model, batch });\n const streamAbortController = new AbortController();\n const operationAbortSignal = mergeAbortSignals(\n abortSignal,\n getTotalTimeoutMs(timeout),\n streamAbortController.signal\n );\n const { retry } = prepareRetries({\n maxRetries,\n abortSignal: operationAbortSignal\n });\n const transformer = {\n async transform(item, controller) {\n controller.enqueue(await convertBatchItemResult({ item, tools }));\n },\n cancel(reason) {\n streamAbortController.abort(\n reason != null ? reason : new Error(\"Batch results stream was cancelled.\")\n );\n }\n };\n const transform = new TransformStream(transformer);\n void (async () => {\n try {\n const stream = await retry(\n () => model.experimental_doGetBatchResults({\n batchId: batch.id,\n providerOptions,\n abortSignal: operationAbortSignal,\n headers: withUserAgentSuffix4(headers != null ? headers : {}, `ai/${VERSION}`)\n })\n );\n await stream.pipeTo(transform.writable, {\n signal: operationAbortSignal\n });\n } catch (error) {\n await transform.writable.abort(wrapGatewayError(error)).catch(() => {\n });\n }\n })();\n return asAsyncIterableStream(transform.readable);\n}\nfunction resolveBatchLanguageModel(modelArg) {\n const model = resolveLanguageModel(modelArg);\n if (!isBatchLanguageModel(model)) {\n throw new UnsupportedFunctionalityError3({\n functionality: \"batch processing\",\n message: `The ${model.provider} model \"${model.modelId}\" does not support batch processing.`\n });\n }\n return model;\n}\nfunction isBatchLanguageModel(model) {\n const candidate = model;\n return typeof candidate.experimental_doStartBatch === \"function\" && typeof candidate.experimental_doGetBatchStatus === \"function\" && typeof candidate.experimental_doGetBatchResults === \"function\";\n}\nfunction validateRequests(requests) {\n if (requests.length === 0) {\n throw new InvalidArgumentError({\n parameter: \"requests\",\n value: requests,\n message: \"requests must not be empty\"\n });\n }\n const ids = /* @__PURE__ */ new Set();\n for (const request of requests) {\n if (request.id.trim().length === 0) {\n throw new InvalidArgumentError({\n parameter: \"requests\",\n value: requests,\n message: \"request IDs must not be empty\"\n });\n }\n if (ids.has(request.id)) {\n throw new InvalidArgumentError({\n parameter: \"requests\",\n value: requests,\n message: `request IDs must be unique; duplicate ID \"${request.id}\"`\n });\n }\n ids.add(request.id);\n }\n}\nfunction validateBatchReference({\n model,\n batch\n}) {\n if (batch.version !== 1 || batch.type !== \"text\") {\n throw new InvalidArgumentError({\n parameter: \"batch\",\n value: batch,\n message: \"batch must be a supported text batch reference\"\n });\n }\n if (batch.provider !== model.provider || batch.modelId !== model.modelId) {\n throw new InvalidArgumentError({\n parameter: \"model\",\n value: model,\n message: `model ${model.provider}:${model.modelId} is not compatible with batch ${batch.provider}:${batch.modelId}`\n });\n }\n}\nasync function convertBatchItemResult({\n item,\n tools\n}) {\n if (item.status !== \"succeeded\") {\n return item;\n }\n return {\n id: item.id,\n status: \"succeeded\",\n ...await convertGenerateResult({ result: item.result, tools })\n };\n}\nasync function convertGenerateResult({\n result,\n tools\n}) {\n var _a25;\n const toolCalls = await Promise.all(\n result.content.filter(\n (part) => part.type === \"tool-call\"\n ).map(\n (toolCall) => parseToolCall({\n toolCall,\n tools,\n repairToolCall: void 0,\n refineToolInput: void 0,\n instructions: void 0,\n messages: []\n })\n )\n );\n const content = convertLanguageModelContent({\n content: result.content,\n toolCalls,\n toolOutputs: [],\n toolApprovalRequests: [],\n toolApprovalResponses: [],\n tools\n });\n return {\n content,\n text: result.content.filter(\n (part) => part.type === \"text\"\n ).map((part) => part.text).join(\"\"),\n finishReason: result.finishReason.unified,\n rawFinishReason: result.finishReason.raw,\n usage: asLanguageModelUsage(result.usage),\n ...result.response != null ? {\n response: {\n id: result.response.id,\n timestamp: (_a25 = result.response.timestamp) == null ? void 0 : _a25.toISOString(),\n modelId: result.response.modelId\n }\n } : {},\n providerMetadata: result.providerMetadata\n };\n}\n\n// src/embed/embed.ts\nimport {\n createIdGenerator as createIdGenerator4,\n withUserAgentSuffix as withUserAgentSuffix5\n} from \"@ai-sdk/provider-utils\";\nvar originalGenerateCallId4 = createIdGenerator4({\n prefix: \"call\",\n size: 24\n});\nasync function embed({\n model: modelArg,\n value,\n providerOptions,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n experimental_telemetry,\n telemetry = experimental_telemetry,\n onStart,\n experimental_onStart,\n onEnd,\n experimental_onEnd,\n _internal: { generateCallId = originalGenerateCallId4 } = {}\n}) {\n var _a25;\n const model = resolveEmbeddingModel(modelArg);\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const resolvedOnStart = onStart != null ? onStart : experimental_onStart;\n const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;\n const headersWithUserAgent = withUserAgentSuffix5(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const callId = generateCallId();\n const telemetryDispatcher = createTelemetryDispatcher({\n telemetry\n });\n const runInTracingChannelSpan = (_a25 = telemetryDispatcher.runInTracingChannelSpan) != null ? _a25 : (async ({ execute }) => await execute());\n const startEvent = {\n callId,\n operationId: \"ai.embed\",\n provider: model.provider,\n modelId: model.modelId,\n value,\n maxRetries,\n headers: headersWithUserAgent,\n providerOptions\n };\n return await runInTracingChannelSpan({\n type: \"embed\",\n event: startEvent,\n execute: async () => {\n var _a26;\n await notify({\n event: startEvent,\n callbacks: [resolvedOnStart, telemetryDispatcher.onStart]\n });\n try {\n const { embedding, usage, warnings, response, providerMetadata } = await retry(async () => {\n var _a27, _b25;\n const embedCallId = generateCallId();\n await notify({\n event: {\n callId,\n embedCallId,\n operationId: \"ai.embed.doEmbed\",\n provider: model.provider,\n modelId: model.modelId,\n values: [value]\n },\n callbacks: [telemetryDispatcher.onEmbedStart]\n });\n const modelResponse = await model.doEmbed({\n values: [value],\n abortSignal,\n headers: headersWithUserAgent,\n providerOptions\n });\n const embedding2 = modelResponse.embeddings[0];\n const usage2 = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };\n await notify({\n event: {\n callId,\n embedCallId,\n operationId: \"ai.embed.doEmbed\",\n provider: model.provider,\n modelId: model.modelId,\n values: [value],\n embeddings: modelResponse.embeddings,\n usage: usage2\n },\n callbacks: [telemetryDispatcher.onEmbedEnd]\n });\n return {\n embedding: embedding2,\n usage: usage2,\n warnings: (_b25 = modelResponse.warnings) != null ? _b25 : [],\n providerMetadata: modelResponse.providerMetadata,\n response: modelResponse.response\n };\n });\n logWarnings({\n warnings,\n provider: model.provider,\n model: model.modelId\n });\n await notify({\n event: {\n callId,\n operationId: \"ai.embed\",\n provider: model.provider,\n modelId: model.modelId,\n value,\n embedding,\n usage,\n warnings,\n providerMetadata,\n response\n },\n callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]\n });\n return new DefaultEmbedResult({\n value,\n embedding,\n usage,\n warnings,\n providerMetadata,\n response\n });\n } catch (error) {\n await ((_a26 = telemetryDispatcher.onError) == null ? void 0 : _a26.call(telemetryDispatcher, { callId, error }));\n throw error;\n }\n }\n });\n}\nvar DefaultEmbedResult = class {\n constructor(options) {\n this.value = options.value;\n this.embedding = options.embedding;\n this.usage = options.usage;\n this.warnings = options.warnings;\n this.providerMetadata = options.providerMetadata;\n this.response = options.response;\n }\n};\n\n// src/embed/embed-many.ts\nimport {\n createIdGenerator as createIdGenerator5,\n withUserAgentSuffix as withUserAgentSuffix6\n} from \"@ai-sdk/provider-utils\";\n\n// src/model/get-embedding-model-max-input-bytes-per-call.ts\nimport { EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL } from \"@ai-sdk/provider-utils\";\nfunction getEmbeddingModelMaxInputBytesPerCall(model) {\n return model[EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL];\n}\n\n// src/util/split-array.ts\nfunction splitArray(array3, chunkSize) {\n if (chunkSize <= 0) {\n throw new Error(\"chunkSize must be greater than 0\");\n }\n const result = [];\n for (let i = 0; i < array3.length; i += chunkSize) {\n result.push(array3.slice(i, i + chunkSize));\n }\n return result;\n}\n\n// src/embed/embed-many.ts\nvar originalGenerateCallId5 = createIdGenerator5({\n prefix: \"call\",\n size: 24\n});\nasync function embedMany({\n model: modelArg,\n values,\n maxParallelCalls = Infinity,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n providerOptions,\n experimental_telemetry,\n telemetry = experimental_telemetry,\n onStart,\n experimental_onStart,\n onEnd,\n experimental_onEnd,\n _internal: { generateCallId = originalGenerateCallId5 } = {}\n}) {\n var _a25;\n const model = resolveEmbeddingModel(modelArg);\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const resolvedOnStart = onStart != null ? onStart : experimental_onStart;\n const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;\n const headersWithUserAgent = withUserAgentSuffix6(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const callId = generateCallId();\n const telemetryDispatcher = createTelemetryDispatcher({\n telemetry\n });\n const runInTracingChannelSpan = (_a25 = telemetryDispatcher.runInTracingChannelSpan) != null ? _a25 : (async ({ execute }) => await execute());\n const startEvent = {\n callId,\n operationId: \"ai.embedMany\",\n provider: model.provider,\n modelId: model.modelId,\n value: values,\n maxRetries,\n headers: headersWithUserAgent,\n providerOptions\n };\n return await runInTracingChannelSpan({\n type: \"embedMany\",\n event: startEvent,\n execute: async () => {\n var _a26, _b25;\n await notify({\n event: startEvent,\n callbacks: [resolvedOnStart, telemetryDispatcher.onStart]\n });\n try {\n const [\n maxEmbeddingsPerCall,\n maxInputBytesPerCall,\n supportsParallelCalls\n ] = await Promise.all([\n model.maxEmbeddingsPerCall,\n getEmbeddingModelMaxInputBytesPerCall(model),\n model.supportsParallelCalls\n ]);\n const hasEmbeddingLimit = maxEmbeddingsPerCall != null && maxEmbeddingsPerCall !== Infinity;\n const hasInputByteLimit = maxInputBytesPerCall != null && maxInputBytesPerCall !== Infinity;\n if (!hasEmbeddingLimit && !hasInputByteLimit) {\n const { embeddings: embeddings2, usage, warnings: warnings2, response, providerMetadata: providerMetadata2 } = await retry(async () => {\n var _a27, _b26;\n const embedCallId = generateCallId();\n await notify({\n event: {\n callId,\n embedCallId,\n operationId: \"ai.embedMany.doEmbed\",\n provider: model.provider,\n modelId: model.modelId,\n values\n },\n callbacks: [telemetryDispatcher.onEmbedStart]\n });\n const modelResponse = await model.doEmbed({\n values,\n abortSignal,\n headers: headersWithUserAgent,\n providerOptions\n });\n const embeddings3 = modelResponse.embeddings;\n const usage2 = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };\n await notify({\n event: {\n callId,\n embedCallId,\n operationId: \"ai.embedMany.doEmbed\",\n provider: model.provider,\n modelId: model.modelId,\n values,\n embeddings: embeddings3,\n usage: usage2\n },\n callbacks: [telemetryDispatcher.onEmbedEnd]\n });\n return {\n embeddings: embeddings3,\n usage: usage2,\n warnings: (_b26 = modelResponse.warnings) != null ? _b26 : [],\n providerMetadata: modelResponse.providerMetadata,\n response: modelResponse.response\n };\n });\n logWarnings({\n warnings: warnings2,\n provider: model.provider,\n model: model.modelId\n });\n await notify({\n event: {\n callId,\n operationId: \"ai.embedMany\",\n provider: model.provider,\n modelId: model.modelId,\n value: values,\n embedding: embeddings2,\n usage,\n warnings: warnings2,\n providerMetadata: providerMetadata2,\n response: [response]\n },\n callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]\n });\n return new DefaultEmbedManyResult({\n values,\n embeddings: embeddings2,\n usage,\n warnings: warnings2,\n providerMetadata: providerMetadata2,\n responses: [response]\n });\n }\n const valueChunks = splitByEmbeddingLimits({\n values,\n maxEmbeddingsPerCall: hasEmbeddingLimit ? maxEmbeddingsPerCall : Infinity,\n maxInputBytesPerCall: hasInputByteLimit ? maxInputBytesPerCall : Infinity\n });\n const embeddings = [];\n const warnings = [];\n const responses = [];\n let tokens = 0;\n let providerMetadata;\n const parallelChunks = splitArray(\n valueChunks,\n supportsParallelCalls ? maxParallelCalls : 1\n );\n for (const parallelChunk of parallelChunks) {\n const results = await Promise.all(\n parallelChunk.map((chunk) => {\n return retry(async () => {\n var _a27, _b26;\n const embedCallId = generateCallId();\n await notify({\n event: {\n callId,\n embedCallId,\n operationId: \"ai.embedMany.doEmbed\",\n provider: model.provider,\n modelId: model.modelId,\n values: chunk\n },\n callbacks: [telemetryDispatcher.onEmbedStart]\n });\n const modelResponse = await model.doEmbed({\n values: chunk,\n abortSignal,\n headers: headersWithUserAgent,\n providerOptions\n });\n const chunkEmbeddings = modelResponse.embeddings;\n const usage = (_a27 = modelResponse.usage) != null ? _a27 : { tokens: NaN };\n await notify({\n event: {\n callId,\n embedCallId,\n operationId: \"ai.embedMany.doEmbed\",\n provider: model.provider,\n modelId: model.modelId,\n values: chunk,\n embeddings: chunkEmbeddings,\n usage\n },\n callbacks: [telemetryDispatcher.onEmbedEnd]\n });\n return {\n embeddings: chunkEmbeddings,\n usage,\n warnings: (_b26 = modelResponse.warnings) != null ? _b26 : [],\n providerMetadata: modelResponse.providerMetadata,\n response: modelResponse.response\n };\n });\n })\n );\n for (const result of results) {\n embeddings.push(...result.embeddings);\n warnings.push(...result.warnings);\n responses.push(result.response);\n tokens += result.usage.tokens;\n if (result.providerMetadata) {\n if (!providerMetadata) {\n providerMetadata = { ...result.providerMetadata };\n } else {\n for (const [providerName, metadata] of Object.entries(\n result.providerMetadata\n )) {\n providerMetadata[providerName] = {\n ...(_a26 = providerMetadata[providerName]) != null ? _a26 : {},\n ...metadata\n };\n }\n }\n }\n }\n }\n logWarnings({\n warnings,\n provider: model.provider,\n model: model.modelId\n });\n await notify({\n event: {\n callId,\n operationId: \"ai.embedMany\",\n provider: model.provider,\n modelId: model.modelId,\n value: values,\n embedding: embeddings,\n usage: { tokens },\n warnings,\n providerMetadata,\n response: responses\n },\n callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]\n });\n return new DefaultEmbedManyResult({\n values,\n embeddings,\n usage: { tokens },\n warnings,\n providerMetadata,\n responses\n });\n } catch (error) {\n await ((_b25 = telemetryDispatcher.onError) == null ? void 0 : _b25.call(telemetryDispatcher, { callId, error }));\n throw error;\n }\n }\n });\n}\nvar textEncoder = new TextEncoder();\nfunction splitByEmbeddingLimits({\n values,\n maxEmbeddingsPerCall,\n maxInputBytesPerCall\n}) {\n if (maxEmbeddingsPerCall <= 0) {\n throw new Error(\"maxEmbeddingsPerCall must be greater than 0\");\n }\n if (maxInputBytesPerCall <= 0) {\n throw new Error(\"maxInputBytesPerCall must be greater than 0\");\n }\n if (values.length === 0) {\n return [];\n }\n const chunks = [];\n let currentChunk = [];\n let currentInputBytes = 0;\n for (const value of values) {\n const inputBytes = textEncoder.encode(value).length;\n if (currentChunk.length > 0 && (currentChunk.length >= maxEmbeddingsPerCall || currentInputBytes + inputBytes > maxInputBytesPerCall)) {\n chunks.push(currentChunk);\n currentChunk = [];\n currentInputBytes = 0;\n }\n currentChunk.push(value);\n currentInputBytes += inputBytes;\n }\n chunks.push(currentChunk);\n return chunks;\n}\nvar DefaultEmbedManyResult = class {\n constructor(options) {\n this.values = options.values;\n this.embeddings = options.embeddings;\n this.usage = options.usage;\n this.warnings = options.warnings;\n this.providerMetadata = options.providerMetadata;\n this.responses = options.responses;\n }\n};\n\n// src/generate-image/generate-image.ts\nimport {\n isJSONObject\n} from \"@ai-sdk/provider\";\nimport {\n convertBase64ToUint8Array as convertBase64ToUint8Array4,\n detectMediaType as detectMediaType2,\n withUserAgentSuffix as withUserAgentSuffix7\n} from \"@ai-sdk/provider-utils\";\n\n// src/prompt/data-content.ts\nimport {\n convertBase64ToUint8Array as convertBase64ToUint8Array3,\n convertUint8ArrayToBase64 as convertUint8ArrayToBase643\n} from \"@ai-sdk/provider-utils\";\nfunction convertDataContentToBase64String(content) {\n if (typeof content === \"string\") {\n return content;\n }\n if (content instanceof ArrayBuffer) {\n return convertUint8ArrayToBase643(new Uint8Array(content));\n }\n return convertUint8ArrayToBase643(content);\n}\nfunction convertDataContentToUint8Array(content) {\n if (content instanceof Uint8Array) {\n return content;\n }\n if (typeof content === \"string\") {\n try {\n return convertBase64ToUint8Array3(content);\n } catch (error) {\n throw new InvalidDataContentError({\n message: \"Invalid data content. Content string is not a base64-encoded media.\",\n content,\n cause: error\n });\n }\n }\n if (content instanceof ArrayBuffer) {\n return new Uint8Array(content);\n }\n throw new InvalidDataContentError({ content });\n}\n\n// src/generate-image/generate-image.ts\nvar gatewayCostMetadataKeys = [\n \"cost\",\n \"gatewayCost\",\n \"inferenceCost\",\n \"inputInferenceCost\",\n \"marketCost\",\n \"outputInferenceCost\",\n \"surchargeCost\"\n];\nasync function generateImage({\n model: modelArg,\n prompt: promptArg,\n n = 1,\n maxImagesPerCall,\n size,\n aspectRatio,\n seed,\n providerOptions,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers\n}) {\n var _a25, _b25;\n const model = resolveImageModel(modelArg);\n const headersWithUserAgent = withUserAgentSuffix7(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const { retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const maxImagesPerCallWithDefault = (_a25 = maxImagesPerCall != null ? maxImagesPerCall : await invokeModelMaxImagesPerCall(model)) != null ? _a25 : 1;\n const callCount = Math.ceil(n / maxImagesPerCallWithDefault);\n const callImageCounts = Array.from({ length: callCount }, (_, i) => {\n if (i < callCount - 1) {\n return maxImagesPerCallWithDefault;\n }\n const remainder = n % maxImagesPerCallWithDefault;\n return remainder === 0 ? maxImagesPerCallWithDefault : remainder;\n });\n const results = await Promise.all(\n callImageCounts.map(\n async (callImageCount) => await retry(() => {\n const { prompt, files, mask } = normalizePrompt(promptArg);\n return model.doGenerate({\n prompt,\n files,\n mask,\n n: callImageCount,\n abortSignal,\n headers: headersWithUserAgent,\n size,\n aspectRatio,\n seed,\n providerOptions: providerOptions != null ? providerOptions : {}\n });\n })\n )\n );\n const images = [];\n const calls = [];\n const warnings = [];\n const responses = [];\n const providerMetadata = {};\n let totalUsage = {\n inputTokens: void 0,\n outputTokens: void 0,\n totalTokens: void 0\n };\n for (const result of results) {\n const callImages = result.images.map(\n (image, index) => {\n var _a26;\n return new DefaultGeneratedFile({\n data: image,\n mediaType: (_a26 = detectMediaType2({\n data: image,\n topLevelType: \"image\"\n })) != null ? _a26 : \"image/png\",\n providerMetadata: getImageProviderMetadata(\n result.providerMetadata,\n index\n )\n });\n }\n );\n images.push(...callImages);\n calls.push({\n images: callImages,\n providerMetadata: result.providerMetadata,\n response: result.response,\n warnings: result.warnings,\n usage: result.usage\n });\n warnings.push(...result.warnings);\n if (result.usage != null) {\n totalUsage = addImageModelUsage(totalUsage, result.usage);\n }\n if (result.providerMetadata) {\n for (const [providerName, metadata] of Object.entries(\n result.providerMetadata\n )) {\n if (providerName === \"gateway\") {\n const currentEntry = providerMetadata[providerName];\n if (currentEntry != null && typeof currentEntry === \"object\") {\n const currentGatewayMetadata = currentEntry;\n const newGatewayMetadata = metadata;\n providerMetadata[providerName] = {\n ...currentEntry,\n ...metadata,\n ...Object.fromEntries(\n gatewayCostMetadataKeys.flatMap((key) => {\n const total = addDecimalStrings(\n currentGatewayMetadata[key],\n newGatewayMetadata[key]\n );\n return total == null ? [] : [[key, total]];\n })\n )\n };\n } else {\n providerMetadata[providerName] = {\n ...metadata\n };\n }\n const imagesValue = providerMetadata[providerName].images;\n if (Array.isArray(imagesValue) && imagesValue.length === 0) {\n delete providerMetadata[providerName].images;\n }\n } else {\n (_b25 = providerMetadata[providerName]) != null ? _b25 : providerMetadata[providerName] = { images: [] };\n providerMetadata[providerName].images.push(...metadata.images);\n }\n }\n }\n responses.push(result.response);\n }\n logWarnings({ warnings, provider: model.provider, model: model.modelId });\n if (!images.length) {\n throw new NoImageGeneratedError({ responses });\n }\n return new DefaultGenerateImageResult({\n images,\n calls,\n warnings,\n responses,\n providerMetadata,\n usage: totalUsage\n });\n}\nvar DefaultGenerateImageResult = class {\n constructor(options) {\n this.images = options.images;\n this.calls = options.calls;\n this.warnings = options.warnings;\n this.responses = options.responses;\n this.providerMetadata = options.providerMetadata;\n this.usage = options.usage;\n }\n get image() {\n return this.images[0];\n }\n};\nfunction getImageProviderMetadata(providerMetadata, imageIndex) {\n var _a25;\n if (providerMetadata == null) {\n return void 0;\n }\n let imageMetadata;\n for (const [providerName, metadata] of Object.entries(providerMetadata)) {\n const value = (_a25 = metadata.images) == null ? void 0 : _a25[imageIndex];\n if (isJSONObject(value) && !Array.isArray(value)) {\n (imageMetadata != null ? imageMetadata : imageMetadata = {})[providerName] = value;\n }\n }\n return imageMetadata;\n}\nasync function invokeModelMaxImagesPerCall(model) {\n const isFunction = model.maxImagesPerCall instanceof Function;\n if (!isFunction) {\n return model.maxImagesPerCall;\n }\n return model.maxImagesPerCall({\n modelId: model.modelId\n });\n}\nfunction addDecimalStrings(value1, value2) {\n if (typeof value1 !== \"string\" || typeof value2 !== \"string\" || !/^\\d+(?:\\.\\d+)?$/.test(value1) || !/^\\d+(?:\\.\\d+)?$/.test(value2)) {\n return void 0;\n }\n const [integer1, fraction1 = \"\"] = value1.split(\".\");\n const [integer2, fraction2 = \"\"] = value2.split(\".\");\n const precision = Math.max(fraction1.length, fraction2.length);\n const sum = BigInt(integer1 + fraction1.padEnd(precision, \"0\")) + BigInt(integer2 + fraction2.padEnd(precision, \"0\"));\n const sumString = sum.toString().padStart(precision + 1, \"0\");\n return precision === 0 ? sumString : `${sumString.slice(0, -precision)}.${sumString.slice(\n -precision\n )}`.replace(/\\.?0+$/, \"\");\n}\nfunction normalizePrompt(prompt) {\n if (typeof prompt === \"string\") {\n return { prompt, files: void 0, mask: void 0 };\n }\n return {\n prompt: prompt.text,\n files: prompt.images.map(toImageModelV4File),\n mask: prompt.mask ? toImageModelV4File(prompt.mask) : void 0\n };\n}\nfunction toImageModelV4File(dataContent) {\n if (typeof dataContent === \"string\" && dataContent.startsWith(\"http\")) {\n return {\n type: \"url\",\n url: dataContent\n };\n }\n if (typeof dataContent === \"string\" && dataContent.startsWith(\"data:\")) {\n const { mediaType: dataUrlMediaType, base64Content } = splitDataUrl(dataContent);\n if (base64Content != null) {\n const uint8Data2 = convertBase64ToUint8Array4(base64Content);\n return {\n type: \"file\",\n data: uint8Data2,\n mediaType: dataUrlMediaType || detectMediaType2({\n data: uint8Data2,\n topLevelType: \"image\"\n }) || \"image/png\"\n };\n }\n }\n const uint8Data = convertDataContentToUint8Array(dataContent);\n return {\n type: \"file\",\n data: uint8Data,\n mediaType: detectMediaType2({\n data: uint8Data,\n topLevelType: \"image\"\n }) || \"image/png\"\n };\n}\n\n// src/generate-object/generate-object.ts\nimport {\n createIdGenerator as createIdGenerator6,\n withUserAgentSuffix as withUserAgentSuffix8\n} from \"@ai-sdk/provider-utils\";\n\n// src/generate-text/extract-reasoning-content.ts\nfunction extractReasoningContent(content) {\n const parts = content.filter(\n (content2) => content2.type === \"reasoning\"\n );\n return parts.length === 0 ? void 0 : parts.map((content2) => content2.text).join(\"\\n\");\n}\n\n// src/generate-text/extract-text-content.ts\nfunction extractTextContent(content) {\n const parts = content.filter(\n (content2) => content2.type === \"text\"\n );\n if (parts.length === 0) {\n return void 0;\n }\n return parts.map((content2) => content2.text).join(\"\");\n}\n\n// src/generate-object/output-strategy.ts\nimport {\n isJSONArray,\n isJSONObject as isJSONObject2,\n TypeValidationError as TypeValidationError4,\n UnsupportedFunctionalityError as UnsupportedFunctionalityError4\n} from \"@ai-sdk/provider\";\nimport {\n asSchema as asSchema5,\n safeValidateTypes as safeValidateTypes6\n} from \"@ai-sdk/provider-utils\";\nvar noSchemaOutputStrategy = {\n type: \"no-schema\",\n jsonSchema: async () => void 0,\n async validatePartialResult({ value, textDelta }) {\n return { success: true, value: { partial: value, textDelta } };\n },\n async validateFinalResult(value, context) {\n return value === void 0 ? {\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 } : { success: true, value };\n },\n createElementStream() {\n throw new UnsupportedFunctionalityError4({\n functionality: \"element streams in no-schema mode\"\n });\n }\n};\nvar objectOutputStrategy = (schema) => ({\n type: \"object\",\n jsonSchema: async () => await schema.jsonSchema,\n async validatePartialResult({ value, textDelta }) {\n return {\n success: true,\n value: {\n // Note: currently no validation of partial results:\n partial: value,\n textDelta\n }\n };\n },\n async validateFinalResult(value) {\n return safeValidateTypes6({ value, schema });\n },\n createElementStream() {\n throw new UnsupportedFunctionalityError4({\n functionality: \"element streams in object mode\"\n });\n }\n});\nvar arrayOutputStrategy = (schema) => {\n return {\n type: \"array\",\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: async () => {\n const {\n $schema: _$schema,\n definitions,\n $defs,\n ...itemSchema\n } = await schema.jsonSchema;\n return {\n $schema: \"http://json-schema.org/draft-07/schema#\",\n ...definitions != null && { definitions },\n ...$defs != null && { $defs },\n type: \"object\",\n properties: {\n elements: { type: \"array\", items: itemSchema }\n },\n required: [\"elements\"],\n additionalProperties: false\n };\n },\n async validatePartialResult({\n value,\n latestObject,\n isFirstDelta,\n isFinalDelta\n }) {\n var _a25;\n if (!isJSONObject2(value) || !isJSONArray(value.elements)) {\n return {\n success: false,\n error: new TypeValidationError4({\n value,\n cause: \"value must be an object that contains an array of elements\"\n })\n };\n }\n const inputArray = value.elements;\n const resultArray = [];\n for (let i = 0; i < inputArray.length; i++) {\n const element = inputArray[i];\n const result = await safeValidateTypes6({ value: element, schema });\n if (i === inputArray.length - 1 && !isFinalDelta) {\n continue;\n }\n if (!result.success) {\n return result;\n }\n resultArray.push(result.value);\n }\n const publishedElementCount = (_a25 = latestObject == null ? void 0 : latestObject.length) != null ? _a25 : 0;\n let textDelta = \"\";\n if (isFirstDelta) {\n textDelta += \"[\";\n }\n if (publishedElementCount > 0) {\n textDelta += \",\";\n }\n textDelta += resultArray.slice(publishedElementCount).map((element) => JSON.stringify(element)).join(\",\");\n if (isFinalDelta) {\n textDelta += \"]\";\n }\n return {\n success: true,\n value: {\n partial: resultArray,\n textDelta\n }\n };\n },\n async validateFinalResult(value) {\n if (!isJSONObject2(value) || !isJSONArray(value.elements)) {\n return {\n success: false,\n error: new TypeValidationError4({\n value,\n cause: \"value must be an object that contains an array of elements\"\n })\n };\n }\n const inputArray = value.elements;\n const resultArray = [];\n for (const element of inputArray) {\n const result = await safeValidateTypes6({ value: element, schema });\n if (!result.success) {\n return result;\n }\n resultArray.push(result.value);\n }\n return { success: true, value: resultArray };\n },\n createElementStream(originalStream) {\n let publishedElements = 0;\n return createAsyncIterableStream(\n originalStream.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n switch (chunk.type) {\n case \"object\": {\n const array3 = chunk.object;\n for (; publishedElements < array3.length; publishedElements++) {\n controller.enqueue(array3[publishedElements]);\n }\n break;\n }\n case \"text-delta\":\n case \"finish\":\n case \"error\":\n break;\n default: {\n const _exhaustiveCheck = chunk;\n throw new Error(\n `Unsupported chunk type: ${_exhaustiveCheck}`\n );\n }\n }\n }\n })\n )\n );\n }\n };\n};\nvar enumOutputStrategy = (enumValues) => {\n return {\n type: \"enum\",\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: async () => ({\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 async validateFinalResult(value) {\n if (!isJSONObject2(value) || typeof value.result !== \"string\") {\n return {\n success: false,\n error: new TypeValidationError4({\n value,\n cause: 'value must be an object that contains a string in the \"result\" property.'\n })\n };\n }\n const result = value.result;\n return enumValues.includes(result) ? { success: true, value: result } : {\n success: false,\n error: new TypeValidationError4({\n value,\n cause: \"value must be a string in the enum\"\n })\n };\n },\n async validatePartialResult({ value, textDelta }) {\n if (!isJSONObject2(value) || typeof value.result !== \"string\") {\n return {\n success: false,\n error: new TypeValidationError4({\n value,\n cause: 'value must be an object that contains a string in the \"result\" property.'\n })\n };\n }\n const result = value.result;\n const possibleEnumValues = enumValues.filter(\n (enumValue) => enumValue.startsWith(result)\n );\n if (value.result.length === 0 || possibleEnumValues.length === 0) {\n return {\n success: false,\n error: new TypeValidationError4({\n value,\n cause: \"value must be a string in the enum\"\n })\n };\n }\n return {\n success: true,\n value: {\n partial: possibleEnumValues.length > 1 ? result : possibleEnumValues[0],\n textDelta\n }\n };\n },\n createElementStream() {\n throw new UnsupportedFunctionalityError4({\n functionality: \"element streams in enum mode\"\n });\n }\n };\n};\nfunction getOutputStrategy({\n output,\n schema,\n enumValues\n}) {\n switch (output) {\n case \"object\":\n return objectOutputStrategy(asSchema5(schema));\n case \"array\":\n return arrayOutputStrategy(asSchema5(schema));\n case \"enum\":\n return enumOutputStrategy(enumValues);\n case \"no-schema\":\n return noSchemaOutputStrategy;\n default: {\n const _exhaustiveCheck = output;\n throw new Error(`Unsupported output: ${_exhaustiveCheck}`);\n }\n }\n}\n\n// src/generate-object/parse-and-validate-object-result.ts\nimport { JSONParseError as JSONParseError2, TypeValidationError as TypeValidationError5 } from \"@ai-sdk/provider\";\nimport { safeParseJSON as safeParseJSON4 } from \"@ai-sdk/provider-utils\";\nasync function parseAndValidateObjectResult(result, outputStrategy, context) {\n const parseResult = await safeParseJSON4({ text: result });\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: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n const validationResult = await outputStrategy.validateFinalResult(\n parseResult.value,\n {\n text: result,\n response: context.response,\n usage: context.usage\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: context.response,\n usage: context.usage,\n finishReason: context.finishReason\n });\n }\n return validationResult.value;\n}\nasync function parseAndValidateObjectResultWithRepair(result, outputStrategy, repairText, context) {\n try {\n return await parseAndValidateObjectResult(result, outputStrategy, context);\n } catch (error) {\n if (repairText != null && NoObjectGeneratedError.isInstance(error) && (JSONParseError2.isInstance(error.cause) || TypeValidationError5.isInstance(error.cause))) {\n const repairedText = await repairText({\n text: result,\n error: error.cause\n });\n if (repairedText === null) {\n throw error;\n }\n return await parseAndValidateObjectResult(\n repairedText,\n outputStrategy,\n context\n );\n }\n throw error;\n }\n}\n\n// src/generate-object/validate-object-generation-input.ts\nfunction validateObjectGenerationInput({\n output,\n schema,\n schemaName,\n schemaDescription,\n enumValues\n}) {\n if (output != null && output !== \"object\" && output !== \"array\" && output !== \"enum\" && output !== \"no-schema\") {\n throw new InvalidArgumentError({\n parameter: \"output\",\n value: output,\n message: \"Invalid output type.\"\n });\n }\n if (output === \"no-schema\") {\n if (schema != null) {\n throw new InvalidArgumentError({\n parameter: \"schema\",\n value: schema,\n message: \"Schema is not supported for no-schema output.\"\n });\n }\n 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 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 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 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 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 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 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 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 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 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 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 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// src/generate-object/generate-object.ts\nvar originalGenerateId4 = createIdGenerator6({ prefix: \"aiobj\", size: 24 });\nasync function generateObject(options) {\n var _a25, _b25, _c, _d, _e, _f, _g, _h, _i, _j;\n const {\n model: modelArg,\n output = \"object\",\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n experimental_repairText,\n repairText = experimental_repairText,\n experimental_telemetry,\n telemetry = experimental_telemetry,\n experimental_download: download2,\n providerOptions,\n onStart,\n experimental_onStart,\n onStepStart,\n experimental_onStepStart,\n onStepEnd,\n onStepFinish,\n onFinish,\n _internal: {\n generateId: generateId4 = originalGenerateId4,\n currentDate = () => /* @__PURE__ */ new Date()\n } = {},\n ...settings\n } = options;\n const model = resolveLanguageModel(modelArg);\n const enumValues = \"enum\" in options ? options.enum : void 0;\n const {\n schema: inputSchema,\n schemaDescription,\n schemaName\n } = \"schema\" in options ? options : {};\n validateObjectGenerationInput({\n output,\n schema: inputSchema,\n schemaName,\n schemaDescription,\n enumValues\n });\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const outputStrategy = getOutputStrategy({\n output,\n schema: inputSchema,\n enumValues\n });\n const callSettings = prepareLanguageModelCallOptions(settings);\n const headersWithUserAgent = withUserAgentSuffix8(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const telemetryDispatcher = createTelemetryDispatcher({\n telemetry\n });\n const resolvedOnStart = onStart != null ? onStart : experimental_onStart;\n const resolvedOnStepStart = onStepStart != null ? onStepStart : experimental_onStepStart;\n const resolvedOnStepEnd = onStepEnd != null ? onStepEnd : onStepFinish;\n const jsonSchema2 = await outputStrategy.jsonSchema();\n const callId = generateId4();\n await notify({\n event: {\n callId,\n operationId: \"ai.generateObject\",\n provider: model.provider,\n modelId: model.modelId,\n system: instructions != null ? instructions : system,\n prompt,\n messages,\n maxOutputTokens: callSettings.maxOutputTokens,\n temperature: callSettings.temperature,\n topP: callSettings.topP,\n topK: callSettings.topK,\n presencePenalty: callSettings.presencePenalty,\n frequencyPenalty: callSettings.frequencyPenalty,\n seed: callSettings.seed,\n maxRetries,\n headers: headersWithUserAgent,\n providerOptions,\n output: outputStrategy.type,\n schema: jsonSchema2,\n schemaName,\n schemaDescription\n },\n callbacks: [resolvedOnStart, telemetryDispatcher.onStart]\n });\n try {\n const standardizedPrompt = await standardizePrompt({\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages\n });\n const promptMessages = await convertToLanguageModelPrompt({\n prompt: standardizedPrompt,\n supportedUrls: await model.supportedUrls,\n download: download2,\n provider: model.provider.split(\".\")[0]\n });\n await notify({\n event: {\n callId,\n stepNumber: 0,\n provider: model.provider,\n modelId: model.modelId,\n providerOptions,\n headers: headersWithUserAgent,\n promptMessages\n },\n callbacks: [resolvedOnStepStart, telemetryDispatcher.onObjectStepStart]\n });\n const generateResult = await retry(\n () => model.doGenerate({\n responseFormat: {\n type: \"json\",\n schema: jsonSchema2,\n name: schemaName,\n description: schemaDescription\n },\n ...prepareLanguageModelCallOptions(settings),\n prompt: promptMessages,\n providerOptions,\n abortSignal,\n headers: headersWithUserAgent\n })\n );\n const responseData = {\n id: (_b25 = (_a25 = generateResult.response) == null ? void 0 : _a25.id) != null ? _b25 : generateId4(),\n timestamp: (_d = (_c = generateResult.response) == null ? void 0 : _c.timestamp) != null ? _d : currentDate(),\n modelId: (_f = (_e = generateResult.response) == null ? void 0 : _e.modelId) != null ? _f : model.modelId,\n headers: (_g = generateResult.response) == null ? void 0 : _g.headers,\n body: (_h = generateResult.response) == null ? void 0 : _h.body\n };\n const text2 = extractTextContent(generateResult.content);\n const reasoning = extractReasoningContent(generateResult.content);\n if (text2 === void 0) {\n throw new NoObjectGeneratedError({\n message: \"No object generated: the model did not return a response.\",\n response: responseData,\n usage: asLanguageModelUsage(generateResult.usage),\n finishReason: generateResult.finishReason.unified\n });\n }\n const finishReason = generateResult.finishReason.unified;\n const usage = asLanguageModelUsage(generateResult.usage);\n const warnings = generateResult.warnings;\n const resultProviderMetadata = generateResult.providerMetadata;\n const request = (_i = generateResult.request) != null ? _i : {};\n const response = responseData;\n logWarnings({\n warnings,\n provider: model.provider,\n model: model.modelId\n });\n const stepFinishEvent = {\n callId,\n stepNumber: 0,\n provider: model.provider,\n modelId: model.modelId,\n finishReason,\n usage,\n objectText: text2,\n msToFirstChunk: void 0,\n reasoning,\n warnings,\n request,\n response,\n providerMetadata: resultProviderMetadata\n };\n await notify({\n event: stepFinishEvent,\n callbacks: [resolvedOnStepEnd, telemetryDispatcher.onObjectStepEnd]\n });\n const object3 = await parseAndValidateObjectResultWithRepair(\n text2,\n outputStrategy,\n repairText,\n {\n response,\n usage,\n finishReason\n }\n );\n await notify({\n event: {\n callId,\n object: object3,\n error: void 0,\n reasoning,\n finishReason,\n usage,\n warnings,\n request,\n response,\n providerMetadata: resultProviderMetadata\n },\n callbacks: [onFinish, telemetryDispatcher.onEnd]\n });\n return new DefaultGenerateObjectResult({\n object: object3,\n reasoning,\n finishReason,\n usage,\n warnings,\n request,\n response,\n providerMetadata: resultProviderMetadata\n });\n } catch (error) {\n await ((_j = telemetryDispatcher.onError) == null ? void 0 : _j.call(telemetryDispatcher, { callId, error }));\n throw wrapGatewayError(error);\n }\n}\nvar DefaultGenerateObjectResult = class {\n constructor(options) {\n this.object = options.object;\n this.finishReason = options.finishReason;\n this.usage = options.usage;\n this.warnings = options.warnings;\n this.providerMetadata = options.providerMetadata;\n this.response = options.response;\n this.request = options.request;\n this.reasoning = options.reasoning;\n }\n toJsonResponse(init) {\n var _a25;\n return new Response(JSON.stringify(this.object), {\n status: (_a25 = init == null ? void 0 : init.status) != null ? _a25 : 200,\n headers: prepareHeaders(init == null ? void 0 : init.headers, {\n \"content-type\": \"application/json; charset=utf-8\"\n })\n });\n }\n};\n\n// src/generate-object/stream-object.ts\nimport {\n createIdGenerator as createIdGenerator7,\n DelayedPromise as DelayedPromise2\n} from \"@ai-sdk/provider-utils\";\n\n// src/util/cosine-similarity.ts\nfunction cosineSimilarity(vector1, vector2) {\n if (vector1.length !== vector2.length) {\n throw new InvalidArgumentError({\n parameter: \"vector1,vector2\",\n value: { vector1Length: vector1.length, vector2Length: vector2.length },\n message: `Vectors must have the same length`\n });\n }\n const n = vector1.length;\n if (n === 0) {\n return 0;\n }\n let magnitudeSquared1 = 0;\n let magnitudeSquared2 = 0;\n let dotProduct = 0;\n for (let i = 0; i < n; i++) {\n const value1 = vector1[i];\n const value2 = vector2[i];\n magnitudeSquared1 += value1 * value1;\n magnitudeSquared2 += value2 * value2;\n dotProduct += value1 * value2;\n }\n return magnitudeSquared1 === 0 || magnitudeSquared2 === 0 ? 0 : dotProduct / (Math.sqrt(magnitudeSquared1) * Math.sqrt(magnitudeSquared2));\n}\n\n// src/util/download/create-download.ts\nfunction createDownload(options) {\n return ({ url, abortSignal }) => download({ url, maxBytes: options == null ? void 0 : options.maxBytes, abortSignal });\n}\n\n// src/util/data-url.ts\nfunction getTextFromDataUrl(dataUrl) {\n const [header, base64Content] = dataUrl.split(\",\");\n const mediaType = header.split(\";\")[0].split(\":\")[1];\n if (mediaType == null || base64Content == null) {\n throw new Error(\"Invalid data URL format\");\n }\n try {\n return window.atob(base64Content);\n } catch (e) {\n throw new Error(`Error decoding data URL`);\n }\n}\n\n// src/util/is-deep-equal-data.ts\nfunction isDeepEqualData(obj1, obj2) {\n if (obj1 === obj2) return true;\n if (obj1 == null || obj2 == null) return false;\n if (typeof obj1 !== \"object\" && typeof obj2 !== \"object\")\n return obj1 === obj2;\n if (obj1.constructor !== obj2.constructor) return false;\n if (obj1 instanceof Date && obj2 instanceof Date) {\n return obj1.getTime() === obj2.getTime();\n }\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;\n }\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) return false;\n for (const key of keys1) {\n if (!keys2.includes(key)) return false;\n if (!isDeepEqualData(obj1[key], obj2[key])) return false;\n }\n return true;\n}\n\n// src/util/serial-job-executor.ts\nvar SerialJobExecutor = class {\n constructor() {\n this.queue = [];\n this.isProcessing = false;\n }\n async processQueue() {\n if (this.isProcessing) {\n return;\n }\n this.isProcessing = true;\n while (this.queue.length > 0) {\n await this.queue[0]();\n this.queue.shift();\n }\n this.isProcessing = false;\n }\n async run(job) {\n return new Promise((resolve3, reject) => {\n this.queue.push(async () => {\n try {\n await job();\n resolve3();\n } catch (error) {\n reject(error);\n }\n });\n void this.processQueue();\n });\n }\n};\n\n// src/util/simulate-readable-stream.ts\nimport { delay as delayFunction } from \"@ai-sdk/provider-utils\";\nfunction simulateReadableStream({\n chunks,\n initialDelayInMs = 0,\n chunkDelayInMs = 0,\n _internal\n}) {\n var _a25;\n const delay = (_a25 = _internal == null ? void 0 : _internal.delay) != null ? _a25 : delayFunction;\n let index = 0;\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\n// src/generate-object/stream-object.ts\nvar originalGenerateId5 = createIdGenerator7({ prefix: \"aiobj\", size: 24 });\nasync function markPromiseAsHandled2(promise) {\n try {\n await promise;\n } catch (e) {\n }\n}\nfunction streamObject(options) {\n const {\n model,\n output = \"object\",\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages,\n maxRetries,\n abortSignal,\n headers,\n experimental_repairText,\n repairText = experimental_repairText,\n experimental_telemetry,\n telemetry = experimental_telemetry,\n experimental_download: download2,\n providerOptions,\n onStart,\n experimental_onStart,\n onStepStart,\n experimental_onStepStart,\n onStepEnd,\n onStepFinish,\n onError = ({ error }) => {\n console.error(error);\n },\n onFinish,\n _internal: {\n generateId: generateId4 = originalGenerateId5,\n currentDate = () => /* @__PURE__ */ new Date(),\n now: now2 = now\n } = {},\n ...settings\n } = options;\n const enumValues = \"enum\" in options && options.enum ? options.enum : void 0;\n const {\n schema: inputSchema,\n schemaDescription,\n schemaName\n } = \"schema\" in options ? options : {};\n validateObjectGenerationInput({\n output,\n schema: inputSchema,\n schemaName,\n schemaDescription,\n enumValues\n });\n const outputStrategy = getOutputStrategy({\n output,\n schema: inputSchema,\n enumValues\n });\n return new DefaultStreamObjectResult({\n model,\n telemetry,\n headers,\n settings,\n maxRetries,\n abortSignal,\n outputStrategy,\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages,\n schemaName,\n schemaDescription,\n providerOptions,\n repairText,\n onStart: onStart != null ? onStart : experimental_onStart,\n onStepStart: onStepStart != null ? onStepStart : experimental_onStepStart,\n onStepFinish: onStepEnd != null ? onStepEnd : onStepFinish,\n onError,\n onFinish,\n download: download2,\n generateId: generateId4,\n currentDate,\n now: now2\n });\n}\nvar DefaultStreamObjectResult = class {\n constructor({\n model: modelArg,\n headers,\n telemetry,\n settings,\n maxRetries: maxRetriesArg,\n abortSignal,\n outputStrategy,\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages,\n schemaName,\n schemaDescription,\n providerOptions,\n repairText,\n onStart,\n onStepStart,\n onStepFinish,\n onError,\n onFinish,\n download: download2,\n generateId: generateId4,\n currentDate,\n now: now2\n }) {\n this._object = new DelayedPromise2();\n this._usage = new DelayedPromise2();\n this._providerMetadata = new DelayedPromise2();\n this._warnings = new DelayedPromise2();\n this._request = new DelayedPromise2();\n this._response = new DelayedPromise2();\n this._finishReason = new DelayedPromise2();\n const model = resolveLanguageModel(modelArg);\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const callSettings = prepareLanguageModelCallOptions(settings);\n const telemetryDispatcher = createTelemetryDispatcher({\n telemetry\n });\n const self = this;\n const stitchableStream = createStitchableStream();\n const eventProcessor = new TransformStream({\n transform(chunk, controller) {\n controller.enqueue(chunk);\n if (chunk.type === \"error\") {\n void notify({\n event: { error: wrapGatewayError(chunk.error) },\n callbacks: onError\n });\n }\n }\n });\n this.baseStream = stitchableStream.stream.pipeThrough(eventProcessor);\n const callId = generateId4();\n (async () => {\n const jsonSchema2 = await outputStrategy.jsonSchema();\n await notify({\n event: {\n callId,\n operationId: \"ai.streamObject\",\n provider: model.provider,\n modelId: model.modelId,\n system: instructions != null ? instructions : system,\n prompt,\n messages,\n maxOutputTokens: callSettings.maxOutputTokens,\n temperature: callSettings.temperature,\n topP: callSettings.topP,\n topK: callSettings.topK,\n presencePenalty: callSettings.presencePenalty,\n frequencyPenalty: callSettings.frequencyPenalty,\n seed: callSettings.seed,\n maxRetries,\n headers,\n providerOptions,\n output: outputStrategy.type,\n schema: jsonSchema2,\n schemaName,\n schemaDescription\n },\n callbacks: [onStart, telemetryDispatcher.onStart]\n });\n const standardizedPrompt = await standardizePrompt({\n instructions,\n system,\n prompt,\n messages,\n allowSystemInMessages\n });\n const callOptions = {\n responseFormat: {\n type: \"json\",\n schema: jsonSchema2,\n name: schemaName,\n description: schemaDescription\n },\n ...prepareLanguageModelCallOptions(settings),\n prompt: await convertToLanguageModelPrompt({\n prompt: standardizedPrompt,\n supportedUrls: await model.supportedUrls,\n download: download2,\n provider: model.provider.split(\".\")[0]\n }),\n providerOptions,\n abortSignal,\n headers,\n includeRawChunks: false\n };\n await notify({\n event: {\n callId,\n stepNumber: 0,\n provider: model.provider,\n modelId: model.modelId,\n providerOptions,\n headers,\n promptMessages: callOptions.prompt\n },\n callbacks: [onStepStart, telemetryDispatcher.onObjectStepStart]\n });\n const transformer = {\n transform: (chunk, controller) => {\n switch (chunk.type) {\n case \"text-delta\":\n controller.enqueue(chunk.delta);\n break;\n case \"response-metadata\":\n case \"finish\":\n case \"error\":\n case \"stream-start\":\n controller.enqueue(chunk);\n break;\n }\n }\n };\n const startTimestampMs = now2();\n const { stream, response, request } = await retry(\n () => model.doStream(callOptions)\n );\n self._request.resolve(request != null ? request : {});\n let warnings;\n let usage = createNullLanguageModelUsage();\n let finishReason;\n let providerMetadata;\n let object3;\n let error;\n let terminalError;\n let msToFirstChunk = void 0;\n let accumulatedText = \"\";\n let textDelta = \"\";\n let fullResponse = {\n id: generateId4(),\n timestamp: currentDate(),\n modelId: model.modelId\n };\n let latestObjectJson = void 0;\n let latestObject = void 0;\n let isFirstChunk = true;\n let isFirstDelta = true;\n const transformedStream = stream.pipeThrough(new TransformStream(transformer)).pipeThrough(\n new TransformStream({\n async transform(chunk, controller) {\n var _a25, _b25, _c;\n if (typeof chunk === \"object\" && chunk.type === \"stream-start\") {\n warnings = chunk.warnings;\n return;\n }\n if (isFirstChunk) {\n msToFirstChunk = now2() - startTimestampMs;\n isFirstChunk = false;\n }\n if (typeof chunk === \"string\") {\n accumulatedText += chunk;\n textDelta += chunk;\n const { value: currentObjectJson, state: parseState } = await parsePartialJson(accumulatedText);\n if (currentObjectJson !== void 0 && !isDeepEqualData(latestObjectJson, currentObjectJson)) {\n const validationResult = await outputStrategy.validatePartialResult({\n value: currentObjectJson,\n textDelta,\n latestObject,\n isFirstDelta,\n isFinalDelta: parseState === \"successful-parse\"\n });\n if (validationResult.success && !isDeepEqualData(\n latestObject,\n validationResult.value.partial\n )) {\n latestObjectJson = currentObjectJson;\n latestObject = validationResult.value.partial;\n controller.enqueue({\n type: \"object\",\n object: latestObject\n });\n controller.enqueue({\n type: \"text-delta\",\n textDelta: validationResult.value.textDelta\n });\n textDelta = \"\";\n isFirstDelta = false;\n }\n }\n return;\n }\n switch (chunk.type) {\n case \"response-metadata\": {\n fullResponse = {\n id: (_a25 = chunk.id) != null ? _a25 : fullResponse.id,\n timestamp: (_b25 = chunk.timestamp) != null ? _b25 : fullResponse.timestamp,\n modelId: (_c = chunk.modelId) != null ? _c : fullResponse.modelId\n };\n break;\n }\n case \"error\": {\n if (terminalError === void 0) {\n const wrappedError = wrapGatewayError(chunk.error);\n terminalError = { error: wrappedError };\n error = wrappedError;\n finishReason = \"error\";\n self.rejectResultPromises(wrappedError);\n }\n controller.enqueue(chunk);\n break;\n }\n case \"finish\": {\n if (textDelta !== \"\") {\n controller.enqueue({ type: \"text-delta\", textDelta });\n }\n finishReason = terminalError === void 0 ? chunk.finishReason.unified : \"error\";\n usage = asLanguageModelUsage(chunk.usage);\n providerMetadata = chunk.providerMetadata;\n controller.enqueue({\n ...chunk,\n finishReason,\n usage,\n response: fullResponse\n });\n logWarnings({\n warnings: warnings != null ? warnings : [],\n provider: model.provider,\n model: model.modelId\n });\n if (terminalError !== void 0) {\n break;\n }\n self._usage.resolve(usage);\n self._providerMetadata.resolve(providerMetadata);\n self._warnings.resolve(warnings);\n self._response.resolve({\n ...fullResponse,\n headers: response == null ? void 0 : response.headers\n });\n self._finishReason.resolve(finishReason != null ? finishReason : \"other\");\n try {\n object3 = await parseAndValidateObjectResultWithRepair(\n accumulatedText,\n outputStrategy,\n repairText,\n {\n response: fullResponse,\n usage,\n finishReason\n }\n );\n self._object.resolve(object3);\n } catch (e) {\n error = e;\n self._object.reject(e);\n }\n break;\n }\n default: {\n controller.enqueue(chunk);\n break;\n }\n }\n },\n async flush(controller) {\n try {\n const finalUsage = usage != null ? usage : {\n promptTokens: NaN,\n completionTokens: NaN,\n totalTokens: NaN\n };\n await notify({\n event: {\n callId,\n stepNumber: 0,\n provider: model.provider,\n modelId: model.modelId,\n finishReason: finishReason != null ? finishReason : \"other\",\n usage: finalUsage,\n objectText: accumulatedText,\n msToFirstChunk,\n reasoning: void 0,\n warnings,\n request: request != null ? request : {},\n response: {\n ...fullResponse,\n headers: response == null ? void 0 : response.headers\n },\n providerMetadata\n },\n callbacks: [\n onStepFinish,\n telemetryDispatcher.onObjectStepEnd\n ]\n });\n await notify({\n event: {\n callId,\n object: object3,\n error,\n reasoning: void 0,\n finishReason: finishReason != null ? finishReason : \"other\",\n usage: finalUsage,\n warnings,\n request: request != null ? request : {},\n response: {\n ...fullResponse,\n headers: response == null ? void 0 : response.headers\n },\n providerMetadata\n },\n callbacks: [onFinish, telemetryDispatcher.onEnd]\n });\n } catch (error2) {\n controller.enqueue({ type: \"error\", error: error2 });\n }\n }\n })\n );\n stitchableStream.addStream(transformedStream, {\n onError(error2) {\n const wrappedError = wrapGatewayError(error2);\n self.rejectResultPromises(wrappedError);\n void notify({\n event: { error: wrappedError },\n callbacks: onError\n });\n }\n });\n })().catch(async (error) => {\n var _a25;\n self.rejectResultPromises(error);\n await ((_a25 = telemetryDispatcher.onError) == null ? void 0 : _a25.call(telemetryDispatcher, { callId, error }));\n stitchableStream.addStream(\n new ReadableStream({\n start(controller) {\n controller.enqueue({ type: \"error\", error });\n controller.close();\n }\n })\n );\n }).finally(() => {\n stitchableStream.close();\n });\n this.outputStrategy = outputStrategy;\n }\n rejectResultPromises(error) {\n this.rejectResultPromise({ delayedPromise: this._object, error });\n this.rejectResultPromise({ delayedPromise: this._usage, error });\n this.rejectResultPromise({ delayedPromise: this._providerMetadata, error });\n this.rejectResultPromise({ delayedPromise: this._warnings, error });\n this.rejectResultPromise({ delayedPromise: this._request, error });\n this.rejectResultPromise({ delayedPromise: this._response, error });\n this.rejectResultPromise({ delayedPromise: this._finishReason, error });\n }\n rejectResultPromise({\n delayedPromise,\n error\n }) {\n if (delayedPromise.isPending()) {\n delayedPromise.reject(error);\n markPromiseAsHandled2(delayedPromise.promise);\n }\n }\n get object() {\n return this._object.promise;\n }\n get usage() {\n return this._usage.promise;\n }\n get providerMetadata() {\n return this._providerMetadata.promise;\n }\n get warnings() {\n return this._warnings.promise;\n }\n get request() {\n return this._request.promise;\n }\n get response() {\n return this._response.promise;\n }\n get finishReason() {\n return this._finishReason.promise;\n }\n get partialObjectStream() {\n return createAsyncIterableStream(\n this.baseStream.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n switch (chunk.type) {\n case \"object\":\n controller.enqueue(chunk.object);\n break;\n case \"text-delta\":\n case \"finish\":\n case \"error\":\n break;\n default: {\n const _exhaustiveCheck = chunk;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n }\n })\n )\n );\n }\n get elementStream() {\n return this.outputStrategy.createElementStream(this.baseStream);\n }\n get textStream() {\n return createAsyncIterableStream(\n this.baseStream.pipeThrough(\n new TransformStream({\n transform(chunk, controller) {\n switch (chunk.type) {\n case \"text-delta\":\n controller.enqueue(chunk.textDelta);\n break;\n case \"object\":\n case \"finish\":\n case \"error\":\n break;\n default: {\n const _exhaustiveCheck = chunk;\n throw new Error(`Unsupported chunk type: ${_exhaustiveCheck}`);\n }\n }\n }\n })\n )\n );\n }\n get fullStream() {\n return createAsyncIterableStream(this.baseStream);\n }\n pipeTextStreamToResponse(response, init) {\n return pipeTextStreamToResponse({\n response,\n stream: this.textStream,\n ...init\n });\n }\n toTextStreamResponse(init) {\n return createTextStreamResponse({\n stream: this.textStream,\n ...init\n });\n }\n};\n\n// src/generate-speech/generate-speech.ts\nimport {\n detectMediaType as detectMediaType3,\n withUserAgentSuffix as withUserAgentSuffix9\n} from \"@ai-sdk/provider-utils\";\n\n// src/generate-speech/generated-audio-file.ts\nvar DefaultGeneratedAudioFile = class extends DefaultGeneratedFile {\n constructor({\n data,\n mediaType\n }) {\n super({ data, mediaType });\n let format = \"mp3\";\n if (mediaType) {\n const mediaTypeParts = mediaType.split(\"/\");\n if (mediaTypeParts.length === 2) {\n if (mediaType !== \"audio/mpeg\") {\n format = mediaTypeParts[1];\n }\n }\n }\n if (!format) {\n throw new Error(\n \"Audio format must be provided or determinable from media type\"\n );\n }\n this.format = format;\n }\n};\n\n// src/generate-speech/generate-speech.ts\nasync function generateSpeech({\n model,\n text: text2,\n voice,\n outputFormat,\n instructions,\n speed,\n language,\n providerOptions = {},\n maxRetries: maxRetriesArg,\n abortSignal,\n headers\n}) {\n var _a25;\n const resolvedModel = resolveSpeechModel(model);\n if (!resolvedModel) {\n throw new Error(\"Model could not be resolved\");\n }\n const headersWithUserAgent = withUserAgentSuffix9(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const { retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const result = await retry(\n () => resolvedModel.doGenerate({\n text: text2,\n voice,\n outputFormat,\n instructions,\n speed,\n language,\n abortSignal,\n headers: headersWithUserAgent,\n providerOptions\n })\n );\n if (!result.audio || result.audio.length === 0) {\n throw new NoSpeechGeneratedError({ responses: [result.response] });\n }\n logWarnings({\n warnings: result.warnings,\n provider: resolvedModel.provider,\n model: resolvedModel.modelId\n });\n return new DefaultSpeechResult({\n audio: new DefaultGeneratedAudioFile({\n data: result.audio,\n mediaType: (_a25 = detectMediaType3({\n data: result.audio,\n topLevelType: \"audio\"\n })) != null ? _a25 : \"audio/mp3\"\n }),\n warnings: result.warnings,\n responses: [result.response],\n providerMetadata: result.providerMetadata\n });\n}\nvar DefaultSpeechResult = class {\n constructor(options) {\n var _a25;\n this.audio = options.audio;\n this.warnings = options.warnings;\n this.responses = options.responses;\n this.providerMetadata = (_a25 = options.providerMetadata) != null ? _a25 : {};\n }\n};\n\n// src/generate-speech/index.ts\nvar experimental_generateSpeech = generateSpeech;\n\n// src/generate-text/prune-messages.ts\nfunction pruneMessages({\n messages,\n reasoning = \"none\",\n toolCalls = [],\n emptyMessages = \"remove\"\n}) {\n if (reasoning === \"all\" || reasoning === \"before-last-message\") {\n messages = messages.map((message, messageIndex) => {\n if (message.role !== \"assistant\" || typeof message.content === \"string\" || reasoning === \"before-last-message\" && messageIndex === messages.length - 1) {\n return message;\n }\n return {\n ...message,\n content: message.content.filter((part) => part.type !== \"reasoning\")\n };\n });\n }\n if (toolCalls === \"none\") {\n toolCalls = [];\n } else if (toolCalls === \"all\") {\n toolCalls = [{ type: \"all\" }];\n } else if (toolCalls === \"before-last-message\") {\n toolCalls = [{ type: \"before-last-message\" }];\n } else if (typeof toolCalls === \"string\") {\n toolCalls = [{ type: toolCalls }];\n }\n for (const toolCall of toolCalls) {\n const keepLastMessagesCount = toolCall.type === \"all\" ? void 0 : toolCall.type === \"before-last-message\" ? 1 : Number(\n toolCall.type.slice(\"before-last-\".length).slice(0, -\"-messages\".length)\n );\n const keptToolCallIds = /* @__PURE__ */ new Set();\n const keptApprovalIds = /* @__PURE__ */ new Set();\n if (keepLastMessagesCount != null) {\n for (const message of messages.slice(-keepLastMessagesCount)) {\n if ((message.role === \"assistant\" || message.role === \"tool\") && typeof message.content !== \"string\") {\n for (const part of message.content) {\n if (part.type === \"tool-call\" || part.type === \"tool-result\") {\n keptToolCallIds.add(part.toolCallId);\n } else if (part.type === \"tool-approval-request\" || part.type === \"tool-approval-response\") {\n keptApprovalIds.add(part.approvalId);\n }\n }\n }\n }\n }\n const toolCallIdToToolName = /* @__PURE__ */ new Map();\n for (const message of messages) {\n if ((message.role === \"assistant\" || message.role === \"tool\") && typeof message.content !== \"string\") {\n for (const part of message.content) {\n if (part.type === \"tool-call\" || part.type === \"tool-result\") {\n toolCallIdToToolName.set(part.toolCallId, part.toolName);\n }\n }\n }\n }\n const approvalIdToToolName = /* @__PURE__ */ new Map();\n for (const message of messages) {\n if ((message.role === \"assistant\" || message.role === \"tool\") && typeof message.content !== \"string\") {\n for (const part of message.content) {\n if (part.type === \"tool-approval-request\") {\n const toolName = toolCallIdToToolName.get(part.toolCallId);\n if (toolName != null) {\n approvalIdToToolName.set(part.approvalId, toolName);\n }\n }\n }\n }\n }\n messages = messages.map((message, messageIndex) => {\n if (message.role !== \"assistant\" && message.role !== \"tool\" || typeof message.content === \"string\" || keepLastMessagesCount && messageIndex >= messages.length - keepLastMessagesCount) {\n return message;\n }\n return {\n ...message,\n content: message.content.filter((part) => {\n if (part.type !== \"tool-call\" && part.type !== \"tool-result\" && part.type !== \"tool-approval-request\" && part.type !== \"tool-approval-response\") {\n return true;\n }\n if ((part.type === \"tool-call\" || part.type === \"tool-result\") && keptToolCallIds.has(part.toolCallId) || (part.type === \"tool-approval-request\" || part.type === \"tool-approval-response\") && keptApprovalIds.has(part.approvalId)) {\n return true;\n }\n const partToolName = part.type === \"tool-call\" || part.type === \"tool-result\" ? part.toolName : approvalIdToToolName.get(part.approvalId);\n return toolCall.tools != null && partToolName != null && !toolCall.tools.includes(partToolName);\n })\n };\n });\n }\n if (emptyMessages === \"remove\") {\n messages = messages.filter((message) => message.content.length > 0);\n }\n return messages;\n}\n\n// src/generate-text/smooth-stream.ts\nimport { delay as originalDelay } from \"@ai-sdk/provider-utils\";\nimport {\n InvalidArgumentError as InvalidArgumentError2\n} from \"@ai-sdk/provider\";\nvar CHUNKING_REGEXPS = {\n word: /\\S+\\s+/m,\n line: /\\n+/m\n};\nfunction smoothStream({\n delayInMs = 10,\n chunking = \"word\",\n _internal: { delay = originalDelay } = {}\n} = {}) {\n let detectChunk;\n if (chunking != null && typeof chunking === \"object\" && \"segment\" in chunking && typeof chunking.segment === \"function\") {\n const segmenter = chunking;\n detectChunk = (buffer) => {\n if (buffer.length === 0) return null;\n const iterator = segmenter.segment(buffer)[Symbol.iterator]();\n const first = iterator.next().value;\n return (first == null ? void 0 : first.segment) || null;\n };\n } else if (typeof chunking === \"function\") {\n detectChunk = (buffer) => {\n const match = chunking(buffer);\n if (match == null) {\n return null;\n }\n if (!match.length) {\n throw new Error(`Chunking function must return a non-empty string.`);\n }\n if (!buffer.startsWith(match)) {\n throw new Error(\n `Chunking function must return a match that is a prefix of the buffer. Received: \"${match}\" expected to start with \"${buffer}\"`\n );\n }\n return match;\n };\n } else {\n const chunkingRegex = typeof chunking === \"string\" ? CHUNKING_REGEXPS[chunking] : chunking instanceof RegExp ? chunking : void 0;\n if (chunkingRegex == null) {\n throw new InvalidArgumentError2({\n argument: \"chunking\",\n message: `Chunking must be \"word\", \"line\", a RegExp, an Intl.Segmenter, or a ChunkDetector function. Received: ${chunking}`\n });\n }\n detectChunk = (buffer) => {\n const lastIndex = chunkingRegex.lastIndex;\n chunkingRegex.lastIndex = 0;\n let match;\n try {\n match = chunkingRegex.exec(buffer);\n } finally {\n chunkingRegex.lastIndex = lastIndex;\n }\n if (!match) {\n return null;\n }\n if (!match[0].length) {\n throw new Error(`Chunking RegExp must not match an empty string.`);\n }\n return buffer.slice(0, match.index) + match[0];\n };\n }\n return () => {\n let buffer = \"\";\n let id = \"\";\n let type = void 0;\n let providerMetadata = void 0;\n function flushBuffer(controller) {\n if (buffer.length > 0 && type !== void 0) {\n controller.enqueue({\n type,\n text: buffer,\n id,\n ...providerMetadata != null ? { providerMetadata } : {}\n });\n buffer = \"\";\n providerMetadata = void 0;\n }\n }\n return new TransformStream({\n async transform(chunk, controller) {\n if (chunk.type !== \"text-delta\" && chunk.type !== \"reasoning-delta\") {\n flushBuffer(controller);\n controller.enqueue(chunk);\n return;\n }\n if ((chunk.type !== type || chunk.id !== id) && buffer.length > 0) {\n flushBuffer(controller);\n }\n buffer += chunk.text;\n id = chunk.id;\n type = chunk.type;\n if (chunk.providerMetadata != null) {\n providerMetadata = chunk.providerMetadata;\n }\n let match;\n while ((match = detectChunk(buffer)) != null) {\n controller.enqueue({ type, text: match, id });\n buffer = buffer.slice(match.length);\n await delay(delayInMs);\n }\n }\n });\n };\n}\n\n// src/generate-text/tool-fingerprint.ts\nimport { asSchema as asSchema6 } from \"@ai-sdk/provider-utils\";\nfunction tagDescription(description) {\n if (typeof description === \"string\") {\n return { type: \"string\", value: description };\n }\n if (description == null) {\n return { type: \"none\" };\n }\n return { type: \"function\" };\n}\nasync function fingerprintTools(tools) {\n const entries = await Promise.all(\n Object.keys(tools).map(async (name25) => {\n const tool2 = tools[name25];\n const digest = await hashCanonical({\n description: tagDescription(tool2.description),\n inputSchema: await asSchema6(tool2.inputSchema).jsonSchema,\n title: tool2.title\n });\n return [name25, digest];\n })\n );\n return Object.fromEntries(entries);\n}\nfunction detectToolDrift(current, baseline) {\n const added = [];\n const removed = [];\n const changed = [];\n for (const name25 of Object.keys(current)) {\n if (!Object.hasOwn(baseline, name25)) {\n added.push(name25);\n } else if (current[name25] !== baseline[name25]) {\n changed.push(name25);\n }\n }\n for (const name25 of Object.keys(baseline)) {\n if (!Object.hasOwn(current, name25)) {\n removed.push(name25);\n }\n }\n return { added, removed, changed };\n}\n\n// src/generate-video/generate-video.ts\nimport {\n convertBase64ToUint8Array as convertBase64ToUint8Array5,\n delay as defaultDelay,\n generateId,\n withUserAgentSuffix as withUserAgentSuffix10,\n detectMediaType as detectMediaType4\n} from \"@ai-sdk/provider-utils\";\nvar defaultDownload = createDownload();\nasync function experimental_generateVideo({\n model: modelArg,\n prompt: promptArg,\n n = 1,\n maxVideosPerCall,\n aspectRatio,\n resolution,\n duration,\n fps,\n seed,\n frameImages,\n inputReferences,\n generateAudio,\n providerOptions,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n download: downloadFn = defaultDownload,\n poll,\n webhook\n}) {\n var _a25;\n const model = resolveVideoModel(modelArg);\n const headersWithUserAgent = withUserAgentSuffix10(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const { retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const {\n prompt,\n resolvedImage,\n normalizedFrameImages,\n effectiveInputReferences,\n warnings\n } = normalizeVideoCallInputs({ promptArg, frameImages, inputReferences });\n const maxVideosPerCallWithDefault = (_a25 = maxVideosPerCall != null ? maxVideosPerCall : await invokeModelMaxVideosPerCall(model)) != null ? _a25 : 1;\n const hasStartStatus = model.doStart != null && model.doStatus != null;\n const useStartStatus = hasStartStatus && (poll != null || webhook != null || model.doGenerate == null);\n if (model.doGenerate == null && !hasStartStatus) {\n throw new Error(\n `Video model ${model.modelId} does not implement doGenerate or doStart/doStatus.`\n );\n }\n if ((poll != null || webhook != null) && !hasStartStatus) {\n logWarnings({\n warnings: [\n {\n type: \"other\",\n message: \"poll/webhook options were provided but the model does not support doStart/doStatus. Falling back to doGenerate.\"\n }\n ],\n provider: model.provider,\n model: model.modelId\n });\n }\n const callCount = Math.ceil(n / maxVideosPerCallWithDefault);\n const callVideoCounts = Array.from({ length: callCount }, (_, index) => {\n const remaining = n - index * maxVideosPerCallWithDefault;\n return Math.min(remaining, maxVideosPerCallWithDefault);\n });\n const results = await Promise.all(\n callVideoCounts.map(async (callVideoCount) => {\n const callOptions = {\n prompt,\n n: callVideoCount,\n aspectRatio,\n resolution,\n duration,\n fps,\n seed,\n image: resolvedImage,\n frameImages: normalizedFrameImages,\n inputReferences: effectiveInputReferences,\n generateAudio,\n providerOptions: providerOptions != null ? providerOptions : {},\n headers: headersWithUserAgent,\n abortSignal\n };\n if (useStartStatus) {\n return executeStartStatusFlow({\n model,\n callOptions,\n poll,\n webhook,\n retry\n });\n }\n return retry(() => model.doGenerate(callOptions));\n })\n );\n const videos = [];\n const responses = [];\n const providerMetadata = {};\n for (const result of results) {\n for (const videoData of result.videos) {\n switch (videoData.type) {\n case \"url\": {\n const { data, mediaType: downloadedMediaType } = await downloadFn({\n url: new URL(videoData.url),\n abortSignal\n });\n const isUsableMediaType = (type) => !!type && type !== \"application/octet-stream\";\n const mediaType = isUsableMediaType(videoData.mediaType) && videoData.mediaType || isUsableMediaType(downloadedMediaType) && downloadedMediaType || detectMediaType4({\n data,\n topLevelType: \"video\"\n }) || \"video/mp4\";\n videos.push(\n new DefaultGeneratedFile({\n data,\n mediaType\n })\n );\n break;\n }\n case \"base64\": {\n videos.push(\n new DefaultGeneratedFile({\n data: videoData.data,\n mediaType: videoData.mediaType || \"video/mp4\"\n })\n );\n break;\n }\n case \"binary\": {\n const mediaType = videoData.mediaType || detectMediaType4({\n data: videoData.data,\n topLevelType: \"video\"\n }) || \"video/mp4\";\n videos.push(\n new DefaultGeneratedFile({\n data: videoData.data,\n mediaType\n })\n );\n break;\n }\n }\n }\n warnings.push(...result.warnings);\n responses.push({\n timestamp: result.response.timestamp,\n modelId: result.response.modelId,\n headers: result.response.headers,\n providerMetadata: result.providerMetadata\n });\n if (result.providerMetadata != null) {\n mergeProviderMetadata(providerMetadata, result.providerMetadata);\n }\n }\n if (videos.length === 0) {\n throw new NoVideoGeneratedError({ responses });\n }\n if (warnings.length > 0) {\n logWarnings({\n warnings,\n provider: model.provider,\n model: model.modelId\n });\n }\n return {\n video: videos[0],\n videos,\n warnings,\n responses,\n providerMetadata\n };\n}\nasync function executeStartStatusFlow({\n model,\n callOptions,\n poll: pollConfig,\n webhook: webhookFactory,\n retry\n}) {\n var _a25, _b25, _c, _d;\n const earlyWarnings = [];\n let webhookUrl;\n let webhookReceived;\n if (webhookFactory != null) {\n if (model.handleWebhookOption != null) {\n const result = await model.handleWebhookOption({\n webhook: webhookFactory\n });\n webhookUrl = result.webhookUrl;\n webhookReceived = result.received;\n } else {\n earlyWarnings.push({\n type: \"unsupported\",\n feature: \"webhook\",\n details: \"This model does not support webhooks. Falling back to polling.\"\n });\n }\n }\n const callerIdempotencyKey = Object.entries((_a25 = callOptions.headers) != null ? _a25 : {}).find(\n ([key, value]) => key.toLowerCase() === \"idempotency-key\" && value !== void 0\n );\n const startCallOptions = {\n ...callOptions,\n headers: {\n ...callOptions.headers,\n ...callerIdempotencyKey ? {} : { \"idempotency-key\": `aisdk_vid_${generateId()}` }\n },\n webhookUrl\n };\n const startResult = await retry(() => model.doStart(startCallOptions));\n const allWarnings = [...earlyWarnings, ...startResult.warnings];\n let operationProviderMetadata = startResult.providerMetadata == null ? void 0 : { ...startResult.providerMetadata };\n const intervalMs = (_b25 = pollConfig == null ? void 0 : pollConfig.intervalMs) != null ? _b25 : 5e3;\n const timeoutMs = (_c = pollConfig == null ? void 0 : pollConfig.timeoutMs) != null ? _c : 6e5;\n const delay = (_d = pollConfig == null ? void 0 : pollConfig.delay) != null ? _d : defaultDelay;\n const startTime = Date.now();\n if (webhookReceived != null) {\n await waitForWebhook({\n received: webhookReceived,\n timeoutMs,\n abortSignal: callOptions.abortSignal,\n delay\n });\n }\n while (true) {\n if (webhookReceived == null) {\n const elapsedMs = Date.now() - startTime;\n if (elapsedMs >= timeoutMs) {\n throw new Error(`Video generation timed out after ${timeoutMs}ms.`);\n }\n await delay(Math.min(intervalMs, timeoutMs - elapsedMs), {\n abortSignal: callOptions.abortSignal\n });\n if (Date.now() - startTime >= timeoutMs) {\n throw new Error(`Video generation timed out after ${timeoutMs}ms.`);\n }\n }\n const statusResult = await retry(\n () => model.doStatus({\n operation: startResult.operation,\n abortSignal: callOptions.abortSignal,\n headers: callOptions.headers\n })\n );\n if (statusResult.status === \"error\") {\n throw new Error(statusResult.error);\n }\n if (statusResult.warnings != null) {\n allWarnings.push(...statusResult.warnings);\n }\n if (statusResult.providerMetadata != null) {\n operationProviderMetadata != null ? operationProviderMetadata : operationProviderMetadata = {};\n mergeProviderMetadata(\n operationProviderMetadata,\n statusResult.providerMetadata\n );\n }\n if (statusResult.status === \"completed\") {\n return {\n videos: statusResult.videos,\n warnings: allWarnings,\n providerMetadata: operationProviderMetadata,\n response: statusResult.response\n };\n }\n if (webhookReceived != null) {\n throw new Error(\n \"Video generation did not complete after webhook notification.\"\n );\n }\n }\n}\nasync function waitForWebhook({\n received,\n timeoutMs,\n abortSignal,\n delay\n}) {\n const timeoutController = typeof globalThis.AbortController === \"function\" ? new globalThis.AbortController() : void 0;\n try {\n await Promise.race([\n received,\n delay(timeoutMs, {\n abortSignal: timeoutController == null ? abortSignal : mergeAbortSignals(abortSignal, timeoutController.signal)\n }).then(() => {\n throw new Error(`Video generation timed out after ${timeoutMs}ms.`);\n })\n ]);\n } finally {\n timeoutController == null ? void 0 : timeoutController.abort();\n }\n}\nfunction mergeProviderMetadata(target, source) {\n for (const [providerName, metadataValue] of Object.entries(source)) {\n const existingMetadata = target[providerName];\n if (existingMetadata != null && typeof existingMetadata === \"object\" && metadataValue != null && typeof metadataValue === \"object\") {\n target[providerName] = {\n ...existingMetadata,\n ...metadataValue\n };\n if (\"videos\" in existingMetadata && Array.isArray(existingMetadata.videos) && \"videos\" in metadataValue && Array.isArray(metadataValue.videos)) {\n target[providerName].videos = [\n ...existingMetadata.videos,\n ...metadataValue.videos\n ];\n }\n } else {\n target[providerName] = metadataValue;\n }\n }\n}\nfunction normalizePrompt2(promptArg) {\n if (typeof promptArg === \"string\") {\n return {\n prompt: promptArg,\n image: void 0\n };\n }\n return {\n prompt: promptArg.text,\n image: promptArg.image != null ? normalizeImageData(promptArg.image) : void 0\n };\n}\nfunction normalizeVideoCallInputs({\n promptArg,\n frameImages,\n inputReferences\n}) {\n var _a25;\n const { prompt, image } = normalizePrompt2(promptArg);\n const normalizedFrameImages = frameImages == null ? void 0 : frameImages.flatMap((frame) => {\n const normalizedImage = normalizeImageData(frame.image);\n return normalizedImage != null ? [{ image: normalizedImage, frameType: frame.frameType }] : [];\n });\n const normalizedInputReferences = inputReferences == null ? void 0 : inputReferences.flatMap((reference) => {\n const normalized = normalizeReferenceData(reference);\n return normalized != null ? [normalized] : [];\n });\n const effectiveInputReferences = normalizedFrameImages != null && normalizedFrameImages.length > 0 ? void 0 : normalizedInputReferences;\n const warnings = [];\n if (normalizedFrameImages != null && normalizedFrameImages.length > 0 && normalizedInputReferences != null && normalizedInputReferences.length > 0) {\n warnings.push({\n type: \"other\",\n message: \"inputReferences were ignored because frameImages were provided; frameImages and inputReferences cannot be combined.\"\n });\n }\n const firstFrameImage = (_a25 = normalizedFrameImages == null ? void 0 : normalizedFrameImages.find(\n (frame) => frame.frameType === \"first_frame\"\n )) == null ? void 0 : _a25.image;\n if (image != null && firstFrameImage != null) {\n warnings.push({\n type: \"other\",\n message: \"prompt.image was ignored because a first_frame frameImage was provided; the first_frame frameImage takes precedence as the start image.\"\n });\n }\n const resolvedImage = firstFrameImage != null ? firstFrameImage : image;\n return {\n prompt,\n resolvedImage,\n normalizedFrameImages,\n effectiveInputReferences,\n warnings\n };\n}\nfunction detectFileMediaType(data, restrictToImages) {\n const detected = restrictToImages ? detectMediaType4({ data, topLevelType: \"image\" }) : detectMediaType4({ data });\n return detected != null ? detected : \"image/png\";\n}\nfunction normalizeImageData(dataContent, { restrictToImages = true } = {}) {\n if (typeof dataContent === \"string\") {\n if (dataContent.startsWith(\"http://\") || dataContent.startsWith(\"https://\")) {\n return {\n type: \"url\",\n url: dataContent\n };\n }\n if (dataContent.startsWith(\"data:\")) {\n const { mediaType, base64Content } = splitDataUrl(dataContent);\n const data = convertBase64ToUint8Array5(base64Content != null ? base64Content : \"\");\n return {\n type: \"file\",\n mediaType: mediaType != null ? mediaType : detectFileMediaType(data, restrictToImages),\n data\n };\n }\n const bytes = convertBase64ToUint8Array5(dataContent);\n return {\n type: \"file\",\n mediaType: detectFileMediaType(bytes, restrictToImages),\n data: bytes\n };\n }\n if (dataContent instanceof Uint8Array || dataContent instanceof ArrayBuffer) {\n const bytes = dataContent instanceof Uint8Array ? dataContent : new Uint8Array(dataContent);\n return {\n type: \"file\",\n mediaType: detectFileMediaType(bytes, restrictToImages),\n data: bytes\n };\n }\n return void 0;\n}\nfunction normalizeReferenceData(reference) {\n const isObjectForm = typeof reference === \"object\" && reference != null && !(reference instanceof Uint8Array) && !(reference instanceof ArrayBuffer) && \"data\" in reference;\n if (!isObjectForm) {\n return normalizeImageData(reference, {\n restrictToImages: false\n });\n }\n const normalized = normalizeImageData(reference.data, {\n restrictToImages: false\n });\n if (normalized == null) {\n return normalized;\n }\n return {\n ...normalized,\n ...reference.mediaType != null ? { mediaType: reference.mediaType } : {}\n };\n}\nasync function invokeModelMaxVideosPerCall(model) {\n if (typeof model.maxVideosPerCall === \"function\") {\n return await model.maxVideosPerCall({ modelId: model.modelId });\n }\n return model.maxVideosPerCall;\n}\n\n// src/generate-video/start-video.ts\nimport {\n generateId as generateId2,\n withUserAgentSuffix as withUserAgentSuffix11\n} from \"@ai-sdk/provider-utils\";\nasync function experimental_startVideo({\n model: modelArg,\n prompt: promptArg,\n n = 1,\n maxVideosPerCall,\n aspectRatio,\n resolution,\n duration,\n fps,\n seed,\n frameImages,\n inputReferences,\n generateAudio,\n providerOptions,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n webhookUrl\n}) {\n const model = resolveVideoModel(modelArg);\n if (model.doStart == null) {\n throw new Error(\n `Video model ${model.modelId} does not implement doStart. Use generateVideo for models without an asynchronous start/status flow.`\n );\n }\n if (!Number.isInteger(n) || n < 1) {\n throw new Error(\n `Invalid n: expected a positive integer, received ${JSON.stringify(n)}.`\n );\n }\n const knownMaxVideosPerCall = maxVideosPerCall != null ? maxVideosPerCall : typeof model.maxVideosPerCall === \"function\" ? await model.maxVideosPerCall({ modelId: model.modelId }) : model.maxVideosPerCall;\n if (knownMaxVideosPerCall != null && n > knownMaxVideosPerCall) {\n throw new Error(\n `Video model ${model.modelId} supports at most ${knownMaxVideosPerCall} video(s) per call, but ${n} were requested. Split the batch across multiple startVideo calls.`\n );\n }\n const {\n prompt,\n resolvedImage,\n normalizedFrameImages,\n effectiveInputReferences,\n warnings\n } = normalizeVideoCallInputs({ promptArg, frameImages, inputReferences });\n const { retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const callerIdempotencyKey = Object.entries(headers != null ? headers : {}).find(\n ([key, value]) => key.toLowerCase() === \"idempotency-key\" && value !== void 0\n );\n const callOptions = {\n prompt,\n n,\n aspectRatio,\n resolution,\n duration,\n fps,\n seed,\n image: resolvedImage,\n frameImages: normalizedFrameImages,\n inputReferences: effectiveInputReferences,\n generateAudio,\n providerOptions: providerOptions != null ? providerOptions : {},\n headers: {\n ...withUserAgentSuffix11(headers != null ? headers : {}, `ai/${VERSION}`),\n ...callerIdempotencyKey ? {} : { \"idempotency-key\": `aisdk_vid_${generateId2()}` }\n },\n abortSignal,\n webhookUrl\n };\n const startResult = await retry(() => model.doStart(callOptions));\n return {\n operation: startResult.operation,\n warnings: [...warnings, ...startResult.warnings],\n providerMetadata: startResult.providerMetadata,\n response: startResult.response\n };\n}\n\n// src/generate-video/get-video-status.ts\nimport { withUserAgentSuffix as withUserAgentSuffix12 } from \"@ai-sdk/provider-utils\";\nasync function experimental_getVideoStatus(modelArg, {\n operation,\n headers,\n abortSignal,\n maxRetries: maxRetriesArg\n}) {\n const model = resolveVideoModel(modelArg);\n if (model.doStatus == null) {\n throw new Error(\n `Video model ${model.modelId} does not implement doStatus.`\n );\n }\n const { retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n return retry(\n () => model.doStatus({\n operation,\n headers: withUserAgentSuffix12(headers != null ? headers : {}, `ai/${VERSION}`),\n abortSignal\n })\n );\n}\n\n// src/middleware/default-embedding-settings-middleware.ts\nfunction defaultEmbeddingSettingsMiddleware({\n settings\n}) {\n return {\n specificationVersion: \"v4\",\n transformParams: async ({ params }) => {\n return mergeObjects(settings, params);\n }\n };\n}\n\n// src/middleware/default-instructions-middleware.ts\nimport { asArray as asArray7 } from \"@ai-sdk/provider-utils\";\nfunction defaultInstructionsMiddleware({\n instructions\n}) {\n const defaultSystemMessages = typeof instructions === \"string\" ? [{ role: \"system\", content: instructions }] : asArray7(instructions).map((message) => ({\n role: \"system\",\n content: message.content,\n providerOptions: message.providerOptions\n }));\n return {\n specificationVersion: \"v4\",\n transformParams: async ({ params }) => {\n if (defaultSystemMessages.length === 0 || params.prompt.some((message) => message.role === \"system\")) {\n return params;\n }\n return {\n ...params,\n prompt: [...defaultSystemMessages, ...params.prompt]\n };\n }\n };\n}\n\n// src/middleware/default-settings-middleware.ts\nfunction defaultSettingsMiddleware({\n settings\n}) {\n return {\n specificationVersion: \"v4\",\n transformParams: async ({ params }) => {\n return mergeObjects(settings, params);\n }\n };\n}\n\n// src/middleware/extract-json-middleware.ts\nfunction defaultTransform(text2) {\n return text2.replace(/^```(?:json)?\\s*\\n?/, \"\").replace(/\\n?```\\s*$/, \"\").trim();\n}\nfunction stripMarkdownCodeFenceSuffix(text2) {\n return text2.replace(/\\n?```\\s*$/, \"\").trimEnd();\n}\nfunction extractJsonMiddleware(options) {\n var _a25;\n const transform = (_a25 = options == null ? void 0 : options.transform) != null ? _a25 : defaultTransform;\n const hasCustomTransform = (options == null ? void 0 : options.transform) !== void 0;\n return {\n specificationVersion: \"v4\",\n wrapGenerate: async ({ doGenerate }) => {\n const { content, ...rest } = await doGenerate();\n const transformedContent = [];\n for (const part of content) {\n if (part.type !== \"text\") {\n transformedContent.push(part);\n continue;\n }\n transformedContent.push({\n ...part,\n text: transform(part.text)\n });\n }\n return { content: transformedContent, ...rest };\n },\n wrapStream: async ({ doStream }) => {\n const { stream, ...rest } = await doStream();\n const textBlocks = createIdMap();\n const SUFFIX_BUFFER_SIZE = 12;\n return {\n stream: stream.pipeThrough(\n new TransformStream({\n transform: (chunk, controller) => {\n if (chunk.type === \"text-start\") {\n textBlocks[chunk.id] = {\n startEvent: chunk,\n // Custom transforms need to buffer all content\n phase: hasCustomTransform ? \"buffering\" : \"prefix\",\n buffer: \"\",\n prefixStripped: false\n };\n return;\n }\n if (chunk.type === \"text-delta\") {\n const block = textBlocks[chunk.id];\n if (!block) {\n controller.enqueue(chunk);\n return;\n }\n block.buffer += chunk.delta;\n if (block.phase === \"buffering\") {\n return;\n }\n if (block.phase === \"prefix\") {\n if (block.buffer.length > 0 && !block.buffer.startsWith(\"`\")) {\n block.phase = \"streaming\";\n controller.enqueue(block.startEvent);\n } else if (block.buffer.startsWith(\"```\")) {\n if (block.buffer.includes(\"\\n\")) {\n const prefixMatch = block.buffer.match(/^```(?:json)?\\s*\\n/);\n if (prefixMatch) {\n block.buffer = block.buffer.slice(\n prefixMatch[0].length\n );\n block.prefixStripped = true;\n block.phase = \"streaming\";\n controller.enqueue(block.startEvent);\n } else {\n block.phase = \"streaming\";\n controller.enqueue(block.startEvent);\n }\n }\n } else if (block.buffer.length >= 3 && !block.buffer.startsWith(\"```\")) {\n block.phase = \"streaming\";\n controller.enqueue(block.startEvent);\n }\n }\n if (block.phase === \"streaming\" && block.buffer.length > SUFFIX_BUFFER_SIZE) {\n const toStream = block.buffer.slice(0, -SUFFIX_BUFFER_SIZE);\n block.buffer = block.buffer.slice(-SUFFIX_BUFFER_SIZE);\n controller.enqueue({\n type: \"text-delta\",\n id: chunk.id,\n delta: toStream\n });\n }\n return;\n }\n if (chunk.type === \"text-end\") {\n const block = textBlocks[chunk.id];\n if (block) {\n if (block.phase === \"prefix\" || block.phase === \"buffering\") {\n controller.enqueue(block.startEvent);\n }\n let remaining = block.buffer;\n if (block.phase === \"buffering\") {\n remaining = transform(remaining);\n } else if (block.prefixStripped) {\n remaining = stripMarkdownCodeFenceSuffix(remaining);\n } else if (block.phase === \"prefix\") {\n remaining = transform(remaining);\n } else {\n remaining = stripMarkdownCodeFenceSuffix(remaining);\n }\n if (remaining.length > 0) {\n controller.enqueue({\n type: \"text-delta\",\n id: chunk.id,\n delta: remaining\n });\n }\n controller.enqueue(chunk);\n delete textBlocks[chunk.id];\n return;\n }\n }\n controller.enqueue(chunk);\n }\n })\n ),\n ...rest\n };\n }\n };\n}\n\n// src/util/get-potential-start-index.ts\nfunction getPotentialStartIndex(text2, searchedText) {\n if (searchedText.length === 0) {\n return null;\n }\n const directIndex = text2.indexOf(searchedText);\n if (directIndex !== -1) {\n return directIndex;\n }\n for (let i = text2.length - 1; i >= 0; i--) {\n const suffix = text2.substring(i);\n if (searchedText.startsWith(suffix)) {\n return i;\n }\n }\n return null;\n}\n\n// src/middleware/extract-reasoning-middleware.ts\nfunction extractReasoningMiddleware({\n tagName,\n separator = \"\\n\",\n startWithReasoning = false\n}) {\n const openingTag = `<${tagName}>`;\n const closingTag = `</${tagName}>`;\n return {\n specificationVersion: \"v4\",\n wrapGenerate: async ({ doGenerate }) => {\n const { content, ...rest } = await doGenerate();\n const transformedContent = [];\n for (const part of content) {\n if (part.type !== \"text\") {\n transformedContent.push(part);\n continue;\n }\n const text2 = startWithReasoning ? openingTag + part.text : part.text;\n const regexp = new RegExp(`${openingTag}(.*?)${closingTag}`, \"gs\");\n const matches = Array.from(text2.matchAll(regexp));\n if (!matches.length) {\n transformedContent.push(part);\n continue;\n }\n const reasoningText = matches.map((match) => match[1]).join(separator);\n let textWithoutReasoning = text2;\n for (let i = matches.length - 1; i >= 0; i--) {\n const match = matches[i];\n const beforeMatch = textWithoutReasoning.slice(0, match.index);\n const afterMatch = textWithoutReasoning.slice(\n match.index + match[0].length\n );\n textWithoutReasoning = beforeMatch + (beforeMatch.length > 0 && afterMatch.length > 0 ? separator : \"\") + afterMatch;\n }\n transformedContent.push({\n type: \"reasoning\",\n text: reasoningText\n });\n transformedContent.push({\n type: \"text\",\n text: textWithoutReasoning\n });\n }\n return { content: transformedContent, ...rest };\n },\n wrapStream: async ({ doStream }) => {\n const { stream, ...rest } = await doStream();\n const reasoningExtractions = createIdMap();\n let delayedTextStart;\n return {\n stream: stream.pipeThrough(\n new TransformStream({\n transform: (chunk, controller) => {\n if (chunk.type === \"text-start\") {\n delayedTextStart = chunk;\n return;\n }\n if (chunk.type === \"text-end\" && delayedTextStart) {\n controller.enqueue(delayedTextStart);\n delayedTextStart = void 0;\n }\n if (chunk.type !== \"text-delta\") {\n controller.enqueue(chunk);\n return;\n }\n if (reasoningExtractions[chunk.id] == null) {\n reasoningExtractions[chunk.id] = {\n isFirstReasoning: true,\n isFirstText: true,\n afterSwitch: false,\n isReasoning: startWithReasoning,\n buffer: \"\",\n idCounter: 0,\n textId: chunk.id\n };\n }\n const activeExtraction = reasoningExtractions[chunk.id];\n activeExtraction.buffer += chunk.delta;\n function publish(text2) {\n if (text2.length > 0) {\n const prefix = activeExtraction.afterSwitch && (activeExtraction.isReasoning ? !activeExtraction.isFirstReasoning : !activeExtraction.isFirstText) ? separator : \"\";\n if (activeExtraction.isReasoning && (activeExtraction.afterSwitch || activeExtraction.isFirstReasoning)) {\n controller.enqueue({\n type: \"reasoning-start\",\n id: `reasoning-${activeExtraction.idCounter}`\n });\n }\n if (activeExtraction.isReasoning) {\n controller.enqueue({\n type: \"reasoning-delta\",\n delta: prefix + text2,\n id: `reasoning-${activeExtraction.idCounter}`\n });\n } else {\n if (delayedTextStart) {\n controller.enqueue(delayedTextStart);\n delayedTextStart = void 0;\n }\n controller.enqueue({\n type: \"text-delta\",\n delta: prefix + text2,\n id: activeExtraction.textId\n });\n }\n activeExtraction.afterSwitch = false;\n if (activeExtraction.isReasoning) {\n activeExtraction.isFirstReasoning = false;\n } else {\n activeExtraction.isFirstText = false;\n }\n }\n }\n do {\n const nextTag = activeExtraction.isReasoning ? closingTag : openingTag;\n const startIndex = getPotentialStartIndex(\n activeExtraction.buffer,\n nextTag\n );\n if (startIndex == null) {\n publish(activeExtraction.buffer);\n activeExtraction.buffer = \"\";\n break;\n }\n publish(activeExtraction.buffer.slice(0, startIndex));\n const foundFullMatch = startIndex + nextTag.length <= activeExtraction.buffer.length;\n if (foundFullMatch) {\n activeExtraction.buffer = activeExtraction.buffer.slice(\n startIndex + nextTag.length\n );\n if (activeExtraction.isReasoning) {\n if (activeExtraction.isFirstReasoning) {\n controller.enqueue({\n type: \"reasoning-start\",\n id: `reasoning-${activeExtraction.idCounter}`\n });\n }\n controller.enqueue({\n type: \"reasoning-end\",\n id: `reasoning-${activeExtraction.idCounter++}`\n });\n }\n activeExtraction.isReasoning = !activeExtraction.isReasoning;\n activeExtraction.afterSwitch = true;\n } else {\n activeExtraction.buffer = activeExtraction.buffer.slice(startIndex);\n break;\n }\n } while (true);\n }\n })\n ),\n ...rest\n };\n }\n };\n}\n\n// src/middleware/simulate-streaming-middleware.ts\nfunction simulateStreamingMiddleware() {\n return {\n specificationVersion: \"v4\",\n wrapStream: async ({ doGenerate }) => {\n const result = await doGenerate();\n let id = 0;\n const simulatedStream = new ReadableStream({\n start(controller) {\n controller.enqueue({\n type: \"stream-start\",\n warnings: result.warnings\n });\n controller.enqueue({ type: \"response-metadata\", ...result.response });\n for (const part of result.content) {\n switch (part.type) {\n case \"text\": {\n if (part.text.length > 0) {\n controller.enqueue({ type: \"text-start\", id: String(id) });\n controller.enqueue({\n type: \"text-delta\",\n id: String(id),\n delta: part.text\n });\n controller.enqueue({ type: \"text-end\", id: String(id) });\n id++;\n }\n break;\n }\n case \"reasoning\": {\n controller.enqueue({\n type: \"reasoning-start\",\n id: String(id),\n providerMetadata: part.providerMetadata\n });\n controller.enqueue({\n type: \"reasoning-delta\",\n id: String(id),\n delta: part.text\n });\n controller.enqueue({ type: \"reasoning-end\", id: String(id) });\n id++;\n break;\n }\n default: {\n controller.enqueue(part);\n break;\n }\n }\n }\n controller.enqueue({\n type: \"finish\",\n finishReason: result.finishReason,\n usage: result.usage,\n providerMetadata: result.providerMetadata\n });\n controller.close();\n }\n });\n return {\n stream: simulatedStream,\n request: result.request,\n response: result.response\n };\n }\n };\n}\n\n// src/middleware/add-tool-input-examples-middleware.ts\nfunction defaultFormatExample(example) {\n return JSON.stringify(example.input);\n}\nfunction addToolInputExamplesMiddleware({\n prefix = \"Input Examples:\",\n format = defaultFormatExample,\n remove = true\n} = {}) {\n return {\n specificationVersion: \"v4\",\n transformParams: async ({ params }) => {\n var _a25;\n if (!((_a25 = params.tools) == null ? void 0 : _a25.length)) {\n return params;\n }\n const transformedTools = params.tools.map((tool2) => {\n var _a26;\n if (tool2.type !== \"function\" || !((_a26 = tool2.inputExamples) == null ? void 0 : _a26.length)) {\n return tool2;\n }\n const formattedExamples = tool2.inputExamples.map((example, index) => format(example, index)).join(\"\\n\");\n const examplesSection = `${prefix}\n${formattedExamples}`;\n const toolDescription = tool2.description ? `${tool2.description}\n\n${examplesSection}` : examplesSection;\n return {\n ...tool2,\n description: toolDescription,\n inputExamples: remove ? void 0 : tool2.inputExamples\n };\n });\n return {\n ...params,\n tools: transformedTools\n };\n }\n };\n}\n\n// src/middleware/wrap-language-model.ts\nimport { asArray as asArray8 } from \"@ai-sdk/provider-utils\";\nvar wrapLanguageModel = ({\n model: inputModel,\n middleware: middlewareArg,\n modelId,\n providerId\n}) => {\n const model = asLanguageModelV4(inputModel);\n return [...asArray8(middlewareArg)].reverse().reduce((wrappedModel, middleware) => {\n return doWrap({ model: wrappedModel, middleware, modelId, providerId });\n }, model);\n};\nvar doWrap = ({\n model,\n middleware: {\n transformParams,\n wrapGenerate,\n wrapStream,\n overrideProvider,\n overrideModelId,\n overrideSupportedUrls\n },\n modelId,\n providerId\n}) => {\n var _a25, _b25, _c;\n async function doTransform({\n params,\n type\n }) {\n return transformParams ? await transformParams({ params, type, model }) : params;\n }\n return {\n specificationVersion: \"v4\",\n provider: (_a25 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a25 : model.provider,\n modelId: (_b25 = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _b25 : model.modelId,\n supportedUrls: (_c = overrideSupportedUrls == null ? void 0 : overrideSupportedUrls({ model })) != null ? _c : model.supportedUrls,\n async doGenerate(params) {\n const transformedParams = await doTransform({ params, type: \"generate\" });\n const doGenerate = async () => await model.doGenerate(transformedParams);\n const doStream = async () => await model.doStream(transformedParams);\n return wrapGenerate ? await wrapGenerate({\n doGenerate,\n doStream,\n params: transformedParams,\n model\n }) : await doGenerate();\n },\n async doStream(params) {\n const transformedParams = await doTransform({ params, type: \"stream\" });\n const doGenerate = async () => await model.doGenerate(transformedParams);\n const doStream = async () => await model.doStream(transformedParams);\n return wrapStream ? await wrapStream({\n doGenerate,\n doStream,\n params: transformedParams,\n model\n }) : await doStream();\n }\n };\n};\n\n// src/middleware/wrap-embedding-model.ts\nimport {\n asArray as asArray9,\n EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL as EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL2\n} from \"@ai-sdk/provider-utils\";\nvar wrapEmbeddingModel = ({\n model: inputModel,\n middleware: middlewareArg,\n modelId,\n providerId\n}) => {\n const model = asEmbeddingModelV4(inputModel);\n return [...asArray9(middlewareArg)].reverse().reduce((wrappedModel, middleware) => {\n return doWrap2({ model: wrappedModel, middleware, modelId, providerId });\n }, model);\n};\nvar doWrap2 = ({\n model,\n middleware: {\n transformParams,\n wrapEmbed,\n overrideProvider,\n overrideModelId,\n overrideMaxEmbeddingsPerCall,\n overrideSupportsParallelCalls\n },\n modelId,\n providerId\n}) => {\n var _a25, _b25, _c, _d;\n async function doTransform({\n params\n }) {\n return transformParams ? await transformParams({ params, model }) : params;\n }\n return {\n specificationVersion: \"v4\",\n provider: (_a25 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _a25 : model.provider,\n modelId: (_b25 = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _b25 : model.modelId,\n maxEmbeddingsPerCall: (_c = overrideMaxEmbeddingsPerCall == null ? void 0 : overrideMaxEmbeddingsPerCall({ model })) != null ? _c : model.maxEmbeddingsPerCall,\n [EXPERIMENTAL_EMBEDDING_MODEL_MAX_INPUT_BYTES_PER_CALL2]: getEmbeddingModelMaxInputBytesPerCall(model),\n supportsParallelCalls: (_d = overrideSupportsParallelCalls == null ? void 0 : overrideSupportsParallelCalls({ model })) != null ? _d : model.supportsParallelCalls,\n async doEmbed(params) {\n const transformedParams = await doTransform({ params });\n const doEmbed = async () => await model.doEmbed(transformedParams);\n return wrapEmbed ? await wrapEmbed({\n doEmbed,\n params: transformedParams,\n model\n }) : await doEmbed();\n }\n };\n};\n\n// src/middleware/wrap-image-model.ts\nimport { asArray as asArray10 } from \"@ai-sdk/provider-utils\";\nvar wrapImageModel = ({\n model: inputModel,\n middleware: middlewareArg,\n modelId,\n providerId\n}) => {\n const model = asImageModelV4(inputModel);\n return [...asArray10(middlewareArg)].reverse().reduce((wrappedModel, middleware) => {\n return doWrap3({ model: wrappedModel, middleware, modelId, providerId });\n }, model);\n};\nvar doWrap3 = ({\n model,\n middleware: {\n transformParams,\n wrapGenerate,\n overrideProvider,\n overrideModelId,\n overrideMaxImagesPerCall\n },\n modelId,\n providerId\n}) => {\n var _a25, _b25, _c;\n async function doTransform({ params }) {\n return transformParams ? await transformParams({ params, model }) : params;\n }\n const maxImagesPerCallRaw = (_a25 = overrideMaxImagesPerCall == null ? void 0 : overrideMaxImagesPerCall({ model })) != null ? _a25 : model.maxImagesPerCall;\n const maxImagesPerCall = maxImagesPerCallRaw instanceof Function ? maxImagesPerCallRaw.bind(model) : maxImagesPerCallRaw;\n return {\n specificationVersion: \"v4\",\n provider: (_b25 = providerId != null ? providerId : overrideProvider == null ? void 0 : overrideProvider({ model })) != null ? _b25 : model.provider,\n modelId: (_c = modelId != null ? modelId : overrideModelId == null ? void 0 : overrideModelId({ model })) != null ? _c : model.modelId,\n maxImagesPerCall,\n async doGenerate(params) {\n const transformedParams = await doTransform({ params });\n const doGenerate = async () => await model.doGenerate(transformedParams);\n return wrapGenerate ? await wrapGenerate({\n doGenerate,\n params: transformedParams,\n model\n }) : await doGenerate();\n }\n };\n};\n\n// src/middleware/wrap-provider.ts\nfunction wrapProvider({\n provider,\n languageModelMiddleware,\n imageModelMiddleware\n}) {\n const providerV4 = asProviderV4(provider);\n return {\n specificationVersion: \"v4\",\n languageModel: (modelId) => wrapLanguageModel({\n model: providerV4.languageModel(modelId),\n middleware: languageModelMiddleware\n }),\n embeddingModel: providerV4.embeddingModel,\n imageModel: (modelId) => {\n let model = providerV4.imageModel(modelId);\n if (imageModelMiddleware != null) {\n model = wrapImageModel({ model, middleware: imageModelMiddleware });\n }\n return model;\n },\n transcriptionModel: providerV4.transcriptionModel,\n speechModel: providerV4.speechModel,\n rerankingModel: providerV4.rerankingModel\n };\n}\n\n// src/realtime/audio-utils.ts\nfunction encodeRealtimeAudio(float32Array) {\n const buffer = new ArrayBuffer(float32Array.length * 2);\n const view = new DataView(buffer);\n for (let i = 0; i < float32Array.length; i++) {\n const s = Math.max(-1, Math.min(1, float32Array[i]));\n view.setInt16(i * 2, s < 0 ? s * 32768 : s * 32767, true);\n }\n const bytes = new Uint8Array(buffer);\n const chunkSize = 32768;\n let binary = \"\";\n for (let i = 0; i < bytes.length; i += chunkSize) {\n const chunk = bytes.subarray(i, i + chunkSize);\n binary += String.fromCharCode(...chunk);\n }\n return btoa(binary);\n}\nfunction decodeRealtimeAudio(base64Audio) {\n const binaryString = atob(base64Audio);\n const bytes = new Uint8Array(binaryString.length);\n for (let i = 0; i < binaryString.length; i++) {\n bytes[i] = binaryString.charCodeAt(i);\n }\n const pcm16 = new Int16Array(bytes.buffer);\n const float32 = new Float32Array(pcm16.length);\n for (let i = 0; i < pcm16.length; i++) {\n float32[i] = pcm16[i] / 32768;\n }\n return float32;\n}\nfunction resampleAudio(input, inputRate, outputRate) {\n if (inputRate === outputRate) {\n return input;\n }\n const ratio = inputRate / outputRate;\n const outputLength = Math.round(input.length / ratio);\n const output = new Float32Array(outputLength);\n for (let i = 0; i < outputLength; i++) {\n const srcIndex = i * ratio;\n const srcIndexFloor = Math.floor(srcIndex);\n const srcIndexCeil = Math.min(srcIndexFloor + 1, input.length - 1);\n const fraction = srcIndex - srcIndexFloor;\n output[i] = input[srcIndexFloor] * (1 - fraction) + input[srcIndexCeil] * fraction;\n }\n return output;\n}\n\n// src/realtime/get-realtime-tool-definitions.ts\nimport {\n asSchema as asSchema7\n} from \"@ai-sdk/provider-utils\";\nasync function getRealtimeToolDefinitions({\n tools,\n toolsContext = {}\n}) {\n const definitions = [];\n for (const [name25, tool2] of Object.entries(tools)) {\n const toolType = tool2.type;\n switch (toolType) {\n case void 0:\n case \"function\":\n case \"dynamic\": {\n const description = resolveRealtimeToolDescription({\n tool: tool2,\n toolName: name25,\n toolsContext\n });\n definitions.push({\n type: \"function\",\n name: name25,\n description,\n parameters: await asSchema7(tool2.inputSchema).jsonSchema\n });\n break;\n }\n case \"provider\":\n break;\n default: {\n const exhaustiveCheck = toolType;\n throw new Error(`Unsupported tool type: ${exhaustiveCheck}`);\n }\n }\n }\n return definitions;\n}\nfunction resolveRealtimeToolDescription({\n tool: tool2,\n toolName,\n toolsContext\n}) {\n return tool2.description === void 0 ? void 0 : typeof tool2.description === \"string\" ? tool2.description : tool2.description({\n context: toolsContext[toolName]\n });\n}\n\n// src/realtime/browser-realtime-audio.ts\nvar BrowserRealtimeAudio = class {\n constructor(options) {\n this.captureContext = null;\n this.captureProcessor = null;\n this.captureSource = null;\n this.captureStream = null;\n this.playbackContext = null;\n this.playbackQueue = [];\n this.playbackTime = 0;\n this.playbackStartTime = 0;\n this.activeSources = /* @__PURE__ */ new Set();\n this.isPlaying = false;\n this.captureSampleRate = options.captureSampleRate;\n this.playbackSampleRate = options.playbackSampleRate;\n this.onAudio = options.onAudio;\n this.onPlayingChange = options.onPlayingChange;\n this.onCapturingChange = options.onCapturingChange;\n }\n ensurePlaybackContext() {\n if (this.playbackContext == null) {\n this.playbackContext = new AudioContext({\n sampleRate: this.playbackSampleRate\n });\n }\n }\n startCapture(stream) {\n const ctx = new AudioContext({ sampleRate: this.captureSampleRate });\n this.captureContext = ctx;\n this.captureStream = stream;\n const source = ctx.createMediaStreamSource(stream);\n this.captureSource = source;\n const processor = ctx.createScriptProcessor(4096, 1, 1);\n this.captureProcessor = processor;\n processor.onaudioprocess = (event) => {\n const inputData = event.inputBuffer.getChannelData(0);\n const samples = resampleAudio(\n new Float32Array(inputData),\n ctx.sampleRate,\n this.captureSampleRate\n );\n this.onAudio(encodeRealtimeAudio(samples));\n };\n source.connect(processor);\n processor.connect(ctx.destination);\n this.onCapturingChange(true);\n }\n stopCapture() {\n var _a25, _b25, _c, _d;\n (_a25 = this.captureProcessor) == null ? void 0 : _a25.disconnect();\n (_b25 = this.captureSource) == null ? void 0 : _b25.disconnect();\n void ((_c = this.captureContext) == null ? void 0 : _c.close());\n (_d = this.captureStream) == null ? void 0 : _d.getTracks().forEach((track) => track.stop());\n this.captureProcessor = null;\n this.captureSource = null;\n this.captureContext = null;\n this.captureStream = null;\n this.onCapturingChange(false);\n }\n playAudio(base64Audio) {\n this.ensurePlaybackContext();\n this.playbackQueue.push(decodeRealtimeAudio(base64Audio));\n this.schedulePlayback();\n }\n stopPlayback() {\n this.playbackQueue = [];\n for (const source of this.activeSources) {\n try {\n source.stop();\n } catch (e) {\n }\n }\n this.activeSources.clear();\n if (this.playbackContext != null) {\n this.playbackTime = this.playbackContext.currentTime;\n }\n this.setPlaying(false);\n }\n getPlaybackOffsetMs() {\n const ctx = this.playbackContext;\n if (ctx == null) return 0;\n return (ctx.currentTime - this.playbackStartTime) * 1e3;\n }\n dispose() {\n var _a25;\n this.stopCapture();\n this.stopPlayback();\n void ((_a25 = this.playbackContext) == null ? void 0 : _a25.close());\n this.playbackContext = null;\n }\n setPlaying(isPlaying) {\n var _a25, _b25;\n if (isPlaying && !this.isPlaying) {\n this.playbackStartTime = (_b25 = (_a25 = this.playbackContext) == null ? void 0 : _a25.currentTime) != null ? _b25 : 0;\n }\n if (this.isPlaying !== isPlaying) {\n this.isPlaying = isPlaying;\n this.onPlayingChange(isPlaying);\n }\n }\n schedulePlayback() {\n const ctx = this.playbackContext;\n if (ctx == null || this.playbackQueue.length === 0) return;\n while (this.playbackQueue.length > 0) {\n const samples = this.playbackQueue.shift();\n const buffer = ctx.createBuffer(\n 1,\n samples.length,\n this.playbackSampleRate\n );\n buffer.getChannelData(0).set(samples);\n const source = ctx.createBufferSource();\n source.buffer = buffer;\n source.connect(ctx.destination);\n const startTime = Math.max(this.playbackTime, ctx.currentTime);\n source.start(startTime);\n this.playbackTime = startTime + buffer.duration;\n this.activeSources.add(source);\n this.setPlaying(true);\n source.onended = () => {\n this.activeSources.delete(source);\n if (this.playbackQueue.length === 0 && this.activeSources.size === 0) {\n this.setPlaying(false);\n }\n };\n }\n }\n};\n\n// src/realtime/browser-realtime-transport.ts\nimport { safeParseJSON as safeParseJSON5 } from \"@ai-sdk/provider-utils\";\nvar BrowserRealtimeTransport = class {\n constructor(options) {\n this.ws = null;\n this.sendQueue = Promise.resolve();\n this.model = options.model;\n this.onServerEvent = options.onServerEvent;\n this.onError = options.onError;\n this.onClose = options.onClose;\n }\n connect({\n token,\n url,\n onOpen\n }) {\n var _a25;\n (_a25 = this.ws) == null ? void 0 : _a25.close();\n this.ws = null;\n const wsConfig = this.model.getWebSocketConfig({ token, url });\n const ws = new WebSocket(wsConfig.url, wsConfig.protocols);\n this.ws = ws;\n ws.onopen = () => {\n if (this.ws !== ws) return;\n onOpen();\n };\n ws.onmessage = (messageEvent) => {\n void this.handleMessage(messageEvent);\n };\n ws.onerror = () => {\n this.onError(new Error(\"WebSocket connection error\"));\n };\n ws.onclose = () => {\n if (this.ws === ws) {\n this.ws = null;\n this.onClose();\n }\n };\n }\n disconnect() {\n var _a25;\n (_a25 = this.ws) == null ? void 0 : _a25.close();\n this.ws = null;\n }\n sendEvent(event) {\n this.sendQueue = this.sendQueue.then(async () => {\n const serialized = await this.model.serializeClientEvent(event);\n if (serialized != null) {\n this.sendRaw(serialized);\n }\n }).catch((error) => {\n this.onError(\n error instanceof Error ? error : new Error(`Failed to send realtime event: ${String(error)}`)\n );\n });\n }\n sendRaw(data) {\n var _a25;\n if (((_a25 = this.ws) == null ? void 0 : _a25.readyState) === WebSocket.OPEN) {\n if (typeof data === \"string\" || data instanceof ArrayBuffer || ArrayBuffer.isView(data) || data instanceof Blob) {\n this.ws.send(data);\n } else {\n this.ws.send(JSON.stringify(data));\n }\n }\n }\n dispose() {\n this.disconnect();\n }\n async handleMessage(messageEvent) {\n let text2;\n if (typeof messageEvent.data === \"string\") {\n text2 = messageEvent.data;\n } else if (messageEvent.data instanceof Blob) {\n text2 = await messageEvent.data.text();\n } else {\n text2 = new TextDecoder().decode(messageEvent.data);\n }\n const parseResult = await safeParseJSON5({ text: text2 });\n if (!parseResult.success) return;\n const rawEvent = parseResult.value;\n if (this.model.getHealthCheckResponse != null) {\n const autoResponse = this.model.getHealthCheckResponse(rawEvent);\n if (autoResponse != null) {\n this.sendRaw(autoResponse);\n }\n }\n const result = this.model.parseServerEvent(rawEvent);\n const events = Array.isArray(result) ? result : [result];\n for (const event of events) {\n await this.onServerEvent(event);\n }\n }\n};\n\n// src/realtime/realtime-event-reducer.ts\nimport { safeParseJSON as safeParseJSON6 } from \"@ai-sdk/provider-utils\";\nfunction createInitialRealtimeState() {\n return {\n status: \"disconnected\",\n messages: [],\n events: [],\n isCapturing: false,\n isPlaying: false\n };\n}\nvar RealtimeEventReducer = class {\n constructor(maxEvents = 500) {\n this.maxEvents = maxEvents;\n this.currentAssistantMessageId = null;\n this.textAccumulators = /* @__PURE__ */ new Map();\n this.toolArgAccumulators = /* @__PURE__ */ new Map();\n this.toolCallIdToMessageId = /* @__PURE__ */ new Map();\n this.toolCallIdToName = /* @__PURE__ */ new Map();\n this.inputAudioMessageInsertIndex = /* @__PURE__ */ new Map();\n this.itemIdToPartLocation = /* @__PURE__ */ new Map();\n }\n setStatus(state, status) {\n return { ...state, status };\n }\n setCapturing(state, isCapturing) {\n return { ...state, isCapturing };\n }\n setPlaying(state, isPlaying) {\n return { ...state, isPlaying };\n }\n addUserTextMessage(state, text2) {\n return {\n ...state,\n messages: [\n ...state.messages,\n {\n id: `user-${Date.now()}`,\n role: \"user\",\n parts: [{ type: \"text\", text: text2, state: \"done\" }]\n }\n ]\n };\n }\n addToolOutput(state, callId, result) {\n return {\n state: this.updateToolPartState(state, callId, result),\n output: {\n callId,\n name: this.toolCallIdToName.get(callId),\n output: JSON.stringify(result)\n }\n };\n }\n async reduceServerEvent(state, event) {\n var _a25;\n let nextState = this.pushEvent(state, event);\n const effects = [];\n switch (event.type) {\n case \"session-created\":\n case \"session-updated\": {\n if (nextState.status === \"connecting\") {\n nextState = this.setStatus(nextState, \"connected\");\n }\n break;\n }\n case \"audio-delta\": {\n effects.push({\n type: \"play-audio\",\n itemId: event.itemId,\n delta: event.delta\n });\n break;\n }\n case \"audio-committed\": {\n if (event.itemId != null) {\n this.inputAudioMessageInsertIndex.set(\n event.itemId,\n nextState.messages.length\n );\n }\n break;\n }\n case \"audio-transcript-delta\":\n case \"text-delta\": {\n nextState = this.appendTextDelta(nextState, event.itemId, event.delta);\n break;\n }\n case \"audio-transcript-done\": {\n nextState = this.finalizeText(\n nextState,\n event.itemId,\n event.transcript\n );\n break;\n }\n case \"text-done\": {\n nextState = this.finalizeText(nextState, event.itemId, event.text);\n break;\n }\n case \"input-transcription-completed\": {\n nextState = this.addInputTranscriptionMessage(\n nextState,\n event.itemId,\n event.transcript\n );\n break;\n }\n case \"response-created\":\n case \"response-done\": {\n this.currentAssistantMessageId = null;\n break;\n }\n case \"speech-started\": {\n this.currentAssistantMessageId = null;\n effects.push({ type: \"speech-started\" });\n break;\n }\n case \"function-call-arguments-delta\": {\n const { state: updatedState, messageId } = this.getOrCreateAssistantMessage(nextState);\n nextState = updatedState;\n this.toolCallIdToMessageId.set(event.callId, messageId);\n const acc = (_a25 = this.toolArgAccumulators.get(event.callId)) != null ? _a25 : \"\";\n this.toolArgAccumulators.set(event.callId, acc + event.delta);\n nextState = this.ensureToolPart(nextState, messageId, event.callId);\n break;\n }\n case \"function-call-arguments-done\": {\n this.toolArgAccumulators.delete(event.callId);\n this.toolCallIdToName.set(event.callId, event.name);\n const parseResult = await safeParseJSON6({ text: event.arguments });\n const parsedInput = parseResult.success ? parseResult.value : {};\n const messageId = this.toolCallIdToMessageId.get(event.callId);\n if (messageId != null) {\n nextState = this.markToolInputAvailable(\n nextState,\n messageId,\n event.callId,\n event.name,\n parsedInput\n );\n }\n if (!parseResult.success) {\n effects.push({\n type: \"error\",\n error: new Error(\n `Failed to parse tool arguments: ${event.arguments}`\n )\n });\n } else {\n effects.push({\n type: \"tool-call\",\n callId: event.callId,\n name: event.name,\n args: parsedInput,\n rawArguments: event.arguments\n });\n }\n break;\n }\n case \"error\": {\n effects.push({ type: \"error\", error: new Error(event.message) });\n break;\n }\n }\n return { state: nextState, effects };\n }\n pushEvent(state, event) {\n const events = [...state.events, event];\n return {\n ...state,\n events: events.length > this.maxEvents ? events.slice(-this.maxEvents) : events\n };\n }\n getOrCreateAssistantMessage(state) {\n if (this.currentAssistantMessageId != null) {\n return { state, messageId: this.currentAssistantMessageId };\n }\n const messageId = `assistant-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;\n this.currentAssistantMessageId = messageId;\n return {\n state: {\n ...state,\n messages: [\n ...state.messages,\n {\n id: messageId,\n role: \"assistant\",\n parts: []\n }\n ]\n },\n messageId\n };\n }\n addInputTranscriptionMessage(state, itemId, transcript) {\n var _a25;\n const messageId = `user-${itemId}`;\n const existingMessage = state.messages.find(\n (message) => message.id === messageId\n );\n if (existingMessage != null) {\n return {\n ...state,\n messages: state.messages.map(\n (message) => message.id === messageId ? {\n ...message,\n parts: [\n {\n type: \"text\",\n text: transcript,\n state: \"done\"\n }\n ]\n } : message\n )\n };\n }\n const insertIndex = Math.min(\n (_a25 = this.inputAudioMessageInsertIndex.get(itemId)) != null ? _a25 : state.messages.length,\n state.messages.length\n );\n const messages = [...state.messages];\n messages.splice(insertIndex, 0, {\n id: messageId,\n role: \"user\",\n parts: [\n {\n type: \"text\",\n text: transcript,\n state: \"done\"\n }\n ]\n });\n return {\n ...state,\n messages\n };\n }\n appendTextDelta(state, itemId, delta) {\n var _a25;\n const { state: stateWithMessage, messageId } = this.getOrCreateAssistantMessage(state);\n const acc = (_a25 = this.textAccumulators.get(itemId)) != null ? _a25 : \"\";\n const text2 = acc + delta;\n this.textAccumulators.set(itemId, text2);\n const location = this.itemIdToPartLocation.get(itemId);\n if (location != null) {\n return this.updateMessagePart(\n stateWithMessage,\n location.messageId,\n location.partIndex,\n { type: \"text\", text: text2, state: \"streaming\" }\n );\n }\n return {\n ...stateWithMessage,\n messages: stateWithMessage.messages.map((message) => {\n if (message.id !== messageId) return message;\n const partIndex = message.parts.length;\n this.itemIdToPartLocation.set(itemId, { messageId, partIndex });\n return {\n ...message,\n parts: [\n ...message.parts,\n { type: \"text\", text: text2, state: \"streaming\" }\n ]\n };\n })\n };\n }\n finalizeText(state, itemId, finalText) {\n var _a25;\n const text2 = (_a25 = finalText != null ? finalText : this.textAccumulators.get(itemId)) != null ? _a25 : \"\";\n this.textAccumulators.delete(itemId);\n const location = this.itemIdToPartLocation.get(itemId);\n if (location == null) return state;\n this.itemIdToPartLocation.delete(itemId);\n return this.updateMessagePart(\n state,\n location.messageId,\n location.partIndex,\n { type: \"text\", text: text2, state: \"done\" }\n );\n }\n ensureToolPart(state, messageId, callId) {\n return {\n ...state,\n messages: state.messages.map((message) => {\n if (message.id !== messageId) return message;\n const existingPart = message.parts.find(\n (part) => part.type === \"dynamic-tool\" && part.toolCallId === callId\n );\n if (existingPart != null) return message;\n return {\n ...message,\n parts: [\n ...message.parts,\n {\n type: \"dynamic-tool\",\n toolName: \"\",\n toolCallId: callId,\n state: \"input-streaming\",\n input: void 0\n }\n ]\n };\n })\n };\n }\n markToolInputAvailable(state, messageId, callId, name25, input) {\n return {\n ...state,\n messages: state.messages.map((message) => {\n if (message.id !== messageId) return message;\n return {\n ...message,\n parts: message.parts.map((part) => {\n if (part.type !== \"dynamic-tool\") return part;\n const toolPart = part;\n if (toolPart.toolCallId !== callId) return part;\n return {\n ...toolPart,\n toolName: name25,\n state: \"input-available\",\n input\n };\n })\n };\n })\n };\n }\n updateToolPartState(state, callId, result) {\n const messageId = this.toolCallIdToMessageId.get(callId);\n if (messageId == null) return state;\n return {\n ...state,\n messages: state.messages.map((message) => {\n if (message.id !== messageId) return message;\n return {\n ...message,\n parts: message.parts.map((part) => {\n if (part.type !== \"dynamic-tool\") return part;\n const toolPart = part;\n if (toolPart.toolCallId !== callId) return part;\n return {\n ...toolPart,\n state: \"output-available\",\n output: result\n };\n })\n };\n })\n };\n }\n updateMessagePart(state, messageId, partIndex, part) {\n return {\n ...state,\n messages: state.messages.map((message) => {\n if (message.id !== messageId) return message;\n const parts = [...message.parts];\n parts[partIndex] = part;\n return { ...message, parts };\n })\n };\n }\n};\n\n// src/realtime/realtime-session.ts\nvar AbstractRealtimeSession = class {\n constructor(options) {\n this.state = createInitialRealtimeState();\n this.currentResponseItemId = null;\n // Tool calls requested by the current (tool-bearing) response, the outputs\n // that have been submitted for them, and whether that response has finished\n // delivering its tool calls. Used to request a single response only once\n // every tool output for the turn has been submitted.\n this.toolCallsInResponse = /* @__PURE__ */ new Set();\n this.submittedToolOutputs = /* @__PURE__ */ new Set();\n this.responseToolCallsClosed = false;\n var _a25, _b25, _c, _d, _e, _f, _g, _h;\n this.model = options.model;\n this.api = options.api;\n this.sessionConfig = options.sessionConfig;\n this.maxEvents = (_a25 = options.maxEvents) != null ? _a25 : 500;\n this.reducer = new RealtimeEventReducer(this.maxEvents);\n this.onToolCall = options.onToolCall;\n this.onEvent = options.onEvent;\n this.onError = options.onError;\n const sampleRate = (_b25 = options.sampleRate) != null ? _b25 : 24e3;\n const captureSampleRate = (_e = (_d = (_c = options.sessionConfig) == null ? void 0 : _c.inputAudioFormat) == null ? void 0 : _d.rate) != null ? _e : sampleRate;\n const playbackSampleRate = (_h = (_g = (_f = options.sessionConfig) == null ? void 0 : _f.outputAudioFormat) == null ? void 0 : _g.rate) != null ? _h : sampleRate;\n this.transport = new BrowserRealtimeTransport({\n model: this.model,\n onServerEvent: (event) => this.handleServerEvent(event),\n onError: (error) => {\n var _a26;\n this.applyState(this.reducer.setStatus(this.state, \"error\"));\n (_a26 = this.onError) == null ? void 0 : _a26.call(this, error);\n },\n onClose: () => {\n this.applyState(this.reducer.setStatus(this.state, \"disconnected\"));\n }\n });\n this.audio = new BrowserRealtimeAudio({\n captureSampleRate,\n playbackSampleRate,\n onAudio: (audio) => this.sendAudio(audio),\n onCapturingChange: (isCapturing) => {\n this.applyState(this.reducer.setCapturing(this.state, isCapturing));\n },\n onPlayingChange: (isPlaying) => {\n this.applyState(this.reducer.setPlaying(this.state, isPlaying));\n }\n });\n }\n // ── Connection ─────────────────────────────────────────────────────\n async connect() {\n var _a25;\n this.applyState(this.reducer.setStatus(this.state, \"connecting\"));\n try {\n const response = await fetch(this.api.token, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ sessionConfig: this.sessionConfig })\n });\n if (!response.ok) {\n throw new Error(`Failed to fetch realtime setup: ${response.status}`);\n }\n const setupData = await response.json();\n const { token, url, tools: toolDefinitions } = setupData;\n const config = {\n ...this.sessionConfig,\n tools: toolDefinitions\n };\n this.audio.ensurePlaybackContext();\n this.transport.connect({\n token,\n url,\n onOpen: () => {\n this.sendEvent({\n type: \"session-update\",\n config\n });\n }\n });\n } catch (error) {\n this.applyState(this.reducer.setStatus(this.state, \"error\"));\n (_a25 = this.onError) == null ? void 0 : _a25.call(\n this,\n error instanceof Error ? error : new Error(`Connection failed: ${String(error)}`)\n );\n }\n }\n disconnect() {\n this.transport.disconnect();\n this.applyState(this.reducer.setStatus(this.state, \"disconnected\"));\n }\n // ── Sending events ─────────────────────────────────────────────────\n sendEvent(event) {\n this.transport.sendEvent(event);\n }\n sendTextMessage(text2) {\n this.sendEvent({\n type: \"conversation-item-create\",\n item: { type: \"text-message\", role: \"user\", text: text2 }\n });\n this.sendEvent({ type: \"response-create\" });\n this.applyState(this.reducer.addUserTextMessage(this.state, text2));\n }\n sendAudio(base64Audio) {\n this.sendEvent({ type: \"input-audio-append\", audio: base64Audio });\n }\n commitAudio() {\n this.sendEvent({ type: \"input-audio-commit\" });\n }\n clearAudioBuffer() {\n this.sendEvent({ type: \"input-audio-clear\" });\n }\n requestResponse(options) {\n this.sendEvent({\n type: \"response-create\",\n ...options != null ? { options } : {}\n });\n }\n cancelResponse() {\n this.sendEvent({ type: \"response-cancel\" });\n }\n // ── Tool output ───────────────────────────────────────────────────\n addToolOutput(callId, result) {\n const { state, output } = this.reducer.addToolOutput(\n this.state,\n callId,\n result\n );\n this.applyState(state);\n this.sendEvent({\n type: \"conversation-item-create\",\n item: {\n type: \"function-call-output\",\n callId: output.callId,\n name: output.name,\n output: output.output\n }\n });\n this.submittedToolOutputs.add(callId);\n this.maybeRequestToolResponse();\n }\n /**\n * Requests a single response once the tool-bearing response has finished\n * delivering its tool calls and every one of them has an output. Requesting a\n * response after each individual output can cause the model to continue\n * without the full tool context on multi-tool turns.\n */\n maybeRequestToolResponse() {\n if (!this.responseToolCallsClosed) return;\n if (this.toolCallsInResponse.size === 0) return;\n for (const callId of this.toolCallsInResponse) {\n if (!this.submittedToolOutputs.has(callId)) return;\n }\n this.sendEvent({ type: \"response-create\" });\n this.toolCallsInResponse.clear();\n this.submittedToolOutputs.clear();\n this.responseToolCallsClosed = false;\n }\n // ── Audio capture ──────────────────────────────────────────────────\n startAudioCapture(stream) {\n this.audio.startCapture(stream);\n }\n stopAudioCapture() {\n this.audio.stopCapture();\n }\n // ── Playback ───────────────────────────────────────────────────────\n stopPlayback() {\n this.audio.stopPlayback();\n }\n // ── Cleanup ────────────────────────────────────────────────────────\n dispose() {\n this.transport.dispose();\n this.audio.dispose();\n this.applyState(\n this.reducer.setStatus(\n this.reducer.setPlaying(\n this.reducer.setCapturing(this.state, false),\n false\n ),\n \"disconnected\"\n )\n );\n }\n // ── Private helpers ────────────────────────────────────────────────\n applyState(nextState) {\n const previousState = this.state;\n this.state = nextState;\n if (previousState.status !== nextState.status) {\n this.setState(\"status\", nextState.status);\n }\n if (previousState.messages !== nextState.messages) {\n this.setState(\"messages\", nextState.messages);\n }\n if (previousState.events !== nextState.events) {\n this.setState(\"events\", nextState.events);\n }\n if (previousState.isCapturing !== nextState.isCapturing) {\n this.setState(\"isCapturing\", nextState.isCapturing);\n }\n if (previousState.isPlaying !== nextState.isPlaying) {\n this.setState(\"isPlaying\", nextState.isPlaying);\n }\n }\n async executeToolCall({\n name: name25,\n args,\n callId\n }) {\n var _a25, _b25;\n if (this.onToolCall == null) {\n (_a25 = this.onError) == null ? void 0 : _a25.call(this, new Error(`No handler provided for tool \"${name25}\"`));\n return;\n }\n try {\n const result = await this.onToolCall({\n toolCall: { toolCallId: callId, toolName: name25, args }\n });\n if (result !== void 0) {\n this.addToolOutput(callId, result);\n }\n } catch (error) {\n (_b25 = this.onError) == null ? void 0 : _b25.call(\n this,\n error instanceof Error ? error : new Error(`Client tool execution failed: ${String(error)}`)\n );\n }\n }\n async handleServerEvent(event) {\n var _a25;\n const result = await this.reducer.reduceServerEvent(this.state, event);\n this.applyState(result.state);\n (_a25 = this.onEvent) == null ? void 0 : _a25.call(this, event);\n for (const effect of result.effects) {\n this.handleReducerEffect(effect);\n }\n if (event.type === \"response-done\" && this.toolCallsInResponse.size > 0) {\n this.responseToolCallsClosed = true;\n this.maybeRequestToolResponse();\n }\n }\n handleReducerEffect(effect) {\n var _a25;\n switch (effect.type) {\n case \"play-audio\": {\n this.currentResponseItemId = effect.itemId;\n this.audio.playAudio(effect.delta);\n break;\n }\n case \"speech-started\": {\n if (this.state.isPlaying) {\n const playedMs = this.audio.getPlaybackOffsetMs();\n this.audio.stopPlayback();\n if (this.currentResponseItemId != null) {\n this.sendEvent({\n type: \"conversation-item-truncate\",\n itemId: this.currentResponseItemId,\n contentIndex: 0,\n audioEndMs: Math.round(playedMs)\n });\n }\n }\n break;\n }\n case \"tool-call\": {\n this.toolCallsInResponse.add(effect.callId);\n void this.executeToolCall({\n name: effect.name,\n args: effect.args,\n callId: effect.callId\n });\n break;\n }\n case \"error\": {\n (_a25 = this.onError) == null ? void 0 : _a25.call(this, effect.error);\n break;\n }\n }\n }\n};\n\n// src/registry/custom-provider.ts\nimport {\n NoSuchModelError as NoSuchModelError2\n} from \"@ai-sdk/provider\";\nfunction customProvider({\n languageModels,\n embeddingModels,\n imageModels,\n transcriptionModels,\n speechModels,\n rerankingModels,\n videoModels,\n files,\n skills,\n fallbackProvider: fallbackProviderArg\n}) {\n const fallbackProvider = fallbackProviderArg == null ? void 0 : asProviderV4(fallbackProviderArg);\n const baseProvider = {\n specificationVersion: \"v4\",\n languageModel(modelId) {\n if (languageModels != null && modelId in languageModels) {\n return resolveLanguageModel(languageModels[modelId]);\n }\n if (fallbackProvider) {\n return fallbackProvider.languageModel(modelId);\n }\n throw new NoSuchModelError2({ modelId, modelType: \"languageModel\" });\n },\n embeddingModel(modelId) {\n if (embeddingModels != null && modelId in embeddingModels) {\n return resolveEmbeddingModel(embeddingModels[modelId]);\n }\n if (fallbackProvider) {\n return fallbackProvider.embeddingModel(modelId);\n }\n throw new NoSuchModelError2({ modelId, modelType: \"embeddingModel\" });\n },\n imageModel(modelId) {\n if (imageModels != null && modelId in imageModels) {\n return resolveImageModel(imageModels[modelId]);\n }\n if (fallbackProvider == null ? void 0 : fallbackProvider.imageModel) {\n return fallbackProvider.imageModel(modelId);\n }\n throw new NoSuchModelError2({ modelId, modelType: \"imageModel\" });\n },\n transcriptionModel(modelId) {\n if (transcriptionModels != null && modelId in transcriptionModels) {\n const model = resolveTranscriptionModel(transcriptionModels[modelId]);\n if (model != null) {\n return model;\n }\n }\n if (fallbackProvider == null ? void 0 : fallbackProvider.transcriptionModel) {\n return fallbackProvider.transcriptionModel(modelId);\n }\n throw new NoSuchModelError2({ modelId, modelType: \"transcriptionModel\" });\n },\n speechModel(modelId) {\n if (speechModels != null && modelId in speechModels) {\n const model = resolveSpeechModel(speechModels[modelId]);\n if (model != null) {\n return model;\n }\n }\n if (fallbackProvider == null ? void 0 : fallbackProvider.speechModel) {\n return fallbackProvider.speechModel(modelId);\n }\n throw new NoSuchModelError2({ modelId, modelType: \"speechModel\" });\n },\n rerankingModel(modelId) {\n if (rerankingModels != null && modelId in rerankingModels) {\n return resolveRerankingModel(rerankingModels[modelId]);\n }\n if (fallbackProvider == null ? void 0 : fallbackProvider.rerankingModel) {\n return fallbackProvider.rerankingModel(modelId);\n }\n throw new NoSuchModelError2({ modelId, modelType: \"rerankingModel\" });\n },\n videoModel(modelId) {\n if (videoModels != null && modelId in videoModels) {\n return resolveVideoModel(videoModels[modelId]);\n }\n const videoModel = fallbackProvider == null ? void 0 : fallbackProvider.videoModel;\n if (videoModel) {\n return videoModel(modelId);\n }\n throw new NoSuchModelError2({ modelId, modelType: \"videoModel\" });\n }\n };\n const filesAndSkills = {\n ...files != null || (fallbackProvider == null ? void 0 : fallbackProvider.files) != null ? {\n files() {\n return files != null ? files : fallbackProvider.files();\n }\n } : {},\n ...skills != null || (fallbackProvider == null ? void 0 : fallbackProvider.skills) != null ? {\n skills() {\n return skills != null ? skills : fallbackProvider.skills();\n }\n } : {}\n };\n return Object.assign(baseProvider, filesAndSkills);\n}\n\n// src/registry/no-such-provider-error.ts\nimport { AISDKError as AISDKError28, NoSuchModelError as NoSuchModelError3 } from \"@ai-sdk/provider\";\nvar name24 = \"AI_NoSuchProviderError\";\nvar marker24 = `vercel.ai.error.${name24}`;\nvar symbol24 = Symbol.for(marker24);\nvar _a24, _b24;\nvar NoSuchProviderError = class extends (_b24 = NoSuchModelError3, _a24 = symbol24, _b24) {\n constructor({\n modelId,\n modelType,\n providerId,\n availableProviders,\n message = `No such provider: ${providerId} (available providers: ${availableProviders.join()})`\n }) {\n super({ errorName: name24, modelId, modelType, message });\n this[_a24] = true;\n this.providerId = providerId;\n this.availableProviders = availableProviders;\n }\n static isInstance(error) {\n return AISDKError28.hasMarker(error, marker24);\n }\n};\n\n// src/registry/provider-registry.ts\nimport {\n NoSuchModelError as NoSuchModelError4\n} from \"@ai-sdk/provider\";\nfunction createProviderRegistry(providers, {\n separator = \":\",\n languageModelMiddleware,\n imageModelMiddleware\n} = {}) {\n const registry = new DefaultProviderRegistry({\n separator,\n languageModelMiddleware,\n imageModelMiddleware\n });\n for (const [id, provider] of Object.entries(providers)) {\n registry.registerProvider({ id, provider });\n }\n return registry;\n}\nvar experimental_createProviderRegistry = createProviderRegistry;\nvar DefaultProviderRegistry = class {\n constructor({\n separator,\n languageModelMiddleware,\n imageModelMiddleware\n }) {\n this.providers = {};\n this.separator = separator;\n this.languageModelMiddleware = languageModelMiddleware;\n this.imageModelMiddleware = imageModelMiddleware;\n }\n registerProvider({\n id,\n provider\n }) {\n var _a25;\n const providerV4 = asProviderV4(provider);\n const videoModel = (_a25 = provider.videoModel) == null ? void 0 : _a25.bind(provider);\n this.providers[id] = videoModel == null ? providerV4 : Object.assign(Object.create(Object.getPrototypeOf(providerV4)), {\n ...providerV4,\n videoModel: (modelId) => asVideoModelV4(videoModel(modelId))\n });\n }\n getProvider(id, modelType) {\n const provider = this.providers[id];\n if (provider == null) {\n throw new NoSuchProviderError({\n modelId: id,\n modelType,\n providerId: id,\n availableProviders: Object.keys(this.providers)\n });\n }\n return provider;\n }\n splitId(id, modelType) {\n const index = id.indexOf(this.separator);\n if (index === -1) {\n throw new NoSuchModelError4({\n modelId: id,\n modelType,\n message: `Invalid ${modelType} id for registry: ${id} (must be in the format \"providerId${this.separator}modelId\")`\n });\n }\n return [id.slice(0, index), id.slice(index + this.separator.length)];\n }\n languageModel(id) {\n var _a25, _b25;\n const [providerId, modelId] = this.splitId(id, \"languageModel\");\n let model = (_b25 = (_a25 = this.getProvider(providerId, \"languageModel\")).languageModel) == null ? void 0 : _b25.call(\n _a25,\n modelId\n );\n if (model == null) {\n throw new NoSuchModelError4({ modelId: id, modelType: \"languageModel\" });\n }\n if (this.languageModelMiddleware != null) {\n model = wrapLanguageModel({\n model,\n middleware: this.languageModelMiddleware\n });\n }\n return model;\n }\n embeddingModel(id) {\n var _a25;\n const [providerId, modelId] = this.splitId(id, \"embeddingModel\");\n const provider = this.getProvider(providerId, \"embeddingModel\");\n const model = (_a25 = provider.embeddingModel) == null ? void 0 : _a25.call(provider, modelId);\n if (model == null) {\n throw new NoSuchModelError4({\n modelId: id,\n modelType: \"embeddingModel\"\n });\n }\n return model;\n }\n imageModel(id) {\n var _a25;\n const [providerId, modelId] = this.splitId(id, \"imageModel\");\n const provider = this.getProvider(providerId, \"imageModel\");\n let model = (_a25 = provider.imageModel) == null ? void 0 : _a25.call(provider, modelId);\n if (model == null) {\n throw new NoSuchModelError4({ modelId: id, modelType: \"imageModel\" });\n }\n if (this.imageModelMiddleware != null) {\n model = wrapImageModel({\n model,\n middleware: this.imageModelMiddleware\n });\n }\n return model;\n }\n transcriptionModel(id) {\n var _a25;\n const [providerId, modelId] = this.splitId(id, \"transcriptionModel\");\n const provider = this.getProvider(providerId, \"transcriptionModel\");\n const model = (_a25 = provider.transcriptionModel) == null ? void 0 : _a25.call(provider, modelId);\n if (model == null) {\n throw new NoSuchModelError4({\n modelId: id,\n modelType: \"transcriptionModel\"\n });\n }\n return model;\n }\n speechModel(id) {\n var _a25;\n const [providerId, modelId] = this.splitId(id, \"speechModel\");\n const provider = this.getProvider(providerId, \"speechModel\");\n const model = (_a25 = provider.speechModel) == null ? void 0 : _a25.call(provider, modelId);\n if (model == null) {\n throw new NoSuchModelError4({ modelId: id, modelType: \"speechModel\" });\n }\n return model;\n }\n rerankingModel(id) {\n var _a25;\n const [providerId, modelId] = this.splitId(id, \"rerankingModel\");\n const provider = this.getProvider(providerId, \"rerankingModel\");\n const model = (_a25 = provider.rerankingModel) == null ? void 0 : _a25.call(provider, modelId);\n if (model == null) {\n throw new NoSuchModelError4({ modelId: id, modelType: \"rerankingModel\" });\n }\n return model;\n }\n videoModel(id) {\n var _a25;\n const [providerId, modelId] = this.splitId(id, \"videoModel\");\n const provider = this.getProvider(providerId, \"videoModel\");\n const model = (_a25 = provider.videoModel) == null ? void 0 : _a25.call(provider, modelId);\n if (model == null) {\n throw new NoSuchModelError4({ modelId: id, modelType: \"videoModel\" });\n }\n return asVideoModelV4(model);\n }\n files(id) {\n var _a25;\n const provider = this.getProvider(id, \"languageModel\");\n const files = (_a25 = provider.files) == null ? void 0 : _a25.call(provider);\n if (files == null) {\n throw new Error(\n `The provider \"${id}\" does not support file uploads. Make sure it exposes a files() method.`\n );\n }\n return files;\n }\n skills(id) {\n var _a25;\n const provider = this.getProvider(id, \"languageModel\");\n const skills = (_a25 = provider.skills) == null ? void 0 : _a25.call(provider);\n if (skills == null) {\n throw new Error(\n `The provider \"${id}\" does not support skills. Make sure it exposes a skills() method.`\n );\n }\n return skills;\n }\n};\n\n// src/rerank/rerank.ts\nimport {\n createIdGenerator as createIdGenerator8\n} from \"@ai-sdk/provider-utils\";\nvar originalGenerateCallId6 = createIdGenerator8({\n prefix: \"call\",\n size: 24\n});\nasync function rerank({\n model: modelArg,\n documents,\n query,\n topN,\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n providerOptions,\n experimental_telemetry,\n telemetry = experimental_telemetry,\n onStart,\n experimental_onStart,\n onEnd,\n experimental_onEnd,\n _internal: { generateCallId = originalGenerateCallId6 } = {}\n}) {\n var _a25;\n const model = resolveRerankingModel(modelArg);\n const callId = generateCallId();\n const resolvedOnStart = onStart != null ? onStart : experimental_onStart;\n const resolvedOnEnd = onEnd != null ? onEnd : experimental_onEnd;\n const telemetryDispatcher = createTelemetryDispatcher({\n telemetry\n });\n const runInTracingChannelSpan = (_a25 = telemetryDispatcher.runInTracingChannelSpan) != null ? _a25 : (async ({ execute }) => await execute());\n if (documents.length === 0) {\n await notify({\n event: {\n callId,\n operationId: \"ai.rerank\",\n provider: model.provider,\n modelId: model.modelId,\n documents,\n query,\n topN,\n maxRetries: maxRetriesArg != null ? maxRetriesArg : 2,\n headers,\n providerOptions\n },\n callbacks: [resolvedOnStart, telemetryDispatcher.onStart]\n });\n await notify({\n event: {\n callId,\n operationId: \"ai.rerank\",\n provider: model.provider,\n modelId: model.modelId,\n documents,\n query,\n ranking: [],\n warnings: [],\n providerMetadata: void 0,\n response: {\n timestamp: /* @__PURE__ */ new Date(),\n modelId: model.modelId\n }\n },\n callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]\n });\n return new DefaultRerankResult({\n originalDocuments: [],\n ranking: [],\n providerMetadata: void 0,\n response: {\n timestamp: /* @__PURE__ */ new Date(),\n modelId: model.modelId\n }\n });\n }\n const { maxRetries, retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const documentsToSend = typeof documents[0] === \"string\" ? { type: \"text\", values: documents } : { type: \"object\", values: documents };\n const startEvent = {\n callId,\n operationId: \"ai.rerank\",\n provider: model.provider,\n modelId: model.modelId,\n documents,\n query,\n topN,\n maxRetries,\n headers,\n providerOptions\n };\n return await runInTracingChannelSpan({\n type: \"rerank\",\n event: startEvent,\n execute: async () => {\n var _a26, _b25, _c, _d, _e;\n await notify({\n event: startEvent,\n callbacks: [resolvedOnStart, telemetryDispatcher.onStart]\n });\n try {\n const { ranking, response, providerMetadata, warnings } = await retry(\n async () => {\n await notify({\n event: {\n callId,\n operationId: \"ai.rerank.doRerank\",\n provider: model.provider,\n modelId: model.modelId,\n documents,\n documentsType: documentsToSend.type,\n query,\n topN\n },\n callbacks: [telemetryDispatcher.onRerankStart]\n });\n const modelResponse = await model.doRerank({\n documents: documentsToSend,\n query,\n topN,\n providerOptions,\n abortSignal,\n headers\n });\n const ranking2 = modelResponse.ranking;\n await notify({\n event: {\n callId,\n operationId: \"ai.rerank.doRerank\",\n provider: model.provider,\n modelId: model.modelId,\n documentsType: documentsToSend.type,\n ranking: ranking2\n },\n callbacks: [telemetryDispatcher.onRerankEnd]\n });\n return {\n ranking: ranking2,\n providerMetadata: modelResponse.providerMetadata,\n response: modelResponse.response,\n warnings: modelResponse.warnings\n };\n }\n );\n logWarnings({\n warnings: warnings != null ? warnings : [],\n provider: model.provider,\n model: model.modelId\n });\n await notify({\n event: {\n callId,\n operationId: \"ai.rerank\",\n provider: model.provider,\n modelId: model.modelId,\n documents,\n query,\n ranking: ranking.map((r) => ({\n originalIndex: r.index,\n score: r.relevanceScore,\n document: documents[r.index]\n })),\n warnings: warnings != null ? warnings : [],\n providerMetadata,\n response: {\n id: response == null ? void 0 : response.id,\n timestamp: (_a26 = response == null ? void 0 : response.timestamp) != null ? _a26 : /* @__PURE__ */ new Date(),\n modelId: (_b25 = response == null ? void 0 : response.modelId) != null ? _b25 : model.modelId,\n headers: response == null ? void 0 : response.headers,\n body: response == null ? void 0 : response.body\n }\n },\n callbacks: [resolvedOnEnd, telemetryDispatcher.onEnd]\n });\n return new DefaultRerankResult({\n originalDocuments: documents,\n ranking: ranking.map((ranking2) => ({\n originalIndex: ranking2.index,\n score: ranking2.relevanceScore,\n document: documents[ranking2.index]\n })),\n providerMetadata,\n response: {\n id: response == null ? void 0 : response.id,\n timestamp: (_c = response == null ? void 0 : response.timestamp) != null ? _c : /* @__PURE__ */ new Date(),\n modelId: (_d = response == null ? void 0 : response.modelId) != null ? _d : model.modelId,\n headers: response == null ? void 0 : response.headers,\n body: response == null ? void 0 : response.body\n }\n });\n } catch (error) {\n await ((_e = telemetryDispatcher.onError) == null ? void 0 : _e.call(telemetryDispatcher, { callId, error }));\n throw error;\n }\n }\n });\n}\nvar DefaultRerankResult = class {\n constructor(options) {\n this.originalDocuments = options.originalDocuments;\n this.ranking = options.ranking;\n this.response = options.response;\n this.providerMetadata = options.providerMetadata;\n }\n get rerankedDocuments() {\n return this.ranking.map((ranking) => ranking.document);\n }\n};\n\n// src/transcribe/transcribe.ts\nimport {\n detectMediaType as detectMediaType5,\n withUserAgentSuffix as withUserAgentSuffix13\n} from \"@ai-sdk/provider-utils\";\nvar defaultDownload2 = createDownload();\nasync function transcribe({\n model,\n audio,\n providerOptions = {},\n maxRetries: maxRetriesArg,\n abortSignal,\n headers,\n download: downloadFn = defaultDownload2\n}) {\n const resolvedModel = resolveTranscriptionModel(model);\n if (!resolvedModel) {\n throw new Error(\"Model could not be resolved\");\n }\n const { retry } = prepareRetries({\n maxRetries: maxRetriesArg,\n abortSignal\n });\n const headersWithUserAgent = withUserAgentSuffix13(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const audioData = audio instanceof URL ? (await downloadFn({ url: audio, abortSignal })).data : convertDataContentToUint8Array(audio);\n const result = await retry(\n () => {\n var _a25;\n return resolvedModel.doGenerate({\n audio: audioData,\n abortSignal,\n headers: headersWithUserAgent,\n providerOptions,\n mediaType: (_a25 = detectMediaType5({\n data: audioData,\n topLevelType: \"audio\"\n })) != null ? _a25 : \"audio/wav\"\n });\n }\n );\n logWarnings({\n warnings: result.warnings,\n provider: resolvedModel.provider,\n model: resolvedModel.modelId\n });\n if (!result.text) {\n throw new NoTranscriptGeneratedError({ responses: [result.response] });\n }\n return new DefaultTranscriptionResult({\n text: result.text,\n segments: result.segments,\n language: result.language,\n durationInSeconds: result.durationInSeconds,\n warnings: result.warnings,\n responses: [result.response],\n providerMetadata: result.providerMetadata\n });\n}\nvar DefaultTranscriptionResult = class {\n constructor(options) {\n var _a25;\n this.text = options.text;\n this.segments = options.segments;\n this.language = options.language;\n this.durationInSeconds = options.durationInSeconds;\n this.warnings = options.warnings;\n this.responses = options.responses;\n this.providerMetadata = (_a25 = options.providerMetadata) != null ? _a25 : {};\n }\n};\n\n// src/transcribe/stream-transcribe.ts\nimport {\n UnsupportedFunctionalityError as UnsupportedFunctionalityError5\n} from \"@ai-sdk/provider\";\nimport {\n DelayedPromise as DelayedPromise3,\n withUserAgentSuffix as withUserAgentSuffix14\n} from \"@ai-sdk/provider-utils\";\nfunction streamTranscribe({\n model,\n audio,\n inputAudioFormat,\n providerOptions = {},\n abortSignal,\n headers,\n includeRawChunks,\n _internal: { currentDate = () => /* @__PURE__ */ new Date() } = {}\n}) {\n var _a25;\n const resolvedModel = resolveTranscriptionModel(model);\n if (!resolvedModel) {\n throw new Error(\"Model could not be resolved\");\n }\n const doStream = (_a25 = resolvedModel.doStream) == null ? void 0 : _a25.bind(resolvedModel);\n if (doStream == null) {\n throw new UnsupportedFunctionalityError5({\n functionality: \"streaming transcription\",\n message: `The ${resolvedModel.provider} model \"${resolvedModel.modelId}\" does not support streaming transcription.` + (typeof model === \"string\" ? \" String model IDs resolve through the global provider (AI Gateway by default). If that provider does not support streaming transcription, pass a provider model instance instead (e.g. openai.transcription('gpt-realtime-whisper')) or upgrade @ai-sdk/gateway to a version with streaming transcription support.\" : \"\")\n });\n }\n const headersWithUserAgent = withUserAgentSuffix14(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const textPromise = new DelayedPromise3();\n const segmentsPromise = new DelayedPromise3();\n const languagePromise = new DelayedPromise3();\n const durationInSecondsPromise = new DelayedPromise3();\n const warningsPromise = new DelayedPromise3();\n const responsesPromise = new DelayedPromise3();\n const providerMetadataPromise = new DelayedPromise3();\n const rejectPendingPromises = (error) => {\n for (const promise of [\n textPromise,\n segmentsPromise,\n languagePromise,\n durationInSecondsPromise,\n warningsPromise,\n responsesPromise,\n providerMetadataPromise\n ]) {\n if (promise.isPending()) {\n promise.reject(error);\n }\n }\n };\n const startedAt = currentDate();\n let response;\n const currentResponseMetadata = () => response != null ? response : { timestamp: startedAt, modelId: resolvedModel.modelId };\n const resolveWarnings = (warnings) => {\n warningsPromise.resolve(warnings);\n logWarnings({\n warnings,\n provider: resolvedModel.provider,\n model: resolvedModel.modelId\n });\n };\n const pipeAbortController = new AbortController();\n const transformer = {\n transform(value, controller) {\n var _a26, _b25, _c, _d;\n switch (value.type) {\n case \"stream-start\": {\n resolveWarnings(value.warnings);\n break;\n }\n case \"response-metadata\": {\n response = {\n timestamp: (_a26 = value.timestamp) != null ? _a26 : currentResponseMetadata().timestamp,\n modelId: (_b25 = value.modelId) != null ? _b25 : currentResponseMetadata().modelId,\n headers: (_c = value.headers) != null ? _c : response == null ? void 0 : response.headers\n };\n break;\n }\n case \"transcript-delta\":\n case \"transcript-partial\":\n case \"transcript-final\":\n case \"raw\":\n case \"error\": {\n controller.enqueue(value);\n break;\n }\n case \"finish\": {\n if (!warningsPromise.isResolved()) {\n resolveWarnings([]);\n }\n if (!value.text) {\n throw new NoTranscriptGeneratedError({\n responses: [currentResponseMetadata()]\n });\n }\n textPromise.resolve(value.text);\n segmentsPromise.resolve(value.segments);\n languagePromise.resolve(value.language);\n durationInSecondsPromise.resolve(value.durationInSeconds);\n responsesPromise.resolve([currentResponseMetadata()]);\n providerMetadataPromise.resolve((_d = value.providerMetadata) != null ? _d : {});\n break;\n }\n }\n },\n flush() {\n if (textPromise.isPending()) {\n throw new NoTranscriptGeneratedError({\n responses: [currentResponseMetadata()]\n });\n }\n },\n cancel(reason) {\n pipeAbortController.abort(\n reason != null ? reason : new Error(\"Transcription stream was cancelled.\")\n );\n }\n };\n const transform = new TransformStream(transformer);\n void (async () => {\n var _a26, _b25, _c, _d, _e;\n const result = await doStream({\n audio,\n inputAudioFormat,\n providerOptions,\n // merged so cancelling fullStream also aborts a still-pending doStream\n abortSignal: mergeAbortSignals(abortSignal, pipeAbortController.signal),\n headers: headersWithUserAgent,\n includeRawChunks\n });\n response = {\n timestamp: (_b25 = (_a26 = result.response) == null ? void 0 : _a26.timestamp) != null ? _b25 : startedAt,\n modelId: (_d = (_c = result.response) == null ? void 0 : _c.modelId) != null ? _d : resolvedModel.modelId,\n headers: (_e = result.response) == null ? void 0 : _e.headers\n };\n await result.stream.pipeTo(transform.writable, {\n signal: pipeAbortController.signal\n });\n })().catch((error) => {\n const reason = error != null ? error : new Error(\"Transcription stream was cancelled or errored.\");\n rejectPendingPromises(reason);\n audio.cancel(reason).catch(() => {\n });\n transform.writable.abort(reason).catch(() => {\n });\n });\n let streamOwner = \"unclaimed\";\n function consumeStream2() {\n if (streamOwner === \"full-stream\" || streamOwner === \"result-promises\") {\n return;\n }\n streamOwner = \"result-promises\";\n const reader = transform.readable.getReader();\n void (async () => {\n while (!(await reader.read()).done) {\n }\n })().catch(() => {\n });\n }\n function getFullStream() {\n if (streamOwner !== \"unclaimed\") {\n throw new Error(\n streamOwner === \"full-stream\" ? \"fullStream can only be accessed once.\" : \"fullStream cannot be accessed after a result promise.\"\n );\n }\n streamOwner = \"full-stream\";\n return asAsyncIterableStream(transform.readable);\n }\n return {\n get text() {\n consumeStream2();\n return textPromise.promise;\n },\n get segments() {\n consumeStream2();\n return segmentsPromise.promise;\n },\n get language() {\n consumeStream2();\n return languagePromise.promise;\n },\n get durationInSeconds() {\n consumeStream2();\n return durationInSecondsPromise.promise;\n },\n get warnings() {\n consumeStream2();\n return warningsPromise.promise;\n },\n get responses() {\n consumeStream2();\n return responsesPromise.promise;\n },\n get providerMetadata() {\n consumeStream2();\n return providerMetadataPromise.promise;\n },\n get fullStream() {\n return getFullStream();\n }\n };\n}\n\n// src/transcribe/index.ts\nvar experimental_transcribe = transcribe;\n\n// src/translate/stream-translate.ts\nimport {\n DelayedPromise as DelayedPromise4,\n withUserAgentSuffix as withUserAgentSuffix15\n} from \"@ai-sdk/provider-utils\";\nfunction streamTranslate({\n model,\n audio,\n inputAudioFormat,\n targetLanguage,\n sourceLanguage,\n outputAudioFormat,\n providerOptions = {},\n abortSignal,\n headers,\n includeRawChunks,\n _internal: { currentDate = () => /* @__PURE__ */ new Date() } = {}\n}) {\n const resolvedModel = resolveSpeechTranslationModel(model);\n const doStream = resolvedModel.doStream.bind(resolvedModel);\n const headersWithUserAgent = withUserAgentSuffix15(\n headers != null ? headers : {},\n `ai/${VERSION}`\n );\n const sourceTextPromise = new DelayedPromise4();\n const translationTextPromise = new DelayedPromise4();\n const durationInSecondsPromise = new DelayedPromise4();\n const usagePromise = new DelayedPromise4();\n const warningsPromise = new DelayedPromise4();\n const responsePromise = new DelayedPromise4();\n const providerMetadataPromise = new DelayedPromise4();\n const rejectPendingPromises = (error) => {\n for (const promise of [\n sourceTextPromise,\n translationTextPromise,\n durationInSecondsPromise,\n usagePromise,\n warningsPromise,\n responsePromise,\n providerMetadataPromise\n ]) {\n if (promise.isPending()) {\n promise.reject(error);\n }\n }\n };\n const startedAt = currentDate();\n let response;\n const currentResponseMetadata = () => response != null ? response : { timestamp: startedAt, modelId: resolvedModel.modelId };\n const resolveWarnings = (warnings) => {\n warningsPromise.resolve(warnings);\n logWarnings({\n warnings,\n provider: resolvedModel.provider,\n model: resolvedModel.modelId\n });\n };\n const pipeAbortController = new AbortController();\n let hasAudioOutput = false;\n const transformer = {\n transform(value, controller) {\n var _a25, _b25, _c, _d;\n switch (value.type) {\n case \"stream-start\": {\n resolveWarnings(value.warnings);\n break;\n }\n case \"response-metadata\": {\n response = {\n timestamp: (_a25 = value.timestamp) != null ? _a25 : currentResponseMetadata().timestamp,\n modelId: (_b25 = value.modelId) != null ? _b25 : currentResponseMetadata().modelId,\n headers: (_c = value.headers) != null ? _c : response == null ? void 0 : response.headers\n };\n break;\n }\n case \"audio\": {\n hasAudioOutput = true;\n controller.enqueue(value);\n break;\n }\n case \"output-text-delta\":\n case \"output-text-final\":\n case \"source-transcript-delta\":\n case \"source-transcript-partial\":\n case \"source-transcript-final\":\n case \"raw\":\n case \"error\": {\n controller.enqueue(value);\n break;\n }\n case \"finish\": {\n if (!warningsPromise.isResolved()) {\n resolveWarnings([]);\n }\n if (!hasAudioOutput && !value.outputText) {\n throw new NoTranslationGeneratedError({\n response: currentResponseMetadata()\n });\n }\n sourceTextPromise.resolve(value.sourceText);\n translationTextPromise.resolve(value.outputText);\n durationInSecondsPromise.resolve(value.durationInSeconds);\n usagePromise.resolve(value.usage);\n responsePromise.resolve(currentResponseMetadata());\n providerMetadataPromise.resolve((_d = value.providerMetadata) != null ? _d : {});\n break;\n }\n default: {\n const _exhaustiveCheck = value;\n throw new Error(`Unsupported part type: ${_exhaustiveCheck}`);\n }\n }\n },\n flush() {\n if (translationTextPromise.isPending()) {\n throw new NoTranslationGeneratedError({\n response: currentResponseMetadata()\n });\n }\n },\n cancel(reason) {\n pipeAbortController.abort(\n reason != null ? reason : new Error(\"Translation stream was cancelled.\")\n );\n }\n };\n const transform = new TransformStream(transformer);\n void (async () => {\n var _a25, _b25, _c, _d, _e;\n const result = await doStream({\n audio,\n inputAudioFormat,\n targetLanguage,\n sourceLanguage,\n outputAudioFormat,\n providerOptions,\n // merged so cancelling fullStream also aborts a still-pending doStream\n abortSignal: mergeAbortSignals(abortSignal, pipeAbortController.signal),\n headers: headersWithUserAgent,\n includeRawChunks\n });\n response = {\n timestamp: (_b25 = (_a25 = result.response) == null ? void 0 : _a25.timestamp) != null ? _b25 : startedAt,\n modelId: (_d = (_c = result.response) == null ? void 0 : _c.modelId) != null ? _d : resolvedModel.modelId,\n headers: (_e = result.response) == null ? void 0 : _e.headers\n };\n await result.stream.pipeTo(transform.writable, {\n signal: pipeAbortController.signal\n });\n })().catch((error) => {\n const reason = error != null ? error : new Error(\"Translation stream was cancelled or errored.\");\n rejectPendingPromises(reason);\n audio.cancel(reason).catch(() => {\n });\n transform.writable.abort(reason).catch(() => {\n });\n });\n let streamOwner = \"unclaimed\";\n function consumeStream2() {\n if (streamOwner === \"full-stream\" || streamOwner === \"result-promises\") {\n return;\n }\n streamOwner = \"result-promises\";\n const reader = transform.readable.getReader();\n void (async () => {\n while (!(await reader.read()).done) {\n }\n })().catch(() => {\n });\n }\n function getFullStream() {\n if (streamOwner !== \"unclaimed\") {\n throw new Error(\n streamOwner === \"full-stream\" ? \"fullStream can only be accessed once.\" : \"fullStream cannot be accessed after a result promise.\"\n );\n }\n streamOwner = \"full-stream\";\n return asAsyncIterableStream(transform.readable);\n }\n return {\n get sourceText() {\n consumeStream2();\n return sourceTextPromise.promise;\n },\n get translationText() {\n consumeStream2();\n return translationTextPromise.promise;\n },\n get durationInSeconds() {\n consumeStream2();\n return durationInSecondsPromise.promise;\n },\n get usage() {\n consumeStream2();\n return usagePromise.promise;\n },\n get warnings() {\n consumeStream2();\n return warningsPromise.promise;\n },\n get response() {\n consumeStream2();\n return responsePromise.promise;\n },\n get providerMetadata() {\n consumeStream2();\n return providerMetadataPromise.promise;\n },\n get fullStream() {\n return getFullStream();\n }\n };\n}\n\n// src/ui/call-completion-api.ts\nimport {\n parseJsonEventStream,\n withUserAgentSuffix as withUserAgentSuffix16,\n getRuntimeEnvironmentUserAgent as getRuntimeEnvironmentUserAgent2\n} from \"@ai-sdk/provider-utils\";\n\n// src/ui/process-text-stream.ts\nasync function processTextStream({\n stream,\n onTextPart\n}) {\n const reader = stream.pipeThrough(new TextDecoderStream()).getReader();\n while (true) {\n const { done, value } = await reader.read();\n if (done) {\n break;\n }\n await onTextPart(value);\n }\n}\n\n// src/ui/call-completion-api.ts\nvar getOriginalFetch = () => fetch;\nasync function callCompletionApi({\n api,\n prompt,\n credentials,\n headers,\n body,\n streamProtocol = \"data\",\n setCompletion,\n setLoading,\n setError,\n setAbortController,\n onFinish,\n onError,\n fetch: fetch2 = getOriginalFetch()\n}) {\n var _a25;\n try {\n setLoading(true);\n setError(void 0);\n const abortController = new AbortController();\n setAbortController(abortController);\n setCompletion(\"\");\n const response = await fetch2(api, {\n method: \"POST\",\n body: JSON.stringify({\n prompt,\n ...body\n }),\n credentials,\n headers: withUserAgentSuffix16(\n {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n `ai-sdk/${VERSION}`,\n getRuntimeEnvironmentUserAgent2()\n ),\n signal: abortController.signal\n }).catch((err) => {\n throw err;\n });\n if (!response.ok) {\n throw new Error(\n (_a25 = await response.text()) != null ? _a25 : \"Failed to fetch the chat response.\"\n );\n }\n if (!response.body) {\n throw new Error(\"The response body is empty.\");\n }\n let result = \"\";\n switch (streamProtocol) {\n case \"text\": {\n await processTextStream({\n stream: response.body,\n onTextPart: (chunk) => {\n result += chunk;\n setCompletion(result);\n }\n });\n break;\n }\n case \"data\": {\n await consumeStream({\n stream: parseJsonEventStream({\n stream: response.body,\n schema: uiMessageChunkSchema\n }).pipeThrough(\n new TransformStream({\n async transform(part) {\n if (!part.success) {\n throw part.error;\n }\n const streamPart = part.value;\n if (streamPart.type === \"text-delta\") {\n result += streamPart.delta;\n setCompletion(result);\n } else if (streamPart.type === \"error\") {\n throw new Error(streamPart.errorText);\n }\n }\n })\n ),\n onError: (error) => {\n throw error;\n }\n });\n break;\n }\n default: {\n const exhaustiveCheck = streamProtocol;\n throw new Error(`Unknown stream protocol: ${exhaustiveCheck}`);\n }\n }\n if (onFinish) {\n onFinish(prompt, result);\n }\n setAbortController(null);\n return result;\n } catch (err) {\n if (err.name === \"AbortError\") {\n setAbortController(null);\n return null;\n }\n if (err instanceof Error) {\n if (onError) {\n onError(err);\n }\n }\n setError(err);\n } finally {\n setLoading(false);\n }\n}\n\n// src/ui/chat.ts\nimport {\n generateId as generateIdFunc2\n} from \"@ai-sdk/provider-utils\";\n\n// src/ui/convert-file-list-to-file-ui-parts.ts\nasync function convertFileListToFileUIParts(files) {\n if (files == null) {\n return [];\n }\n if (!globalThis.FileList || !(files instanceof globalThis.FileList)) {\n throw new Error(\"FileList is not supported in the current environment\");\n }\n return Promise.all(\n Array.from(files).map(async (file) => {\n const { name: name25, type } = file;\n const dataUrl = await new Promise((resolve3, reject) => {\n const reader = new FileReader();\n reader.onload = (readerEvent) => {\n var _a25;\n resolve3((_a25 = readerEvent.target) == null ? void 0 : _a25.result);\n };\n reader.onerror = (error) => reject(error);\n reader.readAsDataURL(file);\n });\n return {\n type: \"file\",\n mediaType: type,\n filename: name25,\n url: dataUrl\n };\n })\n );\n}\n\n// src/ui/default-chat-transport.ts\nimport { parseJsonEventStream as parseJsonEventStream2 } from \"@ai-sdk/provider-utils\";\n\n// src/ui/http-chat-transport.ts\nimport {\n normalizeHeaders,\n resolve as resolve2\n} from \"@ai-sdk/provider-utils\";\nvar HttpChatTransport = class {\n constructor({\n api = \"/api/chat\",\n credentials,\n headers,\n body,\n fetch: fetch2,\n prepareSendMessagesRequest,\n prepareReconnectToStreamRequest\n }) {\n this.api = api;\n this.credentials = credentials;\n this.headers = headers;\n this.body = body;\n this.fetch = fetch2;\n this.prepareSendMessagesRequest = prepareSendMessagesRequest;\n this.prepareReconnectToStreamRequest = prepareReconnectToStreamRequest;\n }\n async sendMessages({\n abortSignal,\n ...options\n }) {\n var _a25, _b25, _c, _d, _e;\n const resolvedBody = await resolve2(this.body);\n const resolvedHeaders = await resolve2(this.headers);\n const resolvedCredentials = await resolve2(this.credentials);\n const baseHeaders = {\n ...normalizeHeaders(resolvedHeaders),\n ...normalizeHeaders(options.headers)\n };\n const preparedRequest = await ((_a25 = this.prepareSendMessagesRequest) == null ? void 0 : _a25.call(this, {\n api: this.api,\n id: options.chatId,\n messages: options.messages,\n body: { ...resolvedBody, ...options.body },\n headers: baseHeaders,\n credentials: resolvedCredentials,\n requestMetadata: options.metadata,\n trigger: options.trigger,\n messageId: options.messageId\n }));\n const api = (_b25 = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b25 : this.api;\n const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? normalizeHeaders(preparedRequest.headers) : baseHeaders;\n const body = (preparedRequest == null ? void 0 : preparedRequest.body) !== void 0 ? preparedRequest.body : {\n ...resolvedBody,\n ...options.body,\n id: options.chatId,\n messages: options.messages,\n trigger: options.trigger,\n messageId: options.messageId\n };\n const credentials = (_c = preparedRequest == null ? void 0 : preparedRequest.credentials) != null ? _c : resolvedCredentials;\n const fetch2 = (_d = this.fetch) != null ? _d : globalThis.fetch;\n const response = await fetch2(api, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n body: JSON.stringify(body),\n credentials,\n signal: abortSignal\n });\n if (!response.ok) {\n throw new Error(\n (_e = await response.text()) != null ? _e : \"Failed to fetch the chat response.\"\n );\n }\n if (!response.body) {\n throw new Error(\"The response body is empty.\");\n }\n return this.processResponseStream(response.body);\n }\n async reconnectToStream(options) {\n var _a25, _b25, _c, _d, _e;\n const resolvedBody = await resolve2(this.body);\n const resolvedHeaders = await resolve2(this.headers);\n const resolvedCredentials = await resolve2(this.credentials);\n const baseHeaders = {\n ...normalizeHeaders(resolvedHeaders),\n ...normalizeHeaders(options.headers)\n };\n const preparedRequest = await ((_a25 = this.prepareReconnectToStreamRequest) == null ? void 0 : _a25.call(this, {\n api: this.api,\n id: options.chatId,\n body: { ...resolvedBody, ...options.body },\n headers: baseHeaders,\n credentials: resolvedCredentials,\n requestMetadata: options.metadata\n }));\n const api = (_b25 = preparedRequest == null ? void 0 : preparedRequest.api) != null ? _b25 : `${this.api}/${options.chatId}/stream`;\n const headers = (preparedRequest == null ? void 0 : preparedRequest.headers) !== void 0 ? normalizeHeaders(preparedRequest.headers) : baseHeaders;\n const credentials = (_c = preparedRequest == null ? void 0 : preparedRequest.credentials) != null ? _c : resolvedCredentials;\n const fetch2 = (_d = this.fetch) != null ? _d : globalThis.fetch;\n const response = await fetch2(api, {\n method: \"GET\",\n headers,\n credentials,\n signal: options.abortSignal\n });\n if (response.status === 204) {\n return null;\n }\n if (!response.ok) {\n throw new Error(\n (_e = await response.text()) != null ? _e : \"Failed to fetch the chat response.\"\n );\n }\n if (!response.body) {\n throw new Error(\"The response body is empty.\");\n }\n return this.processResponseStream(response.body);\n }\n};\n\n// src/ui/default-chat-transport.ts\nvar DefaultChatTransport = class extends HttpChatTransport {\n constructor(options = {}) {\n super(options);\n }\n processResponseStream(stream) {\n return parseJsonEventStream2({\n stream,\n schema: uiMessageChunkSchema\n }).pipeThrough(\n new TransformStream({\n async transform(chunk, controller) {\n if (!chunk.success) {\n throw chunk.error;\n }\n controller.enqueue(chunk.value);\n }\n })\n );\n }\n};\n\n// src/ui/chat.ts\nvar AbstractChat = class {\n constructor({\n generateId: generateId4 = generateIdFunc2,\n id = generateId4(),\n transport = new DefaultChatTransport(),\n messageMetadataSchema,\n dataPartSchemas,\n state,\n onError,\n onToolCall,\n onFinish,\n onData,\n sendAutomaticallyWhen\n }) {\n this.pendingMessagePreparations = /* @__PURE__ */ new Set();\n this.activeResponse = void 0;\n this.activeResumeRequest = void 0;\n this.jobExecutor = new SerialJobExecutor();\n /**\n * Appends or replaces a user message to the chat list. This triggers the API call to fetch\n * the assistant's response.\n *\n * If a messageId is provided, the message will be replaced.\n */\n this.sendMessage = async (message, options) => {\n var _a25, _b25, _c, _d;\n if (message == null) {\n await this.makeRequest({\n trigger: \"submit-message\",\n messageId: (_a25 = this.lastMessage) == null ? void 0 : _a25.id,\n ...options\n });\n return;\n }\n let uiMessage;\n if (\"text\" in message || \"files\" in message) {\n const abortController = new AbortController();\n this.pendingMessagePreparations.add(abortController);\n let fileParts;\n try {\n fileParts = Array.isArray(message.files) ? message.files : await convertFileListToFileUIParts(message.files);\n } finally {\n this.pendingMessagePreparations.delete(abortController);\n }\n if (abortController.signal.aborted) {\n return;\n }\n uiMessage = {\n parts: [\n ...fileParts,\n ...\"text\" in message && message.text != null ? [{ type: \"text\", text: message.text }] : []\n ]\n };\n } else {\n uiMessage = message;\n }\n if (message.messageId != null) {\n const messageIndex = this.state.messages.findIndex(\n (m) => m.id === message.messageId\n );\n if (messageIndex === -1) {\n throw new Error(`message with id ${message.messageId} not found`);\n }\n if (this.state.messages[messageIndex].role !== \"user\") {\n throw new Error(\n `message with id ${message.messageId} is not a user message`\n );\n }\n this.state.messages = this.state.messages.slice(0, messageIndex + 1);\n this.state.replaceMessage(messageIndex, {\n ...uiMessage,\n id: message.messageId,\n role: (_b25 = uiMessage.role) != null ? _b25 : \"user\",\n metadata: message.metadata\n });\n } else {\n this.state.pushMessage({\n ...uiMessage,\n id: (_c = uiMessage.id) != null ? _c : this.generateId(),\n role: (_d = uiMessage.role) != null ? _d : \"user\",\n metadata: message.metadata\n });\n }\n await this.makeRequest({\n trigger: \"submit-message\",\n messageId: message.messageId,\n ...options\n });\n };\n /**\n * Regenerate the assistant message with the provided message id.\n * If no message id is provided, the last assistant message will be regenerated.\n */\n this.regenerate = async ({\n messageId,\n ...options\n } = {}) => {\n const messageIndex = messageId == null ? this.state.messages.length - 1 : this.state.messages.findIndex((message) => message.id === messageId);\n if (messageIndex === -1) {\n throw new Error(`message ${messageId} not found`);\n }\n this.state.messages = this.state.messages.slice(\n 0,\n // if the message is a user message, we need to include it in the request:\n this.messages[messageIndex].role === \"assistant\" ? messageIndex : messageIndex + 1\n );\n await this.makeRequest({\n trigger: \"regenerate-message\",\n messageId,\n ...options\n });\n };\n /**\n * Attempt to resume an ongoing streaming response.\n */\n this.resumeStream = async (options = {}) => {\n await this.makeRequest({ trigger: \"resume-stream\", ...options });\n };\n /**\n * Clear the error state and set the status to ready if the chat is in an error state.\n */\n this.clearError = () => {\n if (this.status === \"error\") {\n this.state.error = void 0;\n this.setStatus({ status: \"ready\" });\n }\n };\n this.addToolApprovalResponse = async ({\n id,\n approved,\n reason,\n options\n }) => this.jobExecutor.run(async () => {\n const messages = this.state.messages;\n const lastMessage = messages[messages.length - 1];\n const updatePart = (part) => isToolUIPart(part) && part.state === \"approval-requested\" && part.approval.id === id ? {\n ...part,\n state: \"approval-responded\",\n approval: { ...part.approval, id, approved, reason }\n } : part;\n this.state.replaceMessage(messages.length - 1, {\n ...lastMessage,\n parts: lastMessage.parts.map(updatePart)\n });\n if (this.activeResponse) {\n this.activeResponse.state.message.parts = this.activeResponse.state.message.parts.map(updatePart);\n }\n if (this.status !== \"streaming\" && this.status !== \"submitted\" && this.sendAutomaticallyWhen) {\n this.shouldSendAutomatically().then((shouldSend) => {\n var _a25;\n if (shouldSend) {\n this.makeRequest({\n trigger: \"submit-message\",\n messageId: (_a25 = this.lastMessage) == null ? void 0 : _a25.id,\n ...options\n });\n }\n });\n }\n });\n this.addToolOutput = async ({\n state = \"output-available\",\n toolCallId,\n output,\n errorText,\n options\n }) => this.jobExecutor.run(async () => {\n const messages = this.state.messages;\n const lastMessage = messages[messages.length - 1];\n const updatePart = (part) => isToolUIPart(part) && part.toolCallId === toolCallId ? { ...part, state, output, errorText } : part;\n this.state.replaceMessage(messages.length - 1, {\n ...lastMessage,\n parts: lastMessage.parts.map(updatePart)\n });\n if (this.activeResponse) {\n this.activeResponse.state.message.parts = this.activeResponse.state.message.parts.map(updatePart);\n }\n if (this.status !== \"streaming\" && this.status !== \"submitted\" && this.sendAutomaticallyWhen) {\n this.shouldSendAutomatically().then((shouldSend) => {\n var _a25;\n if (shouldSend) {\n this.makeRequest({\n trigger: \"submit-message\",\n messageId: (_a25 = this.lastMessage) == null ? void 0 : _a25.id,\n ...options\n });\n }\n });\n }\n });\n /** @deprecated Use addToolOutput */\n this.addToolResult = this.addToolOutput;\n /**\n * Abort the current request immediately, keep the generated tokens if any.\n */\n this.stop = async () => {\n var _a25, _b25;\n for (const controller of this.pendingMessagePreparations) {\n controller.abort();\n }\n (_a25 = this.activeResumeRequest) == null ? void 0 : _a25.abortController.abort();\n (_b25 = this.activeResponse) == null ? void 0 : _b25.abortController.abort();\n };\n this.id = id;\n this.transport = transport;\n this.generateId = generateId4;\n this.messageMetadataSchema = messageMetadataSchema;\n this.dataPartSchemas = dataPartSchemas;\n this.state = state;\n this.onError = onError;\n this.onToolCall = onToolCall;\n this.onFinish = onFinish;\n this.onData = onData;\n this.sendAutomaticallyWhen = sendAutomaticallyWhen;\n }\n /**\n * Hook status:\n *\n * - `submitted`: The message has been sent to the API and we're awaiting the start of the response stream.\n * - `streaming`: The response is actively streaming in from the API, receiving chunks of data.\n * - `ready`: The full response has been received and processed; a new user message can be submitted.\n * - `error`: An error occurred during the API request, preventing successful completion.\n */\n get status() {\n return this.state.status;\n }\n setStatus({\n status,\n error\n }) {\n if (this.status === status) return;\n this.state.status = status;\n this.state.error = error;\n }\n get error() {\n return this.state.error;\n }\n get messages() {\n return this.state.messages;\n }\n get lastMessage() {\n return this.state.messages[this.state.messages.length - 1];\n }\n set messages(messages) {\n this.state.messages = messages;\n }\n async shouldSendAutomatically() {\n if (!this.sendAutomaticallyWhen) return false;\n const result = this.sendAutomaticallyWhen({\n messages: this.state.messages\n });\n if (result && typeof result === \"object\" && \"then\" in result) {\n return await result;\n }\n return result;\n }\n async makeRequest({\n trigger,\n metadata,\n headers,\n body,\n messageId\n }) {\n var _a25, _b25, _c;\n const abortController = new AbortController();\n const activeResumeRequest = trigger === \"resume-stream\" ? { abortController } : void 0;\n if (activeResumeRequest) {\n (_a25 = this.activeResumeRequest) == null ? void 0 : _a25.abortController.abort();\n this.activeResumeRequest = activeResumeRequest;\n }\n const isCurrentRequest = () => activeResumeRequest == null || this.activeResumeRequest === activeResumeRequest;\n const clearActiveResumeRequest = () => {\n if (this.activeResumeRequest === activeResumeRequest) {\n this.activeResumeRequest = void 0;\n }\n };\n let resumeStream;\n if (trigger === \"resume-stream\") {\n try {\n const reconnect = await this.transport.reconnectToStream({\n chatId: this.id,\n abortSignal: abortController.signal,\n metadata,\n headers,\n body\n });\n if (abortController.signal.aborted || !isCurrentRequest()) {\n await (reconnect == null ? void 0 : reconnect.cancel().catch(() => {\n }));\n if (isCurrentRequest()) {\n this.setStatus({ status: \"ready\" });\n }\n clearActiveResumeRequest();\n return;\n }\n if (reconnect == null) {\n this.setStatus({ status: \"ready\" });\n clearActiveResumeRequest();\n return;\n }\n resumeStream = reconnect;\n } catch (err) {\n if (abortController.signal.aborted || err.name === \"AbortError\") {\n if (isCurrentRequest()) {\n this.setStatus({ status: \"ready\" });\n }\n clearActiveResumeRequest();\n return;\n }\n if (!isCurrentRequest()) {\n return;\n }\n if (this.onError && err instanceof Error) {\n this.onError(err);\n }\n this.setStatus({ status: \"error\", error: err });\n clearActiveResumeRequest();\n return;\n }\n }\n this.setStatus({ status: \"submitted\", error: void 0 });\n const lastMessage = this.lastMessage;\n let isAbort = false;\n let isDisconnect = false;\n let isError2 = false;\n let activeResponse;\n try {\n const response = {\n state: createStreamingUIMessageState({\n lastMessage: trigger === \"resume-stream\" || trigger === \"regenerate-message\" ? void 0 : this.state.snapshot(lastMessage),\n messageId: this.generateId()\n }),\n abortController\n };\n activeResponse = response;\n response.abortController.signal.addEventListener(\"abort\", () => {\n isAbort = true;\n });\n this.activeResponse = response;\n let stream;\n if (trigger === \"resume-stream\") {\n stream = resumeStream;\n } else {\n stream = await this.transport.sendMessages({\n chatId: this.id,\n messages: this.state.messages,\n abortSignal: response.abortController.signal,\n metadata,\n headers,\n body,\n trigger,\n messageId\n });\n }\n const runUpdateMessageJob = (job) => (\n // serialize the job execution to avoid race conditions:\n this.jobExecutor.run(() => {\n if (response.abortController.signal.aborted) {\n return Promise.resolve();\n }\n return job({\n state: response.state,\n write: ({ updateStatus = true } = {}) => {\n var _a26;\n if (response.abortController.signal.aborted) {\n return;\n }\n if (updateStatus) {\n this.setStatus({ status: \"streaming\" });\n }\n const replaceLastMessage = response.state.message.id === ((_a26 = this.lastMessage) == null ? void 0 : _a26.id);\n if (replaceLastMessage) {\n this.state.replaceMessage(\n this.state.messages.length - 1,\n response.state.message\n );\n } else {\n this.state.pushMessage(response.state.message);\n }\n }\n });\n })\n );\n await consumeStream({\n stream: processUIMessageStream({\n stream,\n onToolCall: this.onToolCall,\n onData: this.onData,\n messageMetadataSchema: this.messageMetadataSchema,\n dataPartSchemas: this.dataPartSchemas,\n runUpdateMessageJob,\n onError: (error) => {\n throw error;\n }\n }),\n abortSignal: response.abortController.signal,\n onError: (error) => {\n throw error;\n }\n });\n if (isAbort) {\n if (isCurrentRequest()) {\n this.setStatus({ status: \"ready\" });\n }\n return null;\n }\n if (isCurrentRequest()) {\n this.setStatus({ status: \"ready\" });\n }\n } catch (err) {\n if (isAbort || err.name === \"AbortError\") {\n isAbort = true;\n if (isCurrentRequest()) {\n this.setStatus({ status: \"ready\" });\n }\n return null;\n }\n if (!isCurrentRequest()) {\n return null;\n }\n isError2 = true;\n if (err instanceof TypeError && (err.message.toLowerCase().includes(\"fetch\") || err.message.toLowerCase().includes(\"network\"))) {\n isDisconnect = true;\n }\n if (this.onError && err instanceof Error) {\n this.onError(err);\n }\n this.setStatus({ status: \"error\", error: err });\n } finally {\n try {\n if (activeResponse) {\n (_b25 = this.onFinish) == null ? void 0 : _b25.call(this, {\n message: activeResponse.state.message,\n messages: this.state.messages,\n isAbort,\n isDisconnect,\n isError: isError2,\n finishReason: activeResponse.state.finishReason\n });\n }\n } finally {\n if (this.activeResponse === activeResponse) {\n this.activeResponse = void 0;\n }\n clearActiveResumeRequest();\n }\n }\n if (!isError2 && await this.shouldSendAutomatically()) {\n await this.makeRequest({\n trigger: \"submit-message\",\n messageId: (_c = this.lastMessage) == null ? void 0 : _c.id,\n metadata,\n headers,\n body\n });\n }\n }\n};\n\n// src/ui/direct-chat-transport.ts\nvar DirectChatTransport = class {\n constructor({\n agent,\n options,\n ...uiMessageStreamOptions\n }) {\n this.agent = agent;\n this.agentOptions = options;\n this.uiMessageStreamOptions = uiMessageStreamOptions;\n }\n async sendMessages({\n messages,\n abortSignal\n }) {\n const validatedMessages = await validateUIMessagesForAgent({\n messages,\n // tools are compatible; the casting is required because the context param is\n // not available in ui messages\n tools: this.agent.tools\n });\n const modelMessages = await convertToModelMessages(validatedMessages, {\n tools: this.agent.tools\n });\n const result = await this.agent.stream({\n prompt: modelMessages,\n abortSignal,\n ...this.agentOptions !== void 0 ? { options: this.agentOptions } : {}\n });\n return toUIMessageStream({\n ...this.uiMessageStreamOptions,\n stream: result.stream,\n tools: this.agent.tools\n });\n }\n /**\n * Direct transport does not support reconnection since there is no\n * persistent server-side stream to reconnect to.\n *\n * @returns Always returns `null`\n */\n async reconnectToStream(_options) {\n return null;\n }\n};\n\n// src/ui/last-assistant-message-is-complete-with-approval-responses.ts\nfunction lastAssistantMessageIsCompleteWithApprovalResponses({\n messages\n}) {\n const message = messages[messages.length - 1];\n if (!message) {\n return false;\n }\n if (message.role !== \"assistant\") {\n return false;\n }\n const lastStepStartIndex = message.parts.reduce((lastIndex, part, index) => {\n return part.type === \"step-start\" ? index : lastIndex;\n }, -1);\n const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter(isToolUIPart);\n return (\n // has at least one tool approval response\n lastStepToolInvocations.filter((part) => part.state === \"approval-responded\").length > 0 && // all tool approvals must have a response\n lastStepToolInvocations.every(\n (part) => part.state === \"output-available\" || part.state === \"output-error\" || part.state === \"output-denied\" || part.state === \"approval-responded\"\n )\n );\n}\n\n// src/ui/last-assistant-message-is-complete-with-tool-calls.ts\nfunction lastAssistantMessageIsCompleteWithToolCalls({\n messages\n}) {\n const message = messages[messages.length - 1];\n if (!message) {\n return false;\n }\n if (message.role !== \"assistant\") {\n return false;\n }\n const lastStepStartIndex = message.parts.reduce((lastIndex, part, index) => {\n return part.type === \"step-start\" ? index : lastIndex;\n }, -1);\n const lastStepToolInvocations = message.parts.slice(lastStepStartIndex + 1).filter(isToolUIPart).filter((part) => !part.providerExecuted);\n return lastStepToolInvocations.length > 0 && lastStepToolInvocations.every(\n (part) => part.state === \"output-available\" || part.state === \"output-error\"\n );\n}\n\n// src/ui/transform-text-to-ui-message-stream.ts\nfunction transformTextToUiMessageStream({\n stream\n}) {\n return stream.pipeThrough(\n new TransformStream({\n start(controller) {\n controller.enqueue({ type: \"start\" });\n controller.enqueue({ type: \"start-step\" });\n controller.enqueue({ type: \"text-start\", id: \"text-1\" });\n },\n async transform(part, controller) {\n controller.enqueue({ type: \"text-delta\", id: \"text-1\", delta: part });\n },\n async flush(controller) {\n controller.enqueue({ type: \"text-end\", id: \"text-1\" });\n controller.enqueue({ type: \"finish-step\" });\n controller.enqueue({ type: \"finish\" });\n }\n })\n );\n}\n\n// src/ui/text-stream-chat-transport.ts\nvar TextStreamChatTransport = class extends HttpChatTransport {\n constructor(options = {}) {\n super(options);\n }\n processResponseStream(stream) {\n return transformTextToUiMessageStream({\n stream: stream.pipeThrough(new TextDecoderStream())\n });\n }\n};\n\n// src/upload-file/upload-file.ts\nimport {\n convertBase64ToUint8Array as convertBase64ToUint8Array6,\n detectMediaType as detectMediaType6\n} from \"@ai-sdk/provider-utils\";\nasync function uploadFile({\n api,\n data: dataArg,\n mediaType: mediaTypeArg,\n filename,\n abortSignal,\n headers,\n providerOptions\n}) {\n var _a25;\n const data = dataArg instanceof Uint8Array || typeof dataArg === \"string\" ? { type: \"data\", data: dataArg } : dataArg;\n const mediaType = mediaTypeArg != null ? mediaTypeArg : data.type === \"text\" ? \"text/plain\" : data.type === \"stream\" ? \"application/octet-stream\" : (_a25 = detectMediaType6({ data: data.data })) != null ? _a25 : isLikelyText(data.data) ? \"text/plain\" : \"application/octet-stream\";\n let result;\n try {\n const filesApi = \"uploadFile\" in api ? api : typeof api.files === \"function\" ? api.files() : (() => {\n throw new Error(\n \"The provider does not support file uploads. Make sure it exposes a files() method.\"\n );\n })();\n result = await filesApi.uploadFile({\n data,\n mediaType,\n filename,\n abortSignal,\n headers,\n providerOptions\n });\n } catch (error) {\n if (data.type === \"stream\") {\n await data.stream.cancel(error).catch(() => {\n });\n }\n throw error;\n }\n return new DefaultUploadFileResult({\n providerReference: result.providerReference,\n mediaType: result.mediaType,\n filename: result.filename,\n byteSize: result.byteSize,\n createdAt: result.createdAt,\n expiresAt: result.expiresAt,\n providerMetadata: result.providerMetadata,\n warnings: result.warnings\n });\n}\nvar DefaultUploadFileResult = class {\n constructor(options) {\n this.providerReference = options.providerReference;\n this.mediaType = options.mediaType;\n this.filename = options.filename;\n this.byteSize = options.byteSize;\n this.createdAt = options.createdAt;\n this.expiresAt = options.expiresAt;\n this.providerMetadata = options.providerMetadata;\n this.warnings = options.warnings;\n }\n};\nfunction isLikelyText(data) {\n const CHECK_LENGTH = 512;\n const BASE64_CHECK_LENGTH = Math.ceil((CHECK_LENGTH + 4) / 3) * 4;\n const bytes = typeof data === \"string\" ? convertBase64ToUint8Array6(\n data.substring(0, Math.min(data.length, BASE64_CHECK_LENGTH))\n ) : data;\n const checkLength = Math.min(bytes.length, CHECK_LENGTH);\n if (checkLength === 0) return false;\n for (let i = 0; i < checkLength; i++) {\n const byte = bytes[i];\n if (byte === 0 || byte < 32 && byte !== 9 && byte !== 10 && byte !== 13) {\n return false;\n }\n }\n return true;\n}\n\n// src/upload-skill/upload-skill.ts\nasync function uploadSkill({\n api,\n files,\n displayTitle,\n providerOptions\n}) {\n const skillsApi = \"uploadSkill\" in api ? api : typeof api.skills === \"function\" ? api.skills() : (() => {\n throw new Error(\n \"The provider does not support skills. Make sure it exposes a skills() method.\"\n );\n })();\n const normalizedFiles = files.map((file) => ({\n ...file,\n data: file.data instanceof Uint8Array || typeof file.data === \"string\" ? { type: \"data\", data: file.data } : file.data\n }));\n const result = await skillsApi.uploadSkill({\n files: normalizedFiles,\n displayTitle,\n providerOptions\n });\n return result;\n}\nexport {\n AISDKError25 as AISDKError,\n AI_SDK_TELEMETRY_TRACING_CHANNEL,\n APICallError,\n AbstractChat,\n DefaultChatTransport,\n DefaultGeneratedFile,\n DirectChatTransport,\n DownloadError,\n EmptyResponseBodyError,\n AbstractRealtimeSession as Experimental_AbstractRealtimeSession,\n ToolLoopAgent as Experimental_Agent,\n HttpChatTransport,\n InvalidArgumentError,\n InvalidDataContentError,\n InvalidMessageRoleError,\n InvalidPromptError,\n InvalidResponseDataError,\n InvalidStreamPartError,\n InvalidToolApprovalError,\n InvalidToolApprovalSignatureError,\n InvalidToolInputError,\n JSONParseError,\n JsonToSseTransformStream,\n LoadAPIKeyError,\n LoadSettingError,\n MessageConversionError,\n MissingToolResultsError,\n NoContentGeneratedError,\n NoImageGeneratedError,\n NoObjectGeneratedError,\n NoOutputGeneratedError,\n NoSpeechGeneratedError,\n NoSuchModelError,\n NoSuchProviderError,\n NoSuchProviderReferenceError,\n NoSuchToolError,\n NoTranscriptGeneratedError,\n NoTranslationGeneratedError,\n NoVideoGeneratedError,\n output_exports as Output,\n RetryError,\n SerialJobExecutor,\n StreamProviderError,\n TextStreamChatTransport,\n TooManyEmbeddingValuesForCallError,\n ToolCallNotFoundForApprovalError,\n ToolCallRepairError,\n ToolChoiceViolationError,\n ToolLoopAgent,\n TypeValidationError,\n UIMessageStreamError,\n UI_MESSAGE_STREAM_HEADERS,\n UnsupportedFunctionalityError,\n UnsupportedModelVersionError,\n addToolInputExamplesMiddleware,\n asSchema8 as asSchema,\n assistantModelMessageSchema,\n callCompletionApi,\n consumeStream,\n convertDataContentToBase64String,\n convertFileListToFileUIParts,\n convertToModelMessages,\n cosineSimilarity,\n createAgentUIStream,\n createAgentUIStreamResponse,\n createDownload,\n createGateway,\n createIdGenerator9 as createIdGenerator,\n createProviderRegistry,\n createTextStreamResponse,\n createUIMessageStream,\n createUIMessageStreamResponse,\n customProvider,\n defaultEmbeddingSettingsMiddleware,\n defaultInstructionsMiddleware,\n defaultSettingsMiddleware,\n detectToolDrift,\n dynamicTool,\n embed,\n embedMany,\n experimental_createProviderRegistry,\n decodeRealtimeAudio as experimental_decodeRealtimeAudio,\n encodeRealtimeAudio as experimental_encodeRealtimeAudio,\n filterActiveTools as experimental_filterActiveTools,\n experimental_generateSpeech,\n experimental_generateVideo,\n getBatchResults as experimental_getBatchResults,\n getBatchStatus as experimental_getBatchStatus,\n getRealtimeToolDefinitions as experimental_getRealtimeToolDefinitions,\n experimental_getVideoStatus,\n resampleAudio as experimental_resampleAudio,\n startTextBatch as experimental_startTextBatch,\n experimental_startVideo,\n streamLanguageModelCall as experimental_streamLanguageModelCall,\n streamTranscribe as experimental_streamTranscribe,\n streamTranslate as experimental_streamTranslate,\n experimental_toolCaller,\n experimental_transcribe,\n extractJsonMiddleware,\n extractReasoningMiddleware,\n fingerprintTools,\n gateway2 as gateway,\n generateId3 as generateId,\n generateImage,\n generateObject,\n generateSpeech,\n generateText,\n getChunkTimeoutMs,\n getFirstChunkTimeoutMs,\n getStaticToolName,\n getStepTimeoutMs,\n getTextFromDataUrl,\n getToolName,\n getToolOrDynamicToolName,\n getToolTimeoutMs,\n getTotalTimeoutMs,\n hasToolCall,\n isCustomContentUIPart,\n isDataUIPart,\n isDeepEqualData,\n isDynamicToolUIPart,\n isFileUIPart,\n isLoopFinished,\n isReasoningFileUIPart,\n isReasoningUIPart,\n isStaticToolUIPart,\n isStepCount,\n isTextUIPart,\n isToolUIPart,\n jsonSchema,\n lastAssistantMessageIsCompleteWithApprovalResponses,\n lastAssistantMessageIsCompleteWithToolCalls,\n modelMessageSchema,\n parseJsonEventStream3 as parseJsonEventStream,\n parsePartialJson,\n pipeAgentUIStreamToResponse,\n pipeTextStreamToResponse,\n pipeUIMessageStreamToResponse,\n pruneMessages,\n readUIMessageStream,\n registerTelemetry,\n rerank,\n safeValidateUIMessages,\n simulateReadableStream,\n simulateStreamingMiddleware,\n smoothStream,\n isStepCount as stepCountIs,\n streamObject,\n streamText,\n systemModelMessageSchema,\n toTextStream,\n toUIMessageChunk,\n toUIMessageStream,\n tool,\n toolModelMessageSchema,\n transcribe,\n uiMessageChunkSchema,\n uploadFile,\n uploadSkill,\n userModelMessageSchema,\n validateUIMessages,\n wrapEmbeddingModel,\n wrapImageModel,\n wrapLanguageModel,\n wrapProvider,\n zodSchema3 as zodSchema\n};\n//# sourceMappingURL=index.js.map","// From https://github.com/vercel/swr/blob/master/src/libs/hash.ts\n// use WeakMap to store the object->key mapping\n// so the objects can be garbage collected.\n// WeakMap uses a hashtable under the hood, so the lookup\n// complexity is almost O(1).\nvar table = new WeakMap();\n// counter of the key\nvar counter = 0;\n// hashes an array of objects and returns a string\nexport default function hash(args) {\n if (!args.length)\n return '';\n var key = 'arg';\n for (var i = 0; i < args.length; ++i) {\n var _hash = void 0;\n if (args[i] === null ||\n (typeof args[i] !== 'object' && typeof args[i] !== 'function')) {\n // need to consider the case that args[i] is a string:\n // args[i] _hash\n // \"undefined\" -> '\"undefined\"'\n // undefined -> 'undefined'\n // 123 -> '123'\n // null -> 'null'\n // \"null\" -> '\"null\"'\n if (typeof args[i] === 'string') {\n _hash = '\"' + args[i] + '\"';\n }\n else {\n _hash = String(args[i]);\n }\n }\n else {\n if (!table.has(args[i])) {\n _hash = counter;\n table.set(args[i], counter++);\n }\n else {\n _hash = table.get(args[i]);\n }\n }\n key += '@' + _hash;\n }\n return key;\n}\n//# sourceMappingURL=hash.js.map","import hash from '../lib/hash';\nfunction serializeKeyDefault(key) {\n if (typeof key === 'function') {\n try {\n key = key();\n }\n catch (err) {\n // dependencies not ready\n key = '';\n }\n }\n if (Array.isArray(key)) {\n key = hash(key);\n }\n else {\n // convert null to ''\n key = String(key || '');\n }\n return key;\n}\nvar SWRVCache = /** @class */ (function () {\n function SWRVCache(ttl) {\n if (ttl === void 0) { ttl = 0; }\n this.items = new Map();\n this.ttl = ttl;\n }\n SWRVCache.prototype.serializeKey = function (key) {\n return serializeKeyDefault(key);\n };\n SWRVCache.prototype.get = function (k) {\n var _key = this.serializeKey(k);\n return this.items.get(_key);\n };\n SWRVCache.prototype.set = function (k, v, ttl) {\n var _key = this.serializeKey(k);\n var timeToLive = ttl || this.ttl;\n var now = Date.now();\n var item = {\n data: v,\n createdAt: now,\n expiresAt: timeToLive ? now + timeToLive : Infinity\n };\n this.dispatchExpire(timeToLive, item, _key);\n this.items.set(_key, item);\n };\n SWRVCache.prototype.dispatchExpire = function (ttl, item, serializedKey) {\n var _this = this;\n ttl && setTimeout(function () {\n var current = Date.now();\n var hasExpired = current >= item.expiresAt;\n if (hasExpired)\n _this.delete(serializedKey);\n }, ttl);\n };\n SWRVCache.prototype.delete = function (serializedKey) {\n this.items.delete(serializedKey);\n };\n return SWRVCache;\n}());\nexport default SWRVCache;\n//# sourceMappingURL=index.js.map","function isOnline() {\n if (typeof navigator.onLine !== 'undefined') {\n return navigator.onLine;\n }\n // always assume it's online\n return true;\n}\nfunction isDocumentVisible() {\n if (typeof document !== 'undefined' &&\n typeof document.visibilityState !== 'undefined') {\n return document.visibilityState !== 'hidden';\n }\n // always assume it's visible\n return true;\n}\nvar fetcher = function (url) { return fetch(url).then(function (res) { return res.json(); }); };\nexport default {\n isOnline: isOnline,\n isDocumentVisible: isDocumentVisible,\n fetcher: fetcher\n};\n//# sourceMappingURL=web-preset.js.map","var __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (_) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __read = (this && this.__read) || function (o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\n/** ____\n *--------------/ \\.------------------/\n * / swrv \\. / //\n * / / /\\. / //\n * / _____/ / \\. /\n * / / ____/ . \\. /\n * / \\ \\_____ \\. /\n * / . \\_____ \\ \\ / //\n * \\ _____/ / ./ / //\n * \\ / _____/ ./ /\n * \\ / / . ./ /\n * \\ / / ./ /\n * . \\/ ./ / //\n * \\ ./ / //\n * \\.. / /\n * . ||| /\n * ||| /\n * . ||| / //\n * ||| / //\n * ||| /\n */\nimport { reactive, watch, ref, toRefs, \n// isRef,\ngetCurrentScope, onScopeDispose, isReadonly } from 'vue';\nimport webPreset from './lib/web-preset';\nimport SWRVCache from './cache';\nvar DATA_CACHE = new SWRVCache();\nvar REF_CACHE = new SWRVCache();\nvar PROMISES_CACHE = new SWRVCache();\nvar defaultConfig = {\n cache: DATA_CACHE,\n refreshInterval: 0,\n ttl: 0,\n serverTTL: 1000,\n dedupingInterval: 2000,\n revalidateOnFocus: true,\n revalidateDebounce: 0,\n shouldRetryOnError: true,\n errorRetryInterval: 5000,\n errorRetryCount: 5,\n fetcher: webPreset.fetcher,\n isOnline: webPreset.isOnline,\n isDocumentVisible: webPreset.isDocumentVisible\n};\n/**\n * Cache the refs for later revalidation\n */\nfunction setRefCache(key, theRef, ttl) {\n var refCacheItem = REF_CACHE.get(key);\n if (refCacheItem) {\n refCacheItem.data.push(theRef);\n }\n else {\n // #51 ensures ref cache does not evict too soon\n var gracePeriod = 5000;\n REF_CACHE.set(key, [theRef], ttl > 0 ? ttl + gracePeriod : ttl);\n }\n}\nfunction onErrorRetry(revalidate, errorRetryCount, config) {\n if (!config.isDocumentVisible()) {\n return;\n }\n if (config.errorRetryCount !== undefined && errorRetryCount > config.errorRetryCount) {\n return;\n }\n var count = Math.min(errorRetryCount || 0, config.errorRetryCount);\n var timeout = count * config.errorRetryInterval;\n setTimeout(function () {\n revalidate(null, { errorRetryCount: count + 1, shouldRetryOnError: true });\n }, timeout);\n}\n/**\n * Evaluate shouldRetryOnError option\n */\nfunction resolveRetryFlag(_a) {\n var _b = _a.shouldRetry, shouldRetry = _b === void 0 ? undefined : _b, error = _a.error;\n if (typeof shouldRetry === 'function') {\n return shouldRetry(error);\n }\n if (typeof shouldRetry === 'boolean') {\n return shouldRetry;\n }\n return defaultConfig.shouldRetryOnError;\n}\n/**\n * Main mutation function for receiving data from promises to change state and\n * set data cache\n */\nvar mutate = function (key, res, cache, ttl) {\n if (cache === void 0) { cache = DATA_CACHE; }\n if (ttl === void 0) { ttl = defaultConfig.ttl; }\n return __awaiter(void 0, void 0, void 0, function () {\n var data, error, isValidating, err_1, newData, stateRef, refs_1;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!isPromise(res)) return [3 /*break*/, 5];\n _a.label = 1;\n case 1:\n _a.trys.push([1, 3, , 4]);\n return [4 /*yield*/, res];\n case 2:\n data = _a.sent();\n return [3 /*break*/, 4];\n case 3:\n err_1 = _a.sent();\n error = err_1;\n return [3 /*break*/, 4];\n case 4: return [3 /*break*/, 6];\n case 5:\n data = res;\n _a.label = 6;\n case 6:\n // eslint-disable-next-line prefer-const\n isValidating = false;\n newData = { data: data, error: error, isValidating: isValidating };\n if (typeof data !== 'undefined') {\n try {\n cache.set(key, newData, ttl);\n }\n catch (err) {\n console.error('swrv(mutate): failed to set cache', err);\n }\n }\n stateRef = REF_CACHE.get(key);\n if (stateRef && stateRef.data.length) {\n refs_1 = stateRef.data.filter(function (r) { return r.key === key; });\n refs_1.forEach(function (r, idx) {\n if (typeof newData.data !== 'undefined') {\n r.data = newData.data;\n }\n r.error = newData.error;\n r.isValidating = newData.isValidating;\n r.isLoading = newData.isValidating;\n var isLast = idx === refs_1.length - 1;\n if (!isLast) {\n // Clean up refs that belonged to old keys\n delete refs_1[idx];\n }\n });\n refs_1 = refs_1.filter(Boolean);\n }\n return [2 /*return*/, newData];\n }\n });\n });\n};\nfunction useSWRV() {\n var _this = this;\n var args = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n args[_i] = arguments[_i];\n }\n var key;\n var fn;\n var config = __assign({}, defaultConfig);\n var unmounted = false;\n var isHydrated = false;\n if (!getCurrentScope()) {\n console.error('useSWRV must be called inside setup() or an active effectScope().');\n return null;\n }\n var IS_SERVER = typeof window === 'undefined' || typeof document === 'undefined';\n // #region ssr\n /**\n const isSsrHydration = Boolean(\n \\!IS_SERVER &&\n vm.$vnode &&\n vm.$vnode.elm &&\n vm.$vnode.elm.dataset &&\n vm.$vnode.elm.dataset.swrvKey)\n */\n // #endregion\n if (args.length >= 1) {\n key = args[0];\n }\n if (args.length >= 2) {\n fn = args[1];\n }\n if (args.length > 2) {\n config = __assign(__assign({}, config), args[2]);\n }\n var ttl = IS_SERVER ? config.serverTTL : config.ttl;\n var keyRef = typeof key === 'function' ? key : ref(key);\n if (typeof fn === 'undefined') {\n // use the global fetcher\n fn = config.fetcher;\n }\n var stateRef = null;\n // #region ssr\n // if (isSsrHydration) {\n // // component was ssrHydrated, so make the ssr reactive as the initial data\n // const swrvState = (window as any).__SWRV_STATE__ ||\n // ((window as any).__NUXT__ && (window as any).__NUXT__.swrv) || []\n // const swrvKey = +(vm as any).$vnode.elm.dataset.swrvKey\n // if (swrvKey !== undefined && swrvKey !== null) {\n // const nodeState = swrvState[swrvKey] || []\n // const instanceState = nodeState[isRef(keyRef) ? keyRef.value : keyRef()]\n // if (instanceState) {\n // stateRef = reactive(instanceState)\n // isHydrated = true\n // }\n // }\n // }\n // #endregion\n if (!stateRef) {\n stateRef = reactive({\n data: undefined,\n error: undefined,\n isValidating: true,\n isLoading: true,\n key: null\n });\n }\n /**\n * Revalidate the cache, mutate data\n */\n var revalidate = function (data, opts) { return __awaiter(_this, void 0, void 0, function () {\n var isFirstFetch, keyVal, cacheItem, newData, fetcher, shouldRevalidate, trigger;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n isFirstFetch = stateRef.data === undefined;\n keyVal = keyRef.value;\n if (!keyVal) {\n return [2 /*return*/];\n }\n cacheItem = config.cache.get(keyVal);\n newData = cacheItem && cacheItem.data;\n stateRef.isValidating = true;\n stateRef.isLoading = !newData;\n if (newData) {\n stateRef.data = newData.data;\n stateRef.error = newData.error;\n }\n fetcher = data || fn;\n if (!fetcher ||\n (!config.isDocumentVisible() && !isFirstFetch) ||\n ((opts === null || opts === void 0 ? void 0 : opts.forceRevalidate) !== undefined && !(opts === null || opts === void 0 ? void 0 : opts.forceRevalidate))) {\n stateRef.isValidating = false;\n stateRef.isLoading = false;\n return [2 /*return*/];\n }\n // Dedupe items that were created in the last interval #76\n if (cacheItem) {\n shouldRevalidate = Boolean(((Date.now() - cacheItem.createdAt) >= config.dedupingInterval) || (opts === null || opts === void 0 ? void 0 : opts.forceRevalidate));\n if (!shouldRevalidate) {\n stateRef.isValidating = false;\n stateRef.isLoading = false;\n return [2 /*return*/];\n }\n }\n trigger = function () { return __awaiter(_this, void 0, void 0, function () {\n var promiseFromCache, fetcherArgs, newPromise, configAllows, optsAllows, shouldRetryOnError;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n promiseFromCache = PROMISES_CACHE.get(keyVal);\n if (!!promiseFromCache) return [3 /*break*/, 2];\n fetcherArgs = Array.isArray(keyVal) ? keyVal : [keyVal];\n newPromise = fetcher.apply(void 0, __spreadArray([], __read(fetcherArgs), false));\n PROMISES_CACHE.set(keyVal, newPromise, config.dedupingInterval);\n return [4 /*yield*/, mutate(keyVal, newPromise, config.cache, ttl)];\n case 1:\n _a.sent();\n return [3 /*break*/, 4];\n case 2: return [4 /*yield*/, mutate(keyVal, promiseFromCache.data, config.cache, ttl)];\n case 3:\n _a.sent();\n _a.label = 4;\n case 4:\n stateRef.isValidating = false;\n stateRef.isLoading = false;\n PROMISES_CACHE.delete(keyVal);\n if (stateRef.error !== undefined) {\n configAllows = resolveRetryFlag({ shouldRetry: config.shouldRetryOnError, error: stateRef.error });\n optsAllows = resolveRetryFlag({\n shouldRetry: opts ? opts.shouldRetryOnError : true,\n error: stateRef.error\n });\n shouldRetryOnError = !unmounted && configAllows && optsAllows;\n if (shouldRetryOnError) {\n onErrorRetry(revalidate, opts ? opts.errorRetryCount : 1, config);\n }\n }\n return [2 /*return*/];\n }\n });\n }); };\n if (!(newData && config.revalidateDebounce)) return [3 /*break*/, 1];\n setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!!unmounted) return [3 /*break*/, 2];\n return [4 /*yield*/, trigger()];\n case 1:\n _a.sent();\n _a.label = 2;\n case 2: return [2 /*return*/];\n }\n });\n }); }, config.revalidateDebounce);\n return [3 /*break*/, 3];\n case 1: return [4 /*yield*/, trigger()];\n case 2:\n _a.sent();\n _a.label = 3;\n case 3: return [2 /*return*/];\n }\n });\n }); };\n var revalidateCall = function () { return __awaiter(_this, void 0, void 0, function () { return __generator(this, function (_a) {\n return [2 /*return*/, revalidate(null, { shouldRetryOnError: false })];\n }); }); };\n var timer = null;\n if (!IS_SERVER) {\n var tick_1 = function () { return __awaiter(_this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!(!stateRef.error && config.isOnline())) return [3 /*break*/, 2];\n // if API request errored, we stop polling in this round\n // and let the error retry function handle it\n return [4 /*yield*/, revalidate()];\n case 1:\n // if API request errored, we stop polling in this round\n // and let the error retry function handle it\n _a.sent();\n return [3 /*break*/, 3];\n case 2:\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n _a.label = 3;\n case 3:\n if (config.refreshInterval && !unmounted) {\n timer = setTimeout(tick_1, config.refreshInterval);\n }\n return [2 /*return*/];\n }\n });\n }); };\n if (config.refreshInterval) {\n timer = setTimeout(tick_1, config.refreshInterval);\n }\n if (config.revalidateOnFocus) {\n document.addEventListener('visibilitychange', revalidateCall, false);\n window.addEventListener('focus', revalidateCall, false);\n }\n }\n onScopeDispose(function () {\n unmounted = true;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n if (!IS_SERVER && config.revalidateOnFocus) {\n document.removeEventListener('visibilitychange', revalidateCall, false);\n window.removeEventListener('focus', revalidateCall, false);\n }\n var refCacheItem = REF_CACHE.get(keyRef.value);\n if (refCacheItem) {\n refCacheItem.data = refCacheItem.data.filter(function (ref) { return ref !== stateRef; });\n }\n });\n // #region ssr\n // if (IS_SERVER) {\n // // make sure srwv exists in ssrContext\n // let swrvRes = []\n // if (vm.$ssrContext) {\n // swrvRes = vm.$ssrContext.swrv = vm.$ssrContext.swrv || swrvRes\n // }\n // const ssrKey = swrvRes.length\n // if (!vm.$vnode || (vm.$node && !vm.$node.data)) {\n // vm.$vnode = {\n // data: { attrs: { 'data-swrv-key': ssrKey } }\n // }\n // }\n // const attrs = (vm.$vnode.data.attrs = vm.$vnode.data.attrs || {})\n // attrs['data-swrv-key'] = ssrKey\n // // Nuxt compatibility\n // if (vm.$ssrContext && vm.$ssrContext.nuxt) {\n // vm.$ssrContext.nuxt.swrv = swrvRes\n // }\n // onServerPrefetch(async () => {\n // await revalidate()\n // if (!swrvRes[ssrKey]) swrvRes[ssrKey] = {}\n // swrvRes[ssrKey][keyRef.value] = {\n // data: stateRef.data,\n // error: stateRef.error,\n // isValidating: stateRef.isValidating\n // }\n // })\n // }\n // #endregion\n /**\n * Revalidate when key dependencies change\n */\n try {\n watch(keyRef, function (val) {\n if (!isReadonly(keyRef)) {\n keyRef.value = val;\n }\n stateRef.key = val;\n stateRef.isValidating = Boolean(val);\n setRefCache(keyRef.value, stateRef, ttl);\n if (!IS_SERVER && !isHydrated && keyRef.value) {\n revalidate();\n }\n isHydrated = false;\n }, {\n immediate: true\n });\n }\n catch (_a) {\n // do nothing\n }\n var res = __assign(__assign({}, toRefs(stateRef)), { mutate: function (data, opts) { return revalidate(data, __assign(__assign({}, opts), { forceRevalidate: true })); } });\n return res;\n}\nfunction isPromise(p) {\n return p !== null && typeof p === 'object' && typeof p.then === 'function';\n}\nexport { mutate };\nexport default useSWRV;\n//# sourceMappingURL=use-swrv.js.map","import SWRVCache from './cache';\nimport useSWRV, { mutate } from './use-swrv';\nexport { mutate, SWRVCache };\nexport default useSWRV;\n//# sourceMappingURL=index.js.map","// src/use-object.ts\nimport {\n isAbortError,\n safeValidateTypes\n} from \"@ai-sdk/provider-utils\";\nimport {\n asSchema,\n isDeepEqualData,\n parsePartialJson\n} from \"ai\";\nimport swrv from \"swrv\";\nimport { ref } from \"vue\";\nvar getOriginalFetch = () => fetch;\nvar uniqueId = 0;\nvar useSWRV = swrv.default || swrv;\nvar store = {};\nfunction useObject({\n api,\n id,\n schema,\n initialValue,\n fetch: fetch2,\n onError,\n onFinish,\n headers,\n credentials\n}) {\n var _a;\n const completionId = id || `completion-${uniqueId++}`;\n const key = `${api}|${completionId}`;\n const { data, mutate: originalMutate } = useSWRV(key, () => key in store ? store[key] : initialValue);\n const { data: isLoading, mutate: mutateLoading } = useSWRV(\n `${completionId}-loading`,\n null\n );\n (_a = isLoading.value) != null ? _a : isLoading.value = false;\n data.value || (data.value = initialValue);\n const mutateObject = (value) => {\n store[key] = value;\n return originalMutate();\n };\n const error = ref(void 0);\n let abortController = null;\n const stop = async () => {\n if (abortController) {\n try {\n abortController.abort();\n } catch (e) {\n } finally {\n abortController = null;\n }\n }\n await mutateLoading(() => false);\n };\n const clearObject = async () => {\n error.value = void 0;\n await mutateLoading(() => false);\n await mutateObject(void 0);\n data.value = void 0;\n };\n const clear = async () => {\n await stop();\n await clearObject();\n };\n const submit = async (input) => {\n try {\n await clearObject();\n await mutateLoading(() => true);\n abortController = new AbortController();\n const actualFetch = fetch2 != null ? fetch2 : getOriginalFetch();\n const response = await actualFetch(api, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...headers\n },\n credentials: credentials != null ? credentials : \"same-origin\",\n signal: abortController.signal,\n body: JSON.stringify(input)\n });\n if (!response.ok) {\n throw new Error(\n await response.text() || \"Failed to fetch the response.\"\n );\n }\n if (!response.body) {\n throw new Error(\"The response body is empty.\");\n }\n let accumulatedText = \"\";\n let latestObject = void 0;\n await response.body.pipeThrough(new TextDecoderStream()).pipeTo(\n new WritableStream({\n async write(chunk) {\n accumulatedText += chunk;\n const { value } = await parsePartialJson(accumulatedText);\n const currentObject = value;\n if (!isDeepEqualData(latestObject, currentObject)) {\n latestObject = currentObject;\n await mutateObject(currentObject);\n }\n },\n async close() {\n await mutateLoading(() => false);\n abortController = null;\n if (onFinish) {\n const validationResult = await safeValidateTypes({\n value: latestObject,\n schema: asSchema(schema)\n });\n onFinish(\n validationResult.success ? {\n object: validationResult.value,\n error: void 0\n } : { object: void 0, error: validationResult.error }\n );\n }\n }\n })\n );\n } catch (err) {\n if (isAbortError(err))\n return;\n if (onError && err instanceof Error)\n onError(err);\n await mutateLoading(() => false);\n error.value = err instanceof Error ? err : new Error(String(err));\n }\n };\n return {\n submit,\n object: data,\n error,\n isLoading,\n stop,\n clear\n };\n}\n\n// src/use-completion.ts\nimport {\n callCompletionApi\n} from \"ai\";\nimport swrv2 from \"swrv\";\nimport { ref as ref2, unref } from \"vue\";\nvar uniqueId2 = 0;\nvar useSWRV2 = swrv2.default || swrv2;\nvar store2 = {};\nfunction useCompletion({\n api = \"/api/completion\",\n id,\n initialCompletion = \"\",\n initialInput = \"\",\n credentials,\n headers,\n body,\n streamProtocol,\n onFinish,\n onError,\n fetch: fetch2\n} = {}) {\n var _a, _b;\n const completionId = id || `completion-${uniqueId2++}`;\n const key = `${api}|${completionId}`;\n const { data, mutate: originalMutate } = useSWRV2(\n key,\n () => {\n var _a2;\n return (_a2 = store2[key]) != null ? _a2 : initialCompletion;\n }\n );\n const { data: isLoading, mutate: mutateLoading } = useSWRV2(\n `${completionId}-loading`,\n null\n );\n (_a = isLoading.value) != null ? _a : isLoading.value = false;\n (_b = data.value) != null ? _b : data.value = initialCompletion;\n const mutate = (data2) => {\n store2[key] = data2;\n return originalMutate();\n };\n const completion = data;\n const error = ref2(void 0);\n let abortController = null;\n async function triggerRequest(prompt, options) {\n return callCompletionApi({\n api,\n prompt,\n credentials,\n headers: {\n ...headers,\n ...options == null ? void 0 : options.headers\n },\n body: {\n ...unref(body),\n ...options == null ? void 0 : options.body\n },\n streamProtocol,\n setCompletion: mutate,\n setLoading: (loading) => mutateLoading(() => loading),\n setError: (err) => {\n error.value = err;\n },\n setAbortController: (controller) => {\n abortController = controller;\n },\n onFinish,\n onError,\n fetch: fetch2\n });\n }\n const complete = async (prompt, options) => {\n return triggerRequest(prompt, options);\n };\n const stop = () => {\n if (abortController) {\n abortController.abort();\n abortController = null;\n }\n };\n const setCompletion = (completion2) => {\n mutate(completion2);\n };\n const input = ref2(initialInput);\n const handleSubmit = (event) => {\n var _a2;\n (_a2 = event == null ? void 0 : event.preventDefault) == null ? void 0 : _a2.call(event);\n const inputValue = input.value;\n return inputValue ? complete(inputValue) : void 0;\n };\n return {\n completion,\n complete,\n error,\n stop,\n setCompletion,\n input,\n handleSubmit,\n isLoading\n };\n}\n\n// src/chat.vue.ts\nimport {\n AbstractChat\n} from \"ai\";\nimport { ref as ref3 } from \"vue\";\nvar VueChatState = class {\n constructor(messages) {\n this.statusRef = ref3(\"ready\");\n this.errorRef = ref3(void 0);\n this.pushMessage = (message) => {\n this.messagesRef.value = [...this.messagesRef.value, message];\n };\n this.popMessage = () => {\n this.messagesRef.value = this.messagesRef.value.slice(0, -1);\n };\n this.replaceMessage = (index, message) => {\n this.messagesRef.value[index] = { ...message };\n };\n this.snapshot = (value) => value;\n this.messagesRef = ref3(messages != null ? messages : []);\n }\n get messages() {\n return this.messagesRef.value;\n }\n set messages(messages) {\n this.messagesRef.value = messages;\n }\n get status() {\n return this.statusRef.value;\n }\n set status(status) {\n this.statusRef.value = status;\n }\n get error() {\n return this.errorRef.value;\n }\n set error(error) {\n this.errorRef.value = error;\n }\n};\nvar Chat = class extends AbstractChat {\n constructor({ messages, ...init }) {\n super({\n ...init,\n state: new VueChatState(messages)\n });\n }\n};\n\n// src/use-chat.ts\nimport {\n AbstractChat as AbstractChat2\n} from \"ai\";\nimport {\n computed,\n shallowRef,\n toValue,\n triggerRef,\n watch\n} from \"vue\";\nvar VueChat = class extends AbstractChat2 {\n constructor({\n state,\n ...init\n }) {\n super({\n ...init,\n state\n });\n }\n};\nfunction useChat(init) {\n const messages = shallowRef([]);\n const status = shallowRef(\"ready\");\n const error = shallowRef();\n const chatStateWrapper = {\n get messages() {\n return messages.value;\n },\n set messages(messageList) {\n messages.value = messageList;\n },\n get status() {\n return status.value;\n },\n set status(statusValue) {\n status.value = statusValue;\n },\n get error() {\n return error.value;\n },\n set error(errorValue) {\n error.value = errorValue;\n },\n pushMessage(message) {\n messages.value.push(message);\n triggerRef(messages);\n },\n popMessage() {\n messages.value.pop();\n triggerRef(messages);\n },\n replaceMessage(index, message) {\n messages.value[index] = { ...message };\n triggerRef(messages);\n },\n snapshot: (value) => value\n };\n const chatInstance = shallowRef();\n watch(\n () => toValue(init),\n (opts) => {\n var _a;\n messages.value = (_a = opts == null ? void 0 : opts.messages) != null ? _a : [];\n status.value = \"ready\";\n error.value = void 0;\n chatInstance.value = new VueChat({\n ...opts,\n state: chatStateWrapper\n });\n },\n { immediate: true }\n );\n return {\n id: computed(() => chatInstance.value.id),\n status,\n messages,\n error,\n addToolApprovalResponse: (opts) => chatInstance.value.addToolApprovalResponse(opts),\n addToolOutput: (opts) => chatInstance.value.addToolOutput(opts),\n clearError: () => chatInstance.value.clearError(),\n regenerate: (opts) => chatInstance.value.regenerate(opts),\n sendMessage: (...args) => chatInstance.value.sendMessage(...args),\n stop: () => chatInstance.value.stop(),\n resumeStream: (opts) => chatInstance.value.resumeStream(opts)\n };\n}\n\n// src/index.ts\nvar experimental_useObject = useObject;\nexport {\n Chat,\n experimental_useObject,\n useChat,\n useCompletion,\n useObject\n};\n//# sourceMappingURL=index.js.map","import {\n DefaultChatTransport,\n lastAssistantMessageIsCompleteWithApprovalResponses,\n} from 'ai'\nimport type { FileUIPart } from 'ai'\nimport { computed, ref, watch, watchEffect } from 'vue'\nimport { useI18n } from 'vue-i18n'\nimport { usePreferredDark } from '@vueuse/core'\nimport { generateId } from 'ai'\nimport { Chat } from '@ai-sdk/vue'\nimport { defineStore } from 'pinia'\nimport { useSafeLocalStorage } from '../useSafeLocalStorage'\nimport { isUserAnsweredTool, TOOL_TERMINAL_STATES } from 'models'\nimport type {\n Chat as ChatRecord,\n AgentFileUpload,\n AgentInterface,\n AgentModel,\n AgentVoiceCapability,\n AgentGatewayOptions,\n ChatMessageActions,\n MessageFeedback,\n RevisedAnswer,\n UIChatMessage,\n AgentTools,\n} from 'models'\nimport {\n collectDeviceContext,\n collectGeolocation,\n} from 'utils/src/device-context'\nimport { logger } from 'utils/src/logger'\nimport { getTextPart } from 'utils'\nimport { createChatbotApiClient, type ChatbotFile } from './api'\nimport type { PendingAttachment } from './types'\n\n// The store exposes `chat` (a `Chat<UIChatMessage>` computed) whose inferred\n// type transitively references JSONObject. Re-export it so consumers can emit\n// portable declarations that name the type (TS2883) without an unused import.\n// This only works while the whole workspace resolves ONE @ai-sdk/provider: the\n// declaration emitter needs the name to point at the very file the type came\n// from, so the peer ranges on `ai`, `@ai-sdk/vue` and `@ai-sdk/provider` here\n// and in `components` are pinned to the same versions the root installs.\nexport type { JSONObject } from '@ai-sdk/provider'\n\n/**\n * Id prefix of the spoken QUESTIONS the client shows before the server has\n * them. Their own id space is what lets a reload replace them instead of\n * duplicating them (see {@link unpersistedVoiceLines}). What the agent says\n * never gets one: a spoken answer reaches the screen only as the written turn\n * the server persisted, whole, with its sources and its widgets.\n */\nexport const VOICE_LINE_ID_PREFIX = 'voice-'\n\n/** Whitespace-collapsed lowercase text, for comparing two transcripts. */\nconst normalizeSpoken = (text: string): string =>\n text.replace(/\\s+/g, ' ').trim().toLowerCase()\n\n/** Text of a message, whitespace-collapsed, for comparing two transcripts. */\nconst spokenText = (message: UIChatMessage): string =>\n normalizeSpoken(\n message.parts\n .filter((part) => part.type === 'text')\n .map((part) => ('text' in part ? part.text : ''))\n .join(' '),\n )\n\n/**\n * The spoken questions the reload would silently drop.\n *\n * A question is shown the moment the provider transcribes it, while the server\n * writes it only when the turn it belongs to has been answered. So between the\n * two there is always a window, and replacing the list with the persisted one\n * wholesale made the caller's own words vanish from the screen while they were\n * still speaking (reported 2026-08-06).\n *\n * A line counts as persisted when a server message says the same thing, or\n * ENDS with it: the provider can prepend its own lead-in to what it heard, so\n * the spoken line is the persisted one with a prefix. Nothing looser than\n * that: matching on \"contains\" either way round let a short persisted turn\n * (\"no\", \"sì\") swallow a whole question the server did not have yet, which is\n * the disappearance this was supposed to fix.\n *\n * Only questions are considered because only questions are shown: what the\n * agent says arrives as the written turn and nothing else (see\n * {@link VOICE_LINE_ID_PREFIX}).\n */\nconst SHORTEST_MATCHABLE_LINE = 8\n\nconst unpersistedVoiceLines = (\n persisted: UIChatMessage[],\n shown: UIChatMessage[],\n): UIChatMessage[] => {\n // Consumed as they match, one persisted line for one spoken line. With a\n // plain `some` a single persisted \"sì\" accounted for every later \"sì\" the\n // caller said, and the new one vanished from the screen before the server\n // had it.\n const server = persisted\n .filter((message) => message.role === 'user')\n .map((message) => ({ text: spokenText(message), taken: false }))\n return shown.filter((message) => {\n if (\n !message.id.startsWith(VOICE_LINE_ID_PREFIX) ||\n message.role !== 'user'\n ) {\n return false\n }\n const text = spokenText(message)\n const match = server.find(\n (other) =>\n !other.taken &&\n other.text.length > 0 &&\n (other.text === text ||\n (other.text.length >= SHORTEST_MATCHABLE_LINE &&\n text.endsWith(other.text))),\n )\n if (!match) {\n return true\n }\n match.taken = true\n return false\n })\n}\n\n/** Tool name of a tool invocation part, '' for any other part. */\nconst partToolName = (part: UIChatMessage['parts'][number]): string => {\n const type = (part as { type?: string }).type ?? ''\n if (type === 'dynamic-tool') {\n return (part as { toolName?: string }).toolName ?? ''\n }\n return type.startsWith('tool-') ? type.slice('tool-'.length) : ''\n}\n\n/**\n * True when the last assistant step carries a client tool the user has\n * answered, and nothing left in it for the user to answer.\n *\n * Replaces the SDK's `lastAssistantMessageIsCompleteWithToolCalls`, which asks\n * for an output from EVERY tool part of the step. Most client tools never get\n * one: they render from the call input and there is nothing to send back (see\n * USER_ANSWERED_TOOLS). So a step that shows a form NEXT TO another widget\n * never satisfied that condition, the submitted answers stayed in the browser\n * and the turn was never resumed: the user filled the form and the agent went\n * silent. Reported on 2026-08-27 for showForm + showSources, the routine\n * pairing on a knowledge-base turn, where the sources closure is synthesized\n * server-side into the same step.\n *\n * At least one answered tool is required, so a turn ending on display-only\n * widgets still sends nothing.\n */\nexport const lastAssistantMessageIsCompleteWithAnsweredClientTools = ({\n messages,\n}: {\n messages: UIChatMessage[]\n}): boolean => {\n const message = messages[messages.length - 1]\n if (!message || message.role !== 'assistant') {\n return false\n }\n const lastStepStartIndex = message.parts.reduce(\n (last, part, index) => (part.type === 'step-start' ? index : last),\n -1,\n )\n const userAnsweredParts = message.parts\n .slice(lastStepStartIndex + 1)\n .filter(\n (part) =>\n !(part as { providerExecuted?: boolean }).providerExecuted &&\n isUserAnsweredTool(partToolName(part)),\n )\n return (\n userAnsweredParts.length > 0 &&\n userAnsweredParts.every((part) =>\n TOOL_TERMINAL_STATES.has((part as { state?: string }).state ?? ''),\n )\n )\n}\n\ntype ChatbotView = 'chat' | 'conversations' | 'profile' | 'auth' | 'files'\n\nexport function useChatbotStore(agentId: string) {\n return defineStore(`chatbot-${agentId}`, () => {\n const { t, te, locale } = useI18n({ useScope: 'global' })\n\n // === Configuration state ===\n const baseUrl = ref('')\n const basePath = ref<string | undefined>()\n const agentIdRef = ref(agentId)\n const name = ref<string | undefined>()\n const agentType = ref<'chat' | 'reasoning' | undefined>()\n const userId = ref<string | undefined>()\n const agentInterface = ref<AgentInterface | undefined>()\n const agentModel = ref<AgentModel | undefined>()\n const agentTools = ref<AgentTools | undefined>()\n const headers = ref<Record<string, string> | undefined>()\n const revisedAnswers = ref<RevisedAnswer[] | undefined>()\n /** Compatibility with PkChatbot `model` prop — overrides agentModel.model when set */\n const model = ref<string | undefined>()\n /** Raw actions from parent prop, filtered by agentType into `actions` */\n const actionsInput = ref<ChatMessageActions[] | undefined>()\n /** File upload configuration from agent settings */\n const agentFileUpload = ref<AgentFileUpload | undefined>()\n /** Voice configuration from agent settings: absent means no voice. */\n const agentVoice = ref<AgentVoiceCapability | undefined>()\n /** Fallback models for AI Gateway routing */\n const fallbackModels = ref<string[] | undefined>()\n /** Gateway options (ZDR, provider timeouts) */\n const gatewayOptions = ref<Partial<AgentGatewayOptions> | undefined>()\n /** External context set by the host application (e.g. via setContext() on the custom element). Validated server-side against the agent's externalContextSchema. */\n const externalContext = ref<Record<string, unknown> | undefined>()\n /** System-level theme override passed by the host application */\n const systemTheme = ref<'light' | 'dark' | undefined>()\n /** Hide the synthetic welcome message built from `initialMessage` (the fullscreen layout shows a greeting in its place) */\n const hideWelcomeMessage = ref(false)\n\n const prefersDark = usePreferredDark()\n const isDark = computed(() => {\n let theme = agentInterface.value?.theme\n if (!theme || theme === 'auto') {\n theme = systemTheme.value\n }\n if (!theme) {\n return prefersDark.value\n }\n return theme === 'dark'\n })\n\n const isReasoningAgent = computed(() => agentType.value === 'reasoning')\n\n const actions = computed<ChatMessageActions[] | undefined>(() => {\n if (!isReasoningAgent.value) {\n return actionsInput.value\n }\n return actionsInput.value?.filter(\n (action) =>\n !['upvote', 'downvote', 'feedback'].includes(action),\n )\n })\n\n // === LocalStorage chatId ===\n const storageId = useSafeLocalStorage<string | null>(\n computed(() => `${agentIdRef.value}-chatId`),\n null,\n )\n\n watchEffect(() => {\n if (!storageId.value) {\n storageId.value = generateId()\n }\n })\n\n const localChatId = computed({\n get: () => storageId.value!,\n set: (value: string) => {\n storageId.value = value\n },\n })\n\n // === Chat error ===\n const chatError = ref<Error | undefined>()\n const isConversationBlocked = ref(false)\n\n const isConversationBlockedError = computed(\n () =>\n chatError.value?.message\n ?.toLowerCase()\n .includes('conversation-blocked') ?? false,\n )\n\n function isEntityNotFoundError(error: Error): boolean {\n try {\n const parsed = JSON.parse(error.message)\n return (\n parsed.status === 404 ||\n parsed.type?.includes('entity-not-found')\n )\n } catch {\n return false\n }\n }\n\n /**\n * When an anonymous session expires and rotates, the server returns a\n * 404 (entity-not-found) because the existing chatId belongs to the\n * previous userId. In that case we transparently generate a new chatId\n * and re-send the last user message so the conversation restarts\n * without the user noticing.\n */\n function handleChatError(error: Error) {\n if (isEntityNotFoundError(error)) {\n const pendingMessages = chat.value.messages.filter(\n (m) => m.role === 'user',\n )\n const lastUserMessage =\n pendingMessages[pendingMessages.length - 1]\n const lastUserText = lastUserMessage\n ? getTextPart(lastUserMessage)\n : undefined\n\n localChatId.value = generateId()\n chat.value.clearError()\n chatError.value = undefined\n\n if (lastUserText) {\n chat.value.sendMessage({ text: lastUserText })\n }\n return\n }\n\n logger.error(error)\n chatError.value = error\n if (isConversationBlockedError.value) {\n isConversationBlocked.value = true\n }\n }\n\n // === API client ===\n const apiClient = computed(() =>\n createChatbotApiClient({\n baseUrl: baseUrl.value,\n basePath: basePath.value,\n headers: () => headers.value,\n }),\n )\n\n // === Chat streaming instance ===\n const storedGeolocation = ref<{\n geolocationLatitude: number\n geolocationLongitude: number\n geolocationAccuracy?: number\n geolocationCity?: string\n } | null>(null)\n\n /**\n * The device this conversation is happening on, plus the position if\n * the user has shared it. Sent with every typed turn and, once, when a\n * call opens: a spoken turn reaches the backend from the voice provider\n * and can carry nothing of its own.\n */\n const buildDeviceContext = () => ({\n ...collectDeviceContext(),\n ...(storedGeolocation.value ?? {}),\n })\n\n const chat = computed(\n () =>\n new Chat<UIChatMessage>({\n id: localChatId.value,\n transport: new DefaultChatTransport({\n api: apiClient.value.getChatEndpoint(\n agentIdRef.value,\n isReasoningAgent.value ? 'reasoning' : 'chat',\n ),\n prepareSendMessagesRequest: ({\n messages: msgs,\n id,\n }) => ({\n body: {\n id,\n messages: [msgs[msgs.length - 1]],\n model: model.value,\n prompt: agentModel.value?.prompt,\n maxOutputTokens:\n agentModel.value?.maxOutputTokens,\n temperature: agentModel.value?.temperature,\n presencePenalty:\n agentModel.value?.presencePenalty,\n frequencyPenalty:\n agentModel.value?.frequencyPenalty,\n searchMode: agentModel.value?.searchMode,\n limit: agentModel.value?.limit,\n reasoning: agentModel.value?.reasoning,\n webSearch: agentTools.value?.webSearch,\n smoothStream:\n agentInterface.value?.smoothStream,\n deviceContext: buildDeviceContext(),\n externalContext: externalContext.value,\n disabledTools: agentTools.value?.disabled,\n fallbackModels: fallbackModels.value,\n gatewayOptions: gatewayOptions.value,\n },\n }),\n credentials: 'include',\n // Resolved per-request: reading `headers.value` here\n // would make this computed recreate the Chat (wiping\n // its messages) on every auth token rotation.\n headers: () => headers.value ?? {},\n }),\n // Two resume triggers: a client tool the user answered,\n // and a tool approval the user just answered. Without the\n // second one the approval response would sit in the\n // browser and the suspended call would never run.\n sendAutomaticallyWhen: (options) =>\n lastAssistantMessageIsCompleteWithAnsweredClientTools(\n options,\n ) ||\n lastAssistantMessageIsCompleteWithApprovalResponses(\n options,\n ),\n onError: handleChatError,\n // Chat UI init keeps `onFinish` in v7 (the onEnd rename\n // only applies to generateText/streamText callbacks).\n onFinish: () => {\n // A new chat is persisted on the backend only after the\n // first message: reload the list if it's not there yet.\n const id = localChatId.value\n if (\n !isReasoningAgent.value &&\n !conversations.value.some((c) => c.id === id)\n ) {\n loadConversations(agentIdRef.value)\n }\n },\n }),\n )\n\n // === Messages ===\n const initialMessageResolved = computed(() => {\n const val = agentInterface.value?.initialMessage\n if (!val?.[locale.value]) {\n return te('message.defaultAgentWelcome')\n ? t('message.defaultAgentWelcome')\n : ''\n }\n return val[locale.value]\n })\n\n // Stable across recomputations (locale or config changes), so keyed\n // renders don't remount the welcome bubble and feedback stays attached.\n const welcomeMessageId = generateId()\n const welcomeMessage = computed<UIChatMessage>(() => ({\n id: welcomeMessageId,\n role: 'assistant',\n parts: [{ type: 'text', text: initialMessageResolved.value }],\n }))\n\n const messages = computed(() => {\n // Resolve any remaining `attachment://` URLs that haven't been\n // resolved server-side yet (e.g. in-flight streaming messages).\n const resolveInFlight = (msgs: UIChatMessage[]) =>\n msgs.map((msg) => {\n if (msg.role !== 'user') {\n return msg\n }\n const hasFileParts = msg.parts.some(\n (p) => p.type === 'file',\n )\n if (!hasFileParts) {\n return msg\n }\n return {\n ...msg,\n parts: msg.parts.map((p) => {\n if (p.type !== 'file') {\n return p\n }\n const fp = p as FileUIPart\n if (fp.url.startsWith('attachment://')) {\n const storedFileName = fp.url.slice(\n 'attachment://'.length,\n )\n return {\n ...fp,\n url: apiClient.value.getMediaUrl(\n agentIdRef.value,\n localChatId.value,\n storedFileName,\n ),\n } as FileUIPart\n }\n // Blob URLs (from pending uploads) are already\n // usable as-is — don't append auth tokens.\n if (fp.url.startsWith('blob:')) {\n return fp\n }\n return {\n ...fp,\n url: apiClient.value.appendAuthToken(fp.url),\n } as FileUIPart\n }),\n }\n })\n\n if (isReasoningAgent.value) {\n return resolveInFlight(chat.value.messages)\n }\n if (\n !hideWelcomeMessage.value &&\n chat.value.messages?.[0]?.role !== 'assistant'\n ) {\n return [\n welcomeMessage.value,\n ...resolveInFlight(chat.value.messages),\n ]\n }\n return resolveInFlight(chat.value.messages)\n })\n\n // === Localized placeholder ===\n const inputMessagePlaceholder = computed(() => {\n const val = agentInterface.value?.messagePlaceholder\n if (!val?.[locale.value]) {\n return te('placeholder.askAnything')\n ? t('placeholder.askAnything')\n : ''\n }\n return val[locale.value]\n })\n\n // === Conversations ===\n const conversations = ref<ChatRecord[]>([])\n const isLoadingConversations = ref(false)\n const chatFiles = ref<ChatbotFile[]>([])\n const isLoadingChatFiles = ref(false)\n\n // === Navigation ===\n const activeView = ref<ChatbotView>('chat')\n\n // === Message feedback state ===\n const messageFeedbacks = ref<MessageFeedback[]>([])\n const feedbackDialogMessage = ref<UIChatMessage | undefined>()\n const isFeedbackSubmitting = ref(false)\n const isFeedbackSubmitted = ref(false)\n const feedbackSubmitError = ref<string | undefined>()\n\n // === Lead form state ===\n const isLeadSubmitted = ref(false)\n const isLoadingSubmitLead = ref(false)\n const submitLeadError = ref<string | undefined>()\n\n // === Input ===\n const input = ref('')\n const pendingAttachments = ref<PendingAttachment[]>([])\n const lastSubmittedInput = ref('')\n const messageCountBeforeSubmit = ref(0)\n\n // === Internal loaders ===\n async function loadConversations(id: string) {\n if (isReasoningAgent.value) {\n conversations.value = []\n return\n }\n isLoadingConversations.value = true\n try {\n conversations.value = await apiClient.value.getConversations(\n id,\n userId.value,\n )\n } catch {\n conversations.value = []\n } finally {\n isLoadingConversations.value = false\n }\n }\n\n // Files uploaded in the current chat (the user's \"My files\" entries\n // tied to this conversation). No chat → nothing to load.\n async function loadChatFiles() {\n const chatId = localChatId.value\n if (!chatId) {\n chatFiles.value = []\n return\n }\n isLoadingChatFiles.value = true\n try {\n chatFiles.value = await apiClient.value.getChatFiles(chatId)\n } catch {\n chatFiles.value = []\n } finally {\n isLoadingChatFiles.value = false\n }\n }\n\n function getChatFileUrl(documentId: string, inline = false) {\n return apiClient.value.getChatFileDownloadUrl(documentId, inline)\n }\n\n function getChatFilePreviewUrl(documentId: string) {\n return apiClient.value.getChatFilePreviewUrl(documentId)\n }\n\n // Exclude a file from the user's KB (soft-delete server-side); drop it\n // from the local list on success.\n async function deleteChatFile(documentId: string) {\n await apiClient.value.deleteChatFile(documentId)\n chatFiles.value = chatFiles.value.filter(\n (file) => file.documentId !== documentId,\n )\n }\n\n async function loadChat(id: string, chatId: string) {\n // Reasoning chats are never persisted and the Chat instance is\n // recreated empty on every chatId/agentId change: nothing to load.\n if (isReasoningAgent.value) {\n return\n }\n try {\n const data = await apiClient.value.getChat(id, chatId)\n // The chat may have advanced while the request was in flight\n // (the user submitted a message, or the chatId rotated): never\n // clobber local messages with a stale response. A wiped list\n // mid-stream also suppresses the synthetic welcome message,\n // because the streamed reply gets re-pushed at index 0.\n if (\n chatId !== localChatId.value ||\n chat.value.status !== 'ready' ||\n chat.value.messages.length > 0\n ) {\n return\n }\n if (data) {\n chat.value.messages = data.messages as UIChatMessage[]\n isConversationBlocked.value = data.blocked ?? false\n }\n } catch {\n // A new chat 404s here: the instance already starts empty,\n // clearing messages would race with the first submit.\n }\n }\n\n /**\n * A written turn is in flight, so the message list must not be replaced\n * under it. Read through a widened local on purpose: the status changes\n * across an await, which the compiler otherwise narrows away.\n */\n const isTurnInFlight = (): boolean => {\n const status: string = chat.value.status\n return status === 'submitted' || status === 'streaming'\n }\n\n /** Ordering of the concurrent reloads: see `refreshMessages`. */\n let refreshSequence = 0\n let refreshApplied = 0\n\n /**\n * Replaces the message list with what the server persisted.\n *\n * `loadChat` deliberately refuses to touch a non-empty list, because it\n * runs on mount and must never clobber a stream in flight. A voice turn\n * is the opposite case: the answer was produced by the provider calling\n * our backend, so the persisted chat is ahead of what this client shows\n * (the transcript we appended is text only, without sources or tool\n * results). Still guarded on an idle chat, for the same reason as there.\n *\n * Returns 'pending' when the server was still BEHIND what the client\n * shows, so the caller comes back for the rest: a USER line with no\n * persisted counterpart means the turn it belongs to has not been\n * written yet, and with it are missing the tool results and sources\n * that only the reload can bring (an agent line proves nothing: the\n * spoken fallback sentence exists only in the audio stream). Returns\n * 'caught-up' only when a reload was actually applied and nothing is\n * missing; everything else (a failed request, a stale response, a\n * written turn in flight) is 'indeterminate', which a poller must\n * treat as \"try again\", not as done: a killed voice turn persists\n * minutes after the call, and stopping on a failure left it off the\n * screen until the page was reloaded by hand (seen live 2026-08-26).\n *\n * A later reload wins over an earlier one, whatever order they answer\n * in: out-of-order answers are the normal case on a call, and a slow\n * fetch that started first would otherwise land last and take the\n * newest messages, their tool results and their sources off the screen.\n */\n async function refreshMessages(): Promise<\n 'pending' | 'caught-up' | 'indeterminate'\n > {\n // Only a turn in flight is a reason not to reload. Requiring\n // 'ready' also refused to reload after a failed submit ('error'),\n // which on a call left the conversation frozen on screen until the\n // page was reloaded by hand.\n if (isReasoningAgent.value || isTurnInFlight()) {\n return 'indeterminate'\n }\n const chatId = localChatId.value\n const mine = (refreshSequence += 1)\n try {\n const data = await apiClient.value.getChat(\n agentIdRef.value,\n chatId,\n )\n if (\n !data ||\n chatId !== localChatId.value ||\n isTurnInFlight() ||\n mine <= refreshApplied\n ) {\n return 'indeterminate'\n }\n refreshApplied = mine\n const persisted = data.messages as UIChatMessage[]\n const pending = unpersistedVoiceLines(\n persisted,\n chat.value.messages,\n )\n chat.value.messages = [...persisted, ...pending]\n isConversationBlocked.value = data.blocked ?? false\n return pending.length > 0 ? 'pending' : 'caught-up'\n } catch {\n // Nothing persisted yet (a new conversation is created by its\n // first write, so until then this request has nothing to\n // find), or a fetch that failed: either way not proof of\n // anything, so not 'caught-up'.\n }\n return 'indeterminate'\n }\n\n /**\n * Appends a message the client already knows about, without sending\n * anything: the voice transcript, whose turn is answered server-side.\n */\n function appendMessage(message: UIChatMessage) {\n chat.value.messages = [...chat.value.messages, message]\n }\n\n async function loadMessageFeedbacks(chatId: string) {\n try {\n messageFeedbacks.value =\n await apiClient.value.getMessageFeedbacks(chatId)\n } catch {\n messageFeedbacks.value = []\n }\n }\n\n function upsertLocalFeedback(feedback: MessageFeedback) {\n const idx = messageFeedbacks.value.findIndex(\n (f) => f.messageId === feedback.messageId,\n )\n if (idx >= 0) {\n messageFeedbacks.value[idx] = feedback\n } else {\n messageFeedbacks.value.push(feedback)\n }\n }\n\n function extractFeedbackContext(message: UIChatMessage) {\n const msgList = messages.value\n const idx = msgList.findIndex((m) => m.id === message.id)\n const assistantMessage = getTextPart(message) ?? ''\n const prevUser = msgList\n .slice(0, idx)\n .reverse()\n .find((m) => m.role === 'user')\n const userQuestion = getTextPart(prevUser ?? message) ?? ''\n return { userQuestion, assistantMessage }\n }\n\n // === Actions ===\n async function initialize(id: string, chatId: string) {\n await Promise.all([\n loadChat(id, chatId),\n loadConversations(id),\n loadMessageFeedbacks(chatId),\n ])\n\n if (!storedGeolocation.value) {\n collectGeolocation((lat, lon) =>\n apiClient.value.reverseGeocode(lat, lon, locale.value),\n ).then((geo) => {\n if (geo) {\n storedGeolocation.value = geo\n }\n })\n }\n }\n\n async function handleSubmit() {\n // Snapshot text and attachments before any async operation to avoid\n // them being cleared by startNewChat() (reasoning agents) or by a\n // concurrent store update from the component.\n const text = input.value.trim()\n const fileParts: FileUIPart[] = pendingAttachments.value\n .filter(\n (\n att,\n ): att is PendingAttachment & {\n state: 'done'\n mediaSource: NonNullable<\n PendingAttachment['mediaSource']\n >\n } => att.state === 'done' && att.mediaSource !== undefined,\n )\n .map((att) => {\n return {\n type: 'file' as const,\n mediaType: att.mediaSource.mimeType,\n url: att.localUrl,\n filename: att.mediaSource.name,\n providerMetadata: {\n '8bot': {\n media: att.mediaSource,\n },\n },\n }\n })\n\n if (isReasoningAgent.value && messages.value.length > 0) {\n await startNewChat()\n }\n\n // Snapshot state before sending so we can rollback on stop\n lastSubmittedInput.value = text\n messageCountBeforeSubmit.value = chat.value.messages.length\n\n // Chat<UIChatMessage> can't resolve the correct sendMessage overload\n // when using a custom message generic — cast is intentional.\n const sendMessage = chat.value.sendMessage as unknown as (msg: {\n text: string\n files?: FileUIPart[]\n }) => void\n sendMessage({\n text,\n files: fileParts.length > 0 ? fileParts : undefined,\n })\n input.value = ''\n clearPendingAttachments()\n }\n\n /**\n * Programmatically send a user message without the input snapshot/rollback\n * logic. Logs a warning and does nothing if the chat is not ready.\n */\n function sendMessage(text: string) {\n const trimmed = text.trim()\n if (!trimmed) {\n return\n }\n if (chat.value.status !== 'ready') {\n logger.warn(\n '[useChatbotStore] sendMessage called before chat is ready. Listen for the \"ready\" event on the widget element.',\n )\n return\n }\n const send = chat.value.sendMessage as unknown as (msg: {\n text: string\n }) => void\n send({ text: trimmed })\n }\n\n async function stopGeneration() {\n const shouldRollback = lastSubmittedInput.value.length > 0\n await chat.value.stop()\n if (shouldRollback) {\n input.value = lastSubmittedInput.value\n chat.value.messages = chat.value.messages.slice(\n 0,\n messageCountBeforeSubmit.value,\n )\n lastSubmittedInput.value = ''\n }\n }\n\n // Clear rollback state when generation completes naturally\n watch(\n () => chat.value.status,\n (status) => {\n if (status === 'ready' && lastSubmittedInput.value.length > 0) {\n lastSubmittedInput.value = ''\n }\n },\n )\n\n function clearPendingAttachments(revokeAll = false) {\n for (const att of pendingAttachments.value) {\n // 'done' attachment localUrls may still be referenced in\n // FileUIPart.url inside message parts — skip revocation unless\n // explicitly requested (e.g. when starting a new chat).\n if (revokeAll || att.state !== 'done') {\n URL.revokeObjectURL(att.localUrl)\n }\n }\n pendingAttachments.value = []\n fileLimitError.value = null\n }\n\n async function startNewChat() {\n lastSubmittedInput.value = ''\n await stopGeneration()\n localChatId.value = generateId()\n chat.value.clearError()\n chatError.value = undefined\n isConversationBlocked.value = false\n clearPendingAttachments(true)\n navigate('chat')\n return localChatId.value\n }\n\n async function regenerate(\n options?: Parameters<typeof chat.value.regenerate>[0],\n ) {\n if (chat.value.status !== 'ready') {\n lastSubmittedInput.value = ''\n await stopGeneration()\n }\n await chat.value.regenerate(options)\n }\n\n function addToolOutput(params: {\n tool: string\n toolCallId: string\n output: unknown\n }) {\n if (params.tool === 'requestGeolocation') {\n const output = params.output as\n | {\n latitude: number\n longitude: number\n accuracy?: number\n city?: string\n }\n | { error: string }\n if ('latitude' in output) {\n storedGeolocation.value = {\n geolocationLatitude: output.latitude,\n geolocationLongitude: output.longitude,\n geolocationAccuracy: output.accuracy,\n geolocationCity: output.city,\n }\n }\n }\n chat.value.addToolOutput(params)\n }\n\n /**\n * Answers a tool approval request. The response rides the same chat\n * stream: `sendAutomaticallyWhen` submits it, the backend re-validates\n * it against the persisted request and the SDK resumes (or denies) the\n * suspended call.\n */\n function addToolApprovalResponse(params: {\n id: string\n approved: boolean\n reason?: string\n }) {\n chat.value.addToolApprovalResponse(params)\n }\n\n // Files already committed to prior messages in this chat.\n const sentFileCount = computed(() =>\n chat.value.messages.reduce(\n (n, m) => n + m.parts.filter((p) => p.type === 'file').length,\n 0,\n ),\n )\n\n // Single source of truth for the attachment limits (see AgentFileUpload).\n // The per-message cap counts the current draft's attachments; the\n // per-chat cap counts those plus everything already sent.\n const maxFilesPerMessage = computed(\n () => agentFileUpload.value?.maxFilesPerMessage ?? 5,\n )\n const maxFilesPerChat = computed(\n () => agentFileUpload.value?.maxFilesPerChat ?? 20,\n )\n const remainingAttachmentSlots = computed(() =>\n Math.max(\n 0,\n Math.min(\n maxFilesPerMessage.value - pendingAttachments.value.length,\n maxFilesPerChat.value -\n sentFileCount.value -\n pendingAttachments.value.length,\n ),\n ),\n )\n const isAttachmentLimitReached = computed(\n () => remainingAttachmentSlots.value <= 0,\n )\n\n // Reactive notice surfaced to the input when a file gets rejected.\n const fileLimitError = ref<{\n reason: 'per-message' | 'per-chat'\n max: number\n } | null>(null)\n const clearFileLimitError = () => {\n fileLimitError.value = null\n }\n\n // The notice is only true while at capacity: drop it once room frees up.\n watch(isAttachmentLimitReached, (reached) => {\n if (!reached) {\n fileLimitError.value = null\n }\n })\n\n async function handleFileSelect(file: File) {\n if (isAttachmentLimitReached.value) {\n // Whichever cap is tighter is the one that blocked this file.\n fileLimitError.value =\n maxFilesPerChat.value -\n sentFileCount.value -\n pendingAttachments.value.length <=\n maxFilesPerMessage.value - pendingAttachments.value.length\n ? { reason: 'per-chat', max: maxFilesPerChat.value }\n : {\n reason: 'per-message',\n max: maxFilesPerMessage.value,\n }\n return\n }\n const id = generateId()\n const localUrl = URL.createObjectURL(file)\n const attachment: PendingAttachment = {\n id,\n file,\n localUrl,\n state: 'uploading',\n }\n pendingAttachments.value = [...pendingAttachments.value, attachment]\n\n try {\n const mediaSource = await apiClient.value.uploadMedia(\n agentIdRef.value,\n localChatId.value,\n file,\n )\n pendingAttachments.value = pendingAttachments.value.map((a) =>\n a.id === id ? { ...a, state: 'done', mediaSource } : a,\n )\n } catch (err) {\n const message =\n err instanceof Error ? err.message : 'Upload failed'\n pendingAttachments.value = pendingAttachments.value.map((a) =>\n a.id === id ? { ...a, state: 'error', error: message } : a,\n )\n }\n }\n\n async function submitVote(\n message: UIChatMessage,\n vote: 'upvote' | 'downvote',\n ) {\n const { userQuestion, assistantMessage } =\n extractFeedbackContext(message)\n const feedback = await apiClient.value.submitMessageFeedback({\n messageId: message.id,\n chatId: localChatId.value,\n agentId: agentIdRef.value,\n vote,\n userQuestion,\n assistantMessage,\n })\n upsertLocalFeedback(feedback)\n }\n\n async function onUpvote(message: UIChatMessage) {\n await submitVote(message, 'upvote')\n }\n\n async function onDownvote(message: UIChatMessage) {\n await submitVote(message, 'downvote')\n }\n\n function onFeedback(message: UIChatMessage) {\n isFeedbackSubmitted.value = false\n feedbackSubmitError.value = undefined\n feedbackDialogMessage.value = message\n }\n\n async function onFeedbackSubmit(comment: string) {\n if (!feedbackDialogMessage.value) {\n return\n }\n try {\n isFeedbackSubmitting.value = true\n isFeedbackSubmitted.value = false\n feedbackSubmitError.value = undefined\n const { userQuestion, assistantMessage } =\n extractFeedbackContext(feedbackDialogMessage.value)\n const feedback = await apiClient.value.submitMessageFeedback({\n messageId: feedbackDialogMessage.value.id,\n chatId: localChatId.value,\n agentId: agentIdRef.value,\n userQuestion,\n assistantMessage,\n comment,\n })\n upsertLocalFeedback(feedback)\n isFeedbackSubmitted.value = true\n await loadMessageFeedbacks(localChatId.value)\n } catch {\n feedbackSubmitError.value = te('message.feedbackSubmitError')\n ? t('message.feedbackSubmitError')\n : 'Failed to submit feedback'\n } finally {\n isFeedbackSubmitting.value = false\n }\n }\n\n async function onLeadSubmit(data: Record<string, unknown>) {\n try {\n isLoadingSubmitLead.value = true\n isLeadSubmitted.value = false\n submitLeadError.value = undefined\n await apiClient.value.submitLead({\n agentId: agentIdRef.value,\n chatId: localChatId.value,\n ...data,\n })\n isLeadSubmitted.value = true\n } catch {\n submitLeadError.value = te('message.leadSubmitError')\n ? t('message.leadSubmitError')\n : 'Failed to submit lead'\n } finally {\n isLoadingSubmitLead.value = false\n }\n }\n\n async function renameChatTitle(chatId: string, title: string) {\n const updated = await apiClient.value.updateChatTitle(\n agentIdRef.value,\n chatId,\n title,\n )\n conversations.value = conversations.value.map((c) =>\n c.id === chatId ? { ...c, title: updated.title } : c,\n )\n }\n\n async function deleteChat(chatId: string) {\n await apiClient.value.deleteChat(agentIdRef.value, chatId)\n conversations.value = conversations.value.filter(\n (c) => c.id !== chatId,\n )\n if (localChatId.value === chatId) {\n await startNewChat()\n }\n }\n\n function navigate(view: ChatbotView) {\n activeView.value = view\n }\n\n // === Identity switches ===\n /**\n * Last userId the chat state was bound to. Starts undefined: adopting\n * the first identity of the page must not reset anything, because in\n * every same-user flow (anonymous re-auth, restored session) the\n * persisted chatId belongs to it, while `loadChat` leaves foreign\n * chats empty on a fresh page load anyway.\n */\n let boundUserId: string | undefined\n\n /**\n * GET the current chat as the new user, retrying once on failure: a\n * transient network error must not be mistaken for \"not owned\" and\n * wipe a conversation the user actually keeps. After the retry it\n * still fails closed (privacy wins over continuity).\n */\n function isChatReadable(chatId: string): Promise<boolean> {\n const probe = () =>\n apiClient.value\n .getChat(agentIdRef.value, chatId)\n .then((data) => data !== null)\n return probe().catch(() => probe().catch(() => false))\n }\n\n /**\n * The persisted chatId and the in-memory messages survive auth\n * changes, so when the session identity changes (host login via\n * external token, sign-out followed by a fresh anonymous user) the\n * previous user's conversation would keep showing. The server\n * enforces chat ownership, so ask it whether the current chat is\n * readable by the new user: it is only when it was transferred along\n * (in-widget sign-in links the anonymous user and moves their chats).\n * Otherwise drop the previous user's state and start a fresh chat.\n */\n watch(userId, async (newUserId) => {\n if (!newUserId || newUserId === boundUserId) {\n // Sign-out (undefined) keeps the state: it is either followed\n // by a new identity (anonymous fallback / next login), which\n // resets here, or no chat is rendered at all.\n return\n }\n const previousUserId = boundUserId\n boundUserId = newUserId\n if (previousUserId === undefined) {\n return\n }\n const verifiedChatId = localChatId.value\n // Reasoning chats are never persisted server-side, so the probe\n // could only fail: skip it and reset directly.\n const isChatOwnedByNewUser = isReasoningAgent.value\n ? false\n : await isChatReadable(verifiedChatId)\n if (\n userId.value !== newUserId ||\n localChatId.value !== verifiedChatId\n ) {\n // Superseded: another identity change or a chat rotation won\n return\n }\n if (isChatOwnedByNewUser) {\n // Same conversation, new owner (anonymous → linked account):\n // keep the messages, refresh the user-scoped list.\n loadConversations(agentIdRef.value)\n return\n }\n conversations.value = []\n messageFeedbacks.value = []\n chatFiles.value = []\n // Rotating the chatId recreates the Chat instance (clearing the\n // previous user's messages) and re-triggers `initialize` in the\n // components watching it, which reloads the user-scoped data.\n await startNewChat()\n input.value = ''\n })\n\n return {\n // Configuration\n apiClient,\n baseUrl,\n basePath,\n agentId: agentIdRef,\n name,\n agentType,\n userId,\n agentInterface,\n agentModel,\n agentTools,\n headers,\n revisedAnswers,\n model,\n actionsInput,\n actions,\n agentFileUpload,\n agentVoice,\n fallbackModels,\n gatewayOptions,\n externalContext,\n systemTheme,\n hideWelcomeMessage,\n isDark,\n // Chat state\n chat,\n messages,\n conversations,\n isLoadingConversations,\n chatFiles,\n isLoadingChatFiles,\n input,\n pendingAttachments,\n isAttachmentLimitReached,\n fileLimitError,\n localChatId,\n isConversationBlocked,\n inputMessagePlaceholder,\n chatError,\n // Navigation\n activeView,\n // Feedback state\n messageFeedbacks,\n feedbackDialogMessage,\n isFeedbackSubmitting,\n isFeedbackSubmitted,\n feedbackSubmitError,\n // Lead state\n isLeadSubmitted,\n isLoadingSubmitLead,\n submitLeadError,\n // Actions\n buildDeviceContext,\n initialize,\n loadConversations,\n loadChatFiles,\n refreshMessages,\n appendMessage,\n getChatFileUrl,\n getChatFilePreviewUrl,\n deleteChatFile,\n handleSubmit,\n sendMessage,\n stopGeneration,\n startNewChat,\n regenerate,\n addToolOutput,\n addToolApprovalResponse,\n handleFileSelect,\n clearFileLimitError,\n clearPendingAttachments,\n onUpvote,\n onDownvote,\n onFeedback,\n onFeedbackSubmit,\n onLeadSubmit,\n navigate,\n renameChatTitle,\n deleteChat,\n }\n })()\n}\n"],"x_google_ignoreList":[1,2,3,4,5,6,7,8,9,10,11],"mappings":";;;;;;;;;;;AAgBA,SAAgB,KAAuB;CACnC,IAAM,IACF,UACF,YAEI,IACF,UACF;CAEF,OAAO;EACH,2BAAU,IAAI,KAAK,EAAA,CAAE,YAAY;EACjC,UAAU,KAAK,eAAe,CAAC,CAAC,gBAAgB,CAAC,CAAC;EAClD,UAAU,UAAU;EACpB,WAAW,CAAC,GAAG,UAAU,SAAS;EAClC,KAAK,OAAO,SAAS;EACrB,UAAU,OAAO,SAAS;EAC1B,WAAW,SAAS;EACpB,UAAU,SAAS,YAAY,KAAA;EAC/B,aAAa,OAAO;EACpB,cAAc,OAAO;EACrB,eAAe,OAAO;EACtB,gBAAgB,OAAO;EACvB,kBAAkB,OAAO;EACzB,gBAAgB,UAAU;EAC1B,qBAAqB,UAAU;EAC/B,cAAe,UACV;EACL,UAAU,GAAQ;EAClB,gBAAgB,GAAY;EAC5B,yBAAyB,GAAY;EACrC,oBAAoB,GAAY;EAChC,eAAe,GAAY;EAC3B,UAAU,GAAY;EACtB,UAAU,OAAO,WAAW,8BAA8B,CAAC,CAAC;EAC5D,eAAe,OAAO,WAAW,kCAAkC,CAAC,CAC/D;EACL,eAAe,OAAO,QAAQ;CAClC;AACJ;AAoBA,eAAsB,GAClB,GAC+B;CAC/B,IAAI,CAAC,UAAU,eAAe,CAAC,UAAU,aACrC,OAAO;CAGX,IAAI;EAIA,KAAI,MAHqB,UAAU,YAAY,MAAM,EACjD,MAAM,cACV,CAAC,EAAA,CACc,UAAU,WACrB,OAAO;EAWX,IAAM,EAAE,aAAU,cAAW,iBAAa,MARnB,IAAI,SACtB,GAAS,MAAW;GACjB,UAAU,YAAY,mBAAmB,GAAS,GAAQ,EACtD,SAAS,IACb,CAAC;EACL,CACJ,EAAA,CAEmD;EAKnD,OAAO;GACH,qBAAqB;GACrB,sBAAsB;GACtB,qBAAqB;GACrB,iBARS,IACP,MAAM,EAAe,GAAU,CAAS,CAAC,CAAC,YAAY,KAAA,CAAS,IAC/D,KAAA;EAON;CACJ,QAAQ;EACJ,OAAO;CACX;AACJ;;;AC9GA,IAAIA,KAAS,mBACTC,KAAS,OAAO,IAAID,EAAM,GAC1BE,GAAIC,GACJ,IAAa,MAAM,WAAqB,IAAK,OAAO,IAAKF,IAAQE,EAAAA,CAAI;CASvE,YAAY,EACV,MAAM,GACN,YACA,YACC;EAID,AAHA,MAAM,CAAO,GACb,KAAKD,KAAM,IACX,KAAK,OAAO,GACZ,KAAK,QAAQ;CACf;CAMA,OAAO,WAAW,GAAO;EACvB,OAAO,EAAY,UAAU,GAAOF,EAAM;CAC5C;CACA,OAAO,UAAU,GAAO,GAAU;EAChC,IAAM,IAAe,OAAO,IAAI,CAAQ;EACxC,OAAwB,OAAO,KAAU,cAAlC,KAA8C,KAAgB,KAAS,OAAO,EAAM,MAAkB,aAAa,EAAM,OAAkB;CACpJ;AACF;AAuDA,SAAS,GAAgB,GAAO;CAU9B,OATI,KAAS,OACJ,kBAEL,OAAO,KAAU,WACZ,IAEL,aAAiB,QACZ,EAAM,SAAS,IAEjB,KAAK,UAAU,CAAK;AAC7B;AAGA,IAAIc,KAAQ,2BACRC,KAAU,mBAAmBD,MAC7BE,IAAU,OAAO,IAAID,EAAO,GAC5BE,IAAKC,IACLC,IAAuB,eAAe,KAAM,GAAY,KAAMH,GAASE,GAAAA,CAAK;CAC9E,YAAY,EACV,YACA,UACA,eACC;EAGD,AAFA,MAAM;GAAE,MAAMJ;GAAO;GAAS;EAAM,CAAC,GACrC,KAAKG,MAAO,IACZ,KAAK,WAAW;CAClB;CACA,OAAO,WAAW,GAAO;EACvB,OAAO,EAAW,UAAU,GAAOF,EAAO;CAC5C;AACF,GA0CIe,KAAQ,qBACRC,KAAU,mBAAmBD,MAC7BE,KAAU,OAAO,IAAID,EAAO,GAC5BE,IAAKC,IACL,IAAiB,eAAe,KAAM,GAAY,KAAMF,IAASE,GAAAA,CAAK;CACxE,YAAY,EAAE,SAAM,YAAS;EAQ3B,AAPA,MAAM;GACJ,MAAMJ;GACN,SAAS,8BAA8B,EAAK;iBACjC,GAAgB,CAAK;GAChC;EACF,CAAC,GACD,KAAKG,MAAO,IACZ,KAAK,OAAO;CACd;CACA,OAAO,WAAW,GAAO;EACvB,OAAO,EAAW,UAAU,GAAOF,EAAO;CAC5C;AACF,GAsHIkC,KAAS,0BACTC,IAAW,mBAAmBD,MAC9BE,KAAW,OAAO,IAAID,CAAQ,GAC9BE,IAAMC,GACN,IAAsB,MAAM,WAA8B,IAAO,GAAY,KAAOF,IAAUE,EAAAA,CAAM;CACtG,YAAY,EACV,UACA,UACA,cACC;EACD,IAAI,IAAgB;EAIpB,IAHI,GAAmC,UACrC,KAAiB,QAAQ,EAAQ,UAE9B,GAAmC,cAAgB,GAAmC,UAAW;GACpG,KAAiB;GACjB,IAAM,IAAQ,CAAC;GAQf,AAPI,EAAQ,cACV,EAAM,KAAK,EAAQ,UAAU,GAE3B,EAAQ,YACV,EAAM,KAAK,QAAQ,EAAQ,SAAS,EAAE,GAExC,KAAiB,EAAM,KAAK,IAAI,GAChC,KAAiB;EACnB;EASA,AARA,MAAM;GACJ,MAAMJ;GACN,SAAS,GAAG,EAAc,WAAW,KAAK,UAAU,CAAK,EAAE;iBAChD,GAAgB,CAAK;GAChC;EACF,CAAC,GACD,KAAKG,MAAQ,IACb,KAAK,QAAQ,GACb,KAAK,UAAU;CACjB;CACA,OAAO,WAAW,GAAO;EACvB,OAAO,EAAW,UAAU,GAAOF,CAAQ;CAC7C;CAYA,OAAO,KAAK,EACV,UACA,UACA,cACC;EAKD,OAHI,EAAqB,WAAW,CAAK,KAAK,EAAM,UAAU,KAAkB,EAAM,SAAiC,UAAY,GAAmC,SAAmB,EAAM,SAAiC,eAAiB,GAAmC,cAAsB,EAAM,SAA+B,aAAe,GAAmC,WACxX,IAEF,IAAI,EAAqB;GAAE;GAAO;GAAO;EAAQ,CAAC;CAC3D;AACF,GCxWM,KAAN,cAAyB,MAAM;CAC7B,YAAY,GAAS,GAAS;EAC5B,MAAM,CAAO,GAAG,KAAK,OAAO,cAAc,KAAK,OAAO,EAAQ,MAAM,KAAK,QAAQ,EAAQ,OAAO,KAAK,QAAQ,EAAQ,OAAO,KAAK,OAAO,EAAQ;CAClJ;AACF,GACM,KAAK,IAAI,KAAK,IAAI,IAAQ;AAChC,SAAS,GAAK,GAAM,CACpB;AACA,SAAS,GAAa,GAAQ;CAC5B,IAAI,OAAO,KAAU,YACnB,MAAU,UACR,iGACF;CACF,IAAM,EAAE,aAAU,IAAM,aAAU,IAAM,aAAU,IAAM,cAAW,qBAAkB,GAAQ,IAAmB,CAAC,GAC7G,IAAyB,GAAG,IAAe,CAAC,GAAG,GAAI,IAAO,IAAI,IAAY,GAAG,GAAW,IAAa,CAAC;CAC1G,SAAS,EAAK,GAAO;EACnB,IAAI,GACF,MAAU,MACR,yHACF;EACF,IAAI,MAAiB,IAAe,CAAC,GAAG,EAAM,WAAW,CAAC,MAAM,OAAO,EAAM,WAAW,CAAC,MAAM,OAAO,EAAM,WAAW,CAAC,MAAM,QAAQ,IAAQ,EAAM,MAAM,CAAC,KAAK,EAAiB,WAAW,GAAG;GAC7L,IAAM,IAAY,EAAa,CAAK;GACpC,MAAc,OAAO,EAAiB,KAAK,CAAS,GAAG,IAAyB,EAAU,SAAS,EAAgB;GACnH;EACF;EACA,IAAI,EAAM,QAAQ,IACrB,MAAM,MAAM,EAAM,QAAQ,IAAI,MAAM,IAAI;GACnC,EAAiB,KAAK,CAAK,GAAG,KAA0B,EAAM,QAAQ,EAAgB;GACtF;EACF;EACA,EAAiB,KAAK,CAAK;EAC3B,IAAM,IAAQ,EAAiB,KAAK,EAAE;EACtC,EAAiB,SAAS,GAAG,IAAyB;EACtD,IAAM,IAAW,EAAa,CAAK;EACnC,MAAa,OAAO,EAAiB,KAAK,CAAQ,GAAG,IAAyB,EAAS,SAAS,EAAgB;CAClH;CACA,SAAS,IAAkB;EACzB,MAAkB,KAAK,MAAM,IAAyB,EAAK,UAAU,MAAkB,IAAa,CAAC,GAAG,EAAiB,SAAS,GAAG,IAAyB,GAAG,IAAK,KAAK,GAAG,IAAO,IAAI,IAAY,GAAG,IAAY,KAAK,GAAG,EAC1N,IAAI,GAAW,6CAA6C,EAAc,cAAc,EACtF,MAAM,2BACR,CAAC,CACH;CACF;CACA,SAAS,EAAa,GAAO;EAC3B,IAAI,IAAc;EAClB,IAAI,EAAM,QAAQ,IAAI,MAAM,IAAI;GAC9B,IAAI,IAAU,EAAM,QAAQ,MAC/B,CAAW;GACR,OAAO,MAAY,KAAM;IACvB,IAAI,MAAgB,GAAS;KAC3B,IAAY,KAAK,EAAQ;MAAE;MAAI,OAAO;MAAW;KAAK,CAAC,GAAG,IAAK,KAAK,GAAG,IAAO,IAAI,IAAY,GAAG,IAAY,KAAK,GAAG,IAAc,IAAU,GAAG,IAAU,EAAM,QAAQ,MAC/K,CAAW;KACJ;IACF;IACA,IAAM,IAAgB,EAAM,WAAW,CAAW;IAClD,IAAI,EAAa,GAAO,GAAa,CAAa,GAAG;KACnD,IAAM,IAAa,EAAM,WAAW,IAAc,CAAC,MAAM,IAAQ,IAAc,IAAI,IAAc,GAAG,IAAQ,EAAM,MAAM,GAAY,CAAO;KAC3I,IAAI,MAAc,KAAK,EAAM,WAAW,IAAU,CAAC,MAAM,IAAI;MAC3D,EAAQ;OAAE;OAAI,OAAO;OAAW,MAAM;MAAM,CAAC,GAAG,IAAK,KAAK,GAAG,IAAO,IAAI,IAAY,KAAK,GAAG,IAAc,IAAU,GAAG,IAAU,EAAM,QAAQ,MACxJ,CAAW;MACF;KACF;KACA,IAAO,MAAc,IAAI,IAAQ,GAAG,EAAK;EACjD,KAAS;IACH,OAAO,EAAc,GAAO,GAAa,CAAa,IAAI,IAAY,EAAM,MAC1E,EAAM,WAAW,IAAc,CAAC,MAAM,IAAQ,IAAc,IAAI,IAAc,GAC9E,CACF,KAAK,KAAK,IAAI,EAAU,GAAO,GAAa,CAAO;IACnD,IAAc,IAAU,GAAG,IAAU,EAAM,QAAQ,MACxD,CAAW;GACR;GACA,OAAO,EAAM,MAAM,CAAW;EAChC;EACA,OAAO,IAAc,EAAM,SAAU;GACnC,IAAM,IAAU,EAAM,QAAQ,MAAM,CAAW,GAAG,IAAU,EAAM,QAAQ,MAC7E,CAAW,GACJ,IAAU;GACd,IAAI,MAAY,MAAM,MAAY,KAAK,IAAU,IAAU,IAAU,IAAU,IAAU,MAAY,KAAuE,MAAY,OAAO,IAAU,KAA/F,AAA8C,IAA9C,MAAY,EAAM,SAAS,IAAc,KAAe,GAAiD,MAAY,IAC7N;GACF,EAAU,GAAO,GAAa,CAAO,GAAG,IAAc,IAAU,GAAG,EAAM,WAAW,IAAc,CAAC,MAAM,MAAM,EAAM,WAAW,CAAW,MAAM,MAAM;EACzJ;EACA,OAAO,EAAM,MAAM,CAAW;CAChC;CACA,SAAS,EAAU,GAAO,GAAO,GAAK;EACpC,IAAI,MAAU,GAAK;GACjB,GAAc;GACd;EACF;EACA,IAAM,IAAgB,EAAM,WAAW,CAAK;EAC5C,IAAI,EAAa,GAAO,GAAO,CAAa,GAAG;GAC7C,IAAM,IAAa,EAAM,WAAW,IAAQ,CAAC,MAAM,IAAQ,IAAQ,IAAI,IAAQ,GAAG,IAAS,EAAM,MAAM,GAAY,CAAG;GACtH,IAAO,MAAc,IAAI,IAAS,GAAG,EAAK;EAC9C,KAAU;GACN;EACF;EACA,IAAI,EAAc,GAAO,GAAO,CAAa,GAAG;GAC9C,IAAY,EAAM,MAAM,EAAM,WAAW,IAAQ,CAAC,MAAM,IAAQ,IAAQ,IAAI,IAAQ,GAAG,CAAG,KAAK,KAAK;GACpG;EACF;EACA,IAAI,MAAkB,OAAO,EAAM,WAAW,IAAQ,CAAC,MAAM,OAAO,EAAM,WAAW,IAAQ,CAAC,MAAM,IAAI;GACtG,IAAM,IAAS,EAAM,MAAM,EAAM,WAAW,IAAQ,CAAC,MAAM,IAAQ,IAAQ,IAAI,IAAQ,GAAG,CAAG;GAC7F,IAAK,EAAO,SAAS,IAAI,IAAI,KAAK,IAAI;GACtC;EACF;EACA,IAAI,MAAkB,IAAI;GACxB,IAAI,GAAW;IACb,IAAM,IAAQ,EAAM,MAAM,GAAO,CAAG;IACpC,EAAU,EAAM,MAAM,EAAM,WAAW,IAAQ,CAAC,MAAM,IAAQ,IAAI,CAAC,CAAC;GACtE;GACA;EACF;EACA,IAAM,IAAO,EAAM,MAAM,GAAO,CAAG,GAAG,IAAsB,EAAK,QAAQ,GAAG;EAC5E,IAAI,MAAwB,IAAI;GAC9B,GAAa,GAAM,IAAI,CAAI;GAC3B;EACF;EACA,IAAM,IAAQ,EAAK,MAAM,GAAG,CAAmB,GAAG,IAAS,EAAK,WAAW,IAAsB,CAAC,MAAM,IAAQ,IAAI;EACpH,GAAa,GADkH,EAAK,MAAM,IAAsB,CACxI,GAAG,CAAI;CACjC;CACA,SAAS,GAAa,GAAO,GAAO,GAAM;EACxC,QAAQ,GAAR;GACE,KAAK;IACH,IAAY,KAAS,KAAK;IAC1B;GACF,KAAK;IACH,IAAO,MAAc,IAAI,IAAQ,GAAG,EAAK;EAC/C,KAAS;IACH;GACF,KAAK;IACH,IAAK,EAAM,SAAS,IAAI,IAAI,KAAK,IAAI;IACrC;GACF,KAAK;IACH,QAAQ,KAAK,CAAK,IAAI,EAAQ,SAAS,GAAO,EAAE,CAAC,IAAI,EACnD,IAAI,GAAW,6BAA6B,EAAM,IAAI;KACpD,MAAM;KACN;KACA;IACF,CAAC,CACH;IACA;GACF,SACE,EACE,IAAI,GACF,kBAAkB,EAAM,SAAS,KAAK,GAAG,EAAM,MAAM,GAAG,EAAE,EAAE,UAAU,EAAM,IAC5E;IAAE,MAAM;IAAiB;IAAO;IAAO;GAAK,CAC9C,CACF;EAEJ;CACF;CACA,SAAS,KAAgB;EACvB,IAAY,KAAK,EAAQ;GACvB;GACA,OAAO;GACP;EACF,CAAC,GAAG,IAAK,KAAK,GAAG,IAAO,IAAI,IAAY,GAAG,IAAY,KAAK;CAC9D;CACA,SAAS,GAAM,IAAU,CAAC,GAAG;EAC3B,IAAI,EAAQ,WAAW,EAAiB,SAAS,GAAG;GAClD,IAAM,IAAiB,EAAiB,KAAK,EAAE;GAC/C,EAAU,GAAgB,GAAG,EAAe,MAAM;EACpD;EACA,IAAe,CAAC,GAAG,IAAK,KAAK,GAAG,IAAO,IAAI,IAAY,GAAG,IAAY,KAAK,GAAG,EAAiB,SAAS,GAAG,IAAyB,GAAG,IAAa,CAAC;CACvJ;CACA,OAAO;EAAE;EAAM;CAAM;AACvB;AACA,SAAS,EAAa,GAAO,GAAG,GAAe;CAC7C,OAAO,MAAkB,OAAO,EAAM,WAAW,IAAI,CAAC,MAAM,MAAM,EAAM,WAAW,IAAI,CAAC,MAAM,OAAO,EAAM,WAAW,IAAI,CAAC,MAAM,MAAM,EAAM,WAAW,IAAI,CAAC,MAAM;AACrK;AACA,SAAS,EAAc,GAAO,GAAG,GAAe;CAC9C,OAAO,MAAkB,OAAO,EAAM,WAAW,IAAI,CAAC,MAAM,OAAO,EAAM,WAAW,IAAI,CAAC,MAAM,OAAO,EAAM,WAAW,IAAI,CAAC,MAAM,OAAO,EAAM,WAAW,IAAI,CAAC,MAAM,OAAO,EAAM,WAAW,IAAI,CAAC,MAAM;AAC1M;;;ACzKA,IAAM,IAAN,cAAsC,gBAAgB;CACpD,YAAY,EAAE,YAAS,YAAS,cAAW,qBAAkB,CAAC,GAAG;EAC/D,IAAI;EACJ,MAAM;GACJ,MAAM,GAAY;IAChB,IAAS,GAAa;KACpB,UAAU,MAAU;MAClB,EAAW,QAAQ,CAAK;KAC1B;KACA,QAAQ,GAAO;MACb,OAAO,KAAW,cAAc,EAAQ,CAAK,IAAI,MAAY,eAAe,EAAM,SAAS,+BAA+B,EAAW,MAAM,CAAK;KAClJ;KACA;KACA;KACA;IACF,CAAC;GACH;GACA,UAAU,GAAO;IACf,EAAO,KAAK,CAAK;GACnB;EACF,CAAC;CACH;AACF;AC8CkB,IAAI,YAAY;AA4IlC,IAAI,EAAE,MAAA,IAAM,MAAA,OAAS;AAwTrB,SAAS,EAAiB,GAAS;CACjC,IAAI,KAAW,MACb,OAAO,CAAC;CAEV,IAAM,IAAa,CAAC;CACpB,IAAI,aAAmB,SACrB,EAAQ,SAAS,GAAO,MAAQ;EAC9B,EAAW,EAAI,YAAY,KAAK;CAClC,CAAC;MACI;EACL,AAAK,MAAM,QAAQ,CAAO,MACxB,IAAU,OAAO,QAAQ,CAAO;EAElC,KAAK,IAAM,CAAC,GAAK,MAAU,GACzB,AAAI,KAAS,SACX,EAAW,EAAI,YAAY,KAAK;CAGtC;CACA,OAAO;AACT;AAyYA,IAoOI,KAAqB,WAAW;AACE,GAAmB,EAAkB;AAY3E,SAAS,GAAmB,GAAO;CACjC,IAAI,OAAO,KAAU,YACnB,OAAO;CAET,IAAM,IAAS,SAAS,UAAU,SAAS,KAAK,CAAK;CACrD,OAAO,EAAO,SAAS,sBAAsB,KAAK,EAAO,SAAS,wBAAwB;AAC5F;AA+CA,IA8MI,KAAqB,EACvB,WACA,UAAO,IACP,cAAW,kEACX,eAAY,QACV,CAAC,MAAM;CACT,IAAM,UAAkB;EACtB,IAAM,IAAiB,EAAS,QAC1B,IAAY,MAAM,CAAI;EAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAM,KACxB,EAAM,KAAK,EAAS,KAAK,OAAO,IAAI,IAAiB;EAEvD,OAAO,EAAM,KAAK,EAAE;CACtB;CACA,IAAI,KAAU,MACZ,OAAO;CAET,IAAI,EAAS,SAAS,CAAS,GAC7B,MAAM,IAAIc,EAAqB;EAC7B,UAAU;EACV,SAAS,kBAAkB,EAAU,sCAAsC,EAAS;CACtF,CAAC;CAEH,aAAa,GAAG,IAAS,IAAY,EAAU;AACjD,GACI,IAAa,EAAkB;AAgInC,SAAS,GAAS,GAAO;CAEvB,OAAqB,WAAW,QAA+B,SAAS,CAAK,KAAmB;AAClG;AA8OA,IAAI,KAAiB,iJACjB,KAAuB;AAC3B,SAAS,GAAO,GAAM;CACpB,IAAM,IAAM,KAAK,MAAM,CAAI;CAO3B,OANoB,OAAO,KAAQ,aAA/B,KAGA,GAAe,KAAK,CAAI,MAAM,MAAS,GAAqB,KAAK,CAAI,MAAM,KACtE,IAEF,GAAO,CAAG;AACnB;AACA,SAAS,GAAO,GAAK;CACnB,IAAI,IAAO,CAAC,CAAG;CACf,OAAO,EAAK,SAAQ;EAClB,IAAM,IAAQ;EACd,IAAO,CAAC;EACR,KAAK,IAAM,KAAQ,GAAO;GAIxB,IAHI,OAAO,UAAU,eAAe,KAAK,GAAM,WAAW,KAGtD,OAAO,UAAU,eAAe,KAAK,GAAM,aAAa,KAAK,EAAK,gBAAgB,QAAQ,OAAO,EAAK,eAAgB,YAAY,OAAO,UAAU,eAAe,KAAK,EAAK,aAAa,WAAW,GACtM,MAAU,YAAY,8CAA8C;GAEtE,KAAK,IAAM,KAAO,GAAM;IACtB,IAAM,IAAQ,EAAK;IACnB,AAAI,KAAS,OAAO,KAAU,YAC5B,EAAK,KAAK,CAAK;GAEnB;EACF;CACF;CACA,OAAO;AACT;AACA,SAAS,GAAgB,GAAM;CAC7B,IAAM,EAAE,uBAAoB;CAC5B,IAAI;EACF,MAAM,kBAAkB;CAC1B,QAAY;EACV,OAAO,GAAO,CAAI;CACpB;CACA,IAAI;EACF,OAAO,GAAO,CAAI;CACpB,UAAU;EACR,MAAM,kBAAkB;CAC1B;AACF;AAaA,SAAS,GAAoC,GAAa;CACxD,IAAI,EAAY,SAAS,YAAY,MAAM,QAAQ,EAAY,IAAI,KAAK,EAAY,KAAK,SAAS,QAAQ,GAAG;EAC3G,IAAM,EAAE,4BAAyB;EACjC,EAAY,uBAAuB,KAAwB,QAAQ,OAAO,KAAyB,aAAY,EAAM,CAAoB;EACzI,IAAM,EAAE,kBAAe;EACvB,IAAI,KAAc,MAChB,KAAK,IAAM,KAAO,OAAO,KAAK,CAAU,GACtC,EAAW,KAAO,EAAM,EAAW,EAAI;CAG7C;CAUA,AATI,EAAY,SAAS,SACvB,EAAY,QAAQ,MAAM,QAAQ,EAAY,KAAK,IAAI,EAAY,MAAM,IAAI,CAAK,IAAI,EAAM,EAAY,KAAK,IAE3G,EAAY,SAAS,SACvB,EAAY,QAAQ,EAAY,MAAM,IAAI,CAAK,IAE7C,EAAY,SAAS,SACvB,EAAY,QAAQ,EAAY,MAAM,IAAI,CAAK,IAE7C,EAAY,SAAS,SACvB,EAAY,QAAQ,EAAY,MAAM,IAAI,CAAK;CAEjD,IAAM,EAAE,mBAAgB;CACxB,IAAI,KAAe,MACjB,KAAK,IAAM,KAAO,OAAO,KAAK,CAAW,GACvC,EAAY,KAAO,EAAM,EAAY,EAAI;CAG7C,OAAO;AACT;AACA,SAAS,EAAM,GAAK;CAElB,OADI,OAAO,KAAQ,YAAkB,IAC9B,GAAoC,CAAG;AAChD;AAGA,IAAI,KAAiC,uBACnC,mDACF,GACI,KAAiB;CACnB,MAAM,KAAK;CACX,cAAc;CACd,UAAU,CAAC,GAAG;CACd,gBAAgB;CAChB,cAAc;CACd,cAAc;CACd,aAAa;CACb,0BAA0B;CAC1B,6BAA6B;CAC7B,8BAA8B;CAC9B,gBAAgB;CAChB,cAAc;CACd,aAAa,CAAC;CACd,eAAe;CACf,iBAAiB;CACjB,iBAAiB;CACjB,eAAe;CACf,gBAAgB;CAChB,cAAc;AAChB,GACI,MAAqB,MAAY,OAAO,KAAY,WAAW;CACjE,GAAG;CACH,MAAM;AACR,IAAI;CACF,GAAG;CACH,GAAG;AACL;AAGA,SAAS,IAAc;CACrB,OAAO,CAAC;AACV;AAGA,SAAS,GAAc,GAAK,GAAM;CAEhC,IAAM,IAAM,EACV,MAAM,QACR;CAiBA,OAhBY,EAAI,MAA6B,QAAuB,EAAI,MAA6B,MAA4B,aAAc,aAC7I,EAAI,QAAQ,EAAS,EAAI,KAAK,MAAM;EAClC,GAAG;EACH,aAAa,CAAC,GAAG,EAAK,aAAa,OAAO;CAC5C,CAAC,IAEC,EAAI,cACN,EAAI,WAAW,EAAI,UAAU,QAE3B,EAAI,cACN,EAAI,WAAW,EAAI,UAAU,QAE3B,EAAI,gBACN,EAAI,WAAW,EAAI,YAAY,OAC/B,EAAI,WAAW,EAAI,YAAY,QAE1B;AACT;AAGA,SAAS,GAAe,GAAK;CAC3B,IAAM,IAAM;EACV,MAAM;EACN,QAAQ;CACV;CACA,IAAI,CAAC,EAAI,QAAQ,OAAO;CACxB,KAAK,IAAM,KAAS,EAAI,QACtB,QAAQ,EAAM,MAAd;EACE,KAAK;GACH,AAAI,EAAM,YACR,EAAI,UAAU,EAAM,QAEpB,EAAI,mBAAmB,EAAM;GAE/B;EACF,KAAK;GACH,AAAI,EAAM,YACR,EAAI,UAAU,EAAM,QAEpB,EAAI,mBAAmB,EAAM;GAE/B;EACF,KAAK,cACH,EAAI,aAAa,EAAM;CAE3B;CAEF,OAAO;AACT;AAGA,SAAS,KAAkB;CACzB,OAAO,EAAE,MAAM,UAAU;AAC3B;AAGA,SAAS,GAAgB,GAAM,GAAM;CACnC,OAAO,EAAS,EAAK,KAAK,MAAM,CAAI;AACtC;AAGA,IAAI,MAAiB,GAAK,MACjB,EAAS,EAAI,UAAU,MAAM,CAAI;AAI1C,SAAS,GAAa,GAAK,GAAM,GAAsB;CACrD,IAAM,IAAW,KAAsD,EAAK;CAC5E,IAAI,MAAM,QAAQ,CAAQ,GACxB,OAAO,EACL,OAAO,EAAS,KAAK,MAAS,GAAa,GAAK,GAAM,CAAI,CAAC,EAC7D;CAEF,QAAQ,GAAR;EACE,KAAK;EACL,KAAK,oBACH,OAAO;GACL,MAAM;GACN,QAAQ;EACV;EACF,KAAK,eACH,OAAO;GACL,MAAM;GACN,QAAQ;EACV;EACF,KAAK,WACH,OAAO,GAAkB,CAAG;CAChC;AACF;AACA,IAAI,MAAqB,MAAQ;CAC/B,IAAM,IAAM;EACV,MAAM;EACN,QAAQ;CACV;CACA,KAAK,IAAM,KAAS,EAAI,QACtB,QAAQ,EAAM,MAAd;EACE,KAAK;GACH,EAAI,UAAU,EAAM;GACpB;EACF,KAAK,OACH,EAAI,UAAU,EAAM;CAExB;CAEF,OAAO;AACT;AAGA,SAAS,GAAgB,GAAM,GAAM;CACnC,OAAO;EACL,GAAG,EAAS,EAAK,UAAU,MAAM,CAAI;EACrC,SAAS,EAAK,aAAa;CAC7B;AACF;AAGA,SAAS,GAAgB,GAAM,GAAM;CACnC,OAAO,EAAK,mBAAmB,UAAU,EAAS,EAAK,OAAO,MAAM,CAAI,IAAI,EAAY;AAC1F;AAGA,SAAS,GAAa,GAAK;CACzB,OAAO;EACL,MAAM;EACN,MAAM,MAAM,KAAK,EAAI,MAAM;CAC7B;AACF;AAGA,IAAI,MAA0B,MACxB,UAAU,KAAQ,EAAK,SAAS,WAAiB,KAC9C,WAAW;AAEpB,SAAS,EAAqB,GAAK,GAAM;CACvC,IAAM,IAAQ,CACZ,EAAS,EAAI,KAAK,MAAM;EACtB,GAAG;EACH,aAAa;GAAC,GAAG,EAAK;GAAa;GAAS;EAAG;CACjD,CAAC,GACD,EAAS,EAAI,MAAM,MAAM;EACvB,GAAG;EACH,aAAa;GAAC,GAAG,EAAK;GAAa;GAAS;EAAG;CACjD,CAAC,CACH,CAAC,CAAC,QAAQ,MAAM,CAAC,CAAC,CAAC,GACb,IAAc,CAAC;CAarB,OAZA,EAAM,SAAS,MAAW;EACxB,IAAI,GAAuB,CAAM,GAC/B,EAAY,KAAK,GAAG,EAAO,KAAK;OAC3B;GACL,IAAI,IAAe;GACnB,IAAI,0BAA0B,KAAU,EAAO,yBAAyB,IAAO;IAC7E,IAAM,EAAE,sBAAsB,GAAuB,GAAG,MAAS;IACjE,IAAe;GACjB;GACA,EAAY,KAAK,CAAY;EAC/B;CACF,CAAC,GACM,EAAY,SAAS,EAAE,OAAO,EAAY,IAAI,KAAK;AAC5D;AAGA,SAAS,GAAgB,GAAK;CAC5B,IAAM,IAAa,OAAO,EAAI;CAM9B,OALI,MAAe,YAAY,MAAe,YAAY,MAAe,aAAa,MAAe,WAC5F,EACL,MAAM,MAAM,QAAQ,EAAI,KAAK,IAAI,UAAU,SAC7C,IAEK;EACL,MAAM,MAAe,WAAW,YAAY;EAC5C,OAAO,EAAI;CACb;AACF;AAGA,IAAI,KAAa,KAAK,GAClB,IAAc;CAIhB,MAAM;CACN,OAAO;CACP,MAAM;CAIN,OAAO;CAYP,cACM,OAAe,KAAK,MACtB,KAAa,OACX,wDACA,GACF,IAEK;CAKT,MAAM;CAIN,MAAM;CACN,UAAU;CAIV,MAAM;CACN,UAAU;CACV,QAAQ;CACR,WAAW;CACX,QAAQ;CACR,KAAK;AACP;AACA,SAAS,GAAe,GAAK,GAAM;CACjC,IAAM,IAAM,EACV,MAAM,SACR;CACA,IAAI,EAAI,QACN,KAAK,IAAM,KAAS,EAAI,QACtB,QAAQ,EAAM,MAAd;EACE,KAAK;GACH,EAAI,YAAY,OAAO,EAAI,aAAc,WAAW,KAAK,IAAI,EAAI,WAAW,EAAM,KAAK,IAAI,EAAM;GACjG;EACF,KAAK;GACH,EAAI,YAAY,OAAO,EAAI,aAAc,WAAW,KAAK,IAAI,EAAI,WAAW,EAAM,KAAK,IAAI,EAAM;GACjG;EACF,KAAK;GACH,QAAQ,EAAK,eAAb;IACE,KAAK;KACH,EAAU,GAAK,SAAS,EAAM,SAAS,CAAI;KAC3C;IACF,KAAK;KACH,EAAU,GAAK,aAAa,EAAM,SAAS,CAAI;KAC/C;IACF,KAAK,eACH,EAAW,GAAK,EAAY,OAAO,EAAM,SAAS,CAAI;GAE1D;GACA;EACF,KAAK;GACH,EAAU,GAAK,OAAO,EAAM,SAAS,CAAI;GACzC;EACF,KAAK;GACH,EAAU,GAAK,QAAQ,EAAM,SAAS,CAAI;GAC1C;EACF,KAAK;GACH,EAAW,GAAK,EAAM,OAAO,EAAM,SAAS,CAAI;GAChD;EACF,KAAK;GACH,EAAW,GAAK,EAAY,MAAM,EAAM,SAAS,CAAI;GACrD;EACF,KAAK;GACH,EAAW,GAAK,EAAY,OAAO,EAAM,SAAS,CAAI;GACtD;EACF,KAAK;GACH,EACE,GACA,OAAO,IAAI,GAAwB,EAAM,OAAO,CAAI,GAAG,GACvD,EAAM,SACN,CACF;GACA;EACF,KAAK;GACH,EACE,GACA,OAAO,GAAG,GAAwB,EAAM,OAAO,CAAI,EAAE,EAAE,GACvD,EAAM,SACN,CACF;GACA;EACF,KAAK;GACH,EAAU,GAAK,aAAa,EAAM,SAAS,CAAI;GAC/C;EACF,KAAK;GACH,EAAU,GAAK,QAAQ,EAAM,SAAS,CAAI;GAC1C;EACF,KAAK;GACH,EAAU,GAAK,QAAQ,EAAM,SAAS,CAAI;GAC1C;EACF,KAAK;GACH,EAAU,GAAK,YAAY,EAAM,SAAS,CAAI;GAC9C;EACF,KAAK;GAEH,AADA,EAAI,YAAY,OAAO,EAAI,aAAc,WAAW,KAAK,IAAI,EAAI,WAAW,EAAM,KAAK,IAAI,EAAM,OACjG,EAAI,YAAY,OAAO,EAAI,aAAc,WAAW,KAAK,IAAI,EAAI,WAAW,EAAM,KAAK,IAAI,EAAM;GACjG;EACF,KAAK;GACH,EACE,GACA,OAAO,GAAwB,EAAM,OAAO,CAAI,CAAC,GACjD,EAAM,SACN,CACF;GACA;EAEF,KAAK;GAIH,AAHI,EAAM,YAAY,QACpB,EAAU,GAAK,QAAQ,EAAM,SAAS,CAAI,GAExC,EAAM,YAAY,QACpB,EAAU,GAAK,QAAQ,EAAM,SAAS,CAAI;GAE5C;EAEF,KAAK;GACH,EAAW,GAAK,EAAY,WAAW,EAAM,SAAS,CAAI;GAC1D;EACF,KAAK;GACH,EAAW,GAAK,EAAY,KAAK,EAAM,SAAS,CAAI;GACpD;EACF,KAAK;GAIH,AAHI,EAAM,YAAY,QACpB,EAAW,GAAK,EAAY,UAAU,EAAM,SAAS,CAAI,GAEvD,EAAM,YAAY,QACpB,EAAW,GAAK,EAAY,UAAU,EAAM,SAAS,CAAI;GAE3D;EAEF,KAAK;GACH,EAAW,GAAK,EAAY,MAAM,GAAG,EAAM,SAAS,CAAI;GACxD;EACF,KAAK;GACH,EAAW,GAAK,EAAY,MAAM,EAAM,SAAS,CAAI;GACrD;EAEF,KAAK;GACH,QAAQ,EAAK,gBAAb;IACE,KAAK;KACH,EAAU,GAAK,UAAU,EAAM,SAAS,CAAI;KAC5C;IAEF,KAAK;KACH,EAAI,kBAAkB;KACtB;IAEF,KAAK,eACH,EAAW,GAAK,EAAY,QAAQ,EAAM,SAAS,CAAI;GAG3D;GACA;EAEF,KAAK,UACH,EAAW,GAAK,EAAY,QAAQ,EAAM,SAAS,CAAI;CAS3D;CAGJ,OAAO;AACT;AACA,SAAS,GAAwB,GAAS,GAAM;CAC9C,OAAO,EAAK,oBAAoB,WAAW,GAAsB,CAAO,IAAI;AAC9E;AACA,IAAI,qBAAgB,IAAI,IACtB,8DACF;AACA,SAAS,GAAsB,GAAQ;CACrC,IAAI,IAAS;CACb,KAAK,IAAI,IAAI,GAAG,IAAI,EAAO,QAAQ,KAIjC,AAHK,GAAc,IAAI,EAAO,EAAE,MAC9B,KAAU,OAEZ,KAAU,EAAO;CAEnB,OAAO;AACT;AACA,SAAS,EAAU,GAAQ,GAAO,GAAS,GAAM;CAE/C,AAAI,EAAO,UAAkB,EAAO,OAA8B,MAAM,MAAM,EAAE,MAAM,KACpF,AACE,EAAO,UAAQ,CAAC,GAEd,EAAO,WACT,EAAO,MAAM,KAAK,EAChB,QAAQ,EAAO,OACjB,CAAC,GACD,OAAO,EAAO,SAEhB,EAAO,MAAM,KAAK;EAChB,QAAQ;EACR,GAAG,KAAW,EAAK,iBAAiB,EAAE,cAAc,EAAE,QAAQ,EAAQ,EAAE;CAC1E,CAAC,KAED,EAAO,SAAS;AAEpB;AACA,SAAS,EAAW,GAAQ,GAAO,GAAS,GAAM;CAEhD,AAAI,EAAO,WAAmB,EAAO,OAA8B,MAAM,MAAM,EAAE,OAAO,KACtF,AACE,EAAO,UAAQ,CAAC,GAEd,EAAO,YACT,EAAO,MAAM,KAAK,EAChB,SAAS,EAAO,QAClB,CAAC,GACD,OAAO,EAAO,UAEhB,EAAO,MAAM,KAAK;EAChB,SAAS,GAAyB,GAAO,CAAI;EAC7C,GAAG,KAAW,EAAK,iBAAiB,EAAE,cAAc,EAAE,SAAS,EAAQ,EAAE;CAC3E,CAAC,KAED,EAAO,UAAU,GAAyB,GAAO,CAAI;AAEzD;AACA,SAAS,GAAyB,GAAO,GAAM;CAE7C,IAAI,CAAC,EAAK,mBAAmB,CAAC,EAAM,OAClC,OAAO,EAAM;CAEf,IAAM,IAAQ;EACZ,GAAG,EAAM,MAAM,SAAS,GAAG;EAE3B,GAAG,EAAM,MAAM,SAAS,GAAG;EAE3B,GAAG,EAAM,MAAM,SAAS,GAAG;CAE7B,GACM,IAAS,EAAM,IAAI,EAAM,OAAO,YAAY,IAAI,EAAM,QACxD,IAAU,IACV,IAAY,IACZ,IAAc,IACd,IAAc;CAClB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAO,QAAQ,KAAK;EACtC,IAAI,GAAW;GAEb,AADA,KAAW,EAAO,IAClB,IAAY;GACZ;EACF;EACA,IAAI,EAAM,GAAG;GACX,IAAI,GACE;QAAA,EAAO,EAAE,CAAC,MAAM,OAAO,GAAG;KAC5B,AAAI,KACF,KAAW,EAAO,IAClB,KAAW,GAAG,EAAO,IAAI,GAAG,GAAG,EAAO,KAAK,YAAY,GACvD,IAAc,MACL,EAAO,IAAI,OAAO,OAAe,EAAO,IAAI,EAAA,EAA2B,MAAM,OAAO,KAC7F,KAAW,EAAO,IAClB,IAAc,MAEd,KAAW,GAAG,EAAO,KAAK,EAAO,EAAE,CAAC,YAAY;KAElD;IACF;UACK,IAAI,EAAO,EAAE,CAAC,MAAM,OAAO,GAAG;IACnC,KAAW,IAAI,EAAO,KAAK,EAAO,EAAE,CAAC,YAAY,EAAE;IACnD;GACF;EACF;EACA,IAAI,EAAM,GAAG;GACX,IAAI,EAAO,OAAO,KAAK;IACrB,KAAW;IAEX;GACF;GAAO,IAAI,EAAO,OAAO,KAAK;IAC5B,KAAW;IAEX;GACF;EACF;EACA,IAAI,EAAM,KAAK,EAAO,OAAO,KAAK;GAChC,KAAW,IAAc,GAAG,EAAO,GAAG;IACxC,IAAI,EAAO,GAAG;;GAEZ;EACF;EAEA,AADA,KAAW,EAAO,IACd,EAAO,OAAO,OAChB,IAAY,KACH,KAAe,EAAO,OAAO,MACtC,IAAc,KACL,CAAC,KAAe,EAAO,OAAO,QACvC,IAAc;CAElB;CACA,IAAI;EACF,IAAI,OAAO,CAAO;CACpB,QAAY;EAMV,OALA,QAAQ,KACN,sCAAsC,EAAK,YAAY,KACrD,GACF,EAAE,sEACJ,GACO,EAAM;CACf;CACA,OAAO;AACT;AAGA,SAAS,GAAe,GAAK,GAAM;CAEjC,IAAM,IAAS;EACb,MAAM;EACN,sBAA6B,EAAS,EAAI,UAAU,MAAM;GACxD,GAAG;GACH,aAAa,CAAC,GAAG,EAAK,aAAa,sBAAsB;EAC3D,CAAC,KAAmB,EAAK;CAC3B;CACA,IAAY,EAAI,SAAgC,KAAK,aAAc,eAAsB,EAAI,QAAQ,KAAK,QAA8B,QAAS;EAC/I,IAAM,EAAE,MAAM,GAAO,GAAG,MAAY,GAAe,EAAI,QAAQ,MAAM,CAAI;EACzE,OAAO;GACL,GAAG;GACH,eAAe;EACjB;CACF;CAAO,IAAW,EAAI,SAA+B,KAAK,aAAc,WACtE,OAAO;EACL,GAAG;EACH,eAAe,EACb,MAAM,EAAI,QAAQ,KAAK,OACzB;CACF;CACK,IAAW,EAAI,SAA+B,KAAK,aAAc,gBAAgB,EAAI,QAAQ,KAAK,KAAK,KAAK,aAAa,eAAsB,EAAI,QAAQ,KAAK,KAAK,KAAK,QAA8B,QAAS;EACtN,IAAM,EAAE,MAAM,GAAO,GAAG,MAAY,GAClC,EAAI,QAAQ,MACZ,CACF;EACA,OAAO;GACL,GAAG;GACH,eAAe;EACjB;CACF;CACA,OAAO;AACT;AAGA,SAAS,GAAY,GAAK,GAAM;CAY9B,OAXI,EAAK,gBAAgB,WAChB,GAAe,GAAK,CAAI,IAU1B;EACL,MAAM;EACN,UAAU;EACV,OAAO;GACL,MAAM;GACN,OAAO,CAbE,EAAS,EAAI,QAAQ,MAAM;IACtC,GAAG;IACH,aAAa;KAAC,GAAG,EAAK;KAAa;KAAS;KAAS;IAAG;GAC1D,CAAC,KAAK,EAAY,GACH,EAAS,EAAI,UAAU,MAAM;IAC1C,GAAG;IACH,aAAa;KAAC,GAAG,EAAK;KAAa;KAAS;KAAS;IAAG;GAC1D,CAAC,KAAK,EAAY,CAMM;GACpB,UAAU;GACV,UAAU;EACZ;CACF;AACF;AAGA,SAAS,GAAmB,GAAK;CAC/B,IAAM,IAAS,EAAI,QAIb,IAHa,OAAO,KAAK,EAAI,MAAM,CAAC,CAAC,QAAQ,MAC1C,OAAO,EAAO,EAAO,OAAU,QAEV,CAAC,CAAC,KAAK,MAAQ,EAAO,EAAI,GAClD,IAAc,MAAM,KACxB,IAAI,IAAI,EAAa,KAAK,MAAW,OAAO,CAAM,CAAC,CACrD;CACA,OAAO;EACL,MAAM,EAAY,WAAW,IAAI,EAAY,OAAO,WAAW,WAAW,WAAW,CAAC,UAAU,QAAQ;EACxG,MAAM;CACR;AACF;AAGA,SAAS,KAAgB;CACvB,OAAO,EAAE,KAAK,EAAY,EAAE;AAC9B;AAGA,SAAS,KAAe;CACtB,OAAO,EACL,MAAM,OACR;AACF;AAGA,IAAI,KAAoB;CACtB,WAAW;CACX,WAAW;CACX,WAAW;CACX,YAAY;CACZ,SAAS;AACX;AACA,SAAS,GAAc,GAAK,GAAM;CAChC,IAAM,IAAU,EAAI,mBAAmB,MAAM,MAAM,KAAK,EAAI,QAAQ,OAAO,CAAC,IAAI,EAAI;CACpF,IAAI,EAAQ,OACT,MAAM,EAAE,KAAK,YAAY,OAAsB,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,KAAK,OAAO,OACnF,GAAG;EACD,IAAM,IAAQ,EAAQ,QAAQ,GAAQ,MAAM;GAC1C,IAAM,IAAO,GAAkB,EAAE,KAAK;GACtC,OAAO,KAAQ,CAAC,EAAO,SAAS,CAAI,IAAI,CAAC,GAAG,GAAQ,CAAI,IAAI;EAC9D,GAAG,CAAC,CAAC;EACL,OAAO,EACL,MAAM,EAAM,SAAS,IAAI,IAAQ,EAAM,GACzC;CACF;CAAO,IAAI,EAAQ,OAAO,MAAM,EAAE,KAAK,aAAa,gBAAgB,CAAC,EAAE,WAAW,GAAG;EACnF,IAAM,IAAQ,EAAQ,QACnB,GAAK,MAAM;GACV,IAAM,IAAO,OAAO,EAAE,KAAK;GAC3B,QAAQ,GAAR;IACE,KAAK;IACL,KAAK;IACL,KAAK,WACH,OAAO,CAAC,GAAG,GAAK,CAAI;IACtB,KAAK,UACH,OAAO,CAAC,GAAG,GAAK,SAAS;IAC3B,KAAK,UACH,IAAI,EAAE,KAAK,UAAU,MAAM,OAAO,CAAC,GAAG,GAAK,MAAM;IAInD,SACE,OAAO;GACX;EACF,GACA,CAAC,CACH;EACA,IAAI,EAAM,WAAW,EAAQ,QAAQ;GACnC,IAAM,IAAc,EAAM,QAAQ,GAAG,GAAG,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;GAChE,OAAO;IACL,MAAM,EAAY,SAAS,IAAI,IAAc,EAAY;IACzD,MAAM,EAAQ,QACX,GAAK,MACG,EAAI,SAAS,EAAE,KAAK,KAAK,IAAI,IAAM,CAAC,GAAG,GAAK,EAAE,KAAK,KAAK,GAEjE,CAAC,CACH;GACF;EACF;CACF,OAAO,IAAI,EAAQ,OAAO,MAAM,EAAE,KAAK,aAAa,SAAS,GAC3D,OAAO;EACL,MAAM;EACN,MAAM,EAAQ,QACX,GAAK,MAAM,CACV,GAAG,GACH,GAAG,EAAE,KAAK,OAAO,QAAQ,MAAO,CAAC,EAAI,SAAS,CAAE,CAAC,CACnD,GACA,CAAC,CACH;CACF;CAEF,OAAO,GAAQ,GAAK,CAAI;AAC1B;AACA,IAAI,MAAW,GAAK,MAAS;CAC3B,IAAM,KAAS,EAAI,mBAAmB,MAAM,MAAM,KAAK,EAAI,QAAQ,OAAO,CAAC,IAAI,EAAI,QAAA,CAAS,KACzF,GAAG,MAAM,EAAS,EAAE,MAAM;EACzB,GAAG;EACH,aAAa;GAAC,GAAG,EAAK;GAAa;GAAS,GAAG;EAAG;CACpD,CAAC,CACH,CAAC,CAAC,QACC,MAAM,CAAC,CAAC,MAAM,CAAC,EAAK,gBAAgB,OAAO,KAAM,YAAY,OAAO,KAAK,CAAC,CAAC,CAAC,SAAS,EACxF;CACA,OAAO,EAAM,SAAS,EAAE,SAAM,IAAI,KAAK;AACzC;AAGA,SAAS,GAAiB,GAAK,GAAM;CACnC,IAAI;EAAC;EAAa;EAAa;EAAa;EAAc;CAAS,CAAC,CAAC,SACnE,EAAI,UAAU,KAAK,QACrB,MAAM,CAAC,EAAI,UAAU,KAAK,UAAU,CAAC,EAAI,UAAU,KAAK,OAAO,SAC7D,OAAO,EACL,MAAM,CACJ,GAAkB,EAAI,UAAU,KAAK,WACrC,MACF,EACF;CAEF,IAAM,IAAO,EAAS,EAAI,UAAU,MAAM;EACxC,GAAG;EACH,aAAa;GAAC,GAAG,EAAK;GAAa;GAAS;EAAG;CACjD,CAAC;CACD,OAAO,KAAQ,EAAE,OAAO,CAAC,GAAM,EAAE,MAAM,OAAO,CAAC,EAAE;AACnD;AAGA,SAAS,GAAe,GAAK;CAC3B,IAAM,IAAM,EACV,MAAM,SACR;CACA,IAAI,CAAC,EAAI,QAAQ,OAAO;CACxB,KAAK,IAAM,KAAS,EAAI,QACtB,QAAQ,EAAM,MAAd;EACE,KAAK;GACH,EAAI,OAAO;GACX;EACF,KAAK;GACH,AAAI,EAAM,YACR,EAAI,UAAU,EAAM,QAEpB,EAAI,mBAAmB,EAAM;GAE/B;EACF,KAAK;GACH,AAAI,EAAM,YACR,EAAI,UAAU,EAAM,QAEpB,EAAI,mBAAmB,EAAM;GAE/B;EACF,KAAK,cACH,EAAI,aAAa,EAAM;CAE3B;CAEF,OAAO;AACT;AAGA,SAAS,GAAe,GAAK,GAAM;CACjC,IAAM,IAAS;EACb,MAAM;EACN,YAAY,CAAC;CACf,GACM,IAAW,CAAC,GACZ,IAAQ,EAAI,MAAM;CACxB,KAAK,IAAM,KAAY,GAAO;EAC5B,IAAI,IAAU,EAAM;EACpB,IAAI,MAAY,KAAK,KAAK,EAAQ,SAAS,KAAK,GAC9C;EAEF,IAAM,IAAe,GAAe,CAAO,GACrC,IAAY,EAAS,EAAQ,MAAM;GACvC,GAAG;GACH,aAAa;IAAC,GAAG,EAAK;IAAa;IAAc;GAAQ;GACzD,cAAc;IAAC,GAAG,EAAK;IAAa;IAAc;GAAQ;EAC5D,CAAC;EACG,MAAc,KAAK,MAGvB,EAAO,WAAW,KAAY,GACzB,KACH,EAAS,KAAK,CAAQ;CAE1B;CACA,AAAI,EAAS,WACX,EAAO,WAAW;CAEpB,IAAM,IAAuB,GAA2B,GAAK,CAAI;CAIjE,OAHI,MAAyB,KAAK,MAChC,EAAO,uBAAuB,IAEzB;AACT;AACA,SAAS,GAA2B,GAAK,GAAM;CAC7C,IAAI,EAAI,SAAS,KAAK,aAAa,YACjC,OAAO,EAAS,EAAI,SAAS,MAAM;EACjC,GAAG;EACH,aAAa,CAAC,GAAG,EAAK,aAAa,sBAAsB;CAC3D,CAAC;CAEH,QAAQ,EAAI,aAAZ;EACE,KAAK,eACH,OAAO,EAAK;EACd,KAAK,UACH,OAAO,EAAK;EACd,KAAK,SACH,OAAO,EAAK,6BAA6B,WAAW,EAAK,8BAA8B,EAAK;CAChG;AACF;AACA,SAAS,GAAe,GAAQ;CAC9B,IAAI;EACF,OAAO,EAAO,WAAW;CAC3B,QAAY;EACV,OAAO;CACT;AACF;AAGA,IAAI,MAAoB,GAAK,MAAS;CAEpC,IAAI,EAAK,YAAY,SAAS,MAAc,EAAK,cAAqC,SAAS,GAC7F,OAAO,EAAS,EAAI,UAAU,MAAM,CAAI;CAE1C,IAAM,IAAc,EAAS,EAAI,UAAU,MAAM;EAC/C,GAAG;EACH,aAAa;GAAC,GAAG,EAAK;GAAa;GAAS;EAAG;CACjD,CAAC;CACD,OAAO,IAAc,EAAE,OAAO,CAAC,EAAE,KAAK,EAAY,EAAE,GAAG,CAAW,EAAE,IAAI,EAAY;AACtF,GAGI,MAAoB,GAAK,MAAS;CACpC,IAAI,EAAK,iBAAiB,SACxB,OAAO,EAAS,EAAI,GAAG,MAAM,CAAI;CAC5B,IAAI,EAAK,iBAAiB,UAC/B,OAAO,EAAS,EAAI,IAAI,MAAM,CAAI;CAEpC,IAAM,IAAc,EAAS,EAAI,GAAG,MAAM;EACxC,GAAG;EACH,aAAa;GAAC,GAAG,EAAK;GAAa;GAAS;EAAG;CACjD,CAAC;CAKD,OAAO,EACL,OAAO,CAAC,GALW,EAAS,EAAI,IAAI,MAAM;EAC1C,GAAG;EACH,aAAa;GAAC,GAAG,EAAK;GAAa;GAAS,IAAc,MAAM;EAAG;CACrE,CAEkC,CAAC,CAAC,CAAC,QAChC,MAAW,MAAW,KAAK,CAC9B,EACF;AACF;AAGA,SAAS,GAAgB,GAAK,GAAM;CAClC,OAAO,EAAS,EAAI,KAAK,MAAM,CAAI;AACrC;AAGA,SAAS,GAAY,GAAK,GAAM;CAK9B,IAAM,IAAS;EACb,MAAM;EACN,aAAa;EACb,OAPY,EAAS,EAAI,UAAU,MAAM;GACzC,GAAG;GACH,aAAa,CAAC,GAAG,EAAK,aAAa,OAAO;EAC5C,CAIM;CACN;CAOA,OANI,EAAI,YACN,EAAO,WAAW,EAAI,QAAQ,QAE5B,EAAI,YACN,EAAO,WAAW,EAAI,QAAQ,QAEzB;AACT;AAGA,SAAS,GAAc,GAAK,GAAM;CAoB9B,OAnBE,EAAI,OACC;EACL,MAAM;EACN,UAAU,EAAI,MAAM;EACpB,OAAO,EAAI,MAAM,KACd,GAAG,MAAM,EAAS,EAAE,MAAM;GACzB,GAAG;GACH,aAAa;IAAC,GAAG,EAAK;IAAa;IAAS,GAAG;GAAG;EACpD,CAAC,CACH,CAAC,CAAC,QACC,GAAK,MAAM,MAAM,KAAK,IAAI,IAAM,CAAC,GAAG,GAAK,CAAC,GAC3C,CAAC,CACH;EACA,iBAAiB,EAAS,EAAI,KAAK,MAAM;GACvC,GAAG;GACH,aAAa,CAAC,GAAG,EAAK,aAAa,iBAAiB;EACtD,CAAC;CACH,IAEO;EACL,MAAM;EACN,UAAU,EAAI,MAAM;EACpB,UAAU,EAAI,MAAM;EACpB,OAAO,EAAI,MAAM,KACd,GAAG,MAAM,EAAS,EAAE,MAAM;GACzB,GAAG;GACH,aAAa;IAAC,GAAG,EAAK;IAAa;IAAS,GAAG;GAAG;EACpD,CAAC,CACH,CAAC,CAAC,QACC,GAAK,MAAM,MAAM,KAAK,IAAI,IAAM,CAAC,GAAG,GAAK,CAAC,GAC3C,CAAC,CACH;CACF;AAEJ;AAGA,SAAS,KAAoB;CAC3B,OAAO,EACL,KAAK,EAAY,EACnB;AACF;AAGA,SAAS,KAAkB;CACzB,OAAO,EAAY;AACrB;AAGA,IAAI,MAAoB,GAAK,MACpB,EAAS,EAAI,UAAU,MAAM,CAAI,GAItC,MAAgB,GAAK,GAAU,MAAS;CAC1C,QAAQ,GAAR;EACE,KAAK,aACH,OAAO,GAAe,GAAK,CAAI;EACjC,KAAK,aACH,OAAO,GAAe,CAAG;EAC3B,KAAK,aACH,OAAO,GAAe,GAAK,CAAI;EACjC,KAAK,aACH,OAAO,GAAe,CAAG;EAC3B,KAAK,cACH,OAAO,GAAgB;EACzB,KAAK,WACH,OAAO,GAAa,GAAK,CAAI;EAC/B,KAAK,gBACH,OAAO,GAAkB;EAC3B,KAAK,WACH,OAAO,GAAa;EACtB,KAAK,YACH,OAAO,GAAc,GAAK,CAAI;EAChC,KAAK;EACL,KAAK,yBACH,OAAO,GAAc,GAAK,CAAI;EAChC,KAAK,mBACH,OAAO,EAAqB,GAAK,CAAI;EACvC,KAAK,YACH,OAAO,GAAc,GAAK,CAAI;EAChC,KAAK,aACH,OAAO,GAAe,GAAK,CAAI;EACjC,KAAK,cACH,OAAO,GAAgB,CAAG;EAC5B,KAAK,WACH,OAAO,GAAa,CAAG;EACzB,KAAK,iBACH,OAAO,GAAmB,CAAG;EAC/B,KAAK,eACH,OAAO,GAAiB,GAAK,CAAI;EACnC,KAAK,eACH,OAAO,GAAiB,GAAK,CAAI;EACnC,KAAK,UACH,OAAO,GAAY,GAAK,CAAI;EAC9B,KAAK,UACH,OAAO,GAAY,GAAK,CAAI;EAC9B,KAAK,WACH,aAAa,EAAI,OAAO,CAAC,CAAC;EAC5B,KAAK,cACH,OAAO,GAAgB,GAAK,CAAI;EAClC,KAAK;EACL,KAAK,YACH,OAAO,GAAc;EACvB,KAAK,cACH,OAAO,GAAgB,GAAK,CAAI;EAClC,KAAK,UACH,OAAO,EAAY;EACrB,KAAK,cACH,OAAO,GAAgB;EACzB,KAAK,cACH,OAAO,GAAgB,GAAK,CAAI;EAClC,KAAK,cACH,OAAO,GAAgB,GAAK,CAAI;EAClC,KAAK,eACH,OAAO,GAAiB,GAAK,CAAI;EACnC,KAAK,YACH,OAAO,GAAc,GAAK,CAAI;EAChC,KAAK,eACH,OAAO,GAAiB,GAAK,CAAI;EACnC,KAAK;EACL,KAAK;EACL,KAAK,aACH;EACF,SACE,OAAuB,kBAAE,MAAM,KAAK,EAAA,CAAG,CAAQ;CACnD;AACF,GAGI,MAAmB,GAAO,MAAU;CACtC,IAAI,IAAI;CACR,OAAO,IAAI,EAAM,UAAU,IAAI,EAAM,UAC/B,EAAM,OAAO,EAAM,IADoB;CAG7C,OAAO,EAAE,EAAM,SAAS,EAAA,CAAG,SAAS,GAAG,GAAG,EAAM,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;AACpE;AAGA,SAAS,EAAS,GAAK,GAAM,IAAkB,IAAO;CAEpD,IAAM,IAAW,EAAK,KAAK,IAAI,CAAG;CAClC,IAAI,EAAK,UAAU;EACjB,IAAM,IAAwB,EAAK,UAAiC,KAClE,GACA,GACA,GACA,GACA,CACF;EACA,IAAI,MAAmB,IACrB,OAAO;CAEX;CACA,IAAI,KAAY,CAAC,GAAiB;EAChC,IAAM,IAAa,GAAQ,GAAU,CAAI;EACzC,IAAI,MAAe,KAAK,GACtB,OAAO;CAEX;CACA,IAAM,IAAU;EAAE;EAAK,MAAM,EAAK;EAAa,YAAY,KAAK;CAAE;CAClE,EAAK,KAAK,IAAI,GAAK,CAAO;CAC1B,IAAM,IAAqB,GAAa,GAAK,EAAI,UAAU,CAAI,GACzD,IAAc,OAAO,KAAuB,aAAa,EAAS,EAAmB,GAAG,CAAI,IAAI;CAItG,IAHI,KACF,GAAQ,GAAK,GAAM,CAAW,GAE5B,EAAK,aAAa;EACpB,IAAM,IAAoB,EAAK,YAAY,GAAa,GAAK,CAAI;EAEjE,OADA,EAAQ,aAAa,GACd;CACT;CAEA,OADA,EAAQ,aAAa,GACd;AACT;AACA,IAAI,MAAW,GAAM,MAAS;CAC5B,QAAQ,EAAK,cAAb;EACE,KAAK,QACH,OAAO,EAAE,MAAM,EAAK,KAAK,KAAK,GAAG,EAAE;EACrC,KAAK,YACH,OAAO,EAAE,MAAM,GAAgB,EAAK,aAAa,EAAK,IAAI,EAAE;EAC9D,KAAK;EACL,KAAK,QASH,OARI,EAAK,KAAK,SAAS,EAAK,YAAY,UAAU,EAAK,KAAK,OAAO,GAAO,MAAU,EAAK,YAAY,OAAW,CAAK,KACnH,QAAQ,KACN,mCAAmC,EAAK,YAAY,KAClD,GACF,EAAE,oBACJ,GACO,EAAY,KAEd,EAAK,iBAAiB,SAAS,EAAY,IAAI,KAAK;CAE/D;AACF,GACI,MAAW,GAAK,GAAM,OACpB,EAAI,gBACN,EAAY,cAAc,EAAI,cAEzB,IAIL,MAAW,MAAY;CACzB,IAAM,IAAW,GAAkB,CAAO,GACpC,IAAc,EAAS,SAAS,KAAK,IAAqE,EAAS,WAA1E;EAAC,GAAG,EAAS;EAAU,EAAS;EAAgB,EAAS;CAAI;CAC5G,OAAO;EACL,GAAG;EACH;EACA,cAAc,KAAK;EACnB,MAAM,IAAI,IACR,OAAO,QAAQ,EAAS,WAAW,CAAC,CAAC,KAAK,CAAC,GAAO,OAAS,CACzD,EAAI,MACJ;GACE,KAAK,EAAI;GACT,MAAM;IAAC,GAAG,EAAS;IAAU,EAAS;IAAgB;GAAK;GAE3D,YAAY,KAAK;EACnB,CACF,CAAC,CACH;CACF;AACF,GAGI,MAAoB,GAAQ,MAAY;CAE1C,IAAM,IAAO,GAAQ,CAAO,GACxB,IAAc,OAAO,KAAY,YAAY,EAAQ,cAAc,OAAO,QAAQ,EAAQ,WAAW,CAAC,CAAC,QACxG,GAAK,CAAC,GAAO,QAEL;EACL,GAAG;GACF,IAAe,EACd,EAAQ,MACR;GACE,GAAG;GACH,aAAa;IAAC,GAAG,EAAK;IAAU,EAAK;IAAgB;GAAK;EAC5D,GACA,EACF,KAAmB,EAAY;CACjC,IAEF,CAAC,CACH,IAAI,KAAK,GACH,IAAQ,OAAO,KAAY,WAAW,IAAW,GAAmC,iBAAkB,UAAU,KAAK,IAAI,GAAmC,MAC5J,IAAc,EAClB,EAAO,MACP,MAAU,KAAK,IAAI,IAAO;EACxB,GAAG;EACH,aAAa;GAAC,GAAG,EAAK;GAAU,EAAK;GAAgB;EAAK;CAC5D,GACA,EACF,KAAmB,EAAY,GACzB,IAAQ,OAAO,KAAY,YAAY,EAAQ,SAAS,KAAK,KAAK,EAAQ,iBAAiB,UAAU,EAAQ,OAAO,KAAK;CAC/H,AAAI,MAAU,KAAK,MACjB,EAAK,QAAQ;CAEf,IAAM,IAAW,MAAU,KAAK,IAAI,IAAc;EAChD,GAAG;GACF,EAAK,iBAAiB;CACzB,IAAI,IAAO;EACT,MAAM;GACJ,GAAG,EAAK,iBAAiB,aAAa,CAAC,IAAI,EAAK;GAChD,EAAK;GACL;EACF,CAAC,CAAC,KAAK,GAAG;GACT,EAAK,iBAAiB;GACrB,GAAG;IACF,IAAQ;EACX;CACF;CAEA,OADA,EAAS,UAAU,2CACZ;AACT,GAGI,KAA+B,uBAAO,IAAI,kBAAkB;AAChE,SAAS,GAAW,GAAc;CAChC,IAAI;CACJ,cACE,AACE,MAAS,EAAa,GAEjB;AAEX;AACA,SAAS,GAAW,GAAa,EAC/B,gBACE,CAAC,GAAG;CACN,OAAO;GACJ,KAAe;EAChB,OAAO,KAAK;EAEZ,IAAI,aAAa;GAIf,OAHI,OAAO,KAAgB,eACzB,IAAc,EAAY,IAErB;EACT;EACA;CACF;AACF;AACA,SAAS,GAAS,GAAO;CACvB,OAAO,OAAO,KAAU,cAAY,KAAkB,MAAgB,KAAS,EAAM,QAAkB,MAAQ,gBAAgB,KAAS,cAAc;AACxJ;AACA,SAAS,GAAS,GAAQ;CACxB,OAAO,KAAU,OAAO,GAAW;EACjC,MAAM;EACN,YAAY,CAAC;EACb,sBAAsB;CACxB,CAAC,IAAI,GAAS,CAAM,IAAI,IAAS,eAAe,IAAS,EAAO,YAAY,CAAC,WAAW,QAAQ,GAAU,CAAM,IAAI,GAAe,CAAM,IAAI,EAAO;AACtJ;AACA,SAAS,GAAe,GAAiB;CACvC,OAAO,SACC;EACJ,IAAI,CAAC,GAAsB,CAAe,GACxC,MAAU,MACR,2BAA2B,EAAgB,YAAY,CAAC,OAAO,2CACjE;EAEF,OAAO,GACL,EAAgB,YAAY,CAAC,WAAW,MAAM,EAC5C,QAAQ,WACV,CAAC,CACH;CACF,GACA,EACE,UAAU,OAAO,MAAU;EACzB,IAAM,IAAS,MAAM,EAAgB,YAAY,CAAC,SAAS,CAAK;EAChE,OAAO,WAAW,IAAS;GAAE,SAAS;GAAM,OAAO,EAAO;EAAM,IAAI;GAClE,SAAS;GACT,OAAO,IAAI,EAAoB;IAC7B;IACA,OAAO,EAAO;GAChB,CAAC;EACH;CACF,EACF,CACF;AACF;AACA,SAAS,GAAsB,GAAQ;CACrC,OAAO,EAAO,YAAY,CAAC,cAAc;AAC3C;AACA,SAAS,GAAW,GAAY,GAAS;CAEvC,IAAM,IAAuB,GAAmC,iBAA+B;CAC/F,OAAO,SAEC,GAAiB,GAAY,EACjC,cAAc,IAAgB,SAAS,OACzC,CAAC,GACD,EACE,UAAU,OAAO,MAAU;EACzB,IAAM,IAAS,MAAM,EAAW,eAAe,CAAK;EACpD,OAAO,EAAO,UAAU;GAAE,SAAS;GAAM,OAAO,EAAO;EAAK,IAAI;GAAE,SAAS;GAAO,OAAO,EAAO;EAAM;CACxG,EACF,CACF;AACF;AACA,SAAS,GAAW,GAAY,GAAS;CAEvC,IAAM,IAAuB,GAAmC,iBAA+B;CAC/F,OAAO,SAEC,GACJ,EAAa,GAAY;EACvB,QAAQ;EACR,IAAI;EACJ,QAAQ,IAAgB,QAAQ;CAClC,CAAC,CACH,GACA,EACE,UAAU,OAAO,MAAU;EACzB,IAAM,IAAS,MAAM,EAAe,GAAY,CAAK;EACrD,OAAO,EAAO,UAAU;GAAE,SAAS;GAAM,OAAO,EAAO;EAAK,IAAI;GAAE,SAAS;GAAO,OAAO,EAAO;EAAM;CACxG,EACF,CACF;AACF;AACA,SAAS,GAAa,GAAY;CAChC,OAAO,UAAU;AACnB;AACA,SAAS,GAAU,GAAY,GAAS;CAIpC,OAHE,GAAa,CAAU,IAClB,GAAW,GAAY,CAAO,IAE9B,GAAW,GAAY,CAAO;AAEzC;AAGA,eAAe,GAAc,EAC3B,UACA,WACA,cACC;CACD,IAAM,IAAS,MAAM,GAAkB;EAAE;EAAO;EAAQ;CAAQ,CAAC;CACjE,IAAI,CAAC,EAAO,SACV,MAAMC,EAAqB,KAAK;EAAE;EAAO,OAAO,EAAO;EAAO;CAAQ,CAAC;CAEzE,OAAO,EAAO;AAChB;AACA,eAAe,GAAkB,EAC/B,UACA,WACA,cACC;CACD,IAAM,IAAe,GAAS,CAAM;CACpC,IAAI;EACF,IAAI,EAAa,YAAY,MAC3B,OAAO;GAAE,SAAS;GAAM;GAAO,UAAU;EAAM;EAEjD,IAAM,IAAS,MAAM,EAAa,SAAS,CAAK;EAIhD,OAHI,EAAO,UACF;GAAE,SAAS;GAAM,OAAO,EAAO;GAAO,UAAU;EAAM,IAExD;GACL,SAAS;GACT,OAAOA,EAAqB,KAAK;IAAE;IAAO,OAAO,EAAO;IAAO;GAAQ,CAAC;GACxE,UAAU;EACZ;CACF,SAAS,GAAO;EACd,OAAO;GACL,SAAS;GACT,OAAOA,EAAqB,KAAK;IAAE;IAAO,OAAO;IAAO;GAAQ,CAAC;GACjE,UAAU;EACZ;CACF;AACF;AAoBA,eAAe,EAAc,EAC3B,SACA,aACC;CACD,IAAI;EACF,IAAM,IAAQ,GAAgB,CAAI;EAIlC,OAHI,KAAU,OACL;GAAE,SAAS;GAAM;GAAO,UAAU;EAAM,IAE1C,MAAM,GAAkB;GAAE;GAAO;EAAO,CAAC;CAClD,SAAS,GAAO;EACd,OAAO;GACL,SAAS;GACT,OAAO,EAAe,WAAW,CAAK,IAAI,IAAQ,IAAI,EAAe;IAAE;IAAM,OAAO;GAAM,CAAC;GAC3F,UAAU,KAAK;EACjB;CACF;AACF;AAcA,SAAS,GAAqB,EAC5B,WACA,aACC;CACD,OAAO,EAAO,YAAY,IAAI,kBAAkB,CAAC,CAAC,CAAC,YAAY,IAAI,EAAwB,CAAC,CAAC,CAAC,YAC5F,IAAI,gBAAgB,EAClB,MAAM,UAAU,EAAE,WAAQ,GAAY;EAChC,MAAS,YAGb,EAAW,QAAQ,MAAM,EAAc;GAAE,MAAM;GAAM;EAAO,CAAC,CAAC;CAChE,EACF,CAAC,CACH;AACF;AAyZA,eAAe,EAAQ,GAAO;CAI5B,OAHI,OAAO,KAAU,eACnB,IAAQ,EAAM,IAET,QAAQ,QAAQ,CAAK;AAC9B;AAgImB,IAAI,YAAY;AA2SnC,IC5jII,KAAY,OAAO,gBACnB,MAAY,GAAQ,MAAQ;CAC9B,KAAK,IAAI,KAAU,GACjB,GAAU,GAAQ,GAAQ;EAAE,KAAK,EAAI;EAAS,YAAY;CAAK,CAAC;AACpE,GAyOI,KAAQ,6BACR,KAAU,mBAAmB,MAC7B,KAAU,OAAO,IAAI,EAAO,GAC5B,IAAK,IACL,IAAyB,eAAe,KAAMc,GAAa,KAAM,IAAS,GAAA,CAAK;CACjF,YAAY,EACV,aAAU,wBACV,UACA,MAAM,GACN,aACA,UACA,mBACC;EAMD,AALA,MAAM;GAAE,MAAM;GAAO;GAAS;EAAM,CAAC,GACrC,KAAK,MAAO,IACZ,KAAK,OAAO,GACZ,KAAK,WAAW,GAChB,KAAK,QAAQ,GACb,KAAK,eAAe;CACtB;CACA,OAAO,WAAW,GAAO;EACvB,OAAOA,EAAY,UAAU,GAAO,EAAO;CAC7C;AACF,GAkPI,KAAS,2BACT,KAAW,mBAAmB,MAC9B,KAAW,OAAO,IAAI,EAAQ,GAC9B,IAAM,IACN,IAAuB,eAAe,KAAOW,GAAc,KAAO,IAAU,GAAA,CAAM;CACpF,YAAY,EACV,cACA,YACA,cACC;EAID,AAHA,MAAM;GAAE,MAAM;GAAQ;EAAQ,CAAC,GAC/B,KAAK,MAAQ,IACb,KAAK,YAAY,GACjB,KAAK,UAAU;CACjB;CACA,OAAO,WAAW,GAAO;EACvB,OAAOA,EAAa,UAAU,GAAO,EAAQ;CAC/C;AACF;AAwsBA,SAAS,GAAa,GAAM,GAAW;CACrC,IAAI,MAAS,KAAK,KAAK,MAAc,KAAK,GACxC;CAEF,IAAI,MAAS,KAAK,GAChB,OAAO;CAET,IAAI,MAAc,KAAK,GACrB,OAAO;CAET,IAAM,IAAS,EAAE,GAAG,EAAK;CACzB,KAAK,IAAM,KAAO,GACZ,UAAQ,eAAe,MAAQ,iBAAiB,MAAQ,eAGxD,OAAO,UAAU,eAAe,KAAK,GAAW,CAAG,GAAG;EACxD,IAAM,IAAiB,EAAU;EACjC,IAAI,MAAmB,KAAK,GAAG;EAC/B,IAAM,IAAY,KAAO,IAAO,EAAK,KAAO,KAAK,GAC3C,IAA4C,OAAO,KAAmB,cAArD,KAAiE,CAAC,MAAM,QAAQ,CAAc,KAAK,EAAE,aAA0B,SAAS,EAAE,aAA0B,SACrL,IAA+D,OAAO,KAAc,cAAnE,KAA+E,CAAC,MAAM,QAAQ,CAAS,KAAK,EAAE,aAAqB,SAAS,EAAE,aAAqB;EAC1L,AAME,EAAO,KANL,KAAkB,IACN,GACZ,GACA,CACF,IAEc;CAElB;CAEF,OAAO;AACT;AA2/BA,IAAI,IAAI;CACN;CACA;CACA;CACA;CACA,MAAMM;CACN,YAAYC;CACZ;CACA;CACA;CACA;CACA,MAAMC;CACN;CACA;CACA;CACA;CACA;CACA;AACF,GAGI,IAAkB,EAAE,WAChB,EAAE,MAAM;CACZ,EAAE,KAAK;CACP,EAAE,OAAO;CACT,EAAE,OAAO;CACT,EAAE,QAAQ;CACV,EAAE,OAAO,EAAE,OAAO,GAAG,EAAgB,SAAS,CAAC;CAC/C,EAAE,MAAM,CAAe;AACzB,CAAC,CACH,GAGI,IAAyB,EAAE,OAC7B,EAAE,OAAO,GACT,EAAE,OAAO,EAAE,OAAO,GAAG,EAAgB,SAAS,CAAC,CACjD,GAMI,KAAuB,EAAE,MAAM;CACjC,EAAE,OAAO;CACT,EAAE,WAAW,UAAU;CACvB,EAAE,WAAW,WAAW;CACxB,EAAE,OAAOC,IAAW,EAAE,SAAS,mBAAmB,CAAC;AACrD,CAAC,GACG,KAA0B,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,GACzD,KAAiB,EAAE,OAAO;CAC5B,MAAM,EAAE,QAAQ,MAAM;CACtB,MAAM,EAAE,OAAO;CACf,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAAkB,EAAE,OAAO;CAC7B,MAAM,EAAE,QAAQ,OAAO;CACvB,OAAO,EAAE,MAAM;EACb;EACA,EAAE,WAAW,GAAG;EAChB;CACF,CAAC;CACD,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;CAC/B,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAAuB,EAAE,mBAAmB,QAAQ;CACtD,EAAE,OAAO;EAAE,MAAM,EAAE,QAAQ,MAAM;EAAG,MAAM;CAAqB,CAAC;CAChE,EAAE,OAAO;EAAE,MAAM,EAAE,QAAQ,KAAK;EAAG,KAAK,EAAE,WAAW,GAAG;CAAE,CAAC;CAC3D,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,WAAW;EAC3B,WAAW;CACb,CAAC;CACD,EAAE,OAAO;EAAE,MAAM,EAAE,QAAQ,MAAM;EAAG,MAAM,EAAE,OAAO;CAAE,CAAC;AACxD,CAAC,GACG,KAAgC,EAAE,mBAAmB,QAAQ,CAC/D,EAAE,OAAO;CAAE,MAAM,EAAE,QAAQ,MAAM;CAAG,MAAM;AAAqB,CAAC,GAChE,EAAE,OAAO;CAAE,MAAM,EAAE,QAAQ,KAAK;CAAG,KAAK,EAAE,WAAW,GAAG;AAAE,CAAC,CAC7D,CAAC,GACG,KAAiB,EAAE,OAAO;CAC5B,MAAM,EAAE,QAAQ,MAAM;CACtB,MAAM,EAAE,MAAM;EACZ;EACA;EACA,EAAE,WAAW,GAAG;EAChB;CACF,CAAC;CACD,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,WAAW,EAAE,OAAO;CACpB,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAAsB,EAAE,OAAO;CACjC,MAAM,EAAE,QAAQ,WAAW;CAC3B,MAAM,EAAE,OAAO;CACf,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAAmB,EAAE,OAAO;CAC9B,MAAM,EAAE,QAAQ,QAAQ;CACxB,MAAM,EAAE,OAAO,CAAC,CAAC,WAAW,MAAU,CAAK;CAC3C,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAA0B,EAAE,OAAO;CACrC,MAAM,EAAE,QAAQ,gBAAgB;CAChC,MAAM,EAAE,MAAM;EACZ;EACA;EACA,EAAE,WAAW,GAAG;CAClB,CAAC;CACD,WAAW,EAAE,OAAO;CACpB,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAAqB,EAAE,OAAO;CAChC,MAAM,EAAE,QAAQ,WAAW;CAC3B,YAAY,EAAE,OAAO;CACrB,UAAU,EAAE,OAAO;CACnB,OAAO,EAAE,QAAQ;CACjB,iBAAiB,EAAuB,SAAS;CACjD,kBAAkB,EAAE,QAAQ,CAAC,CAAC,SAAS;AACzC,CAAC,GACG,KAAe,EAAE,mBACnB,QACA;CACE,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,MAAM;EACtB,OAAO,EAAE,OAAO;EAChB,iBAAiB,EAAuB,SAAS;CACnD,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,MAAM;EACtB,OAAO;EACP,iBAAiB,EAAuB,SAAS;CACnD,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,kBAAkB;EAClC,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;EAC5B,iBAAiB,EAAuB,SAAS;CACnD,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,YAAY;EAC5B,OAAO,EAAE,OAAO;EAChB,iBAAiB,EAAuB,SAAS;CACnD,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,YAAY;EAC5B,OAAO;EACP,iBAAiB,EAAuB,SAAS;CACnD,CAAC;CACD,EAAE,OAAO;EACP,MAAM,EAAE,QAAQ,SAAS;EACzB,OAAO,EAAE,MACP,EAAE,MAAM;GACN,EAAE,OAAO;IACP,MAAM,EAAE,QAAQ,MAAM;IACtB,MAAM,EAAE,OAAO;IACf,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IACP,MAAM,EAAE,QAAQ,MAAM;IACtB,MAAM;IACN,WAAW,EAAE,OAAO;IACpB,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;IAC9B,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IAEP,MAAM,EAAE,QAAQ,WAAW;IAC3B,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,OAAO;IACpB,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;IAC9B,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IAEP,MAAM,EAAE,QAAQ,UAAU;IAC1B,KAAK,EAAE,OAAO;IACd,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;IAC/B,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IAEP,MAAM,EAAE,QAAQ,SAAS;IACzB,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IAEP,MAAM,EAAE,QAAQ,gBAAgB;IAChC,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;IAClD,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IAEP,MAAM,EAAE,QAAQ,YAAY;IAC5B,MAAM,EAAE,OAAO;IACf,WAAW,EAAE,OAAO;IACpB,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IAEP,MAAM,EAAE,QAAQ,WAAW;IAC3B,KAAK,EAAE,OAAO;IACd,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IAEP,MAAM,EAAE,QAAQ,eAAe;IAC/B,QAAQ,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9D,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IAEP,MAAM,EAAE,QAAQ,sBAAsB;IACtC,mBAAmB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;IAClD,iBAAiB,EAAuB,SAAS;GACnD,CAAC;GACD,EAAE,OAAO;IACP,MAAM,EAAE,QAAQ,QAAQ;IACxB,iBAAiB,EAAuB,SAAS;GACnD,CAAC;EACH,CAAC,CACH;CACF,CAAC;AACH,CACF,GACI,KAAuB,EAAE,OAAO;CAClC,MAAM,EAAE,QAAQ,aAAa;CAC7B,YAAY,EAAE,OAAO;CACrB,UAAU,EAAE,OAAO;CACnB,QAAQ;CACR,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAA4B,EAAE,OAChC;CACE,MAAM,EAAE,QAAQ,uBAAuB;CACvC,YAAY,EAAE,OAAO;CACrB,YAAY,EAAE,OAAO;CACrB,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;AAC9B,CACF,GACI,KAA6B,EAAE,OAAO;CACxC,MAAM,EAAE,QAAQ,wBAAwB;CACxC,YAAY,EAAE,OAAO;CACrB,UAAU,EAAE,QAAQ;CACpB,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;AAC9B,CAAC,GAGG,KAA2B,EAAE,OAAO;CACtC,MAAM,EAAE,QAAQ,QAAQ;CACxB,SAAS,EAAE,OAAO;CAClB,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAAyB,EAAE,OAAO;CACpC,MAAM,EAAE,QAAQ,MAAM;CACtB,SAAS,EAAE,MAAM,CACf,EAAE,OAAO,GACT,EAAE,MAAM,EAAE,MAAM;EAAC;EAAgB;EAAiB;CAAc,CAAC,CAAC,CACpE,CAAC;CACD,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAA8B,EAAE,OAAO;CACzC,MAAM,EAAE,QAAQ,WAAW;CAC3B,SAAS,EAAE,MAAM,CACf,EAAE,OAAO,GACT,EAAE,MACA,EAAE,MAAM;EACN;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC,CACH,CACF,CAAC;CACD,iBAAiB,EAAuB,SAAS;AACnD,CAAC,GACG,KAAyB,EAAE,OAAO;CACpC,MAAM,EAAE,QAAQ,MAAM;CACtB,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,IAAsB,EAA0B,CAAC,CAAC;CAC5E,iBAAiB,EAAuB,SAAS;AACnD,CAAC;AACwB,EAAE,MAAM;CAC/B;CACA;CACA;CACA;AACF,CAAC,GAsvBD,GAAS,CAAA,GAAgB;CACvB,aAAa;CACb,cAAc;CACd,YAAY;CACZ,cAAc;CACd,YAAY;AACd,CAAC;AAeD,SAAS,GAAQ,GAAO;CACtB,IAAM,IAAQ,CAAC,MAAM,GACjB,IAAiB,IACjB,IAAe,MACf,IAAsB;CAC1B,SAAS,EAAW,GAAM;EACxB,OAAO,KAAQ,OAAO,KAAQ,OAAO,KAAQ,OAAO,KAAQ,OAAO,KAAQ,OAAO,KAAQ;CAC5F;CACA,SAAS,EAAkB,GAAM,GAAG,GAAW;EAE3C,QAAQ,GAAR;GACE,KAAK;IAIH,AAHA,IAAiB,GACjB,EAAM,IAAI,GACV,EAAM,KAAK,CAAS,GACpB,EAAM,KAAK,eAAe;IAC1B;GAEF,KAAK;GACL,KAAK;GACL,KAAK;IAKH,AAJA,IAAiB,GACjB,IAAe,GACf,EAAM,IAAI,GACV,EAAM,KAAK,CAAS,GACpB,EAAM,KAAK,gBAAgB;IAC3B;GAEF,KAAK;IAGH,AAFA,EAAM,IAAI,GACV,EAAM,KAAK,CAAS,GACpB,EAAM,KAAK,eAAe;IAC1B;GAEF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IAIH,AAHA,IAAiB,GACjB,EAAM,IAAI,GACV,EAAM,KAAK,CAAS,GACpB,EAAM,KAAK,eAAe;IAC1B;GAEF,KAAK;IAIH,AAHA,IAAiB,GACjB,EAAM,IAAI,GACV,EAAM,KAAK,CAAS,GACpB,EAAM,KAAK,qBAAqB;IAChC;GAEF,KAAK,KAIH,AAHA,IAAiB,GACjB,EAAM,IAAI,GACV,EAAM,KAAK,CAAS,GACpB,EAAM,KAAK,oBAAoB;EAGnC;CAEJ;CACA,SAAS,EAAwB,GAAM,GAAG;EACxC,QAAQ,GAAR;GACE,KAAK;IAEH,AADA,EAAM,IAAI,GACV,EAAM,KAAK,2BAA2B;IACtC;GAEF,KAAK,KAEH,AADA,IAAiB,GACjB,EAAM,IAAI;EAGd;CACF;CACA,SAAS,EAAuB,GAAM,GAAG;EACvC,QAAQ,GAAR;GACE,KAAK;IAEH,AADA,EAAM,IAAI,GACV,EAAM,KAAK,0BAA0B;IACrC;GAEF,KAAK,KAEH,AADA,IAAiB,GACjB,EAAM,IAAI;EAGd;CACF;CACA,KAAK,IAAI,IAAI,GAAG,IAAI,EAAM,QAAQ,KAAK;EACrC,IAAM,IAAO,EAAM;EAEnB,QADqB,EAAM,EAAM,SAAS,IAC1C;GACE,KAAK;IACH,EAAkB,GAAM,GAAG,QAAQ;IACnC;GACF,KAAK;IACH,QAAQ,GAAR;KACE,KAAK;MAEH,AADA,EAAM,IAAI,GACV,EAAM,KAAK,mBAAmB;MAC9B;KAEF,KAAK,KAEH,AADA,IAAiB,GACjB,EAAM,IAAI;IAGd;IACA;GAEF,KAAK;IACH,AAAQ,MACD,SACH,EAAM,IAAI,GACV,EAAM,KAAK,mBAAmB;IAIlC;GAEF,KAAK;IACH,AAAQ,MACD,SACH,EAAM,IAAI,GACV,EAAM,KAAK,yBAAyB;IAIxC;GAEF,KAAK;IACH,AAAQ,MACD,QACH,EAAM,IAAI,GACV,EAAM,KAAK,4BAA4B;IAI3C;GAEF,KAAK;IACH,EAAkB,GAAM,GAAG,2BAA2B;IACtD;GAEF,KAAK;IACH,EAAwB,GAAM,CAAC;IAC/B;GAEF,KAAK;IACH,QAAQ,GAAR;KACE,KAAK;MAEH,AADA,EAAM,IAAI,GACV,IAAiB;MACjB;KAEF,KAAK;MACH,EAAM,KAAK,sBAAsB;MACjC;KAEF,SACE,IAAiB;IAErB;IACA;GAEF,KAAK;IACH,QAAQ,GAAR;KACE,KAAK;MAEH,AADA,IAAiB,GACjB,EAAM,IAAI;MACV;KAEF,SAEE,AADA,IAAiB,GACjB,EAAkB,GAAM,GAAG,0BAA0B;IAGzD;IACA;GAEF,KAAK;IACH,QAAQ,GAAR;KACE,KAAK;MAEH,AADA,EAAM,IAAI,GACV,EAAM,KAAK,0BAA0B;MACrC;KAEF,KAAK;MAEH,AADA,IAAiB,GACjB,EAAM,IAAI;MACV;KAEF,SACE,IAAiB;IAGrB;IACA;GAEF,KAAK;IACH,EAAkB,GAAM,GAAG,0BAA0B;IACrD;GAEF,KAAK;IAEH,AADA,EAAM,IAAI,GACN,MAAS,OACX,IAAsB,GACtB,EAAM,KAAK,8BAA8B,KAEzC,IAAiB;IAEnB;GAEF,KAAK;IACH,AAAI,EAAW,CAAI,MACjB,KACI,MAAwB,MAC1B,EAAM,IAAI,GACV,IAAiB;IAGrB;GAEF,KAAK;IACH,QAAQ,GAAR;KACE,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK;MACH,IAAiB;MACjB;KAEF,KAAK;KACL,KAAK;KACL,KAAK;KACL,KAAK,KACH;KAEF,KAAK;MAKH,AAJA,EAAM,IAAI,GACN,EAAM,EAAM,SAAS,OAAO,8BAC9B,EAAuB,GAAM,CAAC,GAE5B,EAAM,EAAM,SAAS,OAAO,+BAC9B,EAAwB,GAAM,CAAC;MAEjC;KAEF,KAAK;MAEH,AADA,EAAM,IAAI,GACN,EAAM,EAAM,SAAS,OAAO,+BAC9B,EAAwB,GAAM,CAAC;MAEjC;KAEF,KAAK;MAEH,AADA,EAAM,IAAI,GACN,EAAM,EAAM,SAAS,OAAO,8BAC9B,EAAuB,GAAM,CAAC;MAEhC;KAEF,SACE,EAAM,IAAI;IAGd;IACA;GAEF,KAAK,kBAAkB;IACrB,IAAM,IAAiB,EAAM,UAAU,GAAc,IAAI,CAAC;IAC1D,AAAI,CAAC,QAAQ,WAAW,CAAc,KAAK,CAAC,OAAO,WAAW,CAAc,KAAK,CAAC,OAAO,WAAW,CAAc,KAChH,EAAM,IAAI,GACN,EAAM,EAAM,SAAS,OAAO,8BAC9B,EAAwB,GAAM,CAAC,IACtB,EAAM,EAAM,SAAS,OAAO,8BACrC,EAAuB,GAAM,CAAC,KAGhC,IAAiB;IAEnB;GACF;EACF;CACF;CACA,IAAI,IAAS,EAAM,MAAM,GAAG,IAAiB,CAAC;CAC9C,KAAK,IAAI,IAAI,EAAM,SAAS,GAAG,KAAK,GAAG,KAErC,QADc,EAAM,IACpB;EACE,KAAK;GACH,KAAU;GACV;EAEF,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;GACH,KAAU;GACV;EAEF,KAAK;EACL,KAAK;EACL,KAAK;GACH,KAAU;GACV;EAEF,KAAK,kBAAkB;GACrB,IAAM,IAAiB,EAAM,UAAU,GAAc,EAAM,MAAM;GACjE,AAAI,OAAO,WAAW,CAAc,IAClC,KAAU,OAAO,MAAM,EAAe,MAAM,IACnC,QAAQ,WAAW,CAAc,IAC1C,KAAU,QAAQ,MAAM,EAAe,MAAM,IACpC,OAAO,WAAW,CAAc,MACzC,KAAU,OAAO,MAAM,EAAe,MAAM;EAEhD;CACF;CAEF,OAAO;AACT;AAGA,eAAe,GAAiB,GAAU;CACxC,IAAI,MAAa,KAAK,GACpB,OAAO;EAAE,OAAO,KAAK;EAAG,OAAO;CAAkB;CAEnD,IAAI,IAAS,MAAM,EAAc,EAAE,MAAM,EAAS,CAAC;CAQnD,OAPI,EAAO,UACF;EAAE,OAAO,EAAO;EAAO,OAAO;CAAmB,KAE1D,IAAS,MAAM,EAAc,EAAE,MAAM,GAAQ,CAAQ,EAAE,CAAC,GACpD,EAAO,UACF;EAAE,OAAO,EAAO;EAAO,OAAO;CAAiB,IAEjD;EAAE,OAAO,KAAK;EAAG,OAAO;CAAe;AAChD;AAGA,IAAI,YAAc;CAChB,MAAM;CACN,gBAAgB,QAAQ,QAAQ,EAAE,MAAM,OAAO,CAAC;CAChD,MAAM,oBAAoB,EAAE,MAAM,KAAS;EACzC,OAAO;CACT;CACA,MAAM,mBAAmB,EAAE,MAAM,KAAS;EACxC,OAAO,EAAE,SAAS,EAAM;CAC1B;CACA,+BAA+B,CAE/B;AACF,IACI,MAAW,EACb,QAAQ,GACR,MAAM,GACN,qBACI;CACJ,IAAM,IAASC,GAAU,CAAW;CACpC,OAAO;EACL,MAAM;EACN,gBAAgB,EAAQ,EAAO,UAAU,CAAC,CAAC,MAAM,OAAiB;GAChE,MAAM;GACN,QAAQ;GACR,GAAG,KAAU,QAAQ,EAAE,MAAM,EAAO;GACpC,GAAG,KAAe,QAAQ,EAAE,eAAY;EAC1C,EAAE;EACF,MAAM,oBAAoB,EAAE,MAAM,KAAS,GAAS;GAClD,IAAM,IAAc,MAAMC,EAAe,EAAE,MAAM,EAAM,CAAC;GACxD,IAAI,CAAC,EAAY,SACf,MAAM,IAAI,EAAuB;IAC/B,SAAS;IACT,OAAO,EAAY;IACnB,MAAM;IACN,UAAU,EAAQ;IAClB,OAAO,EAAQ;IACf,cAAc,EAAQ;GACxB,CAAC;GAEH,IAAM,IAAmB,MAAMC,GAAmB;IAChD,OAAO,EAAY;IACnB;GACF,CAAC;GACD,IAAI,CAAC,EAAiB,SACpB,MAAM,IAAI,EAAuB;IAC/B,SAAS;IACT,OAAO,EAAiB;IACxB,MAAM;IACN,UAAU,EAAQ;IAClB,OAAO,EAAQ;IACf,cAAc,EAAQ;GACxB,CAAC;GAEH,OAAO,EAAiB;EAC1B;EACA,MAAM,mBAAmB,EAAE,MAAM,KAAS;GACxC,IAAM,IAAS,MAAM,GAAiB,CAAK;GAC3C,QAAQ,EAAO,OAAf;IACE,KAAK;IACL,KAAK,mBACH;IAEF,KAAK;IACL,KAAK,oBACH,OAAO,EAEL,SAAS,EAAO,MAClB;GAEJ;EACF;EACA,+BAA+B,CAE/B;CACF;AACF,GACI,MAAU,EACZ,SAAS,GACT,MAAM,GACN,qBACI;CACJ,IAAM,IAAgBF,GAAU,CAAkB;CAClD,OAAO;EACL,MAAM;EAEN,gBAAgB,EAAQ,EAAc,UAAU,CAAC,CAAC,MAAM,MAAgB;GACtE,IAAM,EACJ,SAAS,GACT,gBACA,UACA,GAAG,MACD;GACJ,OAAO;IACL,MAAM;IACN,QAAQ;KACN,SAAS;KACT,GAAG,KAAe,QAAQ,EAAE,eAAY;KACxC,GAAG,KAAS,QAAQ,EAAE,SAAM;KAC5B,MAAM;KACN,YAAY,EACV,UAAU;MAAE,MAAM;MAAS,OAAO;KAAW,EAC/C;KACA,UAAU,CAAC,UAAU;KACrB,sBAAsB;IACxB;IACA,GAAG,KAAU,QAAQ,EAAE,MAAM,EAAO;IACpC,GAAG,KAAe,QAAQ,EAAE,eAAY;GAC1C;EACF,CAAC;EACD,MAAM,oBAAoB,EAAE,MAAM,KAAS,GAAS;GAClD,IAAM,IAAc,MAAMC,EAAe,EAAE,MAAM,EAAM,CAAC;GACxD,IAAI,CAAC,EAAY,SACf,MAAM,IAAI,EAAuB;IAC/B,SAAS;IACT,OAAO,EAAY;IACnB,MAAM;IACN,UAAU,EAAQ;IAClB,OAAO,EAAQ;IACf,cAAc,EAAQ;GACxB,CAAC;GAEH,IAAM,IAAa,EAAY;GAC/B,IAA0B,OAAO,KAAe,aAA5C,KAAwD,EAAE,cAAc,MAAe,CAAC,MAAM,QAAQ,EAAW,QAAQ,GAC3H,MAAM,IAAI,EAAuB;IAC/B,SAAS;IACT,OAAO,IAAIE,EAAqB;KAC9B,OAAO;KACP,OAAO;IACT,CAAC;IACD,MAAM;IACN,UAAU,EAAQ;IAClB,OAAO,EAAQ;IACf,cAAc,EAAQ;GACxB,CAAC;GAEH,IAAM,IAAoB,CAAC;GAC3B,KAAK,IAAM,KAAW,EAAW,UAAU;IACzC,IAAM,IAAmB,MAAMD,GAAmB;KAChD,OAAO;KACP,QAAQ;IACV,CAAC;IACD,IAAI,CAAC,EAAiB,SACpB,MAAM,IAAI,EAAuB;KAC/B,SAAS;KACT,OAAO,EAAiB;KACxB,MAAM;KACN,UAAU,EAAQ;KAClB,OAAO,EAAQ;KACf,cAAc,EAAQ;IACxB,CAAC;IAEH,EAAkB,KAAK,EAAiB,KAAK;GAC/C;GACA,OAAO;EACT;EACA,MAAM,mBAAmB,EAAE,MAAM,KAAS;GACxC,IAAM,IAAS,MAAM,GAAiB,CAAK;GAC3C,QAAQ,EAAO,OAAf;IACE,KAAK;IACL,KAAK,mBACH;IAEF,KAAK;IACL,KAAK,oBAAoB;KACvB,IAAM,IAAa,EAAO;KAC1B,IAA0B,OAAO,KAAe,aAA5C,KAAwD,EAAE,cAAc,MAAe,CAAC,MAAM,QAAQ,EAAW,QAAQ,GAC3H;KAEF,IAAM,IAAc,EAAO,UAAU,oBAAoB,EAAW,SAAS,SAAS,IAAI,EAAW,SAAS,MAAM,GAAG,EAAE,IAAI,EAAW,UAClI,IAAiB,CAAC;KACxB,KAAK,IAAM,KAAc,GAAa;MACpC,IAAM,IAAmB,MAAMA,GAAmB;OAChD,OAAO;OACP,QAAQ;MACV,CAAC;MACD,AAAI,EAAiB,WACnB,EAAe,KAAK,EAAiB,KAAK;KAE9C;KACA,OAAO,EAAE,SAAS,EAAe;IACnC;GACF;EACF;EACA,+BAA+B;GAC7B,IAAI,IAAoB;GACxB,OAAO,IAAI,gBAAgB,EACzB,UAAU,EAAE,oBAAiB,GAAY;IACvC,IAAI,KAAiB,MACnB,OAAO,IAAoB,EAAc,QAAQ,KAC/C,EAAW,QAAQ,EAAc,EAAkB;GAGzD,EACF,CAAC;EACH;CACF;AACF,GACI,MAAU,EACZ,SAAS,GACT,MAAM,GACN,sBAEO;CACL,MAAM;CAEN,gBAAgB,QAAQ,QAAQ;EAC9B,MAAM;EACN,QAAQ;GACN,SAAS;GACT,MAAM;GACN,YAAY,EACV,QAAQ;IAAE,MAAM;IAAU,MAAM;GAAc,EAChD;GACA,UAAU,CAAC,QAAQ;GACnB,sBAAsB;EACxB;EACA,GAAG,KAAU,QAAQ,EAAE,MAAM,EAAO;EACpC,GAAG,KAAe,QAAQ,EAAE,eAAY;CAC1C,CAAC;CACD,MAAM,oBAAoB,EAAE,MAAM,KAAS,GAAS;EAClD,IAAM,IAAc,MAAMD,EAAe,EAAE,MAAM,EAAM,CAAC;EACxD,IAAI,CAAC,EAAY,SACf,MAAM,IAAI,EAAuB;GAC/B,SAAS;GACT,OAAO,EAAY;GACnB,MAAM;GACN,UAAU,EAAQ;GAClB,OAAO,EAAQ;GACf,cAAc,EAAQ;EACxB,CAAC;EAEH,IAAM,IAAa,EAAY;EAC/B,IAA0B,OAAO,KAAe,aAA5C,KAAwD,EAAE,YAAY,MAAe,OAAO,EAAW,UAAW,YAAY,CAAC,EAAc,SAAS,EAAW,MAAM,GACzK,MAAM,IAAI,EAAuB;GAC/B,SAAS;GACT,OAAO,IAAIE,EAAqB;IAC9B,OAAO;IACP,OAAO;GACT,CAAC;GACD,MAAM;GACN,UAAU,EAAQ;GAClB,OAAO,EAAQ;GACf,cAAc,EAAQ;EACxB,CAAC;EAEH,OAAO,EAAW;CACpB;CACA,MAAM,mBAAmB,EAAE,MAAM,KAAS;EACxC,IAAM,IAAS,MAAM,GAAiB,CAAK;EAC3C,QAAQ,EAAO,OAAf;GACE,KAAK;GACL,KAAK,mBACH;GAEF,KAAK;GACL,KAAK,oBAAoB;IACvB,IAAM,IAAa,EAAO;IAC1B,IAA0B,OAAO,KAAe,aAA5C,KAAwD,EAAE,YAAY,MAAe,OAAO,EAAW,UAAW,UACpH;IAEF,IAAM,IAAmB,EAAc,QACpC,MAAiB,EAAa,WAAW,EAAW,MAAM,CAC7D;IAIE,OAHE,EAAO,UAAU,qBACZ,EAAiB,SAAS,EAAW,MAAM,IAAI,EAAE,SAAS,EAAW,OAAO,IAAI,KAAK,IAErF,EAAiB,WAAW,IAAI,EAAE,SAAS,EAAiB,GAAG,IAAI,KAAK;GAEnF;EACF;CACF;CACA,+BAA+B,CAE/B;AACF,IAEE,MAAQ,EACV,MAAM,GACN,mBACE,CAAC,OACI;CACL,MAAM;CACN,gBAAgB,QAAQ,QAAQ;EAC9B,MAAM;EACN,GAAG,KAAU,QAAQ,EAAE,MAAM,EAAO;EACpC,GAAG,KAAe,QAAQ,EAAE,eAAY;CAC1C,CAAC;CACD,MAAM,oBAAoB,EAAE,MAAM,KAAS,GAAS;EAClD,IAAM,IAAc,MAAMF,EAAe,EAAE,MAAM,EAAM,CAAC;EACxD,IAAI,CAAC,EAAY,SACf,MAAM,IAAI,EAAuB;GAC/B,SAAS;GACT,OAAO,EAAY;GACnB,MAAM;GACN,UAAU,EAAQ;GAClB,OAAO,EAAQ;GACf,cAAc,EAAQ;EACxB,CAAC;EAEH,OAAO,EAAY;CACrB;CACA,MAAM,mBAAmB,EAAE,MAAM,KAAS;EACxC,IAAM,IAAS,MAAM,GAAiB,CAAK;EAC3C,QAAQ,EAAO,OAAf;GACE,KAAK;GACL,KAAK,mBACH;GAEF,KAAK;GACL,KAAK,oBACH,OAAO,EAAO,UAAU,KAAK,IAAI,KAAK,IAAI,EAAE,SAAS,EAAO,MAAM;EAEtE;CACF;CACA,+BAA+B,CAE/B;AACF;AA4qCY,IAAI,YAAY,GA6Bf,IAAI,YAAY,GA+KN,EAAkB;CACzC,QAAQ;CACR,MAAM;AACR,CAAC,GAC4B,EAAkB;CAC7C,QAAQ;CACR,MAAM;AACR,CAAC,GAylC4C;AAyF7C,IAAI,KAAqB,EAAE,OACzB,EAAE,OAAO,GACT,EAAgB,SAAS,CAC3B,GACI,KAAuB,SACnB,GACJ,EAAE,MAAM;CACN,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,YAAY;EAC5B,IAAI,EAAE,OAAO;EACb,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,YAAY;EAC5B,IAAI,EAAE,OAAO;EACb,OAAO,EAAE,OAAO;EAChB,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,UAAU;EAC1B,IAAI,EAAE,OAAO;EACb,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,OAAO;EACvB,WAAW,EAAE,OAAO;CACtB,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,kBAAkB;EAClC,YAAY,EAAE,OAAO;EACrB,UAAU,EAAE,OAAO;EACnB,kBAAkB,EAAE,QAAQ,CAAC,CAAC,SAAS;EACvC,kBAAkB,EAAuB,SAAS;EAClD,cAAc,GAAmB,SAAS;EAC1C,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS;EAC9B,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,kBAAkB;EAClC,YAAY,EAAE,OAAO;EACrB,gBAAgB,EAAE,OAAO;CAC3B,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,sBAAsB;EACtC,YAAY,EAAE,OAAO;EACrB,UAAU,EAAE,OAAO;EACnB,OAAO,EAAE,QAAQ;EACjB,kBAAkB,EAAE,QAAQ,CAAC,CAAC,SAAS;EACvC,kBAAkB,EAAuB,SAAS;EAClD,cAAc,GAAmB,SAAS;EAC1C,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS;EAC9B,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,kBAAkB;EAClC,YAAY,EAAE,OAAO;EACrB,UAAU,EAAE,OAAO;EACnB,OAAO,EAAE,QAAQ;EACjB,kBAAkB,EAAE,QAAQ,CAAC,CAAC,SAAS;EACvC,kBAAkB,EAAuB,SAAS;EAClD,cAAc,GAAmB,SAAS;EAC1C,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS;EAC9B,WAAW,EAAE,OAAO;EACpB,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;CAC7B,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,uBAAuB;EACvC,YAAY,EAAE,OAAO;EACrB,YAAY,EAAE,OAAO;EACrB,oBAAoB,EAAE,QAAQ,CAAC,CAAC,SAAS;EACzC,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;EAC5B,aAAa,EAAE,QAAQ,CAAC,CAAC,SAAS;EAClC,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;CACjC,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,wBAAwB;EACxC,YAAY,EAAE,OAAO;EACrB,UAAU,EAAE,QAAQ;EACpB,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;EAC5B,kBAAkB,EAAE,QAAQ,CAAC,CAAC,SAAS;EACvC,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,uBAAuB;EACvC,YAAY,EAAE,OAAO;EACrB,QAAQ,EAAE,QAAQ;EAClB,kBAAkB,EAAE,QAAQ,CAAC,CAAC,SAAS;EACvC,kBAAkB,EAAuB,SAAS;EAClD,cAAc,GAAmB,SAAS;EAC1C,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS;EAC9B,aAAa,EAAE,QAAQ,CAAC,CAAC,SAAS;CACpC,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,mBAAmB;EACnC,YAAY,EAAE,OAAO;EACrB,WAAW,EAAE,OAAO;EACpB,kBAAkB,EAAE,QAAQ,CAAC,CAAC,SAAS;EACvC,kBAAkB,EAAuB,SAAS;EAClD,cAAc,GAAmB,SAAS;EAC1C,SAAS,EAAE,QAAQ,CAAC,CAAC,SAAS;CAChC,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,oBAAoB;EACpC,YAAY,EAAE,OAAO;CACvB,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,iBAAiB;EACjC,IAAI,EAAE,OAAO;EACb,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,iBAAiB;EACjC,IAAI,EAAE,OAAO;EACb,OAAO,EAAE,OAAO;EAChB,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,eAAe;EAC/B,IAAI,EAAE,OAAO;EACb,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,QAAQ;EACxB,MAAM,EAAE,OAAO,CAAC,CAAC,WAAW,MAAU,CAAK;EAC3C,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,YAAY;EAC5B,UAAU,EAAE,OAAO;EACnB,KAAK,EAAE,OAAO;EACd,OAAO,EAAE,OAAO,CAAC,CAAC,SAAS;EAC3B,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,iBAAiB;EACjC,UAAU,EAAE,OAAO;EACnB,WAAW,EAAE,OAAO;EACpB,OAAO,EAAE,OAAO;EAChB,UAAU,EAAE,OAAO,CAAC,CAAC,SAAS;EAC9B,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,MAAM;EACtB,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,OAAO;EACpB,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,gBAAgB;EAChC,KAAK,EAAE,OAAO;EACd,WAAW,EAAE,OAAO;EACpB,kBAAkB,EAAuB,SAAS;CACpD,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QACL,MAAU,OAAO,KAAU,YAAY,EAAM,WAAW,OAAO,GAChE,EAAE,SAAS,iCAA+B,CAC5C;EACA,IAAI,EAAE,OAAO,CAAC,CAAC,SAAS;EACxB,MAAM,EAAE,QAAQ;EAChB,WAAW,EAAE,QAAQ,CAAC,CAAC,SAAS;CAClC,CAAC;CACD,EAAE,YAAY,EACZ,MAAM,EAAE,QAAQ,YAAY,EAC9B,CAAC;CACD,EAAE,YAAY,EACZ,MAAM,EAAE,QAAQ,aAAa,EAC/B,CAAC;CACD,EAAE,YAAY,EACZ,MAAM,EAAE,QAAQ,YAAY,EAC9B,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,OAAO;EACvB,WAAW,EAAE,OAAO,CAAC,CAAC,SAAS;EAC/B,iBAAiB,EAAE,QAAQ,CAAC,CAAC,SAAS;CACxC,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,QAAQ;EACxB,cAAc,EAAE,KAAK;GACnB;GACA;GACA;GACA;GACA;GACA;EACF,CAAC,CAAC,CAAC,SAAS;EACZ,iBAAiB,EAAE,QAAQ,CAAC,CAAC,SAAS;CACxC,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,OAAO;EACvB,QAAQ,EAAE,OAAO,CAAC,CAAC,SAAS;CAC9B,CAAC;CACD,EAAE,YAAY;EACZ,MAAM,EAAE,QAAQ,kBAAkB;EAClC,iBAAiB,EAAE,QAAQ;CAC7B,CAAC;AACH,CAAC,CACH,CACF;AACA,SAAS,GAAqB,GAAO;CACnC,OAAO,EAAM,KAAK,WAAW,OAAO;AACtC;AAGA,SAAS,KAAc;CACrB,OAAuB,uBAAO,OAAO,IAAI;AAC3C;AAqBA,SAAS,GAAmB,GAAM;CAChC,OAAO,EAAK,KAAK,WAAW,OAAO;AACrC;AACA,SAAS,GAAoB,GAAM;CACjC,OAAO,EAAK,SAAS;AACvB;AACA,SAAS,EAAa,GAAM;CAC1B,OAAO,GAAmB,CAAI,KAAK,GAAoB,CAAI;AAC7D;AACA,SAAS,GAAkB,GAAM;CAC/B,OAAO,EAAK,KAAK,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,GAAG;AAC/C;AAOA,SAAS,GAA8B,EACrC,gBACA,gBACC;CACD,OAAO;EACL,SAAU,GAA2C,SAAU,cAAc,IAAc;GACzF,IAAI;GACJ,UAAU,KAAK;GACf,MAAM;GACN,OAAO,CAAC;EACV;EACA,iBAAiB,GAAY;EAC7B,sBAAsB,GAAY;EAClC,kBAAkB,GAAY;CAChC;AACF;AACA,SAAS,GAAuB,EAC9B,WACA,0BACA,oBACA,wBACA,YACA,eACA,aACC;CACD,OAAO,EAAO,YACZ,IAAI,gBAAgB,EAClB,MAAM,UAAU,GAAO,GAAY;EACjC,MAAM,EAAoB,OAAO,EAAE,UAAO,eAAY;GAEpD,SAAS,IAAsB;IAC7B,IAAM,IAAQ,EAAM,QAAQ,OACxB,IAAwB,EAAM,SAAS;IAC3C,OAAO,KAAyB,KAAK,EAAM,EAAsB,CAAC,SAAS,eACzE;IAEF,OAAO,EAAM,MAAM,IAAwB,CAAC;GAC9C;GACA,SAAS,IAAgC;IACvC,OAAO,EAAoB,CAAC,CAAC,OAAO,CAAY;GAClD;GACA,SAAS,EAAkB,GAAY;IAErC,IAAI,IADoB,EACW,CAAC,CAAC,MAClC,MAAe,EAAW,eAAe,CAC5C;IACA,IAAI,KAAkB,MAAM;KAC1B,IAAM,IAAQ,EAAM,QAAQ;KAC5B,KAAK,IAAI,IAAI,EAAM,SAAS,GAAG,KAAK,GAAG,KAAK;MAC1C,IAAM,IAAO,EAAM;MACnB,IAAI,EAAa,CAAI,KAAK,EAAK,eAAe,GAAY;OACxD,IAAiB;OACjB;MACF;KACF;IACF;IACA,IAAI,KAAkB,MACpB,MAAM,IAAI,EAAqB;KAC7B,WAAW;KACX,SAAS;KACT,SAAS,8CAA8C,EAAW;IACpE,CAAC;IAEH,OAAO;GACT;GACA,SAAS,EAA8B,GAAY;IAEjD,IAAM,IADkB,EAAM,QAAQ,MAAM,OAAO,CACd,CAAC,CAAC,MACpC,MAEiB,EAAW,UAAkC,OAAQ,CAEzE;IACA,IAAI,KAAkB,MACpB,MAAM,IAAI,EAAqB;KAC7B,WAAW;KACX,SAAS;KACT,SAAS,6CAA6C,EAAW;IACnE,CAAC;IAEH,OAAO;GACT;GACA,SAAS,EAAe,GAAS,GAAc;IAE7C,IAAM,IAAO,KAAsC,EAAoB,CAAC,CAAC,MACtE,MAAU,GAAmB,CAAK,KAAK,EAAM,eAAe,EAAQ,UACvE,GACM,IAAa,GACb,IAAU;IAChB,IAAI,KAAQ,MAAM;KAahB,AAZA,EAAK,QAAQ,EAAQ,OACrB,EAAQ,QAAQ,EAAW,OAC3B,EAAQ,SAAS,EAAW,QAC5B,EAAQ,YAAY,EAAW,WAC/B,EAAQ,WAAW,EAAW,UAC9B,EAAQ,cAAc,EAAW,aAC7B,EAAQ,UAAU,KAAK,MACzB,EAAQ,QAAQ,EAAQ,QAEtB,EAAQ,iBAAiB,KAAK,MAChC,EAAQ,eAAe,EAAQ,eAEjC,EAAQ,mBAA2B,EAAW,oBAAmC,EAAK;KACtF,IAAM,IAAmB,EAAW;KACpC,IAAI,KAAoB,MAAM;MAC5B,IAAI,EAAQ,UAAU,sBAAsB,EAAQ,UAAU,gBAAgB;OAC5E,IAAM,IAAa;OACnB,EAAW,yBAAyB;MACtC,OACE,EAAK,uBAAuB;KAEhC;IACF,OACE,EAAM,QAAQ,MAAM,KAAK;KACvB,MAAM,QAAQ,EAAQ;KACtB,YAAY,EAAQ;KACpB,OAAO,EAAQ;KACf,OAAO,EAAQ;KACf,GAAG,EAAQ,iBAAiB,KAAK,IAA6C,CAAC,IAA1C,EAAE,cAAc,EAAQ,aAAa;KAC1E,OAAO,EAAW;KAClB,QAAQ,EAAW;KACnB,UAAU,EAAW;KACrB,WAAW,EAAW;KACtB,kBAAkB,EAAW;KAC7B,aAAa,EAAW;KACxB,GAAG,EAAW,oBAAoB,SAAS,EAAQ,UAAU,sBAAsB,EAAQ,UAAU,kBAAkB,EAAE,wBAAwB,EAAW,iBAAiB,IAAI,CAAC;KAClL,GAAG,EAAW,oBAAoB,QAAU,EAAQ,UAAU,sBAAsB,EAAQ,UAAU,iBAAkB,EAAE,sBAAsB,EAAW,iBAAiB,IAAI,CAAC;IACnL,CAAC;GAEL;GACA,SAAS,EAAsB,GAAS,GAAc;IAEpD,IAAM,IAAO,KAAsC,EAAoB,CAAC,CAAC,MACtE,MAAU,EAAM,SAAS,kBAAkB,EAAM,eAAe,EAAQ,UAC3E,GACM,IAAa,GACb,IAAU;IAChB,IAAI,KAAQ,MAAM;KAchB,AAbA,EAAK,QAAQ,EAAQ,OACrB,EAAQ,WAAW,EAAQ,UAC3B,EAAQ,QAAQ,EAAW,OAC3B,EAAQ,SAAS,EAAW,QAC5B,EAAQ,YAAY,EAAW,WAC/B,EAAQ,WAAmB,EAAW,YAA2B,EAAQ,UACzE,EAAQ,cAAc,EAAW,aAC7B,EAAQ,UAAU,KAAK,MACzB,EAAQ,QAAQ,EAAQ,QAEtB,EAAQ,iBAAiB,KAAK,MAChC,EAAQ,eAAe,EAAQ,eAEjC,EAAQ,mBAA2B,EAAW,oBAAmC,EAAK;KACtF,IAAM,IAAmB,EAAW;KACpC,IAAI,KAAoB,MAAM;MAC5B,IAAI,EAAQ,UAAU,sBAAsB,EAAQ,UAAU,gBAAgB;OAC5E,IAAM,IAAa;OACnB,EAAW,yBAAyB;MACtC,OACE,EAAK,uBAAuB;KAEhC;IACF,OACE,EAAM,QAAQ,MAAM,KAAK;KACvB,MAAM;KACN,UAAU,EAAQ;KAClB,YAAY,EAAQ;KACpB,OAAO,EAAQ;KACf,OAAO,EAAW;KAClB,QAAQ,EAAW;KACnB,WAAW,EAAW;KACtB,aAAa,EAAW;KACxB,kBAAkB,EAAW;KAC7B,OAAO,EAAQ;KACf,GAAG,EAAQ,iBAAiB,KAAK,IAA6C,CAAC,IAA1C,EAAE,cAAc,EAAQ,aAAa;KAC1E,GAAG,EAAW,oBAAoB,SAAS,EAAQ,UAAU,sBAAsB,EAAQ,UAAU,kBAAkB,EAAE,wBAAwB,EAAW,iBAAiB,IAAI,CAAC;KAClL,GAAG,EAAW,oBAAoB,QAAU,EAAQ,UAAU,sBAAsB,EAAQ,UAAU,iBAAkB,EAAE,sBAAsB,EAAW,iBAAiB,IAAI,CAAC;IACnL,CAAC;GAEL;GACA,eAAe,EAAsB,GAAU;IAC7C,IAAI,KAAY,MAAM;KACpB,IAAM,IAAiB,EAAM,QAAQ,YAAY,OAAwD,IAAjD,GAAa,EAAM,QAAQ,UAAU,CAAQ;KAWrG,AAVI,KAAyB,QAC3B,MAAMG,GAAe;MACnB,OAAO;MACP,QAAQ;MACR,SAAS;OACP,OAAO;OACP,UAAU,EAAM,QAAQ;MAC1B;KACF,CAAC,GAEH,EAAM,QAAQ,WAAW;IAC3B;GACF;GACA,QAAQ,EAAM,MAAd;IACE,KAAK,cAAc;KACjB,IAAM,IAAW;MACf,MAAM;MACN,MAAM;MACN,kBAAkB,EAAM;MACxB,OAAO;KACT;KAGA,AAFA,EAAM,gBAAgB,EAAM,MAAM,GAClC,EAAM,QAAQ,MAAM,KAAK,CAAQ,GACjC,EAAM;KACN;IACF;IACA,KAAK,cAAc;KACjB,IAAM,IAAW,EAAM,gBAAgB,EAAM;KAC7C,IAAI,KAAY,MACd,MAAM,IAAI,EAAqB;MAC7B,WAAW;MACX,SAAS,EAAM;MACf,SAAS,sDAAsD,EAAM,GAAG;KAC1E,CAAC;KAIH,AAFA,EAAS,QAAQ,EAAM,OACvB,EAAS,mBAA2B,EAAM,oBAAmC,EAAS,kBACtF,EAAM;KACN;IACF;IACA,KAAK,YAAY;KACf,IAAM,IAAW,EAAM,gBAAgB,EAAM;KAC7C,IAAI,KAAY,MACd,MAAM,IAAI,EAAqB;MAC7B,WAAW;MACX,SAAS,EAAM;MACf,SAAS,oDAAoD,EAAM,GAAG;KACxE,CAAC;KAKH,AAHA,EAAS,QAAQ,QACjB,EAAS,mBAA2B,EAAM,oBAAmC,EAAS,kBACtF,OAAO,EAAM,gBAAgB,EAAM,KACnC,EAAM;KACN;IACF;IACA,KAAK,UAAU;KACb,IAAM,IAAa;MACjB,MAAM;MACN,MAAM,EAAM;MACZ,kBAAkB,EAAM;KAC1B;KAEA,AADA,EAAM,QAAQ,MAAM,KAAK,CAAU,GACnC,EAAM;KACN;IACF;IACA,KAAK,mBAAmB;KACtB,IAAM,IAAgB;MACpB,MAAM;MACN,IAAI,EAAM;MACV,MAAM;MACN,kBAAkB,EAAM;MACxB,OAAO;KACT;KAGA,AAFA,EAAM,qBAAqB,EAAM,MAAM,GACvC,EAAM,QAAQ,MAAM,KAAK,CAAa,GACtC,EAAM;KACN;IACF;IACA,KAAK,mBAAmB;KACtB,IAAM,IAAgB,EAAM,qBAAqB,EAAM;KACvD,IAAI,KAAiB,MACnB,MAAM,IAAI,EAAqB;MAC7B,WAAW;MACX,SAAS,EAAM;MACf,SAAS,gEAAgE,EAAM,GAAG;KACpF,CAAC;KAIH,AAFA,EAAc,QAAQ,EAAM,OAC5B,EAAc,mBAAyB,EAAM,oBAAiC,EAAc,kBAC5F,EAAM;KACN;IACF;IACA,KAAK,iBAAiB;KACpB,IAAM,IAAgB,EAAM,qBAAqB,EAAM;KACvD,IAAI,KAAiB,MACnB,MAAM,IAAI,EAAqB;MAC7B,WAAW;MACX,SAAS,EAAM;MACf,SAAS,8DAA8D,EAAM,GAAG;KAClF,CAAC;KAKH,AAHA,EAAc,mBAAyB,EAAM,oBAAiC,EAAc,kBAC5F,EAAc,QAAQ,QACtB,OAAO,EAAM,qBAAqB,EAAM,KACxC,EAAM;KACN;IACF;IACA,KAAK;IACL,KAAK;KAOH,AANA,EAAM,QAAQ,MAAM,KAAK;MACvB,MAAM,EAAM;MACZ,WAAW,EAAM;MACjB,KAAK,EAAM;MACX,GAAG,EAAM,oBAAoB,OAAsD,CAAC,IAAhD,EAAE,kBAAkB,EAAM,iBAAiB;KACjF,CAAC,GACD,EAAM;KACN;IAEF,KAAK;KAQH,AAPA,EAAM,QAAQ,MAAM,KAAK;MACvB,MAAM;MACN,UAAU,EAAM;MAChB,KAAK,EAAM;MACX,OAAO,EAAM;MACb,kBAAkB,EAAM;KAC1B,CAAC,GACD,EAAM;KACN;IAEF,KAAK;KASH,AARA,EAAM,QAAQ,MAAM,KAAK;MACvB,MAAM;MACN,UAAU,EAAM;MAChB,WAAW,EAAM;MACjB,OAAO,EAAM;MACb,UAAU,EAAM;MAChB,kBAAkB,EAAM;KAC1B,CAAC,GACD,EAAM;KACN;IAEF,KAAK,oBAAoB;KACvB,IAAM,IAAkB,EAAoB,CAAC,CAAC,OAAO,EAAkB;KAgCvE,AA/BA,EAAM,iBAAiB,EAAM,cAAc;MACzC,MAAM;MACN,UAAU,EAAM;MAChB,OAAO,EAAgB;MACvB,SAAS,EAAM;MACf,OAAO,EAAM;MACb,cAAc,EAAM;KACtB,GACI,EAAM,UACR,EAAsB;MACpB,YAAY,EAAM;MAClB,UAAU,EAAM;MAChB,OAAO;MACP,OAAO,KAAK;MACZ,kBAAkB,EAAM;MACxB,OAAO,EAAM;MACb,cAAc,EAAM;MACpB,kBAAkB,EAAM;KAC1B,CAAC,IAED,EAAe;MACb,YAAY,EAAM;MAClB,UAAU,EAAM;MAChB,OAAO;MACP,OAAO,KAAK;MACZ,kBAAkB,EAAM;MACxB,OAAO,EAAM;MACb,cAAc,EAAM;MACpB,kBAAkB,EAAM;KAC1B,CAAC,GAEH,EAAM;KACN;IACF;IACA,KAAK,oBAAoB;KACvB,IAAM,IAAkB,EAAM,iBAAiB,EAAM;KACrD,IAAI,KAAmB,MACrB,MAAM,IAAI,EAAqB;MAC7B,WAAW;MACX,SAAS,EAAM;MACf,SAAS,4DAA4D,EAAM,WAAW;KACxF,CAAC;KAEH,EAAgB,QAAQ,EAAM;KAC9B,IAAM,EAAE,OAAO,MAAgB,MAAM,GACnC,EAAgB,IAClB;KAoBA,AAnBI,EAAgB,UAClB,EAAsB;MACpB,YAAY,EAAM;MAClB,UAAU,EAAgB;MAC1B,OAAO;MACP,OAAO;MACP,OAAO,EAAgB;MACvB,cAAc,EAAgB;KAChC,CAAC,IAED,EAAe;MACb,YAAY,EAAM;MAClB,UAAU,EAAgB;MAC1B,OAAO;MACP,OAAO;MACP,OAAO,EAAgB;MACvB,cAAc,EAAgB;KAChC,CAAC,GAEH,EAAM;KACN;IACF;IACA,KAAK;KAyBH,AAxBI,EAAM,UACR,EAAsB;MACpB,YAAY,EAAM;MAClB,UAAU,EAAM;MAChB,OAAO;MACP,OAAO,EAAM;MACb,kBAAkB,EAAM;MACxB,kBAAkB,EAAM;MACxB,OAAO,EAAM;MACb,cAAc,EAAM;KACtB,CAAC,IAED,EAAe;MACb,YAAY,EAAM;MAClB,UAAU,EAAM;MAChB,OAAO;MACP,OAAO,EAAM;MACb,kBAAkB,EAAM;MACxB,kBAAkB,EAAM;MACxB,OAAO,EAAM;MACb,cAAc,EAAM;KACtB,CAAC,GAEH,EAAM,GACF,KAAc,CAAC,EAAM,oBACvB,MAAM,EAAW,EACf,UAAU,EACZ,CAAC;KAEH;IAEF,KAAK,oBAAoB;KACvB,IAAM,IAAe,EAAoB,CAAC,CAAC,OAAO,CAAY,CAAC,CAAC,MAAM,MAAM,EAAE,eAAe,EAAM,UAAU;KA0B7G,CAzBkB,KAAgB,OAAgD,EAAM,UAA/C,EAAa,SAAS,kBAE7D,EAAsB;MACpB,YAAY,EAAM;MAClB,UAAU,EAAM;MAChB,OAAO;MACP,OAAO,EAAM;MACb,WAAW,EAAM;MACjB,kBAAkB,EAAM;MACxB,kBAAkB,EAAM;MACxB,cAAc,EAAM;KACtB,CAAC,IAED,EAAe;MACb,YAAY,EAAM;MAClB,UAAU,EAAM;MAChB,OAAO;MACP,OAAO,KAAK;MACZ,UAAU,EAAM;MAChB,WAAW,EAAM;MACjB,kBAAkB,EAAM;MACxB,kBAAkB,EAAM;MACxB,cAAc,EAAM;KACtB,CAAC,GAEH,EAAM;KACN;IACF;IACA,KAAK,yBAAyB;KAC5B,IAAM,IAAiB,EAAkB,EAAM,UAAU;KASzD,AARA,EAAe,QAAQ,sBACvB,EAAe,WAAW;MACxB,IAAI,EAAM;MACV,GAAG,EAAM,sBAAsB,OAAkD,CAAC,IAA5C,EAAE,YAAY,EAAM,mBAAmB;MAC7E,GAAG,EAAM,UAAU,OAAyC,CAAC,IAAnC,EAAE,eAAe,EAAM,OAAO;MACxD,GAAG,EAAM,gBAAgB,KAAO,EAAE,aAAa,GAAK,IAAI,CAAC;MACzD,GAAG,EAAM,aAAa,OAAwC,CAAC,IAAlC,EAAE,WAAW,EAAM,UAAU;KAC5D,GACA,EAAM;KACN;IACF;IACA,KAAK,0BAA0B;KAC7B,IAAM,IAAiB,EACrB,EAAM,UACR,GACM,IAAW,EAAe,YAAY,OAAO,EAAE,IAAI,EAAM,WAAW,IAAI,EAAe;KAc7F,AAbA,EAAe,QAAQ,sBACvB,EAAe,WAAW;MACxB,GAAG;MACH,IAAI,EAAM;MACV,UAAU,EAAM;MAChB,GAAG,EAAM,UAAU,OAAkC,CAAC,IAA5B,EAAE,QAAQ,EAAM,OAAO;KACnD,GACI,EAAM,oBAAoB,SAC5B,EAAe,mBAAmB,EAAM,mBAEtC,EAAM,oBAAoB,SAC5B,EAAe,uBAAuB,EAAM,mBAE9C,EAAM;KACN;IACF;IACA,KAAK,sBAAsB;KACzB,IAAM,IAAiB,EAAkB,EAAM,UAAU;KAEzD,AADA,EAAe,QAAQ,iBACvB,EAAM;KACN;IACF;IACA,KAAK,yBAAyB;KAC5B,IAAM,IAAiB,EAAkB,EAAM,UAAU;KAkCzD,AAjCI,EAAe,SAAS,iBAC1B,EACE;MACE,YAAY,EAAM;MAClB,UAAU,EAAe;MACzB,OAAO;MACP,OAAO,EAAe;MACtB,QAAQ,EAAM;MACd,aAAa,EAAM;MACnB,kBAAkB,EAAM;MACxB,kBAAkB,EAAM;MACxB,OAAO,EAAe;MACtB,cAAc,EAAe;KAC/B,GACA,CACF,IAEA,EACE;MACE,YAAY,EAAM;MAClB,UAAU,GAAkB,CAAc;MAC1C,OAAO;MACP,OAAO,EAAe;MACtB,QAAQ,EAAM;MACd,kBAAkB,EAAM;MACxB,aAAa,EAAM;MACnB,kBAAkB,EAAM;MACxB,OAAO,EAAe;MACtB,cAAc,EAAe;KAC/B,GACA,CACF,GAEF,EAAM;KACN;IACF;IACA,KAAK,qBAAqB;KACxB,IAAM,IAAiB,EAAkB,EAAM,UAAU;KAiCzD,AAhCI,EAAe,SAAS,iBAC1B,EACE;MACE,YAAY,EAAM;MAClB,UAAU,EAAe;MACzB,OAAO;MACP,OAAO,EAAe;MACtB,WAAW,EAAM;MACjB,kBAAkB,EAAM;MACxB,kBAAkB,EAAM;MACxB,OAAO,EAAe;MACtB,cAAc,EAAe;KAC/B,GACA,CACF,IAEA,EACE;MACE,YAAY,EAAM;MAClB,UAAU,GAAkB,CAAc;MAC1C,OAAO;MACP,OAAO,EAAe;MACtB,UAAU,EAAe;MACzB,WAAW,EAAM;MACjB,kBAAkB,EAAM;MACxB,kBAAkB,EAAM;MACxB,OAAO,EAAe;MACtB,cAAc,EAAe;KAC/B,GACA,CACF,GAEF,EAAM;KACN;IACF;IACA,KAAK;KACH,EAAM,QAAQ,MAAM,KAAK,EAAE,MAAM,aAAa,CAAC;KAC/C;IAEF,KAAK,eACH;IAEF,KAAK,cAAc;KACjB,IAAM,IAAmB,EAAoB;KAI7C,AAHA,EAAM,kBAAkB,GAAY,GACpC,EAAM,uBAAuB,GAAY,GACzC,EAAM,mBAAmB,GAAY,GACjC,EAAiB,SAAS,MAC5B,EAAM,QAAQ,MAAM,OAClB,EAAM,QAAQ,MAAM,SAAS,EAAiB,QAC9C,EAAiB,MACnB,GACA,EAAM;KAER;IACF;IACA,KAAK;KAKH,AAJI,EAAM,aAAa,SACrB,EAAM,QAAQ,KAAK,EAAM,YAE3B,MAAM,EAAsB,EAAM,eAAe,IAC7C,EAAM,aAAa,QAAQ,EAAM,mBAAmB,SACtD,EAAM,EAAE,cAAc,GAAM,CAAC;KAE/B;IAEF,KAAK;KAKH,AAJI,EAAM,gBAAgB,SACxB,EAAM,eAAe,EAAM,eAE7B,MAAM,EAAsB,EAAM,eAAe,GAC7C,EAAM,mBAAmB,QAC3B,EAAM;KAER;IAEF,KAAK;KAEH,AADA,MAAM,EAAsB,EAAM,eAAe,GAC7C,EAAM,mBAAmB,QAC3B,EAAM;KAER;IAEF,KAAK;KACH,IAAuC,MAAM,EAAM,SAAS,CAAC;KAC7D;IAEF,SACE,IAAI,GAAqB,CAAK,GAAG;KAC/B,IAAK,IAAmD,EAAM,SAAU,MAAM;MAC5E,IAAM,IAAU,EAAM,QAAQ,MAAM,WACjC,MAAM,QAAQ,KAAK,UAAU,KAAK,EAAE,OAAO,EAAM,MAAM,EAAE,SAAS,EAAM,IAC3E,GACM,IAAgB,KAAW,IAAI,IAAU,EAAM,QAAQ,MAAM;MACnE,MAAMA,GAAe;OACnB,OAAO,EAAM;OACb,QAAQ,EAAgB,EAAM;OAC9B,SAAS;QACP,OAAO,iBAAiB,EAAc;QACtC,YAAY,EAAM;QAClB,UAAU,EAAM;OAClB;MACF,CAAC;KACH;KACA,IAAM,IAAY;KAClB,IAAI,EAAU,WAAW;MACvB,IAAiC,CAAS;MAC1C;KACF;KACA,IAAM,IAAiB,EAAU,MAAM,OAEnC,KAAK,IAFqC,EAAM,QAAQ,MAAM,MAC/D,MAAa,EAAU,SAAS,EAAS,QAAQ,EAAU,OAAO,EAAS,EAC9E;KAOA,AANI,KAAkB,OAGpB,EAAM,QAAQ,MAAM,KAAK,CAAS,IAFlC,EAAe,OAAO,EAAU,MAIlC,IAAiC,CAAS,GAC1C,EAAM;IACR;GAEJ;GACA,EAAW,QAAQ,CAAK;EAC1B,CAAC;CACH,EACF,CAAC,CACH;AACF;AAokBA,eAAe,GAAc,EAC3B,WACA,YACA,kBACC;CACD,IAAM,IAAS,EAAO,UAAU,GAC1B,UAAsB;EAC1B,EAAO,OAAO,CAAC,CAAC,YAAY,CAC5B,CAAC;CACH;CACA,AAAI,GAA2C,UAC7C,EAAc,IAEd,GAA2C,iBAAiB,SAAS,GAAe,EAAE,MAAM,GAAK,CAAC;CAEpG,IAAI;EACF,SAAa;GACX,IAAM,EAAE,YAAS,MAAM,EAAO,KAAK;GACnC,IAAI,GAAM;EACZ;CACF,SAAS,GAAO;EACd,IAAmC,CAAK;CAC1C,UAAU;EAER,AADA,GAA2C,oBAAoB,SAAS,CAAa,GACrF,EAAO,YAAY;CACrB;AACF;AA8a0BC,EAAmB;CAC3C,QAAQ;CACR,MAAM;AACR,CAAC,GAC6BA,EAAmB;CAC/C,QAAQ;CACR,MAAM;AACR,CAAC,GAsdyBC,EAAmB;CAC3C,QAAQ;CACR,MAAM;AACR,CAAC,GAC6BA,EAAmB;CAC/C,QAAQ;CACR,MAAM;AACR,CAAC,GAw3EyB,EAAE,OAC1B,EAAE,OAAO,GACT,EAAgB,SAAS,CAC3B,GAC+B,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC,GA+4BhCG,EAAmB;CAC/C,QAAQ;CACR,MAAM;AACR,CAAC,GAuK6BC,EAAmB;CAC/C,QAAQ;CACR,MAAM;AACR,CAAC,GAgQiB,IAAI,YAAY,GAwyBRC,EAAmB;CAAE,QAAQ;CAAS,MAAM;AAAG,CAAC;AAoU1E,IAAI,KAAoB,MAAM;CAC5B,cAAc;EAEZ,AADA,KAAK,QAAQ,CAAC,GACd,KAAK,eAAe;CACtB;CACA,MAAM,eAAe;EACf,UAAK,cAIT;QADA,KAAK,eAAe,IACb,KAAK,MAAM,SAAS,IAEzB,AADA,MAAM,KAAK,MAAM,EAAE,CAAC,GACpB,KAAK,MAAM,MAAM;GAEnB,KAAK,eAAe;EADpB;CAEF;CACA,MAAM,IAAI,GAAK;EACb,OAAO,IAAI,SAAS,GAAU,MAAW;GASvC,AARA,KAAK,MAAM,KAAK,YAAY;IAC1B,IAAI;KAEF,AADA,MAAM,EAAI,GACV,EAAS;IACX,SAAS,GAAO;KACd,EAAO,CAAK;IACd;GACF,CAAC,GACD,KAAU,aAAa;EACzB,CAAC;CACH;AACF;AA0B0BC,EAAmB;CAAE,QAAQ;CAAS,MAAM;AAAG,CAAC,GA0zG5CG,EAAmB;CAC/C,QAAQ;CACR,MAAM;AACR,CAAC;AAk1BD,eAAe,GAA6B,GAAO;CACjD,IAAI,KAAS,MACX,OAAO,CAAC;CAEV,IAAI,CAAC,WAAW,YAAY,EAAE,aAAiB,WAAW,WACxD,MAAU,MAAM,sDAAsD;CAExE,OAAO,QAAQ,IACb,MAAM,KAAK,CAAK,CAAC,CAAC,IAAI,OAAO,MAAS;EACpC,IAAM,EAAE,MAAM,GAAQ,YAAS;EAU/B,OAAO;GACL,MAAM;GACN,WAAW;GACX,UAAU;GACV,KAAK,MAbe,IAAI,SAAS,GAAU,MAAW;IACtD,IAAM,IAAS,IAAI,WAAW;IAM9B,AALA,EAAO,UAAU,MAAgB;KAE/B,EAAiB,EAAY,QAAgC,MAAM;IACrE,GACA,EAAO,WAAW,MAAU,EAAO,CAAK,GACxC,EAAO,cAAc,CAAI;GAC3B,CAAC;EAMD;CACF,CAAC,CACH;AACF;AAUA,IAAI,KAAoB,MAAM;CAC5B,YAAY,EACV,SAAM,aACN,gBACA,YACA,SACA,OAAO,GACP,+BACA,sCACC;EAOD,AANA,KAAK,MAAM,GACX,KAAK,cAAc,GACnB,KAAK,UAAU,GACf,KAAK,OAAO,GACZ,KAAK,QAAQ,GACb,KAAK,6BAA6B,GAClC,KAAK,kCAAkC;CACzC;CACA,MAAM,aAAa,EACjB,gBACA,GAAG,KACF;EAED,IAAM,IAAe,MAAMC,EAAS,KAAK,IAAI,GACvC,IAAkB,MAAMA,EAAS,KAAK,OAAO,GAC7C,IAAsB,MAAMA,EAAS,KAAK,WAAW,GACrD,IAAc;GAClB,GAAG,EAAiB,CAAe;GACnC,GAAG,EAAiB,EAAQ,OAAO;EACrC,GACM,IAAkB,MAAe,KAAK,4BAAoD,KAAK,MAAM;GACzG,KAAK,KAAK;GACV,IAAI,EAAQ;GACZ,UAAU,EAAQ;GAClB,MAAM;IAAE,GAAG;IAAc,GAAG,EAAQ;GAAK;GACzC,SAAS;GACT,aAAa;GACb,iBAAiB,EAAQ;GACzB,SAAS,EAAQ;GACjB,WAAW,EAAQ;EACrB,CAAC,GACK,IAAc,GAAmD,OAAsB,KAAK,KAC5F,IAAW,GAAmD,YAAa,KAAK,IAAgD,IAA5C,EAAiB,EAAgB,OAAO,GAC5H,IAAQ,GAAmD,SAAU,KAAK,IAA2B;GACzG,GAAG;GACH,GAAG,EAAQ;GACX,IAAI,EAAQ;GACZ,UAAU,EAAQ;GAClB,SAAS,EAAQ;GACjB,WAAW,EAAQ;EACrB,IAPoF,EAAgB,MAQ9F,IAAoB,GAAmD,eAA4B,GAEnG,IAAW,OADI,KAAK,SAAsB,WAAW,MAAA,CAC7B,GAAK;GACjC,QAAQ;GACR,SAAS;IACP,gBAAgB;IAChB,GAAG;GACL;GACA,MAAM,KAAK,UAAU,CAAI;GACzB;GACA,QAAQ;EACV,CAAC;EACD,IAAI,CAAC,EAAS,IACZ,MAAU,MACF,MAAM,EAAS,KAAK,KAAkB,oCAC9C;EAEF,IAAI,CAAC,EAAS,MACZ,MAAU,MAAM,6BAA6B;EAE/C,OAAO,KAAK,sBAAsB,EAAS,IAAI;CACjD;CACA,MAAM,kBAAkB,GAAS;EAE/B,IAAM,IAAe,MAAMA,EAAS,KAAK,IAAI,GACvC,IAAkB,MAAMA,EAAS,KAAK,OAAO,GAC7C,IAAsB,MAAMA,EAAS,KAAK,WAAW,GACrD,IAAc;GAClB,GAAG,EAAiB,CAAe;GACnC,GAAG,EAAiB,EAAQ,OAAO;EACrC,GACM,IAAkB,MAAe,KAAK,iCAAyD,KAAK,MAAM;GAC9G,KAAK,KAAK;GACV,IAAI,EAAQ;GACZ,MAAM;IAAE,GAAG;IAAc,GAAG,EAAQ;GAAK;GACzC,SAAS;GACT,aAAa;GACb,iBAAiB,EAAQ;EAC3B,CAAC,GACK,IAAc,GAAmD,OAAsB,GAAG,KAAK,IAAI,GAAG,EAAQ,OAAO,UACrH,IAAW,GAAmD,YAAa,KAAK,IAAgD,IAA5C,EAAiB,EAAgB,OAAO,GAC5H,IAAoB,GAAmD,eAA4B,GAEnG,IAAW,OADI,KAAK,SAAsB,WAAW,MAAA,CAC7B,GAAK;GACjC,QAAQ;GACR;GACA;GACA,QAAQ,EAAQ;EAClB,CAAC;EACD,IAAI,EAAS,WAAW,KACtB,OAAO;EAET,IAAI,CAAC,EAAS,IACZ,MAAU,MACF,MAAM,EAAS,KAAK,KAAkB,oCAC9C;EAEF,IAAI,CAAC,EAAS,MACZ,MAAU,MAAM,6BAA6B;EAE/C,OAAO,KAAK,sBAAsB,EAAS,IAAI;CACjD;AACF,GAGI,KAAuB,cAAc,GAAkB;CACzD,YAAY,IAAU,CAAC,GAAG;EACxB,MAAM,CAAO;CACf;CACA,sBAAsB,GAAQ;EAC5B,OAAOC,GAAsB;GAC3B;GACA,QAAQ;EACV,CAAC,CAAC,CAAC,YACD,IAAI,gBAAgB,EAClB,MAAM,UAAU,GAAO,GAAY;GACjC,IAAI,CAAC,EAAM,SACT,MAAM,EAAM;GAEd,EAAW,QAAQ,EAAM,KAAK;EAChC,EACF,CAAC,CACH;CACF;AACF,GAGI,KAAe,MAAM;CACvB,YAAY,EACV,YAAY,IAAcC,GAC1B,QAAK,EAAY,GACjB,eAAY,IAAI,GAAqB,GACrC,0BACA,oBACA,UACA,YACA,eACA,aACA,WACA,4BACC;EAwMD,AAvMA,KAAK,6CAA6C,IAAI,IAAI,GAC1D,KAAK,iBAAiB,KAAK,GAC3B,KAAK,sBAAsB,KAAK,GAChC,KAAK,cAAc,IAAI,GAAkB,GAOzC,KAAK,cAAc,OAAO,GAAS,MAAY;GAE7C,IAAI,KAAW,MAAM;IACnB,MAAM,KAAK,YAAY;KACrB,SAAS;KACT,WAAmB,KAAK,aAAqC;KAC7D,GAAG;IACL,CAAC;IACD;GACF;GACA,IAAI;GACJ,IAAI,UAAU,KAAW,WAAW,GAAS;IAC3C,IAAM,IAAkB,IAAI,gBAAgB;IAC5C,KAAK,2BAA2B,IAAI,CAAe;IACnD,IAAI;IACJ,IAAI;KACF,IAAY,MAAM,QAAQ,EAAQ,KAAK,IAAI,EAAQ,QAAQ,MAAM,GAA6B,EAAQ,KAAK;IAC7G,UAAU;KACR,KAAK,2BAA2B,OAAO,CAAe;IACxD;IACA,IAAI,EAAgB,OAAO,SACzB;IAEF,IAAY,EACV,OAAO,CACL,GAAG,GACH,GAAG,UAAU,KAAW,EAAQ,QAAQ,OAAO,CAAC;KAAE,MAAM;KAAQ,MAAM,EAAQ;IAAK,CAAC,IAAI,CAAC,CAC3F,EACF;GACF,OACE,IAAY;GAEd,IAAI,EAAQ,aAAa,MAAM;IAC7B,IAAM,IAAe,KAAK,MAAM,SAAS,WACtC,MAAM,EAAE,OAAO,EAAQ,SAC1B;IACA,IAAI,MAAiB,IACnB,MAAU,MAAM,mBAAmB,EAAQ,UAAU,WAAW;IAElE,IAAI,KAAK,MAAM,SAAS,EAAa,CAAC,SAAS,QAC7C,MAAU,MACR,mBAAmB,EAAQ,UAAU,uBACvC;IAGF,AADA,KAAK,MAAM,WAAW,KAAK,MAAM,SAAS,MAAM,GAAG,IAAe,CAAC,GACnE,KAAK,MAAM,eAAe,GAAc;KACtC,GAAG;KACH,IAAI,EAAQ;KACZ,MAAc,EAAU,QAAuB;KAC/C,UAAU,EAAQ;IACpB,CAAC;GACH,OACE,KAAK,MAAM,YAAY;IACrB,GAAG;IACH,IAAU,EAAU,MAAmB,KAAK,WAAW;IACvD,MAAY,EAAU,QAAqB;IAC3C,UAAU,EAAQ;GACpB,CAAC;GAEH,MAAM,KAAK,YAAY;IACrB,SAAS;IACT,WAAW,EAAQ;IACnB,GAAG;GACL,CAAC;EACH,GAKA,KAAK,aAAa,OAAO,EACvB,cACA,GAAG,MACD,CAAC,MAAM;GACT,IAAM,IAAe,KAAa,OAAO,KAAK,MAAM,SAAS,SAAS,IAAI,KAAK,MAAM,SAAS,WAAW,MAAY,EAAQ,OAAO,CAAS;GAC7I,IAAI,MAAiB,IACnB,MAAU,MAAM,WAAW,EAAU,WAAW;GAOlD,AALA,KAAK,MAAM,WAAW,KAAK,MAAM,SAAS,MACxC,GAEA,KAAK,SAAS,EAAa,CAAC,SAAS,cAAc,IAAe,IAAe,CACnF,GACA,MAAM,KAAK,YAAY;IACrB,SAAS;IACT;IACA,GAAG;GACL,CAAC;EACH,GAIA,KAAK,eAAe,OAAO,IAAU,CAAC,MAAM;GAC1C,MAAM,KAAK,YAAY;IAAE,SAAS;IAAiB,GAAG;GAAQ,CAAC;EACjE,GAIA,KAAK,mBAAmB;GACtB,AAAI,KAAK,WAAW,YAClB,KAAK,MAAM,QAAQ,KAAK,GACxB,KAAK,UAAU,EAAE,QAAQ,QAAQ,CAAC;EAEtC,GACA,KAAK,0BAA0B,OAAO,EACpC,OACA,aACA,WACA,iBACI,KAAK,YAAY,IAAI,YAAY;GACrC,IAAM,IAAW,KAAK,MAAM,UACtB,IAAc,EAAS,EAAS,SAAS,IACzC,KAAc,MAAS,EAAa,CAAI,KAAK,EAAK,UAAU,wBAAwB,EAAK,SAAS,OAAO,IAAK;IAClH,GAAG;IACH,OAAO;IACP,UAAU;KAAE,GAAG,EAAK;KAAU;KAAI;KAAU;IAAO;GACrD,IAAI;GAQJ,AAPA,KAAK,MAAM,eAAe,EAAS,SAAS,GAAG;IAC7C,GAAG;IACH,OAAO,EAAY,MAAM,IAAI,CAAU;GACzC,CAAC,GACG,KAAK,mBACP,KAAK,eAAe,MAAM,QAAQ,QAAQ,KAAK,eAAe,MAAM,QAAQ,MAAM,IAAI,CAAU,IAE9F,KAAK,WAAW,eAAe,KAAK,WAAW,eAAe,KAAK,yBACrE,KAAK,wBAAwB,CAAC,CAAC,MAAM,MAAe;IAElD,AAAI,KACF,KAAK,YAAY;KACf,SAAS;KACT,WAAmB,KAAK,aAAqC;KAC7D,GAAG;IACL,CAAC;GAEL,CAAC;EAEL,CAAC,GACD,KAAK,gBAAgB,OAAO,EAC1B,WAAQ,oBACR,eACA,WACA,cACA,iBACI,KAAK,YAAY,IAAI,YAAY;GACrC,IAAM,IAAW,KAAK,MAAM,UACtB,IAAc,EAAS,EAAS,SAAS,IACzC,KAAc,MAAS,EAAa,CAAI,KAAK,EAAK,eAAe,IAAa;IAAE,GAAG;IAAM;IAAO;IAAQ;GAAU,IAAI;GAQ5H,AAPA,KAAK,MAAM,eAAe,EAAS,SAAS,GAAG;IAC7C,GAAG;IACH,OAAO,EAAY,MAAM,IAAI,CAAU;GACzC,CAAC,GACG,KAAK,mBACP,KAAK,eAAe,MAAM,QAAQ,QAAQ,KAAK,eAAe,MAAM,QAAQ,MAAM,IAAI,CAAU,IAE9F,KAAK,WAAW,eAAe,KAAK,WAAW,eAAe,KAAK,yBACrE,KAAK,wBAAwB,CAAC,CAAC,MAAM,MAAe;IAElD,AAAI,KACF,KAAK,YAAY;KACf,SAAS;KACT,WAAmB,KAAK,aAAqC;KAC7D,GAAG;IACL,CAAC;GAEL,CAAC;EAEL,CAAC,GAED,KAAK,gBAAgB,KAAK,eAI1B,KAAK,OAAO,YAAY;GACtB,IAAI,GAAM;GACV,KAAK,IAAM,KAAc,KAAK,4BAC5B,EAAW,MAAM;GAGnB,CADC,IAAO,KAAK,wBAAwB,QAAgB,EAAK,gBAAgB,MAAM,IAC/E,IAAO,KAAK,mBAAmB,QAAgB,EAAK,gBAAgB,MAAM;EAC7E,GACA,KAAK,KAAK,GACV,KAAK,YAAY,GACjB,KAAK,aAAa,GAClB,KAAK,wBAAwB,GAC7B,KAAK,kBAAkB,GACvB,KAAK,QAAQ,GACb,KAAK,UAAU,GACf,KAAK,aAAa,GAClB,KAAK,WAAW,GAChB,KAAK,SAAS,GACd,KAAK,wBAAwB;CAC/B;CASA,IAAI,SAAS;EACX,OAAO,KAAK,MAAM;CACpB;CACA,UAAU,EACR,WACA,YACC;EACG,KAAK,WAAW,MACpB,KAAK,MAAM,SAAS,GACpB,KAAK,MAAM,QAAQ;CACrB;CACA,IAAI,QAAQ;EACV,OAAO,KAAK,MAAM;CACpB;CACA,IAAI,WAAW;EACb,OAAO,KAAK,MAAM;CACpB;CACA,IAAI,cAAc;EAChB,OAAO,KAAK,MAAM,SAAS,KAAK,MAAM,SAAS,SAAS;CAC1D;CACA,IAAI,SAAS,GAAU;EACrB,KAAK,MAAM,WAAW;CACxB;CACA,MAAM,0BAA0B;EAC9B,IAAI,CAAC,KAAK,uBAAuB,OAAO;EACxC,IAAM,IAAS,KAAK,sBAAsB,EACxC,UAAU,KAAK,MAAM,SACvB,CAAC;EAID,OAHI,KAAU,OAAO,KAAW,YAAY,UAAU,IAC7C,MAAM,IAER;CACT;CACA,MAAM,YAAY,EAChB,YACA,aACA,YACA,SACA,gBACC;EACD,IAAI,GAAM;EACV,IAAM,IAAkB,IAAI,gBAAgB,GACtC,IAAsB,MAAY,kBAAkB,EAAE,mBAAgB,IAAI,KAAK;EACrF,AAAI,OACD,IAAO,KAAK,wBAAwB,QAAgB,EAAK,gBAAgB,MAAM,GAChF,KAAK,sBAAsB;EAE7B,IAAM,UAAyB,KAAuB,QAAQ,KAAK,wBAAwB,GACrF,UAAiC;GACrC,AAAI,KAAK,wBAAwB,MAC/B,KAAK,sBAAsB,KAAK;EAEpC,GACI;EACJ,IAAI,MAAY,iBACd,IAAI;GACF,IAAM,IAAY,MAAM,KAAK,UAAU,kBAAkB;IACvD,QAAQ,KAAK;IACb,aAAa,EAAgB;IAC7B;IACA;IACA;GACF,CAAC;GACD,IAAI,EAAgB,OAAO,WAAW,CAAC,EAAiB,GAAG;IAMzD,AALA,MAAO,GAAuC,OAAO,CAAC,CAAC,YAAY,CACnE,CAAC,GACG,EAAiB,KACnB,KAAK,UAAU,EAAE,QAAQ,QAAQ,CAAC,GAEpC,EAAyB;IACzB;GACF;GACA,IAAI,KAAa,MAAM;IAErB,AADA,KAAK,UAAU,EAAE,QAAQ,QAAQ,CAAC,GAClC,EAAyB;IACzB;GACF;GACA,IAAe;EACjB,SAAS,GAAK;GACZ,IAAI,EAAgB,OAAO,WAAW,EAAI,SAAS,cAAc;IAI/D,AAHI,EAAiB,KACnB,KAAK,UAAU,EAAE,QAAQ,QAAQ,CAAC,GAEpC,EAAyB;IACzB;GACF;GACA,IAAI,CAAC,EAAiB,GACpB;GAMF,AAJI,KAAK,WAAW,aAAe,SACjC,KAAK,QAAQ,CAAG,GAElB,KAAK,UAAU;IAAE,QAAQ;IAAS,OAAO;GAAI,CAAC,GAC9C,EAAyB;GACzB;EACF;EAEF,KAAK,UAAU;GAAE,QAAQ;GAAa,OAAO,KAAK;EAAE,CAAC;EACrD,IAAM,IAAc,KAAK,aACrB,IAAU,IACV,IAAe,IACf,IAAW,IACX;EACJ,IAAI;GACF,IAAM,IAAW;IACf,OAAO,GAA8B;KACnC,aAAa,MAAY,mBAAmB,MAAY,uBAAuB,KAAK,IAAI,KAAK,MAAM,SAAS,CAAW;KACvH,WAAW,KAAK,WAAW;IAC7B,CAAC;IACD;GACF;GAKA,AAJA,IAAiB,GACjB,EAAS,gBAAgB,OAAO,iBAAiB,eAAe;IAC9D,IAAU;GACZ,CAAC,GACD,KAAK,iBAAiB;GACtB,IAAI;GA6DJ,IA5DA,AAGE,IAHE,MAAY,kBACL,IAEA,MAAM,KAAK,UAAU,aAAa;IACzC,QAAQ,KAAK;IACb,UAAU,KAAK,MAAM;IACrB,aAAa,EAAS,gBAAgB;IACtC;IACA;IACA;IACA;IACA;GACF,CAAC,GA+BH,MAAM,GAAc;IAClB,QAAQ,GAAuB;KAC7B;KACA,YAAY,KAAK;KACjB,QAAQ,KAAK;KACb,uBAAuB,KAAK;KAC5B,iBAAiB,KAAK;KACtB,sBApCyB,MAE3B,KAAK,YAAY,UACX,EAAS,gBAAgB,OAAO,UAC3B,QAAQ,QAAQ,IAElB,EAAI;MACT,OAAO,EAAS;MAChB,QAAQ,EAAE,kBAAe,OAAS,CAAC,MAAM;OAEnC,EAAS,gBAAgB,OAAO,YAGhC,KACF,KAAK,UAAU,EAAE,QAAQ,YAAY,CAAC,GAEb,EAAS,MAAM,QAAQ,OAAgB,KAAK,aAAqC,KAE1G,KAAK,MAAM,eACT,KAAK,MAAM,SAAS,SAAS,GAC7B,EAAS,MAAM,OACjB,IAEA,KAAK,MAAM,YAAY,EAAS,MAAM,OAAO;MAEjD;KACF,CAAC,CACF;KAUC,UAAU,MAAU;MAClB,MAAM;KACR;IACF,CAAC;IACD,aAAa,EAAS,gBAAgB;IACtC,UAAU,MAAU;KAClB,MAAM;IACR;GACF,CAAC,GACG,GAIF,OAHI,EAAiB,KACnB,KAAK,UAAU,EAAE,QAAQ,QAAQ,CAAC,GAE7B;GAET,AAAI,EAAiB,KACnB,KAAK,UAAU,EAAE,QAAQ,QAAQ,CAAC;EAEtC,SAAS,GAAK;GACZ,IAAI,KAAW,EAAI,SAAS,cAK1B,OAJA,IAAU,IACN,EAAiB,KACnB,KAAK,UAAU,EAAE,QAAQ,QAAQ,CAAC,GAE7B;GAET,IAAI,CAAC,EAAiB,GACpB,OAAO;GAST,AAPA,IAAW,IACP,aAAe,cAAc,EAAI,QAAQ,YAAY,CAAC,CAAC,SAAS,OAAO,KAAK,EAAI,QAAQ,YAAY,CAAC,CAAC,SAAS,SAAS,OAC1H,IAAe,KAEb,KAAK,WAAW,aAAe,SACjC,KAAK,QAAQ,CAAG,GAElB,KAAK,UAAU;IAAE,QAAQ;IAAS,OAAO;GAAI,CAAC;EAChD,UAAU;GACR,IAAI;IACF,AAAI,OACD,IAAO,KAAK,aAAa,QAAgB,EAAK,KAAK,MAAM;KACxD,SAAS,EAAe,MAAM;KAC9B,UAAU,KAAK,MAAM;KACrB;KACA;KACA,SAAS;KACT,cAAc,EAAe,MAAM;IACrC,CAAC;GAEL,UAAU;IAIR,AAHI,KAAK,mBAAmB,MAC1B,KAAK,iBAAiB,KAAK,IAE7B,EAAyB;GAC3B;EACF;EACA,AAAI,CAAC,KAAY,MAAM,KAAK,wBAAwB,KAClD,MAAM,KAAK,YAAY;GACrB,SAAS;GACT,WAAiB,KAAK,aAAmC;GACzD;GACA;GACA;EACF,CAAC;CAEL;AACF;AAiDA,SAAS,GAAoD,EAC3D,eACC;CACD,IAAM,IAAU,EAAS,EAAS,SAAS;CAI3C,IAHI,CAAC,KAGD,EAAQ,SAAS,aACnB,OAAO;CAET,IAAM,IAAqB,EAAQ,MAAM,QAAQ,GAAW,GAAM,MACzD,EAAK,SAAS,eAAe,IAAQ,GAC3C,EAAE,GACC,IAA0B,EAAQ,MAAM,MAAM,IAAqB,CAAC,CAAC,CAAC,OAAO,CAAY;CAC/F,OAEE,EAAwB,QAAQ,MAAS,EAAK,UAAU,oBAAoB,CAAC,CAAC,SAAS,KACvF,EAAwB,OACrB,MAAS,EAAK,UAAU,sBAAsB,EAAK,UAAU,kBAAkB,EAAK,UAAU,mBAAmB,EAAK,UAAU,oBACnI;AAEJ;;;ACnglBA,IAAI,qBAAQ,IAAI,QAAQ,GAEpB,KAAU;AAEd,SAAwB,GAAK,GAAM;CAC/B,IAAI,CAAC,EAAK,QACN,OAAO;CAEX,KAAK,IADD,IAAM,OACD,IAAI,GAAG,IAAI,EAAK,QAAQ,EAAE,GAAG;EAClC,IAAI,IAAQ,KAAK;EA0BjB,AAzBI,EAAK,OAAO,QACX,OAAO,EAAK,MAAO,YAAY,OAAO,EAAK,MAAO,aAQnD,AAII,IAJA,OAAO,EAAK,MAAO,WACX,OAAM,EAAK,KAAK,OAGhB,OAAO,EAAK,EAAE,IAIrB,GAAM,IAAI,EAAK,EAAE,IAKlB,IAAQ,GAAM,IAAI,EAAK,EAAE,KAJzB,IAAQ,IACR,GAAM,IAAI,EAAK,IAAI,IAAS,IAMpC,KAAO,MAAM;CACjB;CACA,OAAO;AACX;;;AC1CA,SAAS,GAAoB,GAAK;CAC9B,IAAI,OAAO,KAAQ,YACf,IAAI;EACA,IAAM,EAAI;CACd,QACY;EAER,IAAM;CACV;CASJ,OAPA,AAKI,IALA,MAAM,QAAQ,CAAG,IACX,GAAK,CAAG,IAIR,OAAO,KAAO,EAAE,GAEnB;AACX;AACA,IAAI,KAA2B,WAAY;CACvC,SAAS,EAAU,GAAK;EAGpB,AAFI,MAAQ,KAAK,MAAK,IAAM,IAC5B,KAAK,wBAAQ,IAAI,IAAI,GACrB,KAAK,MAAM;CACf;CAgCA,OA/BA,EAAU,UAAU,eAAe,SAAU,GAAK;EAC9C,OAAO,GAAoB,CAAG;CAClC,GACA,EAAU,UAAU,MAAM,SAAU,GAAG;EACnC,IAAI,IAAO,KAAK,aAAa,CAAC;EAC9B,OAAO,KAAK,MAAM,IAAI,CAAI;CAC9B,GACA,EAAU,UAAU,MAAM,SAAU,GAAG,GAAG,GAAK;EAC3C,IAAI,IAAO,KAAK,aAAa,CAAC,GAC1B,IAAa,KAAO,KAAK,KACzB,IAAM,KAAK,IAAI,GACf,IAAO;GACP,MAAM;GACN,WAAW;GACX,WAAW,IAAa,IAAM,IAAa;EAC/C;EAEA,AADA,KAAK,eAAe,GAAY,GAAM,CAAI,GAC1C,KAAK,MAAM,IAAI,GAAM,CAAI;CAC7B,GACA,EAAU,UAAU,iBAAiB,SAAU,GAAK,GAAM,GAAe;EACrE,IAAI,IAAQ;EACZ,KAAO,WAAW,WAAY;GAG1B,AAFc,KAAK,IACI,KAAK,EAAK,aAE7B,EAAM,OAAO,CAAa;EAClC,GAAG,CAAG;CACV,GACA,EAAU,UAAU,SAAS,SAAU,GAAe;EAClD,KAAK,MAAM,OAAO,CAAa;CACnC,GACO;AACX,EAAE;;;AC1DF,SAAS,KAAW;CAKhB,OAJW,UAAU,WAAW,UACrB,UAAU;AAIzB;AACA,SAAS,KAAoB;CAMzB,OALI,OAAO,WAAa,OACb,SAAS,oBAAoB,SAC7B,SAAS,oBAAoB,WAGjC;AACX;AAEA,IAAA,KAAe;CACD;CACS;CACV,kBAJW,GAAK;EAAE,OAAO,MAAM,CAAG,CAAC,CAAC,KAAK,SAAU,GAAK;GAAE,OAAO,EAAI,KAAK;EAAG,CAAC;CAAG;AAK9F,GCpBI,IAAsC,WAAY;CASlD,OARA,IAAW,OAAO,UAAU,SAAS,GAAG;EACpC,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAE5C,KAAK,IAAI,KADT,IAAI,UAAU,IACA,GAAG,AAAI,OAAO,UAAU,eAAe,KAAK,GAAG,CAAC,MAC1D,EAAE,KAAK,EAAE;EAEjB,OAAO;CACX,GACO,EAAS,MAAM,MAAM,SAAS;AACzC,GACI,KAAwC,SAAU,GAAS,GAAY,GAAG,GAAW;CACrF,SAAS,EAAM,GAAO;EAAE,OAAO,aAAiB,IAAI,IAAQ,IAAI,EAAE,SAAU,GAAS;GAAE,EAAQ,CAAK;EAAG,CAAC;CAAG;CAC3G,OAAO,KAAK,AAAM,MAAI,SAAU,SAAU,GAAS,GAAQ;EACvD,SAAS,EAAU,GAAO;GAAE,IAAI;IAAE,EAAK,EAAU,KAAK,CAAK,CAAC;GAAG,SAAS,GAAG;IAAE,EAAO,CAAC;GAAG;EAAE;EAC1F,SAAS,EAAS,GAAO;GAAE,IAAI;IAAE,EAAK,EAAU,MAAS,CAAK,CAAC;GAAG,SAAS,GAAG;IAAE,EAAO,CAAC;GAAG;EAAE;EAC7F,SAAS,EAAK,GAAQ;GAAE,EAAO,OAAO,EAAQ,EAAO,KAAK,IAAI,EAAM,EAAO,KAAK,CAAC,CAAC,KAAK,GAAW,CAAQ;EAAG;EAC7G,GAAM,IAAY,EAAU,MAAM,GAAS,KAAc,CAAC,CAAC,EAAA,CAAG,KAAK,CAAC;CACxE,CAAC;AACL,GACI,IAA4C,SAAU,GAAS,GAAM;CACrE,IAAI,IAAI;EAAE,OAAO;EAAG,MAAM,WAAW;GAAE,IAAI,EAAE,KAAK,GAAG,MAAM,EAAE;GAAI,OAAO,EAAE;EAAI;EAAG,MAAM,CAAC;EAAG,KAAK,CAAC;CAAE,GAAG,GAAG,GAAG,GAAG;CAC/G,OAAO,IAAI;EAAE,MAAM,EAAK,CAAC;EAAG,OAAS,EAAK,CAAC;EAAG,QAAU,EAAK,CAAC;CAAE,GAAG,OAAO,UAAW,eAAe,EAAE,OAAO,YAAY,WAAW;EAAE,OAAO;CAAM,IAAI;CACvJ,SAAS,EAAK,GAAG;EAAE,OAAO,SAAU,GAAG;GAAE,OAAO,EAAK,CAAC,GAAG,CAAC,CAAC;EAAG;CAAG;CACjE,SAAS,EAAK,GAAI;EACd,IAAI,GAAG,MAAU,UAAU,iCAAiC;EAC5D,OAAO,IAAG,IAAI;GACV,IAAI,IAAI,GAAG,MAAM,IAAI,EAAG,KAAK,IAAI,EAAE,SAAY,EAAG,KAAK,EAAE,WAAc,IAAI,EAAE,WAAc,EAAE,KAAK,CAAC,GAAG,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,GAAG,EAAG,EAAE,EAAA,CAAG,MAAM,OAAO;GAE3J,QADI,IAAI,GAAG,MAAG,IAAK,CAAC,EAAG,KAAK,GAAG,EAAE,KAAK,IAC9B,EAAG,IAAX;IACI,KAAK;IAAG,KAAK;KAAG,IAAI;KAAI;IACxB,KAAK,GAAc,OAAX,EAAE,SAAgB;KAAE,OAAO,EAAG;KAAI,MAAM;IAAM;IACtD,KAAK;KAAyB,AAAtB,EAAE,SAAS,IAAI,EAAG,IAAI,IAAK,CAAC,CAAC;KAAG;IACxC,KAAK;KAAqB,AAAlB,IAAK,EAAE,IAAI,IAAI,GAAG,EAAE,KAAK,IAAI;KAAG;IACxC;KACI,IAAM,IAAI,EAAE,MAAM,MAAI,EAAE,SAAS,KAAK,EAAE,EAAE,SAAS,QAAQ,EAAG,OAAO,KAAK,EAAG,OAAO,IAAI;MAAE,IAAI;MAAG;KAAU;KAC3G,IAAI,EAAG,OAAO,MAAM,CAAC,KAAM,EAAG,KAAK,EAAE,MAAM,EAAG,KAAK,EAAE,KAAM;MAAE,EAAE,QAAQ,EAAG;MAAI;KAAO;KACrF,IAAI,EAAG,OAAO,KAAK,EAAE,QAAQ,EAAE,IAAI;MAAkB,AAAhB,EAAE,QAAQ,EAAE,IAAI,IAAI;MAAI;KAAO;KACpE,IAAI,KAAK,EAAE,QAAQ,EAAE,IAAI;MAAkB,AAAhB,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,KAAK,CAAE;MAAG;KAAO;KAElE,AADI,EAAE,MAAI,EAAE,IAAI,IAAI,GACpB,EAAE,KAAK,IAAI;KAAG;GACtB;GACA,IAAK,EAAK,KAAK,GAAS,CAAC;EAC7B,SAAS,GAAG;GAAe,AAAb,IAAK,CAAC,GAAG,CAAC,GAAG,IAAI;EAAG,UAAU;GAAE,IAAI,IAAI;EAAG;EACzD,IAAI,EAAG,KAAK,GAAG,MAAM,EAAG;EAAI,OAAO;GAAE,OAAO,EAAG,KAAK,EAAG,KAAK,KAAK;GAAG,MAAM;EAAK;CACnF;AACJ,GACI,KAAkC,SAAU,GAAG,GAAG;CAClD,IAAI,IAAI,OAAO,UAAW,cAAc,EAAE,OAAO;CACjD,IAAI,CAAC,GAAG,OAAO;CACf,IAAI,IAAI,EAAE,KAAK,CAAC,GAAG,GAAG,IAAK,CAAC,GAAG;CAC/B,IAAI;EACA,QAAQ,MAAM,KAAK,KAAK,MAAM,MAAM,EAAE,IAAI,EAAE,KAAK,EAAA,CAAG,OAAM,EAAG,KAAK,EAAE,KAAK;CAC7E,SACO,GAAO;EAAE,IAAI,EAAS,SAAM;CAAG,UAC9B;EACJ,IAAI;GACA,AAAI,KAAK,CAAC,EAAE,SAAS,IAAI,EAAE,WAAY,EAAE,KAAK,CAAC;EACnD,UACQ;GAAE,IAAI,GAAG,MAAM,EAAE;EAAO;CACpC;CACA,OAAO;AACX,GACI,KAAgD,SAAU,GAAI,GAAM,GAAM;CAC1E,IAAI,KAAQ,UAAU,WAAW,GAAQ,KAAA,IAAI,IAAI,GAAG,IAAI,EAAK,QAAQ,GAAI,IAAI,GAAG,KAC5E,CAAI,KAAM,EAAE,KAAK,QACb,AAAS,MAAK,MAAM,UAAU,MAAM,KAAK,GAAM,GAAG,CAAC,GACnD,EAAG,KAAK,EAAK;CAGrB,OAAO,EAAG,OAAO,KAAM,MAAM,UAAU,MAAM,KAAK,CAAI,CAAC;AAC3D,GA2BI,KAAa,IAAI,GAAU,GAC3B,KAAY,IAAI,GAAU,GAC1B,KAAiB,IAAI,GAAU,GAC/B,KAAgB;CAChB,OAAO;CACP,iBAAiB;CACjB,KAAK;CACL,WAAW;CACX,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB,oBAAoB;CACpB,oBAAoB;CACpB,iBAAiB;CACjB,SAASC,GAAU;CACnB,UAAUA,GAAU;CACpB,mBAAmBA,GAAU;AACjC;AAIA,SAAS,GAAY,GAAK,GAAQ,GAAK;CACnC,IAAI,IAAe,GAAU,IAAI,CAAG;CACpC,AAAI,IACA,EAAa,KAAK,KAAK,CAAM,IAK7B,GAAU,IAAI,GAAK,CAAC,CAAM,GAAG,IAAM,IAAI,IAAM,MAAc,CAAG;AAEtE;AACA,SAAS,GAAa,GAAY,GAAiB,GAAQ;CAClD,MAAO,kBAAkB,KAG1B,IAAO,oBAAoB,KAAA,KAAa,IAAkB,EAAO,kBAGrE;MAAI,IAAQ,KAAK,IAAI,KAAmB,GAAG,EAAO,eAAe,GAC7D,IAAU,IAAQ,EAAO;EAC7B,WAAW,WAAY;GACnB,EAAW,MAAM;IAAE,iBAAiB,IAAQ;IAAG,oBAAoB;GAAK,CAAC;EAC7E,GAAG,CAAO;CAJuD;AAKrE;AAIA,SAAS,GAAiB,GAAI;CAC1B,IAAI,IAAK,EAAG,aAAa,IAAc,MAAO,KAAK,IAAI,KAAA,IAAY,GAAI,IAAQ,EAAG;CAOlF,OANI,OAAO,KAAgB,aAChB,EAAY,CAAK,IAExB,OAAO,KAAgB,YAChB,IAEJ,GAAc;AACzB;AAKA,IAAI,KAAS,SAAU,GAAK,GAAK,GAAO,GAAK;CAGzC,OAFI,MAAU,KAAK,MAAK,IAAQ,KAC5B,MAAQ,KAAK,MAAK,IAAM,GAAc,MACnC,GAAU,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,WAAY;EACjD,IAAI,GAAM,GAAO,GAAc,GAAO,GAAS,GAAU;EACzD,OAAO,EAAY,MAAM,SAAU,GAAI;GACnC,QAAQ,EAAG,OAAX;IACI,KAAK;KACD,IAAI,CAAC,GAAU,CAAG,GAAG,OAAO,CAAC,GAAa,CAAC;KAC3C,EAAG,QAAQ;IACf,KAAK,GAED,OADA,EAAG,KAAK,KAAK;KAAC;KAAG;;KAAK;IAAC,CAAC,GACjB,CAAC,GAAa,CAAG;IAC5B,KAAK,GAED,OADA,IAAO,EAAG,KAAK,GACR,CAAC,GAAa,CAAC;IAC1B,KAAK,GAGD,OAFA,IAAQ,EAAG,KAAK,GAChB,IAAQ,GACD,CAAC,GAAa,CAAC;IAC1B,KAAK,GAAG,OAAO,CAAC,GAAa,CAAC;IAC9B,KAAK,GAED,AADA,IAAO,GACP,EAAG,QAAQ;IACf,KAAK;KAID,IAFA,IAAe,IACf,IAAU;MAAQ;MAAa;MAAqB;KAAa,GACtD,MAAS,QAChB,IAAI;MACA,EAAM,IAAI,GAAK,GAAS,CAAG;KAC/B,SACO,GAAK;MACR,QAAQ,MAAM,qCAAqC,CAAG;KAC1D;KAoBJ,OAlBA,IAAW,GAAU,IAAI,CAAG,GACxB,KAAY,EAAS,KAAK,WAC1B,IAAS,EAAS,KAAK,OAAO,SAAU,GAAG;MAAE,OAAO,EAAE,QAAQ;KAAK,CAAC,GACpE,EAAO,QAAQ,SAAU,GAAG,GAAK;MAQ7B,AAPW,EAAQ,SAAS,WACxB,EAAE,OAAO,EAAQ,OAErB,EAAE,QAAQ,EAAQ,OAClB,EAAE,eAAe,EAAQ,cACzB,EAAE,YAAY,EAAQ,cACT,MAAQ,EAAO,SAAS,KAGjC,OAAO,EAAO;KAEtB,CAAC,GACD,IAAS,EAAO,OAAO,OAAO,IAE3B,CAAC,GAAc,CAAO;GACrC;EACJ,CAAC;CACL,CAAC;AACL;AACA,SAASC,KAAU;CAGf,KAAK,IAFD,IAAQ,MACR,IAAO,CAAC,GACH,IAAK,GAAG,IAAK,UAAU,QAAQ,KACpC,EAAK,KAAM,UAAU;CAEzB,IAAI,GACA,GACA,IAAS,EAAS,CAAC,GAAG,EAAa,GACnC,IAAY,IACZ,IAAa;CACjB,IAAI,CAAC,GAAgB,GAEjB,OADA,QAAQ,MAAM,mEAAmE,GAC1E;CAEX,IAAI,IAAY,OAAO,SAAW,OAAe,OAAO,WAAa;CAiBrE,AANI,EAAK,UAAU,MACf,IAAM,EAAK,KAEX,EAAK,UAAU,MACf,IAAK,EAAK,KAEV,EAAK,SAAS,MACd,IAAS,EAAS,EAAS,CAAC,GAAG,CAAM,GAAG,EAAK,EAAE;CAEnD,IAAI,IAAM,IAAY,EAAO,YAAY,EAAO,KAC5C,IAAS,OAAO,KAAQ,aAAa,IAAM,EAAI,CAAG;CACtD,AAAW,MAAO,WAEd,IAAK,EAAO;CAEhB,IAAI,IAAW;CAiBf,AACI,MAAW,GAAS;EAChB,MAAM,KAAA;EACN,OAAO,KAAA;EACP,cAAc;EACd,WAAW;EACX,KAAK;CACT,CAAC;CAKL,IAAI,IAAa,SAAU,GAAM,GAAM;EAAE,OAAO,GAAU,GAAO,KAAK,GAAG,KAAK,GAAG,WAAY;GACzF,IAAI,GAAc,GAAQ,GAAW,GAAS,GAAS,GAAkB,GACrE,IAAQ;GACZ,OAAO,EAAY,MAAM,SAAU,GAAI;IACnC,QAAQ,EAAG,OAAX;KACI,KAAK,GAkFD,OAjFA,IAAe,EAAS,SAAS,KAAA,GACjC,IAAS,EAAO,OACX,KAGL,IAAY,EAAO,MAAM,IAAI,CAAM,GACnC,IAAU,KAAa,EAAU,MACjC,EAAS,eAAe,IACxB,EAAS,YAAY,CAAC,GAClB,MACA,EAAS,OAAO,EAAQ,MACxB,EAAS,QAAQ,EAAQ,QAE7B,IAAU,KAAQ,GACd,CAAC,KACA,CAAC,EAAO,kBAAkB,KAAK,CAAC,KAC/B,GAAiD,oBAAqB,KAAA,KAAa,CAAE,GAAiD,mBAMxI,MACA,IAAmB,GAAU,KAAK,IAAI,IAAI,EAAU,aAAc,EAAO,oBAAsB,GAAiD,kBAC5I,CAAC,MACD,EAAS,eAAe,IACxB,EAAS,YAAY,IACd,CAAC,CAAY,MAG5B,IAAU,WAAY;MAAE,OAAO,GAAU,GAAO,KAAK,GAAG,KAAK,GAAG,WAAY;OACxE,IAAI,GAAkB,GAAa,GAAY,GAAc,GAAY;OACzE,OAAO,EAAY,MAAM,SAAU,GAAI;QACnC,QAAQ,EAAG,OAAX;SACI,KAAK,GAMD,OALA,IAAmB,GAAe,IAAI,CAAM,GACtC,IAAyB,CAAC,GAAa,CAAC,KAC9C,IAAc,MAAM,QAAQ,CAAM,IAAI,IAAS,CAAC,CAAM,GACtD,IAAa,EAAQ,MAAM,KAAK,GAAG,GAAc,CAAC,GAAG,GAAO,CAAW,GAAG,EAAK,CAAC,GAChF,GAAe,IAAI,GAAQ,GAAY,EAAO,gBAAgB,GACvD,CAAC,GAAa,GAAO,GAAQ,GAAY,EAAO,OAAO,CAAG,CAAC;SACtE,KAAK,GAED,OADA,EAAG,KAAK,GACD,CAAC,GAAa,CAAC;SAC1B,KAAK,GAAG,OAAO,CAAC,GAAa,GAAO,GAAQ,EAAiB,MAAM,EAAO,OAAO,CAAG,CAAC;SACrF,KAAK,GAED,AADA,EAAG,KAAK,GACR,EAAG,QAAQ;SACf,KAAK,GAeD,OAdA,EAAS,eAAe,IACxB,EAAS,YAAY,IACrB,GAAe,OAAO,CAAM,GACxB,EAAS,UAAU,KAAA,MACnB,IAAe,GAAiB;UAAE,aAAa,EAAO;UAAoB,OAAO,EAAS;SAAM,CAAC,GACjG,IAAa,GAAiB;UAC1B,aAAa,MAAO,EAAK;UACzB,OAAO,EAAS;SACpB,CAAC,GACD,IAAqB,CAAC,KAAa,KAAgB,GAC/C,KACA,GAAa,GAAY,IAAO,EAAK,kBAAkB,GAAG,CAAM,IAGjE,CAAC,CAAY;QAC5B;OACJ,CAAC;MACL,CAAC;KAAG,GACE,KAAW,EAAO,sBACxB,WAAW,WAAY;MAAE,OAAO,GAAU,GAAO,KAAK,GAAG,KAAK,GAAG,WAAY;OACzE,OAAO,EAAY,MAAM,SAAU,GAAI;QACnC,QAAQ,EAAG,OAAX;SACI,KAAK,GAED,OADM,IAAkB,CAAC,GAAa,CAAC,IAChC,CAAC,GAAa,EAAQ,CAAC;SAClC,KAAK,GAED,AADA,EAAG,KAAK,GACR,EAAG,QAAQ;SACf,KAAK,GAAG,OAAO,CAAC,CAAY;QAChC;OACJ,CAAC;MACL,CAAC;KAAG,GAAG,EAAO,kBAAkB,GACzB,CAAC,GAAa,CAAC,KAd8B,CAAC,GAAa,CAAC,MAhExD,CAAC,CAAY;KA+E5B,KAAK,GAAG,OAAO,CAAC,GAAa,EAAQ,CAAC;KACtC,KAAK,GAED,AADA,EAAG,KAAK,GACR,EAAG,QAAQ;KACf,KAAK,GAAG,OAAO,CAAC,CAAY;IAChC;GACJ,CAAC;EACL,CAAC;CAAG,GACA,IAAiB,WAAY;EAAE,OAAO,GAAU,GAAO,KAAK,GAAG,KAAK,GAAG,WAAY;GAAE,OAAO,EAAY,MAAM,SAAU,GAAI;IAC5H,OAAO,CAAC,GAAc,EAAW,MAAM,EAAE,oBAAoB,GAAM,CAAC,CAAC;GACzE,CAAC;EAAG,CAAC;CAAG,GACJ,IAAQ;CACZ,IAAI,CAAC,GAAW;EACZ,IAAI,IAAS,WAAY;GAAE,OAAO,GAAU,GAAO,KAAK,GAAG,KAAK,GAAG,WAAY;IAC3E,OAAO,EAAY,MAAM,SAAU,GAAI;KACnC,QAAQ,EAAG,OAAX;MACI,KAAK,GAID,OAHM,CAAC,EAAS,SAAS,EAAO,SAAS,IAGlC,CAAC,GAAa,EAAW,CAAC,IAHmB,CAAC,GAAa,CAAC;MAIvE,KAAK,GAID,OADA,EAAG,KAAK,GACD,CAAC,GAAa,CAAC;MAC1B,KAAK,GAKD,AAJA,AAEI,OADA,aAAa,CAAK,GACV,OAEZ,EAAG,QAAQ;MACf,KAAK,GAID,OAHI,EAAO,mBAAmB,CAAC,MAC3B,IAAQ,WAAW,GAAQ,EAAO,eAAe,IAE9C,CAAC,CAAY;KAC5B;IACJ,CAAC;GACL,CAAC;EAAG;EAIJ,AAHI,EAAO,oBACP,IAAQ,WAAW,GAAQ,EAAO,eAAe,IAEjD,EAAO,sBACP,SAAS,iBAAiB,oBAAoB,GAAgB,EAAK,GACnE,OAAO,iBAAiB,SAAS,GAAgB,EAAK;CAE9D;CACA,GAAe,WAAY;EAMvB,AALA,IAAY,IACZ,AAEI,OADA,aAAa,CAAK,GACV,OAER,CAAC,KAAa,EAAO,sBACrB,SAAS,oBAAoB,oBAAoB,GAAgB,EAAK,GACtE,OAAO,oBAAoB,SAAS,GAAgB,EAAK;EAE7D,IAAI,IAAe,GAAU,IAAI,EAAO,KAAK;EAC7C,AAAI,MACA,EAAa,OAAO,EAAa,KAAK,OAAO,SAAU,GAAK;GAAE,OAAO,MAAQ;EAAU,CAAC;CAEhG,CAAC;CAkCD,IAAI;EACA,GAAM,GAAQ,SAAU,GAAK;GAUzB,AATK,GAAW,CAAM,MAClB,EAAO,QAAQ,IAEnB,EAAS,MAAM,GACf,EAAS,eAAe,EAAQ,GAChC,GAAY,EAAO,OAAO,GAAU,CAAG,GACnC,CAAC,KAAa,CAAC,KAAc,EAAO,SACpC,EAAW,GAEf,IAAa;EACjB,GAAG,EACC,WAAW,GACf,CAAC;CACL,QACW,CAEX;CAEA,OADU,EAAS,EAAS,CAAC,GAAG,GAAO,CAAQ,CAAC,GAAG,EAAE,QAAQ,SAAU,GAAM,GAAM;EAAE,OAAO,EAAW,GAAM,EAAS,EAAS,CAAC,GAAG,CAAI,GAAG,EAAE,iBAAiB,GAAK,CAAC,CAAC;CAAG,EAAE,CAChK;AACb;AACA,SAAS,GAAU,GAAG;CAClB,OAAqB,OAAO,KAAM,cAA3B,KAAuC,OAAO,EAAE,QAAS;AACpE;;;AC9eA,IAAA,KAAeC;ACWDC,GAAK,SAmIJC,GAAM;AAqGrB,IAAI,KAAe,MAAM;CACvB,YAAY,GAAU;EAapB,AAZA,KAAK,YAAYC,EAAK,OAAO,GAC7B,KAAK,WAAWA,EAAK,KAAK,CAAC,GAC3B,KAAK,eAAe,MAAY;GAC9B,KAAK,YAAY,QAAQ,CAAC,GAAG,KAAK,YAAY,OAAO,CAAO;EAC9D,GACA,KAAK,mBAAmB;GACtB,KAAK,YAAY,QAAQ,KAAK,YAAY,MAAM,MAAM,GAAG,EAAE;EAC7D,GACA,KAAK,kBAAkB,GAAO,MAAY;GACxC,KAAK,YAAY,MAAM,KAAS,EAAE,GAAG,EAAQ;EAC/C,GACA,KAAK,YAAY,MAAU,GAC3B,KAAK,cAAcA,EAAK,KAA8B,CAAC,CAAC;CAC1D;CACA,IAAI,WAAW;EACb,OAAO,KAAK,YAAY;CAC1B;CACA,IAAI,SAAS,GAAU;EACrB,KAAK,YAAY,QAAQ;CAC3B;CACA,IAAI,SAAS;EACX,OAAO,KAAK,UAAU;CACxB;CACA,IAAI,OAAO,GAAQ;EACjB,KAAK,UAAU,QAAQ;CACzB;CACA,IAAI,QAAQ;EACV,OAAO,KAAK,SAAS;CACvB;CACA,IAAI,MAAM,GAAO;EACf,KAAK,SAAS,QAAQ;CACxB;AACF,GACI,KAAO,cAAc,GAAa;CACpC,YAAY,EAAE,aAAU,GAAG,KAAQ;EACjC,MAAM;GACJ,GAAG;GACH,OAAO,IAAI,GAAa,CAAQ;EAClC,CAAC;CACH;AACF,GC7Oa,KAAuB,UAG9B,MAAmB,MACrB,EAAK,QAAQ,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,YAAY,GAG3C,MAAc,MAChB,GACI,EAAQ,MACH,QAAQ,MAAS,EAAK,SAAS,MAAM,CAAC,CACtC,KAAK,MAAU,UAAU,IAAO,EAAK,OAAO,EAAG,CAAC,CAChD,KAAK,GAAG,CACjB,GAsBE,KAA0B,GAE1B,MACF,GACA,MACkB;CAKlB,IAAM,IAAS,EACV,QAAQ,MAAY,EAAQ,SAAS,MAAM,CAAC,CAC5C,KAAK,OAAa;EAAE,MAAM,GAAW,CAAO;EAAG,OAAO;CAAM,EAAE;CACnE,OAAO,EAAM,QAAQ,MAAY;EAC7B,IACI,CAAC,EAAQ,GAAG,WAAA,QAA+B,KAC3C,EAAQ,SAAS,QAEjB,OAAO;EAEX,IAAM,IAAO,GAAW,CAAO,GACzB,IAAQ,EAAO,MAChB,MACG,CAAC,EAAM,SACP,EAAM,KAAK,SAAS,MACnB,EAAM,SAAS,KACX,EAAM,KAAK,UAAU,MAClB,EAAK,SAAS,EAAM,IAAI,EACxC;EAKA,OAJA,CAAK,MAGL,EAAM,QAAQ,IACP;CACX,CAAC;AACL,GAGM,MAAgB,MAAiD;CACnE,IAAM,IAAQ,EAA2B,QAAQ;CAIjD,OAHI,MAAS,iBACD,EAA+B,YAAY,KAEhD,EAAK,WAAW,OAAO,IAAI,EAAK,MAAM,CAAc,IAAI;AACnE,GAmBa,MAAyD,EAClE,kBAGW;CACX,IAAM,IAAU,EAAS,EAAS,SAAS;CAC3C,IAAI,CAAC,KAAW,EAAQ,SAAS,aAC7B,OAAO;CAEX,IAAM,IAAqB,EAAQ,MAAM,QACpC,GAAM,GAAM,MAAW,EAAK,SAAS,eAAe,IAAQ,GAC7D,EACJ,GACM,IAAoB,EAAQ,MAC7B,MAAM,IAAqB,CAAC,CAAC,CAC7B,QACI,MACG,CAAE,EAAwC,oBAC1C,GAAmB,GAAa,CAAI,CAAC,CAC7C;CACJ,OACI,EAAkB,SAAS,KAC3B,EAAkB,OAAO,MACrB,GAAqB,IAAK,EAA4B,SAAS,EAAE,CACrE;AAER;AAIA,SAAgB,GAAgB,GAAiB;CAC7C,OAAO,EAAY,WAAW,WAAiB;EAC3C,IAAM,EAAE,GAAG,OAAI,cAAW,GAAQ,EAAE,UAAU,SAAS,CAAC,GAGlD,IAAU,EAAI,EAAE,GAChB,IAAW,EAAwB,GACnC,IAAa,EAAI,CAAO,GACxB,IAAO,EAAwB,GAC/B,IAAY,EAAsC,GAClD,IAAS,EAAwB,GACjC,IAAiB,EAAgC,GACjD,IAAa,EAA4B,GACzC,IAAa,EAA4B,GACzC,IAAU,EAAwC,GAClD,IAAiB,EAAiC,GAElD,IAAQ,EAAwB,GAEhC,IAAe,EAAsC,GAErD,IAAkB,EAAiC,GAEnD,KAAa,EAAsC,GAEnD,KAAiB,EAA0B,GAE3C,KAAiB,EAA8C,GAE/D,KAAkB,EAAyC,GAE3D,KAAc,EAAkC,GAEhD,KAAqB,EAAI,EAAK,GAE9B,KAAc,GAAiB,GAC/B,KAAS,QAAe;GAC1B,IAAI,IAAQ,EAAe,OAAO;GAOlC,QANI,CAAC,KAAS,MAAU,YACpB,IAAQ,GAAY,QAEnB,IAGE,MAAU,SAFN,GAAY;EAG3B,CAAC,GAEK,IAAmB,QAAe,EAAU,UAAU,WAAW,GAEjE,KAAU,QACP,EAAiB,QAGf,EAAa,OAAO,QACtB,MACG,CAAC;GAAC;GAAU;GAAY;EAAU,CAAC,CAAC,SAAS,CAAM,CAC3D,IALW,EAAa,KAM3B,GAGK,KAAY,GACd,QAAe,GAAG,EAAW,MAAM,QAAQ,GAC3C,IACJ;EAEA,SAAkB;GACd,AACI,GAAU,UAAQ,EAAW;EAErC,CAAC;EAED,IAAM,IAAc,EAAS;GACzB,WAAW,GAAU;GACrB,MAAM,MAAkB;IACpB,GAAU,QAAQ;GACtB;EACJ,CAAC,GAGK,IAAY,EAAuB,GACnC,IAAwB,EAAI,EAAK,GAEjC,KAA6B,QAE3B,EAAU,OAAO,SACX,YAAY,CAAC,CACd,SAAS,sBAAsB,KAAK,EACjD;EAEA,SAAS,GAAsB,GAAuB;GAClD,IAAI;IACA,IAAM,IAAS,KAAK,MAAM,EAAM,OAAO;IACvC,OACI,EAAO,WAAW,OAClB,EAAO,MAAM,SAAS,kBAAkB;GAEhD,QAAQ;IACJ,OAAO;GACX;EACJ;EASA,SAAS,GAAgB,GAAc;GACnC,IAAI,GAAsB,CAAK,GAAG;IAC9B,IAAM,IAAkB,EAAK,MAAM,SAAS,QACvC,MAAM,EAAE,SAAS,MACtB,GACM,IACF,EAAgB,EAAgB,SAAS,IACvC,IAAe,IACf,GAAY,CAAe,IAC3B,KAAA;IAMN,AAJA,EAAY,QAAQ,EAAW,GAC/B,EAAK,MAAM,WAAW,GACtB,EAAU,QAAQ,KAAA,GAEd,KACA,EAAK,MAAM,YAAY,EAAE,MAAM,EAAa,CAAC;IAEjD;GACJ;GAIA,AAFA,GAAO,MAAM,CAAK,GAClB,EAAU,QAAQ,GACd,GAA2B,UAC3B,EAAsB,QAAQ;EAEtC;EAGA,IAAM,IAAY,QACd,GAAuB;GACnB,SAAS,EAAQ;GACjB,UAAU,EAAS;GACnB,eAAe,EAAQ;EAC3B,CAAC,CACL,GAGM,KAAoB,EAKhB,IAAI,GAQR,YAA4B;GAC9B,GAAG,GAAqB;GACxB,GAAI,GAAkB,SAAS,CAAC;EACpC,IAEM,IAAO,QAEL,IAAI,GAAoB;GACpB,IAAI,EAAY;GAChB,WAAW,IAAI,GAAqB;IAChC,KAAK,EAAU,MAAM,gBACjB,EAAW,OACX,EAAiB,QAAQ,cAAc,MAC3C;IACA,6BAA6B,EACzB,UAAU,GACV,aACG,EACH,MAAM;KACF;KACA,UAAU,CAAC,EAAK,EAAK,SAAS,EAAE;KAChC,OAAO,EAAM;KACb,QAAQ,EAAW,OAAO;KAC1B,iBACI,EAAW,OAAO;KACtB,aAAa,EAAW,OAAO;KAC/B,iBACI,EAAW,OAAO;KACtB,kBACI,EAAW,OAAO;KACtB,YAAY,EAAW,OAAO;KAC9B,OAAO,EAAW,OAAO;KACzB,WAAW,EAAW,OAAO;KAC7B,WAAW,EAAW,OAAO;KAC7B,cACI,EAAe,OAAO;KAC1B,eAAe,GAAmB;KAClC,iBAAiB,GAAgB;KACjC,eAAe,EAAW,OAAO;KACjC,gBAAgB,GAAe;KAC/B,gBAAgB,GAAe;IACnC,EACJ;IACA,aAAa;IAIb,eAAe,EAAQ,SAAS,CAAC;GACrC,CAAC;GAKD,wBAAwB,MACpB,GACI,CACJ,KACA,GACI,CACJ;GACJ,SAAS;GAGT,gBAAgB;IAGZ,IAAM,IAAK,EAAY;IACvB,AACI,CAAC,EAAiB,SAClB,CAAC,EAAc,MAAM,MAAM,MAAM,EAAE,OAAO,CAAE,KAE5C,GAAkB,EAAW,KAAK;GAE1C;EACJ,CAAC,CACT,GAGM,KAAyB,QAAe;GAC1C,IAAM,IAAM,EAAe,OAAO;GAMlC,OALK,IAAM,EAAO,SAKX,EAAI,EAAO,SAJP,EAAG,6BAA6B,IACjC,EAAE,6BAA6B,IAC/B;EAGd,CAAC,GAIK,KAAmB,EAAW,GAC9B,KAAiB,SAA+B;GAClD,IAAI;GACJ,MAAM;GACN,OAAO,CAAC;IAAE,MAAM;IAAQ,MAAM,GAAuB;GAAM,CAAC;EAChE,EAAE,GAEI,KAAW,QAAe;GAG5B,IAAM,KAAmB,MACrB,EAAK,KAAK,MACF,EAAI,SAAS,UAMb,CAHiB,EAAI,MAAM,MAC1B,MAAM,EAAE,SAAS,MAEjB,IACM,IAEJ;IACH,GAAG;IACH,OAAO,EAAI,MAAM,KAAK,MAAM;KACxB,IAAI,EAAE,SAAS,QACX,OAAO;KAEX,IAAM,IAAK;KACX,IAAI,EAAG,IAAI,WAAW,eAAe,GAAG;MACpC,IAAM,IAAiB,EAAG,IAAI,MAC1B,EACJ;MACA,OAAO;OACH,GAAG;OACH,KAAK,EAAU,MAAM,YACjB,EAAW,OACX,EAAY,OACZ,CACJ;MACJ;KACJ;KAMA,OAHI,EAAG,IAAI,WAAW,OAAO,IAClB,IAEJ;MACH,GAAG;MACH,KAAK,EAAU,MAAM,gBAAgB,EAAG,GAAG;KAC/C;IACJ,CAAC;GACL,CACH;GAcL,OAZI,EAAiB,QACV,EAAgB,EAAK,MAAM,QAAQ,IAG1C,CAAC,GAAmB,SACpB,EAAK,MAAM,WAAW,EAAE,EAAE,SAAS,cAE5B,CACH,GAAe,OACf,GAAG,EAAgB,EAAK,MAAM,QAAQ,CAC1C,IAEG,EAAgB,EAAK,MAAM,QAAQ;EAC9C,CAAC,GAGK,KAA0B,QAAe;GAC3C,IAAM,IAAM,EAAe,OAAO;GAMlC,OALK,IAAM,EAAO,SAKX,EAAI,EAAO,SAJP,EAAG,yBAAyB,IAC7B,EAAE,yBAAyB,IAC3B;EAGd,CAAC,GAGK,IAAgB,EAAkB,CAAC,CAAC,GACpC,KAAyB,EAAI,EAAK,GAClC,IAAY,EAAmB,CAAC,CAAC,GACjC,KAAqB,EAAI,EAAK,GAG9B,KAAa,EAAiB,MAAM,GAGpC,IAAmB,EAAuB,CAAC,CAAC,GAC5C,IAAwB,EAA+B,GACvD,KAAuB,EAAI,EAAK,GAChC,KAAsB,EAAI,EAAK,GAC/B,KAAsB,EAAwB,GAG9C,IAAkB,EAAI,EAAK,GAC3B,KAAsB,EAAI,EAAK,GAC/B,KAAkB,EAAwB,GAG1C,IAAQ,EAAI,EAAE,GACd,IAAqB,EAAyB,CAAC,CAAC,GAChD,IAAqB,EAAI,EAAE,GAC3B,KAA2B,EAAI,CAAC;EAGtC,eAAe,GAAkB,GAAY;GACzC,IAAI,EAAiB,OAAO;IACxB,EAAc,QAAQ,CAAC;IACvB;GACJ;GACA,GAAuB,QAAQ;GAC/B,IAAI;IACA,EAAc,QAAQ,MAAM,EAAU,MAAM,iBACxC,GACA,EAAO,KACX;GACJ,QAAQ;IACJ,EAAc,QAAQ,CAAC;GAC3B,UAAU;IACN,GAAuB,QAAQ;GACnC;EACJ;EAIA,eAAe,IAAgB;GAC3B,IAAM,IAAS,EAAY;GAC3B,IAAI,CAAC,GAAQ;IACT,EAAU,QAAQ,CAAC;IACnB;GACJ;GACA,GAAmB,QAAQ;GAC3B,IAAI;IACA,EAAU,QAAQ,MAAM,EAAU,MAAM,aAAa,CAAM;GAC/D,QAAQ;IACJ,EAAU,QAAQ,CAAC;GACvB,UAAU;IACN,GAAmB,QAAQ;GAC/B;EACJ;EAEA,SAAS,GAAe,GAAoB,IAAS,IAAO;GACxD,OAAO,EAAU,MAAM,uBAAuB,GAAY,CAAM;EACpE;EAEA,SAAS,GAAsB,GAAoB;GAC/C,OAAO,EAAU,MAAM,sBAAsB,CAAU;EAC3D;EAIA,eAAe,EAAe,GAAoB;GAE9C,AADA,MAAM,EAAU,MAAM,eAAe,CAAU,GAC/C,EAAU,QAAQ,EAAU,MAAM,QAC7B,MAAS,EAAK,eAAe,CAClC;EACJ;EAEA,eAAe,GAAS,GAAY,GAAgB;GAG5C,OAAiB,OAGrB,IAAI;IACA,IAAM,IAAO,MAAM,EAAU,MAAM,QAAQ,GAAI,CAAM;IAMrD,IACI,MAAW,EAAY,SACvB,EAAK,MAAM,WAAW,WACtB,EAAK,MAAM,SAAS,SAAS,GAE7B;IAEJ,AAAI,MACA,EAAK,MAAM,WAAW,EAAK,UAC3B,EAAsB,QAAQ,EAAK,WAAW;GAEtD,QAAQ,CAGR;EACJ;EAOA,IAAM,WAAgC;GAClC,IAAM,IAAiB,EAAK,MAAM;GAClC,OAAO,MAAW,eAAe,MAAW;EAChD,GAGI,KAAkB,GAClB,KAAiB;EA8BrB,eAAe,KAEb;GAKE,IAAI,EAAiB,SAAS,GAAe,GACzC,OAAO;GAEX,IAAM,IAAS,EAAY,OACrB,IAAQ,MAAmB;GACjC,IAAI;IACA,IAAM,IAAO,MAAM,EAAU,MAAM,QAC/B,EAAW,OACX,CACJ;IACA,IACI,CAAC,KACD,MAAW,EAAY,SACvB,GAAe,KACf,KAAQ,IAER,OAAO;IAEX,KAAiB;IACjB,IAAM,IAAY,EAAK,UACjB,IAAU,GACZ,GACA,EAAK,MAAM,QACf;IAGA,OAFA,EAAK,MAAM,WAAW,CAAC,GAAG,GAAW,GAAG,CAAO,GAC/C,EAAsB,QAAQ,EAAK,WAAW,IACvC,EAAQ,SAAS,IAAI,YAAY;GAC5C,QAAQ,CAKR;GACA,OAAO;EACX;EAMA,SAAS,GAAc,GAAwB;GAC3C,EAAK,MAAM,WAAW,CAAC,GAAG,EAAK,MAAM,UAAU,CAAO;EAC1D;EAEA,eAAe,GAAqB,GAAgB;GAChD,IAAI;IACA,EAAiB,QACb,MAAM,EAAU,MAAM,oBAAoB,CAAM;GACxD,QAAQ;IACJ,EAAiB,QAAQ,CAAC;GAC9B;EACJ;EAEA,SAAS,EAAoB,GAA2B;GACpD,IAAM,IAAM,EAAiB,MAAM,WAC9B,MAAM,EAAE,cAAc,EAAS,SACpC;GACA,AAAI,KAAO,IACP,EAAiB,MAAM,KAAO,IAE9B,EAAiB,MAAM,KAAK,CAAQ;EAE5C;EAEA,SAAS,GAAuB,GAAwB;GACpD,IAAM,IAAU,GAAS,OACnB,IAAM,EAAQ,WAAW,MAAM,EAAE,OAAO,EAAQ,EAAE,GAClD,IAAmB,GAAY,CAAO,KAAK,IAC3C,IAAW,EACZ,MAAM,GAAG,CAAG,CAAC,CACb,QAAQ,CAAC,CACT,MAAM,MAAM,EAAE,SAAS,MAAM;GAElC,OAAO;IAAE,cADY,GAAY,KAAY,CAAO,KAAK;IAClC;GAAiB;EAC5C;EAGA,eAAe,GAAW,GAAY,GAAgB;GAOlD,AANA,MAAM,QAAQ,IAAI;IACd,GAAS,GAAI,CAAM;IACnB,GAAkB,CAAE;IACpB,GAAqB,CAAM;GAC/B,CAAC,GAEI,GAAkB,SACnB,IAAoB,GAAK,MACrB,EAAU,MAAM,eAAe,GAAK,GAAK,EAAO,KAAK,CACzD,CAAC,CAAC,MAAM,MAAQ;IACZ,AAAI,MACA,GAAkB,QAAQ;GAElC,CAAC;EAET;EAEA,eAAe,KAAe;GAI1B,IAAM,IAAO,EAAM,MAAM,KAAK,GACxB,IAA0B,EAAmB,MAC9C,QAEO,MAMC,EAAI,UAAU,UAAU,EAAI,gBAAgB,KAAA,CACrD,CAAC,CACA,KAAK,OACK;IACH,MAAM;IACN,WAAW,EAAI,YAAY;IAC3B,KAAK,EAAI;IACT,UAAU,EAAI,YAAY;IAC1B,kBAAkB,EACd,QAAQ,EACJ,OAAO,EAAI,YACf,EACJ;GACJ,EACH;GAQL,AANI,EAAiB,SAAS,GAAS,MAAM,SAAS,KAClD,MAAM,GAAa,GAIvB,EAAmB,QAAQ,GAC3B,GAAyB,QAAQ,EAAK,MAAM,SAAS;GAIrD,IAAM,IAAc,EAAK,MAAM;GAS/B,AALA,EAAY;IACR;IACA,OAAO,EAAU,SAAS,IAAI,IAAY,KAAA;GAC9C,CAAC,GACD,EAAM,QAAQ,IACd,GAAwB;EAC5B;EAMA,SAAS,EAAY,GAAc;GAC/B,IAAM,IAAU,EAAK,KAAK;GAC1B,IAAI,CAAC,GACD;GAEJ,IAAI,EAAK,MAAM,WAAW,SAAS;IAC/B,GAAO,KACH,kHACJ;IACA;GACJ;GACA,IAAM,IAAO,EAAK,MAAM;GAGxB,EAAK,EAAE,MAAM,EAAQ,CAAC;EAC1B;EAEA,eAAe,KAAiB;GAC5B,IAAM,IAAiB,EAAmB,MAAM,SAAS;GAEzD,AADA,MAAM,EAAK,MAAM,KAAK,GAClB,MACA,EAAM,QAAQ,EAAmB,OACjC,EAAK,MAAM,WAAW,EAAK,MAAM,SAAS,MACtC,GACA,GAAyB,KAC7B,GACA,EAAmB,QAAQ;EAEnC;EAGA,SACU,EAAK,MAAM,SAChB,MAAW;GACR,AAAI,MAAW,WAAW,EAAmB,MAAM,SAAS,MACxD,EAAmB,QAAQ;EAEnC,CACJ;EAEA,SAAS,GAAwB,IAAY,IAAO;GAChD,KAAK,IAAM,KAAO,EAAmB,OAIjC,CAAI,KAAa,EAAI,UAAU,WAC3B,IAAI,gBAAgB,EAAI,QAAQ;GAIxC,AADA,EAAmB,QAAQ,CAAC,GAC5B,EAAe,QAAQ;EAC3B;EAEA,eAAe,KAAe;GAS1B,OARA,EAAmB,QAAQ,IAC3B,MAAM,GAAe,GACrB,EAAY,QAAQ,EAAW,GAC/B,EAAK,MAAM,WAAW,GACtB,EAAU,QAAQ,KAAA,GAClB,EAAsB,QAAQ,IAC9B,GAAwB,EAAI,GAC5B,GAAS,MAAM,GACR,EAAY;EACvB;EAEA,eAAe,GACX,GACF;GAKE,AAJI,EAAK,MAAM,WAAW,YACtB,EAAmB,QAAQ,IAC3B,MAAM,GAAe,IAEzB,MAAM,EAAK,MAAM,WAAW,CAAO;EACvC;EAEA,SAAS,GAAc,GAIpB;GACC,IAAI,EAAO,SAAS,sBAAsB;IACtC,IAAM,IAAS,EAAO;IAQtB,AAAI,cAAc,MACd,GAAkB,QAAQ;KACtB,qBAAqB,EAAO;KAC5B,sBAAsB,EAAO;KAC7B,qBAAqB,EAAO;KAC5B,iBAAiB,EAAO;IAC5B;GAER;GACA,EAAK,MAAM,cAAc,CAAM;EACnC;EAQA,SAAS,GAAwB,GAI9B;GACC,EAAK,MAAM,wBAAwB,CAAM;EAC7C;EAGA,IAAM,KAAgB,QAClB,EAAK,MAAM,SAAS,QACf,GAAG,MAAM,IAAI,EAAE,MAAM,QAAQ,MAAM,EAAE,SAAS,MAAM,CAAC,CAAC,QACvD,CACJ,CACJ,GAKM,KAAqB,QACjB,EAAgB,OAAO,sBAAsB,CACvD,GACM,KAAkB,QACd,EAAgB,OAAO,mBAAmB,EACpD,GACM,KAA2B,QAC7B,KAAK,IACD,GACA,KAAK,IACD,GAAmB,QAAQ,EAAmB,MAAM,QACpD,GAAgB,QACZ,GAAc,QACd,EAAmB,MAAM,MACjC,CACJ,CACJ,GACM,KAA2B,QACvB,GAAyB,SAAS,CAC5C,GAGM,IAAiB,EAGb,IAAI,GACR,WAA4B;GAC9B,EAAe,QAAQ;EAC3B;EAGA,GAAM,KAA2B,MAAY;GACzC,AAAK,MACD,EAAe,QAAQ;EAE/B,CAAC;EAED,eAAe,GAAiB,GAAY;GACxC,IAAI,GAAyB,OAAO;IAEhC,EAAe,QACX,GAAgB,QACZ,GAAc,QACd,EAAmB,MAAM,UAC7B,GAAmB,QAAQ,EAAmB,MAAM,SAC9C;KAAE,QAAQ;KAAY,KAAK,GAAgB;IAAM,IACjD;KACI,QAAQ;KACR,KAAK,GAAmB;IAC5B;IACV;GACJ;GACA,IAAM,IAAK,EAAW,GAEhB,IAAgC;IAClC;IACA;IACA,UAJa,IAAI,gBAAgB,CAIjC;IACA,OAAO;GACX;GACA,EAAmB,QAAQ,CAAC,GAAG,EAAmB,OAAO,CAAU;GAEnE,IAAI;IACA,IAAM,IAAc,MAAM,EAAU,MAAM,YACtC,EAAW,OACX,EAAY,OACZ,CACJ;IACA,EAAmB,QAAQ,EAAmB,MAAM,KAAK,MACrD,EAAE,OAAO,IAAK;KAAE,GAAG;KAAG,OAAO;KAAQ;IAAY,IAAI,CACzD;GACJ,SAAS,GAAK;IACV,IAAM,IACF,aAAe,QAAQ,EAAI,UAAU;IACzC,EAAmB,QAAQ,EAAmB,MAAM,KAAK,MACrD,EAAE,OAAO,IAAK;KAAE,GAAG;KAAG,OAAO;KAAS,OAAO;IAAQ,IAAI,CAC7D;GACJ;EACJ;EAEA,eAAe,EACX,GACA,GACF;GACE,IAAM,EAAE,iBAAc,wBAClB,GAAuB,CAAO;GASlC,EAAoB,MARG,EAAU,MAAM,sBAAsB;IACzD,WAAW,EAAQ;IACnB,QAAQ,EAAY;IACpB,SAAS,EAAW;IACpB;IACA;IACA;GACJ,CAAC,CAC2B;EAChC;EAEA,eAAe,GAAS,GAAwB;GAC5C,MAAM,EAAW,GAAS,QAAQ;EACtC;EAEA,eAAe,GAAW,GAAwB;GAC9C,MAAM,EAAW,GAAS,UAAU;EACxC;EAEA,SAAS,GAAW,GAAwB;GAGxC,AAFA,GAAoB,QAAQ,IAC5B,GAAoB,QAAQ,KAAA,GAC5B,EAAsB,QAAQ;EAClC;EAEA,eAAe,GAAiB,GAAiB;GACxC,MAAsB,OAG3B,IAAI;IAGA,AAFA,GAAqB,QAAQ,IAC7B,GAAoB,QAAQ,IAC5B,GAAoB,QAAQ,KAAA;IAC5B,IAAM,EAAE,iBAAc,wBAClB,GAAuB,EAAsB,KAAK;IAWtD,AAFA,EAAoB,MARG,EAAU,MAAM,sBAAsB;KACzD,WAAW,EAAsB,MAAM;KACvC,QAAQ,EAAY;KACpB,SAAS,EAAW;KACpB;KACA;KACA;IACJ,CAAC,CAC2B,GAC5B,GAAoB,QAAQ,IAC5B,MAAM,GAAqB,EAAY,KAAK;GAChD,QAAQ;IACJ,GAAoB,QAAQ,EAAG,6BAA6B,IACtD,EAAE,6BAA6B,IAC/B;GACV,UAAU;IACN,GAAqB,QAAQ;GACjC;EACJ;EAEA,eAAe,EAAa,GAA+B;GACvD,IAAI;IASA,AARA,GAAoB,QAAQ,IAC5B,EAAgB,QAAQ,IACxB,GAAgB,QAAQ,KAAA,GACxB,MAAM,EAAU,MAAM,WAAW;KAC7B,SAAS,EAAW;KACpB,QAAQ,EAAY;KACpB,GAAG;IACP,CAAC,GACD,EAAgB,QAAQ;GAC5B,QAAQ;IACJ,GAAgB,QAAQ,EAAG,yBAAyB,IAC9C,EAAE,yBAAyB,IAC3B;GACV,UAAU;IACN,GAAoB,QAAQ;GAChC;EACJ;EAEA,eAAe,EAAgB,GAAgB,GAAe;GAC1D,IAAM,IAAU,MAAM,EAAU,MAAM,gBAClC,EAAW,OACX,GACA,CACJ;GACA,EAAc,QAAQ,EAAc,MAAM,KAAK,MAC3C,EAAE,OAAO,IAAS;IAAE,GAAG;IAAG,OAAO,EAAQ;GAAM,IAAI,CACvD;EACJ;EAEA,eAAe,GAAW,GAAgB;GAKtC,AAJA,MAAM,EAAU,MAAM,WAAW,EAAW,OAAO,CAAM,GACzD,EAAc,QAAQ,EAAc,MAAM,QACrC,MAAM,EAAE,OAAO,CACpB,GACI,EAAY,UAAU,KACtB,MAAM,GAAa;EAE3B;EAEA,SAAS,GAAS,GAAmB;GACjC,GAAW,QAAQ;EACvB;EAUA,IAAI;EAQJ,SAAS,GAAe,GAAkC;GACtD,IAAM,UACF,EAAU,MACL,QAAQ,EAAW,OAAO,CAAM,CAAC,CACjC,MAAM,MAAS,MAAS,IAAI;GACrC,OAAO,EAAM,CAAC,CAAC,YAAY,EAAM,CAAC,CAAC,YAAY,EAAK,CAAC;EACzD;EAqDA,OAzCA,GAAM,GAAQ,OAAO,MAAc;GAC/B,IAAI,CAAC,KAAa,MAAc,IAI5B;GAEJ,IAAM,IAAiB;GAEvB,IADA,KAAc,GACV,MAAmB,KAAA,GACnB;GAEJ,IAAM,IAAiB,EAAY,OAG7B,IAAuB,GAAiB,SAExC,MAAM,GAAe,CAAc;GAErC,MAAO,UAAU,KACjB,EAAY,UAAU,GAK1B;QAAI,GAAsB;KAGtB,GAAkB,EAAW,KAAK;KAClC;IACJ;IAQA,AAPA,EAAc,QAAQ,CAAC,GACvB,EAAiB,QAAQ,CAAC,GAC1B,EAAU,QAAQ,CAAC,GAInB,MAAM,GAAa,GACnB,EAAM,QAAQ;GARd;EASJ,CAAC,GAEM;GAEH;GACA;GACA;GACA,SAAS;GACT;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GAEA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACJ;CACJ,CAAC,CAAC,CAAC;AACP"}