ai 7.0.128 → 7.0.129
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.
- package/CHANGELOG.md +35 -0
- package/dist/index.d.ts +18 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +148 -32
- package/dist/index.js.map +1 -1
- package/dist/internal/index.d.ts +10 -2
- package/dist/internal/index.d.ts.map +1 -1
- package/dist/internal/index.js +68 -16
- package/dist/internal/index.js.map +1 -1
- package/docs/02-foundations/06-provider-options.mdx +11 -10
- package/docs/03-agents/02-building-agents.mdx +16 -11
- package/docs/03-agents/07-workflow-agent.mdx +3 -3
- package/docs/03-ai-sdk-core/17-runtime-and-tool-context.mdx +18 -14
- package/docs/03-ai-sdk-core/25-settings.mdx +3 -2
- package/docs/03-ai-sdk-core/26-reasoning.mdx +12 -5
- package/docs/03-ai-sdk-core/32-decisions.mdx +17 -20
- package/docs/03-ai-sdk-core/35-image-generation.mdx +2 -0
- package/docs/04-ai-sdk-ui/21-error-handling.mdx +28 -3
- package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +2 -2
- package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +2 -2
- package/package.json +15 -15
- package/src/generate-object/generate-object.ts +10 -0
- package/src/generate-object/stream-object.ts +10 -0
- package/src/generate-speech/index.ts +13 -1
- package/src/generate-text/generate-text.ts +3 -1
- package/src/generate-text/tool-approval-signature.ts +7 -4
- package/src/global.ts +2 -1
- package/src/logger/deprecations.ts +72 -0
- package/src/logger/log-warnings.ts +25 -3
- package/src/model/as-language-model-v3.ts +4 -0
- package/src/prompt/convert-to-language-model-prompt.ts +7 -1
- package/src/realtime/encode-realtime-frame.ts +7 -2
- package/src/transcribe/index.ts +13 -1
- package/src/types/index.ts +1 -0
- package/src/types/language-model.ts +9 -1
- package/src/types/usage.ts +21 -0
- package/src/ui/chat.ts +16 -8
- package/src/ui/convert-to-model-messages.ts +40 -8
- package/src/ui/http-chat-transport.ts +5 -3
- package/src/ui/process-text-stream.ts +5 -1
- package/src/ui/text-stream-chat-transport.ts +3 -1
- package/src/ui/ui-messages.ts +8 -0
- package/src/ui/unavailable-tool.ts +17 -0
- package/src/ui/validate-ui-messages.ts +10 -2
|
@@ -69,18 +69,19 @@ console.log(
|
|
|
69
69
|
);
|
|
70
70
|
```
|
|
71
71
|
|
|
72
|
-
| Value | Behavior
|
|
73
|
-
| ----------- |
|
|
74
|
-
| `'none'` | No reasoning (GPT-5.1 models only)
|
|
75
|
-
| `'minimal'` | Bare-minimum reasoning
|
|
76
|
-
| `'low'` | Fast, concise reasoning
|
|
77
|
-
| `'medium'` | Balanced (default)
|
|
78
|
-
| `'high'` | Thorough reasoning
|
|
79
|
-
| `'xhigh'` |
|
|
72
|
+
| Value | Behavior |
|
|
73
|
+
| ----------- | ---------------------------------------- |
|
|
74
|
+
| `'none'` | No reasoning (GPT-5.1 models only) |
|
|
75
|
+
| `'minimal'` | Bare-minimum reasoning |
|
|
76
|
+
| `'low'` | Fast, concise reasoning |
|
|
77
|
+
| `'medium'` | Balanced (default) |
|
|
78
|
+
| `'high'` | Thorough reasoning |
|
|
79
|
+
| `'xhigh'` | Extra-high reasoning on supported models |
|
|
80
|
+
| `'max'` | Maximum reasoning on supported models |
|
|
80
81
|
|
|
81
82
|
<Note>
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
Supported effort levels vary by model. Using an effort with an unsupported
|
|
84
|
+
model will result in an error.
|
|
84
85
|
</Note>
|
|
85
86
|
|
|
86
87
|
### Reasoning Summary
|
|
@@ -85,7 +85,9 @@ results. If a tool needs server-side values such as credentials, scoped
|
|
|
85
85
|
permissions, or default settings, pass them through `toolsContext` and declare
|
|
86
86
|
them with the tool's `contextSchema`.
|
|
87
87
|
|
|
88
|
-
|
|
88
|
+
Set `runtimeContext` and `toolsContext` in the `ToolLoopAgent` constructor.
|
|
89
|
+
|
|
90
|
+
```ts
|
|
89
91
|
import { ToolLoopAgent, tool } from 'ai';
|
|
90
92
|
import { z } from 'zod';
|
|
91
93
|
|
|
@@ -105,6 +107,16 @@ const agent = new ToolLoopAgent({
|
|
|
105
107
|
searchTickets(query, context.accountId, context.apiKey),
|
|
106
108
|
}),
|
|
107
109
|
},
|
|
110
|
+
runtimeContext: {
|
|
111
|
+
requestId: 'req_abc',
|
|
112
|
+
escalated: false,
|
|
113
|
+
},
|
|
114
|
+
toolsContext: {
|
|
115
|
+
searchTickets: {
|
|
116
|
+
apiKey: process.env.SUPPORT_API_KEY!,
|
|
117
|
+
accountId: 'acct_123',
|
|
118
|
+
},
|
|
119
|
+
},
|
|
108
120
|
prepareStep: async ({ runtimeContext }) => {
|
|
109
121
|
if (runtimeContext.escalated) {
|
|
110
122
|
return { temperature: 0.1 };
|
|
@@ -116,19 +128,12 @@ const agent = new ToolLoopAgent({
|
|
|
116
128
|
|
|
117
129
|
const result = await agent.generate({
|
|
118
130
|
prompt: 'Find open billing tickets for this account.',
|
|
119
|
-
runtimeContext: {
|
|
120
|
-
requestId: 'req_abc',
|
|
121
|
-
escalated: false,
|
|
122
|
-
},
|
|
123
|
-
toolsContext: {
|
|
124
|
-
searchTickets: {
|
|
125
|
-
apiKey: process.env.SUPPORT_API_KEY!,
|
|
126
|
-
accountId: 'acct_123',
|
|
127
|
-
},
|
|
128
|
-
},
|
|
129
131
|
});
|
|
130
132
|
```
|
|
131
133
|
|
|
134
|
+
For context that changes with each invocation, use `callOptionsSchema` and
|
|
135
|
+
`prepareCall`. See [Configuring Call Options](/docs/agents/configuring-call-options).
|
|
136
|
+
|
|
132
137
|
Model call settings returned from `prepareStep`, such as `temperature`, apply
|
|
133
138
|
only to the current step. Later steps use the agent's top-level setting unless
|
|
134
139
|
they return another override.
|
|
@@ -36,10 +36,10 @@ For simpler use cases that don't need durability, use [`ToolLoopAgent`](/docs/ag
|
|
|
36
36
|
## Installation
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
npm install @ai-sdk/workflow workflow@
|
|
39
|
+
npm install @ai-sdk/workflow workflow@5
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
-
`@ai-sdk/workflow` requires Workflow 5,
|
|
42
|
+
`@ai-sdk/workflow` requires Workflow 5, as well as the `ai` package and `zod` peer dependencies. The `workflow` package provides the Workflow DevKit runtime (`getWritable`, `'use workflow'`, `'use step'`).
|
|
43
43
|
|
|
44
44
|
## Creating a WorkflowAgent
|
|
45
45
|
|
|
@@ -691,7 +691,7 @@ export type MyAgentUIMessage = InferWorkflowAgentUIMessage<typeof myAgent>;
|
|
|
691
691
|
Install the new package alongside `workflow`:
|
|
692
692
|
|
|
693
693
|
```bash
|
|
694
|
-
npm install @ai-sdk/workflow workflow@
|
|
694
|
+
npm install @ai-sdk/workflow workflow@5
|
|
695
695
|
```
|
|
696
696
|
|
|
697
697
|
### Write `ModelCallStreamPart`, not `UIMessageChunk`
|
|
@@ -16,14 +16,14 @@ should affect execution.
|
|
|
16
16
|
|
|
17
17
|
## Context Types
|
|
18
18
|
|
|
19
|
-
| Concept | Where you define it
|
|
20
|
-
| --------------------------------- |
|
|
21
|
-
| `runtimeContext` | `generateText
|
|
22
|
-
| `toolsContext` | `generateText
|
|
23
|
-
| tool `context` | Each tool's `toolsContext` entry, validated by its `contextSchema`
|
|
24
|
-
| `toolContext` | Derived from one tool's context
|
|
25
|
-
| `telemetry.includeRuntimeContext` | The generation or
|
|
26
|
-
| `telemetry.includeToolsContext` | The generation or
|
|
19
|
+
| Concept | Where you define it | Where you read it | Use it for |
|
|
20
|
+
| --------------------------------- | ------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------- |
|
|
21
|
+
| `runtimeContext` | `generateText` or `streamText` calls; `ToolLoopAgent` settings or `prepareCall` | `prepareStep`, lifecycle callbacks, step results, and telemetry | Shared generation or agent state |
|
|
22
|
+
| `toolsContext` | `generateText` or `streamText` calls; `ToolLoopAgent` settings or `prepareCall` | `prepareStep`, approval callbacks, tool context resolution, and tool description functions | A map of per-tool context values keyed by tool name |
|
|
23
|
+
| tool `context` | Each tool's `toolsContext` entry, validated by its `contextSchema` | Tool description functions, tool `execute`, `needsApproval`, and tool input lifecycle callbacks | Values needed by one tool |
|
|
24
|
+
| `toolContext` | Derived from one tool's context | Tool approval callbacks and tool execution events | The event/callback name for one tool's context |
|
|
25
|
+
| `telemetry.includeRuntimeContext` | The generation call or `ToolLoopAgent` settings | Telemetry filtering | Top-level `runtimeContext` properties to include in telemetry |
|
|
26
|
+
| `telemetry.includeToolsContext` | The generation call or `ToolLoopAgent` settings | Telemetry filtering | Top-level tool context properties to include in telemetry |
|
|
27
27
|
|
|
28
28
|
In agents, `runtimeContext` is the agent's shared runtime state. It flows
|
|
29
29
|
through the loop and can be read or updated in `prepareStep` between model
|
|
@@ -31,7 +31,7 @@ calls. Tool-specific data stays in `toolsContext`, where each tool receives only
|
|
|
31
31
|
its own validated `context`.
|
|
32
32
|
|
|
33
33
|
```txt
|
|
34
|
-
generateText / streamText / ToolLoopAgent
|
|
34
|
+
generateText / streamText / ToolLoopAgent settings
|
|
35
35
|
-> runtimeContext
|
|
36
36
|
-> prepareStep, lifecycle callbacks, step results
|
|
37
37
|
-> telemetry, filtered by telemetry.includeRuntimeContext
|
|
@@ -123,6 +123,10 @@ Treat tool context as immutable inside tools. If you need to change tool context
|
|
|
123
123
|
between steps, inspect the previous step in `prepareStep` and return an updated
|
|
124
124
|
`toolsContext`.
|
|
125
125
|
|
|
126
|
+
For `ToolLoopAgent`, set context in the constructor. For context that changes
|
|
127
|
+
with each invocation, use `callOptionsSchema` and `prepareCall`. See
|
|
128
|
+
[Configuring Call Options](/docs/agents/configuring-call-options).
|
|
129
|
+
|
|
126
130
|
## Telemetry Context Filtering
|
|
127
131
|
|
|
128
132
|
Context often contains values that are useful inside your application but should
|
|
@@ -131,7 +135,7 @@ include selected top-level runtime context properties in telemetry, and
|
|
|
131
135
|
`telemetry.includeToolsContext` to include selected top-level tool context
|
|
132
136
|
properties per tool.
|
|
133
137
|
|
|
134
|
-
```ts
|
|
138
|
+
```ts
|
|
135
139
|
import { ToolLoopAgent, tool } from 'ai';
|
|
136
140
|
import { z } from 'zod';
|
|
137
141
|
|
|
@@ -156,10 +160,6 @@ const customerLookup = tool({
|
|
|
156
160
|
const agent = new ToolLoopAgent({
|
|
157
161
|
model: __MODEL__,
|
|
158
162
|
tools: { customerLookup },
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
const result = await agent.generate({
|
|
162
|
-
prompt: 'Check whether customer cust_123 is eligible for priority support.',
|
|
163
163
|
runtimeContext: {
|
|
164
164
|
requestId: 'req_abc',
|
|
165
165
|
tenantId: 'tenant_123',
|
|
@@ -182,6 +182,10 @@ const result = await agent.generate({
|
|
|
182
182
|
},
|
|
183
183
|
},
|
|
184
184
|
});
|
|
185
|
+
|
|
186
|
+
const result = await agent.generate({
|
|
187
|
+
prompt: 'Check whether customer cust_123 is eligible for priority support.',
|
|
188
|
+
});
|
|
185
189
|
```
|
|
186
190
|
|
|
187
191
|
In this example, telemetry receives `runtimeContext` with only `requestId` and the
|
|
@@ -101,9 +101,10 @@ Controls how much reasoning the model performs before generating a response.
|
|
|
101
101
|
| `'low'` | Fast, concise reasoning |
|
|
102
102
|
| `'medium'` | Balanced reasoning |
|
|
103
103
|
| `'high'` | Thorough reasoning |
|
|
104
|
-
| `'xhigh'` |
|
|
104
|
+
| `'xhigh'` | Extra-high reasoning |
|
|
105
|
+
| `'max'` | Maximum reasoning |
|
|
105
106
|
|
|
106
|
-
|
|
107
|
+
Provider-specific settings take precedence over the corresponding fields derived from `reasoning`. Partial configurations can still use portable reasoning to fill missing fields; summary and display options can be used alongside it. For example, Bedrock preserves an explicit thinking budget while deriving a missing enabled type from portable reasoning.
|
|
107
108
|
|
|
108
109
|
See the [reasoning guide](/docs/ai-sdk-core/reasoning) for details on per-provider mapping and migration from `providerOptions`.
|
|
109
110
|
|
|
@@ -29,7 +29,8 @@ The `reasoning` parameter accepts the following values:
|
|
|
29
29
|
| `'low'` | Fast, concise reasoning |
|
|
30
30
|
| `'medium'` | Balanced reasoning |
|
|
31
31
|
| `'high'` | Thorough reasoning |
|
|
32
|
-
| `'xhigh'` |
|
|
32
|
+
| `'xhigh'` | Extra-high reasoning |
|
|
33
|
+
| `'max'` | Maximum reasoning |
|
|
33
34
|
|
|
34
35
|
## Streaming
|
|
35
36
|
|
|
@@ -55,7 +56,7 @@ for await (const part of result.stream) {
|
|
|
55
56
|
|
|
56
57
|
## Precedence Rules
|
|
57
58
|
|
|
58
|
-
|
|
59
|
+
Provider-specific settings take precedence over the corresponding fields derived from `reasoning`. Partial configurations may still use portable reasoning to fill missing fields; summary and display settings can be used alongside it.
|
|
59
60
|
|
|
60
61
|
```ts
|
|
61
62
|
import { generateText } from 'ai';
|
|
@@ -77,9 +78,15 @@ This design lets you use the portable `reasoning` parameter by default and fall
|
|
|
77
78
|
|
|
78
79
|
## Provider Support
|
|
79
80
|
|
|
80
|
-
The `reasoning` parameter is supported by
|
|
81
|
+
The `reasoning` parameter is supported by providers including OpenAI, Anthropic, Google, xAI, Groq, DeepSeek, Moonshot AI, Fireworks, Amazon Bedrock, Mistral, Cohere, Alibaba, Open Responses, OpenAI Compatible, and Perplexity. Each provider translates the value to its native reasoning API.
|
|
81
82
|
|
|
82
|
-
Providers
|
|
83
|
+
Providers with a distinct native maximum tier, such as supported OpenAI, Anthropic, DeepSeek, and Moonshot AI models, receive `'max'` directly. Amazon Bedrock preserves `'max'` for its Anthropic and OpenAI effort mappings, while Amazon Nova 2 maps `'xhigh'` and `'max'` to `'high'` with a compatibility warning. Providers whose highest native tier is lower coerce `'max'` to their closest supported tier and emit a compatibility warning when their adapter supports warning propagation. OpenAI-compatible and Open Responses endpoints receive `'max'` directly so compatible servers can interpret it.
|
|
84
|
+
|
|
85
|
+
Some providers use a numeric token budget instead of an enum for reasoning control. In those cases, `'max'` maps to 95% of the model's maximum output tokens by default, subject to the provider's minimum and maximum reasoning budget limits.
|
|
86
|
+
|
|
87
|
+
Maximum reasoning can substantially increase token usage, latency, cost, and the chance of reaching request or output limits. Use it when the model's additional reasoning depth is worth those tradeoffs.
|
|
88
|
+
|
|
89
|
+
Providers and models that do not support reasoning configuration emit an `unsupported` warning and ignore the parameter.
|
|
83
90
|
|
|
84
91
|
## Migrating from `providerOptions`
|
|
85
92
|
|
|
@@ -188,4 +195,4 @@ const { text } = await generateText({
|
|
|
188
195
|
});
|
|
189
196
|
```
|
|
190
197
|
|
|
191
|
-
|
|
198
|
+
You can combine `providerOptions` with `reasoning` for provider-specific features such as reasoning summaries or display settings. Explicit effort or budget values override the corresponding mapped fields; partial configurations may still use portable reasoning to fill missing fields. See [Precedence Rules](#precedence-rules) for details.
|
|
@@ -51,29 +51,26 @@ Use a provider's `decisionModel` factory:
|
|
|
51
51
|
| Provider | Example model |
|
|
52
52
|
| ----------- | ------------------------------------------------------ |
|
|
53
53
|
| TypeSafe AI | `typeSafeAi.decisionModel('jev-latest')` |
|
|
54
|
-
| OpenAI | `openai.decisionModel('gpt-
|
|
54
|
+
| OpenAI | `openai.decisionModel('gpt-6-luna')` |
|
|
55
55
|
| Anthropic | `anthropic.decisionModel('claude-haiku-4-5-20251001')` |
|
|
56
56
|
| Google | `google.decisionModel('gemini-3.5-flash-lite')` |
|
|
57
57
|
|
|
58
|
-
TypeSafe AI's [Jev](https://vercel.com/i/what-is-jev)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
`providerOptions`, which take precedence over this default. For example, use
|
|
75
|
-
`providerOptions: { openai: { reasoningEffort: 'high' } }` with an OpenAI model
|
|
76
|
-
that supports that effort.
|
|
58
|
+
TypeSafe AI's [Jev](https://vercel.com/i/what-is-jev) and OpenAI's
|
|
59
|
+
[Decisions API](https://developers.openai.com/api/docs/guides/decisions)
|
|
60
|
+
supply native Choice, Score, and Boolean decisions. Each question is evaluated
|
|
61
|
+
independently. Choice and Score answers include native probability distributions.
|
|
62
|
+
|
|
63
|
+
Anthropic and Google adapt structured language-model output for all three types,
|
|
64
|
+
evaluating all questions in one prompt. Their Boolean answers contain prompted
|
|
65
|
+
estimates of P(true), and Choice and Score answers omit probability distributions.
|
|
66
|
+
Select a model that supports the provider's structured-output API and judge quality
|
|
67
|
+
against your own labeled examples before choosing a model for a task.
|
|
68
|
+
|
|
69
|
+
The Anthropic and Google language-model adapters request `reasoning: 'none'` by
|
|
70
|
+
default. Each provider maps this setting to its model's reasoning controls. Pass
|
|
71
|
+
supported reasoning settings through `providerOptions` to override this default.
|
|
72
|
+
OpenAI decision models use the Decisions endpoint and do not accept Responses
|
|
73
|
+
API reasoning options.
|
|
77
74
|
|
|
78
75
|
## Model aliases and registries
|
|
79
76
|
|
|
@@ -378,9 +378,11 @@ for (const file of result.files) {
|
|
|
378
378
|
| [Google](/providers/ai-sdk-providers/google#image-models) | `gemini-2.5-flash-image` | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 |
|
|
379
379
|
| [Google](/providers/ai-sdk-providers/google#image-models) | `gemini-3-pro-image-preview` | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 |
|
|
380
380
|
| [Google](/providers/ai-sdk-providers/google#image-models) | `gemini-3.1-flash-image-preview` | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 |
|
|
381
|
+
| [Google](/providers/ai-sdk-providers/google#image-models) | `gemini-nano-banana-2.1` | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, 1:8, 8:1, 1:4, 4:1 |
|
|
381
382
|
| [Google Vertex](/providers/ai-sdk-providers/google-vertex#image-models) | `gemini-2.5-flash-image` | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 |
|
|
382
383
|
| [Google Vertex](/providers/ai-sdk-providers/google-vertex#image-models) | `gemini-3-pro-image-preview` | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 |
|
|
383
384
|
| [Google Vertex](/providers/ai-sdk-providers/google-vertex#image-models) | `gemini-3.1-flash-image-preview` | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9 |
|
|
385
|
+
| [Google Vertex](/providers/ai-sdk-providers/google-vertex#image-models) | `gemini-nano-banana-2.1` | 1:1, 2:3, 3:2, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, 1:8, 8:1, 1:4, 4:1 |
|
|
384
386
|
| [Fireworks](/providers/ai-sdk-providers/fireworks#image-models) | `accounts/fireworks/models/flux-1-dev-fp8` | 1:1, 2:3, 3:2, 4:5, 5:4, 16:9, 9:16, 9:21, 21:9 |
|
|
385
387
|
| [Fireworks](/providers/ai-sdk-providers/fireworks#image-models) | `accounts/fireworks/models/flux-1-schnell-fp8` | 1:1, 2:3, 3:2, 4:5, 5:4, 16:9, 9:16, 9:21, 21:9 |
|
|
386
388
|
| [Fireworks](/providers/ai-sdk-providers/fireworks#image-models) | `accounts/fireworks/models/playground-v2-5-1024px-aesthetic` | 640x1536, 768x1344, 832x1216, 896x1152, 1024x1024, 1152x896, 1216x832, 1344x768, 1536x640 |
|
|
@@ -12,15 +12,17 @@ These warnings help you fix problems before they cause errors.
|
|
|
12
12
|
|
|
13
13
|
### When Warnings Appear
|
|
14
14
|
|
|
15
|
-
Warnings
|
|
15
|
+
Warnings use Node.js `process.emitWarning` when available and `console.warn` in
|
|
16
|
+
browser/edge runtimes. They appear when:
|
|
16
17
|
|
|
17
18
|
- **Unsupported features**: You use a feature or setting that is not supported by the AI model (e.g., certain options or parameters).
|
|
18
19
|
- **Compatibility warnings**: A feature is used in a compatibility mode, which might work differently or less optimally than intended.
|
|
20
|
+
- **Deprecations**: You use a deprecated API, option, or message format.
|
|
19
21
|
- **Other warnings**: The AI model reports another type of issue, such as general problems or advisory messages.
|
|
20
22
|
|
|
21
23
|
### Warning Messages
|
|
22
24
|
|
|
23
|
-
All warnings
|
|
25
|
+
All warnings include "AI SDK Warning" so you can easily find them. For example:
|
|
24
26
|
|
|
25
27
|
```
|
|
26
28
|
AI SDK Warning: The feature "temperature" is not supported by this model
|
|
@@ -41,7 +43,8 @@ globalThis.AI_SDK_LOG_WARNINGS = false;
|
|
|
41
43
|
#### Custom Warning Handler
|
|
42
44
|
|
|
43
45
|
You can also provide your own function to handle warnings.
|
|
44
|
-
It receives
|
|
46
|
+
It receives a list of warnings and optional provider and model ids. Custom
|
|
47
|
+
handlers receive every warning, including repeated deprecations.
|
|
45
48
|
|
|
46
49
|
```ts
|
|
47
50
|
globalThis.AI_SDK_LOG_WARNINGS = ({ warnings, provider, model }) => {
|
|
@@ -49,6 +52,28 @@ globalThis.AI_SDK_LOG_WARNINGS = ({ warnings, provider, model }) => {
|
|
|
49
52
|
};
|
|
50
53
|
```
|
|
51
54
|
|
|
55
|
+
### Deprecation Warnings
|
|
56
|
+
|
|
57
|
+
The default logger emits each deprecation code once per loaded SDK instance.
|
|
58
|
+
In Node.js, these warnings have the type `DeprecationWarning` and a stable
|
|
59
|
+
`AISDK_DEP_*` code, available as `warning.code` on `process.on('warning', handler)`.
|
|
60
|
+
Browser/edge console messages include the code in brackets.
|
|
61
|
+
|
|
62
|
+
| Code | Deprecated usage / replacement |
|
|
63
|
+
| ---------------------------------------- | -------------------------------------------------------------------------- |
|
|
64
|
+
| `AISDK_DEP_GENERATE_OBJECT` | Use `generateText` with `output` instead of `generateObject`. |
|
|
65
|
+
| `AISDK_DEP_STREAM_OBJECT` | Use `streamText` with `output` instead of `streamObject`. |
|
|
66
|
+
| `AISDK_DEP_EXPERIMENTAL_GENERATE_SPEECH` | Use `generateSpeech` instead of `experimental_generateSpeech`. |
|
|
67
|
+
| `AISDK_DEP_EXPERIMENTAL_TRANSCRIBE` | Use `transcribe` instead of `experimental_transcribe`. |
|
|
68
|
+
| `AISDK_DEP_TOOL_RESULT_*` | Use `file` with tagged `data` instead of legacy tool-result content types. |
|
|
69
|
+
| `AISDK_DEP_UI_MESSAGE_RAW_INPUT` | Use `input` instead of `rawInput` in UI tool parts. |
|
|
70
|
+
| `AISDK_DEP_IMAGE_CONTENT_PART` | Use `file` with an image `mediaType` instead of `image` message parts. |
|
|
71
|
+
|
|
72
|
+
Run Node.js with `--throw-deprecation` to fail on deprecated usage,
|
|
73
|
+
`--no-deprecation` to suppress deprecations, or `--trace-deprecation` for stack
|
|
74
|
+
traces. These flags affect all `DeprecationWarning`s, rather than individual
|
|
75
|
+
codes, and apply only to the default Node.js logger.
|
|
76
|
+
|
|
52
77
|
## Error Handling
|
|
53
78
|
|
|
54
79
|
### Error Helper Object
|
|
@@ -455,10 +455,10 @@ To see `generateText` in action, check out [these examples](#examples).
|
|
|
455
455
|
},
|
|
456
456
|
{
|
|
457
457
|
name: 'reasoning',
|
|
458
|
-
type: "'provider-default' | 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'",
|
|
458
|
+
type: "'provider-default' | 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'",
|
|
459
459
|
isOptional: true,
|
|
460
460
|
description:
|
|
461
|
-
"Controls how much reasoning the model performs before generating a response. When omitted, the provider's default behavior is used. `'provider-default'` explicitly requests the provider's default. Providers that do not support reasoning will emit a warning.
|
|
461
|
+
"Controls how much reasoning the model performs before generating a response. When omitted, the provider's default behavior is used. `'provider-default'` explicitly requests the provider's default. Providers that do not support reasoning will emit a warning. Provider-specific settings take precedence over corresponding mapped fields. Partial configurations may still use portable reasoning to fill missing fields; summary and display settings can be combined with it. See the [reasoning guide](/docs/ai-sdk-core/reasoning) for provider-specific mapping details.",
|
|
462
462
|
},
|
|
463
463
|
{
|
|
464
464
|
name: 'maxRetries',
|
|
@@ -456,10 +456,10 @@ To see `streamText` in action, check out [these examples](#examples).
|
|
|
456
456
|
},
|
|
457
457
|
{
|
|
458
458
|
name: 'reasoning',
|
|
459
|
-
type: "'provider-default' | 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh'",
|
|
459
|
+
type: "'provider-default' | 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | 'max'",
|
|
460
460
|
isOptional: true,
|
|
461
461
|
description:
|
|
462
|
-
"Controls how much reasoning the model performs before generating a response. When omitted, the provider's default behavior is used. `'provider-default'` explicitly requests the provider's default. Providers that do not support reasoning will emit a warning.
|
|
462
|
+
"Controls how much reasoning the model performs before generating a response. When omitted, the provider's default behavior is used. `'provider-default'` explicitly requests the provider's default. Providers that do not support reasoning will emit a warning. Provider-specific settings take precedence over corresponding mapped fields. Partial configurations may still use portable reasoning to fill missing fields; summary and display settings can be combined with it. See the [reasoning guide](/docs/ai-sdk-core/reasoning) for provider-specific mapping details.",
|
|
463
463
|
},
|
|
464
464
|
{
|
|
465
465
|
name: 'maxRetries',
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ai",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.129",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "AI SDK by Vercel - build apps like ChatGPT, Claude, Gemini, and more with a single interface for any model using the Vercel AI Gateway or go direct to OpenAI, Anthropic, Google, or any other model provider.",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -42,30 +42,30 @@
|
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@ai-sdk/gateway": "4.0.
|
|
46
|
-
"@ai-sdk/provider": "4.0.
|
|
47
|
-
"@ai-sdk/provider-utils": "5.0.
|
|
45
|
+
"@ai-sdk/gateway": "4.0.105",
|
|
46
|
+
"@ai-sdk/provider": "4.0.23",
|
|
47
|
+
"@ai-sdk/provider-utils": "5.0.55"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@ai-sdk/amazon-bedrock": "5.0.
|
|
51
|
-
"@ai-sdk/deepseek": "3.0.
|
|
52
|
-
"@ai-sdk/google": "4.0.
|
|
53
|
-
"@ai-sdk/groq": "4.0.
|
|
54
|
-
"@ai-sdk/huggingface": "2.0.
|
|
55
|
-
"@ai-sdk/moonshotai": "3.0.
|
|
56
|
-
"@ai-sdk/openai": "4.0.
|
|
57
|
-
"@ai-sdk/test-server": "2.0.
|
|
58
|
-
"@ai-sdk/xai": "5.0.
|
|
50
|
+
"@ai-sdk/amazon-bedrock": "5.0.107",
|
|
51
|
+
"@ai-sdk/deepseek": "3.0.60",
|
|
52
|
+
"@ai-sdk/google": "4.0.89",
|
|
53
|
+
"@ai-sdk/groq": "4.0.56",
|
|
54
|
+
"@ai-sdk/huggingface": "2.0.64",
|
|
55
|
+
"@ai-sdk/moonshotai": "3.0.64",
|
|
56
|
+
"@ai-sdk/openai": "4.0.85",
|
|
57
|
+
"@ai-sdk/test-server": "2.0.4",
|
|
58
|
+
"@ai-sdk/xai": "5.0.16",
|
|
59
59
|
"@edge-runtime/vm": "^5.0.0",
|
|
60
60
|
"@smithy/eventstream-codec": "^4.3.3",
|
|
61
61
|
"@smithy/util-utf8": "^4.3.3",
|
|
62
62
|
"@types/json-schema": "7.0.15",
|
|
63
63
|
"@types/node": "22.19.19",
|
|
64
64
|
"@vercel/ai-tsconfig": "0.0.0",
|
|
65
|
-
"esbuild": "^0.28.
|
|
65
|
+
"esbuild": "^0.28.2",
|
|
66
66
|
"tsdown": "^0.23.0",
|
|
67
67
|
"tsx": "4.23.12",
|
|
68
|
-
"typescript": "
|
|
68
|
+
"typescript": "6.0.3",
|
|
69
69
|
"zod": "3.25.76"
|
|
70
70
|
},
|
|
71
71
|
"peerDependencies": {
|
|
@@ -263,6 +263,16 @@ export async function generateObject<
|
|
|
263
263
|
};
|
|
264
264
|
},
|
|
265
265
|
): Promise<GenerateObjectResult<RESULT>> {
|
|
266
|
+
logWarnings({
|
|
267
|
+
warnings: [
|
|
268
|
+
{
|
|
269
|
+
type: 'deprecated',
|
|
270
|
+
setting: 'generateObject',
|
|
271
|
+
message: 'Use generateText with an output setting instead.',
|
|
272
|
+
},
|
|
273
|
+
],
|
|
274
|
+
});
|
|
275
|
+
|
|
266
276
|
const {
|
|
267
277
|
model: modelArg,
|
|
268
278
|
output = 'object',
|
|
@@ -353,6 +353,16 @@ export function streamObject<
|
|
|
353
353
|
: never
|
|
354
354
|
: never
|
|
355
355
|
> {
|
|
356
|
+
logWarnings({
|
|
357
|
+
warnings: [
|
|
358
|
+
{
|
|
359
|
+
type: 'deprecated',
|
|
360
|
+
setting: 'streamObject',
|
|
361
|
+
message: 'Use streamText with an output setting instead.',
|
|
362
|
+
},
|
|
363
|
+
],
|
|
364
|
+
});
|
|
365
|
+
|
|
356
366
|
const {
|
|
357
367
|
model,
|
|
358
368
|
output = 'object',
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { SpeechResult } from './generate-speech-result';
|
|
2
2
|
import { generateSpeech } from './generate-speech';
|
|
3
|
+
import { logWarnings } from '../logger/log-warnings';
|
|
3
4
|
|
|
4
5
|
export { generateSpeech } from './generate-speech';
|
|
5
6
|
export type { SpeechResult } from './generate-speech-result';
|
|
@@ -14,7 +15,18 @@ export type {
|
|
|
14
15
|
/**
|
|
15
16
|
* @deprecated Use `generateSpeech` instead.
|
|
16
17
|
*/
|
|
17
|
-
const experimental_generateSpeech =
|
|
18
|
+
const experimental_generateSpeech: typeof generateSpeech = options => {
|
|
19
|
+
logWarnings({
|
|
20
|
+
warnings: [
|
|
21
|
+
{
|
|
22
|
+
type: 'deprecated',
|
|
23
|
+
setting: 'experimental_generateSpeech',
|
|
24
|
+
message: 'Use generateSpeech instead.',
|
|
25
|
+
},
|
|
26
|
+
],
|
|
27
|
+
});
|
|
28
|
+
return generateSpeech(options);
|
|
29
|
+
};
|
|
18
30
|
export { experimental_generateSpeech };
|
|
19
31
|
|
|
20
32
|
/**
|
|
@@ -1099,7 +1099,9 @@ export async function generateText<
|
|
|
1099
1099
|
> = {};
|
|
1100
1100
|
const blockedToolCallIds = new Set<string>();
|
|
1101
1101
|
|
|
1102
|
-
const generatedFileDataCache
|
|
1102
|
+
const generatedFileDataCache: Parameters<
|
|
1103
|
+
typeof convertLanguageModelContent
|
|
1104
|
+
>[0]['generatedFileDataCache'] = new WeakMap();
|
|
1103
1105
|
const modelCallContent = await convertLanguageModelContent({
|
|
1104
1106
|
content: currentModelResponse.content,
|
|
1105
1107
|
toolCalls: stepToolCalls,
|
|
@@ -3,12 +3,15 @@ import { hashCanonical, toBase64url } from '../util/canonical-hash';
|
|
|
3
3
|
|
|
4
4
|
const encoder = new TextEncoder();
|
|
5
5
|
|
|
6
|
-
function fromBase64url(str: string)
|
|
6
|
+
function fromBase64url(str: string) {
|
|
7
7
|
return convertBase64ToUint8Array(str);
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
async function importKey(secret: string | Uint8Array): Promise<CryptoKey> {
|
|
11
|
-
const keyData =
|
|
11
|
+
const keyData =
|
|
12
|
+
typeof secret === 'string'
|
|
13
|
+
? encoder.encode(secret)
|
|
14
|
+
: (secret as Uint8Array<ArrayBuffer>);
|
|
12
15
|
return crypto.subtle.importKey(
|
|
13
16
|
'raw',
|
|
14
17
|
keyData,
|
|
@@ -26,7 +29,7 @@ function buildPayload(
|
|
|
26
29
|
toolCallId: string,
|
|
27
30
|
toolName: string,
|
|
28
31
|
inputDigest: string,
|
|
29
|
-
)
|
|
32
|
+
) {
|
|
30
33
|
return encoder.encode(
|
|
31
34
|
JSON.stringify([
|
|
32
35
|
'ai-sdk-tool-approval-v1',
|
|
@@ -49,7 +52,7 @@ function buildLegacyPayload(
|
|
|
49
52
|
toolCallId: string,
|
|
50
53
|
toolName: string,
|
|
51
54
|
inputDigest: string,
|
|
52
|
-
)
|
|
55
|
+
) {
|
|
53
56
|
return encoder.encode(
|
|
54
57
|
`${approvalId}\n${toolCallId}\n${toolName}\n${inputDigest}`,
|
|
55
58
|
);
|
package/src/global.ts
CHANGED
|
@@ -18,7 +18,8 @@ declare global {
|
|
|
18
18
|
/**
|
|
19
19
|
* The warning logger to use for the AI SDK.
|
|
20
20
|
*
|
|
21
|
-
* If not set,
|
|
21
|
+
* If not set, warnings use process.emitWarning when available, otherwise
|
|
22
|
+
* console.warn. Deprecations are emitted once per code by the default logger.
|
|
22
23
|
*
|
|
23
24
|
* If set to false, no warnings are logged.
|
|
24
25
|
*/
|