ai 7.0.0-beta.7 → 7.0.0-beta.71
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 +507 -24
- package/README.md +6 -16
- package/dist/index.d.mts +1670 -705
- package/dist/index.d.ts +1670 -705
- package/dist/index.js +3086 -2969
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2983 -2871
- package/dist/index.mjs.map +1 -1
- package/dist/internal/index.d.mts +90 -103
- package/dist/internal/index.d.ts +90 -103
- package/dist/internal/index.js +156 -62
- package/dist/internal/index.js.map +1 -1
- package/dist/internal/index.mjs +155 -61
- package/dist/internal/index.mjs.map +1 -1
- package/docs/02-foundations/02-providers-and-models.mdx +6 -2
- package/docs/02-foundations/04-tools.mdx +2 -2
- package/docs/02-foundations/06-provider-options.mdx +10 -2
- package/docs/02-getting-started/02-nextjs-app-router.mdx +7 -7
- package/docs/02-getting-started/03-nextjs-pages-router.mdx +6 -6
- package/docs/02-getting-started/04-svelte.mdx +7 -7
- package/docs/02-getting-started/05-nuxt.mdx +6 -6
- package/docs/02-getting-started/06-nodejs.mdx +6 -6
- package/docs/02-getting-started/07-expo.mdx +6 -6
- package/docs/02-getting-started/08-tanstack-start.mdx +7 -7
- package/docs/02-getting-started/09-coding-agents.mdx +2 -2
- package/docs/03-agents/01-overview.mdx +1 -3
- package/docs/03-agents/02-building-agents.mdx +7 -8
- package/docs/03-agents/04-loop-control.mdx +38 -5
- package/docs/03-agents/05-configuring-call-options.mdx +3 -3
- package/docs/03-agents/06-memory.mdx +1 -2
- package/docs/03-ai-sdk-core/05-generating-text.mdx +1 -1
- package/docs/03-ai-sdk-core/10-generating-structured-data.mdx +2 -2
- package/docs/03-ai-sdk-core/15-tools-and-tool-calling.mdx +89 -19
- package/docs/03-ai-sdk-core/16-mcp-tools.mdx +6 -0
- package/docs/03-ai-sdk-core/25-settings.mdx +51 -1
- package/docs/03-ai-sdk-core/26-reasoning.mdx +190 -0
- package/docs/03-ai-sdk-core/30-embeddings.mdx +25 -34
- package/docs/03-ai-sdk-core/35-image-generation.mdx +19 -20
- package/docs/03-ai-sdk-core/38-video-generation.mdx +25 -25
- package/docs/03-ai-sdk-core/39-file-uploads.mdx +145 -0
- package/docs/03-ai-sdk-core/40-middleware.mdx +13 -13
- package/docs/03-ai-sdk-core/41-skill-uploads.mdx +184 -0
- package/docs/03-ai-sdk-core/55-testing.mdx +10 -10
- package/docs/03-ai-sdk-core/60-telemetry.mdx +211 -30
- package/docs/03-ai-sdk-core/65-event-listeners.mdx +419 -31
- package/docs/03-ai-sdk-core/index.mdx +11 -0
- package/docs/04-ai-sdk-ui/02-chatbot.mdx +7 -0
- package/docs/04-ai-sdk-ui/03-chatbot-message-persistence.mdx +0 -1
- package/docs/04-ai-sdk-ui/03-chatbot-tool-usage.mdx +2 -2
- package/docs/04-ai-sdk-ui/04-generative-user-interfaces.mdx +4 -4
- package/docs/04-ai-sdk-ui/50-stream-protocol.mdx +26 -0
- package/docs/06-advanced/04-caching.mdx +10 -10
- package/docs/07-reference/01-ai-sdk-core/01-generate-text.mdx +111 -34
- package/docs/07-reference/01-ai-sdk-core/02-stream-text.mdx +133 -29
- package/docs/07-reference/01-ai-sdk-core/05-embed.mdx +139 -3
- package/docs/07-reference/01-ai-sdk-core/06-embed-many.mdx +143 -3
- package/docs/07-reference/01-ai-sdk-core/06-rerank.mdx +18 -3
- package/docs/07-reference/01-ai-sdk-core/10-generate-image.mdx +3 -2
- package/docs/07-reference/01-ai-sdk-core/11-transcribe.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/12-generate-speech.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/13-generate-video.mdx +3 -2
- package/docs/07-reference/01-ai-sdk-core/14-upload-file.mdx +93 -0
- package/docs/07-reference/01-ai-sdk-core/16-tool-loop-agent.mdx +16 -16
- package/docs/07-reference/01-ai-sdk-core/20-tool.mdx +22 -16
- package/docs/07-reference/01-ai-sdk-core/22-dynamic-tool.mdx +10 -11
- package/docs/07-reference/01-ai-sdk-core/23-create-mcp-client.mdx +7 -0
- package/docs/07-reference/01-ai-sdk-core/29-filter-active-tools.mdx +71 -0
- package/docs/07-reference/01-ai-sdk-core/30-model-message.mdx +62 -5
- package/docs/07-reference/01-ai-sdk-core/31-ui-message.mdx +18 -0
- package/docs/07-reference/01-ai-sdk-core/60-wrap-language-model.mdx +4 -4
- package/docs/07-reference/01-ai-sdk-core/61-wrap-image-model.mdx +4 -4
- package/docs/07-reference/01-ai-sdk-core/65-language-model-v2-middleware.mdx +9 -9
- package/docs/07-reference/01-ai-sdk-core/66-extract-reasoning-middleware.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/68-default-settings-middleware.mdx +1 -1
- package/docs/07-reference/01-ai-sdk-core/{70-step-count-is.mdx → 70-is-step-count.mdx} +10 -10
- package/docs/07-reference/01-ai-sdk-core/71-has-tool-call.mdx +3 -3
- package/docs/07-reference/01-ai-sdk-core/72-loop-finished.mdx +83 -0
- package/docs/07-reference/01-ai-sdk-core/index.mdx +23 -0
- package/docs/07-reference/05-ai-sdk-errors/ai-no-such-provider-reference-error.mdx +27 -0
- package/docs/07-reference/05-ai-sdk-errors/index.mdx +1 -0
- package/docs/08-migration-guides/23-migration-guide-7-0.mdx +272 -0
- package/docs/08-migration-guides/24-migration-guide-6-0.mdx +4 -4
- package/docs/08-migration-guides/26-migration-guide-5-0.mdx +6 -6
- package/docs/09-troubleshooting/14-tool-calling-with-structured-outputs.mdx +1 -1
- package/docs/09-troubleshooting/30-model-is-not-assignable-to-type.mdx +1 -1
- package/package.json +15 -13
- package/src/agent/agent.ts +12 -8
- package/src/agent/create-agent-ui-stream-response.ts +6 -4
- package/src/agent/create-agent-ui-stream.ts +5 -3
- package/src/agent/pipe-agent-ui-stream-to-response.ts +5 -3
- package/src/agent/tool-loop-agent-settings.ts +49 -26
- package/src/agent/tool-loop-agent.ts +42 -17
- package/src/embed/embed-events.ts +181 -0
- package/src/embed/embed-many.ts +277 -235
- package/src/embed/embed.ts +141 -92
- package/src/embed/index.ts +1 -0
- package/src/error/index.ts +1 -0
- package/src/error/invalid-stream-part-error.ts +3 -3
- package/src/generate-object/generate-object.ts +218 -224
- package/src/generate-object/index.ts +6 -0
- package/src/generate-object/stream-object.ts +349 -368
- package/src/generate-object/structured-output-events.ts +258 -0
- package/src/generate-text/collect-tool-approvals.ts +1 -1
- package/src/generate-text/content-part.ts +9 -3
- package/src/generate-text/{callback-events.ts → core-events.ts} +126 -51
- package/src/generate-text/create-execute-tools-transformation.ts +148 -0
- package/src/generate-text/execute-tool-call.ts +101 -104
- package/src/generate-text/filter-active-tool.ts +41 -0
- package/src/generate-text/generate-text-result.ts +6 -4
- package/src/generate-text/generate-text.ts +640 -771
- package/src/generate-text/generation-context.ts +15 -0
- package/src/generate-text/index.ts +32 -14
- package/src/generate-text/invoke-tool-callbacks-from-stream.ts +85 -0
- package/src/generate-text/is-approval-needed.ts +9 -6
- package/src/generate-text/parse-tool-call.ts +1 -1
- package/src/generate-text/prepare-step.ts +17 -10
- package/src/generate-text/reasoning-output.ts +79 -0
- package/src/generate-text/reasoning.ts +5 -3
- package/src/generate-text/smooth-stream.ts +1 -1
- package/src/generate-text/step-result.ts +68 -43
- package/src/generate-text/stop-condition.ts +19 -8
- package/src/generate-text/stream-model-call.ts +460 -0
- package/src/generate-text/stream-text-result.ts +172 -97
- package/src/generate-text/stream-text.ts +824 -941
- package/src/generate-text/to-response-messages.ts +16 -1
- package/src/generate-text/tool-approval-request-output.ts +1 -1
- package/src/generate-text/tool-call-repair-function.ts +1 -1
- package/src/generate-text/tool-call.ts +15 -3
- package/src/generate-text/tool-error.ts +1 -1
- package/src/generate-text/tool-output-denied.ts +1 -1
- package/src/generate-text/tool-output.ts +1 -1
- package/src/generate-text/tool-result.ts +1 -1
- package/src/index.ts +2 -1
- package/src/logger/log-warnings.ts +4 -0
- package/src/prompt/call-settings.ts +36 -13
- package/src/prompt/content-part.ts +43 -7
- package/src/prompt/convert-to-language-model-prompt.ts +124 -37
- package/src/prompt/index.ts +1 -0
- package/src/prompt/message.ts +4 -0
- package/src/prompt/prepare-call-settings.ts +2 -0
- package/src/prompt/prepare-tool-choice.ts +15 -0
- package/src/prompt/{prepare-tools-and-tool-choice.ts → prepare-tools.ts} +8 -36
- package/src/registry/provider-registry.ts +1 -2
- package/src/rerank/index.ts +6 -0
- package/src/rerank/rerank-events.ts +189 -0
- package/src/rerank/rerank.ts +206 -97
- package/src/telemetry/get-global-telemetry-integration.ts +56 -19
- package/src/telemetry/telemetry-integration.ts +149 -4
- package/src/telemetry/telemetry-settings.ts +2 -7
- package/src/types/index.ts +1 -0
- package/src/types/provider-reference.ts +3 -0
- package/src/ui/convert-to-model-messages.ts +27 -3
- package/src/ui/direct-chat-transport.ts +18 -10
- package/src/ui/http-chat-transport.ts +8 -19
- package/src/ui/index.ts +5 -1
- package/src/ui/process-ui-message-stream.ts +15 -2
- package/src/ui/ui-messages.ts +70 -5
- package/src/ui/validate-ui-messages.ts +11 -0
- package/src/ui-message-stream/ui-message-chunks.ts +22 -0
- package/src/upload-file/index.ts +2 -0
- package/src/upload-file/upload-file-result.ts +11 -0
- package/src/upload-file/upload-file.ts +151 -0
- package/src/upload-skill/index.ts +2 -0
- package/src/upload-skill/upload-skill-result.ts +11 -0
- package/src/upload-skill/upload-skill.ts +23 -0
- package/src/util/detect-media-type.ts +15 -6
- package/src/generate-text/run-tools-transformation.ts +0 -448
- package/src/generate-text/tool-set.ts +0 -14
- package/src/telemetry/assemble-operation-name.ts +0 -21
- package/src/telemetry/get-base-telemetry-attributes.ts +0 -53
- package/src/telemetry/get-tracer.ts +0 -20
- package/src/telemetry/noop-tracer.ts +0 -69
- package/src/telemetry/record-span.ts +0 -75
- package/src/telemetry/select-telemetry-attributes.ts +0 -78
- package/src/telemetry/stringify-for-telemetry.ts +0 -33
- package/src/test/mock-tracer.ts +0 -156
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,488 @@
|
|
|
1
1
|
# ai
|
|
2
2
|
|
|
3
|
+
## 7.0.0-beta.71
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- e68be55: fix(ai): skip stringifying text when streaming partial text
|
|
8
|
+
- Updated dependencies [939171f]
|
|
9
|
+
- @ai-sdk/gateway@4.0.0-beta.40
|
|
10
|
+
|
|
11
|
+
## 7.0.0-beta.70
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [0694029]
|
|
16
|
+
- @ai-sdk/gateway@4.0.0-beta.39
|
|
17
|
+
|
|
18
|
+
## 7.0.0-beta.69
|
|
19
|
+
|
|
20
|
+
### Major Changes
|
|
21
|
+
|
|
22
|
+
- 72223e7: chore(ai): remove deprecated isToolOrDynamicToolUIPart function
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- 34bd95d: feat(ai): add support for uploading provider skills using the provider references abstraction
|
|
27
|
+
- 008271d: feat(openai-compatible): emit warning when using kebab-case instead of camelCase
|
|
28
|
+
- Updated dependencies [34bd95d]
|
|
29
|
+
- Updated dependencies [008271d]
|
|
30
|
+
- @ai-sdk/provider@4.0.0-beta.8
|
|
31
|
+
- @ai-sdk/gateway@4.0.0-beta.38
|
|
32
|
+
- @ai-sdk/provider-utils@5.0.0-beta.14
|
|
33
|
+
|
|
34
|
+
## 7.0.0-beta.68
|
|
35
|
+
|
|
36
|
+
### Major Changes
|
|
37
|
+
|
|
38
|
+
- 7e26e81: chore: rename experimental_context to context
|
|
39
|
+
|
|
40
|
+
### Patch Changes
|
|
41
|
+
|
|
42
|
+
- b0c2869: chore(ai): remove deprecated `media` type part from `ToolResultOutput`
|
|
43
|
+
- Updated dependencies [b0c2869]
|
|
44
|
+
- Updated dependencies [7e26e81]
|
|
45
|
+
- @ai-sdk/provider-utils@5.0.0-beta.13
|
|
46
|
+
- @ai-sdk/gateway@4.0.0-beta.37
|
|
47
|
+
|
|
48
|
+
## 7.0.0-beta.67
|
|
49
|
+
|
|
50
|
+
### Patch Changes
|
|
51
|
+
|
|
52
|
+
- d1a8bed: fix(ui): export `isDynamicToolUIPart` from `ai` package
|
|
53
|
+
|
|
54
|
+
## 7.0.0-beta.66
|
|
55
|
+
|
|
56
|
+
### Patch Changes
|
|
57
|
+
|
|
58
|
+
- Updated dependencies [fb0c233]
|
|
59
|
+
- Updated dependencies [d1f0d2b]
|
|
60
|
+
- @ai-sdk/gateway@4.0.0-beta.36
|
|
61
|
+
|
|
62
|
+
## 7.0.0-beta.65
|
|
63
|
+
|
|
64
|
+
### Patch Changes
|
|
65
|
+
|
|
66
|
+
- Updated dependencies [46d1149]
|
|
67
|
+
- @ai-sdk/provider-utils@5.0.0-beta.12
|
|
68
|
+
- @ai-sdk/gateway@4.0.0-beta.35
|
|
69
|
+
|
|
70
|
+
## 7.0.0-beta.64
|
|
71
|
+
|
|
72
|
+
### Patch Changes
|
|
73
|
+
|
|
74
|
+
- Updated dependencies [71b0e7d]
|
|
75
|
+
- @ai-sdk/gateway@4.0.0-beta.34
|
|
76
|
+
|
|
77
|
+
## 7.0.0-beta.63
|
|
78
|
+
|
|
79
|
+
### Patch Changes
|
|
80
|
+
|
|
81
|
+
- 6fd51c0: fix(provider): preserve error type prefix in getErrorMessage
|
|
82
|
+
- Updated dependencies [6fd51c0]
|
|
83
|
+
- @ai-sdk/provider-utils@5.0.0-beta.11
|
|
84
|
+
- @ai-sdk/provider@4.0.0-beta.7
|
|
85
|
+
- @ai-sdk/gateway@4.0.0-beta.33
|
|
86
|
+
|
|
87
|
+
## 7.0.0-beta.62
|
|
88
|
+
|
|
89
|
+
### Patch Changes
|
|
90
|
+
|
|
91
|
+
- Updated dependencies [11746ca]
|
|
92
|
+
- @ai-sdk/gateway@4.0.0-beta.32
|
|
93
|
+
|
|
94
|
+
## 7.0.0-beta.61
|
|
95
|
+
|
|
96
|
+
### Patch Changes
|
|
97
|
+
|
|
98
|
+
- c29a26f: feat(provider): add support for provider references and uploading files as supported per provider
|
|
99
|
+
- Updated dependencies [c29a26f]
|
|
100
|
+
- @ai-sdk/provider-utils@5.0.0-beta.10
|
|
101
|
+
- @ai-sdk/provider@4.0.0-beta.6
|
|
102
|
+
- @ai-sdk/gateway@4.0.0-beta.31
|
|
103
|
+
|
|
104
|
+
## 7.0.0-beta.60
|
|
105
|
+
|
|
106
|
+
### Patch Changes
|
|
107
|
+
|
|
108
|
+
- 38fc777: Add AI Gateway hint to provider READMEs
|
|
109
|
+
|
|
110
|
+
## 7.0.0-beta.59
|
|
111
|
+
|
|
112
|
+
### Patch Changes
|
|
113
|
+
|
|
114
|
+
- Updated dependencies [4552cbf]
|
|
115
|
+
- @ai-sdk/gateway@4.0.0-beta.30
|
|
116
|
+
|
|
117
|
+
## 7.0.0-beta.58
|
|
118
|
+
|
|
119
|
+
### Patch Changes
|
|
120
|
+
|
|
121
|
+
- 2e17091: fix(types): move shared tool set utility types into provider-utils
|
|
122
|
+
|
|
123
|
+
Moved `ToolSet`, `InferToolSetContext`, and `UnionToIntersection` into `@ai-sdk/provider-utils` and updated `ai` internals to import them directly from there. This keeps the shared tool typing utilities colocated with the core tool type definitions.
|
|
124
|
+
|
|
125
|
+
- Updated dependencies [2e17091]
|
|
126
|
+
- @ai-sdk/provider-utils@5.0.0-beta.9
|
|
127
|
+
- @ai-sdk/gateway@4.0.0-beta.29
|
|
128
|
+
|
|
129
|
+
## 7.0.0-beta.57
|
|
130
|
+
|
|
131
|
+
### Major Changes
|
|
132
|
+
|
|
133
|
+
- 986c6fd: feat(ai): change type of experimental_context from unknown to generic
|
|
134
|
+
- 493295c: Remove the deprecated `ToolCallOptions` export.
|
|
135
|
+
|
|
136
|
+
Use `ToolExecutionOptions` instead.
|
|
137
|
+
|
|
138
|
+
### Patch Changes
|
|
139
|
+
|
|
140
|
+
- Updated dependencies [986c6fd]
|
|
141
|
+
- Updated dependencies [493295c]
|
|
142
|
+
- @ai-sdk/provider-utils@5.0.0-beta.8
|
|
143
|
+
- @ai-sdk/gateway@4.0.0-beta.28
|
|
144
|
+
|
|
145
|
+
## 7.0.0-beta.56
|
|
146
|
+
|
|
147
|
+
### Patch Changes
|
|
148
|
+
|
|
149
|
+
- Updated dependencies [70a9aae]
|
|
150
|
+
- @ai-sdk/gateway@4.0.0-beta.27
|
|
151
|
+
|
|
152
|
+
## 7.0.0-beta.55
|
|
153
|
+
|
|
154
|
+
### Major Changes
|
|
155
|
+
|
|
156
|
+
- b3c9f6a: feat(ai): create new opentelemetry package (@ai-sdk/otel)
|
|
157
|
+
|
|
158
|
+
## 7.0.0-beta.54
|
|
159
|
+
|
|
160
|
+
### Patch Changes
|
|
161
|
+
|
|
162
|
+
- 5d0f18e: feat(ai): move opentelemetry to new package
|
|
163
|
+
|
|
164
|
+
## 7.0.0-beta.53
|
|
165
|
+
|
|
166
|
+
### Patch Changes
|
|
167
|
+
|
|
168
|
+
- 9b47dea: fix(ai): remove otel Tracer api from telemetry settings
|
|
169
|
+
|
|
170
|
+
## 7.0.0-beta.52
|
|
171
|
+
|
|
172
|
+
### Patch Changes
|
|
173
|
+
|
|
174
|
+
- b56301c: feat(ai): decouple otel from generate/streamObject
|
|
175
|
+
|
|
176
|
+
## 7.0.0-beta.51
|
|
177
|
+
|
|
178
|
+
### Patch Changes
|
|
179
|
+
|
|
180
|
+
- 6abd098: split `prepareToolsAndToolChoice()` into `prepareTools()` and `prepareToolChoice()`
|
|
181
|
+
|
|
182
|
+
## 7.0.0-beta.50
|
|
183
|
+
|
|
184
|
+
### Patch Changes
|
|
185
|
+
|
|
186
|
+
- 3debdb7: feat(ai): rename `stepCountIs` to `isStepCount`
|
|
187
|
+
|
|
188
|
+
## 7.0.0-beta.49
|
|
189
|
+
|
|
190
|
+
### Patch Changes
|
|
191
|
+
|
|
192
|
+
- Updated dependencies [294cbe7]
|
|
193
|
+
- @ai-sdk/gateway@4.0.0-beta.26
|
|
194
|
+
|
|
195
|
+
## 7.0.0-beta.48
|
|
196
|
+
|
|
197
|
+
### Patch Changes
|
|
198
|
+
|
|
199
|
+
- 5c4d910: feat(ai): add new `isLoopFinished` stop condition helper for unlimited steps
|
|
200
|
+
|
|
201
|
+
## 7.0.0-beta.47
|
|
202
|
+
|
|
203
|
+
### Patch Changes
|
|
204
|
+
|
|
205
|
+
- bc67b4f: feat(ai): add experimental callbacks for structured outputs
|
|
206
|
+
|
|
207
|
+
## 7.0.0-beta.46
|
|
208
|
+
|
|
209
|
+
### Patch Changes
|
|
210
|
+
|
|
211
|
+
- 31ee822: refactoring(ai): extract filterActiveTools and expose it as experimental_filterActiveTools
|
|
212
|
+
|
|
213
|
+
## 7.0.0-beta.45
|
|
214
|
+
|
|
215
|
+
### Patch Changes
|
|
216
|
+
|
|
217
|
+
- Updated dependencies [435895b]
|
|
218
|
+
- @ai-sdk/gateway@4.0.0-beta.25
|
|
219
|
+
|
|
220
|
+
## 7.0.0-beta.44
|
|
221
|
+
|
|
222
|
+
### Patch Changes
|
|
223
|
+
|
|
224
|
+
- Updated dependencies [d30466c]
|
|
225
|
+
- @ai-sdk/gateway@4.0.0-beta.24
|
|
226
|
+
|
|
227
|
+
## 7.0.0-beta.43
|
|
228
|
+
|
|
229
|
+
### Patch Changes
|
|
230
|
+
|
|
231
|
+
- Updated dependencies [4ec78cd]
|
|
232
|
+
- @ai-sdk/gateway@4.0.0-beta.23
|
|
233
|
+
|
|
234
|
+
## 7.0.0-beta.42
|
|
235
|
+
|
|
236
|
+
### Patch Changes
|
|
237
|
+
|
|
238
|
+
- a3fd75b: feat(ai): expose Experimental_ModelCallStreamPart type
|
|
239
|
+
|
|
240
|
+
## 7.0.0-beta.41
|
|
241
|
+
|
|
242
|
+
### Patch Changes
|
|
243
|
+
|
|
244
|
+
- Updated dependencies [7ceff62]
|
|
245
|
+
- @ai-sdk/gateway@4.0.0-beta.22
|
|
246
|
+
|
|
247
|
+
## 7.0.0-beta.40
|
|
248
|
+
|
|
249
|
+
### Patch Changes
|
|
250
|
+
|
|
251
|
+
- 989d3d2: fix(ai): include generated files in OTEL response attributes
|
|
252
|
+
|
|
253
|
+
## 7.0.0-beta.39
|
|
254
|
+
|
|
255
|
+
### Patch Changes
|
|
256
|
+
|
|
257
|
+
- f4cfccd: feat(ai): decouple otel from rerank function
|
|
258
|
+
|
|
259
|
+
## 7.0.0-beta.38
|
|
260
|
+
|
|
261
|
+
### Patch Changes
|
|
262
|
+
|
|
263
|
+
- 1f509d4: fix(ai): force template check on 'kind' param
|
|
264
|
+
- Updated dependencies [1f509d4]
|
|
265
|
+
- @ai-sdk/provider-utils@5.0.0-beta.7
|
|
266
|
+
- @ai-sdk/provider@4.0.0-beta.5
|
|
267
|
+
- @ai-sdk/gateway@4.0.0-beta.21
|
|
268
|
+
|
|
269
|
+
## 7.0.0-beta.37
|
|
270
|
+
|
|
271
|
+
### Patch Changes
|
|
272
|
+
|
|
273
|
+
- Updated dependencies [4f91b5d]
|
|
274
|
+
- @ai-sdk/gateway@4.0.0-beta.20
|
|
275
|
+
|
|
276
|
+
## 7.0.0-beta.36
|
|
277
|
+
|
|
278
|
+
### Patch Changes
|
|
279
|
+
|
|
280
|
+
- 118b953: feat(ai): decouple otel from embed functions
|
|
281
|
+
|
|
282
|
+
## 7.0.0-beta.35
|
|
283
|
+
|
|
284
|
+
### Patch Changes
|
|
285
|
+
|
|
286
|
+
- 99bf941: feat(ai): extract streamModelCall function for streaming text generation
|
|
287
|
+
|
|
288
|
+
## 7.0.0-beta.34
|
|
289
|
+
|
|
290
|
+
### Patch Changes
|
|
291
|
+
|
|
292
|
+
- Updated dependencies [72889f8]
|
|
293
|
+
- @ai-sdk/gateway@4.0.0-beta.19
|
|
294
|
+
|
|
295
|
+
## 7.0.0-beta.33
|
|
296
|
+
|
|
297
|
+
### Patch Changes
|
|
298
|
+
|
|
299
|
+
- caf1b6f: feat(ai): introduce experimental callbacks for rerank function
|
|
300
|
+
|
|
301
|
+
## 7.0.0-beta.32
|
|
302
|
+
|
|
303
|
+
### Major Changes
|
|
304
|
+
|
|
305
|
+
- 4b46062: refactoring(ai): extract tool callback invocation into separate function and forward chunks before callback invocation
|
|
306
|
+
|
|
307
|
+
### Patch Changes
|
|
308
|
+
|
|
309
|
+
- Updated dependencies [165b97a]
|
|
310
|
+
- @ai-sdk/gateway@4.0.0-beta.18
|
|
311
|
+
|
|
312
|
+
## 7.0.0-beta.31
|
|
313
|
+
|
|
314
|
+
### Patch Changes
|
|
315
|
+
|
|
316
|
+
- e79e644: chore(ai/core): remove `timeout` from `CallSettings` as it was effectively unused there
|
|
317
|
+
|
|
318
|
+
## 7.0.0-beta.30
|
|
319
|
+
|
|
320
|
+
### Patch Changes
|
|
321
|
+
|
|
322
|
+
- f5a6f89: README updates
|
|
323
|
+
|
|
324
|
+
## 7.0.0-beta.29
|
|
325
|
+
|
|
326
|
+
### Patch Changes
|
|
327
|
+
|
|
328
|
+
- 877bf12: fix(ai): flatten model attributes for telemetry
|
|
329
|
+
|
|
330
|
+
## 7.0.0-beta.28
|
|
331
|
+
|
|
332
|
+
### Major Changes
|
|
333
|
+
|
|
334
|
+
- b9cf502: refactoring(ai): delay tool execution in stream text until model call is finished
|
|
335
|
+
|
|
336
|
+
## 7.0.0-beta.27
|
|
337
|
+
|
|
338
|
+
### Patch Changes
|
|
339
|
+
|
|
340
|
+
- 3887c70: feat(provider): add new top-level reasoning parameter to spec and support it in `generateText` and `streamText`
|
|
341
|
+
- Updated dependencies [3887c70]
|
|
342
|
+
- @ai-sdk/provider-utils@5.0.0-beta.6
|
|
343
|
+
- @ai-sdk/provider@4.0.0-beta.4
|
|
344
|
+
- @ai-sdk/gateway@4.0.0-beta.17
|
|
345
|
+
|
|
346
|
+
## 7.0.0-beta.26
|
|
347
|
+
|
|
348
|
+
### Patch Changes
|
|
349
|
+
|
|
350
|
+
- f0b0b20: feat(ai): add per-tool timeout overrides via toolTimeouts
|
|
351
|
+
|
|
352
|
+
## 7.0.0-beta.25
|
|
353
|
+
|
|
354
|
+
### Patch Changes
|
|
355
|
+
|
|
356
|
+
- ff9ce30: feat(ai): introduce experimental callbacks for embed function
|
|
357
|
+
|
|
358
|
+
## 7.0.0-beta.24
|
|
359
|
+
|
|
360
|
+
### Major Changes
|
|
361
|
+
|
|
362
|
+
- 776b617: feat(provider): adding new 'custom' content type
|
|
363
|
+
|
|
364
|
+
### Patch Changes
|
|
365
|
+
|
|
366
|
+
- Updated dependencies [776b617]
|
|
367
|
+
- @ai-sdk/provider-utils@5.0.0-beta.5
|
|
368
|
+
- @ai-sdk/provider@4.0.0-beta.3
|
|
369
|
+
- @ai-sdk/gateway@4.0.0-beta.16
|
|
370
|
+
|
|
371
|
+
## 7.0.0-beta.23
|
|
372
|
+
|
|
373
|
+
### Patch Changes
|
|
374
|
+
|
|
375
|
+
- 80d4dde: fix(ai): include tool input on tool result for provider executed dynamic tools
|
|
376
|
+
- Updated dependencies [61753c3]
|
|
377
|
+
- @ai-sdk/provider-utils@5.0.0-beta.4
|
|
378
|
+
- @ai-sdk/gateway@4.0.0-beta.15
|
|
379
|
+
|
|
380
|
+
## 7.0.0-beta.22
|
|
381
|
+
|
|
382
|
+
### Patch Changes
|
|
383
|
+
|
|
384
|
+
- Updated dependencies [ead9144]
|
|
385
|
+
- @ai-sdk/gateway@4.0.0-beta.14
|
|
386
|
+
|
|
387
|
+
## 7.0.0-beta.21
|
|
388
|
+
|
|
389
|
+
### Patch Changes
|
|
390
|
+
|
|
391
|
+
- 34fd051: feat(ai): add toolMs to timeout configuration
|
|
392
|
+
|
|
393
|
+
## 7.0.0-beta.20
|
|
394
|
+
|
|
395
|
+
### Patch Changes
|
|
396
|
+
|
|
397
|
+
- Updated dependencies [2095655]
|
|
398
|
+
- @ai-sdk/gateway@4.0.0-beta.13
|
|
399
|
+
|
|
400
|
+
## 7.0.0-beta.19
|
|
401
|
+
|
|
402
|
+
### Patch Changes
|
|
403
|
+
|
|
404
|
+
- Updated dependencies [f7d4f01]
|
|
405
|
+
- @ai-sdk/provider-utils@5.0.0-beta.3
|
|
406
|
+
- @ai-sdk/provider@4.0.0-beta.2
|
|
407
|
+
- @ai-sdk/gateway@4.0.0-beta.12
|
|
408
|
+
|
|
409
|
+
## 7.0.0-beta.18
|
|
410
|
+
|
|
411
|
+
### Patch Changes
|
|
412
|
+
|
|
413
|
+
- Updated dependencies [5c2a5a2]
|
|
414
|
+
- @ai-sdk/provider@4.0.0-beta.1
|
|
415
|
+
- @ai-sdk/gateway@4.0.0-beta.11
|
|
416
|
+
- @ai-sdk/provider-utils@5.0.0-beta.2
|
|
417
|
+
|
|
418
|
+
## 7.0.0-beta.17
|
|
419
|
+
|
|
420
|
+
### Patch Changes
|
|
421
|
+
|
|
422
|
+
- Updated dependencies [4d6ab9a]
|
|
423
|
+
- @ai-sdk/gateway@4.0.0-beta.10
|
|
424
|
+
|
|
425
|
+
## 7.0.0-beta.16
|
|
426
|
+
|
|
427
|
+
### Major Changes
|
|
428
|
+
|
|
429
|
+
- 5b8c58f: feat(ai): decouple otel from core functions
|
|
430
|
+
|
|
431
|
+
## 7.0.0-beta.15
|
|
432
|
+
|
|
433
|
+
### Patch Changes
|
|
434
|
+
|
|
435
|
+
- Updated dependencies [980f777]
|
|
436
|
+
- Updated dependencies [7185ba2]
|
|
437
|
+
- @ai-sdk/gateway@4.0.0-beta.9
|
|
438
|
+
|
|
439
|
+
## 7.0.0-beta.14
|
|
440
|
+
|
|
441
|
+
### Patch Changes
|
|
442
|
+
|
|
443
|
+
- Updated dependencies [4adc485]
|
|
444
|
+
- @ai-sdk/gateway@4.0.0-beta.8
|
|
445
|
+
|
|
446
|
+
## 7.0.0-beta.13
|
|
447
|
+
|
|
448
|
+
### Patch Changes
|
|
449
|
+
|
|
450
|
+
- c26ca8d: Remove custom User-Agent header from HttpChatTransport to fix CORS preflight failures in Safari and Firefox
|
|
451
|
+
|
|
452
|
+
## 7.0.0-beta.12
|
|
453
|
+
|
|
454
|
+
### Patch Changes
|
|
455
|
+
|
|
456
|
+
- Updated dependencies [e046ea3]
|
|
457
|
+
- @ai-sdk/gateway@4.0.0-beta.7
|
|
458
|
+
|
|
459
|
+
## 7.0.0-beta.11
|
|
460
|
+
|
|
461
|
+
### Patch Changes
|
|
462
|
+
|
|
463
|
+
- Updated dependencies [82288b0]
|
|
464
|
+
- @ai-sdk/gateway@4.0.0-beta.6
|
|
465
|
+
|
|
466
|
+
## 7.0.0-beta.10
|
|
467
|
+
|
|
468
|
+
### Patch Changes
|
|
469
|
+
|
|
470
|
+
- Updated dependencies [aa5a583]
|
|
471
|
+
- @ai-sdk/gateway@4.0.0-beta.5
|
|
472
|
+
|
|
473
|
+
## 7.0.0-beta.9
|
|
474
|
+
|
|
475
|
+
### Patch Changes
|
|
476
|
+
|
|
477
|
+
- 1fe058b: fix(anthropic): preserve the error code returned by model
|
|
478
|
+
|
|
479
|
+
## 7.0.0-beta.8
|
|
480
|
+
|
|
481
|
+
### Patch Changes
|
|
482
|
+
|
|
483
|
+
- Updated dependencies [f32d84a]
|
|
484
|
+
- @ai-sdk/gateway@4.0.0-beta.4
|
|
485
|
+
|
|
3
486
|
## 7.0.0-beta.7
|
|
4
487
|
|
|
5
488
|
### Patch Changes
|
|
@@ -919,13 +1402,13 @@
|
|
|
919
1402
|
Before
|
|
920
1403
|
|
|
921
1404
|
```ts
|
|
922
|
-
model.textEmbeddingModel(
|
|
1405
|
+
model.textEmbeddingModel("my-model-id");
|
|
923
1406
|
```
|
|
924
1407
|
|
|
925
1408
|
After
|
|
926
1409
|
|
|
927
1410
|
```ts
|
|
928
|
-
model.embeddingModel(
|
|
1411
|
+
model.embeddingModel("my-model-id");
|
|
929
1412
|
```
|
|
930
1413
|
|
|
931
1414
|
- b67d224: Fixes an issue where `providerMetadata` and `providerExecuted` were lost when tool input validation failed
|
|
@@ -948,15 +1431,15 @@
|
|
|
948
1431
|
This change replaces
|
|
949
1432
|
|
|
950
1433
|
```ts
|
|
951
|
-
import { experimental_createMCPClient } from
|
|
952
|
-
import { Experimental_StdioMCPTransport } from
|
|
1434
|
+
import { experimental_createMCPClient } from "ai";
|
|
1435
|
+
import { Experimental_StdioMCPTransport } from "ai/mcp-stdio";
|
|
953
1436
|
```
|
|
954
1437
|
|
|
955
1438
|
with
|
|
956
1439
|
|
|
957
1440
|
```ts
|
|
958
|
-
import { experimental_createMCPClient } from
|
|
959
|
-
import { Experimental_StdioMCPTransport } from
|
|
1441
|
+
import { experimental_createMCPClient } from "@ai-sdk/mcp";
|
|
1442
|
+
import { Experimental_StdioMCPTransport } from "@ai-sdk/mcp/mcp-stdio";
|
|
960
1443
|
```
|
|
961
1444
|
|
|
962
1445
|
- 90e5bdd: chore(ai): restructure agent files
|
|
@@ -1043,7 +1526,7 @@
|
|
|
1043
1526
|
- 81d4308: feat: provider-executed dynamic tools
|
|
1044
1527
|
- e0d1ea9: fix(ai): align logic of text-end with reasoning-end
|
|
1045
1528
|
- 2406576: chore(agent): rename messages property on agent ui stream functions to uiMessages
|
|
1046
|
-
- b1aeea7: feat(ai): set default stopWhen on Agent to
|
|
1529
|
+
- b1aeea7: feat(ai): set default stopWhen on Agent to isStepCount(20)
|
|
1047
1530
|
- dce4e7b: chore(agent): rename system to instructions
|
|
1048
1531
|
- 4ece5f9: feat(agent): add experimental_download to ToolLoopAgent
|
|
1049
1532
|
- a417a34: feat(agent): introduce version property
|
|
@@ -1476,13 +1959,13 @@
|
|
|
1476
1959
|
Before
|
|
1477
1960
|
|
|
1478
1961
|
```ts
|
|
1479
|
-
model.textEmbeddingModel(
|
|
1962
|
+
model.textEmbeddingModel("my-model-id");
|
|
1480
1963
|
```
|
|
1481
1964
|
|
|
1482
1965
|
After
|
|
1483
1966
|
|
|
1484
1967
|
```ts
|
|
1485
|
-
model.embeddingModel(
|
|
1968
|
+
model.embeddingModel("my-model-id");
|
|
1486
1969
|
```
|
|
1487
1970
|
|
|
1488
1971
|
- Updated dependencies [8d9e8ad]
|
|
@@ -1829,15 +2312,15 @@
|
|
|
1829
2312
|
This change replaces
|
|
1830
2313
|
|
|
1831
2314
|
```ts
|
|
1832
|
-
import { experimental_createMCPClient } from
|
|
1833
|
-
import { Experimental_StdioMCPTransport } from
|
|
2315
|
+
import { experimental_createMCPClient } from "ai";
|
|
2316
|
+
import { Experimental_StdioMCPTransport } from "ai/mcp-stdio";
|
|
1834
2317
|
```
|
|
1835
2318
|
|
|
1836
2319
|
with
|
|
1837
2320
|
|
|
1838
2321
|
```ts
|
|
1839
|
-
import { experimental_createMCPClient } from
|
|
1840
|
-
import { Experimental_StdioMCPTransport } from
|
|
2322
|
+
import { experimental_createMCPClient } from "@ai-sdk/mcp";
|
|
2323
|
+
import { Experimental_StdioMCPTransport } from "@ai-sdk/mcp/mcp-stdio";
|
|
1841
2324
|
```
|
|
1842
2325
|
|
|
1843
2326
|
## 6.0.0-beta.71
|
|
@@ -2219,7 +2702,7 @@
|
|
|
2219
2702
|
|
|
2220
2703
|
- aa0515c: feat(ai): move Agent to stable
|
|
2221
2704
|
- e7d9b00: feat(agent): add optional name property to agent
|
|
2222
|
-
- b1aeea7: feat(ai): set default stopWhen on Agent to
|
|
2705
|
+
- b1aeea7: feat(ai): set default stopWhen on Agent to isStepCount(20)
|
|
2223
2706
|
|
|
2224
2707
|
## 5.1.0-beta.18
|
|
2225
2708
|
|
|
@@ -2756,7 +3239,7 @@
|
|
|
2756
3239
|
|
|
2757
3240
|
```js
|
|
2758
3241
|
await generateImage({
|
|
2759
|
-
model: luma.image(
|
|
3242
|
+
model: luma.image("photon-flash-1", {
|
|
2760
3243
|
maxImagesPerCall: 5,
|
|
2761
3244
|
pollIntervalMillis: 500,
|
|
2762
3245
|
}),
|
|
@@ -2769,7 +3252,7 @@
|
|
|
2769
3252
|
|
|
2770
3253
|
```js
|
|
2771
3254
|
await generateImage({
|
|
2772
|
-
model: luma.image(
|
|
3255
|
+
model: luma.image("photon-flash-1"),
|
|
2773
3256
|
prompt,
|
|
2774
3257
|
n: 10,
|
|
2775
3258
|
maxImagesPerCall: 5,
|
|
@@ -2789,7 +3272,7 @@
|
|
|
2789
3272
|
- c7710a9: chore (ai): rename DataStreamToSSETransformStream to JsonToSseTransformStream
|
|
2790
3273
|
- bfbfc4c: feat (ai): streamText/generateText: totalUsage contains usage for all steps. usage is for a single step.
|
|
2791
3274
|
- 9ae327d: chore (ui): replace chat store concept with chat instances
|
|
2792
|
-
- 9315076: chore (ai): rename continueUntil to stopWhen. Rename maxSteps stop condition to
|
|
3275
|
+
- 9315076: chore (ai): rename continueUntil to stopWhen. Rename maxSteps stop condition to isStepCount.
|
|
2793
3276
|
- 247ee0c: chore (ai): remove steps from tool invocation ui parts
|
|
2794
3277
|
- 109c0ac: chore (ai): rename id to chatId (in post request, resume request, and useChat)
|
|
2795
3278
|
- 954aa73: feat (ui): extended regenerate support
|
|
@@ -2969,10 +3452,10 @@
|
|
|
2969
3452
|
The `experimental_generateImage` method from the `ai` package now returnes revised prompts for OpenAI's image models.
|
|
2970
3453
|
|
|
2971
3454
|
```js
|
|
2972
|
-
const prompt =
|
|
3455
|
+
const prompt = "Santa Claus driving a Cadillac";
|
|
2973
3456
|
|
|
2974
3457
|
const { providerMetadata } = await experimental_generateImage({
|
|
2975
|
-
model: openai.image(
|
|
3458
|
+
model: openai.image("dall-e-3"),
|
|
2976
3459
|
prompt,
|
|
2977
3460
|
});
|
|
2978
3461
|
|
|
@@ -3532,7 +4015,7 @@
|
|
|
3532
4015
|
### Major Changes
|
|
3533
4016
|
|
|
3534
4017
|
- 72d7d72: chore (ai): stable activeTools
|
|
3535
|
-
- 9315076: chore (ai): rename continueUntil to stopWhen. Rename maxSteps stop condition to
|
|
4018
|
+
- 9315076: chore (ai): rename continueUntil to stopWhen. Rename maxSteps stop condition to isStepCount.
|
|
3536
4019
|
|
|
3537
4020
|
### Patch Changes
|
|
3538
4021
|
|
|
@@ -3635,7 +4118,7 @@
|
|
|
3635
4118
|
|
|
3636
4119
|
```js
|
|
3637
4120
|
await generateImage({
|
|
3638
|
-
model: luma.image(
|
|
4121
|
+
model: luma.image("photon-flash-1", {
|
|
3639
4122
|
maxImagesPerCall: 5,
|
|
3640
4123
|
pollIntervalMillis: 500,
|
|
3641
4124
|
}),
|
|
@@ -3648,7 +4131,7 @@
|
|
|
3648
4131
|
|
|
3649
4132
|
```js
|
|
3650
4133
|
await generateImage({
|
|
3651
|
-
model: luma.image(
|
|
4134
|
+
model: luma.image("photon-flash-1"),
|
|
3652
4135
|
prompt,
|
|
3653
4136
|
n: 10,
|
|
3654
4137
|
maxImagesPerCall: 5,
|
|
@@ -3746,10 +4229,10 @@
|
|
|
3746
4229
|
The `experimental_generateImage` method from the `ai` package now returnes revised prompts for OpenAI's image models.
|
|
3747
4230
|
|
|
3748
4231
|
```js
|
|
3749
|
-
const prompt =
|
|
4232
|
+
const prompt = "Santa Claus driving a Cadillac";
|
|
3750
4233
|
|
|
3751
4234
|
const { providerMetadata } = await experimental_generateImage({
|
|
3752
|
-
model: openai.image(
|
|
4235
|
+
model: openai.image("dall-e-3"),
|
|
3753
4236
|
prompt,
|
|
3754
4237
|
});
|
|
3755
4238
|
|
package/README.md
CHANGED
|
@@ -30,7 +30,7 @@ By default, the AI SDK uses the [Vercel AI Gateway](https://vercel.com/docs/ai-g
|
|
|
30
30
|
|
|
31
31
|
```ts
|
|
32
32
|
const result = await generateText({
|
|
33
|
-
model: 'anthropic/claude-opus-4.
|
|
33
|
+
model: 'anthropic/claude-opus-4.6', // or 'openai/gpt-5.4', 'google/gemini-3-flash', etc.
|
|
34
34
|
prompt: 'Hello!',
|
|
35
35
|
});
|
|
36
36
|
```
|
|
@@ -45,7 +45,7 @@ npm install @ai-sdk/openai @ai-sdk/anthropic @ai-sdk/google
|
|
|
45
45
|
import { anthropic } from '@ai-sdk/anthropic';
|
|
46
46
|
|
|
47
47
|
const result = await generateText({
|
|
48
|
-
model: anthropic('claude-opus-4-
|
|
48
|
+
model: anthropic('claude-opus-4-6'), // or openai('gpt-5.4'), google('gemini-3-flash'), etc.
|
|
49
49
|
prompt: 'Hello!',
|
|
50
50
|
});
|
|
51
51
|
```
|
|
@@ -58,17 +58,7 @@ const result = await generateText({
|
|
|
58
58
|
import { generateText } from 'ai';
|
|
59
59
|
|
|
60
60
|
const { text } = await generateText({
|
|
61
|
-
model: 'openai/gpt-5', // use Vercel AI Gateway
|
|
62
|
-
prompt: 'What is an agent?',
|
|
63
|
-
});
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
```ts
|
|
67
|
-
import { generateText } from 'ai';
|
|
68
|
-
import { openai } from '@ai-sdk/openai';
|
|
69
|
-
|
|
70
|
-
const { text } = await generateText({
|
|
71
|
-
model: openai('gpt-5'), // use OpenAI Responses API
|
|
61
|
+
model: 'openai/gpt-5.4', // use Vercel AI Gateway
|
|
72
62
|
prompt: 'What is an agent?',
|
|
73
63
|
});
|
|
74
64
|
```
|
|
@@ -80,7 +70,7 @@ import { generateText, Output } from 'ai';
|
|
|
80
70
|
import { z } from 'zod';
|
|
81
71
|
|
|
82
72
|
const { output } = await generateText({
|
|
83
|
-
model: 'openai/gpt-5',
|
|
73
|
+
model: 'openai/gpt-5.4',
|
|
84
74
|
output: Output.object({
|
|
85
75
|
schema: z.object({
|
|
86
76
|
recipe: z.object({
|
|
@@ -102,7 +92,7 @@ const { output } = await generateText({
|
|
|
102
92
|
import { ToolLoopAgent } from 'ai';
|
|
103
93
|
|
|
104
94
|
const sandboxAgent = new ToolLoopAgent({
|
|
105
|
-
model: 'openai/gpt-5',
|
|
95
|
+
model: 'openai/gpt-5.4',
|
|
106
96
|
system: 'You are an agent with access to a shell environment.',
|
|
107
97
|
tools: {
|
|
108
98
|
shell: openai.tools.localShell({
|
|
@@ -134,7 +124,7 @@ import { openai } from '@ai-sdk/openai';
|
|
|
134
124
|
import { ToolLoopAgent, InferAgentUIMessage } from 'ai';
|
|
135
125
|
|
|
136
126
|
export const imageGenerationAgent = new ToolLoopAgent({
|
|
137
|
-
model: openai
|
|
127
|
+
model: 'openai/gpt-5.4',
|
|
138
128
|
tools: {
|
|
139
129
|
generateImage: openai.tools.imageGeneration({
|
|
140
130
|
partialImages: 3,
|