{
  "tool": "ai-sdk",
  "name": "Vercel AI SDK",
  "long_name": "Vercel AI SDK (ai, @ai-sdk/*)",
  "aliases": [
    "ai",
    "vercel-ai",
    "vercel-ai-sdk",
    "ai-sdk-core",
    "@ai-sdk/core",
    "@ai-sdk/react",
    "@ai-sdk/ui-utils",
    "@ai-sdk/provider"
  ],
  "homepage": "https://ai-sdk.dev",
  "url": "https://insidetheloop.dev/tools/ai-sdk",
  "markdown_url": "https://insidetheloop.dev/tools/ai-sdk.md",
  "date_modified": "2026-10-10T11:27:05Z",
  "title": "Vercel AI SDK 7.0.137: latest version, API diff and gotchas",
  "description": "Vercel AI SDK 7.0.137 (2026-10-09 UTC): install commands, our API export diff, WebSocketChatTransport, embedding dimensions, decision state and gotchas.",
  "answer": "The latest Vercel AI SDK is 7.0.137 (`ai`), released 2026-10-09 14:53 UTC; upgrade with `npm i ai@latest`. In 7.0.137, `readUIMessageStream` discards unrelated message state when reading resumed streams. In 7.0.135, `WebSocketChatTransport` was introduced alongside top-level embedding `dimensions` and a default step limit warning in `ToolLoopAgent`. In 7.0.133, `decide` added multimodal state parts, requiring raw state arrays to be wrapped in JSON objects or parts. v7 requires Zod 3.25.76+ or 4.1.8+ and Node.js 18+.",
  "latest": {
    "version": "7.0.137",
    "released_at": "2026-10-09T14:53:27Z",
    "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.137"
  },
  "upgrade": [
    {
      "label": "Install latest v7 in a project",
      "command": "npm i ai@latest @ai-sdk/openai@latest zod@^4.1.8\nnpm ls ai   # ai@7.0.137"
    },
    {
      "label": "pnpm",
      "command": "pnpm add ai@latest @ai-sdk/openai@latest zod"
    },
    {
      "label": "Migrate from v6 to v7 (run at project root)",
      "command": "npx @ai-sdk/codemod@latest v6-to-v7 .\nnpx tsc --noEmit"
    },
    {
      "label": "Stay on v6.x (maintenance line)",
      "command": "npm i ai@^6.0.303"
    }
  ],
  "verified": {
    "date": "2026-10-10",
    "version": "7.0.137",
    "lines": {
      "6": "6.0.303",
      "7": "7.0.137"
    },
    "method": "Captured CLI/type surface snapshots of ai@7.0.130 and ai@7.0.137 in throwaway Linux sandboxes (bin/tool-snapshot) and compared export declarations with the TypeScript compiler API (bin/tool-diff). Reproduced decision state array validation, embedding dimensions validation, ToolLoopAgent default step warnings, and WebSocketChatTransport frame validation in bin/sandbox-run without credentials."
  },
  "updated_at": "2026-10-10T11:27:05Z",
  "key_facts": [
    "Monorepo with core library `ai` and modular provider packages (`@ai-sdk/openai`, `@ai-sdk/anthropic`, `@ai-sdk/google`, `@ai-sdk/gateway`). 29,759,300 weekly npm downloads for `ai` (week ending 2026-10-08).",
    "Latest release: 7.0.137 (GitHub release 2026-10-09 14:53 UTC; npm publish 2026-10-09 14:54 UTC). Rapid release cadence with 17 stable versions in October 2026.",
    "Parallel maintenance lines: `ai-v6` (`6.0.303` published 2026-10-09) and `ai-v5` (`5.0.273` published 2026-10-09) remain supported on npm dist-tags for backwards compatibility.",
    "7.0.0 was released on 2026-06-25 12:47 UTC, introducing structured outputs with Standard Schema, tool call repair, durable `WorkflowAgent`, and default redaction of server errors in UI message streams.",
    "7.0.137 fixed `readUIMessageStream` to discard unrelated message state when reading resumed streams (PR #22194).",
    "7.0.136 stopped `chunkMs` and `firstChunkMs` timeouts when the model response ends so long-running local tools do not trigger model output timeouts (PR #22341).",
    "7.0.135 introduced `WebSocketChatTransport` (PR #21019), top-level `dimensions` for embedding functions (PR #22335), and warning logging when the default step limit stops a `ToolLoopAgent` (PR #22329).",
    "7.0.133 added ordered text, file, and JSON parts to decision state, rejecting raw arrays not formatted as parts (PR #22229).",
    "Peer dependencies: `zod` peer range is `^3.25.76 || ^4.1.8`. Requires Node.js 18 or later. 27,200+ GitHub stars (Apache-2.0 licence)."
  ],
  "releases": [
    {
      "version": "7.0.137",
      "released_at": "2026-10-09T14:53:27Z",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.137",
      "changes": [
        {
          "text": "`readUIMessageStream` discards unrelated message state when reading resumed streams.",
          "url": "https://github.com/vercel/ai/pull/22194"
        }
      ]
    },
    {
      "version": "7.0.136",
      "released_at": "2026-10-09T00:38:41Z",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.136",
      "changes": [
        {
          "text": "Clear `chunkMs` and `firstChunkMs` timeouts when model response ends so long-running local tools do not trigger model output timeouts.",
          "url": "https://github.com/vercel/ai/pull/22341"
        }
      ]
    },
    {
      "version": "7.0.135",
      "released_at": "2026-10-08T21:40:55Z",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.135",
      "changes": [
        {
          "text": "Add persistent `WebSocketChatTransport` with correlated streaming, backpressure, cancellation, validated protocol frames, and sequence resume.",
          "url": "https://github.com/vercel/ai/pull/21019"
        },
        {
          "text": "Add top-level `dimensions` setting for embedding functions.",
          "url": "https://github.com/vercel/ai/pull/22335"
        },
        {
          "text": "Log warning when default step limit stops a `ToolLoopAgent`.",
          "url": "https://github.com/vercel/ai/pull/22329"
        },
        {
          "text": "Prevent duplicate continuation requests for repeated tool approval responses.",
          "url": "https://github.com/vercel/ai/pull/22285"
        },
        {
          "text": "Wait for chat stream cleanup when stopping chat.",
          "url": "https://github.com/vercel/ai/pull/21798"
        }
      ]
    },
    {
      "version": "7.0.134",
      "released_at": "2026-10-08T16:50:38Z",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.134",
      "changes": [
        {
          "text": "Propagate async `sendAutomaticallyWhen` failures from tool updates.",
          "url": "https://github.com/vercel/ai/pull/22284"
        },
        {
          "text": "Preserve provider-executed tool calls when resuming streams.",
          "url": "https://github.com/vercel/ai/pull/22283"
        }
      ]
    },
    {
      "version": "7.0.133",
      "released_at": "2026-10-08T00:29:35Z",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.133",
      "changes": [
        {
          "text": "Accept multimodal input and ordered text, file, and JSON parts in `decide` state.",
          "url": "https://github.com/vercel/ai/pull/22229"
        }
      ]
    }
  ],
  "surface": [
    {
      "from": "7.0.130",
      "to": "7.0.137",
      "method": "`bin/tool-snapshot` installed both versions in a throwaway Linux sandbox and listed every export of every package entry point from the type declarations with the TypeScript compiler API (510 and 523 exported symbols), then `bin/tool-diff` compared them. In the tables, \"command\" is an exported symbol and \"flags\" are its public members (function parameters in parentheses).",
      "summary": "13 exports added, 0 removed, 7 exports with public members added or removed; 23 declarations changed in any way.",
      "commands_added": [
        "ai Experimental_DecisionState",
        "ai Experimental_DecisionStatePart",
        "ai PrepareWebSocketChatTransportReconnectToStreamRequest",
        "ai PrepareWebSocketChatTransportSendMessagesRequest",
        "ai SafeValidateWebSocketChatTransportRequestResult",
        "ai WebSocketChatTransport",
        "ai WebSocketChatTransportAbortRequest",
        "ai WebSocketChatTransportInitOptions",
        "ai WebSocketChatTransportRequest",
        "ai WebSocketChatTransportResponse",
        "ai WebSocketChatTransportResumeRequest",
        "ai WebSocketChatTransportSendRequest",
        "ai safeValidateWebSocketChatTransportRequest"
      ],
      "commands_removed": [],
      "flags": [
        {
          "command": "ai AbstractChat",
          "added": [
            "dispose"
          ],
          "removed": []
        },
        {
          "command": "ai ChatTransport",
          "added": [
            "close",
            "resumeStreamIsReplay"
          ],
          "removed": []
        },
        {
          "command": "ai DirectChatTransportOptions",
          "added": [
            "onStepEnd",
            "onStepFinish"
          ],
          "removed": []
        },
        {
          "command": "ai EmbedStartEvent",
          "added": [
            "dimensions"
          ],
          "removed": []
        },
        {
          "command": "ai EmbeddingModelCallStartEvent",
          "added": [
            "dimensions"
          ],
          "removed": []
        },
        {
          "command": "ai SerialJobExecutor",
          "added": [
            "waitForIdle"
          ],
          "removed": []
        },
        {
          "command": "ai UIMessageStreamOptions",
          "added": [
            "onStepEnd",
            "onStepFinish"
          ],
          "removed": []
        }
      ],
      "notes": [
        "13 exports added in 7.0.137, including WebSocketChatTransport and safeValidateWebSocketChatTransportRequest for persistent WebSocket chat transports, and Experimental_DecisionState / Experimental_DecisionStatePart for multimodal decision inputs.",
        "Public members added: `dispose` on AbstractChat, `close` and `resumeStreamIsReplay` on ChatTransport, `onStepEnd` and `onStepFinish` on DirectChatTransportOptions and UIMessageStreamOptions, `dimensions` on EmbedStartEvent and EmbeddingModelCallStartEvent, and `waitForIdle` on SerialJobExecutor."
      ]
    },
    {
      "from": "7.0.129",
      "to": "7.0.130",
      "method": "From source (not run): compared git tags `ai@7.0.129` and `ai@7.0.130` via `gh api repos/vercel/ai/compare/ai@7.0.129...ai@7.0.130` and inspected export declarations of `packages/ai` and `@ai-sdk/provider`.",
      "summary": "1 export added, 0 removed; 2 core streaming and agent implementations updated.",
      "commands_added": [
        "ai Experimental_DecisionRefusalError"
      ],
      "commands_removed": [],
      "flags": [],
      "notes": [
        "The last two releases of the previous patch cycle. `Experimental_DecisionRefusalError` added to `ai/error` and re-exported from `@ai-sdk/provider`.",
        "`streamText` and `ToolLoopAgent` cancel the internal reader on abort signal, ensuring promises reject without waiting for unclosed provider streams."
      ]
    },
    {
      "from": "6.0.301",
      "to": "7.0.130",
      "method": "From source (not run): compared git tags `ai@6.0.301` and `ai@7.0.130` via `gh api repos/vercel/ai/compare/ai@6.0.301...ai@7.0.130` and inspected export declarations of `packages/ai` across the v6 and v7 major lines.",
      "summary": "15 exports added, 1 removed; 5 core APIs updated across the v6 to v7 major boundary.",
      "commands_added": [
        "ai GatewayAsyncJobMetadata",
        "ai GatewayProviderMetadata",
        "ai experimental_toolCaller",
        "ai Experimental_ToolCallerTool",
        "ai Experimental_SandboxSession",
        "ai Experimental_SandboxProcess",
        "ai ToolSet",
        "ai batch",
        "ai decide",
        "ai toolSearch",
        "ai translate",
        "ai upload-file",
        "ai upload-skill",
        "ai realtime",
        "ai Experimental_DecisionRefusalError"
      ],
      "commands_removed": [
        "ai ToolCallOptions"
      ],
      "flags": [],
      "notes": [
        "Major line comparison: `ai@6.0.301` (active maintenance line) to `ai@7.0.130` (current stable).",
        "v7 replaced `ToolCallOptions` with `ToolExecutionOptions`, introduced durable `WorkflowAgent`, added Standard Schema support, and migrated evaluation helpers to `decide`."
      ]
    }
  ],
  "breaking": [
    {
      "version": "7.0.133",
      "change": "Arrays passed directly as decision `state` now contain `DecisionStatePart[]` (text, file, or json parts). Passing a raw array of items directly as `state` throws `AI_InvalidArgumentError: Invalid argument for parameter state: must be a string, JSON object, or array of text, file, or json parts` (PR #22229).",
      "migrate": "Wrap raw JSON arrays in an object (`state: { items: [...] }`) or pass as an explicit JSON part: `state: [{ type: 'json', value: [...] }]`.",
      "url": "https://github.com/vercel/ai/pull/22229"
    },
    {
      "version": "7.0.135",
      "change": "Top-level `dimensions` parameter added to `embed` and `embedMany` (PR #22335). Non-positive (`<= 0`) or non-integer dimension values throw `AI_InvalidArgumentError: Invalid argument for parameter dimensions: dimensions must be a positive integer` before calling provider models.",
      "migrate": "Ensure requested embedding dimensions are positive integers supported by the provider, or omit the parameter to use the model default.",
      "url": "https://github.com/vercel/ai/pull/22335"
    },
    {
      "version": "7.0.129",
      "change": "Portable `max` reasoning level added (PR #22045). Widens `LanguageModelV4CallOptions['reasoning']` and `ReasoningLevel`. Third-party providers and consumers with exhaustive switch statements or `Record<ReasoningLevel, ...>` mappings fail TypeScript compilation until `max` is handled.",
      "migrate": "Update exhaustive switches or records over `ReasoningLevel` to handle the new `'max'` level.",
      "url": "https://github.com/vercel/ai/pull/22045"
    },
    {
      "version": "7.0.128",
      "change": "`experimental_evaluate` was renamed to `experimental_decide` (PR #21935); `Experimental_EvaluationUnsupportedQuestionTypeError` is deprecated in favor of `Experimental_DecisionUnsupportedQuestionTypeError`.",
      "migrate": "Update imports from `experimental_evaluate` to `experimental_decide`.",
      "url": "https://github.com/vercel/ai/pull/21935"
    },
    {
      "version": "7.0.0",
      "change": "UI message streams redact server error details by default (commit f18b08f). `toUIMessageStream`, `createUIMessageStream`, and `toUIMessageChunk` default their `onError` callback to generic `'An error occurred.'` instead of serializing raw server error details to clients.",
      "migrate": "Pass an explicit `onError: (error) => ...` callback to `toUIMessageStream` or `createUIMessageStream` if client applications require custom error strings.",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.0"
    }
  ],
  "gotchas": [
    {
      "title": "Passing raw array directly as decision state throws `InvalidArgumentError`",
      "version": "7.0.133",
      "command": "// Passing raw array of items directly as decision state in 7.0.133+\nawait experimental_decide({ model, state: ['alpha', 'beta'], questions });",
      "output": "AI_InvalidArgumentError: Invalid argument for parameter state: must be a string, JSON object, or array of text, file, or json parts",
      "fix": "In 7.0.133+, raw arrays passed as `state` are treated as `DecisionStatePart[]`. Wrap arrays in an object (`state: { items: ['alpha', 'beta'] }`) or an explicit JSON part (`state: [{ type: 'json', value: ['alpha', 'beta'] }]`).",
      "url": "https://github.com/vercel/ai/pull/22229"
    },
    {
      "title": "Negative or non-integer embedding dimensions throw `InvalidArgumentError`",
      "version": "7.0.135",
      "command": "// Calling embed with negative or non-integer dimensions\nawait embed({ model, value: 'test string', dimensions: -1 });",
      "output": "AI_InvalidArgumentError: Invalid argument for parameter dimensions: dimensions must be a positive integer",
      "fix": "Provide a positive integer for `dimensions` (e.g., `dimensions: 512`) supported by the model and provider, or omit `dimensions` to use the model default.",
      "url": "https://github.com/vercel/ai/pull/22335"
    },
    {
      "title": "ToolLoopAgent default step limit logs warning on 20 steps",
      "version": "7.0.135",
      "command": "// ToolLoopAgent tool loop reaches default 20-step limit without explicit stopWhen\nconst agent = new ToolLoopAgent({ model, tools: { ping } });\nawait agent.generate({ prompt: 'Keep pinging' });",
      "output": "(node:62) Warning: AI SDK Warning (mock-provider / mock-model): The tool loop stopped because it reached the default stopWhen condition, isStepCount(20). To allow more steps, set stopWhen to isStepCount(...) with a higher limit or provide a custom stop condition. Learn more: https://ai-sdk.dev/docs/agents/loop-control",
      "fix": "Pass an explicit `stopWhen: isStepCount(50)` (or custom condition) to allow additional steps, or set `globalThis.AI_SDK_LOG_WARNINGS = false` to suppress warning logging.",
      "url": "https://github.com/vercel/ai/pull/22329"
    },
    {
      "title": "Malformed WebSocket chat request frame rejected",
      "version": "7.0.135",
      "command": "// Validating malformed incoming WebSocket chat request frame\nawait safeValidateWebSocketChatTransportRequest({ value: { type: 'unknown_type' } });",
      "output": "error: Invalid WebSocket chat request frame.",
      "fix": "Ensure client frames conform to `WebSocketChatTransportRequest` specifications ('send', 'resume', or 'abort' with required `requestId` and headers).",
      "url": "https://github.com/vercel/ai/pull/21019"
    },
    {
      "title": "AbortSignal cancellation rejects pending result promises with AbortError",
      "version": "7.0.130",
      "command": "const controller = new AbortController();\nconst result = streamText({ model, prompt: 'Hello', abortSignal: controller.signal });\ncontroller.abort(new DOMException('User cancelled', 'AbortError'));\nawait result.text;",
      "output": "AbortError: User cancelled",
      "fix": "In 7.0.130+, `result.text`, `result.steps`, `result.finishReason`, and `result.totalUsage` reject immediately when `abort()` is invoked. Wrap calls consuming result promises in try/catch and inspect `error.name === 'AbortError'`.",
      "url": "https://github.com/vercel/ai/pull/22184"
    }
  ],
  "monthly": [
    {
      "month": "2026-10",
      "versions": "7.0.127 to 7.0.137; 6.0.300 to 6.0.303; 5.0.272 to 5.0.273 (17 stable releases to 2026-10-10)",
      "highlights": [
        {
          "text": "7.0.137 (2026-10-09): discard unrelated message state when reading resumed streams (PR #22194).",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.137"
        },
        {
          "text": "7.0.135 (2026-10-08): persistent WebSocket ChatTransport (PR #21019); top-level dimensions for embeddings (PR #22335); tool loop default step limit warning (PR #22329).",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.135"
        },
        {
          "text": "7.0.133 (2026-10-08): multimodal input and ordered state parts in decide (PR #22229).",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.133"
        },
        {
          "text": "7.0.130 (2026-10-07): reject result promises immediately on abort signal (PR #22184); report decision refusals as DecisionRefusalError (PR #22203).",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.130"
        }
      ]
    },
    {
      "month": "2026-09",
      "versions": "7.0.88 to 7.0.126 (83 stable releases)",
      "highlights": [
        {
          "text": "7.0.127 (2026-10-01): tool search callback ranking and configurable maxResults (PR #21903, #21897).",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.127"
        },
        {
          "text": "7.0.126 (2026-09-30): clear tool approvals when addToolOutput runs (PR #21879).",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.126"
        },
        {
          "text": "7.0.100 (2026-09-15): expose typed AI SDK errors for UI transport and completion failures.",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.100"
        }
      ]
    },
    {
      "month": "2026-08",
      "versions": "7.0.48 to 7.0.87 (88 stable releases)",
      "highlights": [
        {
          "text": "7.0.87 (2026-08-31): preserve approval descriptors in UI message streams.",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.87"
        },
        {
          "text": "7.0.50 (2026-08-04): asynchronous start and webhook APIs for experimental video model interface.",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.50"
        }
      ]
    },
    {
      "month": "2026-07",
      "versions": "7.0.1 to 7.0.47; 6.0.218 to 6.0.245 (74 stable releases)",
      "highlights": [
        {
          "text": "7.0.40 (2026-07-25): deprecate Experimental_GeneratedImage in favor of GeneratedFile.",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.40"
        },
        {
          "text": "7.0.10 (2026-07-05): add maxRetries option for failed MCP tool calls.",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.10"
        }
      ]
    },
    {
      "month": "2026-06",
      "versions": "6.0.194 to 6.0.217; 7.0.0 (50 stable releases)",
      "highlights": [
        {
          "text": "7.0.0 (2026-06-25): v7 major release with Standard Schema, durable WorkflowAgent, timeout DOMException classification, and UI message stream error redaction.",
          "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.0"
        },
        {
          "text": "6.0.210 (2026-06-15): publish all packages under the @ai-v6 dist tag for ongoing maintenance.",
          "url": "https://github.com/vercel/ai/releases/tag/ai%406.0.210"
        }
      ]
    },
    {
      "month": "2026-05",
      "versions": "6.0.173 to 6.0.193 (27 stable releases)",
      "highlights": [
        {
          "text": "6.0.190 (2026-05-28): sandbox shell execution abstractions and file I/O helpers in provider-utils.",
          "url": "https://github.com/vercel/ai/releases/tag/ai%406.0.190"
        },
        {
          "text": "6.0.180 (2026-05-12): gateway retry support for transient errors and connection drops.",
          "url": "https://github.com/vercel/ai/releases/tag/ai%406.0.180"
        }
      ]
    }
  ],
  "sources": [
    {
      "title": "vercel/ai releases (GitHub API)",
      "url": "https://api.github.com/repos/vercel/ai/releases",
      "read": "2026-10-10"
    },
    {
      "title": "ai on the npm registry (dist-tags, versions, publish timestamps)",
      "url": "https://registry.npmjs.org/ai",
      "read": "2026-10-10"
    },
    {
      "title": "npm weekly downloads statistics for ai",
      "url": "https://api.npmjs.org/downloads/point/last-week/ai",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK 7.0.137 release notes",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.137",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK 7.0.136 release notes",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.136",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK 7.0.135 release notes",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.135",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK 7.0.134 release notes",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.134",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK 7.0.133 release notes",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.133",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK 7.0.132 release notes",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.132",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK 7.0.131 release notes",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.131",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK 7.0.130 release notes",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.130",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK 7.0.0 release notes (v7 major release overview)",
      "url": "https://github.com/vercel/ai/releases/tag/ai%407.0.0",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22194: prevent readUIMessageStream from adopting content from an unrelated assistant turn",
      "url": "https://github.com/vercel/ai/pull/22194",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22341: clear chunkMs timeout during tool execution",
      "url": "https://github.com/vercel/ai/pull/22341",
      "read": "2026-10-10"
    },
    {
      "title": "PR #21019: add persistent WebSocket ChatTransport with correlated streaming and validated protocol frames",
      "url": "https://github.com/vercel/ai/pull/21019",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22335: add top level dimensions setting for embedding functions",
      "url": "https://github.com/vercel/ai/pull/22335",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22329: log warning when default step limit stops a tool loop",
      "url": "https://github.com/vercel/ai/pull/22329",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22285: prevent duplicate continuations for repeated tool approval responses",
      "url": "https://github.com/vercel/ai/pull/22285",
      "read": "2026-10-10"
    },
    {
      "title": "PR #21798: wait for chat stream cleanup when stopping",
      "url": "https://github.com/vercel/ai/pull/21798",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22284: surface async sendAutomaticallyWhen failures from tool updates",
      "url": "https://github.com/vercel/ai/pull/22284",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22283: preserve provider-executed tool calls while resuming chat streams",
      "url": "https://github.com/vercel/ai/pull/22283",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22229: accept multimodal input in decide",
      "url": "https://github.com/vercel/ai/pull/22229",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22268: introduce onUIMessageStepEnd callback to persist messages",
      "url": "https://github.com/vercel/ai/pull/22268",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22184: reject pending result promises on abort signal",
      "url": "https://github.com/vercel/ai/pull/22184",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22203: report decision refusals as refusal answers and DecisionRefusalError",
      "url": "https://github.com/vercel/ai/pull/22203",
      "read": "2026-10-10"
    },
    {
      "title": "PR #22045: add portable max reasoning level across supported providers",
      "url": "https://github.com/vercel/ai/pull/22045",
      "read": "2026-10-10"
    },
    {
      "title": "PR #21935: rename experimental_evaluate to experimental_decide",
      "url": "https://github.com/vercel/ai/pull/21935",
      "read": "2026-10-10"
    },
    {
      "title": "PR #21994: use AISDKError InvalidResponseDataError for audio format errors",
      "url": "https://github.com/vercel/ai/pull/21994",
      "read": "2026-10-10"
    },
    {
      "title": "package.json manifest of ai package at tag ai@7.0.137",
      "url": "https://github.com/vercel/ai/blob/ai@7.0.137/packages/ai/package.json",
      "read": "2026-10-10"
    },
    {
      "title": "vercel/ai repository (stars, description, licence)",
      "url": "https://github.com/vercel/ai",
      "read": "2026-10-10"
    },
    {
      "title": "Vercel AI SDK documentation homepage",
      "url": "https://ai-sdk.dev",
      "read": "2026-10-10"
    }
  ],
  "fixes": []
}
