Skip to content

feat: update AI SDK to v7#1922

Draft
cjol wants to merge 2 commits into
mainfrom
fix/jul9-ai-sdk-v7
Draft

feat: update AI SDK to v7#1922
cjol wants to merge 2 commits into
mainfrom
fix/jul9-ai-sdk-v7

Conversation

@cjol

@cjol cjol commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

This PR updates the repo from AI SDK v6 to v7 across the published packages, examples, guides, experiments, and starters. It migrates the current implementations only: new optimisations or improvements made available by the v7 SDK are intentionally out of scope for this change.

Why

  • Consumers need the Agents SDK packages to work with AI SDK v7 and the matching @ai-sdk/* package majors.
  • A version-only bump was not enough because v7 renamed prompt, stop-condition, lifecycle callback, telemetry, and tool execution APIs used throughout the repo.
  • We could have renamed the Think-facing API to match v7 directly, but that would add a second API migration on top of the dependency migration. This keeps Think's existing caller-facing names where practical and translates at the AI SDK boundary.
  • We could have adopted v7-only follow-up improvements like stateless UI message stream helpers, final-step result audits, or media part cleanup here, but those are behaviour and design choices rather than required compatibility fixes.

Public API Surface

Symbol Kind Notes
package peer dependencies Breaking Published packages now require ai@7 and @ai-sdk/react@4 where applicable.
@cloudflare/think TurnConfig.experimental_telemetry Changed Still accepted, but now typed against the v7 telemetry option. v6 metadata is no longer supported by AI SDK v7.
@cloudflare/think TurnConfig.telemetry Additive Accepted as the v7 option name and forwarded ahead of experimental_telemetry when present.
@cloudflare/think StepContext Changed Still exported under the same name, now derived from GenerateTextOnStepFinishCallback.
@cloudflare/ai-chat AIChatAgent.onChatMessage Changed The onFinish callback type now uses GenerateTextOnFinishCallback.
  • Think still exposes system, onStepFinish, and experimental_telemetry as current top-level API names where callers already use them.
  • Think adapts v7 onToolExecutionEnd events back into the existing ToolCallResultContext shape for afterToolCall hooks and extensions.
  • ToolCallResultContext.stepNumber is now undefined for tool completion callbacks because AI SDK v7 no longer provides that value on the tool execution end event.

Code Changes

  • Dependency ranges move from ai@6 and @ai-sdk/@3 to ai@7 and @ai-sdk/@4 across packages, examples, experiments, starters, and the lockfile.
  • AI SDK call sites use v7 names: instructions instead of system, isStepCount instead of stepCountIs, telemetry instead of experimental_telemetry at the SDK boundary, and onStepEnd or onToolExecutionEnd instead of the old lifecycle callback names.
  • Think keeps its public turn configuration and hook names stable while translating them into v7 streamText options internally.
  • Tool schema adapters in agents, codemode, and browser tooling normalize function-valued tool descriptions because downstream connectors still expect string descriptions.
  • agent-think drops telemetry metadata and uses functionId because AI SDK v7 removed TelemetryOptions.metadata.
  • forever-chat uses includeRawChunks directly for raw OpenAI response chunk handling.

Compatibility

  • Consumers of published packages must install ai@7 and @ai-sdk/*@4-compatible peers.
  • Code that passed TelemetryOptions.metadata through Think's experimental_telemetry must move that identity into supported v7 telemetry fields or an integration.
  • Code that relied on stepNumber inside Think tool completion callbacks should treat it as unavailable for v7-backed executions.
  • This change does not migrate callers to new v7 capabilities beyond what is needed to keep the current implementations working.

This PR updates the repo from AI SDK v6 to v7 across the published packages, examples, guides, experiments, and starters. It migrates the current implementations only: new optimisations or improvements made available by the v7 SDK are intentionally out of scope for this change.

## Why

- Consumers need the Agents SDK packages to work with AI SDK v7 and the matching @ai-sdk/* package majors.
- A version-only bump was not enough because v7 renamed prompt, stop-condition, lifecycle callback, telemetry, and tool execution APIs used throughout the repo.
- We could have renamed the Think-facing API to match v7 directly, but that would add a second API migration on top of the dependency migration. This keeps Think's existing caller-facing names where practical and translates at the AI SDK boundary.
- We could have adopted v7-only follow-up improvements like stateless UI message stream helpers, final-step result audits, or media part cleanup here, but those are behaviour and design choices rather than required compatibility fixes.

## Public API Surface

| Symbol | Kind | Notes |
| ------ | ---- | ----- |
| package peer dependencies | Breaking | Published packages now require ai@7 and @ai-sdk/react@4 where applicable. |
| @cloudflare/think TurnConfig.experimental_telemetry | Changed | Still accepted, but now typed against the v7 telemetry option. v6 metadata is no longer supported by AI SDK v7. |
| @cloudflare/think TurnConfig.telemetry | Additive | Accepted as the v7 option name and forwarded ahead of experimental_telemetry when present. |
| @cloudflare/think StepContext | Changed | Still exported under the same name, now derived from GenerateTextOnStepFinishCallback. |
| @cloudflare/ai-chat AIChatAgent.onChatMessage | Changed | The onFinish callback type now uses GenerateTextOnFinishCallback. |

- Think still exposes system, onStepFinish, and experimental_telemetry as current top-level API names where callers already use them.
- Think adapts v7 onToolExecutionEnd events back into the existing ToolCallResultContext shape for afterToolCall hooks and extensions.
- ToolCallResultContext.stepNumber is now undefined for tool completion callbacks because AI SDK v7 no longer provides that value on the tool execution end event.

## Code Changes

- Dependency ranges move from ai@6 and @ai-sdk/*@3 to ai@7 and @ai-sdk/*@4 across packages, examples, experiments, starters, and the lockfile.
- AI SDK call sites use v7 names: instructions instead of system, isStepCount instead of stepCountIs, telemetry instead of experimental_telemetry at the SDK boundary, and onStepEnd or onToolExecutionEnd instead of the old lifecycle callback names.
- Think keeps its public turn configuration and hook names stable while translating them into v7 streamText options internally.
- Tool schema adapters in agents, codemode, and browser tooling normalize function-valued tool descriptions because downstream connectors still expect string descriptions.
- agent-think drops telemetry metadata and uses functionId because AI SDK v7 removed TelemetryOptions.metadata.
- forever-chat uses includeRawChunks directly for raw OpenAI response chunk handling.

## Compatibility

- Consumers of published packages must install ai@7 and @ai-sdk/*@4-compatible peers.
- Code that passed TelemetryOptions.metadata through Think's experimental_telemetry must move that identity into supported v7 telemetry fields or an integration.
- Code that relied on stepNumber inside Think tool completion callbacks should treat it as unavailable for v7-backed executions.
- This change does not migrate callers to new v7 capabilities beyond what is needed to keep the current implementations working.
@changeset-bot

changeset-bot Bot commented Jul 10, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: e15610d

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 5 packages
Name Type
agents Minor
@cloudflare/ai-chat Minor
@cloudflare/codemode Minor
@cloudflare/think Minor
@cloudflare/agent-think Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@cjol

cjol commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

AI SDK v7 breaking changes encountered

Area Breaking change Resolution / status
Package majors ai moved from v6 to v7, and @ai-sdk/* packages moved from v3 to v4. Updated package ranges across the repo and regenerated pnpm-lock.yaml. Published package peer ranges now require the v7-compatible majors.
Stop conditions stepCountIs was renamed to isStepCount; the old name remains as a deprecated alias. Updated imports and call sites in Think, voice tests, ai-chat e2e, codemode e2e, examples, and experiments.
Prompt option AI SDK call sites now prefer top-level instructions instead of system. Updated AI SDK call sites. Think’s own public API still exposes system to avoid adding a second API migration in this PR.
Lifecycle callbacks Several callback names changed: onStepFinish to onStepEnd, onFinish to onEnd, and experimental_onToolCallFinish to onToolExecutionEnd. Updated AI SDK-facing call sites and callback type imports. Think’s own hook name onStepFinish remains unchanged for callers.
Tool completion event shape onToolExecutionEnd no longer reports { success, output, error, durationMs, stepNumber }; it reports toolExecutionMs plus a toolOutput discriminated union, with no stepNumber. Think maps the v7 event back into its existing ToolCallResultContext shape. durationMs is preserved from toolExecutionMs; stepNumber is now undefined.
Telemetry options experimental_telemetry was renamed to telemetry; TelemetryOptions.metadata was removed. OpenTelemetry integration moved out to @ai-sdk/otel. Think forwards config.telemetry ?? config.experimental_telemetry as telemetry. agent-think moved run identity into functionId. No @ai-sdk/otel registration was added because there was no previous OTEL registration path here.
Usage token fields usage.reasoningTokens and usage.cachedInputTokens were removed in favour of token detail objects. Extension step-finish snapshots read the v7 fields with fallback support for the old shape.
Tool execution options ToolCallOptions was replaced by generic ToolExecutionOptions<CONTEXT>. Tests and tool execution sites were updated to pass the required context shape where needed.
Tool descriptions Tool.description may now be a string or function. Several local adapters still need a plain string or optional string. Normalized function-valued descriptions away in agents browser/client tooling and @cloudflare/codemode connectors.
Portable declaration output Inferred return types from tool() can pull in non-portable provider utility types. Added explicit Tool / ToolSet return annotations on workspace and extension tool factories where needed.
Runtime/module baseline AI SDK packages are ESM-only and require Node 22+. No repo changes were needed: the monorepo is already ESM and local development is on Node 24.
Stream result property StreamTextResult.fullStream was renamed to stream; the alias still works. Left existing fullStream usage in place where it is still functional. Cleanup can happen separately.
UI message stream helpers Result instance methods like result.toUIMessageStream(...) are deprecated in favour of top-level helpers. Left current usage in place. This PR is a compatibility migration, not a behaviour/API cleanup pass.
System messages inside messages System-role messages inside messages or prompt require allowSystemInMessages: true by default. No code change was needed for the audited paths because Think sends system text through the top-level instructions/system path. Consumers with persisted system-role messages may need a separate audit.
Multi-step result accumulation Top-level usage, toolCalls, content, and related fields now accumulate across steps; final-step-only values are under finalStep. No broad behaviour change was made. Consumers that assumed final-step-only semantics should be audited separately.
Image/media content parts v7 prefers file over legacy image, image-data, and media parts, although many legacy shapes are auto-migrated at runtime. Left existing image-data outputs in workspace tools because runtime migration covers them. Cleanup is deferred.
workers-ai-provider peers workers-ai-provider@3.3.0 still declares peers for AI SDK v6 / @ai-sdk/* v3. Installed with the v7 stack and kept the existing paths working in this repo. This remains an upstream peer-range follow-up.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant